Validation and Verification

소프트웨어 테스팅에서 Validation과 Verification은 서로 다른 관점과 목적을 가지고 있다.
Verification은 “제품을 올바르게 만들고 있는가?“를 확인하는 과정이고, Validation은 “올바른 제품을 만들고 있는가?“를 확인하는 과정이다.
이러한 근본적인 차이는 테스트 방법과 접근 방식에 큰 영향을 미친다.

Verification

Verification은 “우리가 제품을 올바르게 만들고 있는가?” 라는 질문에 답하는 프로세스로, 개발 과정 중에 제품이 명세된 요구사항과 설계 문서에 따라 정확하게 구현되고 있는지를 검증한다.

개발자와 테스터가 수행하며, 코드 레벨에서의 정확성과 기술적 완성도를 중요시한다.
예를 들어, 특정 함수가 입력값에 대해 정확한 출력값을 반환하는지, 데이터베이스 쿼리가 예상대로 작동하는지 등을 확인한다.

Validation

Validation은 “우리가 올바른 제품을 만들고 있는가?” 라는 질문에 답하는 프로세스로, 개발된 제품이 실제 사용자의 요구사항과 기대를 충족시키는지 확인하는 과정이다.

사용자 관점에서의 테스트가 주를 이루며, 실제 운영 환경에서의 적합성과 사용성을 중요시한다.
예를 들어, 사용자가 웹사이트에서 원하는 정보를 쉽게 찾을 수 있는지, 모바일 앱의 인터페이스가 직관적인지 등을 확인한다.

프로세스와 방법론의 차이

Verification은 주로 정적 테스팅 방법을 사용한다.
코드 리뷰, 문서 검토, 정적 분석 등이 여기에 해당한다.
Validation은 동적 테스팅 방법을 주로 사용하며, 실제 시스템을 실행하면서 테스트를 수행한다.
사용자 시나리오 테스트, 성능 테스트, 사용성 테스트 등이 이에 해당한다.

품질 보증에서의 역할

두 테스트 방식은 상호 보완적인 관계에 있다.
Verification이 제품의 기술적 완성도를 보장한다면, Validation은 제품의 실용적 가치를 보장한다.
따라서 효과적인 품질 보증을 위해서는 두 가지 접근 방식을 모두 적절히 활용해야 한다.

Validation and Verification

비교 기준Verification (검증)Validation (확인)
정의제품을 올바르게 만들고 있는지 검증 (Building the product right)올바른 제품을 만들고 있는지 확인 (Building the right product)
목적개발 중인 제품이 명세와 표준을 준수하는지 확인개발된 제품이 실제 사용자의 요구사항을 충족하는지 확인
수행 시점개발 단계에서 지속적으로 수행개발 후반부나 완료 단계에서 수행
수행 주체개발팀, QA팀, 테스트 엔지니어최종 사용자, 고객, QA팀
검증 대상코드, 문서, 설계 명세, 기술 표준 준수 여부사용자 요구사항, 비즈니스 목표 달성 여부
주요 활동- 코드 리뷰
- 정적 분석
- 단위 테스트
- 통합 테스트
- 기술 명세 검토
- 시스템 테스트
- 인수 테스트
- 베타 테스트
- 사용성 테스트
- 성능 테스트
테스트 방식- 화이트박스 테스팅
- 정적 테스팅
- 구조 기반 테스팅
- 블랙박스 테스팅
- 동적 테스팅
- 행위 기반 테스팅
평가 기준- 코딩 표준 준수
- 기술 명세 충족
- 설계 요구사항 만족
- 사용자 요구사항 충족
- 비즈니스 목표 달성
- 실제 환경에서의 적합성
주요 산출물- 코드 리뷰 보고서
- 테스트 결과 문서
- 정적 분석 보고서
- 기술 검토 문서
- 사용자 인수 테스트 보고서
- 시스템 테스트 결과
- 성능 테스트 보고서
- 베타 테스트 피드백
오류 발견 시점개발 초기 단계에서 발견 가능개발 후반부나 실제 사용 단계에서 발견
비용 영향초기에 문제 발견으로 수정 비용 최소화후반부 발견으로 수정 비용이 상대적으로 높음
적용 범위개별 컴포넌트나 모듈 수준의 검증전체 시스템 수준의 검증
자동화 가능성높은 자동화 가능성 (단위 테스트, 정적 분석 등)부분적 자동화 가능 (일부 시스템 테스트)
품질 관점내부 품질 (기술적 완성도) 중심외부 품질 (사용자 만족도) 중심
리스크 관리기술적 리스크 감소에 중점비즈니스 리스크 감소에 중점

참고 및 출처