5
Q. 자동차 산업에서 탄생한 MISRA C의 역사는. A. MISRA C의 첫 버전은 1998년에 처음 나 왔습니다. MISRA C는 포드와 로버가 협력해 탄생시켰습니다. 이들은 소프트웨어의 공통 규 칙을 준수하고 코드를 공유하는 것을 목표로 코딩 표준을 만들었습니다. MISRA C의 최초 개정은 2004년에 있었습니다. 이때 표준이 확 장됐고 Exemplar suite가 추가됐습니다. 이 Exemplar suite이 소스 코드 파일로 많은 사 례가 들어갔습니다. 규칙준수(compliance)와 비규칙준수 코드 사례들이 실제로 들어가면서 툴 벤더나 고객들이 서로를 더 잘 이해할 수 있게 됐습니다. 가장 최근에 나온 버전은 MISRA C:2012로 3월 배포됐습니다. 10명 으로 구성된 위원회를 통해 4년 만에 나왔습 니다. MISRA C의 버전 업은 대략 7년 주기입 니다. 그러나 사실 MISRA 2008 버전도 있습 니다. 2008의 경우엔 C++에 대한 룰입니다. Q. ISO 26262와 MISRA C는 어떤 관계인가. A. C 언어는 불안정한 언어이지만 자동차 산 업에서 널리 사용되고 있습니다. 차량용 소프 트웨어에 대한 안전도가 갈수록 중요해지면 자동차를 비롯해 우주항공, 철도, 국방 분에서 사용하는 소프트웨어의 결함을 줄이 고자 영국 자동차 산업 신뢰성 협회(Motor Industry Software Reliability Association, MISRA)가 처음으로 C 프로그래밍 언어에 대한 코딩 가이드라인을 발표했습니다. MISRA C는 ISO/IEC C 표준 9899:1990 /1999를 기반으로 합니다. 이 코딩 가이드라 인의 목적은 명확하게 임베디드 장치에서 안전 하고, 이식성이 좋고, 신뢰성 높은 코드를 만드 84 www.autoelectronics.co.kr TALKING ABOUT MISRA C는 ISO/IEC C 표준 9899:1990/1999를 기반으로 한 다. 이 코딩 가이드라인의 목적은 명확하게 임베디드 장치에서 안전 하고, 이식성이 좋고, 신뢰성 높은 코드를 만드는 것이다. 새로운 전이 릴리스된 MISRA C에 대해 PRQA의 프랭크 부켄 (Frank Van Den Beuken) 컨 설턴트와 이야기를 나눴다. 윤범진 기자 <[email protected]>

TALKING ABOUT - hancommds.com C_PRQA_Frank_Au… · s # ä î ¡ × > s î v ; ± #ppmfbo q i ¹ î × | q ä î $ 7 u i Ð & . w s À > s Ñ e i à × } d i ç : s i 3 ç ~ á Û

  • Upload
    vanlien

  • View
    227

  • Download
    5

Embed Size (px)

Citation preview

Page 1: TALKING ABOUT - hancommds.com C_PRQA_Frank_Au… · s # ä î ¡ × > s î v ; ± #ppmfbo q i ¹ î × | q ä î $ 7 u i Ð & . w s À > s Ñ e i à × } d i ç : s i 3 ç ~ á Û

Q. 자동차산업에서탄생한MISRA C의역사는.

A. MISRA C의 첫 버전은 1998년에 처음 나

왔습니다. MISRA C는 포드와 로버가 협력해

탄생시켰습니다. 이들은소프트웨어의공통규

칙을 준수하고 코드를 공유하는 것을 목표로

코딩 표준을 만들었습니다. MISRA C의 최초

개정은 2004년에있었습니다. 이때표준이확

장됐고 Exemplar suite가 추가됐습니다. 이

Exemplar suite이 소스 코드 파일로 많은 사

례가 들어갔습니다. 규칙준수(compliance)와

비규칙준수 코드 사례들이 실제로 들어가면서

툴 벤더나 고객들이 서로를 더 잘 이해할 수

있게 됐습니다. 가장 최근에 나온 버전은

MISRA C:2012로 올 3월 배포됐습니다. 10명

