MISRA C

MISRA C

MISRA C는 The MISRA Consortium이 개발한 C 프로그래밍 언어에 대한 소프트웨어 개발 가이드라인 세트입니다.그 목적은 임베디드 시스템, 특히 ISO C/C90/[1]C99에서 프로그래밍된 시스템의 맥락에서 코드 안전, 보안, 휴대성 및 신뢰성을 촉진하는 것입니다.

이 문서에서는 다루지 않는 일련의 MISRA C++ 가이드라인도 있습니다.

역사

  • 드래프트: 1997년[2]
  • 초판 : 1998년 (규칙, 필수/자문)
  • 제2판 : 2004년 (규칙, 필수/어드바이저리)
  • 제3판 : 2012년 (지시, 규칙, Decable/Undecuable)
  • MISRA 컴플라이언스: 2016년, 2020년 갱신

MISRA-C의 처음 두 판(1998년과 2004년)에서는 모든 지침을 규칙으로 간주했다.MISRA C:2012의 발표와 함께 새로운 범주의 가이드라인이 도입되었다. 즉, 규정 준수가 해석에 보다 개방적이거나 프로세스 또는 절차상의 문제와 관련된 지침이다.

도입

MISRA C는 원래 자동차 산업을 대상으로 했지만 자동차, 항공우주, 통신, 의료기기, 국방, 철도 등의 분야에서 선도적인 개발자들에게 널리 받아들여지는 모범 사례 모델로 발전해 왔습니다.예를 들어 다음과 같습니다.

  • 합동 타격 전투기 프로젝트 C++ 부호화[3] 표준은 MISRA-C:1998에 기초하고 있다.
  • NASA 제트추진연구소 C 코딩[4] 표준은 MISRA-C:2004에 기초하고 있다.
  • ISO 26262 기능 안전 - 도로 차량은 MISRA C를 C 언어의 적절한 하위 집합으로 인용합니다.
    • ISO 26262-6:2011 Part 6: 소프트웨어 레벨에서의[5] 제품 개발은 MISRA-C:2004 및 MISRA AC AGC를 인용하고 있습니다.
    • ISO 26262-6:2018 Part 6: 소프트웨어 레벨에서의[6] 제품 개발은 MISRA C:2012를 인용한다.
  • AUTOSAR 일반 소프트웨어 사양(SRS_BSW_00007)에서도 마찬가지로 MISRA C:
    • AUTOSAR 4.2 일반 소프트웨어[7] 사양은 BSW 모듈 구현이 C 언어로 작성된 경우 MISRA C:2004 표준을 준수해야 한다고 요구한다.
    • AUTOSAR 4.3 일반 소프트웨어[8] 규격은 BSW 모듈 구현이 C 언어로 작성된 경우 MISRA C:2012 표준을 준수해야 한다고 요구한다.

지침구분 및 분류

새로운 소프트웨어 프로젝트를 시작할 때는 최신 MISRA 표준을 사용해야 합니다.이전 표준을 [9]참조해야 하는 기존 소프트웨어 프로젝트에서 사용할 수 있습니다.

분류

각 가이드라인은 필수(MISRA C:2012의 신기능), 필수(Required) 또는 권고(Advisory)로 분류됩니다[10].또, MISRA 컴플리언스 문서에서는, 어드바이저리 가이드 라인의 적용허가하고 있습니다.

  • 필수 가이드라인은 항상 준수되어야 합니다.
  • 일탈의 대상이 되지 않는 한, 필요한 가이드 라인이 준수되어야 한다.
  • 어드바이저리 가이드라인은 베스트 프랙티스로 간주되지만 컴플라이언스는 그다지 정식적이지 않습니다.

분류

규칙은 논리적으로 여러 범주로 나눌 수 있습니다.

  • 컴파일러의 차이를 피하기 위해 예를 들어 C정수의 크기는 다양하지만 INT16은 항상 16비트입니다.(C99 표준화 완료)int16_t.)
  • 예를 들어, 고장 나기 쉬운 기능 및 구조를 사용하지 않도록 합니다.malloc실패할 수 있습니다.
  • 명명 규칙 및 주석과 같은 유지 보수 및 디버깅 가능한 코드를 생성합니다.
  • 베스트 프랙티스 규칙
  • 복잡성의 한계.

