////
Search
Duplicate
☁️

Chapter 17. 테스트와 개발 방법론

1. TDD

TDD는 Red, Green, Refactor라고 하는 세 단계를 거쳐 소프트웨어를 개발하게 된다.
Red 단계
이 단계에서는 아직 구현되지 않은 기능을 테스트하는 케이스를 작성한다. 즉 명세에 대한 테스트를 먼저 작성한다.
이 시점에서 테스트는 실패할 수 밖에 없기 때문에 이 단계는 테스트가 실패한다는 의미를 담아 Red 단계라고 부른다.
Green 단계
두 번째 단계인 Green 단계에서는 테스트를 통과하기 위한 최소한의 코드를 작성한다.
이 단계에서는 코드의 품질을 신경쓰지 않는다. 오롯이 요구사항에 맞는 최소한의 기능을 개발해 테스트를 통과시키는 데만 집중한다.
Refactor 단계
여기서는 Green 단계에서 작성한 코드를 리팩토링하며 Blue 단계라고 불리기도 한다.
여기서는 코드의 가독성과 유지보수성을 향상하는데 집중한다.
이때 중요한 점은 기능은 유지된 상태에서 코드의 구조만 변경해야 한다는 점이다. 따라서 테스트에 통과하는 상태를 유지해야 하기 때문에 테스트가 보장된 상태에서 이뤄진다.
이는 테스트를 강제함으로써 설계에 도움을 주어 생산성을 유지할 수 있게 하지만 특정 시점이 되기 전까진 생산성이 그리 높지 않다는 단점이 존재한다.
이 역시 모든 문제를 해결해주지 않으며 무조건 좋은 방법론이 아니다.

2. BDD

TDD에서 파생된 소프트웨어 개발 방법론으로 TDD에 사용자 행동이라는 가치를 덧붙이고 이를 강조한다.
따라서 BDD에서는 사용자 행동을 행동 명세같은 요구사항으로 먼저 만들고 이것이 테스트로 표현될 수 있게 만든다. 즉 테스트가 요구사항에 관한 명세가 될 수 있게 만드는 것이다.
BDD는 TDD에 테스트 대상을 어떻게 테스트 해야 하는지 설명을 추가한 것이다. 즉 테스트 대상, 객체의 책임을 어떻게 검증하고 확인할 지가 추가된 개발 방법론이다.
이때문에 저자는 TDD와 DDD의 조합이라고 얘기한다. 때문에 BDD는 DDD의 속성인 이해관계자 간의 협업 강조 등을 가지고 있다.
더불어 BDD는 공통된 언어를 바탕으로 요구사항 문서가 사용자의 스토리 기반으로 작성되어야 한다는 것을 강조한다.
정리하자면 BDD에서 강조하는 것은 크게 4가지다.
개발자와 이해관계자 간의 협업
행동 명세(사용자 스토리 기반의 요구사항) 작성
행동 명세의 테스트화
테스트의 문서화