정의
- 기능을 추가할 때, 먼저 테스트 코드를 짠다. 그 후, 테스트를 통과할 수 있는 가장 간단한 코드를 작성하고 리팩토링을 거치며 코드를 완성해간다.
TDD의 장점과 단점
장점
1. 코드 품질 향상
반복적인 테스트를 통해 오류를 해결하기 때문에 유지관리와 확장이 용이한 코드를 만들 수 있다.
2. 개발 속도 향상
장기적으로 보았을 때, 테스트를 먼저 구현함으로써 코드를 고도화 시키고 오류를 조기에 해결할 수 있어 수정이 빠르다.
3. 협업에 많은 도움이 됨
개발 단계에서 이미 테스트 코드가 존재하므로 참여하는 팀원들이 해당 코드에 대해 잘 이해할 수 있다.
단점
1. 초기 개발 속도 하락
먼저 테스트를 진행하기 때문에, 이를 위한 초기 투자 시간이 필요하다.
2. 테스트 작성 난이도
자신이 요구사항을 모두 테스트 할 수 있는지 확신이 없는 기능의 테스트 코드를 구현하는 경우, 이에 어려움을 느낄 수 있다.
예시 코드 작성(3가지 방법)
- 덧셈을 하는 코드를 작성해보자.
1. 가짜 구현
최대한 빨리 테스트를 통과하는 것. 하나의 구체적인 예에서 일반화를 함으로써, 불필요한 고민으로 혼동되는 일을 예방할 수 있기 때문에 복잡한 코드일 수록 좋은 방법이다.
@Test void 입력_받은값_더하기(){ final int result = plus(3, 5); assertThat(result.isEqualTo(8)); }
- 테스트를 통과할 수 있을 정도로 기능 구현
public int plus(int a, int b){ return 8; }2. 삼각측량
삼각 측량은 테스트 주도로 추상화된 과정을 일반화하는 과정이다. 삼각 측량 방법은 테스트 예시가 2개 이상일 때에만 추상화를 해야 한다.
@Test void 입력_받은값_더하기(){ final int result1 = plus(3, 5); final int result2 = plus(5, 5); assertThat(result1.isEqualTo(8)); assertThat(result2.isEqualTo(10)); }3. 명백하게 구현하기
public int plus(int a, int b){ Scanner s = new Scanner(System.in); int a = s.nextInt(); int b = s.nextInt(); return a+b; }