TDD - 테스트 주도 개발
2020년 10월 27일, 22:58
개발자는 요구되는 새로운 기능에 대해 자동화된 테스트 케이스를 작성하고 해당 테스트를 통과하는 가장 간단한 코드를 작성. 일단 테스트 코드를 작성하고 상황에 맞게 리펙토링하는 과정을 거치는 것.
새로운 기능을 추가하기 전에 테스트 부터 작성하는데, 이를 위해서 해당 기능의 요구사항과 명세를 분명히 이해하여야 한다. 따라서 개발자가 코드를 작성하기 이전에 요구사항에 집중할 수 있도록 도와줌.
새로운 기능을 추가하면 잘 작동하던 기능이 제대로 작동하지 않는 경우가 발생할 수 있다.
혹은 미처 인식하지도 못하는 경우가 있다. 이러한 경우를 방지하기 위해서 테스트 코드를 작성한다.
새로운 기능을 추가할 때 테스트 코드를 작성함으로써, 새로운 기능이 제대로 작동함과 동시에 기존의 기능들이 잘 작동하는지 테스트를 통해 확인할 수 있다.
코드의 생산성 문제?
테스트 코드를 작성하고 기능 코드를 작성하기 때문에 생산적 측면은 떨어질 수 있다.
하지만 코드의 리펙토링 부분에서는 테스트 코드 작성이 더 효율적이다.
모든 상황에 대해서 테스트 코드를 작성할 수 있는가? 작성해야 하는가?
세상에는 다양한 사용자가 존재하며, 생각지도 못한 예외 케이스가 존재할 수 있다. 만약 테스트를 반드시 해봐야 하는 부분에 있어서 테스트 코드를 작성하는데 어려움이 발생한다면? 이러한 상황에서 주객이 전도하는 상황이 발생할 수 있다. 분명 실제 코드가 더 중심
이 되어야 하는데 테스트를 위해서 코드의 구조
를 바꿔야 하나하는 고민이 생긴다. 또한 발생할 수 있는 상황에 대한 테스트 코드를 작성하기 위해 배보다 배꼽이 더 커지는 경우
가 허다하다. 실제 구현 코드보다 방대해진 코드를 관리하는 것도 쉽지만은 않은 일이 된 것이다.
모든 코드에 대해서 테스트 코드를 작성할 수 없으며 작성할 필요도 없다. 또한 테스트 코드를 작성한다고 해서 버그가 발생하지 않는 것도 아니다. 애초에 TDD 는 100% coverage 와 100% 무결성을 주장하지 않았다.