技術情報

MATLAB を使用した自動運転アプリケーションの ISO 26262 ワークフロー: ガイドラインとベストプラクティス

著者 Lars Rosqvist, MathWorks


Simulink®およびStateflow®の使用は、自動車のECU向けのISO®26262 ソフトウェア開発において確立されています。自動運転アプリケーションにおいて、MATLAB®関数、Simulinkブロック、およびStateflowチャートを使用してソフトウェア設計を実装する傾向が高まっています。この記事では、MATLAB中心のワークフローを使用して ISO 26262 ソフトウェア標準[1]への準拠を検証するためのベスト プラクティスを紹介します。これらのベストプラクティスは、IEC Certification Kitに示されているモデルベースデザインを使用したISO 26262リファレンスワークフローを補完します。

推奨モデリングパターン

この記事では、 SimulinkモデルにMATLAB関数ブロックを組み込んだソフトウェア開発パターンを使用します (図 1)。最上位層のSimulinkモデルには、コード生成のためのすべての構成設定が含まれます。MATLAB関数ブロックは外部MATLAB関数を呼び出します。

外部MATLABコードを使用したモデリング パターンのMATLABスクリーンショット。

図 1. 外部MATLABコードを使用したパターンのモデリング。

このモデリングパターンは、 Simulinkモデルで利用可能なすべての検証および妥当性確認ツールを活用しながら、 MATLAB言語[2]を使用して機能を実装できるようにします。また、 MATLABで利用可能な広範な機能も活用します。たとえば、複雑な数学的機能を簡潔かつ簡潔に表現できるため、ADAS 開発は通常MATLABを使用して実装されます。

この記事では触れられていませんが、安全性が重要な製品開発環境でMATLAB[3]を使用するための代替方法もあります。

MATLAB ISO 26262 リファレンス ワークフロー:概要

前述したように、この記事で説明するワークフローは、IEC Certification Kitの ISO 26262 リファレンス ワークフローに基づいています (図 2)。

要件の作成、アーキテクチャ開発、モデリング、コード生成、コンパイラ、および各プロセスで使用される製品を含むシステム要件ワークフローを示す図。

図 2. IEC Certification Kit に指定されている検証および妥当性確認アクティビティ。

MATLABベースのワークフローには、次の検証および妥当性確認アクティビティに関する追加の推奨事項が含まれています。

  • 要件の作成とアーキテクチャの検証
  • 静的モデル解析
  • MIL テストとSIL または PIL back-to-back テスト
  • 静的コード解析
  • ドキュメンテーション

要件の作成とアーキテクチャの検証

ISO 26262 では、すべての要件が実装されテストされたことの証拠が要求されます。ISO 26262 リファレンス ワークフローでは、図 3 で強調表示されているアーキテクチャ検証および要件作成アクティビティがこの証拠を提供します。

図 2 と同じ図ですが、要件をリンクするアクティビティ (アーキテクチャ検証と要件作成) を強調しています。

図 3. 要件をリンクするアクティビティ。

要件をMATLABコードにリンク

Requirements Toolbox™を使用すると、要件をSimulinkブロックにリンクするのと同じ方法で、要件をMATLAB関数のコード行にリンクできます。違いは、不足している要件の既存のチェックでは外部MATLABコードがチェックされないことです。要件にリンクされていないMATLABコンテナーを検索するモデ​​ル アドバイザー チェックを実装することをお勧めします。コンテナーは通常、ファイルのサイズに応じて、外部MATLABファイルまたはMATLAB関数になります。

MATLABワークフロー用ベストプラクティス 

要件にリンクされていないMATLABコンテナーを検索するためのモデル アドバイザー チェックを実装します。

静的モデル解析

実装モデルの各コンポーネントは、読みやすさ、理解しやすさ、テストしやすさをチェックする必要があります (図 4)。Simulink Check™は、モデルのISO 26262およびMathWorks の高い整合性のガイドラインへの準拠を評価するために使用されます。

静的モデル解析アクティビティを強調した図 2 と同じ図。

図 4. IEC Certification Kit で指定されている静的モデル解析アクティビティ。

言語サブセット

