国内でもC++コーディング・ガイドラインの調査が始まる ―― MISRA C++ガイドライン紹介セミナ

組み込みネット編集部

tag: 組み込み

レポート 2008年6月24日

 2008年6月5日,車載ソフトウェア開発に関する業界団体であるMISRA(The Motor Industry Software Reliability Association)は,C++についてのコーディング・ガイドライン「MISRA C++」を公開した(写真1).それに関連して2008年6月20日,東陽テクニカ(東京都中央区)にて,MISRA C++の概要を紹介するセミナが開催された.MISRAの委員長であるDavid D. Ward氏が登壇し,MISRA C++が必要となった背景や今後の展開について講演した.

p1.jpg
[写真1] C++のコーディング・ガイドライン MISRA C++:2008
サブタイトルは「Guidelines for the use of the C++ language in critical systems」である.

 MISRAが1998年に公開したC言語についてのコーディング・ガイドライン「MISRA-C」は日本国内でも普及しており,C言語コーディング・ガイドラインの標準とみなされている.

●防衛関係で使われているC++

  David D. Ward氏によると,近年,安全にかかわる組み込みシステムにおいてC++言語を使った開発が増えているという(写真2).具体的には,防衛システムや医療システム,原子力関係,ジェット機のエンジン・コントローラなどである.また,自動車業界からもC++を使用する場合のガイドラインを要望する声が出てきたため,MISRA内にC++作業部会を設立した.そして,別に存在していた英国防衛作業部会と統合して,C++のガイドラインの策定を進めてきたという.C++については既にいくつかのガイドラインが存在するが,これらをセーフティ・クリティカル・システム向けに一つのガイドラインにまとめることを目指した.

p2.jpg
[写真2] MISRA C++ガイドライン紹介セミナの様子
会場は満席だった.

 C++についても,C言語と同じように,ふるまいが規定されていない,定義されていない,処理系に依存するなどの危険性を含んでいる.C言語の場合,このような項目がC言語規格書の「Annex G」にリストアップされている.C++言語ではC言語のように項目をまとめたものは存在しなかったため,ガイドラインを策定する際に,C++言語の規格(ISO/IEC 14882:2003)から項目を収集する必要があった.

 今後の作業としては,お手本となるソース・コードのサンプルを用意したり,ライブラリに関係する部分を別のドキュメントとしてまとめたりすることを検討している.

●基本はMISRA-Cを継承,一部改変

  東陽テクニカ ソフトウェア・ソリューション部の中川 忠紀氏は,MISRA C++に列挙されている項目について,MISRA-Cやその他の関連するコーディング・ガイドラインと比較しながら解説した(写真3).MISRA-CとMISRA C++は,「Unspecified(未規定;規定されていないもの)」や「Undefined(未定義;定義されていないことが規定されているもの)」,「Implementation-defined(処理系定義;処理系に依存することが規定されているもの)」などといった,言語仕様に含まれる危険な要素を回避するようなガイドラインとなっている.MISRA-Cでは危険要素として前述の3種類を挙げていたが,MISRA C++ではさらに「Indeterminate(不確定;条件が満たされたときの動作については定義されているが,条件が満たされていないときの動作が規定されていないもの)」と「NDR(No Diagnostic is Required;期待していない動作であるが,警告を表示する必要はないとされているもの)」の2種類を追加した.

p3.jpg
[写真3] C言語規格,C++規格と各コーディング・ガイドラインの相関関係
コーディング・ガイドラインとしては,MISRA-C,MISRA C++のほかに,「High-Integrity C++ Coding Standard Manual(HICPP) Version 2.2」と「Joint Strike Fighter Air Vihicle C++ Coding Standards(JSF++)」が比較対照として挙げられている.

 MISRA C++の項目は228項目ある(MISRA-Cの2004年版は142項目).そのうち,約100項目はMISRA-Cの項目とほぼ一致しているという.また,約40項目は,MISRA-Cの項目を分割したり,条件を緩和したり厳格化したりといった,何らかの関連があるものだという.新規に追加された項目は約90.MISRA-Cから削除された項目は約20.

 条件が厳格化された例としては,「a = b = c = 0;」のような記述が禁止された(Rule 6-2-1).また,条件が緩和された例としては,同じ関数本体の後方のラベルにジャンプする場合であればgoto文の使用が認められた(Rule 6-6-2).

●MISRA C++研究会が発足し,MISRA C++の翻訳や研究を推進

 MISRA-C研究会を主催している組込みソフトウェア管理者・技術者育成研究会(SESSAME)WG3担当理事の二上 貴夫氏は,この日にMISRA C++研究会を発足することを発表した.研究会の活動としてMISRA C++を翻訳し,なるべく早い時期に出版したいと考えている.また,C++のガイドライン研究や,C++を組み込みシステム開発に適用するリスクについての評価などを行う.興味と技術のある人であれば,だれでも研究会に参加できるという.研究成果については,できる限り書籍やWebなどを通じて公開する予定.

●MISRA委員長,MISRA C++の普及に自信

 MISRA委員長であるDavid D. Ward氏に,MISRA C++の展望について聞いた(写真4)

p4.jpg
[写真4] MISRA委員長であるDavid D. Ward氏

――MISRA Cは日本国内で,C言語ガイドラインの標準と言えるほど普及していますが,ほかの国ではどうなのでしょうか?

David D. Ward氏:MISRA Cは,世界各国でデファクト・スタンダードとなっていると考えています.

――なぜこれほど普及したのでしょうか?

David D. Ward氏:具体的な指針やコード例を含んだドキュメントがほかになかったためだと思います.

――MISRA C++の普及については,どう考えていますか?

David D. Ward氏:MISRA C++も,MISRA-Cと同じアプローチで進めているので,同じように普及すると考えています.

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日