본문 바로가기
자동차 사이버보안/자동차 보안 플랫폼

MISRA C와 MISRA C++ : 임베디드 소프트웨어를 위한 코딩 표준

by HYS Blog 2023. 5. 15.

안녕하세요,

 

오늘은 임베디드 시스템 소프트웨어에 대한 안전, 보안, 신뢰성을 보장하는

 

코딩 가이드라인에 대해 이야기해볼까 합니다.

 

바로, 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++에 대한 소개를 마칩니다.

 

안전하고 신뢰할 수 있는 임베디드 소프트웨어를 위한 이 중요한 코딩 표준에 대해 더 알아보고 싶다면,

 

다음 포스트를 기대해 주세요! 😊