기술 칼럼

ISO 26262 프로젝트에 Simulink를 활용하는 방법

작성자: Tom Erkkinen, MathWorks


자율 주행 자동차 혹은 기존의 안전 관련 임베디드 시스템을 개발하는 자동차 엔지니어들은 승용차 개발 기능 안전 표준인 ISO 26262 [1]의 까다로운 프로세스 요건을 효율적으로 달성할 방법을 모색하고 있습니다.

모든 미디어가 이에 주목하는 만큼 최신 코딩 방식 또는 버그 제거 툴 등 안전시스템 구현에 대한 많은 조언들이 있습니다. 하지만, 업계 전문가들이 오래전에 깨달은 바에 따르면 안전은 소프트웨어 및 그 코딩 방식보다는 시스템 및 그 요구 사항의 올바른 구현에 좌우됩니다[2].

연속 및 불연속 시간 시뮬레이션을 근간으로 하는 Simulink®의 모델 기반 설계(Model-Based Design)를 통해 전체 시스템을 설계하고 일찍부터 다양한 주행 조건 및 오류 시나리오 하에 테스트한 다음 주행시험로에서 시험을 실시하거나 fleet test를 진행할 수 있습니다. 이 방식은 툴 검증을 포함하여 ISO 26262에 명시된 프로세스 활동도 지원합니다. IEC Certification Kit에서 이러한 지원을 자세히 다루며 국제 인증 기구 TÜV SÜD의 툴 인증서 및 보고서도 제공합니다.

이 글에서는 TÜV SÜD에서 승인한 워크플로우에 따라 ISO 26262 프로젝트에 Simulink를 사용하는 방법을 소개합니다. ISO 26262 및 모델 기반 설계를 소개하고 다음 작업을 살펴봅니다.

  • 요구 사항 개발
  • 설계 모델링
  • 코드 생성
  • 설계 검증
  • 코드 검증
  • 툴 검증

ISO 26262와 모델 기반 설계

ISO 26262는 수동 설계 및 코드뿐 아니라 모델 기반 설계에 대한 지침을 포함하고 있습니다. 또한 모델 기반 설계의 몇 가지 이점에 대해서도 설명합니다.[3]

프로세스 전과정에 걸쳐모델을 활용하면 매우 일관성 있고 효율적인 개발이 가능합니다.

이 표준에서는 수학 모델링이 “광범위하게 사용”되는 가운데 모델링 툴이 소프트웨어 개발에 “준정형적(Semi-formal) 그래픽 방식”을 사용한다고 설명합니다. 이 표준에 따르면 모델링은 필요한 기능(임베디드 소프트웨어)을 구현할 뿐 아니라 전체 시스템 모델을 만들기 위한 실제 물리적 시스템(차량 모델 및 환경 모델)의 시뮬레이션도 지원합니다.

그러면 매우 복잡한 자동차 시스템도 상당한 세부 수준 및 우수한 계산 속도로 모델링하여 실제와 가깝게 동작을 시뮬레이션하는 것이 가능합니다. 차량/환경 모델은 개발 과정에서 점진적으로 실제 시스템 및 실제 환경으로 대체되지만, 그 기능 모델은 코드를 생성하여 제어 장치의 임베디드 소프트웨어를 구현하는 데 청사진의 역할을 할 수 있습니다. [3]

그림 1은 일반적인 Simulink 폐루프 시스템 모델입니다. 컨트롤러, 플랜트, 신호 처리기로 구성됩니다. ISO 26262에 따르면 시스템 설계 사양이 소프트웨어 개발의 입력이 되지만, 근본적으로 안전은 시스템 문제이므로 훨씬 더 중요한 의미를 갖습니다 [2].

입력, 프로세서, 플랜트가 있는 폐루프 시스템 설계 모델의 다이어그램. 출력 신호를 보여주는 플롯 창.

그림 1. Simulink 시스템 설계 모델.

시스템 설계가 점점 정교해지면서 프로덕션 코드를 작성할 만한 세부 수준의 소프트웨어 청사진이 됩니다. ISO 26262에서는 이 모델이 정교해지는 과정을 “모델 진화(model evolution)”라고 부릅니다[2].

