이 페이지는 기계 번역되었습니다.
번역 품질에 대한 1분 설문 조사에 참여해 주세요.
MATLAB을 사용한 자율주행 애플리케이션의 ISO 26262 워크플로: 지침 및 모범 사례
작성자: Lars Rosqvist, MathWorks
자동차 ECU에 대한 ISO® 26262 소프트웨어 개발에서 Simulink® 및 Stateflow®의 사용은 잘 정립되어 있습니다. 특히 자율주행 애플리케이션에서는 MATLAB® 함수 외에도 Simulink 블록 및 Stateflow 차트를 사용하여 소프트웨어 설계를 구현하는 경향이 증가하고 있습니다. 이 칼럼에서는 MATLAB 중심 워크플로를 사용한 ISO 26262 소프트웨어 표준 준수 여부 검증의 모범 사례를 제공합니다. [1] 이러한 모범 사례는 IEC Certification Kit에서 다루는 모델 기반 설계를 사용한 ISO 26262 참조 워크플로를 보완합니다.
권장 모델링 패턴
이 칼럼에서는 Simulink 모델에 MATLAB Function 블록이 통합된 소프트웨어 개발 패턴을 사용합니다. (그림 1) 최상위 계층 Simulink 모델은 코드 생성을 위한 모든 구성 설정을 전달합니다. MATLAB 함수 블록은 외부 MATLAB 함수를 호출합니다.
이 모델링 패턴은 MATLAB 언어를 사용하여 구현한 기능을 활성화하는 동시에 Simulink 모델에 사용할 수 있는 모든 검증 및 확인 툴을 활용합니다. [2] 또한 MATLAB에서 사용할 수 있는 광범위한 기능을 활용합니다. 예를 들어 ADAS 개발은 일반적으로 MATLAB을 사용하여 구현되는데, 복잡한 수학적 기능을 간결하고 우아한 방식으로 표현할 수 있기 때문입니다.
이 칼럼에서 언급되지는 않지만 안전 필수 제품 개발 환경에서 MATLAB [3]을 사용하는 다른 방법도 있습니다.
MATLAB ISO 26262 참조 워크플로: 개요
앞서 언급한 것처럼 이 칼럼에서 다루는 워크플로는 IEC Certification Kit의 ISO 26262 참조 워크플로(그림 2)를 기반으로 합니다.
MATLAB 기반 워크플로에는 다음 검증 및 확인 활동에 대한 추가 권장사항이 포함되어 있습니다.
- 요구사항 작성 및 아키텍처 검증
- 정적 모델 분석
- MIL 테스트 및 SIL 또는 PIL 백투백 테스트
- 정적 코드 분석
- 문서화
요구사항 작성 및 아키텍처 검증
ISO 26262에서는 모든 요구사항이 구현되고 테스트되었다는 증거를 요구합니다. ISO 26262 참조 워크플로에서는 그림 3에 강조 표시된 아키텍처 검증 및 요구사항 작성 활동이 이러한 증거를 제공합니다.
MATLAB 코드에 요구사항 연결
Requirements Toolbox™를 사용하면 요구사항을 Simulink 블록에 연결하는 것과 동일한 방식으로 MATLAB 함수의 코드 라인에 요구사항을 연결할 수 있습니다. 차이점은 누락된 요구사항에 대한 기존 검사에서는 외부 MATLAB 코드를 검사하지 않는다는 것입니다. 요구사항에 연결되지 않은 MATLAB 컨테이너를 찾는 모델 어드바이저 검사를 구현하는 것이 좋습니다. 컨테이너는 일반적으로 파일 크기에 따라 외부 MATLAB 파일 또는 MATLAB 함수가 됩니다.
정적 모델 분석
구현 모델에서 각 컴포넌트의 가독성, 이해성 및 테스트 용이성을 검사해야 합니다. (그림 4) Simulink Check™는 모델의 ISO 26262 및 MathWorks 고무결성 지침의 준수 여부를 평가하는 데 사용됩니다.
언어 서브셋
MATLAB에서의 프로그래밍은 여러 다른 툴박스 함수 사용을 수반할 수 있습니다. MATLAB는 추상화 수준이 높은 강력한 언어이므로 코드 몇 줄로 복잡한 기능을 개발할 수 있습니다. 어떤 경우에는 MATLAB 코드 한 줄로 인해 여러 줄의 C 코드가 생성되어 생성된 코드를 전체 커버리지에서 확인하기 어렵게 될 수도 있습니다. 구현하는 기능이 테스트하기 쉬워야 한다는 것을 알아야 합니다. ISO 26262는 사용 중인 함수 유형에 따라 언어 서브셋(ISO 26262의 Table 1)의 사용을 규정합니다.
언어 서브셋 요구사항을 충족하려면 다음 단계를 수행하는 것이 좋습니다.
- 사용된 MATLAB 함수를 평가하여 검증하기 힘든 함수가 없는지 확인하십시오. 모델 어드바이저를 사용하면 코드 복잡성으로 인해 권장되지 않는 함수의 사용을 식별할 수 있습니다.
- 권장되지 않는 MATLAB 함수를 더 간단한 구현으로 교체하십시오. 이러한 간단한 함수는 추적 및 테스트 과정이 더 용이합니다.
함수를 교체할 수 없는 경우 별도로 테스트해야 합니다.
- 높은 커버리지를 갖는 별도의 단위 테스트를 통해 함수를 검증할 수 있습니다. 커버리지가 달성되면 외부 단위 테스트를 참조하여 이러한 함수의 사용에 대한 정당화 사유를 추가할 수 있습니다.
강한 데이터형 지정
ISO 26262에서는 모든 변수에 강한 데이터형 지정을 요구합니다. 모델 어드바이저는 MATLAB Function 블록에 대한 인터페이스를 포함하여 블록에 대한 강한 데이터형 지정 여부를 Simulink 모델에서 검사하지만 외부 MATLAB 함수는 검사하지 않습니다. 이 장애물을 극복하려면 모든 MATLAB 함수에 대해 강한 데이터형 지정 여부를 검증하는 검사를 작성해야 합니다. 특히 데이터형과 데이터 차원을 검사하는 것이 중요합니다.
MIL 테스트 및 SIL 또는 PIL 백투백 테스트
백투백(동등성) 테스트를 통해 ISO 26262의 소프트웨어 단위 검증 방법(Table 7)에서 권장하는 대로 생성된 코드가 모델과 동일한 방식으로 작동하는지 증명할 수 있습니다. 오브젝트 코드의 경우 PIL(Processor-in-the-Loop) 테스트를 사용하고, 생성된 C 코드의 경우 SIL(Software-in-the-Loop)을 사용할 수 있습니다. (그림 5) 테스트 케이스는 MIL(Model-in-the-Loop) 테스트에 사용된 케이스와 동일해야 합니다. 단위 검증에는 SIL을 사용합니다. 통합 테스트의 경우 전체 개발 툴체인을 검증하기 위해 타겟 하드웨어에서도 실행하는 것이 좋습니다.
의도하지 않은 기능 방지
코드 생성 중에 의도치 않은 기능이 추가되지 않았는지 증명하려면 모델 테스트와 코드 테스트에서 테스트 커버리지를 측정할 수 있습니다. 테스트 커버리지는 일반적으로 Simulink Coverage™로 백투백 테스트를 사용하여 수행됩니다. ISO 26262에 따르면 커버리지는 검증의 완전성을 평가하고 단위 테스트 목표가 달성되었다는 증거를 제공하는 데 사용됩니다.
ISO 26262에 따르면 누락된 커버리지가 있는 코드는 검토하고 정당화 사유를 추가해야 합니다. Simulink 블록을 사용하여 개발할 때 정당화 사유를 모델에 연결할 수 있습니다. 이는 검증 실행 간에 정당화 사유가 유지된다는 의미입니다. 외부 MATLAB 함수에는 이 옵션을 사용할 수 없습니다. MATLAB 함수에 대한 누락된 커버리지를 정당화하려면 코드에 커버리지 필터를 추가한 다음 이를 Simulink Test™의 테스트 하네스 또는 테스트 파일에 연결할 수 있습니다. 우리의 권장사항은 커버리지 필터 파일을 테스트 파일에 연결하는 것입니다. (그림 6)
정적 코드 분석
ISO 26262 표준에 명시된 대로 정적 분석에는 소스 코드 텍스트 또는 모델에서 알려진 결함과 일치하는 패턴을 검색하거나 모델링 또는 코딩 지침을 준수하는 등의 활동이 포함됩니다. 정적 코드 분석은 생성된 코드에 대해 수행됩니다. (그림 7)
MISRA C 준수
MATLAB에서 생성된 코드에 대한 MISRA®C 준수 여부를 평가하려면, Polyspace Bug Finder™와 같은 정적 코드 분석기 툴을 사용하여 MISRA C 미준수 코드를 검출하고 결과를 직접 조사할 수 있습니다. 미준수 코드가 내장 MATLAB 함수에서 나온 경우 다음 두 가지 옵션이 있습니다.
- 내장 MATLAB 함수를 재작성한 함수로 교체
- MISRA C 경고에 대한 정당화 사유 작성
가능하다면 함수를 교체하는 것이 좋습니다. 대체된 함수를 다른 개발자가 사용하지 않도록 하려면 권장되지 않는 함수에 대한 모델 어드바이저 검사를 구현할 수 있습니다.
문서화
ISO 26262 적합성에 대한 증거를 제공하는 최종 안전 사례에서는 요구사항부터 검증에 이르는 검증 프로세스의 각 단계를 문서화해야 합니다. 문서에는 기능에 대한 설계 설명이 포함되어야 합니다. 그림 8은 설계 설명에 포함되어야 하는 활동을 강조 표시하고 있습니다.
시스템 설계 설명
Simulink Report Generator™에는 사전 정의된 시스템 설계 리포트 템플릿이 포함되어 있습니다. 이 템플릿은 일반적으로 Simulink에서 개발된 컴포넌트를 문서화하는 데 적합하지만 외부 MATLAB 함수는 기본 시스템 설계 설명에 포함되어 있지 않기 때문에 이를 문서화하는 데는 적합하지 않습니다. 따라서 외부 MATLAB 코드를 포함하도록 템플릿을 사용자 정의하기를 권장합니다.
SOTIF 고려 사항
ADAS와 같은 복잡한 시스템에서는 함수가 의도한 대로 동작하더라도 여전히 위험한 동작을 유발할 수 있습니다. ISO 21448 SOTIF(의도된 기능의 안전성) 표준 지침에 따라 추가 검증 및 확인 활동을 모델 기반 설계에 통합하여 이 문제를 해결할 수 있습니다. 테스트를 확장하고 알려지지 않은 활용 사례를 포함하려면 무작위 작동 조건 테스트를 추가하기를 권장합니다. 이러한 무작위 테스트는 시스템 요구사항과 비교하여 구현 모델 및 통합 오브젝트 코드의 동작을 검증해야 합니다.
IEC Certification Kit에는 SOTIF에 대한 지원이 포함되어 있습니다. SOTIF의 경우 Simulink와 MATLAB 워크플로 사이에는 큰 차이가 없습니다. 업데이트된 IEC Certification Kit에는 시스템 테스트에 Automated Driving Toolbox™를 사용하는 것에 대한 정보가 포함되어 있습니다.
요약
ISO 준수 소프트웨어 개발에서 전체 Simulink 기반 개발과 MATLAB 중심 워크플로 간의 차이는 크지 않습니다. 주요 차이점은 권장되지 않는 함수의 사용을 피해야 한다는 것입니다. Simulink Check의 ISO 26262 검사에는 이러한 MATLAB 함수를 식별하는 특화된 검사가 있으므로 MATLAB 구현이 고무결성 애플리케이션에 적합한 코드를 생성하는지 확인할 수 있습니다. ISO 26262에 MATLAB 중심 워크플로를 사용할 때 발생하는 다른 문제는 정당화 필터를 사용하거나 요구사항을 모델의 여러 수준에 연결하는 등의 간단한 우회적 해결 방법으로 처리할 수 있습니다.
[1] 이 칼럼의 권장 사항은 MATLAB R2024a를 기반으로 합니다. 다른 릴리스를 사용하고 있다면 MathWorks 담당자에게 문의하여 ISO 26262에 대한 MATLAB 및 Simulink 사용에 대해 알아보십시오.
[2]일부 개발자들이 Simulink에서 비교 및 병합 기능을 지원하지 않는다고 판단하여 Simulink 대신 MATLAB을 선택하는 경우가 있습니다. Simulink에서 작업하는 경우 내장 툴을 사용하여 비교 및 병합을 처리할 수 있습니다. 팀에서 Git과 같은 분산 버전 컨트롤 시스템을 사용하고 있다면 충돌이 발생할 경우 3방향 병합을 수행할 수 있습니다.
[3] MATLAB R2023a에서는 MATLAB Test™가 출시되었습니다. MATLAB Test는 MATLAB 코드의 동적 테스트를 개발하고 실행하며 측정하고 관리하는 툴을 제공합니다. 이를 통해 개발자는 MATLAB 환경에서 무결성 소프트웨어를 개발할 수 있습니다. MATLAB Test를 통해 규제 대상 애플리케이션의 사양을 충족할 수 있으며 이는 IEC Certification Kit의 일부입니다.
2024년 기고