IEC 61508, ISO 26262, IEC 62304, MISRA C, CWE 같은 표준들에 의해 주도되는 검증·검증 전담 산업이 출현해 소프트웨어가 신뢰성, 보안, 고품질 갖도록 보장. 자사 제품이 이 표준들 엄격한 규제 요건 대상이 아니어도, 입증된 모범 사례 프로세스 채택이 버그 대폭 감소, 출시 단축, 유지보수 비용 절감 가져옵니다.
오류 유형별 대응 도구
소프트웨어 결함 두 대분류, 각기 다른 완화 기법 필요:
코딩 에러 - 예: 배열 경계 밖 접근 - 정적 분석으로 조기 탐지 가능.
애플리케이션 에러 - 코드가 명세 충족 못 할 때 발생, 요구사항 주도 테스트로만 발견 가능.
코딩 에러와 코드 리뷰
정적 분석은 특히 프로젝트 초반 통합 시 강력한 1차 방어선. 나중에 디버깅 어려운 버그 될 수 있는 코딩 규칙 위반 식별. 정적 분석 보완으로 엄격한 코드 리뷰가 선택한 코딩 표준 준수 확인, 예: MISRA C:2012.
이론적으로 안전 설계 언어 - 에이다(Ada) 등 - 강타입과 명시적 구조로 많은 함정 제거. 하지만 현실적으로 대부분 임베디드 팀은 C/C++ 의존, 유연성 제공하지만 미정의(undefined), 불특정(unspecified), 구현정의(implementation-defined) 동작 같은 미묘한 함정 노출. 언어 기능 제한하고 위험 구조(goto, malloc, 부호/부호없는 산술 혼용) 금지하면 코딩 표준이 결함 예방 기준 높임.
C/C++ 세계 흔한 함정들
부호 있는 정수 구현정의 우측 시프트: 상위 비트 0으로 채우나 1로 채우나?
함수 인자 평가 순서 불특정, rollDice() 같은 단순 루틴 결과 변경 가능.
부호 있는/없는 값 혼용, 미묘한 오버플로 유발 가능.
그림 1: 일부 C/C++ 구성요소 동작이 사용 컴파일러에 따라 다름 (출처: LDRA)그림 2: 일부 C/C++ 구성요소 동작이 언어에서 불특정 (출처: LDRA)
잘 확립된 MISRA C:2012 같은 코딩 표준 채택이 이런 함정 회피 도움. 표준 규칙 300개 이상 특정 코딩 관행 다루며 각 언어 미정의/불특정 동작 참조 설명 뒷받침. 대부분 가이드라인은 "결정 가능(decidable)" - 정적 분석 도구가 위반 자동 탐지; 일부 "불결정(undecidable)" - 도구 잠재적 이슈 플래그, 개발자가 실제 문제 여부 판단.
2016년 4월 MISRA 범위 확대해 보안 중요 소프트웨어 다루게 14개 새 가이드라인 추가. 지침 4.14가 미정의 동작 명시적 타겟, 보안 지향 프로젝트 추가 보호층 제공. 그림 4가 MISRA 보안 고려사항이 광범위 안전 프레임워크와 어떻게 정렬되는지 보여줌.
그림 4: MISRA와 보안 고려사항 (출처: LDRA)
애플리케이션 에러와 요구사항 테스트
코딩 표준이 저수준 버그 방지하지만, 소프트웨어가 의도한 동작 충족 못 할 때 애플리케이션 버그 발생. 탐지엔 견고한 요구사항 기반과 요구사항-설계-코드 간 추적 가능한 연결 필요.
양방향 추적성으로 모든 요구사항 구현되고 모든 구현이 요구사항으로 추적 가능. 그림 5, 6이 이 양방향 매핑 보여주며 수명주기 초반 누락·중복 기능 드러냄.
그림 5: 양방향 추적성, 함수 선택 (출처: LDRA)그림 6: 양방향 추적성, 요구사항 선택 (출처: LDRA)
추적성 갖춰지면 저수준 요구사항에서 테스트 케이스 도출 가능. 그림 7이 단일 함수 동작 완전 명세하는 전형적 저수준 요구사항, 표 1이 테스트 케이스들이 그 요구사항들에 어떻게 매핑되는지 시연.
그림 7: 저수준 요구사항 예시 (출처: LDRA)표 1: 저수준 요구사항에서 도출된 테스트 케이스 (출처: LDRA)
호스트와 타겟 모두에서 단위 테스트 프레임워크로 이 테스트들 실행해 구현이 요구사항과 일치하는지 확인. 그림 8이 모든 테스트 케이스 통과하는 회귀 스위트. 테스트 실행 후 구조적 커버리지 메트릭으로 코드베이스 전체 실행됐는지 검증, 갭 있으면 추가 테스트나 코드 리팩토링.
그림 8: 단위 테스트 수행 (출처: LDRA)
결론
소프트웨어 복잡성 증가, 결함 위험도 증가. MISRA C:2012 같은 현대 코딩 표준, 엄격한 메트릭, 추적 가능한 요구사항, 요구사항 기반 테스트 기반 모범 사례 개발이 고품질, 신뢰성, 견고한 코드로 가는 검증된 길. 프로젝트가 공식 안전 규제 구속받든 아니든, 이 관행들이 가져오는 규율과 투명성은 모든 개발팀에 순이익.