기능적 안전 요구 사항이 적용되는 프로젝트를 시작하려는 사용자의 경우, 사용하시는 툴 역시 안전 관련 개발 용도로 적합 판정을 받은 것을 사용해야 한다는 것도 아실 것입니다. 개발 툴에 대한 구체적인 적합 판정 요건은 적용하고자 하는 표준의 종류에 따라 달라집니다. 또한 제조 상품이 지니는 중요성에 따라서도 좌우되는 측면이 있습니다.
기능 안전은 오늘날 많은 임베디드 시스템, 특히 자동차, 산업 자동화 및 의료와 같은 분야에서 가장 중요한 기능 중 하나입니다.
기능적 안전 요구 사항이 적용되는 프로젝트를 시작하시려는 사용자의 경우, 사용하시는 툴 역시 안전 관련 개발 용도로 적합 판정을 받은 것을 사용해야 한다는 것도 아실 것입니다.
개발 툴에 대한 구체적인 적합 판정 요건은 적용하고자 하는 표준의 종류에 따라 달라집니다. 또한 제조 상품이 지니는 중요성에 따라서도 좌우되는 측면이 있습니다. 뿐만 아니라 툴의 성격에 따라서도 좌우되는 부분이 있습니다. 예를 들어 제품 내에 들어가는 코드를 생성하는 컴파일러의 경우는 특히 소스코드 측정 규준 도구에 비해 적합 판정을 받는 것이 더 까다롭습니다. 또 소스코드 측정 규준 도구의 경우는 요건 관리 시스템이나 버전 관리 도구보다 더 까다롭습니다.
이렇게 여러 가지 표준은 각각 안전 무결성에 대한 정의가 달리 적용됩니다. 즉, 제품이 지니는 중요성의 수준이 다른 것입니다. 또한 툴이 정확하게 어떻게 정의되는가에 있어서도 차이가 있습니다. 예를 들어 IEC 61508의 경우 컴파일러와 같은 툴은 가급적 인증을 받도록 하고 있지만, 인증이라는 것이 정확히 어떤 것을 의미하는지는 언급하고 있지 않습니다.
그리고 툴이 사양 및 기술 문서 상의 요건에 맞는지를 검증해야 한다는 내용도 기술하고 있습니다. 이것은 최악의 경우, 시험의 적절한 증거를 제시하지 못하는 경우, 사용자의 프로젝트 내에서 툴 전체에 대한 시험을 진행해야 할 수도 있음을 의미합니다. 한 편, 툴에 대한 의존도를 정의하기 위한 평가도 진행해야 합니다.
여기서 또 고려 및 평가를 필요로 하는 부분은 바로 툴의 공급사가 툴에 대해 얼마나 지원을 해 줄 수 있는가 하는 것입니다. 가급적, 안전 핵심 제품의 전체 생애 주기에 걸쳐 지원이 가능한 곳을 이용하는 것이 바람직합니다.
사전 인증된 솔루션을 선택하면 시간과 비용을 모두 절약할 수 있으므로 코드와 애플리케이션의 기능에 더 집중할 수 있습니다. IAR Embedded Workbench 및 IAR 빌드 도구의 인증된 버전을 제공합니다.
기능 안전 표준 및 코드 분석
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 프로젝트 설정 화면에서 쉽게 설정할 수 있습니다.
런타임 분석툴은 일반적으로 허위 양성 판정률이 낮으며, 이는 C-RUN도 예외가 아닙니다. 바꾸어 말하면, C-RUN에서 버그가 발견되는 경우 이는 실제 버그일 확률이 높습니다. 실제 코드가 대상 시스템 상에서 실행되는 과정에서 실시한 분석한 결과이기 때문입니다.
C-RUN은 애플리케이션 상태에 대한 정보 일체를 조회할 수 있으며, 실제로 발생한 버그 관련 사항을 보고합니다. 하지만, 아래에서 보이는 바와 같이 이와는 별도로 C-SPY 메시지 규칙(Message Rule)을 적절히 설정하면, 실행 중에는 에러가 발생해도 그냥 지나치도록 할 수 있습니다.
그렇지만 이런 런타임 분석에도 단점이 존재합니다. 먼저 문제가 발견되는 시점이 이와 같은 방식으로 개발이 한창 진행된 다음이라는 문제점이 있습니다. 이는 분석툴 자체가 코드가 실행가능한 코드의 실행을 요하기 때문입니다. 뿐만 아니라 분석 자체도 애플리케이션 중에서 실제로 실행되는 부분으로 한정된다는 단점이 있습니다.
만일 전체 코드를 검사할 수 있도록 애플리케이션이 필요로 하는 자극을 모두 발동시킬 수가 없는 경우, 테스트를 거치지 않은 코드가 남아 있게 됩니다. 그럼에도 불구하고, 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 내 프로젝트 설정 화면에서 쉽게 설정할 수 있습니다.
C-RUN과는 반대로 C-STAT은 실제로 코드를 실행하지 않으면서 코드 상의 문제를 탐지해 내는 도구입니다. 이를 통해 프로그램 상의 실행 경로와는 동떨어져 있는 부분의 에러도 잡아 낼 수가 있습니다. 또한, 사용되는 데이터와도 무관하게 시험이 가능합니다. C-STAT은 버그 및 결함을 소프트웨어 개발 초기에 식별해 낼 수 있다는 장점이 있습니다. 실제로 개발 시작 직후부터 바로 검사가 가능합니다. 또한 시스템의 성능에 영향 을 미치지도 않습니다.
C/C++ 개발자를 대상으로 개발된 독립형의 정적 분석 툴이 이미 시판되어 있지만, C-STAT의 장점을 꼽는다면 수고스러운 설정 없이 깔자마자 바로 사용할 수 있다는 점일 것입니다. 또한 당연히 IAR 시스템 내에서 효율적인 임베디드 프로그래밍을 위해 별도로 만들어 놓고 있는 C/C++ 언어 구조체는 모두 인식합니다. C-STAT을 일상 개발 업무의 일환으로 사용함으로써 코드가 중요 규칙에 부합되는지의 여부를 손쉽게 확인할 수가 있는 것입니다. 이를 통해 이후 테스트와 디버깅에 소요되는 시간과 자원을 절약할 수 있습니다.
C-STAT은 IAR Embedded IDE 내에 완전히 통합되어 있으며, 일반 빌드 툴과 마찬가지로 사용이 간편합니다. 탐지되는 각각의 에러에 대해서는 온라인 상에 도움말 시스템이 존재하며, F1을 누르면 규칙에 대한 설명과 더불어 적절한 코딩을 위한 코딩 예제도 보여줍니다.
테스트 결과는 HTML 포맷으로 보고서를 생성할 수 있습니다.
TÜV SÜD 인증
IAR Embedded Workbench는 임베디드 소프트웨어 개발을 위한 단일 도구상자를 제공하는 완전한 C/C++ 컴파일러 및 디버거 툴체인입니다. 안전 인증 인증 기관인 TÜV SÜD로부터 언급된 표준에 따라 안전 관련 애플리케이션 개발 자격이 있음을 인증받았습니다. IAR Embedded Workbench, Functional Safety 버전을 개발 도구로 선택하면 도구 개발 프로세스를 직접 평가 할 필요가 없으며 자체 테스트를 통해 언어 표준 준수를 입증하지 않아도 됩니다. 이것은 이미 TÜV SÜD에서 처리했습니다. IAR Build Tools의 Functional Safety 에디션에도 동일하게 적용됩니다.
인증된 버전은 포함된 TÜV SÜD의 기능 안전 인증서, TÜV SÜD의 안전 보고서 및 안전 가이드 덕분에 애플리케이션 검증을 간소화할 수 있습니다.
결론
이번 기사의 첫 항목, 기능 안전 표준으로 다시 돌아가서, 툴을 통해 어떻게 해당 기준을 충족할 수 있는지 짚어 보도로 하겠습니다.
제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은 진정으로 상호 보완적인 기술이라고 할 수가 있으며, 일상적인 개발 업무 과정의 자연스러운 일부가 될 수 있도록 설계되었다고 하겠습니다.
<저작권자(c)스마트앤컴퍼니. 무단전재-재배포금지>