답변:
코드가 구조적으로 많이 변할 가능성이있는 곳에서는 TDD를 피하십시오. 즉, 시그니처가 거의 변경되지 않지만 내부적으로 더 자주 리팩터링되는 메소드에 대한 테스트 더미를 갖는 것이 좋지만, 매우 휘발성 인 인터페이스가 극적으로 변경 될 때마다 테스트를 수정해야합니다.
최근에 작업 한 앱은 Gui-> Presenter-> BusinessLogic-> Data Access Layer 기반 아키텍처를 기반으로 구축 된 데이터 중심 웹앱입니다. 내 데이터 액세스 계층은 아무도 비즈니스처럼 테스트되지 않았습니다. 비즈니스 로직 계층은 꽤 잘 테스트되었습니다. 발표자는보다 안정적인 영역에서만 테스트되며 시간당 변경되는 GUI에는 거의 테스트가 없습니다.
현명하고 실용적인 영역에서 전체 테스트 스위트를 작성하는 것이 좋습니다. 실용적이지 않은 지역에서는 위생 검사를 작성하십시오.
내 경험상 전체 테스트 사례의 오버 헤드는 대부분의 경우 확실히 가치가 있지만 실제로 코드 범위는 수익을 감소시킵니다. 어떤 시점에서 코드 범위를 늘리기 위해 더 많은 테스트를 작성하는 것은 의미가 없습니다.
예를 들어, 언어 / 기술에 따라 UI 테스트가 실용적이지 않거나 실행 가능하지 않을 수 있습니다. 많은 테스트는 아마도 사용자가보고 자동화 할 수없는 것에 의존 할 것입니다. 보안 문자 생성 방법이 사람이 읽을 수있는 이미지를 생성하는지 어떻게 테스트합니까?
전체 테스트 세트를 작성하는 데 3 일이 걸리는 경우 해당 구성 요소에 버그가 도입 될 가능성이 매우 낮으며 함수 자체를 작성하는 데 30 분 밖에 걸리지 않을 것입니다. 그 시간이 가치가 있는지에 대해. 어쩌면 그 기능에 대한 기본 위생 검사를 작성하는 것이 가치를 제공 할 것입니까?
필자의 일반적인 조언은 테스트를 비교적 쉽게 작성할 수있는 구성 요소를 완전히 테스트해야한다는 것입니다. 그러나 테스트하기 어려운 영역 인 경우 모래에 선을 긋고 완전히 테스트하기보다는 더 높은 수준에서 테스트 할 테스트를 작성하십시오.
이전 보안 문자 예제에서 올바른 크기 및 형식의 이미지를 확인하는 테스트를 작성하여 예외가 발생하지 않을 수 있습니다. 그것은 배 밖으로 가지 않고 어느 정도의 확신을줍니다.
TDD가 정말 짜증나는 곳 중 하나는 MVC 앱에서 뷰를 테스트 할 때입니다.
뚱뚱한 html 문자열을 반환하는 함수를 테스트하기 때문에 HTML 구문 분석을 수행하여 문제가 해결되었는지 확인합니다. 또한 유지 관리가 악몽이 될 수 있습니다. 어느 날 당신은 확인란을 움직이고 kaboom, 테스트가 중단됩니다.
나는 많은 테스트를 위해 TDD를 좋아하지만 프로그래머 벨트의 유일한 도구는 아닙니다.