KoreaMango 나무

[iOS] Unit Test - 단위 테스트 어떻게 하는건데.. (4) 본문

iOS/Unit Test

[iOS] Unit Test - 단위 테스트 어떻게 하는건데.. (4)

KoreaMango 2022. 7. 12. 17:34

[iOS] TDD

TDD (테스트 주도 개발)

테스트 주도 개발 (Test-driven development TDD) 은 매우 짧은 개발 사이클을 반복하는 소프트웨어 개발 프로세스 중 하나이다. 개발자는 먼저 요구사항을 검증하는 자동화된 테스트 케이스를 작성한다. 그런 후에, 그 테스트 케이스를 통과하기 위한 최소한의 코드를 생성한다. 마지막으로 작성한 코드를 표준에 맞도록 리팩토링 한다. - 위키백과 -

 

TDD(Test Driven Development)는 개발을 하는 데에 있어서 테스트가 주가 되어 개발을 이끌어나간다는 의미로 소프트웨어를 개발하는 방법론 중에 하나입니다. 지금까지 우리가 유닛 테스트를 작성해온 것들을 돌아보면 모두 이미 작성된 메서드에 대해서 테스트를 만들어주었는데요, 테스트 주도 개발은 그 반대로 테스트를 작성하면서 코드를 완성시켜나가는 방법론입니다.

 

테스트를 작성하면서 코드를 완성시키게 되면 우리는 큰 단위의 문제를 작은 단위로 나누게 됩니다. 작은 단위로 코드를 만들기 시작하여 큰 단위로 나아가게 되는 것이지요. 그리고 이 과정에서 지속적인 피드백을 통해 더 나은 방향으로 코드를 완성시키게 되는 것입니다.

 

 

위 그림은 TDD를 가장 단순하게 표현하고 있는 그림입니다. TDD는 Red, Green, Refator 3가지 영역으로 나누어서 진행됩니다. 실패하는 테스트를 작성해보고, 이 테스트를 통과하는 코드를 만들어보고, 테스트 통과를 유지하면서 구조적으로 더 나은 코드를 연구하고 수정하는 것을 반복합니다. 그리고 이 과정을 반복하면서 더 나은 코드를 만들어나가는 것이지요.

  • Red: 실패하는 테스트를 작성하는 구간
  • Green: 실패한 테스트를 통과하기 위해 최소한의 변경을 하여 테스트에 성공하는 구간
  • Refactor: 테스트의 성공을 유지하면서 코드를 더 나은 방향으로 개선해나가는 구간

 

TDD의 장단점?

TDD의 장점

  • 테스트를 항상 통과하면서 코드를 작성해나가면 당연히 더 안전한 코드를 작성할 수 있다.
  • 테스트를 통과하는 코드를 작성하기 위해 재사용성과 의존성에 대해서 고민하여 보다 의존성이 낮은 코드를 작성할 수 있습니다.
  • 유지 보수가 용이하다. 아무래도 테스트가 잘 작성되어 있다면 코드를 수정하는 일이 덜 두렵게 느껴질 것 같습니다.

TDD의 단점

  • 치명적인 단점은 개발 속도입니다. 모든 돌 다리를 두드려보고 건너면 당연히 안전함은 보장되겠지만 매번 그 과정이 있다면 당연히 진행 속도는 저하될 것입니다. 

 

코드를 작성하고 테스트하면 위험한 이유

테스트 코드를 염두해 두지 않고 무턱대고 코드부터 작성하게 되면 테스트 불가능한 코드를 작성하게될 가능성이 높아진다.

TDD 순서

  1. 원하는 함수를 만든다.
  2. given(입력 값), when(원하는 함수 호출), then(결과 예측) 순서로 테스트 케이스를 만든다.
  3. Red → Green → Refactoring 하며 테스트 케이스를 수정

🙏🏻 Ref

https://yagom.net/courses/unit-test-작성하기/