테스트 주도 개발-설득하십시오! [닫은]


30

일부 사람들은 테스트 주도 개발의 대규모 지지자라는 것을 알고 있습니다. 과거에는 단위 테스트를 사용했지만 쉽게 테스트 할 수 있거나 정확하다고 생각되는 작업 만 테스트했습니다. 시간이 많이 걸리는 것처럼 완벽하거나 거의 완전한 코드 범위 소리.

  1. 테스트 중심 개발을 위해 어떤 프로젝트를 사용하십니까? 특정 크기 이상의 프로젝트에만 사용합니까?
  2. 사용해야합니까? 설득 해!

3
테스트를 작성하는 데 많은 어려움이 있습니다. 모든 것을 수동으로 확인하는 시점에 도달했습니다.
— TheLQ

이 질문을 살펴보십시오 : stackoverflow.com/questions/301693/…
— systempuntoout

1
@TheLQ ... 수동 코드 검토를 수행했기 때문에 고객에게 비행 제어 소프트웨어가 정상이라고 알려주십시오. :-)
— Andrew

답변:


32

좋아, TDD의 장점은 다음과 같습니다.

  1. 그것은 당신이 더 많은 테스트를 마친다는 것을 의미합니다. 모두가 좋아 가지고 같은 시험, 그러나 몇몇 사람들 작성 을. 개발 흐름에 테스트 작성을 작성하면 더 많은 테스트가 필요합니다.
  2. 테스트를 작성하면 디자인의 테스트 가능성에 대해 생각해야하며 테스트 가능한 디자인은 거의 항상 더 나은 디자인입니다. 이것이 왜 그런 일인지는 분명하지 않지만, 저의 경험과 대부분의 TDD 복음 전도자들의 경험은 그것을 드러내는 것 같습니다.
  3. 여기에 TDD가 작성하는 데 시간이 조금 더 걸리지 만 더 높은 품질의 코드를 얻을 수 있으므로 수정해야 할 버그가 적어 투자 수익률이 높다는 연구 결과가 있습니다.
  4. 리팩토링에 대한 확신을줍니다. 단위 테스트로 잘 다루어지기 때문에 다른 모든 것을 깨뜨리지 않고 하나의 시스템을 변경할 수 있다는 것은 좋은 느낌입니다.
  5. 찾은 모든 버그가 수정되기 전에 테스트를 받아야하기 때문에 반복 버그는 거의 발생하지 않습니다.

당신은 확신을 요청했습니다, 그래서 이것들은 혜택이었습니다. 보다 균형 잡힌 견해를 보려면 이 질문 을 참조하십시오 .


10
"테스트 가능한 디자인은 거의 항상 더 나은 디자인입니다."-테스트 가능한 코드는 일반적으로 모듈 식이며 종속성이 단순하기 때문입니다.
— Skilldrick

"모두가 시험을 보는 것을 좋아하지만 시험을 쓰는 사람은 거의 없습니다." -이게 사실인가요? 좋은 테스트를 생각하고 테스트중인 소프트웨어를 작동시키는 것이 재미있을 것 같습니다.
— DarenW

3
@ DarenW- 나는 당신에 대해 몰라,하지만 오히려 그들을 깨뜨리는 것보다 일을하게하고 싶습니다. 즉 누군가가 말했다 않습니다 당신이 제안하는 방법을 생각이 화끈-가치 테스터 등이다. 세계에는 품질이 좋은 QA 직원이 충분하지 않습니다.
— Fishtoaster

해당 PDF의 lnk에서 403 Forbidden 오류가 발생합니다
— Neil N

필자가 확실히 pdf로 업데이트 한 것 (몇 년 전)
— Fishtoaster

11

Robert C. Martin은 원래 이러한 점을 지적했습니다. 본인의 경험을 바탕으로이를 뒷받침 할 수 있습니다.

  • 갈 때마다 단위 테스트의 회귀 테스트 스위트가 자동으로 작성됩니다.
  • 마치 홀에 코드를 작성하는 것처럼 디버깅에 거의 시간을 소비하지 않으므로 디버거를 열지 않고 마지막 테스트가 통과 된 시점까지 코드를 실행 취소하는 것이 더 쉽습니다.
  • 몇 분마다 코드가 작동하는지 확인합니다. 모든 코드 (또는 테스트에서 다루는 모든 동작, TDD를 수행하는 경우 코드의 비율이 매우 높음).

프로덕션 또는 플레이 코드 작업 중이 든 항상 TDD를 거의 수행합니다. 요즘 다른 방법으로 코딩하기가 어렵습니다.


6

(면책 조항 : UI를 거의 사용하지 않으므로 UI에 대한 TDD에 대해 논의 할 수 없습니다.)

나는 사소한 응용 프로그램에서 전체 SIP 스택에 이르기까지 거의 모든 작업에서 TDD를 사용합니다.

