2010-12-19 5 views
3

난 애플 리케이션을 마친 후 그 모든 방법을 커버 단위 테스트를 작성하려고 해요.코드 작성 후 단위 테스트를 수행하는 것은 쓸모가 없습니까?

내가하는 일은 어떻게 작동하는지에 대한 지식으로 내 코드를 테스트하고 있음을 보는 것입니다.

코드가 작동하는 방식을 알고 실제로 코드가 무엇인지 테스트 중이므로 약간 나를 바보로 만듭니다.

내 질문은 :

이 소용인가? 임무가 무엇인지 테스트하는 것이지 무엇을 할 것인가가 아닙니다. 내 코드는 작동하지만 개선 할 수 있습니다. 그런 다음 :

내 테스트를 모두 완료하고 코드를 리팩터링하여 내 테스트를 "코드 작동 방식"으로 변경하고 테스트를 통과하도록 앱을 변경해야합니까?

감사합니다.

+0

항상 막대를 녹색으로 유지해야합니다. –

답변

7

"코드가 작동하는 방법"을 테스트해야합니다. 즉, 특정 메소드가 어떻게 작동해야하는지 명확하게 파악한 다음 해당 동작을 다루는 일련의 테스트를 작성하십시오. 코드가 테스트에 실패하면 문제를 해결할 수 있습니다.

코드가 작동하더라도 리그 레션 테스트를위한 테스트가 필요합니다. 나중에 코드를 수정하거나 새 확장을 추가 할 때 기존 기능을 손상시키지 않아야합니다. 오늘 파생 된 테스트 세트가 얼마나 잘했는지 말할 수 있습니다.

+0

좋습니다. 하지만 내 코드를 분리하려고 할 때도 한 방법을 변경해도 아직 테스트하지 않은 다른 코드가 손상 될 수 있으므로 먼저 테스트를 작성한 다음 리팩토링 도구를 쓰는 것이 좋습니다. (변경하면 다른 방법에 빨간색 표시등이 표시됨) –

+0

@ Jesus Rodriguez 예. 그거 맞아. 적절한 테스트 커버리지를 가진 코드는 수정하기가 더 쉽습니다. 이러한 이유 때문에 항상 테스트를 완료하는 것이 좋습니다. –

+1

리팩터링 (인터페이스 변경이있는 경우) 후에 테스트를 수정해야하는 것은 고통 스러울 수 있지만 나중에 더 나은 디자인을 수행하도록 안내 할 것입니다. ("고통없이, 이득이 없음") 공용 인터페이스가 향후 코드 변경에 충분히 견고한지를 설명하는 좋은 방법이기도합니다. 사실상 인터페이스 변경시 사용자의 고통을 느끼게합니다. – rwong

1

적어도 을 시도해보십시오. 작동 방법에 대한 테스트를 빌드하려면을 시도하십시오. 따라서 사전에 테스트를 작성하는 것이 더 좋지만 테스트를 작성하는 것은 여전히 ​​쓸모가 없습니다.

이유 : 현재 코드를 테스트하기 위해 테스트를 빌드하지 않지만 향후 수정을 테스트하기 위해 테스트를 빌드하는 것입니다. 단위 테스트는 수정으로 인해 이전 코드가 손상되지 않았는지 테스트하는 데 특히 유용합니다.

2

코드를 변경하면 매우 유용합니다.

+0

그리고 여러 가지 이유가 있습니다. 어떤 코드가 어떻게 동작해야하는지 명확한 예가있는 경우. –

3

필자는 항상 테스트 주도 개발 (테스트 구현 작성) 테스트를 수행하지는 않지만 코드를 구현 한 후에는 항상 테스트를 작성합니다. 며칠 후. 적어도 나는 경로 커버리지 전략 (처음부터 그 길로 돌아 오는 모든 경로 흐름)을 따르려고합니다. 또한 예기치 않은 매개 변수 값. 이는 코드를 변경할 때도 함수의 올바른 작동에 대한 자신감을 높이는 데 유용합니다.

가 아주 항상 내가 예기치 않은 동작 또는 약간의 버그를 발견 :) 그래서

2

꽤 쓸모가 작동, 내가 말할 것입니다. 이유 때문에 "테스트 구동"이라고합니다. 모든 코드 행은 테스트에 의해 동기 부여됩니다.

즉, 코드 줄도 변경으로부터 보호됩니다.

시험 주도 개발에는 최소한의 접근법과 많은 수련이 필요합니다. 테스트를 추가하여 기능을 조금 확장하십시오. 기능을 구현하여 연한 녹색을 만들뿐 아니라 더 많은 것을 만들 수 있습니다. 검사가 당신이 진지한 것을 만들 때까지 어리석은 실행을하십시오.

기존 코드에 테스트를 추가하려고 시도했지만 어려웠습니다. 일부 기능 만 테스트되는 경향이 있습니다. 이것은 테스트 스위트가 사람들에게 코드가 보호된다고 생각하게하기 때문에 위험합니다.한 가지 방법은 코드를 한 줄씩 살펴보고 테스트가 있는지 확인하는 것입니다. 테스트를 통해 원래 버전으로 돌아갈 때까지 코드를 어리석게 변경하십시오. 결국 코드를 ​​변경하면 테스트가 중단됩니다.

그러나 코드에서 요구 사항을 유도 할 수있는 방법은 없습니다. 리버스 엔지니어링의 결과 인 테스트 스위트는 완료되지 않습니다.

0

물론 가장 좋은 방법은 구현하기 전에 단위 테스트를 수행하여 더 많은 이익을 얻을 수 있지만 단위 테스트를 통해 리펙터 또는 리셋 할 때 많은 버그가 발생하지 않도록하는 것입니다. 구현 전후에 단위 테스트를 구현했는지 여부에 관계없이 새로운 기능을 구현하십시오.

+0

이렇게하면 코드가 테스트 구동식이 아닌 잘못된 인상을 줄 수 있습니다. 다음은 몇 가지 테스트가 추가 된 코드의 좋은 예입니다. http://circularbuffer.codeplex.com. –

관련 문제