https://sundaland.tistory.com/309
테스트 주도 개발 (Test-Driven Development)은 S/W 개발 방법론 중 하나로, 코드를 작성하기 전에 테스트 케이스를 먼저 작성하는 방식이다.
TDD는 개발자가 작성한 코드가 정확하게 작동하는지 보장하기 위해 테스트를 중심으로 개발 프로세스를 조직한다.
이 방법론은 S/W의 높은 품질을 유지하고, 코드의 유지보수성을 향상시키는데 매우 유용하다.
TDD의 기본 사이클 (Red-Green-Refator)
보통 아래의 세 가지 단계를 반복하며 진행된다.
1. Red (실패하는 테스트 작성)
개발자는 먼저 테스트 케이스를 작성한다. 이 테스트는 아직 작성되지 않은 기능에 대한 것이므로, 실행 시 실패하게 된다.이 단계에서의 실패는 코드가 아직 요구사항을 충족하지 못한다는 것을 의미한다.
2. Green (코드 작성 및 테스트 통과)
테스틑 통과시키기 위해 필요한 최소한의 코드를 작성한다. 목표는 테스트가 성공하도록 하는 것이며, 이 단계에서는 간단하게 테스트를 통과시키는 데 집중한다. 코드가 정상적으로 작동해 테스트가 통과되면, 초록색 신호가 나타난다.
3. Refactor (코드 개선)
테스트가 통과된 후, 코드의 품질을 개선하기 위해 리팩토링을 수행한다. 이 과정에서 코드의 구조를 개선하거나 중복을 제거하며, 성능을 최적화할 수도 있다. 중요한 점은 리팩토링 중에도 모든 테스트가 계속 통과해야만 한다.
이 사이클을 반복함으로써, 개발자는 점진적으로 기능을 추가하면서 코드의 정확성과 품질을 유지할 수 있다.
TDD 장점
- 버그 예방 : TDD를 통해 코드 작성 전에 명확한 요구사항을 정의하고, 테스트를 통해 버그를 조기에 발견할 수 있다. 이는 유지보수 비용을 줄이고, 코드의 신뢰성을 높이는 데 기여한다.
- 문서화 : 테스트 케이스 자체가 사용법과 의도를 문서화하는 역할을 한다. 다른 개발자들이 코드의 기능을 이해하는데 큰 도움이 된다.
- 디자인 개선 : TDD는 코드의 설계를 개선하는데 도움을 준다. 테스트 가능한 작은 단위로 코드를 작성하는 습관을 통해, 자연스럽게 모듈화된 설계가 이루어지면, 코드의 재사용성과 유지보수성이 향상된다.
- 빠른 피드백 : 테스트가 자동화되어 있기 때문에, 코드를 변경할 때마다 즉각적으로 피드백을 받을 수 있다. 이는 개발 속도를 높이고, 안정적인 S/W 개발을 가능하게 한다.
TDD 단점
- 시간 소모 : 초기에는 테스트 케이스를 작성하는데 시간이 많이 들 수 있다. 이로 인해 개발 속도가 느려질 수 있지만 , 장기적으로는 코드 품질과 유지보수성을 높이는데 기여한다.
- 초기 학습 곡선 : TDD를 처음 접하는 개발자들에게는 새로운 사고방식과 프로세스에 익숙해지는데 시간이 필요하다. 특히, 테스트 작성이 익숙하지 않은 개발자에게는 어려움이 있을 수 있다.
- 테스트 유지보수 : 코드가 변경되면 관련된 테스트 케이스도 함께 수정해야 한다. 이는 테스트 코드의 유지보수 부담을 증가시킬 수 있다.
TDD의 예시
▼ Red 단계 : 실패하는 테스트 작성
@Test
void testAdd() {
Calculator calculator = new Calculator();
int result = calculator.add(2, 3);
assertEquals(5, result);
}
▼ Green 단계 : 최소한의 코드 작성
class Calculator {
int add(int a, int b) {
return a + b;
}
}
TDD는 S/W 개발의 품질일 높이고, 개발자가 작성한 코드가 예상대로 작동하는지를 지속적으로 확인할 수 있게 해주는 강력한 도구이다. 초기에는 시간과 노력이 더 필요할 수 있지만, 장기적으로 보면 유지보수성을 높고 버그가 적은 S/W를 개발하는데 큰 도움이 된다.
'테스트 주도 개발 (TDD)' 카테고리의 다른 글
Mockito (0) | 2024.08.28 |
---|---|
단위 테스트 (Unit Test) (0) | 2024.08.07 |
JUnit 5 (0) | 2024.08.07 |