문서의 각 단락이 어느 리비전에서 마지막으로 수정되었는지 확인할 수 있습니다. 왼쪽의 정보 칩을 통해 작성자와 수정 시점을 파악하세요.

V&V | |
이름 | V&V |
전체 명칭 | Verification and Validation |
분류 | |
주요 목적 | 소프트웨어 또는 시스템이 요구사항을 올바르게 구현했는지 확인하고, 사용자의 의도에 맞는지 검증 |
핵심 활동 | |
적용 분야 | |
상세 정보 | |
검증(Verification) 정의 | "제품을 올바르게 만들고 있는가?" (Are we building the product right?) - 명세서나 설계 대비 구현의 정확성을 평가 |
검증(Validation) 정의 | "올바른 제품을 만들고 있는가?" (Are we building the right product?) - 사용자 요구사항이나 실제 필요에 대한 적합성을 평가 |
주요 기법 (검증) | |
주요 기법 (검증) | |
실행 시기 | 검증은 주로 개발 과정 중에, 검증은 개발 후기 또는 완료 시점에 집중 수행 |
관련 표준 | ISO/IEC 12207, IEEE 1012, DO-178C (항공우주) |
V&V 차이점 비유 | 검증: 레시피대로 요리했는지 확인. 검증: 먹는 사람의 입맛에 맞는지 확인 |
중요성 | |
산출물 | |
관련 역할 | |

V&V는 소프트웨어 공학 및 시스템 공학에서 제품이나 시스템의 품질, 정확성, 신뢰성을 보장하기 위한 핵심적인 엔지니어링 실무 분야이다. 이는 검증(Verification)과 확인(Validation)이라는 두 가지 상호보완적인 활동을 포괄하는 용어로, 제품이 올바르게 만들어졌는지와 올바른 제품이 만들어졌는지를 각각 평가하는 과정을 의미한다.
V&V는 개발 생명주기 전반에 걸쳐 적용되며, 요구사항 분석부터 설계, 구현, 테스트에 이르는 각 단계에서 결함을 조기에 발견하고 수정하는 것을 목표로 한다. 이를 통해 최종 제품이 사용자의 요구와 기대를 충족시키고, 지정된 표준과 규정을 준수하도록 한다. 특히 안전-중요 시스템 분야에서는 사고를 방지하고 인증을 획득하기 위한 필수 절차로 자리 잡았다.
V&V 활동은 단순한 테스트를 넘어서 정적 분석, 형식적 검증, 시뮬레이션, 인수 테스트 등 다양한 기법과 방법론을 활용한다. 이 분야는 ISO/IEC 12207, DO-178C, ISO 26262와 같은 국제 표준과 산업별 규정에 의해 그 실무가 체계화되고 정의된다.

V&V는 소프트웨어 공학 및 시스템 공학에서 제품의 품질과 신뢰성을 보장하기 위한 핵심적인 활동이다. 이는 검증(Verification)과 확인(Validation)이라는 두 가지 상호보완적인 개념을 포괄하는 용어이다. 간단히 말해, 검증은 "제품을 올바르게 만들고 있는가?"에, 확인은 "올바른 제품을 만들고 있는가?"에 답하는 과정이다[1].
검증은 개발 과정의 각 단계에서 산출물(예: 요구사항 명세서, 설계 문서, 코드)이 명세된 요구사항과 표준을 준수하는지 점검하는 활동이다. 이는 주로 개발팀 내부에서 수행되며, 리뷰, 정적 분석, 단위 테스트 등을 포함한다. 반면, 확인은 최종 제품이나 시스템이 사용자의 실제 요구와 의도된 사용 환경에서 기대하는 기능을 수행하는지 평가하는 활동이다. 사용자 인수 테스트나 시나리오 기반 검증이 대표적인 확인 활동에 해당한다.
V&V의 주요 목표는 결함을 조기에 발견하고 수정하여 개발 비용을 절감하고, 제품의 품질을 높이며, 최종 사용자의 요구를 충족시키는 것이다. 특히 소프트웨어의 복잡성이 증가하고, 소프트웨어가 의료, 항공, 자동차와 같은 안전-중요 시스템에 광범위하게 통합됨에 따라 V&V의 필요성은 더욱 커지고 있다. 체계적인 V&V 없이는 요구사항 오해, 설계 결함, 코딩 오류 등이 최종 제품에 잠재해 심각한 운영 실패나 안전 사고로 이어질 수 있다.
따라서 V&V는 단순한 테스트 단계가 아닌, 개발 수명주기 전반에 걸쳐 계획되고 실행되는 지속적인 공학 프로세스로 이해되어야 한다. 검증과 확인은 서로 다른 시점과 목적을 가지지만, 궁극적으로는 고품질의 신뢰할 수 있는 시스템을 제공한다는 공통의 목표를 가지고 있다.
검증(Verification)은 제품, 서비스 또는 시스템이 명세된 요구사항, 규격 및 조건을 충족하는지 여부를 평가하는 과정이다. 즉, "제품을 올바르게 만들고 있는가?"(Are we building the product right?)라는 질문에 답하는 활동이다. 이는 주로 개발 과정 중간에 수행되며, 설계 문서, 코드, 인터페이스 등이 사전에 정의된 기준과 일치하는지 확인하는 데 중점을 둔다. 주요 활동으로는 코드 리뷰, 정적 분석, 단위 테스트 등이 포함된다.
반면, 확인(Validation)은 개발된 제품이나 시스템이 사용자의 실제 요구와 의도된 용도를 충족시키는지 평가하는 과정이다. "올바른 제품을 만들고 있는가?"(Are we building the right product?)라는 근본적인 질문을 다룬다. 확인은 최종 제품이나 완성된 시스템을 대상으로 하며, 사용자 환경에서의 실제 성능과 효용성을 검증하는 데 목적이 있다. 대표적인 예로 사용자 인수 테스트(UAT)나 현장 시연이 있다.
두 개념의 차이는 종종 "검증은 명세서 대비, 확인은 사용자 요구 대비"라는 구문으로 요약된다. 검증은 공학적 정확성과 규격 준수를, 확인은 제품의 실용성과 고객 가치를 중시한다. 예를 들어, 소프트웨어의 특정 함수가 설계 문서대로 정확히 구현되었는지 검토하는 것은 검증에 해당한다. 반면, 그 소프트웨어 전체가 최종 사용자의 업무 문제를 해결하는 데 효과적인지 평가하는 것은 확인에 해당한다.
이 두 활동은 상호 보완적이며, 효과적인 품질 보증을 위해서는 모두 필수적이다. 검증 없이 진행된 확인은 제품이 내부적으로 결함이 많을 수 있으며, 확인 없이 진행된 검증은 기술적으로 정확하더라도 시장에서 필요로 하지 않는 제품을 만들 위험이 있다. 따라서 V&V는 제품의 무결성과 적합성을 모두 보장하기 위해 통합적으로 수행된다.
V&V의 궁극적인 목표는 개발된 제품이나 시스템이 명세된 요구사항을 정확히 구현했는지, 그리고 의도된 사용 환경과 목적에 부합하는지 확인하여 결함을 조기에 발견하고 제거하는 것이다. 이를 통해 최종 결과물의 품질, 신뢰성, 안전성을 보증하고, 사업적 및 기술적 위험을 최소화한다.
주요 목표는 다음과 같이 구체화된다. 첫째, 검증(Verification)을 통해 '제품을 올바르게 만들었는가'를 확인한다. 이는 설계 문서나 코드가 요구사항을 정확히 반영하고 있는지, 오류나 모순이 없는지를 점검하는 활동이다. 둘째, 확인(Validation)을 통해 '올바른 제품을 만들었는가'를 확인한다. 이는 완성된 제품이 사용자의 실제 요구와 운영 환경에서 기대한 대로 작동하는지 최종 검증하는 과정이다. 셋째, 개발 생명주기 전반에 걸쳐 결함을 조기에 그리고 체계적으로 식별하여 수정 비용을 크게 절감한다.
V&V의 필요성은 시스템의 복잡성 증가와 실패 시의 심각한 결과에서 비롯된다. 특히 소프트웨어 결함은 하드웨어 고장과 달리 예측이 어렵고, 일단 시스템에 내재되면 발견되지 않은 채로 유지될 수 있다. 따라서 안전-중요 시스템[2]에서는 V&V가 법적, 규제적 요구사항이 된다. 또한, 개발 후기 단계나 운용 중에 결함이 발견될 경우 그 수정 비용은 초기 발견 시보다 수십 배에서 수백 배까지 급증하므로, 경제적 관점에서도 V&V 투자는 필수적이다.