현실적으로 기능 모델은 초기 사양 모델에서 설계 모델을 거쳐 구현 모델로 진화하고 최종 단계에서 코드로 자동 변환됩니다(모델 진화).

ISO 26262는 다양한 ASIL(Automotive Safety Integrity Level) 기반 활동을 위한 방식을 제안합니다. 본 가이드를 참조하여 활용 사례에 적합한 워크플로우를 마련할 수 있습니다. ISO 26262 프로세스의 개요를 그림 2에서 확인할 수 있습니다. 실선 화살표는 개발 활동을, 점선 화살표는 검증 및 확인 활동을 나타냅니다. ISO 26262에서 말하는 “모델 진화”는 줄임표(…)로 표시됩니다.

 검증 및 확인 활동을 보여주는 화살표로 객체 코드의 요구사항을 표시한 워크플로 단계 상자가 그려진 다이어그램.

그림 2. Simulink를 사용하는 ISO 26262 소프트웨어 개발 및 검증 프로세스.

요구 사항 개발

안전 관련 개발 프로세스의 시작은 기능 및 안정 요구 사항을 작성하는 것입니다. ISO 26262에서는 “소프트웨어 아키텍처 설계와 소프트웨어 안전 요구 사항 간의 양방향 추적 기능”을 활용하여 소프트웨어 아키텍처 설계를 검증하는 것을 권장합니다. 이를 위해 Requirements Toolbox™를 사용하여 모델, 테스트, 코드의 요구 사항을 작성하고 추적할 수 있습니다. Requirements Toolbox는 Microsoft® Word®, Microsoft Excel®, IBM® Rational® DOORS® 등 다른 툴에 대한 양방향 추적을 지원합니다. 요구 사항의 구현 및 검증 상태는 Requirements Toolbox에서 모니터링하고 관리합니다. 생성된 코드에 요구 사항 링크가 나타날 수 있습니다(그림 3).

 테이블 형식의 요구사항 창과 선택된 요구사항의 세부 정보를 보여주는 속성 인스펙터가 포함된 Simulink 다이어그램.

그림 3. Simulink의 요구 사항 사양.  

설계 모델링

“ISO 26262와 모델 기반 설계” 섹션에서 언급한 것처럼 ISO 26262에서는 기능 모델이 하이 레벨 실행 사양에서 프로덕션 코드 생성이 가능한 세부 설계로 진화하는 과정을 설명합니다. 일반적으로 다음과 같은 수정 및 개선이 이루어집니다.

  • Simulink Control Design™ 이산 툴을 사용하여 연속 시간(S 도메인)의 블록을 불연속 시간(Z 도메인)으로 변환
  • Fixed-Point Designer™를 사용하여 배정밀도(double precision) 데이터를 단정밀도(single precision) 또는 고정 소수점(Fixed-point)으로 변환
  • Stateflow®를 사용하여 진단, 모델 로직, 상태 기계, 스케줄링 추가

ISO 26262는 ASIL B ~ D에서 모델링 지침(Style guidelines)을 사용할 것을 강력히 권장하며, 이를 위해 MAAB Style Guidelines [4] 및 High Integrity Guidelines for ISO 26262(Simulink에 제공됨)를 사용할 수 있습니다. Simulink Check™는 두 지침의 검사를 자동화합니다. 편집 단계에서 기준에 부합하지 않는 블록의 삽입과 같은 문제에 플래그를 표시할 수 있습니다. 직접 지침 및 검사를 포함시킬 수도 있습니다.

코드 생성

ISO 26262에 따르면, “소프트웨어 유닛의 구현에는 소스 코드를 생성하고 객체 코드로 변환하는 것이 포함”됩니다. 이를 위해 Embedded Coder®를 사용하여 Simulink 모델에서 C, C++, AUTOSAR 코드를 생성할 수 있습니다. 이 코드는 MISRA C®:2012 자동 코드 지침 [5]에 부합할 수 있습니다. ISO 26262에서는 모델 기반 설계에 대한 코드 지침과 수동 코드에 대한 지침이 다를 수 있음을 지적하면서 그 예로 MISRA®를 듭니다.

IEC Certification Kit은 C, C++, AUTOSAR용 Embedded Coder(ASIL A-D 포함)를 위해 툴 검증을 지원합니다. 그 TÜV SÜD 인증 보고서에서는 이렇게 설명합니다.

