2009-12-09 7 views
11

내가 구현할 새로운 기능이나 내가 "이해 한"버그에 대해 흥분을 감출 때 코드에 들어가서 해킹 당할 필요가 있습니다. 그 일을 멈추고 해당 테스트를 먼저 작성하는 데 약간의 노력이 필요합니다. 나중에 테스트는 종종 사소한 4 라이너로 밝혀 지지만, 글을 쓰기 전에 머리 부분에 "이걸로 건너 뛰어도 될까요?"라는 생각이 남아 있습니다. 이상적으로는 테스트를 작성하고 코드를 작성 해야겠다는 충고를 듣고 싶습니다.TDD를 할 때 어떻게 훈계를 유지합니까?

도움을주기 위해 사용하는 방법 (또는 사고 방식 또는 사고 방식 또는 사고 방식) 규율 유지? 아니면 자연스러워 질 때까지 그냥 연습합니까?

답변

9

나는 테스트의 즉각적인 피드백을 좋아합니다. 저에게는 충분한 보상이됩니다. 테스트에서 좋은 느낌의 버그를 재현 할 수 있다면, 필자는 추측하고 아마도 시간 낭비와 반대되는 방향으로 나아가고 있다는 것을 압니다.

필자는 Test-First 작업을 좋아한다. 왜냐하면 코드가 실제로 부정확 한 정신 모델을 기반으로 추측하는 것과는 대조적으로 코드가 실제로 수행하고있는 것처럼 느껴지기 때문이다. 내 가정을 반복적으로 확인할 수 있다는 것은 저에게 큰 보상입니다.

2

1) 팀에서 다른 사람과 당신은 쌍. 한 사람이 테스트를 썼고 다른 한 사람은 테스트를 쓴다.

"핑퐁"페어링이라고합니다.

이렇게하면 디자인에 대해 논의하고 수행 할 작업을 강요합니다.

이 토론을 통해 필요한 테스트를 더 쉽게 확인할 수 있습니다.

2) 제가 직접 작업 할 때 대화 형으로 코드 조각을 시험해보고 싶습니다. 난 그냥 루비 프롬프트에서 그들을 입력합니다. 이런 실험을 할 때 종종 실험을위한 데이터와 결과물을보기위한 인쇄물을 설정해야합니다.

이 작은, 독립적 인 일회용 실험

은 보통 : 구현의 가능성을 확립하기

  • 빠른 방법 및 시험에 공식화 시작
  • 좋은 장소.
+0

실제로 팀이 있다면 정말 좋습니다. 프로젝트의 유일한 개발자 인 경우 어떻게하면 테스트 첫 번째 정신력을 유지할 수 있습니까? –

+0

솔로잉을한다면 다른 요일에 테스트와 구현을 작성합니다. 수면은 내 마음 속의 쓰레기를 꺼내는 데 도움이됩니다. –

+0

저는 약 10 년 동안 TDD를 해왔습니다. 나는 매일 매일을 배우고있다. 객체 지향 프로그래밍을 더 잘 활용하면 특히 "책임 주도 디자인"학교가 도움이되었습니다. – daf

4

필자는 필기 시험이 필자의 문제에 대한 나의 접근 방식을 설명하는 데 도움이된다는 것을 알게되었습니다. 좋은 시험을 치를 수 없다면, 자신이해야 할 일이 무엇인지에 대해 충분히 생각하지 않았 음을 의미합니다. 일단 테스트가 작성되면 문제를 해결하는 방법을 알고 있다고 확신하는 만족감은 오히려 유용합니다.

+0

네, 사실입니다. 필기 시험은 코드가 정확히 무엇을 할 것인지 생각하게합니다. 그것은 아마도 훈련 문제의 일부일 것입니다. 먼저 시험에 대해 생각하는 것은 이미 수행 방법을 알고있는 세부 정보를 입력하기 시작하는 것보다 어렵습니다. –

3

작동하는 방법을 찾으면 알려 드리겠습니다. :-)

