코드 검증이란 무엇인가요?

embedded software 팀에 대한 정확한 정의

코드 검증이란 소프트웨어가 의도된 디자인 및 요구사항을 올바르게 구현하고 있는지 확인하는 과정입니다. 안전이 중요한 개발의 경우, 이 과정은 생명주기 전반에 걸쳐 지속적으로 진행되며, 각 단계에서 생성된 문서화된 증거 자료가 적합성 입증 자료로 활용됩니다.

검증 대 타당성 확인: 요약 버전

이 두 용어는 종종 같은 의미로 사용되지만, 각각 다루는 질문은 다릅니다.

  • 검증(Verification)은 다음과 같은 질문을 던집니다. ‘소프트웨어를 올바르게 구축했는가? 소프트웨어 구현 내용이 사양과 일치하는가?’
  • 검증은 다음과 같은 질문을 던집니다: 올바른 소프트웨어를 개발했는가? 실제 사용자의 요구를 충족하는가?

코드 검증은 전자를 중점으로 다룹니다. 정적 분석, 구조화된 검토, 동적 테스트를 사용하여 구현 내용이 설계 및 사양을 충실히 반영하고 있는지 확인합니다.

코드 검증의 내용을 포함한다

포괄적인 검증 전략은 대개 서로 보완적인 여러 활동을 결합하여 이루어집니다.

정적 코드 분석

소스 코드는 실행 없이 검토됩니다. PC-lint Plus와 같은 도구는 테스트가 시작되기 전에 코딩 표준 위반, null 포인터 참조, 범위를 벗어난 액세스, 정의되지 않은 행동 및 기타 수백 가지의 결함 유형을 검사합니다. 정적 분석에 대한 자세한 내용

단위 테스트

개별 함수, 모듈, 클래스 및 컴포넌트는 독립적으로 테스트됩니다. 개발자는 정상 입력, 경계 조건 및 오류 사례 전반에 걸쳐 올바른 행동을 검증합니다. VectorCAST와 같은 도구를 사용하면 테스트 생성 및 실행을 자동화하고, 테스트가 코드를 얼마나 철저하게 검증하는지 측정할 수 있습니다. 단위 테스트에 대해 더 알아보기

코드 범위 검사

명세서, 분기, MC/DC를 포함한 커버리지 지표는 테스트 스위트가 코드를 충분히 실행하고 있음을 입증합니다. 규제 대상 산업에서는 특정 커버리지 수준을 달성하는 것이 단순한 목표가 아닌 필수 요구사항입니다. 코드 커버리지에 대해 알아보기

요구사항 추적성

각 test 케이스는 해당 test 케이스가 검증하는 요구사항과 연결되어 있습니다. 양방향 추적성을 통해 모든 요구사항이 평가되었으며, 목적 없이 수행된 테스트가 없음을 확인할 수 있습니다. 이는 모든 안전 감사에서 매우 중요한 요소입니다.

왜 검증은 사후 고려 사항이 되어서는 안 되는가

코드 검증 과정에서 발견된 결함을 수정하는 데 드는 비용은 통합 테스트, 시스템 테스트 또는 필드 운영 중에 발견된 결함을 수정하는 데 드는 비용보다 훨씬 적습니다. 리콜 비용과 안전상의 문제가 심각할 수 있는 embedded software의 경우, 체계적인 검증을 통해 오류를 조기에 발견하는 것은 경제적 측면은 물론 윤리적 측면에서도 필수적입니다.

ISO 26262, DO-178C, IEC 61508, IEC 62304를 포함한 산업 표준들은 모두 추적 가능한 증거를 바탕으로 문서화된 검증 활동을 의무화하고 있습니다. Vector의 도구는 이러한 요구사항을 충족하기 위해 특별히 개발되었습니다.