항공 소프트웨어의 C++ 코딩 표준인 JSF C++에 대하여 소개한 자료
항공 소프트웨어(avionics software)의 특성
- 안전성(Safety)이 매우 중요
- 데드라인의 엄격한 준수가 요구되는 경성 실시간(Hard real-time) 시스템
- 성능(시간과 공간) 중요성
JSF C++
- 2005년 록히드 마틴 사의 Joint Strike Fighter(JSF) 항공 소프트웨어 개발에서 C++ 사용을 위하여 개발됨(즉, JSF 프로젝트의 C++ 코딩 표준)
- C++ 언어에 안전성 측면에서 우려되는 영역(unsafe facilities)이 존재하므로 이를 제외한 안전한 부분 집합을 정의하여 고안전 시스템에서 C++을 사용할 수 있게 하려는 목적
- 총 221개 규칙으로 구성됨
- 자동차 산업 분야의 코딩 표준인 MISRA-C를 참조하여 일부 규칙을 그대로 또는 수정하여 포함
- MISRA 코딩 표준과 달리 코딩 스타일과 메트릭에 대한 가이드라인도
제시
예를 들어, AV Rule 1은 하나의 function(또는 method)의 소스 코드가 200라인 이하일 것을 요구하고, AV Rule 50은 클래스 명, 스트럭쳐 명, typedef로 생성된 타입 명 등의 첫 글자를 대문자로 나머지는 소문자로 할 것을 요구한다.
규칙(Rules)의 타입
각 규칙은 굵은 글씨의 “should” 또는 “will” 또는 “shall”로 기술되어 있는데, 해당 규칙의 타입을 나타낸다.
- Should 규칙: 사용할 것을 강하게 권장하는 권고 규칙
- Will 규칙: 의무적인 요구사항. 준수를 기대하지만 검증(verification)을 요구하지는 않는 다. 명명 규칙(naming conventions) 같은 쉽게 검증 할 수 없는 비안전 요구사항(non-safety-critical requirements)에 한정된 규칙
- Shall 규칙: 의무적인 요구사항. 반드시 준수해야 하며 자동 또는 수동의 검증이 요구된다.
Should 규칙을 위반하려면 한 단계 상위 관리자(개발 리더)의 승인이 요구되며, Will 또는 Shall 규칙 위반을 위해서는 두 단계 상위 관리자(개발 리더와 프로젝트 관리자)의 승인이 요구된다.
JSF C++ 규칙 예
AV Rule 29: 인라인 매크로 생성을 위해 #define 프리프로세서 지시어를 사용하지 않는다. 대신 인라인 함수를 사용한다(The #define pre-processor directive shall not be used to create inline macros. Inline functions shall be used instead).
AV Rule 84: 오퍼레이터 오버로딩은 꼭 필요한 경우에만 통상적인 방식으로 사용한다(Operator overloading will be used sparingly and in a conventional manner).
AV Rule 97: 인터페이스에 어레이를 사용하지 않는다. 대신 어레이 클레스를 사용한다(Arrays shall not be used in interfaces. Instead, the Array class should be used).
AV Rule 193 (MISRA Rule 61): switch 구문에서 비어 있지 않은 모든 case 절은 break문으로 빠져 나온다(Every non-empty case clause in a switch statement shall be terminated with a break statement).
코딩 표준 시행(Coding Standard Enforcement)
- 자동화된 방법: 코딩 표준 준수를 위해 가능한 도구를 사용. 빠르고, 객관적이고, 정확하다.
- 수동 방법: 자동화 할 수 없는 규칙들을 위해 코드 인스펙션을 위한 체크리스가 제공된다.
'산업종류별 > 우주항공' 카테고리의 다른 글
페이퍼요약 - DO-178B의 안전성 및 신뢰성 고려사항 by Zemskyy (0) | 2018.01.19 |
---|---|
영상자료 - 우주선 지상 소프트웨어 테스팅 방법 by Streiffert (0) | 2018.01.15 |
페이퍼요약 - 감항성을 위한 항공 소프트웨어 검증 프레임워크 by Wu (0) | 2018.01.10 |
페이퍼요약 - 복잡한 항공 시스템을 위한 포괄적 밸리데이션 플랫폼 by Favarcq (0) | 2018.01.03 |
페이퍼요약 - 임베디드 항공 시스템의 소프트웨어 테스팅 by ISPRAS (0) | 2017.11.15 |