코딩뚠뚠

MISRA C 코딩룰 본문

공부/기타

MISRA C 코딩룰

로디네로 2021. 12. 27. 02:14
반응형

 

 

개발자 누구나 자신만의 코딩룰이 있을것이다.

 

하지만 현업에선 자신만의 코딩룰보단 개발 테스트 관리를 위한 공통의 룰이 있다는것을 알게됐다.

 

MISRA C 는 그 공통의 코딩룰 중 하나로 아래에서 설명을 이어간다.

 

 


 

MISRA 란?

 

MISRA는 The Motor Industry Software Reliability Association 의 줄임말로

 

자동차 소프트웨어 안정성 증진을 위한 단체이다.

 

MISRA C는 1998년 MISRA가 자동차 산업계를 위한 코딩 규칙을 세운 가이드라인을 출판하면서 자동차 업계에서 사용하는 C언어 프로그래밍 언어의 애매함(ambiguities)를 다루며 생겨났다.

 


 

위에서 말한 C 프로그래밍언어의 불안정성이란 어떤것들을 의미할까?

 

1.  프로그래머의 실수

  • 단순 타이핑 에러
  • 알고리즘 잘못 이해
  • 언어 구성소의 원리를 잘못 이해

2. 컴파일러가 프로그래머가 예상한것과 다르게 동작

  • C언어에 완전하게 정의되지 않은 영역이 있어 컴파일러에 따라 동작이 달라질 수 있다.

3. 컴파일러 자체 에러

  • 컴파일러 자체에 버그를 포함하고 있거나 언어표준을 준수하지 않을 수 있다. 컴파일러도 누군가가 개발한 소프트웨어 도구이기 때문이다.

4. 런타임 에러

  • C언어는 코드 실행 중 생긴 문제를 발견하고 조치를 취하는 런타임 체킹에 취약하다.
  • 산술예외, 오버플로우, 포인터주소 유효, 어레이 바운드 err 같은 런타임 체킹 제공X

 

 


 

 

 

MISRA C 1998 (MC1): 

"Guidelines for the use of the C language in vehicle based software"

  • 127개 규칙 / 93개 필수규칙 / 34개 권고규칙
  • 임베디드 시스템에서 엔지니어가 개발 언어의 알려진 이슈나 결함을 이해하고 이를 사전에 방지하여 안전한 시스템을 개발할 수 있게 하기 위한 목적
  • 1998년 발표 이후 자동차 산업 뿐 아니라 항공 및 의료분야 등에서도 MISRA 표준이 널리 사용됐다.

ex)

- 초기화 안된 오브젝트는 사용하지 않는다
- && 또는 || 논리 연산자의 피연산자는 일차식이여야 한다
- 부울 값을 반환하는 식에서는 지정 연산자를 사용하지 않는다

전체 문서:

https://wwwfiles.iar.com/rl78/EW_MisraC1998Reference.pdf

 

 

MISRA C 2004 (MC2) : 

"Guidelines for the use of C language in critical systems"

  • 141개 규칙 / 121개 필수규칙 / 20개 권고규칙
  • MC1에의 단점을 개선함 (불명확한 규칙, 의미해석이나 적용이 어려운 규칙

ex)

부작용 및 제어 흐름의 변화를 일으키지 않는 문장 사용 금지
do-while-zero 기법을 활용한 함수 매크로 사용
여러 개의 언어나 컴파일러를 사용할 경우, object code에 대한 공통적인 인터페이스가 있어야 한다.

전체 문서 : 

http://caxapa.ru/thumbs/468328/misra-c-2004.pdf

 

 

MISRA C 2012 (MC3) : 

"Guidelines for the use of the C languate in critical systems"

  • 143개 규칙 / 28개 권고사항
  • 전자제어장치 등 소프트웨어에 대한 의존성이 급격함에 증가함에 따라 자동차분야 및 여러 분야에서 C언어에 대한 코딩표준으로 MISRA C 2012가 가장 널리 사용되고 있다.

ex)

sizeof의 피연산자에 side effect(부작용)를 발생시킬 수 있는 수식 포함 금지
메모리는 시스템 라이브러리 함수를 통해 할당되었을 때만 해제되어야 한다
void 포인터에서 객체 포인터로 변환 금지

전체 문서 : 

https://www.academia.edu/40301277/MISRA_C_2_012_Guidelines_for_the_use_of_the_C_language_in_critical_systems

 

MISRA C:2 012 Guidelines for the use of the C language in critical systems

MISRA C:2 012 Guidelines for the use of the C language in critical systems

www.academia.edu

 

 


 

 

AUTOSAR 에서의 사용

 

AUTOSAR는 하나의 파트너십으로 AUTOSAR C++는 코딩 가이드라인이다. 

 

이는 C++언어의 표준에서도 명확히 정의되지 않은 Undefined Behaviour에 의해 발생하는 결함을 제거하기 위한 코딩 규칙들을명시한다.

 

AUTOSAR 코딩규칙은 총 342개로 구성되어있는데 아래와 같다.

  1. MISRA C++ 표준에서 채택된 규칙 (134개)
  2. PRQA 사의 High Integrity C++ Coding Rules 또는 CERT C++ 등의 코딩 표준에 의해 정의된 규칙들 (131개)
  3. 기타 다른 연구를 통해 제정된 규칙 (57개)

 

 


 

 

 

이와같이 SW 개발에는 지켜야 할 룰이 존재하고 이는 꾸준히 발전해왔으며 필요에 의해 통합되기도 한다는 것을 알게됐다.

 

양이 방대하기 때문에 모든것을 기억하며 코딩을 할 수 없어 이를 검증해주는 소프트웨어 툴도 존재한다.

 

다음 포스팅에서는 MISRA 2012에 대해 좀더 자세히 포스팅하며

 

검증할 수 있는 소프트웨어에 대해서도 알아볼 예정이다.

반응형

'공부 > 기타' 카테고리의 다른 글

엣지컴퓨팅이란?  (0) 2022.03.06
MISRA C 2012와 특성  (0) 2021.12.28
생체인증/미래  (0) 2021.11.18
생체인증/개요  (0) 2021.11.18
SQLite 와 사용방법  (0) 2021.10.05