기능 안전 툴 내 통합 코드 분석 기능

C-STAT 정적 분석 및 C-RUN 런타임 분석툴은 Renesas RX 및 ARM 용 IAR Embedded Workbench의 기능 안전판에 포함되는 추가 상품입니다. 이번 순서에서는 안전 인증 어플리케이션 개발 시 코드 분석 툴을 사용하면 좋은 점에는 어떤 것이 있는지 알아 보겠습니다.

기능 안전 표준 및 코드 분석 

IEC 61508 Edition 2.0의 제3부에서는 안전 관련 시스템에 관련되는 요구 사항을 제시하고 있으며, 적절한 개발 프로세스의 사용을 의무화하고 있습니다. 예를 들어, 제7부 기법 및 조치의 개요 내 C.4.2 항에서는 다음과 같이 언어 서브셋(language subset)을 사용할 것을 요구하고 있습니다. 

목적: 프로그래밍 상의 하자 발생 가능성을 줄이고, 발생한 하자에 대해서도 이를 파악할 수 있는 가능성을 높입니다. 

개요: 언어는 에러에 취약하거나, 분석이 어려운 프로그래밍 구조체를 판정하기 위해 검토를 받습니다. 이 과정에서는 정적 분석 방법 등을 사용합니다. 이어서 이러한 구조체를 배제하는 언어 서브셋을 정의합니다. 

같은 항에서, 안전 통합 레벨(SIL)이 1을 초과하는 경우, C 언어를 위와 같은 제약이 없이 프로그래밍 언어로 활용하는 행위는 권장하지 않는다고도 언급하고 있습니다. 이를 바꾸어 말하면, 기본적으로 C/C++ 소프트웨어를 사용하여 SIL 2-4 등급의 인증 시스템을 개발하고자 하는 경우 반드시 정적 분석 툴을 필요해 지는 것입니다. 

마찬가지로, 제7부 기법 및 조치의 개요 B.6.5 항 동적 분석 및 테스팅에서는 런타임 분석에 대해 다음과 같이 언급하고 있습니다. 

목적: 개발이 상당부분 진행된 상태에서 시작품의 동적 반응을 검사해, 사양 실패 항목을 탐지합니다. 

개요: 안전 관련 시스템의 동적 분석은 거의 작동이 가능한 상태의 시작품을 대상으로 입력 데이터를 제공해 안전 관련 시스템의 분석을 실시하는 것입니다. 여기서 입력하는 데이터는 설계 시 상정한 운영 환경에서 통상적으로 발생하는 내용으로 구성됩니다. 분석의 결과는 관측되는 안전 관련 시스템 반응이 요구되는 반응 조건을 충족할 경우에 합격으로 합니다. 안전 관련 시스템이 이러한 조건을 충족하지 못하는 경우 이는 반드시 시정해야 하며, 적절하게 작동이 가능하도록 재작성한 버전을 두고 분석을 다시 실시해야 합니다. 

이러한 과정에서 C-RUN가 어떠한 도움을 줄 수 있는지 살펴 보도록 하겠습니다. 

C-RUN는 컴파일러에 통합되어 있는 툴로서, C-SPY 내에도 통합되어 있습니다. C-RUN는 사용자가 런타임에서 실행가능 코드를 관찰하고, 코드 실행 중 조건 위반이 발생할 시 이를 보고할 수 있도록 해 줍니다. C-RUN는 산술적 점검, 바운즈 체킹, 힙 체킹을 실시하며, IAR Embedded Workbench 프로젝트 설정 화면에서 쉽게 설정할 수 있습니다:

Project Options

런타임 분석툴은 일반적으로 허위 양성 판정률이 낮으며, 이는 C-RUN도 예외가 아닙니다. 바꾸어 말하면, C-RUN에서 버그가 발견되는 경우 이는 실제 버그일 확률이 높습니다. 실제 코드가 대상 시스템 상에서 실행되는 과정에서 실시한 분석한 결과이기 때문입니다.  C-RUN은 어플리케이션 상태에 대한 정보 일체를 조회할 수 있으며, 실제로 발생한 버그 관련 사항을 보고합니다. 하지만, 아래에서 보이는 바와 같이 이와는 별도로 C-SPY 메시지 규칙(Message Rule)을 적절히 설정하면, 실행 중에는 에러가 발생해도 그냥 지나치도록 할 수 있습니다. 

C-RUN messages

그렇지만 이런 런타임 분석에도 단점이 존재합니다. 먼저 문제가 발견되는 시점이 이와 같은 방식으로 개발이 한창 진행된 다음이라는 문제점이 있습니다. 이는 분석툴 자체가 코드가 실행가능한 코드의 실행을 요하기 때문입니다. 뿐만 아니라 분석 자체도 어플리케이션 중에서 실제로 실행되는 부분으로 한정된다는 단점이 있습니다. 만일 전체 코드를 검사할 수 있도록 어플리케이션이 필요로 하는 자극을 모두 발동시킬 수가 없는 경우, 테스트를 거치지 않은 코드가 남아 있게 됩니다. 그럼에도 불구하고, C-RUN는 사용자에게 매우 유용한 피드백을 제공하며, IAR Embedded Workbench와 철저하게 통합이 되어 있는 덕분에 사용도 아주 간단합니다. 

그 다음은 C-STAT를 알아보겠습니다. C-STAT는 정적 분석툴로, 특정한 코딩 규칙에서 벗어나 있는 사항을 탐지하는 용도를 지닙니다. 이 과정에서 해당 규칙에 대해 하나 또는 복수의 검사를 실시합니다. 점검 대상에는 MISRA C:2012, MISRA C++:2008 및 MISRA C:2004에서 정의하고 있는 규칙과 더불어, CWE 및 CERT C/C++ 에서 수록하고 있는 규칙을 검사하기 위해 대략 250 개의 항목을 검사합니다. C-RUN와 마찬가지로 C-STAT 역시 IAR Embedded Workbench 내 프로젝트 설정 화면에서 쉽게 설정할 수 있습니다. 

