원하는 것은 뭐든지

[TDD]Test-Driven-Development 테스트 주도개발 본문

개발/방법론

[TDD]Test-Driven-Development 테스트 주도개발

댕로그😏 2024. 3. 22. 23:57
반응형

About

TDD가 무엇인 알아본다.

목차

TDD가 무엇인가

TDD의 장점

TDD의 단점

본론

TDD가 무엇인가

제목에도 설명이 되어있듯 테스트를 주도적으로 하는 개발 방법론이다.

보통의 개발방법론과 다르게 테스트를 먼저 시작한다.

구현을 하고 테스트하는 것이 아니라 테스트를 하고 구현을 한다.

이해하기 쉽지 않다. 솔직히 명확히 내가 이해하고 있는 것인지도 모르겠다. 코드가 없는데 어떻게 테스트를 하란 말인가?

 

예시를 들어 설명을 해보겠다.

곱셈 기능을 TDD로 구현해 보자

public class CalculatorTest {
    @Test
    void multiple(){
        int result = Calculator.multiple(2,4);
        assertEquals(8,result); //assertEquals(예상 값, 실제값)
    }
}

 

냅다 위와 같이 구현을 하면 당연히 Calculator 클래스가 빨개져 있을 것이다. 

클래스를 생성하고 multiple 메서드를 작성해서 컴파일 에러를 없애보자.

public class Calculator {
    public static int multiple(int x, int y){
        return 0;
    }
}

테스트를 실행하면 예상값과 다르기 때문에 테스트를 실패하게 된다.

public static int multiple(int x, int y){
    return 8;
}

리턴값을 8로 바꿔주면 테스트를 성공한다.

@Test
void multiple(){
    int result = Calculator.multiple(2,4);
    assertEquals(8,result); //assertEquals(예상 값, 실제값)
    int result2 = Calculator.multiple(1,4);
    assertEquals(4,result2);
}

검증코드를 추가하고 다시 테스트를 실행하면

public class Calculator {
    public static int multiple(int x, int y){
        return x*y;
    }
}

multiple 메서드를 다음과 같이 바꿔주고 다시 실행하면 테스트에 성공한다.

 

이런 식으로 테스트를 구현하고 에러를 없애면서 테스트를 통과시키기 위해 개발을 진행한다.

테스트를 성공할 만큼만 개발하고 테스트를 추가하고 다시 테스트를 성공할 만큼만 개발하고 이 과정을 반복하면서 점진적으로 기능을 완성해 나가는 것이다.

 

TDD의 장점

그렇다면 이 TDD의 장점은 무엇일까?

  1. 디버깅 시간을 단축할 수 있다.
    • 유닛테스트(단위 테스트)의 이점과 동일
    • 에러나 출력 결과가 이상하다면 모든 레이어를 디버깅해야 하지만, TDD의 경우 쉽게 찾아낼 수 있다.
  2. 제대로 된 객체지향 코드 생산이 가능하다.
    • 기능별로 확실한 모듈화가 보장된다.
  3. 유지보수의 용이함
    • 기능에 대해 테스트를 작성하고 그 테스트들은 코드의 동작을 명확하게 설명할 수 있다. 그렇기 때문에 다른 개발자나 본인이 먼 훗날 다시 봤을 때도 쉽게 이해할 수 있다.
    • 코드의 변경이나 추가를 할 때에도 안전성을 제공한다.

TDD의 단점

  1. 생산성이 낮아진다.
    • 모든 코드가 2개 이상의 코드를 짜야한다.
    • 테스트 코드가 계속해서 수정되면서 늘어난다.
  2. 개발방법의 변화
    • 기존에 TDD를 사용하지 않던 개발자들은 하루아침에 개발방법을 바꾸는 게 어려움

결론

나는 사실 개발을 해왔다고 하기에도 어려운 개발자이기 때문에 오히려 TDD를 잘 흡수할 수 있지 않을까 생각한다.

TDD를 잘 익혀서 내 것으로 만들어 봐야겠다.

 

참고

테스트 주도 개발 시작하기

 

 

 

반응형
Comments