애플리케이션에 잠재되어 있는 결함을 찾아내는 일련의 행위 또는 절차이다.
개발된 소프트웨어가 고객의 요구사항을 만족시키는지 확인하고 소프트웨어가 기능을 정확히 수행하는지 검증한다.
테스트 실행 전 개발한 소프트웨어의 유형을 분류하고 특성을 정리해서 중점적으로 테스틑할 사항을 정리해야 한다.
테스트를 통해 프로그램 실행 전에 오류를 발견하여 예방
반본적인 테스트로 신뢰도 향상
단순한 오류 발견뿐만 아닌 새로운 오류의 유입도 예방
최소한의 시간과 노력으로 많은 결함을 찾음
잠재적인 결함을 줄일 수 있지만 소프트웨어에 결함이 없다고 증명할 수는 없다. 즉 완벽한 소프트웨어 테스팅은 불가능하다.
결함은 대부분 개발자의 특성이나 애플리케이션의 기능적 특징때문에 특정 모듈에 집중되어 있다. 애플리케이션의 20%에 해당하는 코드에서 전체 80%의 결함의 발견되다고 하여 파레토 법칙을 적용하기도 한다.
동일한 테스트 케이스로 테스트를 반복하면 더 이상 결함이 발견되지 않는 살충제 패러독스 현상이 발생한다. 이를 방지하기 위해서 테스트 케이스를 지속적으로 보완 및 개선해야한다.
소프트웨어 특징, 테스트 환경, 테스터 역량 등 정황에 따라 테스트 결과가 달라질 수 있으므로, 다르게 수행해야 한다.
결함을 모두 제거해도 요구사항을 만족시키지 못하면 품질이 높다고 할 수 없다. 이는 오류-부재의 궤변이라고도 한다.
테스트와 위험은 반비례한다. 테스트를 많이 하면 할 수록 위험을 줄인다.
작은 부분에서 시작하여 점점 확대해서 진행해야 한다.
개발자와 관계없는 별도의 팀에서 수행해야 한다.