MISRA 規格コーディングルールの最新バージョンは MISRA C:2012 です。さまざまな産業分野のソフトウェア コミュニティにおいて組み込みシステムに広く採用されている MISRA C:2004 の後継です。

簡単に言うと、MISRA のコーディングルールには、組み込みシステムのプログラミング向けに信頼性のある C 言語のサブセットが定義されています。この規格への準拠は、もともと認証要件をきっかけに実行されていましたが、今ではこの規格は広く受け入れられ、複雑なソフトウェアの開発において責任およびリスクの軽減に役立っています。

MISRA C:2004 のガイドラインは、かつて一般的だった C プログラミング言語の C90 バージョンに基づいています。しかし、2004 の規格がリリースされてから多くの変化がありました。現在では新しい C99 および C11 のバージョンがあり、新機能により C 言語は拡張されています。

開発者がよりシンプルで、より効率的なコードを記述できた C90 バージョンのいくつかの便利な機能も、MISRA C:2004 規格では認められなくなりました。このことは信頼性または安全性のないプログラミング構文を防ぐのには役立ちますが、制約を増やすことにもなりました。

良い例が MISRA C:2004 Rule 17.4 です。これはポインター演算の形式を配列のインデックス付けのみに制限した必要ルールです。つまり、++ および - - 演算子を用いるポインター演算を使用することは、規格に違反することを意味しました。新しい MISRA C:2012 の規格では、これは勧告ルールに変更され、++ および - - 演算子をポインターで使用できるようルールが緩和されました。

MISRA C:2004 のルール 17.4 は、ポインター演算を配列のインデックス付けに制限しています。
MISRA C:2004 のルール 17.4 は、ポインター演算を配列のインデックス付けに制限しています。
MISRA C:2012 ではポインター演算の制限が取り除かれ、コーディングルール違反はなくなりました。
MISRA C:2012 ではポインター演算の制限が取り除かれ、コーディングルール違反はなくなりました。

そのため、MISRA C:2012 では、これらの主要課題について次の対応をとっています。

  • 新しい C99 バージョンや既存の C90 バージョンをサポート
  • すべてのコーディングルールについて詳細な根拠を提供
  • 2004 バージョンにおける問題点を修正
  • 2004 規格の命令や特定のルールを静的に強制できないように変更 (これにより、自動化された静的解析ツールによるコンプライアンスのチェックが簡素化されます)

また、多くの静的解析ツールはデータフローの解析に不向きであり、結果として偽陽性および偽陰性が多く含まれるため、新しい規格では特定のルールが決定不可能と分類されます。

Polyspace® 静的解析ツールは、この点において他のツールとは異なり、形式的手法を活用して制御フローおよびデータフローの徹底した解析を提供し、静的に強制可能なすべてのルールへの準拠に役立ちます。MISRA 規格の 2004 および 2012 の両バージョンでは、Polyspace ツール内に組み込みサポートが用意されているほか、自動的に生成されたコード (MISRA AC AGC) のサブセット、および規格のカスタムサブセットを定義する機能も提供されています。

ヒント: MISRA の Web サイトでは、2004 バージョンから 2012 バージョンへの移行時に役立つルールマッピングを含む MISRA C:2012 Addendum 1 も利用できます。MISRA C:2004 および MISRA C:2012 間の双方向のルールマッピングが提供されています。