으로 구성된 위원회를 통해 4년 만에 나왔습

니다. MISRA C의버전업은대략 7년주기입

니다. 그러나 사실 MISRA 2008 버전도 있습

니다. 2008의경우엔C++에대한룰입니다.

Q. ISO 26262와MISRA C는어떤관계인가.

A. C 언어는불안정한언어이지만자동차산

업에서널리사용되고있습니다. 차량용 소프

트웨어에 대한 안전도가 갈수록 중요해지면

서 자동차를 비롯해 우주항공, 철도, 국방 부

분에서 사용하는 소프트웨어의 결함을 줄이

고자 국 자동차 산업 신뢰성 협회(Motor

Industry Software Reliability Association,

MISRA)가 처음으로 C 프로그래밍 언어에

대한 코딩 가이드라인을 발표했습니다.

MISRA C는 ISO/IEC C 표준 9899:1990

/1999를 기반으로 합니다. 이 코딩 가이드라

인의목적은명확하게임베디드장치에서안전

하고, 이식성이좋고, 신뢰성높은코드를만드

84 www.autoelectronics.co.kr

TALKING ABOUT

MISRA C는 ISO/IEC C 표준

9899:1990/1999를 기반으로 한

다. 이 코딩 가이드라인의 목적은

명확하게 임베디드 장치에서 안전

하고, 이식성이 좋고, 신뢰성 높은

코드를 만드는 것이다. 새로운 버

전이 릴리스된 MISRA C에 대해

PRQA의 프랭크 반 덴 부켄

(Frank Van Den Beuken) 컨

설턴트와이야기를나눴다.

│윤범진기자<[email protected]>

Page 2: TALKING ABOUT - hancommds.com C_PRQA_Frank_Au… · s # ä î ¡ × > s î v ; ± #ppmfbo q i ¹ î × | q ä î $ 7 u i Ð & . w s À > s Ñ e i à × } d i ç : s i 3 ç ~ á Û

는 것입니다. ISO 26262가 추구하는 방향은

MISRA C와 비슷합니다. 때문에 MISRA C는

강제사항이 아니라 옵션이지만 유럽 OEM은

이를 하나의 룰로 채택했고 ISO 26262에서도

이를권장하고있습니다.

Q. MISRA C는얼마나보편화됐나.

A. VDC 리서치는2년전코딩표준채택과관

련된 백서를 하나 냈습니다. 임베디드, 엔터프

라이즈 IT 회사에서근무하는 600여명의개발

자를대상으로조사한것인데, 대부분응답자가

인하우스 표준을 사용하는 것으로 나타났습니

다. 즉, 기업 내 랭기지 전문가가 있어 이들이

코딩가이드라인을만들고이를채택해사용하

고있는것입니다. 그러나 업계의표준중에는

MISRA C가 가장 많이 사용되는 것으로 나타

났습니다. 물론, MISRA C가 자동차에서 시작

됐지만 자동차에서만 사용되는 것은 아닙니다.

우주항공, 국방, 의료, 원자력, 철도 등 안전에

민감한산업, 그리고소비가전등에서사용되고

있습니다. 소비가전의경우엔기기의품질과관

련한 기업의 이미지, 사후관리 비용 측면에서

수요가 높습니다. 한마디로 MISRA C는 모든

산업분야에서사용되고있는것입니다.

Q. PRQA의국내외위상은.

A. 1985년에 설립된 PRQA는 정적분석

(static analysis) 산업의 개척자로 결함 검

출과 코딩 표준 자동검사 툴의 로벌 리더

입니다. 우리의 QA C, QA C++, QA

VERIFY 툴은 C와 C++에서 최선의 툴입니

다. PRQA의 MISRA C 컴플라이언스 모듈,

툴은시장의사실상표준입니다.

PRQA는 자동차 산업은 물론 우주항공, 국

방, 교통, 소비가전 등 거의 모든 산업에서

4,400여개기업을고객으로두고있습니다. 이

중절반은자동차산업기업들입니다. PRQA는

MISRA C 코딩 룰 부문 마켓셰어 1위 업체이

고 한국의 자동차 산업 내에서도 독보적인 지

위에 있습니다. 2006년 MDS테크놀로지가 총

