ソフトウェア・インテグリティ

 

MISRA/AUTOSARコーディング規約に準拠する方法

MISRA/AUTOSARに準拠して車載ソフトウェアのコード品質、安全性、セキュリティを向上させるための実践的な手順をご紹介。

MISRA/AUTOSAR準拠のための手順 | シノプシス

最近の自動車業界では、自動運転システム、コネクティビティ・ユニット、デジタル・コックピット、インフォテインメント・システムの開発など、ユーザー・エクスペリエンスを向上させる機能が進歩しています。自動車業界で開発されているこうしたシステムに必要なソフトウェアの高度化・複雑化に伴い、安全でセキュアなソフトウェア開発の必要性が高まっています。

機能安全規格ISO 26262や今後の対応が求められるサイバーセキュリティ規格ISO/SAE 21434などは、エンジニアリング・プロセスに安全性とセキュリティを組み込む方法に関する自動車業界向けの指令を定めた規格です。具体的には、ソフトウェア開発に関しては、MISRA CMISRA C++AUTOSAR C++など、コードの品質、安全性、セキュリティを向上させるための開発者向けのコーディング・ガイドラインが定められています。

MISRA/AUTOSARコーディング・ガイドラインの概要

MISRA(Motor Industry Software Reliability Association)は、自動車、防衛、アビオニクス(航空電子機器)などの分野におけるセーフティ・クリティカルなシステムに焦点を当て、C/C++によるソフトウェア開発に関する一連のガイドラインと指令を規定しています。これらのガイドラインは、1998年に発行されたMISRA Cの初版で初めて公開されました。現在入手可能な最新バージョンはMISRA-C:2012(修正第1条/第2条を含む)です。多くの安全関連システムは、これらのコーディング・ガイドラインに従うことが義務付けられています。

ソフトウェア開発がAUTOSAR Adaptive Platform向けにC++を使用する方向に移行する動きを受けて、AUTOSAR(AUTomotive Open System ARchitecture)はAUTOSAR C++コーディング・ガイドラインと呼ばれる一連のガイドラインを発表しました。このコーディング・ガイドラインはMISRA-C++:2008ガイドラインの更新版と見なされ、現在MISRA C++委員会によって改訂が進められています。

2016年、MISRAはMISRA Compliance:2016を公開し、このドキュメントはさらに 2020年 に更新されました。このドキュメントはMISRA準拠の達成方法を示した正式なガイドであり、例えば、ガイドライン実施計画やガイドライン準拠の概要など、プロセスに関するコンプライアンスの成果物を定義しています。MISRA準拠は以前は任意でしたが、2020年2月に発表されたMISRA C:2012修正第2条では、MISRA準拠が必須になりました。

MISRA/AUTOSAR準拠の課題

デジタル・コックピット、インフォテインメント・システム、自動運転ユニット、コネクティビティ・ユニットなどの新しい分野の車載システムのソフトウェア開発には、通常、大規模なソフトウェア・コードベースが伴います。これらのコードベースには、自社開発コード、サードパーティ製コード、商用ソフトウェア、自動生成コード、オープンソース・ソフトウェア・コンポーネントなど、さまざまなソースからのソフトウェアが含まれている場合があります。MISRAまたはAUTOSARのコーディング・ガイドラインに従って開発されていないソフトウェア・コンポーネントが存在する可能性があるため、コードベース全体でコーディング規約への準拠を達成することは大きな課題です。

MISRAまたはAUTOSARコーディング・ガイドラインへの準拠のためにコードベース全体をスキャンするという単純な方法では、通常、膨大なコーディング違反が発生します。さらに大きな問題は、無関係な結果や優先度が低い結果が多すぎて、優先的に対処すべき問題の特定が困難になる可能性があります。MISRA/AUTOSARコーディング・ガイドラインに定められているチェック、結果の優先順位付け、進捗状況の追跡、現状と最優先課題の概要の取得を行うためのワークフローやプロセスが確立されていない組織の存在を考えると、さらに事態は深刻になります。

コンプライアンスを達成するためのワークフロー・ステップ

組織は、最優先する必要があるコードベースの箇所とコーディング・ガイドライン違反を明確に把握し、適切に対処することが重要です。そのためには、次のワークフローの手順に従うことをお勧めします。

1. ターゲット・ソフトウェアを分析する最初のステップとして、可能な限り、ターゲット・システムのThreat Analysis and Risk Assessment(TARA:脅威解析とリスク評価)とHazard Analysis and Risk Assessment(HARA:ハザード分析とリスクアセスメント)の結果を利用し、コードベース内のセキュリティ・クリティカルおよびセーフティ・クリティカルなコンポーネントを特定します。

2. セキュリティ・クリティカル/セーフティ・クリティカルなコンポーネントの特定結果に基づいて、コードベースをコンポーネントにセグメント化します。例:

        • 自社開発のセーフティ・クリティカルなコンポーネント
        • 非セーフティ・クリティカルな自動生成コンポーネント
        • サードパーティー製のセキュリティ・クリティカルなコンポーネント
        • 非セーフティ・クリティカルなオープンソース・コンポーネント
        • 非セーフティ・クリティカルな商用コンポーネント

