내가 옳은거야? 내가 정확히 바꾸어야 할 것이 아니라면
그 짧은 설명만으로는 말하기가 어렵지만, 당신이 그것을 올바르게하고 있지 않다고 생각합니다 . 참고 : 나는 당신이하고있는 일이 효과가 없거나 어떤 식 으로든 나쁘다고 말하지는 않지만 TDD를하고 있지 않습니다. 중간 "D"는 "구동"을 의미하며, 테스트는 모든 것, 개발 프로세스, 코드, 디자인, 아키텍처, 모든 것을 주도 합니다.
시험은 무엇을 쓸 것인지, 언제 쓸 것인지, 다음에 쓸 것인지, 언제 멈추어야 할지를 알려줍니다. 디자인과 아키텍처를 알려줍니다. (디자인과 아키텍처는 코드에서 리팩토링을 통해 나온다.) TDD는 테스트에 관한 것이 아니다. 테스트를 먼저 작성하는 것조차 중요하지 않습니다. TDD는 테스트를 통해 사용자를 이끌어주는 것입니다. 먼저 테스트를 작성하는 것이 필요한 전제 조건입니다.
실제로 코드를 작성했는지, 아니면 완전하게 처리했는지는 중요하지 않습니다. 머리에 코드를 작성하고 해당 코드에 대한 테스트를 작성하는 것입니다. 그것은 TDD가 아닙니다.
그 습관을 버리는 것은 어렵다 . 정말 힘들어요 숙련 된 프로그래머에게는 특히 어려운 것 같습니다.
Keith Braithwaite는 TDD As If You Meant It 이라고하는 운동을 만들었습니다 . 그것은 엄격하게 따라야하고 TDD를보다 엄격하게 적용하도록 당신을 조종하도록 고안된 일련의 규칙 ( Bob Martin의 TDD의 세 가지 규칙을 기반으로 하지만 훨씬 더 엄격함)으로 구성됩니다. 페어 프로그래밍 (페어가 규칙을 위반하지 않도록 할 수 있도록) 및 강사와 함께 사용하는 것이 가장 좋습니다.
규칙은 다음과 같습니다.
- 솔루션의 방향을 가리키는 것으로 보이는 가장 작은 테스트를 정확히 하나만 작성하십시오.
- 실패를 참조하십시오. 컴파일 실패는 실패로 계산
- 테스트 방법에서 가능한 최소 구현 코드를 작성하여 (1)에서 테스트를 통과 하십시오 .
- 중복을 제거하기 위해 리팩터링하고 그렇지 않으면 디자인을 개선하는 데 필요합니다. 이 동작을 사용하는 것에 대해 엄격해야합니다.
- 새로운 방법이 필요합니다. 리팩토링 시간까지 기다렸다가 다음 중 하나를 수행하여 테스트하지 않은 새로운 방법을 작성하십시오.
- 선호 : 테스트 클래스에서 새 메소드를 작성하려면 (3)에 따라 작성된 구현 코드에서 메소드 추출을 수행하십시오.
- 필요한 경우 : (3)에 따라 구현 코드를 기존 구현 방법으로 이동
- 새로운 클래스를 원합니다. 리팩토링 시간까지 기다린 후… 테스트 방법 이외의 클래스를 만들어 Move Method의 목적지를 제공합니다.
- Move Method를 수행하여 다른 방법으로 구현 클래스를 메소드로 채 웁니다.
일반적으로, 이것은 "실제로 생각해야 할 것을 머리에 상상 한 다음 테스트를 작성하여 그 디자인을 강요하고 이미 계획 한 디자인을 구현하기도합니다." 테스트 ".
의사 그룹이 pseudo-TDD를 사용하여 틱택 토 게임과 같은 것을 구현하면 일반적으로 Board
3x3 배열의 Integer
s 클래스를 포함하는 매우 유사한 디자인으로 끝납니다 . 그리고 프로그래머의 적어도 일부는 실제로 "클래스가 필요하다는 것을 알기"또는 "테스트를 작성하기 위해 무언가를 필요로하기"때문에 테스트하지 않고이 클래스를 작성했을 것입니다. 그러나 같은 그룹에서 TDD를 적용하는 경우 강제로 TDD를 적용하는 경우가 많으며 종종 매우 다른 디자인으로 구성되어 종종 Board
.
작성한 시험이 충분한 지 확인할 수있는 방법이 있습니까?
그들이 모든 비즈니스 요구 사항을 다룰 때. 테스트는 시스템 요구 사항의 인코딩입니다.
1 + 1 = 2에 해당하는 매우 간단한 기능에 대한 테스트를 작성하는 것이 좋습니까?
다시 한번 말하지만, 기능에 대한 테스트는 작성하지 않습니다. 테스트를위한 기능을 작성합니다. 테스트를 통과하는 기능이 사소한 것으로 판명되면 훌륭합니다! 시스템 요구 사항을 충족하기 위해 열심히 노력하지 않아도됩니다!
기능을 변경하고 요구 사항이 변경되는지 테스트하는 것이 좋습니까?
아뇨. 다른 길은 요 요구 사항이 변경되면 해당 요구 사항에 해당하는 테스트를 변경하고 실패한 다음 코드를 변경하여 통과시킵니다. 테스트는 항상 먼저 이루어집니다.
이 작업은 어렵습니다. 마감 시간이 다가오고 압력을 받고있을 때 생각할 필요가없는 시점에 도달하기 위해 일종의 "근육 기억"을 구축 하려면 수십, 수백 시간의 신중한 연습 이 필요합니다. 이 작업을 수행하는 것이 가장 빠르고 가장 자연스러운 방법이됩니다.