TDD 테스트 주도 개발
- 테스트를 먼저 만드록 테스트를 통과하기 위한 코드를 짜는 것이다.
- 만드는 과정에서 우선 테스트를 작성하고, 그에 해당하는 코드를 짜는 것을 반복하면서 제대로 동작하는지 피드백을 적극적으로 받는 것이다.
추상적으로 TDD의 핵심 개념을 말하자면
결정과 피드백 사이의 갭에 대한 인식, 갭을 조절하기 위한 테크닉이라고 할 수 있다
- Kent Beck -
- 결정 : 프로그램을 짤 때 어떤 방식으로 무엇을 만들지 선택한 것
- 피드백 : 프로그램을 짜다보면 받는 성공 또는 에러라는 응답
- 결정과 피트백 사이에는 갭이 생기는데, 갭이 커질수록 문제이고, 개발자가 그 갭을 인지하지 못하는 것도 문제다.
- 그 갭을 인지하고 줄여나가는 것이 TDD다
TDD의 필요성
- 불확실성이 높을 때 피드백과 협력이 중요하기 때문에
불확실성이 높은 상황에서 TDD는 필요하다 이를테면,- 처음 해보는 프로그램 주제
- 고객의 요구조건이 바뀔 수 있는 프로젝트
- 개발하는 도중 코드가 많이 바뀔 수 있는 경우
- 개발 후 코드를 타인이 유지보수할 때
등의 경우를 불확성이 높다고 할 수 있다.
TDD의 효과
-
TDD를 하면 피드백이 증가한다
-
협력
- 남이 짠 코드를 빨리, 쉽게 이해할 수 있게 된다.
- 내가 남의 코드를 고쳐서 문제가 있더라도, 자동화된 테스트가 알려주기 때문에 큰 근심없이 고칠 수 있는 용기가 생긴다
- 테스트 코드에는 개발자의 개발 과정이 나와있기 때문에 테스트를 공유하면 왜 그 코드를 짰는지 이해할 수 있다.
-
예상치 못한 버그를 줄여 결함도를 낮춘다.
-
코드 복잡도가 떨어져 깨끗한 코드가 나오고, 유지보수 비용이 낮아진다.