V&V 프로세스는 검증과 확인이라는 두 가지 핵심 활동으로 구성된다. 이 두 활동은 서로 보완적이며, 개발 수명 주기의 각 단계에서 체계적으로 수행되어야 한다. 일반적인 프로세스는 계획 수립, 활동 수행, 결과 평가 및 보고의 단계를 거친다. 효과적인 V&V를 위해서는 요구사항 정의 단계부터 V&V 활동을 계획하고, 개발 산출물이 생성되는 각 단계에서 적시에 적용하는 것이 중요하다.
검증 활동은 "제품을 올바르게 만들고 있는가?"에 초점을 맞춘다. 이는 주로 개발 과정 중간의 산출물을 대상으로 한다. 주요 검증 활동은 다음과 같다.
* 정적 분석: 코드나 설계 문서를 실행하지 않고 검사하여 오류를 찾는다. 코드 리뷰, 인스펙션, 워크스루 등이 포함된다.
* 동적 분석: 소프트웨어를 실행하여 그 동작을 검사한다. 단위 테스트, 통합 테스트, 시스템 테스트 등 다양한 소프트웨어 테스트 수준에서 수행된다.
* 모델 검증: 시스템 모델링 언어(예: SysML, UML)로 작성된 모델의 정확성과 일관성을 분석한다.
확인 활동은 "올바른 제품을 만들고 있는가?"에 답하기 위해 수행된다. 이는 최종 제품이 사용자의 실제 요구와 운영 환경에서 의도한 대로 작동하는지 평가한다. 대표적인 확인 활동은 다음과 같다.
* 사용자 인수 테스트: 최종 사용자 또는 고객이 실제 운영 환경과 유사한 조건에서 시스템을 테스트하여 요구사항을 충족하는지 최종적으로 확인한다.
* 시나리오 기반 검증: 실제 사용 사례와 운영 시나리오를 바탕으로 시스템의 전반적인 적합성을 평가한다.
* 베타 테스트: 제한된 실제 사용자 그룹에게 선배포 버전을 제공하여 필드에서의 성능과 사용성을 검증한다.
검증과 확인 활동의 결과는 종종 다음과 같은 표를 통해 관리되고 추적된다.
활동 유형 | 핵심 질문 | 주요 대상 | 대표 기법/도구 예시 |
|---|---|---|---|
검증 | 제품을 올바르게 만들고 있는가? | 설계 명세서, 코드, 모델 | 코드 리뷰, 단위 테스트, 정적 분석 도구[3] |
확인 | 올바른 제품을 만들고 있는가? | 최종 제품, 사용자 요구사항 | 사용자 인수 테스트, 시나리오 테스트, 현장 시험 |
검증 활동은 개발 과정에서 생성된 산출물이 명세된 요구사항, 설계, 표준 및 기대에 부합하는지를 평가하는 체계적인 과정이다. 이 활동은 주로 "제품을 올바르게 만들었는가?"라는 질문에 답하는 데 초점을 맞춘다. 검증은 주로 개발 초기 단계부터 적용되며, 결함을 조기에 발견하여 수정 비용을 절감하는 것을 목표로 한다.
주요 검증 활동으로는 정적 분석, 동적 테스팅, 그리고 다양한 형태의 리뷰가 포함된다. 정적 분석은 소스 코드나 설계 문서를 실제로 실행하지 않고 분석하는 기법으로, 코드 리뷰, 인스펙션, 워크스루 등을 통해 문법 오류, 코딩 표준 위반, 잠재적 결함을 발견한다. 동적 테스팅은 소프트웨어를 실행하여 특정 입력에 대한 출력을 검사하는 방식으로, 단위 테스트, 통합 테스트, 시스템 테스트 등이 이에 해당한다.
검증 활동은 일반적으로 다음과 같은 다층적 접근 방식을 취하며, 각 단계별로 다른 기법과 도구가 활용된다.
활동 수준 | 주요 기법 | 설명 |
|---|---|---|
문서/설계 | 요구사항 검토, 설계 리뷰, 모델 검증 | 요구사항 명세서, 설계 문서, UML 다이어그램 등의 정확성과 완전성을 검토한다. |
코드 | 정적 분석, 코드 리뷰, 페어 프로그래밍 | 소스 코드의 품질, 표준 준수 여부, 논리적 오류를 분석한다. |
실행 | 단위 테스트, 통합 테스트, 화이트박스 테스팅 | 코드의 개별 모듈 또는 모듈 간 인터페이스를 실행하여 기능을 검증한다. |
이러한 활동들은 테스트 케이스와 테스트 스위트를 기반으로 수행되며, 테스트 자동화 도구를 활용하여 효율성을 높인다. 검증의 궁극적 목표는 내부 품질 속성을 보장하여, 최종 제품이 의도한 대로 구축되었음을 객관적 증거를 통해 입증하는 것이다.
확인 활동은 개발된 제품이나 시스템이 사용자의 요구사항과 의도된 사용 환경에서 올바르게 작동하는지를 평가하는 과정이다. 이는 최종 사용자나 고객의 관점에서 시스템의 가치와 유용성을 검증하는 데 중점을 둔다. 주요 목표는 '올바른 제품을 만들었는가?'라는 질문에 답하는 것이다. 확인은 종종 시스템의 외부적 행위와 사용자 만족도를 다루며, 검증(Verification) 활동이 명세서 대비 정확성을 다룬다면, 확인은 실제 필요와 목적 대비 적합성을 다룬다.
주요 확인 활동으로는 사용자 인수 테스트가 있다. 이는 최종 사용자 또는 고객 대표가 실제 운영 환경과 유사한 조건에서 시스템을 사용해보고, 계약상의 모든 요구사항이 충족되었는지 최종적으로 승인하는 공식적인 과정이다. 또한, 시나리오 검증을 통해 미리 정의된 사용 시나리오나 유스 케이스를 따라 시스템이 예상대로 동작하는지 확인한다. 이는 시스템이 복잡한 실제 업무 흐름 속에서도 정상적으로 기능하는지 평가하는 데 유용하다.
다른 확인 기법으로는 베타 테스트가 있다. 제한된 실제 사용자 집단에게 선출시판 제품을 제공하여 다양한 환경과 예상치 못한 사용 패턴에서의 시스템 안정성과 사용성을 평가한다. 또한, 시연을 통해 이해관계자 앞에서 핵심 기능을 직접 운영하여 요구사항 충족 여부를 시각적으로 검증하기도 한다. 이러한 활동들은 시스템이 단순히 명세를 따르는 것을 넘어, 사용자에게 진정한 가치를 제공하는지를 판단하는 근거가 된다.
활동 | 주요 목적 | 수행 주체 | 평가 기준 |
|---|---|---|---|
사용자 인수 테스트 | 계약상 요구사항의 충족 및 최종 승인 | 최종 사용자/고객 | 사용자 요구사항 명세서 |
시나리오 검증 | 실제 업무 흐름 내 시스템 동작 적합성 | 테스트 엔지니어/분석가 | 정의된 사용 시나리오 |
베타 테스트 | 실제 사용 환경에서의 신뢰성과 사용성 평가 | 선정된 외부 사용자 | 사용자 피드백 및 결함 보고 |
시연 | 핵심 기능에 대한 이해관계자 검증 및 동의 획득 | 개발팀/프로젝트 관리자 | 시연 성공 기준 |