판을하면서현대·기아자동차의코딩룰에채

택됐고 이후 사업을 크게 확장하고 있습니다.

로벌 2위경쟁업체는한국자동차산업부문

에서활동을하지않습니다.

사실 2000년대중반까지한국의자동차산

업은MISRA C를왜적용해야하는지몰랐습니

다. 이전까지내부관리용으로사용된정도입니

다. 그러나 최근에 ISO 26262 표준을 비롯해

해외 업체가 코딩 룰 리포트를 요구하면서 적

MISRA C

MISRA C 2004와 2012 간터미놀러지변화

PRQA, MISRA C 지원독보적툴벤더개발코딩룰그대로사용

PRQA 프랭크반덴부켄 선임컨설턴트

2013 JUL·AUG 85

Page 3: TALKING ABOUT - hancommds.com C_PRQA_Frank_Au… · s # ä î ¡ × > s î v ; ± #ppmfbo q i ¹ î × | q ä î $ 7 u i Ð & . w s À > s Ñ e i à × } d i ç : s i 3 ç ~ á Û

용이확대되고있습니다. 한국의메이저회사들

이나 Tier 1은 100% 적용하고 있고 Tier 2도

거의다사용하고있는상황입니다.

Q. MISRA C:2012와이전버전간차이점은.

A. MISRA C:2012는 2004보다 커졌습니다.

규칙이 142개에서 159개로 늘었고 내용도 더

좋아졌습니다. 문구가바뀌고설명이더들어갔

으며룰넘버링도바뀌었습니다. 그러나가이드

라인은거의바뀌지않았습니다. MISRA 웹사

이트에 가보면 2004와 2012 버전 간 규칙을

서로 매핑해주는 문서가 있습니다. 혹시

MISRA C:2004를사용하고있고 2012로업그

레이드를고려하고있다면이문서를찾아보기

바랍니다.

레거시 코드는 호환되지 않습니다. 예를 들

어 소프트웨어가 10만 개의 라인을 갖고 있으

면 1만여개의MISRA 바이얼레이션이있을것

입니다. 즉, 1만 개의 메시지를 고친다면 어딘

가에서 실수가 있을 것입니다. MISRA 위원회

는 이 표준을 기존의 코드에 적용하려하지 않

고 새로 작성한 코드에만 적용하는 것을 목표

로했습니다. 다만 2012 표준에는그래도레거

시코드에대한언급이있습니다. 새로운 요구

사항은많지않고일부제약사항이제거됐습니

다. PRQA의 제품 중에는 레거시 코드와 관련

도움을줄수있는제품이있습니다. 코드가과

거부터있었던것인지, 새로운코드인지를판단

하는제품입니다.

Q. ISO C와MISRA의관계는.

A. MISRA C는 다양한 ISO C 언어를지원합

니다. ISO C의 첫 번째 표준 버전은 1990년

도에 릴리스됐습니다. ISO:C90은 컴파일러나

툴에 의해 잘 지원받고 있습니다. 그러나 모

든 컴파일러들이 C 표준을 체크하지는 않습

니다. 완벽히 지원하는 것이 아닙니다. 거의

모든 경우에서 일부 옵션을 인에이블링 시켜

서 체크하게 만들어야합니다. ISO:C90은 언

어가 가지고 있는 위험들을 충분히 이해하고

86 www.autoelectronics.co.kr

TALKING ABOUT

MISRA C:2012의주요변화

Page 4: TALKING ABOUT - hancommds.com C_PRQA_Frank_Au… · s # ä î ¡ × > s î v ; ± #ppmfbo q i ¹ î × | q ä î $ 7 u i Ð & . w s À > s Ñ e i à × } d i ç : s i 3 ç ~ á Û

있습니다. 제약 요소가 있다면 불리언

(Boolean) 타입이 없다는 점입니다. C90은

파이프시스템자체에문제가있지만이런문

제는충분히이해되고있고이를해결할솔루

션도 있습니다. 그중 하나가 바로 MISRA C

표준입니다.

ISO:C99는불리언타입이포함됐고인라인

펑션도 허용됩니다. 이러한 특징은 C++ 랭기

지와 GCC와 같이 많이 사용되는 컴파일러에