내가 인수 한 기존 PHP 웹 사이트에서 TDD를 사용하지 않습니다. 나는 시험이없는 것이 고통 스럽다는 것을 알았습니다. 그리고 나는 회귀 테스트 스위트가 없어서 무언가를 깨뜨렸다 고 알려주기 때문에 사이트의 일부를 실수로 깨뜨리는 것이 매우 성가시다. 클라이언트는 (a) 코드베이스에 대한 테스트를 작성하고 (b) 프로세스에서 코드를 처음에 테스트 할 수 있도록 예산이 없습니다.


1
  • 고객에게보다 효과적으로 공급할 수있을 때마다 (테스트와 관련이있을 수 있으며 최소한 프로젝트 종료 토론을 줄입니다)
  • 테스트 개발에 노력을 기울이는 것보다 공동 개발자가 코드의 모든 것에 대해 정보를 얻는 데 시간이 더 걸릴 때마다-생각보다 빨리

-1

뭐? 부정적인 대답이 없습니다!?

면책 조항 : 나는 반 단위 테스트가 아닙니다. 사람들이 TDD라고 말할 때, 나는 그들이 작성한 모든 코드의 80-100 %에 대한 코드를 작성하기 전에 테스트를 작성하는 질병 소리 버전을 의미한다고 가정합니다.

나는 주장 할 것이다 :

  • 인 에이 블러입니다. 회귀 문제를 포착하는 것이 큰 문제라면 처음부터 완전 자동 TDD가 가치가있는 것처럼 보일 때마다 마지막으로 작성한 코드 조각마다 테스트를 작성하면 실제 문제를 무시하는 데 실제로 도움이 될 수 있습니다.

  • 사람들이 실제 문제를 무시하도록 도와줍니다. 하나의 버그를 수정하면 두 개의 팝업이 추가되는 whack-a-mole 게임으로 바뀌어 아키텍처가 불고 있습니다. 초점. 실제 문제에 집중하십시오. 그들이 두들겨지기 전에 두더지를 보는 것은 깔끔하지만 처음에는 거기에 있으면 안됩니다.

  • 시간이 많이 걸립니다. 가끔 버그가 발생했습니다. 나는 너무 많이 치지 않기 때문에 내가 쓰는 모든 새로운 것을 접두사로 붙일 가치가있는 것처럼 보입니다. 발생할 수있는 문제를 파악하십시오. 쉽게 진단 할 수 있도록 오류를 처리하십시오. 확인하십시오. 중복 / 병목 지점의 주요 지점에서 테스트합니다. 그러나 큰 소리로 울부 짖기 위해 모든 마지막 게터와 세터를 처음에는 테스트하지 않았어야 할 것으로 테스트하지 마십시오.

  • 디자인 포커스 : 우수한 개발자도 테스트에 집중할 때 가능한 최상의 코드를 작성할 방법이 없습니다. 괜찮은 디자인을 할 수있는 유일한 방법 인 것 같으면 위의 "실제 문제에 중점을 두는"방법을 추천합니다.

  • Macro-Design Fail : 현재 직장의 코드베이스는 한 번 이상 사용되지 않는 인터페이스와 사람들이 테스트 프레임 워크 및 테스트를 위해 글을 쓰고 있다는 것을 깨달았을 때 마침내 이해하기 시작한 기본 DRY 원칙에 대한 엄청난 위반으로 가득 차 있습니다. 일반. 테스트가 어리석은 아키텍처로 이어지지 않아야합니다. 실제로 20 개의 파일을 복사하여 붙여 넣은 다음 두 파일 만 크게 변경하는 데있어 확장 성 또는 엔터프라이즈 가치가있는 것은 없습니다. 아이디어는 우려를 분리하고 중간으로 나누지 않는 것입니다. Cruft와 무의미한 추상화는 95 %의 적용 범위를 갖지 않는 것보다 더 많은 비용이 듭니다.

  • 정말 인기가 있고 많은 사람들이 정말 좋아합니다. 만약 그것이 채택되기 전에 적어도 어떤 기술에 대한 헛소리를 제거하고 /하거나 헛소리를 조사하기에 충분한 이유가 없다면, 편집증을 배우십시오.


Bah downvoters는 내용이 아닌 제목 Q 만 읽습니다.
— Erik Reppen

1
나는 downvoted하고 나는 그것을 전부 읽었다. 당신이 지적한 많은 단점은 실제로 가장 기본적인 TDD 서적에 의해 해결됩니다. TDD는 "디자인에 대해 생각할 수있는만큼 많은 studpi WET 비 SOLID 테스트를 작성하는 것"을 의미하지 않습니다. 이 답변은 TDD에 대한 불공평 한 허위 진술이라고 생각합니다. 사람들이 끔찍한 디자인을 복사하여 붙여 넣기 때문에 응용 프로그램이 혼란스러워지면 디자인 문제입니다. TDD는 단지 워크 플로우이며 워크 플로우를 다루지 않습니다.
— sara
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.