2009-05-15 7 views
2

나는 TDD를 서버 측 개발에 사용 해왔다. 단위 테스트로 둘러싼 모든 프로덕션 코드의 이점이 리팩토링에 필요한 것보다 4 배 많은 시간을 소비하는 단점보다 중요한지 잘 모르겠습니다.실패한 단위 테스트를 작성하기 전까지 프로덕션 코드를 작성할 수 없다는 것을 알고 있으므로 관리자에게 UI를 작성할 수 없다고 말할 수 있습니까?

하지만 UI 코드를 개발할 때 단순히 TDD를 적용 할 수 없습니다. 그 밖의 모든 근본 주의자들에게 TDD의 첫 번째 법은 "실패한 단위 테스트를 작성할 때까지 생산 코드를 작성할 수 없습니다"라고 명시합니다. 그러나 UI를 개발하는 경우 어떻게 될 수 있습니까?

는 (하나는 셀레늄과 같은 수용 테스트 프레임 워크를 사용할 수 있지만 소스 코드와 직접 상호 작용하지 않기 때문에 즉, 계산하지 않습니다.)

그래서, 나는 그 때문에 새의 내 매니저를 알 수 있습니다 > 90 % 코드 커버리지 정책 사용자 인터페이스 코드를 작성할 수 없습니까?

+3

단위 테스트를 작성하고 리팩토링하는 데 4 배의 시간이 소요되면 TDD를 잘못 사용하고있는 것입니다. – DevinB

+0

그래, 절망 속에서 내가 잘못하고 있다고 느낀다. 나는 그것을 바로하는 법을 알아 내지 못했습니다 ... (비록 그것에 관한 책을 읽었지 만 ...) – ivo

+0

나는 동의하지 않습니다. 당신이 당신의 모든 기지를 다루지 않는 한 단위 테스트는 시간이 좀 걸립니다. , 그리고 만약 당신이 아니라면 당신은 단위 테스트를하지 않을 수도 있습니다. – Hugoware

답변

3

첫째을 읽고, 심지어 로버트 마틴 testing challenges with UIs있다.

UI를 TDDing 할 때 가능한 행동에 최대한 근접한 "행동 계약"을 작성합니다. 이상적으로는 단위 테스트를 의미합니다. 그러나 일부 UI 프레임 워크는이를 어렵게 만듭니다. 사용자가 UI 동작을 예상하는 방법을 파악하기 위해 뒤로 물러나 통합 또는 "수용"테스트를 사용해야합니다.

단위 테스트를 사용할 수 없으면 계산되지 않습니까? 그것은 당신이 점수를 유지하기 위해 사용하고있는 규칙에 달려 있습니다. "단위 테스트 수만"규칙은 초보자가 "부정사를 나누지 마십시오"또는 "수동적 인 목소리를 피하지 마십시오"와 같은 맥락에서 살아 가기 위해 좋은 것입니다. 결국, 당신은 그 규칙의 경계가 어디인지를 배웁니다. 한 번의 팟 캐스트에서 켄트 벡 (Kent Beck)은 단위 테스트와 통합 테스트의 조합을 적절하게 사용하는 것에 대해 이야기합니다. (정확히 말하면 그것이 그를 귀찮게하지는 않음을 추가합니다.)

TDD가 목표 인 경우 진행 속도가 느릴 수 있지만 가장 먼저 Selenium 테스트를 작성할 수 있습니다. 저는 셀렌 RC를 큰 효과 (그리고 테스트가 너무 느리게 실행되기 때문에 커다란 고통)로 사용한 여러 프로젝트에 참여했습니다.

프레임 워크가 무엇이든간에 Google과 동일한 전투를 벌인 사람들의 TDD 도움말을 Google에 알릴 수 있습니다.

0

단위 테스트는 UI 코드에 적합하지 않습니다. 기능 테스트는 UI를 테스트하는 데 사용되지만 처음 테스트를 작성할 수는 없습니다. 관리자에게 문의하여 90 % 이상의 코드 범위 정책이 UI 코드를 다루는 지 확인해야합니다. 만약 그렇다면, 그는 아마도 그 행동을 심각하게 재고해야 할 것입니다.

+0

마크 업용 TDD 나 자바 스크립트 (ASP.NET을 사용하는 경우)는 사용할 수 없지만 TDD는 코드 뒤에 사용할 수 있습니다 UI 요소의 경우 C# 코드 숨김에서 계속 논리 및 계산이 수행되면 단위 테스트를 수행 할 수 있습니다. – DevinB