서 비롯됩니다. 그런데 랭기지 자체는 C90에

비해 정립되지 않은 behaviour가 많아 위험

한 부분이 많습니다. 코드의 의미가 무엇인지

를 알려주지 않는 undefined behavior는 큰

문제입니다. 이는 코드에서 절대 있어서는 안

되는 것입니다. ISO:C11은 새로운 언어이고

아직 툴 지원도 제한적입니다. 따라서 사용을

권하지 않습니다. MISRA C:1998, MISRA

C:2004, MISRA C:2012 모두는 ISO:C90 사

용을 허용합니다. MISRA C:2012는 ISO:C99

사용까지허용합니다.

Q. 좀 더 자세하게 MISRA C:2012의 특징을

설명하면.

A. MISRA C:2012는 이전 버전과 비교해 용

어상변화가있습니다. 과거에는용어들의의

미가 애매모호했습니다. C 언어의 타입은 다

양한 의미를 내포하고 있고 이는 문제가 될

수 있습니다. 때문에 MISRA C:2004에는

underlying과 complex expression이란

타입개념이도입됐습니다. 하지만이용어들

의 정의가 모호하고, 개념은 signed,

unsigned 정수까지만 의미했습니다. 또

underlying type 용어는 C++에서 다른 의

미로 사용됐고 complex는 일반적으로 C99

에서 지원되는 대수인 complex arithmetic

을 의미하는 데 사용됐습니다. 결국 MISRA

C:2012에서 underlying 타입은 essential

타입으로 부르기로 했습니다. complex

expression은 composite expression으로

대체됐습니다. essential 타입은 코딩규칙의

정의에서 산술 표현의 타입을 설명할 때 더

욱직관적입니다. 불리안쪽에서는같은이유

에서 effectively 불리안이 아닌 essentially

불리안으로 바뀌었습니다. ISO에서 사용되는

용어들과확연히구분되게됐습니다.

가이드라인은 Directive와 Rule 두 종류가

있습니다. 카테고리는 Advisory, Required,

Mandatory 세 가지이고, 언어는 C90, C99,

C90·C99이 있습니다. 결정가능성은 두 가

지, 분석 범위는 Single Translation Unit과

System이 있습니다. 룰은 요구사항이 명확하

게 정의됐고, Directive는 프로세스나 문서 관

련요구사항을다룹니다.

그런데 Directive는 룰만큼정의가명확하지

않습니다. 때문에다양한방식으로해석됩니다.

Directive는 프로세스나 문서 관련 요구사항을

다룰수도있습니다. 코드와 관련된것이아니

라 코드를 쓰기 위해 사용한 프로세스나 무엇

인가를 입증하기 위해 작성한 문서와 관련된

것일수있습니다. 대표적룰로8.5나 11.3 등이

있습니다. 8.5는“external object 또는

function은단한번, 단하나의파일에서만공

표되면된다”고매우명확히돼있습니다. 반면

에 Directive는 3.1, 4.3이 좋은 예인데, 3.1은

“모든 코드는 문서화된 요구사항에 추적 가능

해야한다”고명시합니다.

테라랩이실시한MISRA C 컴플라이언스체킹결과, QA C와기타툴비교

MDS테크놀로지가개최한 '자동차개발자컨퍼런스'에는국내자동차엔지니어500여명이참석했다.

2013 JUL·AUG 87

Page 5: TALKING ABOUT - hancommds.com C_PRQA_Frank_Au… · s # ä î ¡ × > s î v ; ± #ppmfbo q i ¹ î × | q ä î $ 7 u i Ð & . w s À > s Ñ e i à × } d i ç : s i 3 ç ~ á Û

88 www.autoelectronics.co.kr

TALKING ABOUT

중요한 가이드라인 카테고리를 보면, 첫째

Advisory guideline이 있는데 이는 권고사항

에 가깝습니다. 사용자가 비규칙 준수를 선택

할수있습니다. 다만규칙을따르지않았다는

내용을문서화해야합니다. 따르지않은이유를

합리화할 필요는 없습니다. Required

guideline은 규칙을 따르지 않기로했다면어

떤 공식적인 문서를 만들어야만 합니다.

Mandatory guideline은반드시준수해야하고

