문제

할 때 TDD, "이 클래스 / 기능에 대한 충분한 테스트"라고 말하는 방법은 무엇입니까?

즉, 모든 엣지 케이스 테스트를 완료했다고 언제 알 수 있습니까?

도움이 되었습니까?

해결책

테스트 중심 개발을 통해 테스트를 작성하기 전에 테스트를 작성합니다. 코드를 작성하고 테스트가 통과되면 이제 다른 테스트를 작성해야합니다. TDD를 올바르게 따르면 코드가 필요한 모든 작업을 수행하면 충분한 테스트를 작성했습니다.

Edge Cases의 경우 메소드에서 매개 변수를 검증하는 것과 같은 예를 들어 봅시다. 코드에 매개 변수를 추가하기 전에 코드가 각 사례를 올바르게 처리할지 확인하는 테스트를 만듭니다. 그런 다음 매개 변수와 관련 로직을 추가하고 테스트가 통과 할 수 있습니다. 더 많은 엣지 케이스를 생각하면 더 많은 테스트를 추가 할 수 있습니다.

한 번에 한 걸음 씩 가져 가면 코드 작성을 마치면 Edge Case에 대해 걱정할 필요가 없습니다. 이미 테스트를 작성했기 때문입니다. 물론, 항상 인간의 오류가 있고, 무언가를 놓칠 수 있습니다 ... 그 상황이 발생하면 다른 테스트를 추가 한 다음 코드를 수정해야합니다.

다른 팁

켄트 벡의 조언은 두려움이 지루함으로 바뀔 때까지 테스트를 작성하는 것입니다. 즉, 더 이상 적절한 수준의 두려움으로 시작한다고 가정 할 때 더 이상 어떤 것도 깨질 것을 두려워하지 않을 때까지.

어느 정도는 직감입니다.

"테스트가 내가 지금 생각할 수있는 모든 문제를 포착 할 것이라고 확신합니까?"

다른 수준에서는 이미 충족해야 할 일련의 사용자 또는 시스템 요구 사항이있어서 중지 할 수 있습니다.

Code Coverage를 사용하여 TDD 프로세스를 따르지 않았고 제거 할 수있는 코드를 찾으려면 코드 커버리지를 언제 중지 할시기를 알 수있는 유용한 방법으로 계산하지는 않습니다. 코드 적용 범위는 100%일 수 있지만 요구 사항을 포함하는 것을 잊어 버린 경우 실제로는 끝나지 않았습니다.

아마도 TDD에 대한 오해는 당신이 알아야한다는 것입니다. 모든 것 테스트하기 위해 앞쪽. TDD 프로세스로 인한 테스트는 빵 부스러기 트레일과 같기 때문에 이것은 잘못 안내됩니다. 당신은 과거에 무엇이 테스트되었는지 알고 있으며, 어느 정도 당신을 안내 할 수 있지만, 다음에 무엇을 해야할지 말하지는 않습니다.

TDD는 진화 과정으로 생각 될 수 있다고 생각합니다. 즉, 초기 디자인으로 시작하고 일련의 테스트입니다. 코드가 제작에 방해 받으면 더 많은 테스트와 해당 테스트가 통과되는 코드를 추가합니다. 여기에 테스트와 테스트를 추가 할 때마다 TDD도 수행하며 비용이 많이 들지 않습니다. 첫 번째 테스트 세트를 썼을 때 이러한 사례가 존재한다는 것을 알지 못했지만 지금 지식을 얻었으며 버튼을 터치 할 때 해당 문제를 확인할 수 있습니다. 이것은 TDD의 위대한 힘이며, 내가 너무 많은 것을 옹호하는 이유 중 하나입니다.

글쎄, 당신이 의도 한대로 작동하지 않는 더 이상 실패 사례를 생각할 수 없을 때.

TDD의 일부는 구현하려는 것들의 목록과 현재 구현에 문제가있는 것입니다 ... 따라서 해당 목록이 다 떨어지면 본질적으로 완료됩니다 ....

그리고 구현에서 버그 나 새로운 문제를 발견 할 때 언제든지 돌아가서 테스트를 추가 할 수 있습니다.

그 상식, 완벽한 대답은 없습니다. TDD 목표는 두려움을 제거하는 것입니다. 자신이 충분히 테스트했다고 확신한다면 계속 진행했습니다 ...

나중에 버그를 찾으면 먼저 테스트를 작성하여 버그를 재현 한 다음 수정하여 향후 변경을 방지하여 다시 파악할 수 있습니다!

어떤 사람들은 커버리지의 x%가 없을 때 불만을 제기합니다 .... 일부 테스트는 쓸모가 없으며 100% 적용 범위는 코드를 끊을 수있는 모든 것을 테스트하는 것은 아닙니다. 그것!

테스트는 원하는 것을 정확하게 설명하는 방법입니다. 테스트 추가로 확장됩니다 범위 당신이 원하는 것 또는 추가 세부 당신이 원하는 것.

