응용 프로그램 또는 시스템(구성요소 포함)의 동작과 성능, 안정성이 요구하는 수준을 만족하는지 확인하기 위해 결함을 발견하는 과정
사용자의 기대 수준과 요구 사항에 맞게 구현되고 동작하는지를 확인하고 이를 통해 결함을 발견, 최종적으로 결함 데이터를 근간으로 개발 프로젝트의 리스크(Risk)에 대한 수치적인 판단 근거를 의사 결정권자(프로젝트 관리자 등)에게 전달하는 것
정적 테스트: 프로그램을 개발하기 전 요구사항 등을 리뷰하는 것
동적 테스트: 프로그램 개발 이후 실제 실행하며 테스트하는 것
1) 테스팅을 통해 릴리즈 전에 발견되지 않은 결함들이 수정된다면, 운영 환경 내에서 발생하는 리스크(risk)를 줄이는데 기여할 수 있으며 소프트웨어 품질에 도움을 줍니다.
2) 테스팅은 개발 초기의 요구사항 분석 단계부터 리뷰 및 인스펙션을 통해 정적으로 이뤄질 수 있으며 각각의 개발 단계에 대응하는 테스트 레벨(test level)에 따른 테스팅이 이뤄집니다.
3) 기존에 운영되는 소프트웨어 시스템이 유지 보수 활동으로 변경 및 단종되거나 환경이 변하는 경우, 변경된 소프트웨어에 대한 테스팅과 변경된 환경에서의 운영 테스팅이 요구됩니다.
4) 소프트웨어 테스팅은 계약상(법적) 요구조건들, 또는 산업에 특화된 표준들을 만족시키기 위해서 필요합니다.
테스팅은 결함이 존재함을 밝히는 활동
🍁 결함이 없다는 것은 증명 불가, 테스트 한 부분까지만 잘 동작한다고 말할 수 있고 테스트를 하지 않은 부분은 결함 유무 예측 불가
완벽한 테스팅(Exhaustive testing)은 불가능
🍁 완벽한 테스팅 대신, 리스크 분석과 결정된 우선순위에 따라 테스팅 활동 노력을 집중시켜야 함
테스팅을 개발 초기에 시작
🍁 소프트웨어나 시스템 개발 수명주기에서 가능한 초기에 시작되어야 하며, 설정한 테스팅 목표에 집중해야 함
🍁 개발의 시작과 동시에 테스트를 계획하고 전략적으로 접근하는 것을 고려 + 요구사항 분석서와 설계서 등의 개발 중간 산출물을 분석하여 테스트
REFERENCES
https://www.boostcourse.org/web326/lecture/58975/?isDesc=false