코드 검증이란 무엇인가요?
코드 검증은 소프트웨어가 의도한 설계와 요구사항을 올바르게 구현하고 있는지 확인하는 과정입니다. 안전이 중요한 개발에서는 이 과정이 생명주기 전반에 걸쳐 지속적으로 진행되며, 각 단계에서 생성된 문서화된 증적은 적합성 입증 자료로 활용됩니다.
검증 대 타당성 확인: 요약
이 두 용어는 종종 같은 의미로 사용되지만, 각각 다루는 질문은 다릅니다.
• 검증(Verification)은 ‘소프트웨어를 올바르게 구축했는가? 소프트웨어 구현 내용이 사양과 일치하는가?’라는 질문을 다룹니다.
• 타당성 확인(Validation)은 ‘올바른 소프트웨어를 개발했는가? 실제 사용자의 요구를 충족하는가?’라는 질문을 다룹니다.
코드 검증은 전자를 중점적으로 다룹니다. 정적 분석, 구조화된 검토, 동적 테스트를 사용하여 구현 내용이 설계 및 사양을 충실히 반영하고 있는지 확인합니다.
코드 검증에 포함되는 활동
포괄적인 검증 전략은 대개 서로 보완적인 여러 활동을 결합해 구성됩니다.
정적 코드 분석
소스 코드를 실행하지 않고 검사하여 코딩 표준 위반, 결함 패턴, 보안 취약점을 조기에 식별합니다. 테스트가 시작되기 전부터 코드 품질과 규정 준수 상태를 확인할 수 있습니다. 정적 분석 자세히보기
단위 테스트
개별 함수, 모듈 또는 컴포넌트를 독립적으로 실행하여 요구사항에 맞게 동작하는지 검증합니다. 단위 테스트는 통합 이전 단계에서 결함을 조기에 발견하는 데 중요한 역할을 합니다. 단위 테스트에 대해 더 알아보기
코드 커버리지 측정
문장, 분기, MC/DC를 포함한 커버리지 지표는 테스트 스위트가 코드를 충분히 실행하고 있음을 입증합니다. 규제 대상 산업에서는 특정 커버리지 수준을 달성하는 것이 단순한 목표가 아니라 필수 요구사항입니다. 코드 커버리지를 통해 테스트가 코드를 얼마나 철저하게 검증하는지 측정할 수 있습니다. 코드 커버리지에 대해 알아보기
요구사항 추적성
각 테스트 케이스는 해당 테스트 케이스가 검증하는 요구사항과 연결되어 있습니다. 양방향 추적성을 통해 모든 요구사항이 검증되었고, 목적 없이 수행된 테스트가 없음을 확인할 수 있습니다. 이는 모든 안전 감사에서 매우 중요한 요소입니다.
왜 검증은 사후 고려 사항이 되어서는 안 되는가
코드 검증 과정에서 발견된 결함을 수정하는 비용은 통합 테스트, 시스템 테스트 또는 필드 운영 중에 발견된 결함을 수정하는 비용보다 훨씬 낮습니다. 리콜 비용과 안전 문제가 심각할 수 있는 임베디드 소프트웨어의 경우, 체계적인 검증을 통해 오류를 조기에 발견하는 것은 경제적 측면은 물론 윤리적 측면에서도 필수적입니다.
ISO 26262, DO-178C, IEC 61508, IEC 62304를 포함한 산업 표준은 모두 추적 가능한 증적을 바탕으로 문서화된 검증 활동을 요구합니다. Vector의 도구는 이러한 요구사항을 충족하기 위해 개발되었습니다.