V&V는 다양한 공학 분야에서 시스템, 제품, 서비스의 품질과 신뢰성을 보장하기 위해 적용된다. 그 적용 범위는 단순한 응용 프로그램부터 인간의 생명과 직결된 복잡한 시스템까지 매우 광범위하다.
가장 전통적이고 광범위하게 V&V가 적용되는 분야는 소프트웨어 공학이다. 여기서 V&V는 요구사항 분석 단계부터 설계, 구현, 테스트에 이르는 전 소프트웨어 개발 수명 주기에 걸쳐 수행된다. 목표는 소프트웨어가 명세된 대로 정확하게 구현되었는지(검증) 그리고 사용자의 실제 요구와 운영 환경에서 의도한 대로 작동하는지(확인)를 입증하는 것이다. 애자일 방법론이나 폭포수 모델과 같은 개발 방법론에 관계없이 V&V 활동은 필수적이다.
시스템의 복잡성이 증가함에 따라, 소프트웨어만이 아닌 하드웨어와의 상호작용을 포함한 전체 시스템에 대한 V&V의 중요성이 부각된다. 시스템 공학 및 임베디드 시스템 분야에서는 소프트웨어 구성요소와 기계적, 전자적 구성요소가 통합된 시스템 전체의 동작을 검증하고 확인한다. 이는 특히 실시간 제어가 필요한 시스템에서 정확성과 안정성을 보장하는 핵심 과정이다.
가장 엄격한 V&V 기준이 요구되는 분야는 안전-중요 시스템이다. 이 분야에서는 시스템의 오작동이 직접적으로 인명 피해나 큰 사회적, 경제적 손실로 이어질 수 있다. 대표적인 적용 분야와 관련 표준은 다음과 같다.
적용 분야 | 주요 관심사 | 대표적 규정/표준 |
|---|---|---|
의료 기기 | 환자 안전, 치료 효능 | IEC 62304 (의료 소프트웨어), FDA 지침 |
항공 우주 | 항공기 비행 안전성 | |
자동차 | 기능 안전 (예: 브레이크, 조향) | ISO 26262 (자동차 기능 안전) |
철도 | 열차 제어 및 신호 시스템 안전 | EN 50128 (철도 소프트웨어) |
원자력 | 원자로 제어 및 보호 시스템 안전 | IEC 61513 (원자력 시스템) |
이러한 분야에서는 V&V 활동이 단순한 권고가 아니라 법적, 규제적 요구사항으로 명시되며, 인증을 받기 위해서는 엄격한 절차에 따른 증거를 제출해야 한다.
소프트웨어 공학은 V&V 활동이 가장 체계적으로 발전하고 적용되는 핵심 분야이다. 소프트웨어의 복잡성과 결함으로 인한 비용 증가를 방지하기 위해, 개발 생명주기의 각 단계마다 검증과 확인 활동이 통합되어 수행된다. 이는 요구사항 분석, 설계, 구현, 테스팅, 유지보수에 이르는 전 과정에 걸쳐 소프트웨어 제품의 품질을 보증하는 체계적인 접근법을 제공한다.
주요 검증 활동으로는 코드 리뷰, 정적 분석, 단위 테스트, 통합 테스트 등이 있다. 코드 리뷰는 동료 평가를 통해 논리적 오류나 코딩 표준 위반을 발견하고, 정적 분석 도구는 실행 없이 소스 코드를 분석하여 잠재적 결함을 찾는다. 단위 테스트와 통합 테스트는 각 모듈과 모듈 간의 인터페이스가 명세대로 동작하는지 확인하는 데 목적이 있다.
확인 활동은 최종 소프트웨어 제품이 사용자의 실제 요구와 운영 환경에서 의도된 대로 작동하는지 평가하는 데 중점을 둔다. 대표적인 활동으로 시스템 테스트, 인수 테스트, 베타 테스트가 있다. 시스템 테스트는 완성된 시스템 전체를 대상으로 기능 및 비기능적 요구사항을 검증하며, 인수 테스트는 최종 사용자 또는 고객이 직접 수행하여 제품 수락 여부를 결정한다.
소프트웨어 공학에서 V&V의 효과성은 활동의 조기 시작과 지속적 수행에 달려 있다. 다음 표는 소프트웨어 개발 단계별 주요 V&V 활동의 예를 보여준다.
개발 단계 | 주요 검증(Verification) 활동 | 주요 확인(Validation) 활동 |
|---|---|---|
요구사항 | 요구사항 검토, 추적성 매트릭스 작성 | 프로토타입을 통한 요구사항 검증 |
설계 | 설계 검토, 아키텍처 평가 | 사용자 시나리오 기반의 설계 검증 |
구현 | 단위 테스트, 코드 리뷰, 정적 분석 | 통합 테스트, 사용자 스토리 테스트 |
테스팅 | 테스트 케이스 검토, 테스트 커버리지 분석 | 시스템 테스트, 사용자 인수 테스트 |
이러한 체계적인 V&V 접근은 소프트웨어의 신뢰성을 높이고, 유지보수 비용을 절감하며, 최종 사용자 만족도를 제고하는 데 기여한다.
시스템 공학에서 V&V는 단일 소프트웨어 컴포넌트를 넘어 전체 시스템의 통합적이고 종합적인 품질을 보장하는 핵심 활동이다. 이는 하드웨어, 소프트웨어, 운영자, 절차 등이 복잡하게 상호작용하는 시스템의 요구사항이 올바르게 구현되었는지(검증), 그리고 의도된 운영 환경에서 사용자 요구와 목적을 충족하는지(확인)를 평가하는 과정을 포함한다. 특히 임베디드 시스템은 제어, 모니터링 등의 특정 기능을 수행하기 위해 더 큰 기계나 장치 내에 내장된 컴퓨팅 시스템으로, 실시간성, 신뢰성, 자원 제약 등이 중요한 특징이다. 따라서 임베디드 시스템의 V&V는 소프트웨어 로직뿐만 아니라 센서, 액추에이터와의 상호작용, 타이밍 제약, 전력 소비, 물리적 환경과의 인터페이스 등을 종합적으로 검증하고 확인해야 한다.
시스템 수준의 주요 검증 활동에는 시스템 요구사항 검토, 아키텍처 설계 검증, 그리고 통합 테스트가 있다. 통합 테스트는 하위 시스템이나 컴포넌트들이 결합되어 설계대로 정확하게 동작하는지 확인한다. 반면, 확인 활동은 최종 사용자 또는 고객의 관점에서 시스템의 유용성과 적합성을 평가하는 데 중점을 둔다. 이는 시스템 수용 테스트나 현장 시험을 통해 수행되며, 시스템이 실제 운영 시나리오에서 의도된 임무를 성공적으로 완수할 수 있는지 검증한다. 임베디드 시스템에서는 HIL 테스트가 널리 사용되는데, 이는 실제 제어기(하드웨어)를 가상의 물리적 환경(시뮬레이터)에 연결하여 실제와 유사한 조건에서 시스템의 동작을 검증하는 방법이다.
임베디드 시스템 V&V의 복잡성은 다음과 같은 요소들에서 기인한다. 첫째, 실시간 시스템의 경우 작업이 엄격한 시간 제약 내에 완료되어야 하므로, 타이밍 분석과 성능 테스트가 필수적이다. 둘째, 제한된 메모리와 처리 능력을 가진 환경에서 동작하므로, 자원 사용량 검증이 중요하다. 셋째, 많은 임베디드 시스템이 안전-중요 분야에 적용되므로, 고장 모드 영향 분석과 같은 예측적 분석 기법을 통해 잠재적 위험을 식별하고 완화해야 한다.
V&V 활동 유형 | 시스템 공학에서의 주요 기법 예시 | 임베디드 시스템에서의 특별 고려사항 |
|---|---|---|
검증 (Verification) | 요구사항 추적성 매트릭스, 모델 기반 검증(MBD), 정적 코드 분석 | 실시간 스케줄링 분석, 전력 소비 시뮬레이션, 메모리 누수 검출 |
확인 (Validation) | 사용자 시나리오 기반 테스트, 운영 평가, 프로토타입 평가 | HIL 테스트, 환경 조건(온도, 진동) 하의 동작 테스트, 장기 신뢰성 테스트 |
이러한 포괄적인 접근을 통해 시스템 공학 및 임베디드 시스템 분야의 V&V는 제품이 단순히 오류가 없는 수준을 넘어, 예측된 환경과 예측되지 않은 조건 하에서도 견고하고 신뢰할 수 있도록 보장하는 역할을 한다.
안전-중요 시스템은 고장이나 오류가 발생할 경우 인명 피해, 큰 규모의 재산 손실, 심각한 환경 피해를 초래할 수 있는 시스템을 의미한다. 이러한 시스템의 개발에서는 V&V 활동이 법적, 규제적 요구사항으로 명시되며, 특히 엄격한 표준과 절차에 따라 수행된다. 의료, 항공, 자동차 산업은 대표적인 안전-중요 분야로, 각각의 산업별 표준이 V&V 활동의 범위와 깊이를 규정한다.
의료 기기 분야에서는 ISO 13485 품질 관리 시스템과 IEC 62304 의료 소프트웨어 생명 주기 프로세스 표준이 핵심적이다. 특히 IEC 62304는 소프트웨어의 안전 등급(A, B, C)을 분류하고, 각 등급에 맞는 V&V 활동(예: 위험 분석, 단위/통합/시스템 테스트, 변경 관리)을 요구한다. 임상 시험 전에 수행되는 실사용 테스트는 사용자 환경에서의 안전성과 유효성을 확인하는 중요한 확인 활동이다.
항공우주 분야에서는 소프트웨어 공인을 위한 표준인 DO-178C가 사실상의 세계적 기준이다. 이 표준은 소프트웨어의 안전 등급(A~E)을 정의하고, 각 등급에 따라 요구되는 V&V 목표와 활동을 상세히 명시한다. 예를 들어, 가장 높은 안전 등급인 Level A 소프트웨어는 요구사항 기반 테스트 커버리지 100%, 수정 조건/결정 커버리지 100% 등을 포함한 극도로 엄격한 검증을 요구한다. 이는 시스템의 고장이 재난적 결과로 이어질 수 있기 때문이다.
자동차 산업에서는 전기/전자 시스템의 기능 안전을 다루는 ISO 26262 표준이 핵심이다. 이 표준은 자동차 안전 무결성 수준(ASIL)을 A에서 D까지 등급화하며, V&V 활동은 할당된 ASIL 등급에 비례하여 강화된다. 주요 활동에는 안전 요구사항 검증, 하드웨어와 소프트웨어의 통합 테스트, 그리고 최종 제품의 안전성 확인을 위한 시스템 수준 검증이 포함된다. 특히 자율주행차의 등장으로 센서 퓨전 및 AI 알고리즘에 대한 V&V의 중요성과 복잡성이 급격히 증가하고 있다.

