Upgrade to Pro — share decks privately, control downloads, hide ads and more …

iOS TDD 무엇을 어떻게 왜

iOS TDD 무엇을 어떻게 왜

WWDC 2022 Watch Party 에서 공유한,
iOS 개발자가 TDD를 실천하는 방법

Avatar for SungdooYoo

SungdooYoo

June 07, 2022
Tweet

Other Decks in Programming

Transcript

  1. 시안만 봤을 땐 어떤 스펙이든 단순해보인다 세 개의 좌표를 입력받아

    이 좌표로 만들어지는 삼각형이 정삼각형인지, 이등변삼각형인지, 부등변삼각형인지 판단하고 그 결과를 출력하시오 5
  2. 6

  3. 테스트케이스 작성 = 숨은 복잡도 발굴 테스트케이스 작성 전에는 모든

    프로그램이 실제보다 간단해보인다. 테스트케이스가 만들어저야 일정산정이 가능하다. 개발을 하면서 테스트케이스를 추가하면, 소통비용이 많이 든다. 테스트케이스 작성을 위해 새로운 코딩기법을 배울 필요는 없다. 종이와 펜만 있어도 시작 할 수 있다. 좋은 TC 작성에는 꾸준한 훈련, 상상력, 경험이 필요하다. QA 엔지니어들이 어떤 도구를 쓰고 어떤 고민과 훈련을 하는지 살펴보자 7
  4. 빌드시간 줄이기 테스트는 즉시 실행될 수 있어야 함 TDD 는

    먼저 실패하는 테스트를 작성하고, 막무가내로 성공시키는 구현을 만들, 리팩토링을 하면서 계속해서 빌드& 테스트를 실행시키는 방식 하나의 스펙을 만드는데 수십번의 빌드가 필요한 방식 한 번의 빌드 시간이 길다면 현실성이 없음 빌드시간을 최대 30 초 이내로 줄여야 TDD 는 현실적 방안 1: 모듈화 방안 2: 의존성 미리 빌드, 방안 3: Library Test 활용 10
  5. 종이에 시작하기 모듈화, 빌드시간 단축등의 기반환경이 만들어지지 않았다면, 만들어지는 사이

    에 테스트 케이스 작성법을 연마하자. 요구사항을 입력과 출력으로 쪼개는 연습을 하자. 영어 공부를 할 때, 주어와 목적어를 찾아 밑줄을 쳤던 것처럼. 종이에 적힌 테스트케이스는, 설령 자동화된 테스트에 활용되지 못하더라도, 수동 테스트를 할 때, 커밋메시지를 쓸 때, PR 을 날릴 때 활용 될 수 있다. 11
  6. 100% 의 함정에 빠지지 않기 100% 가 아니면 의미 없다는

    착각에 빠지기 쉽다. 100% SwiftUI, MVVM, Swift 등등 ... 그것이 무엇이든, 한 번에 적용하려하면 부작용이 일기 마련 내가 할 수 있는 것부터, 손에 닿는 것 부터 차근차근 실천해 나가자 13
  7. 이벤트 로깅 입력과 출력이 명확함 회사의 명운을 좌우할 수도 있음

    해당 스펙에 대한 개괄적 이해가 가능함 평소에 눈에 보이지 않기에 누락 될 가능성 15
  8. 이벤트 로깅 func test버튼_누르면_로깅() { given { viewModel = SampleViewModel(data:

    "Hello") } when { createEvents([.next(0, Void())], to: viewModel.buttonClicked) } then { XCTAssert(resultEventNames == [.next(0, "clicked__Hello")]) } } 16
  9. 접근성 경험 입력과 출력이 명확함 해당 화면에 대한 개괄적 이해가

    가능함 평소에 눈에 보이지 않기에 누락 될 가능성 17
  10. 접근성 경험 func testMyViewController() async throws { let viewController =

    MyViewController() await viewController.doSomeBusinessLogic() XCTAssert( viewController.axSnapshot() == """ ------------------------------------------------------------ The question is, The answer to the Life, the Universe, and Everything button ------------------------------------------------------------ The answer is, 42 button ------------------------------------------------------------ """ ) } 18
  11. 19

  12. 맺는 말 테스트가능성도 기능입니다. 테스트코드는 돈을 벌어줍니다. 테스트하는데 5 일중

    1 일을 쓰고 있었다면, 테스트 비용을 획기적으로 줄이 는 것은 그만큼의 인건비를 벌어오는 일 21
  13. 22

  14. 참고자료 Test Driven Development Building Faster With Xcode 뱅크샐러드 iOS

    팀이 숨쉬듯이 테스트코드 짜는 방식 3 부작 AxSnapshot Cocoapods Binary Cache XCTest 소요시간 단축하기 접근성 지원, 개발자의 빠른 성장을 도와줍니다 23