TDD가 높은 ROI를 제공하는 영역과 ROI가 너무 낮아 추적 할 가치가없는 다른 영역이 있습니까? [닫은]


31

테스트 주도 개발. 나는 그것을 좋아한다.

그러나 필기 테스트에는 오버 헤드가 필요합니다. 따라서 코드 기반 전체에서 TDD를 보편적으로 사용해야하거나, TDD가 높은 ROI를 제공하는 영역과 ROI가 너무 낮아 추적 할 가치가없는 영역이 있어야합니다.


1
ROI "Return On Investment"를 조회해야했습니다. :)
Songo

당신은 이미 자신의 질문에 대답했습니다 : 적절한 곳에서 사용하십시오.
jwenting

답변:


27

코드가 구조적으로 많이 변할 가능성이있는 곳에서는 TDD를 피하십시오. 즉, 시그니처가 거의 변경되지 않지만 내부적으로 더 자주 리팩터링되는 메소드에 대한 테스트 더미를 갖는 것이 좋지만, 매우 휘발성 인 인터페이스가 극적으로 변경 될 때마다 테스트를 수정해야합니다.

최근에 작업 한 앱은 Gui-> Presenter-> BusinessLogic-> Data Access Layer 기반 아키텍처를 기반으로 구축 된 데이터 중심 웹앱입니다. 내 데이터 액세스 계층은 아무도 비즈니스처럼 테스트되지 않았습니다. 비즈니스 로직 계층은 꽤 잘 테스트되었습니다. 발표자는보다 안정적인 영역에서만 테스트되며 시간당 변경되는 GUI에는 거의 테스트가 없습니다.


7

현명하고 실용적인 영역에서 전체 테스트 스위트를 작성하는 것이 좋습니다. 실용적이지 않은 지역에서는 위생 검사를 작성하십시오.

내 경험상 전체 테스트 사례의 오버 헤드는 대부분의 경우 확실히 가치가 있지만 실제로 코드 범위는 수익을 감소시킵니다. 어떤 시점에서 코드 범위를 늘리기 위해 더 많은 테스트를 작성하는 것은 의미가 없습니다.

예를 들어, 언어 / 기술에 따라 UI 테스트가 실용적이지 않거나 실행 가능하지 않을 수 있습니다. 많은 테스트는 아마도 사용자가보고 자동화 할 수없는 것에 의존 할 것입니다. 보안 문자 생성 방법이 사람이 읽을 수있는 이미지를 생성하는지 어떻게 테스트합니까?

전체 테스트 세트를 작성하는 데 3 일이 걸리는 경우 해당 구성 요소에 버그가 도입 될 가능성이 매우 낮으며 함수 자체를 작성하는 데 30 분 밖에 걸리지 않을 것입니다. 그 시간이 가치가 있는지에 대해. 어쩌면 그 기능에 대한 기본 위생 검사를 작성하는 것이 가치를 제공 할 것입니까?

필자의 일반적인 조언은 테스트를 비교적 쉽게 작성할 수있는 구성 요소를 완전히 테스트해야한다는 것입니다. 그러나 테스트하기 어려운 영역 인 경우 모래에 선을 긋고 완전히 테스트하기보다는 더 높은 수준에서 테스트 할 테스트를 작성하십시오.

이전 보안 문자 예제에서 올바른 크기 및 형식의 이미지를 확인하는 테스트를 작성하여 예외가 발생하지 않을 수 있습니다. 그것은 배 밖으로 가지 않고 어느 정도의 확신을줍니다.


6

나에게 TDD는 오버 헤드가 아닙니다. 코드를 작성하는 방식입니다. 필기 시험이 "오버 헤드"라고 말하는 이유는 무엇입니까? 프로세스의 일부일뿐입니다. 필자의 견해는 디버깅 이 오버 헤드이며 TDD-ing을 시작할 때 본질적으로 중단 된 활동이다. TDD 이전에는 디버깅이 소프트웨어 작성 프로세스에서 없어서는 안될 부분이었습니다.

테스트 작성을 위해 디버깅을 포기하는 것은 매우 좋은 일이라고 생각합니다.


3

TDD가 정말 짜증나는 곳 중 하나는 MVC 앱에서 뷰를 테스트 할 때입니다.

뚱뚱한 html 문자열을 반환하는 함수를 테스트하기 때문에 HTML 구문 분석을 수행하여 문제가 해결되었는지 확인합니다. 또한 유지 관리가 악몽이 될 수 있습니다. 어느 날 당신은 확인란을 움직이고 kaboom, 테스트가 중단됩니다.

나는 많은 테스트를 위해 TDD를 좋아하지만 프로그래머 벨트의 유일한 도구는 아닙니다.


공정하게 말하자면, 실제로 테스트 할 수있는 견해가 없어야합니다. 테스트 할 수있는 높고 쉽게 컨트롤러에서 작업을 수행 한 결과 뷰 모델을 연결하는 큰 빈 슬롯이어야합니다.
sara
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.