소프트웨어 테스팅에는 몇 가지 핵심 원칙이 있으며, 이를 이해하면 테스트 전략을 효과적으로 수립하고, 한계를 명확히 인식할 수 있다
1. 테스팅은 결함의 존재를 밝히는 활동이다 (Bug Detection)
즉, 테스팅은 결함을 줄이는 과정이지, 결함이 없음을 증명하는 과정이 아님
2. 완벽한 테스팅은 불가능하다 (Impossible to Test Everything)
즉, 모든 것을 테스트하려 하기보다는, 효율적으로 중요한 부분을 테스트하는 것이 중요
3. 조기 테스팅으로 시간과 비용을 절약할 수 있다 (Early Testing Saves Cost & Time)
즉, 개발 초기부터 정적 테스팅(문서 검토, 코드 리뷰)과 동적 테스팅을 병행하는 것이 중요
4. 결함은 집중된다 (Defect Clustering, 파레토 법칙 적용)
즉, 모든 부분을 동일하게 테스트하기보다, 결함 발생 가능성이 높은 부분에 테스트를 집중해야 함
5. 테스트 효과는 줄어든다 (Pesticide Paradox, 살충제 패러독스)
즉, 테스트 케이스를 지속적으로 개선하지 않으면, 테스트 효과가 감소할 수 있음
6. 테스팅은 정황에 의존적이다 (Context-Dependent Testing)
즉, 게임 소프트웨어, 금융 시스템, 의료 소프트웨어 등은 각각 다른 테스트 전략이 필요함
7. 결함-부재는 궤변이다 (Absence-of-Defects Fallacy)
즉, 결함을 줄이는 것만이 아니라, 사용자의 실제 기대와 비즈니스 목표를 충족하는 것이 더 중요함