V&V 방법론과 기법은 제품이나 시스템이 요구사항을 충족하고 의도된 목적에 부합하는지를 체계적으로 입증하기 위한 다양한 접근법을 포함한다. 이는 주로 검증과 확인 활동을 지원하는 공식적 또는 비공식적인 절차, 모델, 도구를 의미한다.
주요 방법론 중 하나는 형식적 방법이다. 이는 수학적 기법을 사용하여 시스템의 요구사항, 설계, 구현의 정확성을 엄밀하게 증명하는 것을 목표로 한다. 형식적 명세 언어로 시스템의 동작을 모델링하고, 형식적 검증(예: 모델 체킹이나 정리 증명)을 통해 논리적 오류나 모순을 발견한다. 이 방법은 특히 안전-중요 시스템에서 잠재적 결함을 조기에 제거하는 데 유용하지만, 높은 전문성과 비용이 요구된다는 한계가 있다.
실용적으로 널리 사용되는 기법으로는 시뮬레이션과 프로토타이핑이 있다. 시뮬레이션은 실제 시스템이나 환경을 소프트웨어 모델로 구현하여 다양한 조건 하에서의 동작을 미리 검토한다. 프로토타이핑은 핵심 기능을 가진 초기 작동 모델을 신속하게 개발하여 사용자나 이해관계자로부터 초기 피드백을 받는 확인 활동에 활용된다. 이들 기법은 복잡한 상호작용이나 물리적 현상을 저비용으로 분석할 수 있게 한다.
또한, 테스트 자동화 도구의 활용은 현대 V&V 프로세스의 핵심 요소이다. 단위 테스트, 통합 테스트, 회귀 테스트 등을 자동화함으로써 테스트 커버리지를 높이고, 반복적 작업 부담을 줄이며, 신속한 피드백을 가능하게 한다. 정적 분석 도구는 소스 코드를 실행하지 않고도 코딩 표준 위반, 잠재적 보안 취약점, 복잡도 문제 등을 검출하는 데 사용된다.
방법론/기법 | 주요 목적 | 일반적 적용 활동 |
|---|---|---|
수학적 증명을 통한 정확성 보장 | 형식적 명세, 모델 체킹, 정리 증명 | |
가상 환경에서의 시스템 동작 분석 및 검증 | 성능 시뮬레이션, 고장 모드 시뮬레이션 | |
사용자 요구사항 및 개념의 조기 확인 | 사용자 인터페이스 프로토타입, 기능 프로토타입 | |
반복적 테스트 실행 효율화 및 커버리지 확보 | 단위/통합 테스트 스크립트, CI/CD 파이프라인 통합 | |
정적 분석 도구 | 실행 전 코드 품질 및 결함 검출 | 코드 리뷰 지원, 보안 취약점 스캔, 복잡도 측정 |
형식적 방법은 수학적 기초 위에 구축된 엄밀한 기법을 사용하여 시스템의 정확성을 검증하고 확인하는 V&V 접근법이다. 이 방법은 시스템의 요구사항, 설계, 또는 구현을 수학적 모델로 표현하고, 그 모델에 대해 논리적 추론이나 자동화된 도구를 이용해 정형적으로 분석한다. 일반적인 소프트웨어 테스팅이 특정 입력에 대한 출력을 검사하는 데 그치는 반면, 형식적 방법은 가능한 모든 입력과 시스템 상태를 수학적으로 탐구하여 오류 가능성을 이론적으로 배제하려는 목표를 가진다.
주요 기법으로는 정형 명세 작성, 모델 체킹, 정리 증명 등이 있다. 정형 명세는 시스템의 동작을 수학적 논리나 자동화 이론을 사용해 명확하고 모호함 없이 정의한다. 모델 체킹은 시스템의 유한 상태 모델과 명세된 속성(예: "교착 상태가 발생하지 않는다")을 자동화 도구로 검사하여 속성이 만족되는지 여부를 확인한다. 정리 증명은 시스템의 명세와 구현이 수학적 정리와 증명의 형태로 표현되어, 그 정리가 참임을 논리적으로 증명하는 과정을 포함한다.
이 방법들은 특히 고신뢰성이 요구되는 분야에서 유용하게 적용된다. 다음 표는 주요 형식적 방법 기법과 그 특징을 보여준다.
기법 | 주요 목적 | 특징 |
|---|---|---|
요구사항이나 설계를 수학적으로 정확하게 기술 | 모호성 제거, 일관성 분석의 기초 제공 | |
시스템 모델이 특정 속성을 만족하는지 자동 검증 | 반례(counterexample)를 생성할 수 있음 | |
시스템의 정확성에 관한 정리를 수학적으로 증명 | 높은 수준의 보장 제공, 자동화가 어려울 수 있음 |
형식적 방법은 구현 전 설계 단계에서 잠재적 결함을 조기에 발견하고, 시스템의 핵심 안전 속성을 엄격하게 증명할 수 있다는 장점이 있다. 그러나 전문적인 지식이 필요하고, 도구 사용에 비용이 발생하며, 대규모 복잡 시스템 전체에 적용하기에는 실용적 어려움이 있을 수 있다. 따라서 실제 프로젝트에서는 위험도가 높은 핵심 구성 요소에 선택적으로 적용되는 경우가 많다.
시뮬레이션은 실제 시스템이나 환경을 소프트웨어나 하드웨어 모델로 구현하여, 제품이 완성되기 전에 그 동작과 성능을 평가하는 V&V 기법이다. 특히 물리적 프로토타입 제작이 어렵거나 비용이 많이 드는 복잡한 시스템(예: 항공기 제어 시스템, 자율주행차 센서 융합 알고리즘)에서 유용하게 활용된다. 시뮬레이션을 통해 다양한 운영 조건과 예외 상황을 안전하고 반복적으로 재현할 수 있으며, 이는 시스템의 내구성과 신뢰성을 사전에 검증하는 데 핵심적인 역할을 한다.
프로토타이핑은 요구사항이나 설계 아이디어를 빠르게 구체화한 실물 모델(프로토타입)을 제작하는 활동이다. 이는 주로 확인(Validation) 활동, 즉 '올바른 제품을 만들고 있는가?'를 검토하는 데 초점을 맞춘다. 사용자나 이해관계자는 프로토타입을 직접 조작하고 피드백을 제공함으로써 초기 요구사항의 모호함을 해소하고, 사용자 경험(UX)과 기능적 적합성을 조기에 평가할 수 있다. 프로토타입은 종종 점진적으로 발전하여 최종 제품의 기반이 되기도 한다.
이 두 기법은 상호 보완적으로 적용된다. 초기 단계에서는 요구사항 검증을 위해 프로토타입이 사용되고, 후기 단계에서는 통합된 시스템의 복잡한 동작을 검증하기 위해 시뮬레이션이 활용되는 것이 일반적이다. 최근에는 모델 기반 설계(MBD) 환경에서 설계 모델 자체가 실행 가능한 프로토타입이 되며, 이 모델을 기반으로 한 시뮬레이션이 설계 단계부터 검증 활동을 가능하게 한다[4]. 이는 개발 주기 초기에 결함을 발견하여 비용을 절감하고 개발 기간을 단축하는 데 기여한다.
테스트 자동화 도구는 소프트웨어 테스팅의 검증 활동을 자동으로 수행하도록 설계된 소프트웨어 애플리케이션 또는 프레임워크이다. 이 도구들은 반복적이고 시간 소모적인 테스트 작업을 스크립트나 코드로 정의하여 실행함으로써 테스트 효율성과 정확성을 높인다. 주요 목표는 인력에 의한 수동 테스트의 부담을 줄이고, 더 빠른 피드백 루프를 제공하며, 테스트 커버리지를 확장하는 것이다.
테스트 자동화 도구는 적용 범위와 목적에 따라 여러 유형으로 구분된다. 단위 테스트 프레임워크(예: JUnit, pytest)는 개별 코드 모듈의 검증에 사용된다. API 테스트 도구(예: Postman)는 서비스 간 통신 인터페이스를 검증한다. 사용자 인터페이스 테스트 도구(예: Selenium, Cypress)는 웹 또는 데스크톱 애플리케이션의 GUI 동작을 자동화하여 시뮬레이션한다. 성능 테스트 도구(예: JMeter)는 시스템의 부하 처리 능력과 안정성을 평가한다.
효과적인 테스트 자동화를 위해서는 적절한 도구 선정과 함께 지속적인 유지보수가 필수적이다. 자동화된 테스트 스크립트는 애플리케이션의 변경에 따라 함께 수정되어야 하며, 그렇지 않면 오류를 발생시키거나 신뢰성을 잃게 된다. 따라서 자동화는 반복 실행 가치가 높고 안정적인 기능에 집중하는 것이 일반적인 전략이다. 최근에는 지속적 통합/지속적 배포 파이프라인에 테스트 자동화를 통합하여 코드 변경 시마다 자동으로 테스트 스위트를 실행하는 방식이 표준화되고 있다.
도구 유형 | 주요 예시 | 주요 검증 대상 |
|---|---|---|
단위 테스트 | JUnit, NUnit, pytest | 개별 함수, 클래스, 메소드 |
통합/API 테스트 | Postman, SoapUI | API 엔드포인트, 서비스 간 데이터 흐름 |
UI/엔드투엔드 테스트 | Selenium, Cypress, Playwright | 웹/모바일 앱의 사용자 시나리오 및 화면 흐름 |
성능/부하 테스트 | JMeter, Gatling, LoadRunner | 시스템 응답 시간, 처리량, 자원 사용률 |
정적 분석/코드 검사 | SonarQube, ESLint | 코드 품질, 보안 취약점, 코딩 표준 준수 여부 |