더 이상 원하는 것을 생각할 수 없거나 원하는 것에 대한 개선을 생각할 수 없다면 다른 것으로 넘어갑니다. 항상 나중에 다시 올 수 있습니다.

TDD의 테스트는 사양, 실제로 그들은 될 수 있습니다 대리자 사양을 위해. TDD에서 테스트는 코드를 다루는 것이 아닙니다. 코드가 사양을 다루지 않으면 테스트에 실패하기 때문에 코드가 사양을 커버합니다. 당신이 가진 추가 코드는 중요하지 않습니다.

따라서 테스트가 귀하 또는 이해 당사자가 가진 모든 기대치를 설명하는 것처럼 보일 때 충분한 테스트가 있습니다.

어쩌면 나는 Agile/XP 세계 어딘가에서 무언가를 놓친 것일 수도 있지만 프로세스에 대한 나의 이해는 개발자와 고객이 기능의 일부로 테스트를 지정하십시오. 이를 통해 테스트 사례는보다 공식적인 요구 사항 문서를 대체 할 수 있으며 기능의 사용 사례를 식별하는 데 도움이됩니다. 따라서 이러한 테스트가 모두 통과 할 때 테스트 및 코딩이 완료되었습니다. 길을 따라

Alberto Savoia 말한다 저것 "모든 테스트가 통과되면 시험이 충분하지 않을 가능성이 있습니다.". 테스트에 대해 생각하는 좋은 방법이라고 생각합니다. 가장자리 케이스를하고 있는지, 예상치 못한 매개 변수 등을 통과하는지 물어보십시오. 테스트의 품질을 향상시키는 좋은 방법은 쌍과 함께 작동합니다. - 더 많은 테스트 사례에 대한 도움을 받으십시오. 테스터와 짝을 이루는 것은 다른 관점이 있기 때문에 좋습니다.

물론, 당신은 몇 가지 도구를 사용할 수 있습니다. 돌연변이 테스트 테스트에서 더 많은 자신감을 얻으십시오. 나는 사용했다 광대 그리고 그것은 내 테스트와 내가 쓴 방식을 모두 향상시킵니다. 그런 것을 사용하는 것을 고려하십시오.

친절한 안부

이론적으로 가능한 모든 입력 조합을 다루고 출력이 정확하지만 때로는 그만한 가치가 없음을 테스트해야합니다.

다른 많은 의견 중 많은 사람들이 머리에 못을 박았습니다. 테스트 범위가 주어진 코드에 대해 자신감이 있습니까? 코드가 발전함에 따라 테스트가 여전히 적절하게 다루고 있습니까? 테스트가 테스트중인 구성 요소의 의도 된 동작 및 기능을 캡처합니까?

행복한 매체가 있어야합니다. 더 많은 테스트 사례를 추가함에 따라 에지 케이스로 간주되는 것으로 간주되는 것이 지속적으로 변경됨에 따라 테스트가 취성 될 수 있습니다. 이전의 많은 제안에 따라 생각할 수있는 모든 것을 얻은 다음 소프트웨어가 성장함에 따라 새로운 테스트를 추가하는 것이 매우 도움이 될 수 있습니다. 이런 종류의 유기적 성장은 모든 노력없이 테스트가 성장하는 데 도움이 될 수 있습니다.

나는 거짓말을하지 않을 것이지만 추가 테스트를 작성하기 위해 돌아갈 때 종종 게으른다. 0 코드 또는 내가 신경 쓰지 않는 기본 생성자가 포함 된 해당 속성을 놓칠 수 있습니다. 때로는 프로세스에 대해 완전히 항문이되지 않으면 시간 N 영역이 중요하지 않은 영역 (100% 코드 커버리지 신화)을 절약 할 수 있습니다.

최종 목표는 최고 수준의 제품을 문 밖으로 나와 테스트를 죽이지 않는 것임을 기억해야합니다. 당신이 무언가를 놓치고있는 것처럼 그 직감이 있다면, 당신은 기회가 있고 더 많은 테스트를 추가해야합니다.

행운과 행복한 코딩.

항상 Emma와 같은 테스트 범위 도구를 사용할 수 있습니다 (http://emma.sourceforge.net/) 또는 Eclipse 플러그인 Eclemma (http://www.eclemma.org/) 또는 같은. 일부 개발자들은 100% 테스트 범위가 합당한 목표라고 생각합니다. 다른 사람들은 동의하지 않습니다.

무언가 실패 할 수있는 이유에서 모든 방법을 생각해보십시오. 널 값, 범위 외 값 등 등을 쉽게 생각할 수 없으면 다른 것으로 계속하십시오.

도로를 아래로 내려 가면 새로운 버그를 찾거나 방법을 생각해 내면 테스트를 추가하십시오.

코드 커버리지에 관한 것이 아닙니다. 코드는 "잘 테스트"되기 훨씬 전에 코드가 "덮여"있기 때문에 위험한 지표입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top