2008-09-19 3 views
18

저는 전문가 그룹과 협력하여 관심이 있지만 경험이없는 사람들 (초보자)에게 TDD 실습을 가르치는 데 도움이되는 행사를 열었습니다.TDD를 가르 칠 때 단 하나의 가장 중요한 것.

우리는 실험실, 워크샵 등을 마련하려고 노력하고 있으며, 앞으로 TDD를 성공적으로 수행하는 데 성공할 수 있도록 이들 개인에게 부여해야 할 가장 큰 단일 한 것을 생각하려고합니다.

우리는 학습에 우선 순위를 두어야한다고 생각하십니까? TDD 교육의 어떤 측면이 이 가장 중요합니다. 당신이 두 가지 일을해야한다면, 괜찮습니다. 나는 당신을 한 부분으로 붙들 지 않을 것입니다.

답변

34

It's about design. 테스트에 대해서는 가 아닌입니다.

+0

퀴즈 단어는 대상에 쓰여진 적이 없습니다! –

8

과정의 단계를 건너 뛰지 마십시오. TDD의 초기 홈에 들어가는 데 시간이 오래 걸리지 만 전체 SDLC가 빠르면 버그가 없습니다.

빨강 - 녹색 - 리팩터링 -> 그냥 해.

1

제 경험상, TDD를 사용하면 저와 제 팀이 예기치 않은 어딘가를 깨뜨리지 않고 걱정없이 코드를 리팩토링 할 수있었습니다.

TDD의 가장 중요한 측면은 적용 범위입니다. 코드를 사용할 수있는 지점을 발견 할 때마다 리팩터링에 대한 확신을 갖기 때문에 TDD의 가장 중요한 측면을 다루고 있습니다.

+0

"내 경험에 비추어 볼 때, TDD를 사용하면 나와 팀이 예기치 않은 어딘가에 무언가를 깨뜨리지 않을 것이라는 걱정없이 우리 코드를 무자비하게 리펙토링 할 수 있습니다."- IMO, TDD가 아닌 단위 테스트입니다. TDD는 코드/디자인의 소비자처럼 생각하고 약점과 문제 영역을 강조합니다. –

7

테스트가 통과했기 때문에 코드가 정확한 것은 아닙니다.

그 외에도 설계에서 테스트를 고려하는 것이 중요하다고 말할 수 있습니다. 테스트중인 유닛의 내부 구현에 대해 잘 모르는 상태에서 코드를 테스트하기가 어렵다면 디자인을 다시 고려해 볼 수 있습니다. 그렇지 않으면 코드를 사용하여 테스트를 변경해야하기 때문에 리팩터링이 더 위험해질 수 있습니다.

3

나는 "인내하겠습니다."라고 제안합니다. 처음에는 기분이 이상합니다. 저에게는 자연 스럽기 시작하기 전에 아마 세 가지 프로젝트 였을 것입니다.

2

마감 시간이 길어질 때 TDD를 버리는 것에 대한 대처. 이것은 TDD를 통해 사람들과 팀을 돕는 가장 큰 문제 중 하나입니다. 그들은 고위 경영진에게 테스트 대신 특집을 던지는 중요성과 가치를 표현하는 데 어려움을 겪었습니다.

2

아기 단계로 진행하십시오.

PhlipCPP가 말한 것처럼 테스트가 매우 작은 범위만을 포함하는지 확인하십시오 : '테스트를 통과하는 데 필요한 MINIMAL EDIT를 수행하십시오. '

그럼에도 불구하고, TDD에는 많은 부분이 있으므로, 아직 아무 것도 놓치지 않도록해야합니다.

0

다양한 종류의 테스트를 강조하십시오. 블랙 박스 테스트와 화이트 박스 테스트는 모두 중요하며 다른 목적을 가지고 있습니다. 화이트 박스 테스트는 전체 시스템을 테스트 할 수 없으므로 정확성을 검증 할 수 없습니다. 코드 냄새가 더욱 악취를 내며 더 나은 리팩토링 방향을 제공합니다. 블랙 박스 테스트를 통해 정확성을 테스트 할 수 있습니다. 모든 기능은 블랙 박스 테스트를 거쳐야합니다.

또한 테스트 적용 범위의 차이점을 강조하십시오.조합 및 반복성 문제로 인해 응용 프로그램의 모든 코드 경로를 블랙 박스 테스트 할 수 없습니다. 내 규칙은 블랙 박스 테스트를 거쳐야 기능이 완료되지 않는다는 것입니다. 학생들이 자신의 규칙을 이해하도록 도와야합니다. 그러나 화이트 박스 테스트는 외부 클래스 종속성을 가져서는 안됩니다. 따라서 모든 클래스의 모든 라인은 화이트 박스 테스트를 받아야합니다.