V&V 활동은 국제 표준 및 산업별 규정에 의해 체계적으로 정의되고 요구받는다. 이는 제품의 신뢰성, 안전성, 품질을 보장하고, 특히 안전-중요 분야에서는 법적 준수의 필수 조건이 된다. 주요 국제 표준으로는 ISO/IEC 12207 (소프트웨어 생명 주기 프로세스)과 ISO/IEC 15288 (시스템 생명 주기 프로세스)이 있다. 이 표준들은 생명 주기 전반에 걸쳐 검증과 확인 프로세스를 통합하는 프레임워크를 제공하며, V&V 활동을 계획, 실행, 평가하기 위한 지침을 포함한다.
산업별로는 보다 구체적이고 엄격한 규정이 적용된다. 예를 들어, 항공우주 분야의 소프트웨어에는 DO-178C(Software Considerations in Airborne Systems and Equipment Certification)가 핵심 표준이다. 이 표준은 소프트웨어의 안전 등급에 따라 요구되는 V&V 활동의 범위와 깊이를 명시한다. 자동차 분야에서는 ISO 26262(도로 차량 - 기능 안전)가 차량 전기/전자 시스템의 기능 안전을 확보하기 위한 V&V 요구사항을 규정한다.
의료 기기 분야에서는 IEC 62304(의료 소프트웨어 - 소프트웨어 생명 주기 프로세스)가 소프트웨어의 안전 등급별 개발 및 V&V 활동을 정의한다. 철도 분야의 EN 50128(철도 응용 - 소프트웨어)도 유사하게 철도 제어 및 보호 시스템 소프트웨어에 대한 검증, 확인, 테스팅, 평가 활동을 상세히 요구한다. 이러한 규정들은 공통적으로 위험 분석과 안전 등급을 기반으로 V&V 활동의 강도를 결정한다.
표준/규정 | 적용 분야 | 주요 초점 |
|---|---|---|
소프트웨어 공학 일반 | 소프트웨어 생명 주기 프로세스 | |
시스템 공학 일반 | 시스템 생명 주기 프로세스 | |
항공우주 (기내 소프트웨어) | 소프트웨어 안전 인증 | |
자동차 (전기/전자 시스템) | 기능 안전(Functional Safety) | |
의료 기기 | 의료 소프트웨어 안전 | |
철도 | 철도 제어 및 보호 시스템 |
이러한 표준과 규정을 준수하기 위해서는 조직은 명확한 V&V 계획을 수립하고, 활동 결과를 추적 가능한 형태로 기록하며, 최종적으로 규정된 모든 요구사항이 충족되었음을 증명해야 한다. 인증 기관의 심사는 종종 이러한 증거에 대한 검토를 포함한다.
V&V 활동은 국제적으로 인정받은 표준에 의해 체계적으로 정의되고 지침이 제공된다. 특히 국제표준화기구(ISO)와 국제전기기술위원회(IEC)에서 공동으로 제정한 일련의 표준들이 소프트웨어 공학 및 시스템 공학 분야에서 V&V의 기본 프레임워크를 구성한다.
핵심 표준으로는 소프트웨어 생명 주기 프로세스를 정의하는 ISO/IEC 12207과 시스템 생명 주기 프로세스를 다루는 ISO/IEC 15288이 있다. 이 두 표준은 생명 주기의 각 단계에서 수행해야 할 검증과 확인 프로세스 및 활동을 명시적으로 포함하고 있다. ISO/IEC 12207은 소프트웨어의 요구사항, 설계, 구현, 테스팅에 이르는 전 과정에서의 검증(Verification)과 확인(Validation) 작업을 규정하며, ISO/IEC 15288은 더 넓은 범위의 시스템(하드웨어, 소프트웨어, 인력, 절차 등을 포함)에 대한 V&V 접근법을 제공한다. 두 표준 모두 V&V를 단순한 테스팅 단계가 아닌, 계획부터 실행, 평가에 이르는 체계적인 프로세스로 규정한다는 공통점을 가진다.
이들 표준에서 정의하는 V&V 프로세스는 일반적으로 다음 단계를 포함한다.
프로세스 단계 | 주요 활동 |
|---|---|
V&V 프로세스 수립 | V&V 목표, 범위, 책임, 일정, 자원, 방법론을 정의한 계획을 수립한다. |
프로세스 평가 | 수행 중인 개발 프로세스 자체가 표준과 계획에 부합하는지 평가한다. |
제품 평가 | 생성된 작업 산출물(문서, 코드, 시스템 등)이 명세된 요구사항을 충족하는지 검증하고 확인한다. |
V&V 결과 보고 | 수행된 V&V 활동의 결과, 발견된 문제, 결론 및 권고사항을 보고서로 작성한다. |
이러한 표준의 채택은 조직이 개발하는 제품의 품질과 신뢰성을 객관적으로 증명하는 데 기여한다. 또한, 특히 국제적인 협업이나 공공 조달 시장에서 표준 준수는 필수적인 요구사항으로 작용하기도 한다. 표준은 구체적인 기법이나 도구보다는 '무엇을(What)' 해야 하는지에 초점을 맞춘 프로세스 표준이므로, 조직은 이를 자신의 개발 환경과 프로젝트 특성에 맞게 세부적인 절차와 기법으로 구체화하여 적용한다.
안전-중요 시스템을 개발하는 산업 분야에서는 제품의 신뢰성과 안전성을 보장하기 위해 엄격한 V&V 요구사항을 규정한 표준이 존재한다. 이러한 규정은 법적 구속력을 가지거나 산업계의 사실상 표준으로 자리 잡아, 해당 분야의 개발 프로세스에 필수적으로 적용된다.
항공우주 분야에서는 소프트웨어의 공인을 위한 표준인 DO-178C가 대표적이다. 이 표준은 항공기 탑재 소프트웨어의 개발 수명 주기 전반에 걸쳐 수행해야 할 검증과 확인 활동을 상세히 정의한다. 소프트웨어의 안전 등급(예: A~E등급)에 따라 요구되는 테스트 커버리지, 문서화, 독립성 수준 등을 명시하여, 소프트웨어 결함이 항공기 사고로 이어지는 것을 방지하는 것을 목표로 한다.
자동차 산업에서는 ISO 26262 표준이 기능 안전을 규정한다. 이 표준은 자동차 전기/전자 시스템의 안전 관련 고장 위험을 관리하는 체계적인 접근법을 제공한다. ISO 26262는 위험 분석과 평가를 통해 안전 목표를 설정하고, 이를 달성하기 위한 V&V 활동을 요구한다. 자동차 안전 무결성 수준(ASIL)에 따라 검증 및 확인 활동의 강도와 방법이 결정된다.
의료기기 분야에서는 IEC 62304 표준이 의료기기 소프트웨어의 수명 주기 프로세스를 규제한다. 이 표준은 소프트웨어 안전 등급(A, B, C)을 부여하고, 각 등급에 맞는 위험 관리, 검증, 확인 활동을 요구한다. 특히 소프트웨어 변경에 대한 확인과 유효성 확인을 강조하여, 시장 출시 후에도 지속적인 안전성을 보장한다.
산업 분야 | 주요 규정 | 핵심 초점 |
|---|---|---|
항공우주 | 항공기 탑재 소프트웨어의 공인 가능성 | |
자동차 | 자동차 전기/전자 시스템의 기능 안전 | |
의료기기 | 의료기기 소프트웨어의 안전 수명 주기 관리 | |
철도 | 철도 제어 및 보호 시스템용 소프트웨어 | |
원자력 | 원자력 발전소 계측 및 제어 시스템 |
이러한 산업별 규정들은 공통적으로 V&V 활동을 체계화하고 문서화할 것을 요구하며, 종종 독립적인 검증 및 확인 팀의 관여를 필수 조건으로 명시한다. 규정 준수는 해당 제품의 시장 출시를 위한 필수 조건이 되며, 인증 기관의 심사를 통과해야 한다.

