테스팅의 7 가지 원리
- 테스팅은 결함이 존재함을 밝히는 활동이지, 결함이 없음을 밝히는 활동이 아니다.
결함이 없다는 것을 증명할 수는 없다.
결함이 전혀 발견되지 않았다 하더라도 해당 소프트웨어가 완벽하다는 뜻은 아니다.
- 완벽한 테스팅은 불가능하다.
아주 간단한 소프트웨어를 제외하고는 모든 것을 테스팅한다는 것은 불가능하다.
입력과 사전 조건의 모든 조합을 테스트할 수 는 없다.
- 조기 테스팅으로 시간과 비용을 절약할 수 있다.
초기에 결함을 찾기 위해서는 소프트웨어 개발 수명주기 중 가능한 이른 시점에 정적, 동적 테스트 활동을 해야한다. 나중에 큰 비용이 필요한 수정을 줄이거나 없앨 수 있다.
초기부터 시작하는 테스팅: shift left
- 결함은 집중된다.
출시 전 테스팅에서 발견하는 결함은 대부분 소수의 모듈에 집중되어 발생한다.
예상 결함 집중 영역, 실제로 관측한 결함 집중 영역은 리스크 분석의 주요 입력값으로 사용된다.
- 살충제 패러독스에 유의하라
같은 테스트를 계속해서 반복 실행하면 결국 해당 테스트로는 결함을 발견할 수 없게 된다.
새로운 결함을 발견하려면 테스트 데이터를 바꾸고 새로운 테스트를 작성할 필요가 있다.
살충제 패러독스가 좋은 것을 의미하는 경우는, 자동 리스레션 테스팅의 경우 리그레션 결함이 적다는 것을 의미할 때와 같은 상황이다.
- 테스팅은 정황 context에 의존적이다.
테스팅은 정황에 따라 다르게 진행된다.
- 오류 부재는 궤변이다.
모든 가능한 테스트를 실행하는 것, 모든 결함을 발견하는 것은 불가능하다.
단순히 많은 결함을 발견하고 고쳤다고 해서 시스템의 성공이 보장되는 것도 아니다.
정의된 요구사항을 충분히 테스트하고 발견된 모든 결함을 수정하기 어렵더라도 완벽한 시스템이 아닐 수 있다.