TDD(Test-Driven Development) 테스트 주도 개발

민지의 회고록·2023년 11월 2일

정의

  • 기능을 추가할 때, 먼저 테스트 코드를 짠다. 그 후, 테스트를 통과할 수 있는 가장 간단한 코드를 작성하고 리팩토링을 거치며 코드를 완성해간다.

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;
}
profile
민지가 공부한 내용을 회고합니다~~

0개의 댓글