Embedded Coder는 ISO 26262의 툴 지원 및 자동화 요구 사항을 충족합니다.

일반적으로 Embedded Coder는 다음 3가지 활용 사례 중 하나에 적용됩니다.

  1. 프로덕션 코드 생성에 쓰이는 모델을 위한 C 코드 생성
  2. 프로덕션 코드 생성에 쓰이는 모델을 위한 AUTOSAR 응용프로그램 소프트웨어 구성 요소의 C 코드 및 설명 파일 생성
  3. 프로덕션 코드 생성에 쓰이는 모델을 위한 C++ 코드 생성

Embedded Coder는 메모리 및 속도를 위해 코드를 최적화하는 옵션을 제공합니다. 또한 SIMD® for ARM®, Intel® 등 하드웨어 액셀러레이터를 활용하는 프로세서별 최적화를 생성할 수도 있습니다. ISO 26262에 기술된 대로 모델-코드 PIL(processor-in-the-loop) 테스트를 사용하여 최적화 코드가 규정된 허용오차 범위에서 시뮬레이션 결과와 일치하는지 확인할 수 있습니다.

생성된 소스 코드에서 컴파일러 및 링커를 사용하여 실행 객체 코드를 만듭니다. IEC Certification Kit의 워크플로우에서는 코더, 컴파일러, 프로세서의 최적화가 가능합니다. 이는 PIL 테스트가 실행 객체 코드의 검증에 쓰이는 경우 대규모 프로덕션 ECU에 필수적입니다.

설계 검증

ISO 26262는 유닛 및 통합 레벨 활동을 포함하여 소프트웨어 설계 및 구현을 검증하는 여러 정적/동적 방식을 권장합니다. 모델 기반 설계에 대해서는 “소프트웨어 개발 프로세스에 따라 테스트 객체가 이 모델에서 파생된 코드이거나 모델 자체가 될 수 있다”고 기술합니다.

Simulink Test™는 Simulink 내에서 ISO 26262 확인 및 검증 활동을 위한 프레임워크를 제공합니다. 모델 및 모델로부터 생성된 코드를 위한 시스템 차원의 시뮬레이션 기반 테스트를 개발, 관리, 실행하는 데 이를 활용할 수 있습니다. 그림 4는 테스트 시퀀스 및 평가 블록의 예입니다.

테스트 시나리오의 단계가 표시된 테스트 시퀀스 편집기 창과 Test Sequence 블록 및 Test Assessment 블록이 표시된 테스트 하네스 창.

그림 4: 복잡한 테스트 시나리오를 모델링하고 작성하는 Simulink Test 시퀀스 및 평가 블록.

IEC Certification Kit의 TÜV SÜD 보고서(ISO 26262용)에서는 확인 및 검증 자동화에서 Simulink Test의 역할을 명확하게 정의합니다.

[Simulink Test에서] Simulink 모델 및 생성된 코드를 확인하고 검증하는 핵심 활동을 자동화할 수 있습니다. 다음 활용 사례는 Functional Safety Standards ISO 26262에 따른 소프트웨어 개발 프로세스에 필요한 활동을 보여줍니다.

  • Simulink 모델 테스트 개발 및 실행
  • 모델과 코어 간 연속(back-to-back) 테스트를 위한 테스트 개발 및 실행
  • 테스트 결과 평가
  • 테스트 보고서 생성
  • 요구 사항 및 테스트 케이스 간 추적 가능성 확인

ISO 26262에서는 구조 범위 분석을 통해 테스트가 완전한지 확인하고 의도하지 않은 기능을 찾아낼 것을 권장합니다. 엄밀성을 높이는 3가지 방법을 제시하는데, 마지막 2가지가 ASIL-D에 강력히 권장됩니다.

  • 구문 범위 (Statement coverage)
  • 분기 범위 (Branch coverage)
  • MC/DC 범위 (MC/DC coverage)

이 표준에 따르면, 모델 기반 설계의 경우 “모델 레벨에서 구조 범위 분석을 수행할 수 있는데, 모델에 대해 유사 구조 범위 (analogous structural coverage)메트릭을 사용하면 됩니다.” 또한 구조 범위로 충분하지 않을 경우 “추가 테스트 케이스를 지정하거나 근거를 제시해야” 합니다.

