자바/리팩토링
[TDD] 방법론에 대한 순서
OverTheHorizon3410
2023. 11. 6. 20:36
RED - GREEN - Refactor
로 순서를 요약할 수 있다.
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); } }
- 해당 테스트는 아직 구현부가 없기에 무조건적으로 실패한다.
- 구현하기전에 미리 필요한 최소한의 클래스와 메서드를 임의로 작성해놓는 등
- 껍데기만 만들어 놓는 것이다.
GREEN
- 테스트를 통과시키기 위한 최소한의 코드의 작성
신속하게 테스트를 통과
하는 것이 궁극적인 목표다
- 코드의 최적화는 신경 쓰지 않아야 한다.
- 더하기 계산기의 구현
public class Calculator { public int add(int number1, int number2) { return number1 + number2; } }
- 위 코드는 너무 간단해서 사실 구현은 이걸로 끝이 되지만
- 실제 비즈니스 로직을 반영할 시, 비즈니스 로직의 최적화를 고려하지 않고, 테스트를 통과하기 위한 코드가 되어도 상관없다
Refactor
- 테스트 통과 이후에 코드를 리팩터링한다.
- 코드의 중복
- 유지보수성의 고려
등의 작업을 포함할 수 있다.
- 기능을 변경하지 않고 내부 구조를 개선할 수 있다.
- 테스트 통과 이후에 코드를 리팩터링한다.
오해할 수 있는 사항 정리
RED
단계에서 모든 테스트코드를 정의해놓고 시작해야하나?- TDD 의 핵심은 작은 단계 로서 개발을 진행하는 것이다.
- 한 번에 하나의 기능 또는 개선 사항에 대해 하나의 테스트를 작성하고 개발을 진행하는 것이다.
- 예를 들어 주문 기능의 경우
- 단순히 주문이 성공해야하는 테스트 케이스를 작성후
- 구현
- 리팩터
- 주문이 실패해야하는 테스트 케이스 작성 후
- 실패시 성공하도록 수정
- 리팩터
- 의 과정을 거치면서 코드를 단단하고 견고하게, 또는 개발자의
자신감
을 부여해주는 역할을 하는 것이다.
GREEN
단계에서는 어느 정도까지 코드를 짜야하는건가?- 핵심은 빠른 피드백과 빠른 기능을 구현이다.
- 시스템에 필요한 것만 구현하고, 미래에 필요하거나 최적화가 필요하다는 등의 행위는 필요하지 않다.
- 예를 들어,
- 주문 기능의 경우 별도 동시성을 고려하는 코딩이 필요하다.
- 하지만 주문 테스트를 작성시 동시성을 고려하지 않는 단순 성공, 실패만을 체크하는 테스크 코드의 경우에는
REFACTOR
나GREEN
에서 고려치 않는 것이다.
Uploaded by N2T