programing

TDD와 Test First Development (또는 Test First Programming) 사이에 차이점이 있습니까?

firstcheck 2021. 1. 18. 08:09
반응형

TDD와 Test First Development (또는 Test First Programming) 사이에 차이점이 있습니까?


두 아이디어 모두 저와 매우 비슷하게 들리지만 미묘한 차이가 있거나 똑같은 것이 다른 방식으로 설명 될 수 있습니다. TDD와 Test First 개발 / 프로그래밍의 관계는 무엇입니까?


추진 요인이 무엇인지에는 차이가 있습니다.

클래스 (또는 시스템-이것은 물론 다른 규모에서 발생할 수 있음)가 어떻게 생겼는지에 대한 모호한 아이디어를 가지고 있으며 실제 모양을 제공하는 테스트를 생각하십니까? 그것이 TDD입니다.

클래스의 공용 API가 무엇인지 정확히 알고 구현하기 전에 테스트를 작성합니까? 그것은 테스트 우선 개발입니다.

제 스타일은이 둘이 섞인 경향이 있습니다. 때로는 테스트를 작성하기 전에 API가 무엇이어야하는지 분명합니다. 다른 경우에는 테스트 가능성이 실제로 디자인을 주도합니다.

다시 말해 TDD는 "어떤 질문을하고 싶은가요?"로 시작합니다. 비 TDD (테스트 우선 여부에 관계없이)는 "어떤 대답을하고 싶은가요?"로 시작합니다.


그것들은 기본적으로 같은 것을 설명하는 다른 이름입니다. 사실 마지막 D는 개발과 디자인을 나타낼 수 있기 때문에 사실 5 개의 이름입니다.

Test First는 원래, 특히 Extreme Programming의 맥락에서 테스트-코드-리팩터링주기에 사용 된 용어입니다. Test Driven Development라는 이름은 나중에 TFD가 테스트 전략 이라기보다는 디자인 전략에 가깝다는 사실을 강조하기 위해 제안되었고 빠르게 채택되었습니다.

분명히 오늘날 어떤 사람들은이 두 용어에 대해 다른 의미를 가지고 있습니다. 그러나 그것은 그들의 존재의 의도가 아니었고 저는 그것이 상식에 의존하지 않을 것입니다. 사실 저는 TFD라는 용어가 더 이상 사용되지 않는 것으로보고 싶습니다.


테스트 우선 프로그래밍, 테스트 우선 개발, 테스트 중심 개발 또는 테스트 중심 설계와 같은 유사한 용어가 많이 있습니다. 몇 가지 사항을 명확히하는 것이 중요합니다.

1. TFP (Test First Programming)

테스트 우선 프로그래밍이라는 용어는 프로그래밍 모범 사례입니다. Kent Beck이 그의 저서 "Extreme Programming Explained"에서 다시 소개했습니다. "프로그래밍 전에 단위 테스트를 작성하고 항상 모든 테스트를 계속 실행하십시오." 따라서 테스트 우선 프로그래밍에 대해 이야기 할 때 우리는 해당 테스트를 만족시키기 위해 코드를 작성할 개발자가 자동화 된 단위 테스트를 작성하는 것에 대해 이야기하고 있습니다. 단위 테스트는 쌓여서 주기적으로 실행할 수있는 자동화 된 회귀 테스트 스위트를 구축합니다.

2. 테스트 주도 개발 (TDD)

TDD (Test-Driven Development)는 Kent Beck이 그의 저서 "Test Driven Development by Example"에서 소개 한 방법론의 이름입니다. 소프트웨어 개발 프로세스이며 코드 전에 테스트를 작성하는 것만이 아닙니다. 전체 책은 패턴, 워크 플로우, 문화 등으로 그것을 설명하려고 노력하고 있습니다. 그것의 한 가지 중요한 측면은 리팩토링에 대한 강조입니다.

어떤 사람들은 테스트 우선 개발, 테스트 중심 설계 또는 테스트 중심 프로그래밍이라는 용어를 사용합니다. 한 가지는 확실합니다. 잘 확립 된 방법론은 테스트 중심 개발이고 프로그래밍 기술은 테스트 우선 프로그래밍입니다. 나머지는 일반적으로 코드 전에 테스트를 작성하는 아이디어를 참조하거나 테스트 주도 개발 또는 테스트 우선 프로그래밍을 잘못 참조합니다.


TDD = TFD + 리팩토링.

TFD를 수행 할 때 코드를보다 일반적이고 강력하게 만들기 위해 일부 리팩토링을 적용합니다.


역사적으로 옳음 : 테스트 우선 프로그래밍과 테스트 주도 개발은 개선 된 이름으로 같은 것을 의미합니다.