범위

MISRA C:2012에서는 각 가이드라인을 단일 번역 유닛 또는 시스템으로 [10]구분하고 있습니다.

결정 가능성

MISRA C:2012는 규칙(지시는 제외)을 Decable 또는 Undecomable로 분류한다.

컴플라이언스 달성

MISRA 준거

MISRA는 MISRA 준수를 이해하고 달성하기 위한 추가 지침을 제공하기 위해 문서를 발행했다.

  • MISRA Compliance:2016은 2016년 [11]4월에 MISRA에 의해 출시되었습니다.
  • MISRA Compliance:2020 개정판은 2020년 [12]2월에 출시되었습니다.

준수

소프트웨어가 MISRA C 가이드라인에 준거하고 있다고 주장하기 위해서는 모든 필수 규칙이 충족되어야 하며 필요한 모든 규칙 및 지침이 충족되거나 정식 일탈되어야 합니다.어드바이저리 규칙은 공식적인 편차를 두지 않고 적용될 수 있지만, 이는 프로젝트 문서에 기록해야 합니다.

주의: 컴플라이언스를 위해 규칙과 지시문은 구분되지 않습니다.

편차

특정 조건 하에서는 소프트웨어 엔지니어가 규칙에서 벗어나 표준에 준거한 것으로 간주될 수 있기 때문에 많은 MISRA C 규칙지침으로 특징지을 수 있습니다.편차는 코드 또는 파일에 기록해야 합니다.또한 소프트웨어 엔지니어가 시스템의 안전성을 고려했으며 규칙에서 벗어나는 것이 부정적인 영향을 미치지 않는다는 증거가 제공되어야 하며, 편차에 대한 요구사항은 다음과 같습니다.

  • 그 규칙은 에서 벗어났다.
  • 편차에 [13]대한 근거입니다.

공개 문서

MISRA C: 1998

MISRA C 초판인 [14]"차량 기반 소프트웨어에서 C 언어 사용을 위한 지침"은 1998년에 발행되었으며 공식적으로 MISRA-C:1998로 알려져 있다.

MISRA-C:1998에는 127개의 규칙이 있으며, 그 중 93개는 필수이고 34개는 자문이다. 규칙은 1부터 127까지 순서대로 번호가 매겨진다.

MISRA C: 2004

2004년, 제2판 "중요 시스템에서 C 언어 사용을 위한 지침" 또는 MISRA-C:2004가 제작되었고, 규칙의 완전한 번호 변경을 포함한 지침의 상당한 변경이 있었다.

MISRA-C:2004에는 142개의 규칙이 있으며, 그 중 122개는 "필수"이고 20개는 "자문"이다. 이들은 "환경"에서 "실시간 실패"까지 21개의 주제 범주로 나뉜다.

MISRA C:2012

메인 문서

2013년에는 제3판 MISRA C:2012가 발행되었다.MISRA C:2012는 C99 버전의 C 언어(C90에 대한 가이드라인 유지)에 대한 지원을 확장하고 컴플라이언스 비용과 복잡성을 줄이면서 중요한 시스템에서 [15]C를 일관되고 안전하게 사용할 수 있도록 지원하는 여러 개선사항을 포함합니다.

MISRA-C:2012에는 143개의 규칙과 16개의 "지침"이 포함되어 있다(즉, 준수가 해석에 보다 개방적인 규칙 또는 프로세스 또는 절차 문제와 관련된 규칙). 각 규칙은 필수, 필수 또는 권고로 분류된다.싱글 번역 유닛 또는 시스템하나로 분류됩니다.또한 규칙은 Decable 또는 Undecomable로 분류됩니다.

수정안 1

2016년 4월, MISRA는 (무료 다운로드로) MISRA C:2012 - 수정안 1: 14개의 새로운 보안 지침을 추가한 추가 보안 지침[16] 발행했습니다.