하지만 진지하게 생각할 때까지는 "머리가 손톱에 닿았을 때"라고 생각합니다. 4 라인 테스트는 사소한 것처럼 보일 수 있지만, 테스트하는 것이 실제 실패 지점을 나타내는 한 그럴만 한 가치가 있습니다.

내가 도움이된다는 사실 중 하나는 빌드 프로세스의 일부로 코드 유효성 검사 유효성 검사를 포함하는 것입니다. 테스트를 작성하지 않으면 빌드가 저에게 불평 할 것입니다.테스트를 계속 작성하지 않으면 지속적인 통합 빌드가 "오류가 발생하며"근처의 모든 사람이 내가 "깨진 빌드"알림에 연결 한 소리를 듣게됩니다. "좋은 슬픔 ... 당신이 그것을 다시 깨뜨린 지 몇 주 후에?", 그리고 이와 유사한 의견들, 나는 당황을 피하기 위해 곧 더 많은 시험을 쓰기 시작했습니다.

다른 하나는 (처음 대답을 제출 한 후에 만 ​​발생했습니다) 테스트를 처음 작성하는 습관을 갖게되면 버그를 제공 할 수 있다는 사실에서 큰 호응을 얻었습니다 - 고정 및 추가 기능은 사전 자동화 된 테스트 일에서보다 훨씬 더 많은 자신감을 가질 수 있습니다.

1

TDD와 관련하여 확인하는 것이 중요한 부분은 테스트 프로젝트를 올바르게 설정하는 것입니다. 사소한 테스트 케이스를 추가하는 그런 방법은 참으로 사소한 것입니다.

테스트를 추가하려면 먼저 테스트 프로젝트를 만든 다음 구성 요소를 분리하는 방법, 모조 등을 모방하는 방법 등을 고안해야합니다.

그럼 다시 단위 테스트가있는 것 같습니다. 을 개발 프로세스에 통합했습니다.

1

2000 년경 TDD를 처음 시작했을 때 매우 부자연 스럽습니다. 그런 다음 .net의 첫 번째 버전과 NUnit의 JUnit 포트가 생겼고 Shu 레벨 (Shu-Ha-Ri)에서 TDD 연습을 시작했습니다.이 질문은 귀하의 질문과 동일한 질문을 통해 모든 것을 테스트했습니다.

몇 년 후, 다른 직장에서 매우 헌신적이고 유능한 상급 개발자와 함께 우리는 하급 수준에 도달하는 데 필요한 조치를 취했습니다. 이것은 예를 들어 맹목적으로 커버리지 보고서에 출연하는 것이 아니라 "이 종류의 테스트가 정말 유용할까요? 그리고 그것이 비용보다 더 많은 가치를 추가합니까?"

다른 직장에서, 또 다른 위대한 동료와 함께, 나는 우리가 Ri 레벨을 향한 첫발을 내딛고 있다고 느낍니다. 현재 BDD/실행 가능 사례에 중점을 둡니다. 클래스의 공용 인터페이스를 변경해야 할 때마다 단위 테스트를 다시 작성 (다시 작성) 할 필요가 없으므로 더 높은 수준의 요구 사항을 확인하는 사람들이 있기 때문에 더 생산적입니다. 정적 호출을 확장 방법 등이 있습니다.

오해하지 마세요. 일반적인 TDD 클래스 테스트가 여전히 사용되고 있으며 우리에게 큰 가치를 제공합니다. 말로 표현하는 것이 어렵지만, 10 년 전의 테스트보다 의미가 있고, 소프트웨어를 어떻게 디자인 할 것인가를 "느끼고" "감지"하는 것이 훨씬 낫습니다.

3

내가 찾은 가장 쉬운 방법은 TDD를 많이 사용하는 것입니다. 어떤 시점에서 단위 테스트없이 코드를 작성하는 것은 매우 긴장된 활동이됩니다.

또한 상태 기반 테스트보다는 상호 작용 또는 행동 테스트에 집중하십시오.

관련 문제