Simulink Coverage™는 모델 및 생성된 코드에 대해 구조 범위를 제공하며, Simulink Test를 통한 테스트 실행을 위해 손쉽게 활성화할 수 있습니다. 모델 범위로 충분하지 않을 경우 Simulink Design Verifier™를 사용하여 MC/DC를 포함한 필수 범위를 다룰 추가 테스트 케이스를 자동 생성할 수 있습니다 또한 Simulink Check는 복잡성을 줄이기 위해 모델을 재작성합니다. 메트릭 대시보드가 있어 프로젝트 품질을 평가하고 ISO 26262의 “소프트웨어 구성 요소 및 인터페이스의 낮은 복잡도 및 제한된 크기 적용” 요건을 충족할 수 있습니다(그림 5).

왼쪽에는 아티팩트 목록이, 오른쪽에는 요구사항 기반 테스트 메트릭이 표시된 위젯이 있는 대시보드의 스크린샷.

그림 5. 모델 지침 준수 여부를 보여주는 메트릭 대시보드.

IEC Certification Kit은 Simulink Check, Simulink Coverage(모델 및 코드 범위 포함), Simulink Design Verifier, Simulink Test를 위한 TÜV SÜD 인증서 및 보고서를 제공하면서 툴 검증을 지원합니다.

코드 검증

ISO 26262는 소프트웨어 설계 및 구현을 검증할 수 있도록 몇 가지 옵션을 제공합니다. IEC Certification Kit에서 설명하는 한 가지 방법을 따르면, 제한된 추적 검토를 통해 생성된 코드에서 의도하지 않은 기능(예: 블록 또는 신호가 추적되지 않는 코드)을 찾아낼 수 있습니다. 이 킷은 이 용도의 추적 행렬(trace matrix)을 자동으로 생성합니다. 또는 SIL(software-in-the-loop) 테스트 과정에서 Simulink Coverage를 사용하여 모델 범위와 코드 범위를 비교하거나 Simulink Code Inspector™를 사용할 수 있습니다.

마지막으로, Polyspace Bug Finder™를 사용하여 MISRA 준수 여부를 확인할 수 있습니다. MISRA 검사 및 코드 범위 분석은 프로젝트에 생성된 코드 및 수작업 코드 소프트웨어가 혼합된 경우 특히 유용합니다. 더 엄밀하게 Polyspace Code Prover™를 사용하여 0으로 나누기와 같은 런타임 오류가 없는지 확인할 수 있습니다.

IEC Certification Kit은 Polyspace® 제품에 대한 TÜV SÜD 인증서 및 보고서로 툴 검증을 지원합니다.

실행 코드를 컴파일하고 생성한 다음 PIL 테스트를 활용하여 타깃 프로세서에서 실행 중인 코드에 대해 모델 테스트를 재사용할 수 있습니다(그림 6).

전기 모터에 연결된 소형 회로 기판과 연결해 놓은 랩탑.

그림 6. 임베디드 프로세서에 대한 PIL 예시.

ISO 26262에서는 ASIL C 및 D에 대한 연속(back-to-back) 테스트를 강력히 권장합니다. 이 표준에 따르면 대표성 있는 타깃 하드웨어 환경에서 테스트하는 것이 중요하며 테스트 환경과 하드웨어 환경의 차이점을 인식해야 합니다.

테스트 환경과 타깃 환경의 차이점은 소스 코드 또는 객체 코드에서 비롯될 수 있습니다. 이를테면 프로세서의 데이터 단어(data word) 및 주소 단어(address word)의 비트폭(bit widths)가 다를 수 있습니다.

그러나 모든 컴퓨터 과학자가 알고 있는 것처럼[6] 여러 플랫폼 사이에서 특히 부동 소수점 데이터의 경우 여러 가지 이유로 수치 차이가 발생할 수 있습니다. 사소하게 시작했지만 축적되어 커질 수도 있는데, 특히 피드백 제어 시스템에서 그렇습니다. 따라서 ISO 26262는 다양한 루프 내(in-the-loop) 연속(back-to-back) 테스트 방식을 제안합니다.

소프트웨어 유닛 테스트는 다음과 같은 다양한 환경에서 실행할 수 있습니다.