수정안 2

2020년 2월, MISRA는 (무료 다운로드로) MISRA C:2012 - 개정판 2: C11/C18 내에서 정의되지 않은, 지정되지 않은, 구현 정의된 행동에 대한 매핑을 추가하는 ISO/IEC 9899:2011/18 핵심 기능[17] 위한 업데이트를 발표했다.

보충 문서

MISRA는 MISRA C:2012를 지원하기 위해 다음과 같은 부록을 발행했다.

  • MISRA C:2012 - 부록 1: 규칙 매핑.[18] MISRA C:2004와 새 버전 간의 양방향 규칙 매핑이 포함되어 있습니다.이는 사용자의 이행을 지원하기 위한 것입니다.
  • MISRA C:2012 - 부록 2:ISO/IEC TS 17961:2013 "C Secure"에 대한 MISRA C:2012 적용범위[19]
  • MISRA C:2012 - 부록 3: CERT C에 대한 MISRA C:2012의 적용 범위[20]

스위트 예시

샘플 스위트(MISRA-C:2004 및 MISRA C:2012용)는 MISRA GitLab[21] 저장소에서 구할 수 있습니다(로그인 필요).이를 통해 도구 사용자는 다양한 MISRA 도구에서 제공하는 점검 지원을 평가하고 비교할 수 있습니다. 또한 도구 구현자에게 MISRA 지침의 목적에 대한 지침을 제공합니다.

도구들

「MISRA 준거」의 코드를 체크한다고 하는 소프트웨어 툴은 많이 있습니다만, MISRA 인증 [22]프로세스는 없습니다.

대부분의 가이드라인은 정적 코드 분석을 수행하는 도구를 사용하여 확인할 수 있습니다.나머지 가이드라인에서는 동적 코드 분석을 사용해야 합니다.

MISRA 적합 코드를 검사하는 도구는 다음과 같습니다.

MISRA 준거를 지원하는 C/C++ 컴파일러는 다음과 같습니다.

비판

일부 연구 결과는 MISRA C 2004의 효과에 의문을 제기한다.

MISRA C:1998과 MISRA C:2004에 관한 이전 연구를 비교한 논문에서 Les Hatton은 다음과 [28]같은 결론을 도출했다.

MISRA C 표준의 영향이 확대되고 있는 것을 고려하여, 본서에서는, 원래의 표준의 중요한 결함이 만족스럽게 해결되고 있는지를 평가하려고 한다.불행하게도, 그들은 그렇지 않았고 중요한 실질 대 허위 양의 비율은 MISRA C 2004가 1998년 MISRA C보다 훨씬 낫지 않으며 둘 다 받아들일 수 없을 정도로 낮다.

그는 다음과 같이 말한다.[28]

현재 형태로는 MISRA C 2004 업데이트의 혜택을 받는 유일한 사람은 툴 벤더인 것으로 보이며, 발표된 실험 데이터에 대해 조금 더 주의를 기울이고 다음 날 규칙을 발명하려는 유혹을 덜함으로써 표현을 단순화하고 향후 개정에서 잘못된 긍정 비율을 줄이기 위한 조치를 취할 것으로 기대된다.좋은 생각인 것 같다는 근거입니다.

TU 델프트의 Cathal Boogerd와 Leon Moonen에 의한 연구는 MISRA C:2004의 값을 경험적으로 평가한다.결과는 [29]비슷합니다.

