TDD (Test-Driven Development)
소프트웨어 개발 방법론 중 하나로 코드를 작성하기 전에 테스트 코드를 먼저 작성하고, 그 테스트를 통과하는 코드를 구현하는 방식이다.
TDD는 코드의 품질을 높이고 버그를 줄이기 위한 강력한 방법론으로 코드 설계와 테스트를 동시에 개선할 수 있다.
TDD 방식의 핵심은 "테스트가 코드를 이끈다" 는 원칙이다.
테스트를 먼저 작성하고, 그 테스트를 통과하기 위한 최고한의 코드를 작성한 후 리팩토링을 통해 개선하는 과정을 반복하게 된다.
TDD의 3단계 (Red-Green-Refactor)
Red : 실패하는 테스트 작성
Green : 테스트를 통과하는 최소한의 코드 작성
Refactor : 중복 제거, 코드 개선, 최적화
Red- 실패하는 테스트 작성
테스트 작성 : 우선 구현할 기능에 대한 테스트 코드를 작성한다. 이 때는 테스트를 실패할 수 밖에 없는 상태로 작성해야 한다. 왜냐하면 아직 그 기능이 구현되지 않았기 때문이다.
테스트는 가능한 작은 단위로 함수나 클래스가 특정한 동작을 하는지를 검증하는 코드이다.
이 단계에서 테스트가 빨간색(실패)이어야 한다. 이 상태에서 기능 구현을 시작한다.
public class CalculatorTest {
@Test
public void testAdd() {
Calculator calculator = new Calculator();
int result = calculator.add(2, 3);
assertEquals(5, result); // 아직 add() 메서드가 없으므로 실패함
}
}
여기서 Calculator 클래스와 add() 메서드는 아직 구현되지 않았기 때문에 이 테스트는 실패한다.
Green - 최소한의 코드 작성
기능 구현 : 테스트를 통과할 수 있는 최소한의 코드를 작성한다. 이 단계에서는 가능한 간단하게 구성하여 테스트가 성공하게 만든다. 최대한 빠르게 테스트를 통과하는 것에 집중한다.
이 때는 코드를 완벽하게 최적화하거나 깨끗하게 작성하는 것이 목표가 아니라 테스트를 통과히키는 것에만 집중해야 한다.
public class Calculator {
public int add(int a, int b) {
return a + b;
}
}
이제 Calculator 클래스와 add() 메서드를 구현했으므로, testAdd() 테스트가 성공하게 된다.
Refactor - 코드 개선
리팩토링 : 테스트가 통과하면 이제 코드를 개선하는 단계이다. 코드 중복을 제거하고 코드의 가독성, 유지보수성을 높이는 방향으로 리팩토링을 진행한다. 이 때 중요한 점은 리팩토링 중에도 기존 테스트들이 모두 통과해야 한다는 것이다.
리팩토링 과정에서 코드를 최적화하고, 더 좋은 설계 방식으로 개선할 수 있다.
TDD를 잘 활용하기 위한 팁
- 작은 단위로 시작
테스트는 가능한 한 작은 단위로 작성하는 것이 좋다. 작은 기능부터 시작하여 점차 큰 기능으로 확장해나가는 방식이 효과적이다. - 테스트는 독립적이어야 한다
각 테스트는 서로 독립적으로 동작해야 하며 다른 테스트에 영향을 주지 않도록 작성해야 한다. - 실제 코드와 테스트 코드를 분리
테스트 코드는 실제 코드와 별도로 관리되며 테스트 코드가 실제 로직에 종속되지 않도록 작성해야 한다. - 테스트는 가능한 명확하게 작성
테스트는 다른 개발자가 봤을 때도 어떤 기능을 테스트하는지 쉽게 이해할 수 있도록 명확하게 작성해야 한다. 테스트 코드도 코드 품질의 일부분이기 때문에 가독성이 중요하다.
처음 TDD를 접하면 '왜 테스트를 먼저 작성해야 할까?'라는 의문을 가질 수 있다. 하지만 실제로 적용해보면 테스트를 먼저 작성함으로써 자신이 구현하려는 기능에 대해 더 깊이 생각하게 되고 코드가 테스트 가능하도록 설계되기 때문에 자연스럽게 코드 품질이 향상된다.
TDD는 시간이 지나면서 버그를 줄이고 코드 유지보수를 용이하게 만들어준다.
'코딩 규칙과 방법들' 카테고리의 다른 글
[MVC패턴] 역할을 어떻게 나눠야할까? (0) | 2024.10.29 |
---|---|
원활한 협업을 위한 '커밋 메시지' 작성 규칙 (0) | 2024.10.22 |
Code를 Clean하게 작성하는 방법! (1) | 2024.10.22 |
MVC 패턴이 무엇일까? (3) | 2024.10.22 |