TDD / BDD

단위 테스트 (Unit Testing)

  • 단위 테스트는 각각 하나의 행동에 대해서만 테스트를 구행하고, 서로 독립적이어야 한다.

  • 모듈이나 객체를 구성하는 작은 단일 함수 크기에 집중하여 테스트 자체를 단순화하고 빠르게 작성, 수행한다.

  • 단위 테스트로 변경과 상관없는 구현 코드 동작이 이상없다고 신뢰할 수 있다.

  • 단위테스트는 네트워크, DB 등에 의존되지 않아야 한다.

TDD (Test-Driven Development)

  • 짧은 개발 서클의 반복에 의존하는 소프트웨어 개발 프로세스

  • 개발자는 요구되는 새로운 기능에 대한 자동화된 테스트케이스 작성

  • 해당 케이스를 통과하는 가장 짧고 가독성이 좋고 유지보수성이 뛰어난 코드 작성

  • 일단 테스트 통과하는 코드를 작성하고 상황에 맞게 리팩토링하는 과정을 거침

  • 말 그대로 테스트가 코드 작성을 주도하는 개발 방식

TDD Process

  1. 테스트 코드 작성 (Add a test) 새 기능을 추가하기 전 테스트 케이스를 먼저 작성한다. 개발자는 해당 기능의 요구사항과 명세를 이해하고, 사용자 케이스, 스토리 등과 함께 이해해야 한다. 이는 개발자가 코드를 작성하기 전 요구사항에 더 집중할 수 있도록 도와준다.

  2. 테스트 코드 수행 (Run all tests and see if new one fails) 새 기능 추가 시 기존에 잘 되던 기능이 작동하지 않을 수 있는데, 이를 방지하기 위해 테스트 코드를 작성한다. 새 기능 추가 시 테스트 코드를 작성하여, 새 기능과 기존 기능이 잘 작동하는지 테스트 케이스를 통해 확인할 수 있다.

  3. 코드 리펙토링 (Refactor code) 가독성, 코딩 컨벤션, 네이밍, 예외처리 등을 고려하여 유지보수, 확장하기 좋은 코드를 작성하기 위해 리펙토링 한다.

BDD (Behavior-Driven Development)

  • TDD에 파생된 프로그래밍 개발 프로세스

  • 구현(Implementation)을 테스트하는 것이 아니라, 동작(Behavior)을 테스트하는 것

  • 테스트 케이스 자체가 요구사항이 되도록 하는 방식

  • 테스트 코드를 결합 테스트, 시나리오 테스트까지 확장하여 각각에 해당하는 문서를 대체.

  • 어떤 것을 테스트할지, 얼마나 할지 등 테스트에 집중

Last updated