얻은 데이터로부터 다음과 같은 중요한 관찰을 할 수 있다.첫째, 결함 관련 라인을 찾을 때 랜덤 예측 변수보다 훨씬 더 나은(α = 0.05) 위반이 관찰된 72개의 규칙 중 9개가 있습니다.이러한 규칙의 실제 긍정 비율은 24~100%입니다.둘째, 우리는 MISRA 규칙 위반과 관찰된 결함 사이의 음의 상관 관계를 관찰했다.또한 72개의 규칙 중 29개의 규칙이 0의 진정한 긍정률을 보였다.모든 수정에 결함이 발생할 확률이 0이 아니라는 애덤스의 관찰과 함께, 이는 MISRA 표준을 전체적으로 준수하는 것이 소프트웨어를 덜 신뢰할 수 있게 만드는 것을 가능하게 한다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "MISRA clarifies safe and secure uses of the C language". www.misra.org.uk. Retrieved 2019-10-09.
  2. ^ 1997년 봄, Austin Rover Group(ARG)의 소프트웨어 엔지니어는 검토를 위해 C 코딩 표준 초안을 Programming Research Ltd(PRL)에 보냈습니다.검토는 PRL의 당시 선임 컨설턴트였던 David Blys가 수행했으며, 그는 초안을 상당히 강력한 코딩 규칙 세트로 대체할 것을 제안했다.이러한 규정은 사소한 변경과 함께 MISRA C 초판의 기초를 형성하였다.
  3. ^ "Joint Strike Fighter Air Vehicle C++ Coding Standards" (PDF). Retrieved 2019-07-16.
  4. ^ "NASA JPC C Coding Standards" (PDF). Retrieved 2019-07-16.
  5. ^ "ISO 26262-6:2011 Road vehicles -- Functional safety -- Part 6: Product development at the software level". iso.org. ISO. Retrieved 2019-07-16.
  6. ^ "ISO 26262-6:2018 Road vehicles -- Functional safety -- Part 6: Product development at the software level". iso.org. ISO. Retrieved 2019-07-16.
  7. ^ "AUTOSAR 4.2 General Software Specification" (PDF). autosar.org. Retrieved 2019-07-16.
  8. ^ "AUTOSAR 4.3 General Specification of Basic Software Modules" (PDF). autosar.org. AutoSAR. 2016-11-30. Retrieved 2019-07-16.
  9. ^ MISRA 출판물
  10. ^ a b "Fact Sheet: MISRA C:2012 (PDF)" (PDF). programmingresearch.com. Retrieved 10 June 2013.
  11. ^ "MISRA Compliance:2016 (PDF)". MISRA. Retrieved 22 July 2016.
  12. ^ "MISRA Compliance:2020 (PDF)" (PDF). MISRA. Retrieved 8 April 2020.
  13. ^ "Achieving MISRA C:2012 Compliance". Parasoft. Retrieved May 29, 2017.
  14. ^ "A brief history of MISRA C". MISRA. 2013-03-18. Retrieved 2014-06-30.
  15. ^ "MISRA C:2012 release date announced". MISRA. 26 February 2013. Retrieved 10 June 2013.
  16. ^ "MISRA C:2012 - Amendment 1 (PDF)". MISRA. April 2016. Retrieved 31 October 2019.
  17. ^ "MISRA C:2012 - Amendment 2 (PDF)". MISRA. February 2020. Retrieved 6 January 2021.
  18. ^ "MISRA C:2012 - Addendum 1: Rule Mapping (PDF)".
  19. ^ "MISRA C:2012 - Addendum 2: Coverage of MISRA C:2012 against ISO/IEC TS 17961:2013 "C Secure" (PDF)".
  20. ^ "MISRA C:2012 - Addendum 3: Coverage of MISRA C:2012 against CERT C (PDF)".
  21. ^ MISRA GitLab 저장소
  22. ^ "MISRA C FAQ 목록" MISRA 컨소시엄
  23. ^ "Helix QAC for C and C++ Perforce".
  24. ^ "Clearlake Capital-Backed Perforce Software to Acquire Rogue Wave Software Perforce".
  25. ^ "Klocwork for C, C++, C#, Java, and JavaScript Perforce".
  26. ^ MISRA 적합성 검사, PC-lint/FlexeLint, Gimpel 소프트웨어.
  27. ^ 언어 및 표준, iar.com
  28. ^ a b 산업적 맥락에서의 언어 서브셋: MISRA C 1998과 MISRA C의 비교, Les Hatton; University of Kingston; 2004.
  29. ^ 코딩 표준의 가치 평가:경험적 연구: C.J. Boogerd와 L.Moonen; 델프트 공과대학; 2008.

외부 링크