정적 코드 검증 대 동적 코드 검증
정적 분석과 동적 테스트는 동일한 문제의 서로 다른 측면을 다룹니다. 정적 분석은 실행 전에 소스 코드의 결함을 찾아냅니다. 동적 테스트는 실행 중 올바른 행동을 확인하고, 테스트가 코드를 얼마나 철저하게 검증하는지 측정합니다. 개발 파이프라인 전반에 걸쳐 이 두 가지를 함께 사용하면, 각 방식이 상대방이 놓친 결함 유형을 포착할 수 있습니다.
정적 코드 검증
정적 검증은 소스 코드를 실행하지 않고 분석하는 방식입니다. 정적 분석 도구는 코드의 구조와 논리를 직접 검토함으로써, 단 한 번의 평가도 실행하기 전에 잠재적인 결함, 보안 취약점 및 코딩 표준 위반 사항을 식별합니다.
정적 분석에서 발견되는 사항
- 널 포인터 참조 및 배열 범위를 벗어난 액세스
- MISRA C, AUTOSAR C++, CERT-C 등 코드 구현 표준 위반
- 초기화되지 않은 변수 및 부적절한 형 변환
- 도달 불가능한 코드 및 논리 오류
- CWE 분류 체계에 mapping된 보안 취약점
주요 장점
- 빌드나 실행 과정 없이 소스 코드에서 직접 작동합니다
- 개발 초기 단계부터 빌드 파이프라인에서 지속적으로 실행됩니다
- 개발 초기 단계에 통합할 경우 결함당 비용이 매우 낮습니다
- 실행 환경이나 입력 데이터와 관계없이 일관되고 재현 가능한 결과를 생성합니다
PC-lint Plus는 Vector의 C 및 C++ 코드용 정적 분석 도구입니다. IEC 61508 및 ISO 26262 인증을 획득한 이 도구는 MISRA, AUTOSAR, CERT-C, CWE를 기본적으로 지원하며, 거의 모든 빌드 환경에 통합될 수 있습니다.
동적 코드 검증
동적 검증은 소프트웨어가 실행되는 동안 이를 테스트하는 방식입니다. 정의된 test 케이스에 따라 코드를 실행하고, 실제 runtime 동작을 관찰하며, 테스트가 요구사항에 따라 코드를 얼마나 철저히 검증하는지 측정합니다.
동적 평가가 제공하는 것
- 실제 및 시뮬레이션 환경에서 코드가 올바르게 동작하는지 확인
- 안전 표준에서 요구하는 문, 분기, MC/DC를 포함한 코드 범위 검사
- 스택 오버플로우 및 타이밍 위반과 같은 runtime 오류 탐지
- 테스트 결과와 이를 검증하기 위해 설계된 요구사항 간의 요구사항 추적성
주요 장점
- 단순히 소스 코드 구조뿐만 아니라 실제 runtime 행동을 검증합니다
- ISO 26262 및 DO-178C를 포함한 표준에서 구조적 커버리지 증명을 위해 요구사항으로 포함됨
- 호스트 기반 및 타겟 기반 평가 환경을 모두 지원합니다
- 지속적인 자동 실행을 위해 CI/CD 파이프라인에 통합됩니다
VectorCAST는 임베디드 C, C++ 및 Ada 소프트웨어를 위한 Vector의 동적 테스트 및 테스트 자동화 플랫폼입니다. 이 플랫폼은 단위 테스트를 생성, 관리 및 실행하고, 업계 표준 수준에 맞춰 코드 범위 검사를 수행하며, 안전 인증에 필요한 검증 가능한 보고서를 생성합니다.
왜 둘 다 필요한가
정적 분석과 동적 테스트는 각각 명확한 적용 범위를 가지고 있습니다. 정적 분석은 소스 코드를 대상으로 수행되며, 실행 전에 결함을 식별합니다. 동적 테스트는 실행 중인 소프트웨어를 대상으로 수행되며, 실제 환경에서 올바른 행동을 확인합니다. 이 두 가지를 모두 사용하는 개발 프로세스는 각 방법이 가장 효과적인 시점에서 결함을 포착할 수 있기 때문에, ISO 26262, DO-178C, IEC 61508 및 IEC 62304에서는 이 두 가지를 별개의 검증 활동으로 의무화하고 있습니다.