Project settings

C-RUN와는 반대로 C-STAT는 실제로 코드를 실행하지 않으면서 코드 상의 문제를 탐지해 내는 도구입니다.  이를 통해 프로그램 상의 실행 경로와는 동떨어져 있는 부분의 에러도 잡아 낼 수가 있습니다. 또한, 사용되는 데이터와도 무관하게 시험이 가능합니다. C-STAT은 버그 및 결함을 소프트웨어 개발 초기에 식별해 낼 수 있다는 장점이 있습니다. 실제로 개발 시작 직후부터 바로 검사가 가능합니다. 또한 시스템의 성능에 영향을 미치지도 않습니다. 

C/C++ 개발자를 대상으로 개발된 독립형의 정적 분석툴이 이미 시판되어 있지만, C-STAT의 장점을 꼽는다면 수고스러운 설정 없이 깔자마자 바로 사용할 수 있다는 점일 것입니다. 또한 당연히 IAR 시스템 내에서 효율적인 임베디드 프로그래밍을 위해 별도로 만들어 놓고 있는 C/C++ 언어 구조체는 모두 인식합니다. C-STAT를 일상 개발 업무의 일환으로 사용함으로써 코드가 중요 규칙에 부합되는지의 여부를 손쉽게 확인할 수가 있는 것입니다. 이를 통해 이후 테스트와 디버깅에 소요되는 시간과 자원을 절약할 수 있습니다. 

C-STAT는 IAR Embedded IDE 내에 완전히 통합되어 있으며, 일반 빌드 툴과 마찬가지로 사용이 간편합니다:

C-RUN main

탐지되는 각각의 에러에 대해서는 온라인 상에 도움말 시스템이 존재하며, F1을 누르면 규칙에 대한 설명과 더불어 적절한 코딩을 위한 코딩 예제도 보여줍니다:

C-STAT help

테스트 결과는 HTML 포맷으로 보고서를 생성할 수 있습니다:

C-STAT analysis report

결론 

이번 기사의 첫 항목, 기능 안전 표준으로 다시 돌아가서, 툴을 통해 어떻게 해당 기준을 충족할 수 있는지 짚어 보도로 하겠습니다. 

제7부 기법 및 조치의 개요 내 C.4.2 항에서는 다음과 같이 언어 서브셋(language subset)을 사용할 것을 요구하고 있습니다. 언어는 에러에 취약하거나, 분석이 어려운 프로그래밍 구조체를 판정하기 위해 검토를 받습니다. 이 과정에서는 정적 분석 방법 등을 사용합니다. 이어서 이러한 구조체를 배제하는 언어 서브셋을 정의합니다. 

여기에는 MISRA에서 정하고 있는 규칙 부합 여부를 확인하는 C-STAT가 제격입니다. 그리고 앞서 언급한 바와 같이 C/C++ 소프트웨어를 사용하여 SIL 2-4 등급의 인증 시스템을 개발하고자 하는 경우 반드시 정적 분석 툴을 사용해야 합니다. 

이어서 B.6.5 동적 분석 및 테스팅으로 넘어가 보겠습니다. 안전 관련 시스템의 동적 분석은 거의 작동이 가능한 상태의 시작품을 대상으로 입력 데이터를 제공해 안전 관련 시스템의 분석을 실시하는 것입니다. 여기서 입력하는 데이터는 설계 시 상정한 운영 환경에서 통상적으로 발생하는 내용으로 구성됩니다. 분석의 결과는 관측되는 안전 관련 시스템 반응이 요구되는 반응 조건을 충족할 경우에 합격으로 합니다. 안전 관련 시스템이 이러한 조건을 충족하지 못하는 경우 이는 반드시 시정해야 하며, 적절하게 작동이 가능하도록 재작성한 버전을 두고 분석을 다시 실시해야 합니다. 

비록 런타임 분석용의 C-RUN로는 안전 관련 시스템이 보이는 반응의 모든 측면을 점검하는 것은 절대 불가능하지만, 적어도 소프트웨어 부분에 있어서는 실제 에러는 물론, 잠재적인 에러도 잡아 내는 데에 아주 좋은 툴입니다. 여기서 중요한 것은 안전 개념은 반드시 시스템의 위험 장애 발생률과 연계되어야 하는 것이지, 소프트웨어 등 특정 구성물의 장애 발생률과 연계되는 것은 아니라는 점입니다. 

코드 품질을 관리하는 두 가지 툴, 즉 런타임의 C-RUN와 정적 분석의 C-STAT는 안전 관련 소프트웨어의 개발에 있어 매우 이용도가 높으며, 절대로 서로 경쟁관계에 있지 않습니다. 정적 분석은 런타임 분석을 적용하기 곤란한 분야에서 매우 강력한 힘을 발휘하며, 그 반대의 경우도 마찬가지입니다. 그러므로 C-RUN와 C-STAT는 진정으로 상호 보완적인 기술이라고 할 수가 있으며, 일상적인 개발 업무 과정의 자연스러운 일부가 될 수 있도록 설계되었다고 하겠습니다. 

죄송하지만, 당사 사이트에서는 Internet Explorer를 지원하지 않습니다.보다 편안한 사이트를 위해 Chrome, Edge, Firefox 등과 같은 최신 브라우저를 사용해 주시길 부탁드립니다.