TDD를 설계자/구현 자 환경에서 사용할 수 있습니까?


3

최근 TDD의 이점을 분명히 볼 수 있었기 때문에 이것이 내 마음에 들었습니다. 개발자가 기능이 무엇인지에 대한 아이디어가있는 경우 테스트가 어떻게 좋은 디자인을 이끌 수 있는지 쉽게 알 수 있습니다. 이것은 지나치게 단순한 진술 일지 모르지만 내가 읽은 모든 것에서 TDD는 프로젝트 아키텍처와 프레임 워크 선택 이상의 설계가 없다고 주장합니다. 즉, 나는 가장 하드 코어 TDDers조차도 완전히 비어있는 정신 디자인 슬레이트가 작동하지 않을 것이라고 짐작할 수 있습니다.

제 질문은 이렇습니다 : 시니어 프로그래머가있는 환경에서 TDD를 사용할 수 있습니까?/designer/architect는 클래스 및/또는 구성 요소 디자인을 수행 한 다음 해당 디자인을 중급 개발자에게 전달하여 구현합니다. 이 경우 테스트는 설계의 주요 드라이버가되지 않습니다. 구현 프로그래머가 테스트 첫 번째 방법을 사용하여 해당 디자인을 구현할 수 있다고 가정합니다. 이 경우 여전히 TDD입니까? 아니면 테스트 주도 구현이라고하는 것이 더 좋을까요? 실제 세계에서이 작업이 가능할 것입니까, 아니면 TDD의 최악의 부분으로 끝나고 앞면을 디자인 할 것 같습니까?

는 UPDATE : TDD의 가능한 의미는 무엇

:

나는 로이 Osherove의 블로그 describing the various meanings of TDD 우연히 만났다?

  1. 테스트 주도 개발 : 테스트 첫째 방식으로 코드를 작성의 아이디어 . 기존 디자인이 이미 일 수 있습니다.
  2. 테스트 지향 개발 : 통합 테스트의 테스트 당신의 코드와 코드 앞에 또는 우리의 쓰기 후 중 하나를 그들을 밖으로 쓰기 갖는 장치. 코드에 많은 테스트가 있습니다. 은 테스트의 가치를 인식하지만 은 반드시 코드를 작성하기 전에 작성해야합니다. 당신이 코드를
  3. 테스트 기반 설계 (극단적 인 프로그래밍 방식)을 쓰기 전에 디자인은 아마 이 존재합니다 테스트는 보너스입니다 완전히 본격적인 설계 기술과 같은 테스트 첫 번째 방법을 사용하는 생각을하지만, 그 아이디어는 작은 디자인에서 전혀 디자인이 전혀없는 드라이브 입니다. 처럼 디자인하십시오.
  4. 테스트 주도 개발 및 디자인 : 또한 변화를 허용하면서, 새로운 코드와 변화를 운전하고 보너스를 추가로 설계를 진화하기 위해 테스트 우선 기술을 사용. 코드를 으로 시작하기 전에 이미 일부 디자인을 제 위치에 놓았을 수도 있습니다. 그러나 은 다양한 냄새를 나타 내기 때문에 으로 변경 될 수 있습니다.

것을 읽은 후에는 TDD의 테스트 기반 디자인의 맛은 아마도이 환경에 가장 적합 아니라, 테스트 주도 개발의 맛 것 아마 맞는 것을 매우 분명하다.프로젝트의 아키텍처와 프레임 워크 선택 외의 디자인이없는

6

TDD 은 주로 디자인 전략 인입니다. 즉, 먼저 테스트를 작성하면 프로덕션 코드의 디자인을 구동하는 데 사용됩니다.

이 아닌은 미리 디자인하지 않았 음을 의미합니다. 내가 아는 거의 모든 사람이 TDD 사이클을 시작할 때 이미 머리에 어떤 종류의 디자인을 가지고 있습니다. 시험을 치러야 할 수업을 어디서 시작해야할지에 대한 아이디어가 필요합니다. 특히 쌍 프로그래밍을 연습하는 경우에는 짧은 디자인 세션을 진행하는 것이 좋습니다.

TDD의 모든 이점을 얻으려면 테스트에서 제공하는 디자인에 대한 피드백을 듣고 리팩토링 단계에 반영하여 디자인을 적절하게 적용 할 수 있어야합니다. 그리고 그 양을 감안할 때, 유망한 방향으로 설정했기 때문에 유해한 것이 아니라면 선행 디자인 중 일부가 낭비되었다는 것을 알 수 있습니다. 다른 사람이 디자인을 생각해 내고 테스트에서 얻은 피드백이 없으면 특히 당신을 곤경에 빠뜨릴 수 있습니다.

그래서, 나는 당신의 상황에서 TDD를하는 것은 불가능하지 않지만, 나는 약간의 문제를주의해야한다고 말하고 싶습니다.