MATLABでのプログラミングでは、いくつかの異なるツールボックスの関数を使用する場合があります。MATLAB は抽象度の高い強力な言語であるため、数行のコードで複雑な機能を開発できます。場合によっては、 MATLABコードの 1 行が C コードの複数行に分割され、生成されたコードをフル カバレッジで検証することが困難になることがあります。実装する機能がテスト可能であることを知っておく必要があります。ISO 26262 では、使用する関数の種類に基づいて言語サブセット (ISO 26262 の表 1) の使用が規定されています。

言語サブセットの要件を満たすには、次の手順を実行することをお勧めします。

  • 使用されているMATLAB関数を評価して、いずれの関数も高度な検証作業を必要としないことを確認します。モデル アドバイザーを使用すると、コードの複雑さが理由で推奨されない関数の使用を識別できます。
  • 推奨されていないMATLAB関数をより単純な実装に置き換えます。これらのより単純な関数は、追跡とテストが容易になります。

MATLABワークフロー用ベストプラクティス 

モデルをレビューする際には、モデル アドバイザー チェックhiml_0013によってフラグが立てられたMATLABの操作や関数を確認してください。可能であれば、他の関数に置き換えてください。

機能を置き換えることができない場合は、個別にテストする必要があります。

  • カバレッジの高い個別の単体テストを実行して機能を検証します。カバレッジが達成されたら、外部ユニット テストを参照してこれらの関数の使用を正当化します。

MATLABワークフロー用ベストプラクティス 

大量の C コードを生成するMATLAB操作または関数が特定され、置き換えることができない場合は、ユニット テストを使用して関数を外部でテストします。関数が使用される場所に関連する根拠を記述し、テスト結果が保存される場所にリンクします。

強力なデータ型

ISO 26262 では、すべての変数を厳密に型指定する必要があります。モデル アドバイザーは、 MATLAB関数ブロックへのインターフェイスを含む、厳密に型指定されたブロックについてSimulinkモデルをチェックしますが、外部MATLAB関数はチェックしません。このハードルを克服するには、すべてのMATLAB関数が厳密に型指定されていることを確認するチェックを記述します。特に、データ型とデータ次元を確認することが重要です。

MATLABワークフロー用ベストプラクティス 

モデル アドバイザー チェックを追加して、 MATLABコード内のすべての変数が厳密に型指定されていることを確認します。

MIL テストと SIL または PIL back-to-back テスト

続けて back-to-back (等価 ) テストを使用すると、ISO 26262 表 7「ソフトウェア ユニット検証の方法」で推奨されているように、生成されたコードがモデルと同じように動作することを証明できます。オブジェクト コードの場合はプロセッサ イン ザ ループ (PIL) テストを使用し、生成された C コードの場合はソフトウェア イン ザ ループ (SIL) テストを使用します (図 5)。テスト ケースは、モデルインザループ (MIL) テストで使用されるものと同じである必要があります。ユニット検証には SIL を使用します。統合テストでは、開発ツールチェーン全体を検証するために、ターゲット ハードウェアでも実行することをお勧めします。

図 2 と同じ図で、モデル検証アクティビティを強調表示しています。MIL テスト、PIL back-to-back テスト、および SIL back-to-back テスト。

図 5. IEC Certification Kit に指定されているモデル検証アクティビティ。

意図しない機能の防止

コード生成中に意図しない機能が追加されなかったことを証明するには、モデル テストとコード テストの両方でテスト カバレッジを測定します。テスト カバレッジは通常、 Simulink Coverage™ を使用した連続 back-to-back テストを使用して実行されます。ISO 26262 によれば、カバレッジは検証の完全性を評価し、ユニットテストの目的が達成されたことの証拠を提供するために使用されます。

ISO 26262 によれば、未達カバレッジのあるコードはレビューされ、正当化される必要があります。Simulinkブロックを使用して開発する場合、正当化をモデルに接続できます。つまり、正当化は検証実行間で保持されます。このオプションは外部MATLAB関数では使用できません。MATLAB関数の未達カバレッジを正当化するには、コードにカバレッジ フィルターを追加し、それをSimulink Test™ のテスト ハーネスまたはテスト ファイルに接続します。カバレッジ フィルター ファイルをテスト ファイルに接続することをお勧めします (図 6)。

