MISRA Cとは
MISRA Cは、自動車産業向けソフトウェアの信頼性向上を目的としてMISRA(Motor Industry Software Reliability Association)が策定した
C言語のコーディング標準です。
組み込みシステムにおいて、
C言語で記述されたソフトウェアの安全性、可搬性(
移植性)、信頼性を確保することを主な目的としています。ANSI/ISO/IEC規格に準拠した
C言語を対象とし、特にリソースが限られ、高い信頼性が求められる
組み込みシステムでの利用を想定しています。
C言語は、ハードウェアに近い制御が可能で効率的なプログラムを記述できる一方で、いくつかの課題を抱えています。
C言語は、
CPUやOSの種類に依存しないプログラムを作成できることを目指していますが、言語仕様が厳密に定義されていない部分が多く、コンパイラや実行環境によって動作が異なることがあります。例えば、整数型のサイズや関数引数の評価順序などが処理系によって異なるため、
移植性を考慮せずに記述されたプログラムは、異なる環境で予期せぬ動作を引き起こす可能性があります。
安全性と信頼性
C言語はハードウェア制御を直接行えるため、組み込み環境での開発に広く利用されていますが、他の高水準言語と比較して、安全性の面では十分な配慮がなされているとは言えません。バッファオーバーランやスタックオーバーフローなどのメモリ関連の不具合は、システム停止や未定義動作の原因となります。また、
メモリリークのような問題もプログラマーの責任に委ねられており、これらの問題に対する最終的な防御策がありません。
C++も
C言語同様の問題を抱えています。
MISRA Cの必要性
近年のプログラミング言語は安全性の確保に重点を置いている一方で、C/
C++はプログラマーを信頼し、自由な記述を許容する設計思想に基づいています。そのため、C/
C++で
移植性や安全性を確保するには、コーディング規約を整備し、運用時に制限を加える必要があります。MISRA Cは、このような課題を解決するために、
C言語で安全なコードを書くためのルールを定めています。
MISRA Cの歴史
MISRA Cは、自動車業界から始まりましたが、現在では他の業界にも広く普及しています。
MISRA-C:1998: 初版は「Guidelines for the use of the C language in vehicle based software」として1998年に発行されました。
MISRA-C:2004: 第2版は「Guidelines for the use of the C language in critical systems」として2004年に発行され、規則間の矛盾や規則番号が見直されました。
MISRA-C:2012:
C99に対応するために改訂され、新しい規則や分類が導入されました。MISRA Cは、規則を遵守することだけが目的ではなく、場合によっては規則からの逸脱が信頼性を高める可能性があることを認めています。逸脱の手続きを定めた「Approved Deviation Compliance (ADC)」も公開されています。
MISRA Cの規則
各バージョンのMISRA Cには、以下のように規則が定められています。
MISRA-C:1998: 127件の規則(必須93件、推奨34件)
MISRA-C:2004: 141件の規則(必須121件、推奨20件、21項目に分類)
MISRA-C:2012: 143件の規則(義務10件、必須101件、推奨32件)
MISRA Cのツール
MISRA規格への適合を謳うコード検査ツールが多く存在しますが、MISRAは第三者による認証を行っていないため、適合性は自己申告となります。MISRAは、利用者がツールを評価・比較できるように、例題プログラムを提供しています。MISRA Cの規則の多くは静的コード解析ツールで検査できますが、一部の規則には動的なコード解析が必要です。
関連文書
セキュリティ分野では、CERT CやCERT
C++がコーディング標準として普及しており、ISO/IEC TS 17961もコーディング標準の基本文書として発行されています。これらの文書は、MISRA Cを参考に作成されています。また、MISRA Cの日本語版は
自動車技術会からJASOテクニカルペーパーとして販売され、解説書はSESSAMEのMISRA C研究会から発行されています。
まとめ
MISRA Cは、
組み込みシステムにおける
C言語の信頼性を高めるための重要なコーディング標準です。
C言語の持つ課題を理解し、MISRA Cの規則に沿って開発を行うことで、より安全で信頼性の高いソフトウェアを開発することができます。利用可能なツールや関連文書を活用しながら、MISRA Cを実践することが推奨されます。