TDD를 채택하고 있는지 여부에 상관없이 귀하의 접근 방식이 Architects Don't Code anti pattern의 약간 냄새가 나는 것으로 보입니다. 나는 고참 개발자들에게 적어도 부분적으로는 주니어 멤버들과 함께 프로그램을 운영하는 것에 대해 생각할 것이다. 후배를 멘토링하고, 노인에게 설계 결정에 대한 귀중한 피드백을 제공하고, 두 가지 역할간에 마찰을 줄입니다.


2

"TDD 옹호자들은

TDD는 확실히 당신은 위하지 옹호 설명 무엇

업데이트 :. 나는 그것을 느낄 질문에 대한 업데이트로 인해이 대답을 편집 할 가치가 있습니다.

TDD는 디자인 철학보다 테스트 전략입니다.

나는 이것을 다시 말 할 필요가 있다고 생각한다. TDD는에 대한 테스트가 아니며 "테스트 우선"개발에 관한 것도 아니다. TDD는 비즈니스 요구 사항 인 & 기능을 기반으로하는 행동을 유도하고 있으며, 일부는이 진화 설계를 호출합니다.

그러나 테스트를 염두에두고 느슨하게 디자인을 결합하는 한 설계자가 설계 한 "설계된"설계를 중지 할 수있는 방법은 없습니다. 건축가의 디자인에 많은 비 기능 요구 사항이 반영되어 있다고 확신합니다.

필자는 전체 디자인을 "계획"할 필요가있는 이유를 분명히 묻습니다. 개발 팀에 대한 신뢰가 부족한가요? 지식을 & 디자인으로 후배들과 공유하는 것이 더 좋은 방법입니다. 예를 들어 상급 개발자와 프로그래밍을하면됩니다.

내가 본 것보다 자주이 시나리오가 실패합니다. 많은 개발자/계약자가 비전을 이해하지 못하고 코드 기반을 접할 때 건축가의 비전은 과도하게 설계되고, 테스트 할 수 없으며, 널리 이해되지 않고 천천히 부패 할 것입니다.

  0

이것은 많은 독서와 실험을 한 후에도 TDD를 얼마나 자극하지 않는지 보여줍니다. 필자가 본 많은 사례는 테스트 주도형으로 클래스 발견만큼 간단하게 연기했습니다. 그 예들은 사실상 디자인이 전무하다. 귀하의 의견은 TDD의 거주자가 아니라는 것을 의미합니다. 알아 둘만한! 23 sep. 082008-09-23 20:15:13

+1

글쎄,이 예제들은이 대답을 읽은 후에 당신이 믿을 수도있는 것보다 "정확하다"... 03 dec. 082008-12-03 09:53:48

  0

나는이 시점에서 Ilja Preuß와 동의하는 경향이있다. 테스트 주도 디자인 (테스트 주도 개발이 아닌)을 수행하는 경우 많은 사람들이 클래스 발견을 테스트 주도로 옹호합니다. 11 dec. 082008-12-11 03:53:43


2

TDD가 무엇인지에 대한 이해가 일반적으로 그 정의에 맞는지 확실하지 않으므로 주제에 대한 약간의 도움이 도움이 될 수 있습니다.

테스트 기반 개발은 주로 테스트 케이스를 코드의 승인 기준으로 사용하는 것에 관한 것입니다. 나는. 간단히 테스트 케이스를 먼저 작성하고 나중에 테스트를 수행하십시오. 짧은 반복 작업으로이 작업을 수행하는 것이 좋습니다.하지만 나에게있어이 작업의 핵심은 아닙니다.

repeat:(add a test->write code to satisfy test criteria) *의 클래식 사이클은 건축가가 수행 한 전체 프로젝트 설계와 같은 다른 기법과 함께 매우 잘 작동합니다. 개발자가 이미 적절한 사용 사례를 가지고 있다면, 기능 테스트 케이스를 작성하는 것과 같은 방식으로 디자인 문서를 사용할 수 있다면 적절한 테스트를 작성하는 것이 훨씬 쉽습니다.

* shortened for convenience 

2

이 환경에서는 계약 기반 접근 방식을 사용하는 것이 좋습니다.

건축가는 클래스 또는 인터페이스가 구현해야하는 계약을 설명합니다. 그런 다음 개발자는 계약을 실행하기위한 테스트 사례와이를 구현하기위한 코드를 생성합니다.우리는 당신의 질문에 매우 유사한 디자인 프로세스를 http://martinfowler.com/articles/consumerDrivenContracts.html


1

:

예를 들어,이 방법은 웹 서비스와 함께 작동 방법을 설명 Consuder 구동 계약에 마틴 파울러의 기사를보십시오. 사실 우리는이 과정을 통해 분석가와 구현 간의 격차를 해소했습니다. 그리고 디자이너는 그의 디자인에 대한 단위 테스트를 가지고 있습니다.