シノプシス ソフトウェア・インテグリティ・グループはブラック・ダックになりました 詳細はこちら

close search bar

申し訳ありませんが、この言語ではまだご利用いただけません

close language selection

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

Dr. Dennis Kengo Oka

Jun 10, 2021 / 1 min read

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

機能安全規格ISO 26262や今後の対応が求められるサイバーセキュリティ規格ISO/SAE 21434などは、エンジニアリングプロセスに安全性とセキュリティを組み込む方法に関する自動車業界向けの指令を定めた規格です。具体的には、ソフトウェア開発に関しては、MISRA C、MISRA 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では、赤い建物の欠陥密度が高く、このファイルの優先度を高めてさらに詳細に分析する必要があることを示しています。さらに、視覚的な表現により、ホットスポット(違反が特に多いコード領域) を特定しやすくなり、ホットスポットの原因をさらに掘り下げて調査することができます。

3Dマップ

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

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

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

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

Continue Reading

トピックを探索する