MISRA-C

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索

MISRA CMISRA (Motor Industry Software Reliability Association、ミスラ) が開発したC言語のためのソフトウェア設計標準規格である。ANSI/ISO/IEC規格のC言語で記述する組み込みシステムで、安全性と可搬性 (移植性) と信頼性を確保することを目的としている。

Cソフトウェアにおける課題[編集]

可搬性と移植性[編集]

C言語規格では、ソフトウェアをCPUの種類にかかわらず移植できるようにするために、言語規格ではあえて厳密に仕様を定めず、処理系定義 (implementation-defined)、未定義 (undefined)、未規定 (unspecified) の動作 (behavior) など、CPUおよびコンパイラごとに取り決めをする事項が多い。たとえば代表的なものとして組み込み整数型のサイズの規定や、関数引数の評価順序などが含まれる。そのため、移植性を考慮せずにプログラムが記述された場合、あるCPU向けのC言語プログラムが、他のCPUでは異なる結果を出すことがしばしばある。The C Puzzle Book[1] (Cパズルブック) [2]C Traps and Pitfalls[3] (Cプログラミングの落とし穴) [4]というベル研究所 (Bell研) の著者が書いた本に掲載のプログラムを実行してみるとよくわかる。

安全性と信頼性[編集]

C言語は高級言語の皮をかぶったアセンブラ(高級アセンブラ[5]、汎用アセンブラ[6])とも言われるように、ハードウェアの直接的な制御も可能でありながら移植性の高い言語であり、それゆえに性能要求の厳しい組み込み環境やデバイスドライバー開発における主流言語であり続けている。しかし、後発のJavaC#といった高水準な仮想マシンベースのプログラミング言語と比較して、C言語は安全性に関して配慮されているとはいいがたい。特にバッファオーバーランスタックオーバーフローによるメモリアクセス違反や、メモリの解放忘れによるメモリリークなど、C言語ではシステムの停止や未定義動作を引き起こす元凶となる致命的なソフトウェアの不具合に対する最終防壁はなく、これらはプログラマー側の負担や責任となってしまう。

関連文書と経緯[編集]

Matlabから自動生成 (autocode) したプログラムに対するMisra AutoCode、C++言語に対応するMISRA C++の手引きもある。Safer C[7]のようなCPUに依存しないCプログラムの書き方と、Cプログラミングの落とし穴のような間違い易い機能を回避した書き方を推奨している。自動車業界に道具[要説明]を納品している道具[要説明]提供者などが作ったMISRA Cであるが、現在は他業界にも広く普及している。

MISRA C規格の初版「Guidelines for the use of the C language in vehicle based software」(乗用車基本ソフトでC言語を利用するための手引き)を1998年に出版し、MISRA-C:1998と呼ぶ[8]

2004年に第2版「Guidelines for the use of the C language in critical systems」(クリティカルシステムでC言語を利用するための手引き)をMISRA-C:2004として出版し、2つの規則間の矛盾,規則番号を見直すなど手引きに本質的な変更をした。

MISRA-Cは規則を守ることだけが目的ではなく、逸脱した方が信頼性が高い場合には文書化することを推奨している。逸脱の手続きをどのようにとるとよいかについての文書として、Approved Deviation Compliance(ADC)を作成している。ADC version 1.0は MISRA Forum[9]からダウンロードできる。

C99を取り扱うように手引きを改定し、MISRA-C:2012を発行した。 MISRA-CはC言語標準の未規定、未定義、処理系定義などに基づいている。C言語標準は有料で販売しているが、審議用の文書はISO/IEC JTC2 SC22 WG14で公開しており、内容を検討するのには十分である[10]

MISRA C文書は有料で販売している[11]。MISRA-Cの日本語版は自動車技術会から、JASO テクニカルペーパー"自動車用C言語利用のガイドライン"として販売されている。

また、規則を含む解説書を[SESSAME]のMISRA-C研究会が作成し、日本規格協会から発行している。また、解説書の誤植はSESSAMEのWEBに掲載している。

ルール[編集]

MISRA-C:1998 は127件の規則があり、うち93件が必須事項、34件が推奨事項となっている。規則には1から127までの連番が割り振られている。

MISRA-C:2004 は141件の規則があり、うち121件が必須事項、20件が推奨事項となっている。これらは「環境」や「ランタイム機能」などの21分類している。

MISRA-C:2012 は143件の規則があり、うち10件が義務、101件が必須、32件が推奨事項となっている。

ツール[編集]

「MISRA規格に適合している」ことを売りにしているコード検査ツールが数多く存在するが、MISRAは第三者による許認可の仕組みを持っていないため自己宣言である[12]

MISRAツールを利用者が評価して比較できるようにするMISRA-C:2004及びMISRA-C:2012の例題プログラムをMISRA掲示板[13]でダウンロードできる。

大半の手引きは静的コード解析を実行できるツールによって検査できる。それ以外の手引きについては動的なコード分析の機能が必要になる。

関連文書[編集]

セキュリティ分野では、CERT C[14], CERT C++[15]がコーディング標準として普及している。また、ISO/IEC TS 17961[16]として国際規格でコーディング標準の基本文書を発行している。これらの文書は、先行技術であるMISRA Cを参照している。CERT C, CERT C++では、対応する道具の一覧、MISRA Cとの関係がある。

書籍[編集]

  • 自動車用C言語利用のガイドライン(第2版),自動車技術会, JASO TP-01002-06
  • 組込み開発者におくるMISRA‐C―組込みプログラミングの高信頼化ガイド(MISRA-C:1998対応)日本規格協会, ISBN 978-4542503342
  • 組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド日本規格協会, ISBN 978-4542503465

脚注[編集]

  1. ^ Amazon.co.jp: The C Puzzle Book: Alan R. Feuer: 洋書
  2. ^ Amazon.co.jp: Cパズルブック: アラン・R. フューアー, Alan R. Feuer, 田中 和明, 手塚 忠則: 本
  3. ^ Amazon.co.jp: C Traps and Pitfalls: Andrew Koenig: 洋書
  4. ^ Amazon.co.jp: Cプログラミングの落とし穴 (新紀元社情報工学シリーズ): A. コーニグ, Andrew Koenig, 中村 明: 本
  5. ^ もう一度基礎からC言語 第19回 いろいろな演算子~ビット演算子 Cは高級アセンブラ?
  6. ^ 第1回 Chapter 1 C言語の概要(1):Cプログラミング入門|gihyo.jp … 技術評論社
  7. ^ Amazon.co.jp: Safer C: Developing Software for High-Integrity and Safety-Critical Systems (The Mcgraw-Hill International Series in Software Engineering): Les Hatton: 洋書
  8. ^ 序文[リンク切れ]
  9. ^ MISRA Bulletin Board - Index page
  10. ^ ISO/IEC JTC1/SC22/WG14 - C: Approved standards
  11. ^ MISRA Cの購入[リンク切れ]
  12. ^ FAQ[リンク切れ]
  13. ^ MISRA Bulletin Board - Index page
  14. ^ CERT C
  15. ^ CERT C++
  16. ^ C Secure Coding Rules

関連項目[編集]