테스트주도개발

MIN·2025년 5월 28일

weekly

목록 보기
23/31

테스트 주도 개발(Test-Driven Development, TDD)은 소프트웨어 개발 방법론
실제 코드를 작성하기 전에 테스트 코드를 먼저 작성하는 방식으로
테스트가 개발 과정을 주도하는 핵심적인 역할을 하게된다.

TDD를 이용하여 개발을 하게된다면

실패하는 테스트 작성 (Red): 구현할 기능에 대한 테스트 코드를 먼저 작성, 아직 기능이 없으므로 테스트 실패
테스트 통과 코드 작성 (Green): 실패한 테스트를 통과시킬 수 있는 최소한의 코드 작성
코드 리팩토링 (Refactor): 테스트가 모두 통과하는 상태에서 코드 구조, 가독성, 효율성 개선

이 과정을 반복하게 된다.


TDD의 핵심, 테스트의 종류

TDD는 주로 단위 테스트를 중심으로 이루어지지만, 소프트웨어의 복잡성을 완전히 해결하려면 다양한 수준의 테스트가 필요함

단위 테스트 (Unit Test)

목적: 소프트웨어를 구성하는 가장 작은 단위(함수, 클래스)가 독립적으로 올바르게 작동하는지 검증해야함
대상 코드의 내부 구현을 명확히 알고 작성하므로 화이트박스 테스트라고도 불림

특징

  • 독립성: 테스트 대상 단위 코드 외의 외부 의존성(네트워크, 데이터베이스 등)은 철저히 배제해야 하고
    가짜 객체 사용 (Stub, Mock): 외부 의존성을 배제하기 위해 실제 객체 대신 가짜 객체(stub, mock, fake, spy 등)를 사용 하면된다.
  • Stub: 외부 의존성이 특정 값을 반환하도록 흉내 내는 코드로 이해하면됨
  • Mock: stub의 기능에 더해, 테스트 대상 코드가 올바른 인자로 몇 번 호출되었는지 등을 검증하는 기능
  • TDD의 핵심: TDD 과정에서 가장 먼저 작성되고 반복되는 테스트 유형

통합 테스트 (Integration Test)

목적: 단위 테스트로 개별적으로 검증된 요소들을 결합하고, 서로 상호작용 할 때 에러사항이 없는지 검증해야 함
특징

  • 계층적 위치: 단위 테스트와 인수 테스트(Acceptance Test)의 중간 단계
  • 외부 종속성: 경우에 따라 네트워크나 데이터베이스와 같은 실제 외부 종속성을 사용하기도 하고, 필요한 경우 mock 사용

0개의 댓글