Proven by Intelligence
보이지 않는 안전을 인텔리전스로 증명하다.
기술 인사이트를 만나보세요.
안녕하세요. 🤗
임베디드 소프트웨어 검증 센터를 운영하고 있는 MDS인텔리전스 입니다.
방위사업청이 고시한 ‘무기체계 소프트웨어 개발 및 관리 매뉴얼(2022.12.22)’은 방위력개선사업으로 획득되는 소프트웨어의 체계적인 개발 및 관리를 위한 프로세스와 산출물 작성표준 등을 규정하기 위한 목적을 가지고 있습니다.
이번 포스팅에서는 무기체계 소프트웨어 획득을 위하여 수행하는 소프트웨어 신뢰성 시험 중 “소프트웨어 정적(Static) 시험”에 대해서 이야기해보겠습니다.

소프트웨어 정적(Static) 시험이란?

소프트웨어를 실행하지 않은 상태에서 잠재적인 결함을 검출하는 시험을 말하며 코딩규칙(Coding Rule) 검증, 취약점 점검 및 소스코드 메트릭 점검으로 구성됩니다.
정적시험은 C, C++, Java, C#을 대상으로 시험하되, 자동화 도구가 지원하지 않는 경우에 대해서는 제외합니다.
정적시험을 통하여 결함 검출 시 소프트웨어 소스 코드 수정 후 재시험하여 결함 존재 여부를 확인하는 작업을 반복하여 각 항목의 기준에 따른 결함이 검출되지 않아야 합니다.
단, 거짓경보 및 시험 대상이 아닌 것은 결함에 포함하지 않습니다.
※ “거짓경보(False Alarm)”란 시험도구를 이용하여 검출한 내용이 실제 오류가 아닌 결함을 오류로 검출하는 것을 말하며, 시험도구는 결함으로 탐지하였지만 기능 구현을 위해서 반드시 사용해야 하는 것은 거짓경보에 포함할 수 있다.
※ “시험대상”

무기체계 소프트웨어 개발 및 관리 매뉴얼 내의 소프트웨어 신뢰성 시험 적용 대상 소프트웨어
1) 기개발, 상용 소프트웨어는 수정하지 않은 경우에 시험 대상에서 제외할 수 있고, 수정한 경우 수정 범위가 소프트웨어에 미치는 영향을 고려하여
독립적으로 시험 수행이 가능한 범위(최소 단위는 함수)를 식별하고 해당 범위에 대해 신뢰성 시험을 수행하여야 한다.
단, 기개발 소프트웨어는 무기체계 소프트웨어 신뢰성 시험을 실시한 소프트웨어 또는 기규격화 소프트웨어를 말한다.
2) 공개 소프트웨어는 “공개SW 무기체계 적용 가이드라인”에 따라 소프트웨어 신뢰성 시험을 수행한다.
3) 자동 생성 Code는 타당한 사유를 제시할 경우 신뢰성 시험 대상에서 제외할 수 있다.
4) 주체계의 운영과 직접적인 관련이 없는 장비 또는 소프트웨어(예: 지원장비, CBT(Computer based training), 분석장비 등)는 신뢰성 시험 대상에서 제외할 수 있다.
소프트웨어 신뢰성 시험은 아래 표에 따라 대상 사업의 목적 및 특성을 고려하여 소프트웨어 신뢰성 시험 적용 범위 및 기준을 테일러링하여 적용할 수 있습니다.