図1は、このコードのセグメント化の簡略化した例を示しています。

コードベースをコンポーネントにセグメント化する | シノプシス
図1:ターゲット・システム・コードベースのコードのセグメント化

3. 組織は、コンポーネントの種類とリスク評価に基づいてMISRAまたはAUTOSARのコーディング・ガイドラインの適用対象となるコンポーネントに対するポリシーを定義することが不可欠です。たとえば、セーフティ・クリティカル/セキュリティ・クリティカルなコンポーネントに対しては特定のコーディング・ガイドラインの適用の優先順位を高め、非セーフティ・クリティカル/セキュリティ・クリティカルなコンポーネントに対しては一部のコーディング・ガイドラインの適用の優先順位を下げることが考えられます。

4. 静的コード解析ツールを使用する場合は、ステップ3で定義したポリシーに基づいて、この種のツールで検証可能なガイドラインに焦点を当ててツールを構成する必要があります。Coverity®静的アプリケーション・セキュリティ・テスト(SAST)ツールでは、ルールやフォルダーごとに異なる優先順位を設定できます。たとえば、ブロッキング・ポリシーを使用して、オープンソース・ソフトウェアの非セーフティ・クリティカル・コンポーネントを除外することができます。また、スコアリング・ポリシーを使用して、自社開発のセーフティ・クリティカル・コンポーネントに対するルールに高い優先度を割り当て、サードパーティー製のセキュリティ・クリティカル・コンポーネントに対しては同じルールに低い優先度を割り当てることができます。適用対象ルールの細かいチューニングとスコアリングによる優先順位の割り当てにより、組織は検出された最優先の課題に集中できます。これらの構成の詳細は、スプレッドシートを使って文書化し、除外するフォルダーや優先度のスコアリング値(1~9)などをまとめておくことができます。スコアのしきい値を定義し、フィルター処理で低いスコア値の結果を除外することができます。構成例を図2に示します。

スコアのしきい値 | シノプシス
図2: スプレッドシートで定義されたコンポーネントとルールの構成例

5. その後、ステップ4の構成を用いて、ターゲット・ソフトウェアをSASTツールでスキャンします。有効な結果を得るためには、個別のコーディング規格で定義されたルールを広範囲に網羅しているSASTツールを使用することが重要です。CoverityによるMISRA/AUTOSARコーディングスタンダードのサポート ターゲット・ソフトウェアをスキャンする際に、Coverityでこの構成を使用すると、該当する結果がポリシーに基づいたスコア付きで生成され、優先度の高い結果を特定する際に使用できます。

6. データ分析ツールを使用して結果を可視化することで、データを処理しやすくなります。例えば、データの分析機能と可視化機能を備えたLogilica Insightsツールなどを利用できます。

7. ステップ6で可視化された結果を用いれば、結果を分析しやすくなり、ホットスポットの特定やバーンダウン戦略の定義など、MISRA準拠のための効果的な戦略決定に役立ちます。SASTツールで生成されたMISRA準拠テストの結果を視覚的に表現するには、CodeCitiesと呼ばれる技術を使用して、ソフトウェア・リポジトリの3Dマップを作成します。図3に例を示します。建物の高さはファイルサイズ、建物の色はMISRA欠陥密度(コードサイズあたりの不具合件数)を示します。

図3では、赤い建物の欠陥密度が高く、このファイルの優先度を高めてさらに詳細に分析する必要があることを示しています。さらに、視覚的な表現により、ホットスポット(違反が特に多いコード領域) を特定しやすくなり、ホットスポットの原因をさらに掘り下げて調査することができます。

MISRA準拠に関するコードベースの欠陥密度を可視化する3Dマップ | シノプシス

図3:MISRA準拠に関するコードベースの欠陥密度を3Dマップで可視化

8. 最後に、ステップ7で定義したコンプライアンス戦略に従い、重大な違反を特定し、優先順位を付けて対処する必要があります。さらに、分析によって、一般的な違反箇所(違反が存在するソフトウェア・コンポーネントやファイルなど)を把握しやすくなります。結果をさらに詳細に分析することで、ステップ3および4に戻ってポリシーまたは構成を更新し、例えば、特定のルールや違反箇所を優先順位付けから除外したり、優先順位を下げたりすることができます。

コンプライアンス戦略を実践する

車載システムの開発が高度化・複雑化するにつれて、ソフトウェアのコンプライアンスの課題は重要性を増しています。システムに自社開発コード、サードパーティー製コード、商用ソフトウェア、オープンソース・ソフトウェア・コンポーネントが含まれる場合は特にこのことが言えます。自動車業界のお客様が課題を克服し、コーディング規約への準拠を実践するためには、適切なワークフローを策定し、適切な技術的対策を実施することが重要です。SASTツールでポリシーに基づく構成を使用し、結果を可視化することで、MISRA/AUTOSARへの準拠を達成するための妥当な戦略の定義を効果的に行い、これに従うことができます。

最先端の自動車セキュリティ・ホワイトペーパー Synopsys.jpeg