安全なソフトウエア開発に向けて~静的解析ツールを利用したMISRA C:2012への準拠~

機能安全規格IEC 61508-7 (Table C.1)にて、C言語は単体で使用することは推奨されておらず、コーディング標準と静的解析ツールを使用したうえでのC言語が強く推奨されています。言語サブセットには名指しで明示された推奨はないものの、「業界で認められたコーディングスタンダードルールセットの推進」が定義されており、広く知られている、かつ機能安全規格のいくつかの要求を満たすことができるといった理由からMISRA-Cのチェックがよく採用されています。これはIEC 61508から派生した多くの機能安全規格に対しても同じことが言えます。

MISRAとは

Motor Industry Software Reliability Association(MISRA)とは、英国に本拠地を置く自動車関連ソフトウェアの業界団体であり、セーフティ クリティカルなシステムのためのソフトウェア コーディングのガイドラインを発行しています。MISRAの主な目的は、車載ソフトウェアの開発において、C言語の実用性を確保しつつ、安全性、信頼性、移植性を確保したプログラミング手法を促進することです。しかし、今日では車載ソフトウェアに留まらず、航空システムや医療システムなどの安全性が不可欠である幅広い産業で適用されています。

MISRAを遵守する理由

セーフティ クリティカルなシステムの開発は、重大なリスクを抱えています。たとえば、次のようなリスクが存在します。

  • 市場にバグが流出することによるブランドイメージの失墜
  • ソフトウェア障害に起因したリコール、損害賠償などのコスト
  • 人命の喪失

MISRAの遵守は、必ずしもシステムの安全性を保証するものではありません。プロジェクトに応じたソフトウェアの安全性を確保するために、そのプロジェクトに対する最善のフレームワークを決定する必要があります。しかし、MISRAは前述の目的のための優れたガイドラインを提供しており、フレームワークを定義する際にMISRAを考慮するべきです。

MISRA C:2012の変更点

MISRA C:2012の主な変更点を記述します。

C99への対応

以前はC90規格にしか対応していませんでしたが、MISRA C:2012ではC99規格に対応しています。これにより、MISRAに準拠しつつ、C99規格の機能を利用できるようになりました。

ツール活用の強化

Decidability(決定可能性)、Scope of analysis(ルールの適合・非適合を判定するために解析する範囲)が明示されています。これにより、ツールを活用したチェックがやりやすくなっています。

Decidability

Decidabilityとは、どのような場面においても、ソースコードがルールに適合しているか非適合であるかを、ソースコードの静的解析のみで判断できるか否かを示します。

つまり、Decidable(決定可能)である場合、静的解析ツールでルールの適合・非適合を決定できることを意味します。

仮に欠陥のない静的解析ツールが存在した場合、次のことが言えます。

  • 違反がレポートされた場合、実際に違反が存在することを意味する
  • 違反がレポートされなかった場合、解析対象のコードに違反が存在しないことを意味する

Undecidable(決定不能)である場合、静的解析ツールで適合・非適合を完全に決定することはできません。しかし、非適合の可能性をレポートすることは可能です。Undecidableなルールについては、次のことが言えます。

  • 違反がレポートされたとしても、実際に違反が存在しているとは限らない
  • 違反がレポートされなかったとしても、解析対象のコードに違反が存在しないとは限らない

Scope of analysis

Scope of analysisは、ルールの適合・非適合を判断するために解析しなければならないコードの範囲を示します。Single Translation Unit(単一の翻訳単位)、System(システム全体)のいずれかが明示されています。

分類の追加

MISRA C:2012では、Directives(指令)というガイドラインが追加されました。Directivesとは、厳密にはソースコード以外の外部情報を分析する必要があるガイドラインです。したがって、Directivesについては全てUndecidableであると言えるため、Decidabilityの分類は適用されません。

Directivesに適合しているか否かの判断は、使用しているコンパイラやプロジェクトの規則、作成したドキュメントなどの追加情報が必要となります。しかし、Directivesに適合しているかの判断を部分的にでも自動化するために、ツールでできることは沢山あります。

また、これまでの分類であるRequired(必要)、Advisory(推奨)に加え、Mandatory(必須)という分類が追加されています。それぞれの分類について、以下に説明を記述します。

  • Mandatory:ガイドラインからの逸脱は認められない。MISRA C:2012に適合するためには、本分類のガイドラインに適合しなければならない。
  • Required :ガイドラインに従う必要があるが、ガイドラインに準拠しないことを説明する逸脱説明書があれば、逸脱が認められている。
  • Advisory :ガイドラインは推奨されているが、準拠は必須ではない。逸脱する場合も逸脱説明書は不要である。

まとめ:C++testによるMISRA準拠チェックの自動化

テクマトリックス株式会社が販売しているC言語/C++言語対応 静的解析・単体テストツール「C++test」は、米国 Parasoft 社が開発するテストツールです。IEC 61508などの認証機関であるTÜV SÜDの認証を取得しており、自動車産業でも数多くの利用実績を誇ります。Parasoft社は、組み込みソフトウェアにおける品質やセキュリティ対策への関心の高まりを重視し、MISRA Cを始めとするさまざまな最新コーディング規約チェックにいち早く対応しています。

「C++test」は、MISRA C:2012(Amendment1および2を含む)に対応したソースコード静的解析用ルールセットが搭載されています。MISRA C:2012で定義される全175個のガイドラインのうち、静的解析ツールによって機械的に検出できない4項目を除く全ての項目を自動的にチェックすることができます。

MISRA C:2012、および MISRA C:2012 Amendment 1および2のツールによるチェックの自動化に興味を持っていただけましたら、C++testの評価版などもご用意しておりますので、ぜひ、テクマトリックスにお問い合わせください。

C++test製品に関する情報

C++test体験版

作成:テクマトリックス株式会社