(Translated by https://www.hiragana.jp/)
MISRA C - Wikipedia コンテンツにスキップ

MISRA C

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』

MISRA CMISRA (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言語げんご規格きかく規定きていされている実行じっこう環境かんきょうとして、OSの存在そんざい前提ぜんていとしたホスト環境かんきょう (hosted environment) と、OSを利用りようしないこと(もしくはOSそのものを記述きじゅつすること)を前提ぜんていとしたフリースタンディング環境かんきょう (freestanding environment) とがある。環境かんきょう後者こうしゃ該当がいとうする。C言語げんご高級こうきゅう言語げんごかわをかぶったアセンブラ高級こうきゅうアセンブラ[5]汎用はんようアセンブラ[6])ともわれるように、ハードウェアの直接的ちょくせつてき制御せいぎょ可能かのうでありながら移植いしょくせいたか言語げんごであり、それゆえにリソース制限せいげんおよび性能せいのう要求ようきゅうきびしい環境かんきょうデバイスドライバー開発かいはつにおける主流しゅりゅう言語げんごでありつづけている。みプロセッサなどのチップベンダーが、自社じしゃせいハードウェアの販売はんばいにCコンパイラを付属ふぞくさせることもある。カーネルモードのドライバーはC言語げんごでしか記述きじゅつできない環境かんきょうもある[7]。しかし、後発こうはつJavaおよびC#といった高水準こうすいじゅん仮想かそうマシンベースのプログラミング言語げんご比較ひかくして、C言語げんご安全あんぜんせいかんして配慮はいりょされているとはいいがたい。Pascalなどのどう時代じだいあるいはそれ以前いぜん登場とうじょうした言語げんごくらべても、文字もじれつあつかいなどで安全あんぜんせいおと部分ぶぶんがある。とくバッファオーバーランスタックオーバーフローによるメモリアクセス違反いはんや、メモリの解放かいほうわすれによるメモリリークなど、C言語げんごではシステムの停止ていし未定義みていぎ動作どうさこす元凶げんきょうとなる致命ちめいてきなソフトウェアの不具合ふぐあいたいする最終さいしゅう防壁ぼうへきはなく、これらはプログラマーがわ負担ふたん責任せきにんとなってしまう。C言語げんごから直接ちょくせつ発展はってんしたC++言語げんごについても、ある程度ていど改善かいぜん改良かいりょうされている部分ぶぶんはあるものの、依然いぜんとしてC言語げんご同様どうよう問題もんだいてんかかえている部分ぶぶんがある。

モダンな後発こうはつ言語げんご移植いしょくせいのないプログラムや危険きけんなプログラムを記述きじゅつしにくい(あるいは記述きじゅつできない)仕様しようになっているのにたいし、C/C++言語げんごはもともとプログラマーを信頼しんらいし、プログラマーにできることを制限せいげんしない設計せっけい思想しそうである。したがって、C/C++言語げんご移植いしょくせい安全あんぜんせい確保かくほしつつプログラムを記述きじゅつするためには、なんらかのコーディング規約きやく整備せいび標準ひょうじゅんして、運用うんよう制限せいげんをかける必要ひつようがある。

関連かんれん文書ぶんしょ経緯けいい

[編集へんしゅう]

Matlabから自動じどう生成せいせい (autocode) したプログラムにたいするMisra AutoCode、C++言語げんご対応たいおうするMISRA C++手引てびきもある。「Safer C[8]のようなCPUに依存いぞんしないCプログラムのかたと、「Cプログラミングのとしあな」のような間違まちがやす機能きのう回避かいひしたかた推奨すいしょうしている。MISRA Cはもともと自動車じどうしゃ業界ぎょうかいツールのベンダーなどが規定きていしたものではあるが、現在げんざい業界ぎょうかいにもひろ普及ふきゅうしている。

MISRA C規格きかく初版しょはんGuidelines for the use of the C language in vehicle based software」を1998ねん出版しゅっぱんし、MISRA-C:1998[9]

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[10]からダウンロードできる。

C99あつかうように手引てびきを改定かいていし、MISRA-C:2012を発行はっこうした。 MISRAはC言語げんご標準ひょうじゅん規定きてい定義ていぎ処理しょりけい定義ていぎなどにもとづいている。C言語げんご標準ひょうじゅん有料ゆうりょう販売はんばいしているが、審議しんぎよう文書ぶんしょはISO/IEC JTC2 SC22 WG14で公開こうかいしており、内容ないよう検討けんとうするのには十分じゅうぶんである[11]

MISRA C文書ぶんしょ有料ゆうりょう販売はんばいしている[12]。MISRA Cの日本語にほんごばん自動車じどうしゃ技術ぎじゅつかいから、JASO テクニカルペーパー"自動車じどうしゃようC言語げんご利用りようのガイドライン"として販売はんばいされている。

また、規則きそくふく解説かいせつしょをSESSAMEのMISRA C研究けんきゅうかい作成さくせいし、日本にっぽん規格きかく協会きょうかいから発行はっこうしている。なお、解説かいせつしょ誤植ごしょくはSESSAMEのWEBに掲載けいさいしている[13]

規則きそく (rule)

[編集へんしゅう]

MISRA-C:1998 は127けん規則きそくがあり、うち93けん必須ひっす事項じこう、34けん推奨すいしょう事項じこうとなっている。規則きそくには1から127までのれんばんられている。

MISRA-C:2004 は141けん規則きそくがあり、うち121けん必須ひっす事項じこう、20けん推奨すいしょう事項じこうとなっている。これらは「環境かんきょう」や「ランタイム機能きのう」など21項目こうもく分類ぶんるいされている。

MISRA-C:2012 は143けん規則きそくがあり、うち10けん義務ぎむ、101けん必須ひっす、32けん推奨すいしょう事項じこうとなっている。

ツール (tool)

[編集へんしゅう]

「MISRA規格きかく適合てきごうしている」ことをりにしているコード検査けんさツールが数多かずおお存在そんざいするが、MISRAは第三者だいさんしゃによる許認可きょにんか仕組しくみをっていないため自己じこ宣言せんげんである[14]

MISRAツールを利用りようしゃ評価ひょうかして比較ひかくできるようにするMISRA-C:2004およびMISRA-C:2012の例題れいだいプログラムをMISRA掲示板けいじばん[15]でダウンロードできる。

大半たいはん手引てびきは静的せいてきコード解析かいせきようツールによって検査けんさできる。一部いちぶ手引てびきについては動的どうてきなコード分析ぶんせき機能きのう必要ひつようになる。

関連かんれん文書ぶんしょ

[編集へんしゅう]

セキュリティ分野ぶんやでは、CERT C, CERT C++がコーディング標準ひょうじゅんとして普及ふきゅうしている[注釈ちゅうしゃく 1]。また、ISO/IEC TS 17961[18]として国際こくさい規格きかくでコーディング標準ひょうじゅん基本きほん文書ぶんしょ発行はっこうしている。これらの文書ぶんしょは、先行せんこう技術ぎじゅつであるMISRA Cを参照さんしょうしている。CERT C, CERT C++では、対応たいおうするツールの一覧いちらん、MISRA Cとの関係かんけいがある。

書籍しょせき

[編集へんしゅう]
  • 自動車じどうしゃよう言語げんご利用りようのガイドライン(だい2はん), 自動車じどうしゃ技術ぎじゅつかい, JASO TP-01002-06
  • 組込くみこ開発かいはつしゃにおくるMISRA‐C―組込くみこみプログラミングの高信頼こうしんらいガイド(MISRA-C:1998対応たいおう), 日本にっぽん規格きかく協会きょうかい, ISBN 978-4542503342
  • 組込くみこ開発かいはつしゃにおくるMISRA‐C:2004―C言語げんご利用りよう高信頼こうしんらいガイド, 日本にっぽん規格きかく協会きょうかい, ISBN 978-4542503465
  • MISRA C 2012 -みプログラミングの高信頼こうしんらいせいガイド, 日本にっぽん規格きかく協会きょうかい, 2022, ISBN 9784542940017

脚注きゃくちゅう

[編集へんしゅう]

注釈ちゅうしゃく

[編集へんしゅう]
  1. ^ CERT C/C++はSoftware Engineering Institute英語えいごばん (SEI) によって管理かんりされている[16][17]

出典しゅってん

[編集へんしゅう]
  1. ^ Alan R. Feuer (1998-10-15). The C Puzzle Book. Addison-Wesley Professional. p. [ようページ番号ばんごう]. ISBN 0201604612 
  2. ^ Alan R. Feuer(ちょ)、田中たなか和明かずあきわけ)、手塚てづか忠則ただのりわけ)『Cパズルブック』カットシステム、2000ねん12月、[ようページ番号ばんごう]ぺーじISBN 4877830294 
  3. ^ Andrew Koenig (1989-01-01). C Traps and Pitfalls. Addison-Wesley Professional. p. [ようページ番号ばんごう]. ISBN 0201179288 
  4. ^ Andrew Koenig(ちょ)、中村なかむらあきらわけ)『Cプログラミングのとしあなしん紀元きげんしゃ、2004ねん1がつ[ようページ番号ばんごう]ぺーじISBN 4775302558 
  5. ^ もう一度いちど基礎きそからC言語げんご だい19かい いろいろな演算えんざん~ビット演算えんざん Cは高級こうきゅうアセンブラ?
  6. ^ だい1かい Chapter 1 C言語げんご概要がいよう(1):Cプログラミング入門にゅうもん|gihyo.jp … 技術評論社ぎじゅつひょうろんしゃ
  7. ^ Portable drivers - Windows drivers | Microsoft Learn
  8. ^ 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 
  9. ^ INDEX → Introduction(2006ねん10がつ18にち時点じてんアーカイブ
  10. ^ MISRA Bulletin Board - Index page[リンク]
  11. ^ ISO/IEC JTC1/SC22/WG14 - C: Approved standards
  12. ^ INDEX → Buy MISRA C(2006ねん10がつ18にち時点じてんアーカイブ
  13. ^ SESSAME Working Group 3
  14. ^ INDEX → FAQ(2006ねん10がつ18にち時点じてんアーカイブ
  15. ^ MISRA Bulletin Board - Index page[リンク]
  16. ^ SEI CERT C Coding Standard - SEI CERT C Coding Standard - Confluence
  17. ^ SEI CERT C++ Coding Standard - SEI CERT C++ Coding Standard - Confluence
  18. ^ C Secure Coding Rules (PDF)

関連かんれん項目こうもく

[編集へんしゅう]