[TDD] 방법론에 대한 순서

RED - GREEN - Refactor

로 순서를 요약할 수 있다.

  1. RED
    • 실패하는 테스트의 작성
    • 추가하고자 하는 새로운 기능 혹은 개선사항을 반영해야한다.
      • 아직 구현되지 않은 코드의 동작을 지정하는 테스트 케이스
      • 기능 명세를 테스트 코드로 먼저 작성하는 것을 말합니다.
    • 단순한 더하기 계산기를 만들어보자
    import static org.junit.Assert.*;
    import org.junit.Test;
    
    public class CalculatorTest {
    
        @Test
        public void testAddition() {
            Calculator calculator = new Calculator();
            int result = calculator.add(2, 3);
            assertEquals(5, result);
        }
    }
    • 해당 테스트는 아직 구현부가 없기에 무조건적으로 실패한다.
    • 구현하기전에 미리 필요한 최소한의 클래스와 메서드를 임의로 작성해놓는 등
    • 껍데기만 만들어 놓는 것이다.
  1. GREEN
    • 테스트를 통과시키기 위한 최소한의 코드의 작성
    • 신속하게 테스트를 통과하는 것이 궁극적인 목표다
    • 코드의 최적화는 신경 쓰지 않아야 한다.
    • 더하기 계산기의 구현
    public class Calculator {
        public int add(int number1, int number2) {
            return number1 + number2;
        }
    }
    • 위 코드는 너무 간단해서 사실 구현은 이걸로 끝이 되지만
    • 실제 비즈니스 로직을 반영할 시, 비즈니스 로직의 최적화를 고려하지 않고, 테스트를 통과하기 위한 코드가 되어도 상관없다
  1. Refactor
    • 테스트 통과 이후에 코드를 리팩터링한다.
      1. 코드의 중복
      1. 유지보수성의 고려

      등의 작업을 포함할 수 있다.

    • 기능을 변경하지 않고 내부 구조를 개선할 수 있다.

오해할 수 있는 사항 정리

  1. RED 단계에서 모든 테스트코드를 정의해놓고 시작해야하나?
    • TDD 의 핵심은 작은 단계 로서 개발을 진행하는 것이다.
    • 한 번에 하나의 기능 또는 개선 사항에 대해 하나의 테스트를 작성하고 개발을 진행하는 것이다.
    • 예를 들어 주문 기능의 경우
      • 단순히 주문이 성공해야하는 테스트 케이스를 작성후
      • 구현
      • 리팩터
      • 주문이 실패해야하는 테스트 케이스 작성 후
      • 실패시 성공하도록 수정
      • 리팩터
    • 의 과정을 거치면서 코드를 단단하고 견고하게, 또는 개발자의 자신감 을 부여해주는 역할을 하는 것이다.
  1. GREEN 단계에서는 어느 정도까지 코드를 짜야하는건가?
    • 핵심은 빠른 피드백과 빠른 기능을 구현이다.
    • 시스템에 필요한 것만 구현하고, 미래에 필요하거나 최적화가 필요하다는 등의 행위는 필요하지 않다.
    • 예를 들어,
      • 주문 기능의 경우 별도 동시성을 고려하는 코딩이 필요하다.
      • 하지만 주문 테스트를 작성시 동시성을 고려하지 않는 단순 성공, 실패만을 체크하는 테스크 코드의 경우에는
      • REFACTORGREEN 에서 고려치 않는 것이다.

Uploaded by N2T