「MISRA C」の版間の差分
改名完了 |
|||
14行目: | 14行目: | ||
<!-- HACK: 「道具」という表現は広義すぎる。もしツールソフトウェアのことを指しているのであれば、無理に「道具」や「工具」と翻訳するべきではない。ニュアンスが曲げられて伝わりかねない。 --> |
<!-- HACK: 「道具」という表現は広義すぎる。もしツールソフトウェアのことを指しているのであれば、無理に「道具」や「工具」と翻訳するべきではない。ニュアンスが曲げられて伝わりかねない。 --> |
||
MISRA C規格の初版「{{lang|en|Guidelines for the use of the C language in vehicle based software}}」<!--(乗用車基本ソフトでC言語を利用するための手引き)--><!--自動車技術会から出ている訳と違う表現をわざわざ使って表現することは混乱の元でしかない-->を1998年に出版し、''MISRA-C:1998''と呼ぶ<ref>[https://web.archive.org/web/20061018123035/http://www.misra-c2.com/index.htm INDEX → Introduction](2006年10月18日時点の[[インターネット |
MISRA C規格の初版「{{lang|en|Guidelines for the use of the C language in vehicle based software}}」<!--(乗用車基本ソフトでC言語を利用するための手引き)--><!--自動車技術会から出ている訳と違う表現をわざわざ使って表現することは混乱の元でしかない-->を1998年に出版し、''MISRA-C:1998''と呼ぶ<ref>[https://web.archive.org/web/20061018123035/http://www.misra-c2.com/index.htm INDEX → Introduction](2006年10月18日時点の[[インターネットアーカイブ|アーカイブ]])</ref>。 |
||
2004年に第2版「{{lang|en|Guidelines for the use of the C language in critical systems}}」(クリティカルシステムでC言語を利用するための手引き) を''MISRA-C:2004''として出版し、2つの規則間の矛盾,規則番号を見直すなど手引きに本質的な変更をした。 |
2004年に第2版「{{lang|en|Guidelines for the use of the C language in critical systems}}」(クリティカルシステムでC言語を利用するための手引き) を''MISRA-C:2004''として出版し、2つの規則間の矛盾,規則番号を見直すなど手引きに本質的な変更をした。 |
||
23行目: | 23行目: | ||
MISRAはC言語標準の未規定、未定義、処理系定義などに基づいている。C言語標準は有料で販売しているが、審議用の文書はISO/IEC JTC2 SC22 WG14で公開しており、内容を検討するのには十分である<ref>[http://www.open-std.org/jtc1/sc22/wg14/www/standards ISO/IEC JTC1/SC22/WG14 - C: Approved standards]</ref>。 |
MISRAはC言語標準の未規定、未定義、処理系定義などに基づいている。C言語標準は有料で販売しているが、審議用の文書はISO/IEC JTC2 SC22 WG14で公開しており、内容を検討するのには十分である<ref>[http://www.open-std.org/jtc1/sc22/wg14/www/standards ISO/IEC JTC1/SC22/WG14 - C: Approved standards]</ref>。 |
||
MISRA C文書は有料で販売している<ref>[https://web.archive.org/web/20061018123035/http://www.misra-c2.com/index.htm INDEX → Buy MISRA C](2006年10月18日時点の[[インターネット |
MISRA C文書は有料で販売している<ref>[https://web.archive.org/web/20061018123035/http://www.misra-c2.com/index.htm INDEX → Buy MISRA C](2006年10月18日時点の[[インターネットアーカイブ|アーカイブ]])</ref>。MISRA Cの日本語版は[[自動車技術会]]から、JASO テクニカルペーパー"自動車用C言語利用のガイドライン"として販売されている。 |
||
また、規則を含む解説書をSESSAMEのMISRA C研究会が作成し、日本規格協会から発行している。なお、解説書の誤植はSESSAMEのWEBに掲載している<ref>[http://www.sessame.jp/workinggroup/WorkingGroup3/ SESSAME Working Group 3]</ref>。 |
また、規則を含む解説書をSESSAMEのMISRA C研究会が作成し、日本規格協会から発行している。なお、解説書の誤植はSESSAMEのWEBに掲載している<ref>[http://www.sessame.jp/workinggroup/WorkingGroup3/ SESSAME Working Group 3]</ref>。 |
||
35行目: | 35行目: | ||
== ツール == |
== ツール == |
||
「MISRA規格に適合している」ことを売りにしているコード検査ツールが数多く存在するが、MISRAは第三者による許認可の仕組みを持っていないため自己宣言である<ref>[https://web.archive.org/web/20061018123035/http://www.misra-c2.com/index.htm INDEX → FAQ](2006年10月18日時点の[[インターネット |
「MISRA規格に適合している」ことを売りにしているコード検査ツールが数多く存在するが、MISRAは第三者による許認可の仕組みを持っていないため自己宣言である<ref>[https://web.archive.org/web/20061018123035/http://www.misra-c2.com/index.htm INDEX → FAQ](2006年10月18日時点の[[インターネットアーカイブ|アーカイブ]])</ref>。 |
||
MISRAツールを利用者が評価して比較できるようにするMISRA-C:2004及びMISRA-C:2012の例題プログラムをMISRA掲示板<ref>[http://www.misra.org.uk/forum/ MISRA Bulletin Board - Index page]</ref>でダウンロードできる。 |
MISRAツールを利用者が評価して比較できるようにするMISRA-C:2004及びMISRA-C:2012の例題プログラムをMISRA掲示板<ref>[http://www.misra.org.uk/forum/ MISRA Bulletin Board - Index page]</ref>でダウンロードできる。 |
2017年9月4日 (月) 20:39時点における版
MISRA CはMISRA (Motor Industry Software Reliability Association、ミスラ) が開発したC言語のためのソフトウェア設計標準規格である。ANSI/ISO/IEC規格のC言語で記述する組み込みシステムで、安全性と可搬性 (ポータビリティ、移植性) と信頼性を確保することを目的としている。
Cソフトウェアにおける課題
可搬性と移植性
C言語規格では、ソフトウェアをCPUやオペレーティングシステム (OS) の種類にかかわらず移植できるようにするために、言語規格ではあえて厳密に仕様を定めず、処理系定義 (implementation-defined)、未定義 (undefined)、未規定 (unspecified) の動作 (behavior) など、CPU/OSおよびコンパイラごとに取り決めをする事項が多い。たとえば代表的なものとして組み込み整数型のサイズの規定や、関数引数の評価順序などが含まれる。そのため、移植性を考慮せずにプログラムが記述された場合、あるCPU/OS向けのC言語プログラムが、他のCPU/OSでは異なる結果を出すことがしばしばある。The C Puzzle Book[1] (Cパズルブック) [2]、C Traps and Pitfalls[3] (Cプログラミングの落とし穴) [4]というベル研究所 (Bell研) の著者が書いた本に掲載のプログラムを実行してみるとよくわかる。
安全性と信頼性
C言語は高級言語の皮をかぶったアセンブラ(高級アセンブラ[5]、汎用アセンブラ[6])とも言われるように、ハードウェアの直接的な制御も可能でありながら移植性の高い言語であり、それゆえに性能要求の厳しい組み込み環境やデバイスドライバー開発における主流言語であり続けている。しかし、後発のJavaやC#といった高水準な仮想マシンベースのプログラミング言語と比較して、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」を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言語標準は有料で販売しているが、審議用の文書はISO/IEC JTC2 SC22 WG14で公開しており、内容を検討するのには十分である[10]。
MISRA C文書は有料で販売している[11]。MISRA Cの日本語版は自動車技術会から、JASO テクニカルペーパー"自動車用C言語利用のガイドライン"として販売されている。
また、規則を含む解説書をSESSAMEのMISRA C研究会が作成し、日本規格協会から発行している。なお、解説書の誤植はSESSAMEのWEBに掲載している[12]。
ルール
MISRA-C:1998 は127件の規則があり、うち93件が必須事項、34件が推奨事項となっている。規則には1から127までの連番が割り振られている。
MISRA-C:2004 は141件の規則があり、うち121件が必須事項、20件が推奨事項となっている。これらは「環境」や「ランタイム機能」などの21分類している。
MISRA-C:2012 は143件の規則があり、うち10件が義務、101件が必須、32件が推奨事項となっている。
ツール
「MISRA規格に適合している」ことを売りにしているコード検査ツールが数多く存在するが、MISRAは第三者による許認可の仕組みを持っていないため自己宣言である[13]。
MISRAツールを利用者が評価して比較できるようにするMISRA-C:2004及びMISRA-C:2012の例題プログラムをMISRA掲示板[14]でダウンロードできる。
大半の手引きは静的コード解析を実行できるツールによって検査できる。それ以外の手引きについては動的なコード分析の機能が必要になる。
関連文書
セキュリティ分野では、CERT C[15], CERT C++[16]がコーディング標準として普及している。また、ISO/IEC TS 17961[17]として国際規格でコーディング標準の基本文書を発行している。これらの文書は、先行技術である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
脚注
- ^ Alan R. Feuer (1998-10-15). The C Puzzle Book. Addison-Wesley Professional. p. [要ページ番号]. ISBN 0201604612
- ^ Alan R. Feuer(著)、田中和明(訳)、手塚忠則(訳)『Cパズルブック』カットシステム、2000年12月、[要ページ番号]頁。ISBN 4877830294。
- ^ Andrew Koenig (1989-01-01). C Traps and Pitfalls. Addison-Wesley Professional. p. [要ページ番号]. ISBN 0201179288
- ^ Andrew Koenig(著)、中村明(訳)『Cプログラミングの落とし穴』新紀元社、2004年1月、[要ページ番号]頁。ISBN 4775302558。
- ^ もう一度基礎からC言語 第19回 いろいろな演算子~ビット演算子 Cは高級アセンブラ?
- ^ 第1回 Chapter 1 C言語の概要(1):Cプログラミング入門|gihyo.jp … 技術評論社
- ^ Les Hatton (1995). Safer C: Developing Software for High-Integrity and Safety-Critical Systems (The Mcgraw-Hill International Series in Software Engineering). Mcgraw-Hill. p. [要ページ番号]. ISBN 0077076400
- ^ INDEX → Introduction(2006年10月18日時点のアーカイブ)
- ^ MISRA Bulletin Board - Index page
- ^ ISO/IEC JTC1/SC22/WG14 - C: Approved standards
- ^ INDEX → Buy MISRA C(2006年10月18日時点のアーカイブ)
- ^ SESSAME Working Group 3
- ^ INDEX → FAQ(2006年10月18日時点のアーカイブ)
- ^ MISRA Bulletin Board - Index page
- ^ CERT C
- ^ CERT C++
- ^ C Secure Coding Rules (PDF)