V&V는 전통적인 소프트웨어 및 시스템 공학에서 확립된 개념이지만, 기술의 진화와 함께 새로운 도전 과제에 직면하고 있으며, 그에 대응하는 최신 동향이 나타나고 있다.
가장 두드러진 도전 과제는 인공지능과 머신러닝 기반 시스템에 대한 V&V이다. 전통적인 소프트웨어와 달리 AI 모델은 명시적인 로직으로 프로그래밍되기보다 데이터로부터 학습하므로, 그 동작을 완전히 예측하거나 설명하기 어렵다. 이로 인해 블랙박스 문제가 발생하며, 특히 안전-중요 분야에서 AI 시스템의 신뢰성을 검증하고 확인하는 표준화된 방법론이 절실히 요구된다. 이에 대한 대응으로 설명 가능한 AI, 강건성 테스트, 학습 데이터와 모델 출력에 대한 체계적인 검증 및 확인 기법 연구가 활발히 진행 중이다.
또한, 애자일 및 DevOps 문화의 확산과 함께 지속적 통합/지속적 배포 파이프라인이 보편화되면서, V&V 활동의 속도와 자동화에 대한 압박이 커지고 있다. 빠른 개발 주기에 맞춰 품질을 보장하려면 테스트의 자동화 수준을 극대화하고, 정적 분석 도구와 동적 분석 도구를 CI/CD 파이프라인에 자연스럽게 통합해야 한다. 이는 '테스트 좌파'나 '시프트-레프트 테스팅' 같은 개념으로 구체화되며, 개발 초기 단계부터 V&V 활동을 시작하여 결함을 조기에 발견하고 수정 비용을 줄이는 데 초점을 맞춘다.
도전 과제 분야 | 주요 내용 | 대응 동향/기법 예시 |
|---|---|---|
AI/ML 시스템 | 결정 논리의 불투명성(블랙박스), 데이터 편향, 예측 불가능성 | |
고속 개발 환경 (CI/CD) | 짧은 릴리스 주기와의 정합성, 자동화된 품질 보증 필요 | 테스트 자동화, CI/CD 파이프라인 내 V&V 활동 통합, 시프트-레프트 테스팅 |
복잡한 시스템 통합 | 모델 기반 시스템 공학, 디지털 트윈을 활용한 시뮬레이션, 연계 테스트 |
이러한 변화는 V&V의 범위와 실천 방법을 재정의하고 있다. 단순한 결함 탐지를 넘어 시스템의 예상치 못한 행위, 사이버 보안 위험, 윤리적 영향까지 평가 대상에 포함시키는 종합적인 품질 보증 체계로 진화하고 있다. 결과적으로 현대의 V&V는 더욱 자동화되고, 개발 생명주기 전반에 걸쳐 선제적으로 적용되며, 새로운 패러다임의 시스템을 포용할 수 있는 유연한 방법론을 모색하는 방향으로 나아가고 있다.
전통적인 소프트웨어 공학의 검증 및 확인 방법론은 결정론적 로직과 명확한 요구사항에 기반하지만, 인공지능과 머신러닝 시스템은 데이터에 의해 학습되고 확률적 행동을 보이는 특성으로 인해 고유한 도전 과제를 제시한다. AI/ML 시스템의 V&V는 모델이 의도한 대로 동작하고, 신뢰할 수 있으며, 공정하고, 견고한지 보장하는 것을 목표로 한다. 주요 초점은 학습 데이터의 품질, 모델의 일반화 성능, 설명 가능성, 그리고 비정상적인 입력에 대한 견고성에 맞춰져 있다.
AI/ML 시스템의 검증 활동은 주로 개발 과정과 모델 자체의 정확성을 평가하는 데 중점을 둔다. 이는 학습 데이터셋의 편향 검토, 특성 공학의 적절성 분석, 모델 학습 과정의 재현성 확인, 그리고 다양한 메트릭(예: 정확도, 정밀도, 재현율)을 사용한 성능 평가를 포함한다. 정적 분석 도구는 코드뿐만 아니라 데이터 파이프라인과 모델 아키텍처를 검사하는 데도 적용된다. 반면, 확인 활동은 실제 운영 환경에서의 모델 행동과 사용자 요구사항의 충족도를 평가한다. 이는 실제 시나리오 기반의 테스트, A/B 테스트, 사용자 피드백을 통한 성능 모니터링, 그리고 모델이 의사결정에 미치는 실제 영향을 검증하는 과정을 포함한다.
AI/ML V&V의 핵심 과제는 다음과 같다.
과제 | 설명 |
|---|---|
블랙박스 문제 | 복잡한 모델(예: 심층 신경망)의 내부 결정 논리를 이해하고 설명하는 것이 어렵다. 이는 설명 가능한 AI 기법의 도입을 필요로 한다. |
데이터 편향 | 학습 데이터에 존재하는 편향이 모델의 예측에 그대로 반영되어 불공정한 결과를 초래할 수 있다. 공정성 검증이 필수적이다. |
적대적 예제 | 인간이 인지하지 못하는 미세한 변화를 가한 입력으로 모델을 오동작시킬 수 있어, 모델의 견고성을 검증해야 한다. |
개념 변화 | 시간이 지남에 따라 데이터의 패턴이 변화하면 모델 성능이 저하된다. 지속적인 모니터링과 재학습 전략이 필요하다. |
이러한 도전 과제를 해결하기 위해 새로운 접근법이 등장하고 있다. 형식적 방법을 변형하여 신경망의 안전 속성을 검증하거나, 시뮬레이션을 통해 수많은 에지 케이스를 생성하여 테스트하는 방법이 연구된다. 또한, 모델의 의사결정을 설명하는 LIME이나 SHAP 같은 도구를 V&V 프로세스에 통합하고, 자동화된 테스트 프레임워크를 활용하여 지속적으로 모델 성능을 검증하는 방식이 확산되고 있다. 안전-중요 분야에서는 ISO 21448[5]나 ISO 22989[6]와 같은 표준 개발이 진행 중이다.
지속적 통합(CI)과 지속적 배포(CD)는 소프트웨어 개발 생명주기를 가속화하는 현대적 실천법이다. 이 환경에서 V&V는 전통적인 폭포수 모델에서의 후기 단계 집중 활동에서, 개발 프로세스 전반에 걸쳐 지속적으로 수행되는 활동으로 진화한다. 핵심 목표는 빠른 피드백 루프를 통해 결함을 조기에 발견하고, 소프트웨어의 품질을 지속적으로 보증하며, 배포 가능한 상태를 유지하는 것이다.
CI/CD 파이프라인 내에서 검증(Verification) 활동은 주로 자동화된다. 코드 커밋 시점에 자동으로 실행되는 정적 분석 도구, 단위 테스트, 통합 테스트는 코드가 명세와 표준을 준수하는지 검증한다. 테스트 자동화는 회귀 결함을 방지하는 핵심 수단이 된다. 반면, 확인(Validation) 활동은 파이프라인의 후반부, 특히 스테이징 환경에서 수행된다. 자동화된 사용자 인수 테스트(UAT)나 성능 테스트를 통해 사용자 요구사항과 비즈니스 가치를 충족하는지 확인한다.
이러한 환경의 주요 도전 과제는 테스트 커버리지와 속도 사이의 균형을 찾는 것이다. 방대한 테스트 스위트를 빠르게 실행해야 하므로, 테스트를 효율적으로 계층화하고 병렬 실행하는 전략이 필수적이다. 또한, 인프라스트럭처를 코드로 관리하고 테스트 환경의 일관성을 보장하는 것도 중요하다. 최근에는 V&V를 더욱 앞당기기 위해 시프트 레프트 테스팅 접근법과 함께, 프로덕션 환경에서의 제한적 롤아웃과 모니터링을 통한 확인(예: 카나리 배포, 카오스 엔지니어링)이 강조된다.
활동 | CI/CD 파이프라인 내 위치 | 주요 도구/기법 예시 |
|---|---|---|
검증 (Verification) | 코드 커밋/빌드 단계 | 정적 분석 도구(SonarQube), 단위 테스트 프레임워크(JUnit, pytest), 코드 리뷰 |
확인 (Validation) | 스테이징/프로덕션 배포 전후 단계 | 통합/시스템 테스트(Selenium), 성능 테스트(JMeter), 사용자 인수 테스트 자동화, 카나리 배포 |