—MIL(model-in-the-loop) 테스트
—SIL(software-in-the-loop) 테스트
—PIL(processor-in-the-loop) 테스트
—HIL(hardware-in-the-loop) 테스트

Simulink Test는 Embedded Coder로 SIL과 PIL을, Simulink Real-Time™으로 HIL을 자동화하는 등 여러 루프 내 테스트를 자동화합니다. 또한 Simulink Coverage에서 범위 메트릭을 사용하여 합격/불합격 보고서를 제공합니다.

툴 검증

ISO 26262-8에서는 버전 관리, 구성 관리, 문서화 등 추가 프로세스를 설명합니다. 이 프로세스는 Simulink Projects, Simulink 모델 차별화 및 병합, Simulink Report Generator™에서 각각 지원합니다.

이 표준에서는 툴 검증에 대한 지침도 제공합니다. 툴 공급업체가 각자의 툴을 검증하는 것은 허용하지 않으며, 사용자가 해당 프로젝트에 맞게 툴을 검증해야 합니다. IEC Certification Kit은 일반 활용 사례, 참조 워크플로우, 툴 분류 분석, 소프트웨어 툴 기술 문서, 툴 검증 보고서, 검증 테스트를 제공하면서 효과적으로 툴을 사전 검증합니다.

TÜV SÜD에서 MathWorks 툴 개발 및 품질 프로세스뿐 아니라 버그 보고 기능까지 검토하고 감사하며 각 제품 릴리스의 결과를 인증합니다. IEC Certification Kit에 이러한 TÜV SÜD 인증서 및 보고서가 포함되어 있으며, 적합한 확인 및 검증 워크플로우를 따를 필요성을 전제로 합니다. 이 킷은 이 글에서 살펴본 것과 같은 일반적인 활용 사례를 기반으로 한 참조 워크플로우를 제공합니다.

ISO 26262 목표를 Simulink에서 지원하는 기능과 연결하는 등 더 세부적인 정보도 제공합니다(그림 7).

 ISO 26262 목표를 모델 기반 설계 툴에 매핑한 내용을 보여주는 표.

그림 7. IEC Certification Kit의 ISO 26262-Simulink 연결 내용 발췌.

검증된 툴을 사용하더라도 해당 소프트웨어 또는 시스템의 안전이 보장되는 것은 아닙니다.

A table showing software design notations and ASIL levels.

Figure 8. Excerpt from ISO 26262-6:2018 showing suitable software design notations.

2018년 12월에 출시한 ISO 26262의 두 번째 에디션을 통해 Simulink와 Stateflow가 소프트웨어 아키텍처, 소프트웨어 단위 설계 분야 그리고 자동 코드 생성의 기초에 적합하다는 것을 알 수 있습니다(그림 8). 

소프트웨어 설계 표기와 ASIL 수준을 보여주는 표.

그림 8. 26262-6:2018에서 발췌한 내용으로서 적합한 소프트웨어 설계 분야를 선보입니다.

검증된 툴을 사용하더라도 해당 소프트웨어 또는 시스템의 안전이 보장되는 것은 아닙니다.

ISO 26262

ISO 26262는 승용차를 위한 국제 기능 안전 표준입니다 [1]. 안전 관련 전기/전자(E/E) 시스템의 오작동으로 인해 발생할 수 있는 위험을 다룹니다. ASIL(Automotive Safety Integrity Level)을 위험 분류 단계(A ~ D)로 사용하며, ASIL D가 최고 무결성 단계입니다. 이 표준은 9개의 규범 파트가 있으며 10번째 파트에 지침이 수록되어 있습니다. 각 파트는 별도의 문서로 제공됩니다. ISO 26262는 목표를 기반으로 하고 규범의 성격을 띠지 않지만, 수백 페이지의 지침을 포함하고 있습니다. 파트 4, 6, 8은 시스템 [ISO 26262-4], 소프트웨어 [ISO 26262-6], 툴 검증 [ISO 26262-8]을 각각 다룹니다.

ISO 26262 초판은 2011년에 발표되었습니다. 2018년에 제2판이 나올 예정입니다(ISO 26262:2018). 제2판은 오토바이, 트럭, 버스 등 다른 차량 유형을 지원합니다. 또한 반도체에 대한 새로운 지침이 수록될 것입니다.

2022년 기고