본문 바로가기

Testing Tools

General Testing Principles

http://blog.naver.com/qlabcorp?Redirect=Log&logNo=90121618929

1. 테스팅은 결함의 존재를 밝히는 활동이다.(Testing shows presence of defects)

 - 테스트는 최종 소프트웨어의 품질보증을 위해 결함을 밝혀내는 행위일 뿐, 결함이 없다는 것을 증명할 수는 없다.

2. 완벽한 테스팅은 불가능하다.(Exhaustive testing is impossible.)
 - 소프트웨어 테스팅을 통해 모든 결함을 도출해 내는 것은 불가능하다. 리스크 분석과 결정된 우선순위에 따라 비중이 큰 부분을 중심으로 하는 테스팅(Risk-based Testing)이 이루어져야한다.

3. 테스트는 개발 초기에 시작된다.(Early testing)
 - 실제 구현단계 이전의 요구조건명세, 기능설계서에 대한 리뷰(Review), 인스펙션(Inspection)과 같은 정적 테스팅이 매우 중요하다. 이는 개발 후반부 결함 검출에 따르는 테스팅 비용과 수정 일정의 단축을 가능하게 한다.

4. 결함 집중(Defect clustering)
 - 신규 기술이 적용된 모듈, 상호작용의 인터페이스가 복잡한 컴포넌트 부분에 오류의 집중화가 발생할 가능성이 높다. 사전 테스팅 설계 단계에서 시스템 컴포넌트의 역할 기능과 구현에 대한 분석과 예측이 반영되어야 한다.

5. 살충제 패러독스(Pesticide paradox)
 - 동일한 테스트 케이스로 동일한 테스트를 반복적으로 수행한다면 더 이상 새로운 버그를 찾아내지 못할 것이다. 이러한 '살충제 패러독스'를 극복하기 위해서는, 테스트 케이스를 정기적으로 리뷰하고 개선할 필요가 있고, 소프트웨어 또는 시스템의 다른 부분을 새롭고 다른 시각으로 테스트하는 것이 필요하다.

6. 테스트는 정황에 의존적이다. (Testing is context dependent.)
 - 개발하는 소프트웨어의 도메인 분야, 목적 정황에 대한 분석을 통해 적절한 테스팅 기법이 선택되어야 한다. 소프트웨어 결과물의 기능적/정황적 특성을 반영한 테스팅 설계가 이루어져야 효율적인 테스트가 가능하다.

7. 오류 부재의 궤변(Absence-of-errors fallacy)
 - 아무리 테스팅 과정을 잘 수행한다고 해도, 최종 결과물이 고객의 필요와 기대에 부합되지 못하고 쓸모없다면, 결함을 찾고 수정하는 과정은 아무 소용이 없다.