무기체계 소프트웨어 개발 및 관리 매뉴얼 내의 사업 유형별 소프트웨어 신뢰성 시험 적용 범위
정적시험은 소프트웨어 형상항목(CSCI) 단위로 실시하는 것을 원칙으로 합니다.
정적시험 자동화도구는 관련표준에 인증된 제품을 사용하는 것을 원칙으로 하되 인증된 도구가 없을 경우에는 소프트웨어 검토회의(소프트웨어 신뢰성시험계획)를 통해 결정합니다.
정적시험은 소프트웨어 개발 초기부터 수행하여 통합시험단계에서 종합적으로 실시합니다.
그럼 각 검증 항목에 대하여 알아보겠습니다.
코딩 규칙 검증
관련 코딩 규칙 :
1) MISRA-C : 2012
2) MISRA-C++ : 2008
3) JSF++(Joint Strike Fighter Air Vehicle C++)
4) Code conventions for the Java Programming Language(Oracle)
5) C# Coding conventions, .NET Framework Design Guideline(Microsoft)
관련 산업 표준 :
1) IEC 61508
2) ISO 26262
3) DO-178B/C
4) IEC 62279
5) IEC 60880
6) EN 50128
코딩 규칙이란 소프트웨어의 품질 및 신뢰성 향상을 위하여 프로그램 코딩 시 준수해야 할 규칙으로 코딩 규칙 검증은 구현된 프로그램이 이러한 규칙을 준수하여 코딩 되었는지 검증하는 활동이다. 사업(체계)의 특성에 가장 적합한 코딩 규칙 표준 준수를 원칙으로 하며, 조정이 필요한 항목은 사유를 제시하여 사업관리회의를 통하여 확정합니다.
취약점 점검
관련 취약점 목록 : CWE
취약점 점검이란 소프트웨어 소스 코드가 CWE(Common Weakness Enumeration) 목록에 정의된 취약점을 포함하고 있는지 점검하는 활동을 말합니다.
※ CWE ( Common Weakness Enumeration )는 소프트웨어 보안 및 품질 강화를 위해 개발 시에 참고할 수 있도록 소프트웨어 취약점을 표준화한 목록으로서,미국 국토안보부(국가사이버보안국) 산하 비영리 공익단체인 MITRE가 제공
※ CWE-658/659/660은 C/C++/Java 언어로 소프트웨어를 개발할 때 소프트웨어 소스 코드에 발생 빈도가 높은 취약점 목록
자동화 도구에서 지원하는 취약점 점검 항목은 모두 적용하고, CWE 목록 중 도구가 지원하지 않는 항목에 대해서는 대안과 사유를 제출하고 사업 관리부서, 기술지원기관과 협의하여 결정합니다.
소스코드 메트릭 점검
관련 메트릭 :
1) Cyclomatic Complexity : 순환 복잡도
2) Number of Call Levels : 함수 내 조건문의 최대 중첩의 깊이
3) Number of Function Parameters : 함수의 입력되는 Parameter의 개수
4) Number of Calling Functions : 이 함수를 호출하는 다른 함수의 개수
5) Number of Called Functions : 특정 함수가 호출하는 다른 함수의 개수
6) Number of Executable Code Lines : 함수 안에서 실제 실행되는 코드의 라인 수
소스코드 메트릭(Code Metrics) 점검이란 소스코드 메트릭 종류 및 제한값 준수 여부를 확인하는 활동이다. 소스코드 메트릭 종류 및 제한 값은 개발언어, 도메인 특성을 고려하여 선정하고 소프트웨어 신뢰성 시험계획에 반영하여 개발 과정에서 준수 여부를 점검한다.
※ 소스코드 메트릭은 소프트웨어의 복잡도 감소, 유지보수의 용이성 증대, 가독성 향상 등 소프트웨어 품질향상을 목적으로 적용하며, 사업의 특성(개발언어, 도메인 특성 등)을 반영하여 연구개발주관기관에서 종류 및 제한값을 제시하고, 소프트웨어 검토회의 등을 통해 결정한다. ( 필요 시 시험대상항목(CSCI, CSC, CSU) 단위로 제시할 수 있다. )
소프트웨어 정적시험이 완료되면 다음의 항목을 별도로 첨부해야 한다.
가. 소프트웨어 신뢰성 시험도구의 한계로 인한 결함 중 거짓경보(False Alarm)의 경우 해당 소스 코드를 확인하여 거짓경보 여부를 분석하고, 거짓경보에 대한 설명자료를 추가한다.
나. 소스코드 메트릭 종류별 제한값을 미달성한 경우 원인에 대해 분석하고, 미달성 분석결과보고서를 추가한다.
다. 규격화시 소프트웨어통합시험결과서(STR)에 최신화하여 반영한다.
출처 : 방위사업청

이렇게 “무기체계 소프트웨어 개발 및 관리 매뉴얼”의 소프트웨어 신뢰성시험 항목 중 정적시험을 요약하여 알아보았습니다.
저희 MDS인텔리전스는 정적시험을 위하여 관련표준에 인증된 자동화 도구(Helix QAC, Codesonar)를 제공하고 있으며 “무기체계 소프트웨어 개발 및 관리 매뉴얼” 획득을 위한 정적시험의 각 항목들을 준수하기 위한 프리셋을 제공합니다. 또한 개발 초기부터 통합시험단계까지 원활한 정적시험 수행을 위하여 가이드 및 지원활동도 제공하고 있습니다.
더 구체적인 검증 서비스에 대해서 궁금하시거나,
기타 문의사항은 sve@mdsit.co.kr로 문의 메일 부탁드립니다.

MDS 인텔리전스
임베디드 소프트웨어 고품질 및 신뢰성 확보를 위한, SW 검증센터
E. sve@mdsit.co.kr