0

UI와 비즈니스 로직을 분리하고 UI 코드의 합계가 전체의 10 % 미만인지 확인하십시오. 걱정의 분리가 TDD의 주된 목표이기 때문에 실제로는 좋은 일입니다.

90 %의 적용 범위는 ... 현존하는 문헌을 검토하는 것이 가장 좋습니다 (나는 Kent Beck와 Bob Martin에 초점을 맞 춥니 다). 나는 당신이 어리석은 보도를 따르지 않는 것에 대한지지를 찾을 것이라고 생각합니다. 백분율 (실제로 Bob 삼촌은 최근에이 블로그 게시물을 썼습니다).

+0

켄트 벡과 밥 마틴? 당신은 명확히 할 수 있습니까? 그들의 책은 높은 코드 적용 범위를 방어하는 논증으로 사용됩니다 ... 삼촌은 TDD를 사용하지 않는 것이 무책임하고 비전문적이라고 말합니다 ... 블로그 게시물에 대한 링크가 있습니까? Thanks – ivo

3

TDD는 별도의 테스트 방법입니다. UI를 테스트하려면 단위 테스트가 아닌 통합 테스트를 수행하십시오. 따라서 신중하게 프로젝트의 관심사를 분리한다면 TDD를 모든 종류의 프로젝트에 성공적으로 적용 할 수 있습니다.

+0

어떤 종류의 Menu 클래스가 있고 사용자 상호 작용 동작을 구현하려고한다고 가정 해보십시오. 이것은 통합 테스트가 아닙니다. 어떻게 테스트 할 수 있습니까? 생산 코드를 작성하기 전에 실패한 단위 테스트를 어떻게 작성할 수 있습니까? 이 수업에도 TDD를 적용 할 수 있습니까? – ivo

+0

물론 이러한 시나리오에 적합한 MVP 패턴 (http://msdn.microsoft.com/en-us/magazine/cc188690.aspx)을 확인해야합니다. –

+0

기본적으로보기 (인터페이스)에 대한 참조가 있고 그것을 조작하는 것은 발표자입니다. –

0

스마트 데브가 한 테스트에서 100 % 커버리지를 얻을 수 있기 때문에> 90 % 코드 커버리지를 갖는 A는 바보입니다. ;)

WPF를 사용하는 경우 MVVM 패턴을 사용하면 UI 코드를 테스트 할 수 있습니다. UI 코드를 테스트하면 ModleView를 테스트 할 수 있지만 XAML을 테스트 할 수있는 것은 아 닙니다.

5

TDD로 작성하면 리팩터링에 4 배 더 많은 시간을 소비하게되는 경우 더 잘 격리 된 테스트를 작성해야하며 실제로 의도 한대로 테스트를 수행해야합니다. 테스트없이 리팩터링 할 때 디버거에서 소비하는 시간은 계산하지 않습니다. 리팩터링 할 때 소개하는 버그에 다른 사람이 소비하는 시간은 말할 것도 없습니다.

어쨌든 here은 TDD가 UI 개발을 의미하는 것에 대한 좋은 조언입니다. 코드 범위로 변환되는 양은 UI 프레임 워크에 크게 의존합니다.

확실히 관리자에게 말할 수는 없지만 할 수있는 사람으로 대신 할 수 있습니다.

1

그 정책은 조금 인공적으로 들리지만, UI가 기능 테스트 케이스가 필요하며 단위 테스트가 필요하지 않다는 대답에 동의합니다. 그러나 내가 먼저 오는 지점에 동의하지 않습니다. 필자는 UI가 개발되기 전에 UI 기능 테스트를 작성해야만 환경에서 잘 작동한다는 것을 알았습니다. 물론, 이것은 당신이 앞에서 어떤 디자인 작업을한다고 가정합니다.테스트 케이스 작성자와 개발자가 디자인에 동의하는 한 코딩을 시작하기 전에 테스트 케이스를 작성하는 것이 가능합니다. 코드는 모든 테스트 케이스를 통과시켜야합니다. 같은 기본 원칙이지만 편지에 대한 법을 따르지 않습니다.

+0

인공적인 특성에 동의합니다. 관리자가 90이라는 숫자를 듣고 적용 범위 문제를 완전히 이해하지 않고 규칙으로 만든 것처럼 들립니다. – JeffH