カバレッジ フィルターのファイル名を強調表示したテスト ブラウザーのスクリーンショット。

図 6. テスト ファイルに接続されたカバレッジ フィルター。

MATLABワークフロー用ベストプラクティス 

テスト ファイルに接続された正当化フィルターを使用して、外部MATLABコード内の未達カバレッジの正当化を追跡します。

静的コード解析

ISO 26262 標準に記載されているように、静的解析には、ソース コード テキストまたはモデルを検索して既知の障害に一致するパターンを探したり、モデリングまたはコーディング ガイドラインに準拠しているかどうかを調べたりするアクティビティが含まれます。生成されたコードに対して静的コード解析が実行されます (図 7)。

図 2 と同じ図ですが、Polyspace による静的コード解析を強調表示しています。

図 7. IEC Certification Kitで指定されている静的コード解析アクティビティ。

MISRA C 準拠

MATLABから生成されたコードのMISRA® C準拠を評価するには、Polyspace Bug Finder™などの静的コード解析ツールを使用して、MISRA Cに準拠していないコードを検出し、結果を手動で調査してください。非準拠コードが組み込みMATLAB関数からのものである場合、次の 2 つのオプションがあります。

  • 組み込みのMATLAB関数を書き直した関数に置き換える
  • MISRA C警告の正当性を説明する

可能であれば、関数を置き換えることをお勧めします。置き換えられた関数が他の開発者によって使用されないようにするには、推奨されない関数に対するモデル アドバイザー チェックを実装します。

MATLABワークフロー用ベストプラクティス 

静的コード解析レポートを確認するときは、MISRA 警告が組み込みMATLAB関数から発生しているかどうかを確認します。これらの関数を置き換えることができる場合は、推奨されていない関数が使用された場合に警告するモデル アドバイザー チェックを追加します。そうでない場合は、静的コード解析レポートで問題を正当化します。

ドキュメンテーション

ISO 26262 への適合の証拠となる最終的な安全性ケースでは、要件から検証までの検証プロセスの各ステップを文書化する必要があります。ドキュメントには機能の設計説明を含める必要があります。図 8 は、設計の説明に含める必要があるアクティビティの一部を示しています。

要件の作成、アーキテクチャ開発、およびモデリングを強調した図 2 と同じ図。

図 8. 設計ドキュメントに含めるアクティビティ。

システム設計の説明

Simulink Report Generator™ には、定義済みのシステム設計レポート テンプレートが含まれています。このテンプレートは通常、 Simulinkで開発されたコンポーネントを文書化するのには適していますが、外部MATLAB関数はデフォルトのシステム設計の説明に含まれていないため、文書化には適していません。したがって、外部MATLABコードを含めるようにテンプレートをカスタマイズすることをお勧めします。

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 がdiff と merge をサポートしていないと考え、 SimulinkではなくMATLABを選択することがあります。Simulinkで作業している場合は、組み込みツールを使用して diff と merge を処理できます。チームが Git などの分散バージョン管理システムを使用している場合は、競合が発生した場合に 3 者間マージを実行できます。

[3] MATLAB R2023a では、 MATLAB Test™ がリリースされました。MATLAB Test は、 MATLABコードの動的テストの開発、実行、測定、管理のためのツールを提供します。これにより、開発者は高信頼性ソフトウェアを開発する際にMATLAB環境内に留まることができます。MATLAB Testと、規制対象アプリケーションの仕様を満たすことができ、IEC Certification Kit の一部となります。

著者について

Lars Rosqvist は、 MathWorksの自動車分野のシニア チーム リーダーです。彼は、さまざまな業界でモデルベース デザインとMATLABを使用して顧客をサポートしています。彼はTÜV SÜDの機能安全専門家として認定されており、数年にわたってISO 26262認証で顧客をサポートしてきました。MathWorksに入社する前、Lars は自動車業界でソフトウェア開発者として勤務し、気候制御システムの開発に携わっていました。Lars は、スウェーデンの Linköping 工科大学で応用物理学と電気工学の修士号を取得しました。

公開年 2024