안녕하세요,
오늘은 임베디드 시스템 소프트웨어에 대한 안전, 보안, 신뢰성을 보장하는
코딩 가이드라인에 대해 이야기해볼까 합니다.
바로, MISRA C와 MISRA C++ 표준입니다. 🎯✨
제가 참조한 글은 아래와 같습니다.
관심있으시면 참조 부탁드려요!
What Is MISRA C? – A Safe and Secure Coding Standard for Embedded Software
Learn about MISRA C coding standards and how they can be used to make embedded system software safe, secure, and reliable. Resources include videos and documentation.
www.mathworks.com
MISRA C와 MISRA C++란 무엇인가요? 🚀
MISRA C와 MISRA C++ 표준은
C와 C++ 프로그래밍 언어에 대한 코딩 가이드라인입니다.
이 가이드라인은 모터 산업 소프트웨어 신뢰성 협회(MISRA)에 의해 출판되었으며,
차량 제조사, 부품 공급업체, 엔지니어링 컨설팅사들의 협력으로 이루어졌습니다. 🚗🤝🔧
왜 MISRA C는 임베디드 시스템에 중요한가요? 🎯
C 프로그래밍 언어는 성능, 하드웨어 간의 이식성,
메모리에 대한 직접적인 제어 등의 내재적 능력 때문에
임베디드 시스템에 가장 인기있는 언어 중 하나입니다.
하지만 일부 C 언어 구조체는 프로그래밍 오류,
정의되지 않은 동작 또는 구현에 따라 정의되는 동작을 초래할 수 있습니다.
MISRA C 가이드라인은 이러한 언어 측면을 방어하고
임베디드 시스템의 안전과 보안을 보장하기 위해
C 언어의 '안전한 하위 집합'을 정의합니다. 🔒🛡️💡
MISRA C의 발전 🚀
MISRA C의 첫 번째 판은 1998년에 출판되었습니다.
이후 MISRA는 MISRA C:2004, MISRA C:2012 두 개의 추가 판과
MISRA C:2012에 대한 두 개의 수정판을 출판했습니다.
각 출판물마다 MISRA는 새로운 가이드라인을 추가하고
MISRA C 준수를 어떻게 달성할지에 대한 더 많은 지침을 제공했습니다. 📚🔍
MISRA C와 초기화 목록 💻
MISRA C 가이드라인은 이러한 언어의 측면을 보호하여
임베디드 시스템의 안전성과 보안성을 위협할 수 있는 요소를 제거하려고 합니다.
예를 들어, C99는 실행 시간에만 평가될 수 있는 표현식을 가진 초기화 목록의 사용을 허용합니다.
그러나 목록의 요소가 평가되는 순서는 정의되어 있지 않습니다.
간단한 예를 봅시다:
int x=0;
int y=1;
volatile int v;
void func() {
int arr[2] = {x+y, x-y};
int arr2[2] = {x++, x+y};
int arr3[2] = {v, v};
}
위 코드에서 arr2[]는 {1,1} 또는 {1,2}로 초기화 될 수 있습니다.
x++이 평가되는 순서에 따라 결과가 달라지기 때문입니다.
이러한 모호성은 예상치 못한 값으로 이어질 수 있습니다.
이런 이유로, MISRA C:2012 Rule 13.1은 초기화 목록에서 발생하는 표현식이
해당 표현식에 사용된 변수를 수정하지 않아야 한다고 명시하고 있습니다.
MISRA C:2012 준수를 어떻게 보장하나요? 🧐
MISRA C:2012 가이드라인은 규칙 또는 지시사항으로 작성되었습니다.
가이드라인은 다음과 같이 구분됩니다.
1. 규칙:
소스 코드의 준수 여부를 명확하게 확인할 수 있는 정보가 제공됩니다.
규칙은 정적 코드 분석 도구를 사용하여
결정적으로 검증할 수 있는 경우 '결정 가능한' 규칙으로 분류됩니다.
2. 지시사항:
제공된 정보가 해석의 여지가 있거나
소프트웨어 개발 프로세스와 관련이 있는 경우입니다.
각 가이드라인은 또한 조언, 필수, 또는 의무적으로 레이블링됩니다.
MISRA C:2012 준수를 보장하기 위해
프로젝트 소스 코드는 다음을 충족해야 합니다:
모든 의무적 가이드라인
공식적인 예외를 제외한 모든 필수 가이드라인
실용적인 경우 조언 가이드라인
MISRA C:2012 채택에 대한 몇 가지 중요한 고려사항 🎯
소프트웨어 개발 프로세스 내에 MISRA C 통합
MISRA는 MISRA C 가이드라인이 프로젝트의 소프트웨어 개발 프로세스 내에 통합되도록 권장합니다.
준수 행렬 생성
각 프로젝트는 모든 가이드라인과 해당 집행 방법을 문서화하는 준수 행렬을 생성해야 합니다.
편차 문서화
MISRA는 가이드라인을 따르는 것이 불가능하거나 비합리적인 상황에서 가이드라인에서의 편차를 허용합니다.
MISRA C 준수를 위한 주요 MathWorks 제품 🛠️
Simulink, Stateflow, Simulink Check™, Embedded Coder는
MISRA C 및 MISRA-C++에 부합하는 임베디드 소프트웨어를 생성하는 데 널리 사용됩니다.
이상으로 MISRA C와 MISRA C++에 대한 소개를 마칩니다.
안전하고 신뢰할 수 있는 임베디드 소프트웨어를 위한 이 중요한 코딩 표준에 대해 더 알아보고 싶다면,
다음 포스트를 기대해 주세요! 😊
'자동차 사이버보안 > 자동차 보안 플랫폼' 카테고리의 다른 글
자동차 사이버 보안: 퍼징 테스트(Fuzzing Test)이란 무엇인가? (0) | 2023.05.17 |
---|---|
DevOps에서 DevSecOps: 보안이 통합된 개발의 새로운 패러다임 (0) | 2023.05.17 |
자동차 사이버보안 표준: ISO 21434에 대해 알아보자! (0) | 2023.05.14 |
AUTOSAR를 알아보자: 미래 자동차를 위한 핵심 기술 (0) | 2023.05.07 |
자동차 사이버보안의 미래: ISO 21434 표준에 대해 알아보기 (0) | 2023.05.07 |