3

나는 무엇을 Jon said in his answer에 동의하지만 중요한 추론이을 "좋은 디자인"을 지시하지 않는 테스트 용이성,하지만 대상에서 디자인 만 표시라고 생각합니다.

+1

저는 Jon을 정말로 말할 수는 없지만, 단위 테스트를 실행하거나 명확하고 직교적인 결과 (테스트 가능성)를 얻는 것이 실제로는 아무 것도 아니라는 것을 의미한다고 생각합니다. 단위 테스트를 할 때 _ 발견 할 수있는 설계상의 결함에 관한 것입니다. – talkaboutquality

4

이것이 가장 중요한 단일 항목으로 간주 될지 여부는 잘 모르겠지만 TDD를 사용하여 처음으로 탐색 할 때 시간이 걸리는 부분이었습니다.

테스트를 작성하기 전에 코드를 머리에 쓰지 마십시오.

TDD를 처음 시작했을 때 나는 디자인이 무엇인지 알았습니다. 나는 내가 쓰고 싶은 코드를 "알았다". 그래서 나는이 코드를 쓸 수있는 테스트를 작성했다. 내가 정말 TDD를 수행하지 않은이 일을했다

- 내가 먼저 코드를 작성 이후 (코드는

:-) 내 머리에 경우에도 그것은 좀 시간이 걸렸습니다 (일부 파고 영리한 사람들에 의해) 당신이 테스트에 집중할 필요가 있다는 것을 깨닫게됩니다. 원하는 동작에 대한 테스트를 작성한 다음 통과시키는 데 필요한 최소한의 코드를 작성한 다음 리팩터링을 통해 디자인을 출현시킵니다. 완료 될 때까지 반복하십시오.

2

TDD는 내 마음 속에서 리듬 (빨강, 녹색, 리팩토링)에 관한 것입니다. 리듬을 내리는 것은 당신에게 "얻지 못함"의 "고비"에 대한 것입니다. 그리고 만약 당신이 리듬을 얻지 못한다면 당신은 TDD를 매우 오래 붙들지 않을 것입니다. 리듬의 본질은 이미 언급 된 베이비 스텝들입니다. 가능한 한 적은 코드를 작성하고 리팩터링을 무자비하게 작성하십시오.

에 한 가지는을 강조하는 것은 TDD가 장기적인 것에 대한 몇 가지 단기 이득을 교환한다는 것입니다. TDD로 시작하면 항상 생산성이 저하됩니다. 그러나 일단 리듬을 배우면 그루브에 가깝게 느껴지며 실제로 더 빨리 작업 할 수 있습니다. TDD의 부작용은 회귀 테스트를 제공하는 단위 테스트의 지속적 성장 기반입니다. 소프트웨어의 필연성은 자동화 된 회귀 테스트 세트없이 유지되는 시스템이 시간이 지남에 따라 저하된다는 것입니다.

3

TDD가 개발자 s의 패러다임 전환임을 강조하십시오. 새 팀을 구성하는 경우 팀을 TDD 실무자로 완전히 효과적으로 파견하는 데 최대 6 개월이 걸립니다. 성숙한 애자일 팀이 TDD를 효과적으로 연습하면 페어링을 통해 새로운 개발자는 몇 번의 반복을 통해 스윙을 시작할 수 있습니다. 또한 한 팀의 쌍을 사용하여 새 회선을 시드함으로써 첫 번째 회선보다 훨씬 빠른 TDD 속도로 새로운 회선을 얻을 수 있습니다.

우리가 측정 한 프로젝트에서 팀이 TDD를 배운 후에 자동 기능/회귀 테스트에서 발견 된 결함이 6 배 감소한 것을 확인했습니다. 이는 상당한 비용 절감입니다. 또한이 코드는 각 기능에 대한 코드 줄이 적은 더 깨끗한 디자인을 반영합니다. TDD하지만 금 도금에 대한 가상 중단. TDD는 스토리 카드에 허용 기준이있는 경우 가장 효과적입니다.

TDD 또한 지속 가능한 페이스를 가능하게합니다. 팀은 코드가 거의 결함없이 깨끗하게 남아 있기 때문에 반복 할 때마다 동일한 수의 기능을 계속 사용할 수 있습니다. TDD 및 자동 기능/회귀 테스트의 경우 사용자 수용 테스트 중에 발견 된 결함이 거의 발견되지 않는 경우가 종종 있습니다.