소프트웨어 테스트
소프트웨어에 잠재되어 있는 결함을 찾아내는 일련의 행위 또는 절차
- 개발된 소프트웨어가 고객의 요구사항을 만족시키는지 확인(Validation)
- 소프트웨어가 기능을 정확히 수행하는지 검증(Verification)
테스트는 오류를 찾는 작업, 디버깅은 오류를 수정하는 작업
소프트웨어 테스트의 기본원칙
- 테스팅은 결함을 찾아내는 활동: 결함을 줄일 순 있지만, 결함이 없다고 증명할 수 없음
- 완벽한 테스팅 불가능: 무한경로, 무한입력으로 인한 어려움
- 개발 초기에 테스팅 시작: 테스팅 기간 단축, 재작업 감소로 개발기간 단축 및 결함 예방
- 결함 집중(Defect Clustering)
- 결함의 대부분은 소수의 특정한 모듈에 집중되어 존재
- 파레토 법칙(Pareto): 20% 모듈에서 80% 결함 발견(20.6)⭐️
- 살충제 패러독스(Presticide Paradox): 반복적인 테스트로는 새로운 결함을 찾지 못함
- 테스팅은 정황(Context)에 의존적: 소프트웨어 성격에 맞게 테스트 실시
- 오류-부재의 궤변: 요구사항을 충족하지 못하면, 결함이 없다해도 품질이 좋다 볼 수 없음
➥ 결완초집 살정오
테스트 프로세스
- 테스트 계획
- 테스트 분석 및 디자인
- 테스트케이스 및 시나리오 작성
- 테스트 수행
- 테스트 결과 평가 및 리포팅
테스트 산출물
테스트 계획서, 테스트 케이스, 테스트 시나리오, 테스트 결과서
테스트 케이스
특정 목표를 검증하기 위해 설계된 입력값, 실행조건, 기대결과를 포함한 테스트 항목의 명세서
- 테스트 계획을 바탕으로 작성됨
- 명세 기반 테스트(블랙박스 테스트)의 설계 산출물에 해당
테스트 시나리오
- 테스트 수행을 위한 여러 개의 테스트 케이스의 집합
- 테스트 케이스의 동작 순서를 기술한 문서
- 테스트 절차를 명세한 문서
작성 시 유의점
- 시스템별, 모듈별, 항목별 등 여러 개의 테스트 시나리오 분리
- 고객의 요구사항과 설계 문서, 사용자 시나리오 등을 참고해 작성
- 항목: 식별자 번호, 순서 번호, 테스트 데이터, 관련 테스트 케이스, 예상 결과, 확인 항목
테스트 오라클⭐️
- 테스트케이스에 대해 프로그램의 실제 실행결과가 올바른 결과인지를 판단하는 메커니즘(기법)
- 사전에 정의된 참값을 입력하여 비교
테스트 오라클의 종류
참(True) 오라클
- 모든 입력값에 대해 정확한 결과를 생성
- 발생된 오류를 완벽하게 검출 가능
- 크리티컬한 시스템에서 사용(항공기, 임베디드시스템 등)
샘플링(Sampling) 오라클
- 특정 입력값들에 대해서만 예상되는 결과를 제공
- 대부분의 일반적인 소프트웨어에서 사용
휴리스틱(Heurisitc) 오라클
- 특정 입력값에 대해서는 정확한 결과를 제공하나,
- 나머지 입력값에 대해서는 근사(추정)결과 제공
일관성(Consistent) 검사 오라클
- 소프트웨어 변경 전후 테스트 결과값이 동일한지 검증