Test-First Programming과 Test-Driven Development를 대중화시킨 소프트웨어 개발 프로세스 인 XP (Extreme Programming)의 맥락에서 Test-First Programming은 Test-Driven Development로 이름이 변경된 후 Test-Driven Design으로 변경되었습니다. 테스트를 먼저 작성하면 소프트웨어 아키텍처와 소프트웨어 시스템 설계에 엄청난 긍정적 인 영향을 미칩니다.

아키텍처 및 디자인에 대한 이러한 영향은 다소 놀라운 동의어의 결과입니다.

  • 테스트 가능
  • 분리됨
  • 재사용 가능
  • 독립적으로 배포 가능
  • 독립적으로 개발 가능
  • 독립적으로 합리적

소프트웨어 엔티티는 쉽게 재사용, 테스트, 독립적으로 배포, 독립적으로 개발하거나 분리 된 경우 별도로 쉽게 추론 할 수 있습니다. 실제 구현 전에 테스트를 작성하는 것은 지속적인 디커플링을 보장하기위한 거의 완벽한 방법입니다.

소프트웨어 디자인 및 아키텍처에 대한 이러한 영향은 다른 긍정적 인 효과 외에도 매우 중요해 졌기 때문에 제작자는 이름을 Test-First Programming에서 Test-Driven Development로 바꿀 가치가 있다고 생각했습니다.

Test-Driven Development라는 이름은 또한 Test-Driven Development라는 이름이 Test-First Programming보다 방법의 전체적인 측면을 더 강조하기 때문에 적절한 이해와 수용 측면에서 방법을 마케팅하는 데 도움이됩니다.

역사적으로 정확하지는 않지만 유용함

역사적으로 정확하지는 않지만 다음과 같은 구분이 매우 유용합니다.

테스트 우선 프로그래밍…

… 테스트중인 코드에 대한 테스트가 테스트중인 코드보다 먼저 작성되는 모든 방법입니다.

테스트 주도 개발…

… Robert C. Martin이 설명한대로 테스트 주도 개발의 3 가지 법칙을 따르는 테스트 우선 프로그래밍의 특정 하위 집합입니다.

  1. 실패한 단위 테스트를 처음 작성하기 전까지는 프로덕션 코드를 작성할 수 없습니다.
  2. 실패하기에 충분한 것보다 더 많은 단위 테스트를 작성할 수 없으며 컴파일하지 않으면 실패합니다.
  3. 현재 실패한 단위 테스트를 통과하기에 충분한 프로덕션 코드를 작성할 수 없습니다. — Robert C. Martin, 테스트 주도 개발의 세 가지 법칙

이 세 가지 규칙을 따르면 Red-Green-Refactor주기라고하는 것입니다. 1. 실패한 테스트를 작성합니다. 2. 통과합니다. 3. 이제 통과 했으므로 다음 실패한 테스트를 작성하기 전에 무자비하게 리팩터링 할 수 있습니다.

안전하게 리팩토링하려면 테스트가 필요합니다. 리팩토링은 중요한 동작을 변경하지 않고 소스 코드의 구조를 변경하는 것을 의미합니다. 하지만 우연히 중요한 행동을 변경하지 않았다는 것을 어떻게 알 수 있습니까? 중요한 행동을 정의하는 것은 무엇입니까? 그것은 테스트가 유용한 많은 것 중 하나입니다.

BTW 테스트가 리팩토링에 방해가되는 경우 테스트가 너무 낮은 수준이고 너무 밀접하게 결합되어 있으며 조롱을 너무 많이 사용했을 수 있습니다.

Extreme Programming의 다른 흥미로운 이름

  • Continuous Integration -> Continuous Delivery -> Continuous Deployment; Strictly speaking they mean different things, however, in the spirit of XP, it meant Continuous Deployment from the start, and when people jumped on the bandwagon, it was realized that integration was taken too literally and people stopped before they are done.
  • Continuous Refactoring -> Continuous Design Improvement; Refactoring is not a means to an end in itself, but follows a higher purpose.
  • 40 hours week -> Sustainable Pace (Urban legend: This rename happened after protests by French software developers.)

They are exactly the same thing. Both reference writing tests first, then writing the code that will pass the test


TDD (Test Driven Development)는 테스트 우선 개발 / 프로그래밍이지만 TDD는 코드 이후에도 지속적이고 반복 가능한 단위 테스트를 만드는 것을 의미하는 데 사용되는 것을보고 들었지만 실제로 테스트하는 코드보다 먼저 테스트가 작성되었음을 의미합니다.


에서 테스트 주도 개발 : 예함으로써 , 저자, 켄트 벡 (Kent Beck)은 , 명확하게 "첫 번째 테스트"(TF) 규칙입니다 상태. 따라서 TF는 TDD를 지배하는 원칙입니다. 나중은 과정입니다.

참조 URL : https://stackoverflow.com/questions/334779/is-there-a-difference-between-tdd-and-test-first-development-or-test-first-prog

반응형