규칙준수는 항상 이뤄져야합니다. deviation

이 허용되지 않습니다. MISRA C:2004에서

는 모든 가이드라인에서 deviation이 허용됐

었습니다.

룰 12.4와 13.5는 결정가능(decidable)하든

지, 그렇지 않든지 둘 중 하나에 대한 것입니

다. 결정 가능하다는 것은 어떤 프로그램에서

든지 툴이 규칙을 준수하는 지, 안하는 지를

항상결정할수있다는것이다. 그렇지않다면

전부결정가능하지않다는것입니다. 결정가

능하다는 것은 소스 코드를 보며 자동으로 체

크가가능하다는뜻입니다.

Analysis scope는 두 가지 타입이 있습니

다. Single Translation Unit 룰은소스파일을

보며결정을할수있습니다. 파일에서 괜찮은

지 않은지를 판단할 수 있습니다. System 룰

은 모든 소스 파일을 함께 봐야하고 규칙준수

여부를 알 수 있습니다. Single Translation

Unit이 있다면 봐야하는 파일이 많지 않아 체

크가쉽습니다.

Q. MISRA C에대한다양한툴이있을텐데.

A. 테라랩스(TERA-Labs)는 9개의상용정적

분석 툴을 비교했는데 문헌상으로는 툴들이

포괄적인 MISRA C 규칙준수를 체크한다고

나와 있지만 현실은 그렇지 않다고 보고했습

니다. 여기서툴별점수를밝혔습니다. 11개룰

을 선택하고 규칙 별로 툴이 메시지를 체크하

고 바이얼레이션을 체크했습니다. 테라랩스는

9개의 툴이 발견한 바이얼레이션 메시지, 트

루 메시지를 봤습니다. 메시지의 25%만이 트

루 메시지 는데 이것이 정적분석의 문제입니

다. 개발자들은이런상태에선툴을신뢰할수

없습니다. 9개툴중에서가장신뢰할수있는

툴은PRQS의QA C 습니다.

PRQA의 QA C의 가장 큰 장점은 코드에

대한 오검출률이 낮다는 것입니다. 다른 툴은

오류가아닌데도검출하는오검출이많습니다.

또 일부 오류를 검출하지 못합니다. QA C는

가장 많은 오류를 정확하게 검출할 수 있습니

다. 우리는 코드 표준을 준수하기 위해 많은

노력을 기울이고 있습니다. ISO 기준을 맞춰

가는데엄격하게임하고있습니다.

결정적으로 경쟁사 대비 MISRA 오검출이

적은이유는MISRA가PRQA가개발한코딩룰

을그대로가져가사용하기때문입니다. 우리는

여전히MISRA 위원회의중요일원으로활동하

고있습니다.

Q. QA VERIFY는어떤툴인가.

A. Deviation은 MISRA C의 중요한부분이

며 종종 필요합니다. 왜냐면 속성들이 서로

컴플리팅하는 경우가 있기 때문입니다. 퍼포

먼스 목표를 달성해야하는데 리더빌리티, 유

지보수성 등 다른 품질 속성과 상충되는 경

우가 있어 이런 경우 deviation을 활용해서

실행 조치를 합리화할 필요가 있습니다.

MISRA에는 승인된 deviation 규칙준수 절

차가 있고 감사관에게 입증해야합니다.

PRQS의 QA VERIFY는 deviation을 지원

해줍니다. 모든 메시지별로 서프레스 옵션이

있어서 어떤 메시지를 suppression하거나

deviation을 생성하거나 재사용할 수 있습니

다. 코드와 함께 사용하기 때문에

suppression과 deviation 하기 쉽고 리포

트를 모두 볼 수 있습니다. 코드 내에 코멘트

를달수도있습니다.

우리는 QA C 등 툴 개발에서 표준, 컴파

일러, 툴 변화를 관심 있게 보고 있고, 실제

개발자들의 요구사항을 분석해 다음 버전을

릴리즈 할 때 적합성을 판단 개선하는데 심

혈을기울이고있습니다. ISO C 표준을따르

려하고 있고 고객들의 반응을 수렴하려하고

있습니다. AE

효율적Deviation 관리기능을제공하는QA VERIFY