테스트 주도 개발은 소프트웨어 개발 방법론 중 하나로, 실제 코드를 작성하기 전에 테스트 코드를 먼저 작성하는 방식이다. 이 접근법은 작은 단위의 테스트를 작성하고, 그 테스트를 통과하기 위한 최소한의 코드를 구현하는 과정을 반복한다.
이를 통해 요구사항을 명확히 하고, 코드 품질을 향상시키며, 버그를 조기에 발견할 수 있다.
ㅇ 기본 사이클
TDD는 다음과 같은 세 가지 단계를 반복하는 짧은 개발 사이클을 따른다.
- Red 단계
실패하는 테스트를 작성한다. 아직 기능이 구현되지 않았기에 테스트는 실패해야 한다. - Green 단계
테스트 통과를 위한 최소한의 코드를 작성한다. 완벽한 구현보다 테스트 통과에 초점을 맞춘다. - Refactor 단계
코드와 테스트를 리팩토링하여 품질을 개선한다. 중복 제거, 가독성 높이기 등 최적의 설계를 추구한다.
ㅇ 장점
- 품질 향상
테스트를 먼저 작성함으로 요구사항을 정확히 이해하고 예상치 못한 버그를 줄일 수 있다. - 디자인 개선
작은 단위로 개발하고 리팩토링하므로 코드 구조와 설계가 개선된다. - 유지 보수성 증가
자동화된 테스트 스위트를 통해 코드 변경 시 기존 기능이 정상적으로 동작하는지 확인할 수 있다. - 개발 효율성 향상
초기에 시간이 더 걸릴 수 있지만 장기적으로 버그 수정에 드는 시간을 절약하여 전체 개발 효율을 높일 수 있다.
ㅇ 한계와 고려
- 학습 곡선
TDD에 익숙하지 않은 개발자는 초기 도입 시 어려움을 겪는다. - 시간 투자
테스트 코드를 작성하는데 추가 시간이 필요하며 프로젝트 일정에 영향을 미칠 수 있다. - 과도한 테스트 작성 위험
모든 코드를 테스트하면 생산성이 떨어질 수 있으므로 중요 로직에 집중한다. - 디자인 경직성
초기 설계에 문제가 있을 경우, 많은 테스트로 인해 구조 변경이 어렵게 느껴질 수 있다.
** TDD를 활용하는 이유
딱 봐도 귀찮아 보일 수 있지만 처음 시작하는 단계에서는 테스트 케이스 설계를 위한 초기 비용이 확실히 더 들게 된다. 하지만 전체 개발과정에 있어서 초기 비용보다 유지 보수 비용이 더 클 수 있다는 것을 명심해야한다.
안정성이 필요한 프로젝트에서는 안정성을 개발 초기단계부터 확실히 다져놓고 가는 것이 중요하다.
유지보수 비용이 더 크거나, 안정성이 중요한 비행기, 배 등의 프로젝트의 경우 TDD가 활발하게 이루어진다.
'Software Engineering' 카테고리의 다른 글
Third Party (2) | 2024.10.23 |
---|---|
DevOps (1) | 2024.10.23 |
OOP 객체 지향 프로그래밍(Object-Oriented Programming) (1) | 2024.10.23 |
애자일(Agile) 방법론 (1) | 2024.10.23 |
클린코드 & 시큐어 코드 & 리팩토링 (0) | 2024.10.23 |