양자 모두.
결정 론적 테스트와 비결정론 적 테스트에는 스위트마다 다른 사용 사례와 다른 값이 있습니다. 일반적으로 비결정론 적 (nondeterministic)은 결정 론적 (deterministic) 테스트와 동일한 정밀도를 제공 할 수 없으며, "비결정론 적 테스트는 가치를 제공하지 않습니다." 이것은 거짓입니다. 그것들은 덜 정확할 수도 있지만, 훨씬 더 넓을 수도 있으며, 그 자체의 이점이 있습니다.
예를 들어 보자. 정수 목록을 정렬하는 함수를 작성한다. 유용한 결정적 단위 테스트는 무엇입니까?
- 빈 목록
- 요소가 하나만있는 목록
- 동일한 요소가 모두있는 목록
- 여러 개의 고유 한 요소가있는 목록
- 여러 요소가 포함 된 목록 (일부는 중복 됨)
- 목록
NaN
, INT_MIN
그리고INT_MAX
- 이미 부분적으로 정렬 된 목록
- 10,000,000 개의 요소가있는 목록
그리고 그것은 단지 정렬 기능입니다! 물론, 이들 중 일부는 불필요하거나 일부는 비공식적 추론으로 배제 될 수 있다고 주장 할 수 있습니다. 그러나 우리는 엔지니어이며 비공식적 인 추론이 우리의 얼굴에 터지는 것을 보았습니다. 우리는 우리가 구축 한 시스템을 완전히 이해하거나 머리 속에 복잡성을 완전히 유지할만큼 똑똑하지 않다는 것을 알고 있습니다. 그래서 우리는 처음에 테스트를 작성합니다. 비 결정적 테스트를 추가한다고해서 모든 좋은 테스트를 선험적으로 알기에는 반드시 영리하지는 않을 것입니다. 반 랜덤 데이터를 함수에 던져서 놓친 경우를 찾을 수 있습니다.
물론 결정 론적 테스트도 배제하지는 않습니다. 비 결정적 테스트는 프로그램의 거대한 부분에서 버그를 찾는 데 도움이됩니다. 그러나 버그를 발견하면 수정했다는 것을 보여주는 재현 가능한 방법이 필요합니다. 그래서:
- 비 결정적 테스트를 사용 하여 코드에서 버그 를 찾으십시오.
- 결정적 테스트를 사용 하여 코드에서 수정 사항 을 확인하십시오.
이것은 단위 테스트에 대한 많은 확실한 조언이 반드시 비 결정적 테스트에 적용되는 것은 아니라는 것을 의미합니다. 예를 들어, 그것들은 빨라야합니다. 낮은 수준의 속성 테스트는 빠르지 만 "웹 사이트에서 사용자가 임의로 버튼을 클릭하고 500 오류가 발생하지 않는지 확인"과 같은 비 결정적 테스트는 속도에 대한 종합 성을 선호해야합니다. 개발 속도를 늦추지 않도록 빌드 프로세스와 독립적으로 실행되는 테스트를 수행하십시오. 예를 들어, 자체 전용 준비 상자에서 실행하십시오.