MISRA-C:1998とMISRA-C:2004のC90のC99との検討
坪井泰樹、吉川直邦(1)、小川清、斉藤直希(2) 1大同工大, 2名市工研
Study for MISRA C 1998 and 2004 with C90 and C99
Tsuboi Yoshikawa Naokuni(daido—it) Ogawa Kiyoshi SaitO Naoki(NMIRI)
1.まえがき
自動車、家電製品をはしめ人工衛星からICカートまで、CPUが内蔵される組み込みシステムにおいて装置を制御するソフトウェアが、システムの重要な要素となっている。組込みシステムでは要求機能、性能を限定し、厳しい費用制限から利用可能な資源に個別の制約がある。
これらの制約を実現する場(ーロ、C十十′JAVA0)
ような他の高級言語ではなくc言語を利用することがある。しかし、c語は、、cの精神"に基づいてプロクラマを信頼する仕組みであり、書かれたプロクラムの信頼庄を確保する仕組みが必要になっている。また、組み込みシステムのプロクラミンクをアセンプラではなく、c言語を利用する場合に、移植性に対する期待もある。
MISRA(Motor lndustry Software Re1iability Association)は、欧州の自動車関連のソフトウェアの信頼住を検討する団体で、ソフトウェア開発作業標準とcコーディンク標準を発行している。これは、作業と製品との両方において標準を作成することにより、信頼住の高いソフトウェア開発を実現しようとするものである。前者は1998年発行後、ISOのTR15497:2000として発行されている。後者は1998年に発行され
プこ "Guidelines For The Use Of C Language ln Vehicle Based Software"・で、MISRA-C:1998と呼んでいる。
MISRAcは欧州たけてなく、日本や北米の自動車業界においてプロクラミンクカイトラインとして、その内容に基ついて改訂されたのがMISRA-c:2004てある。
MISRAC1998.2004とも基にしているc言語規格はANS1-C89またはC90と呼はれるISO/IEC9899:1990・(ある。ISO/IEC9899(ま1999年改訂され、C99と呼はれている。
2 プロクラミンク言語教育
名古屋市工業研究所ては企業の技術者へのcプロクラミンク言語の教育の中て、cコン八イラのソ-スコ-ドを使うとともに、c Puzz1e Book[1]に記述されている誤解しやすいサンプル
情報処理学会第67回全国大会
1ー219
タスクとして実行させた。
こての発見事項とし
にした。具体的には、サンプルをカ-ネル上ての
作成し処理を実行させ、処理経過を表示するよう
TOPPERS/JSPカ-ネル上にて動作するサンプルを
テクノロジ-のMI6C/M32c評価ホ-トて
二段階として具体的なCPUとして、ルネサス
いのうち、確認てきる事項を調査した。
C90とC99との違
高いものと思われる。
Studi06.0のcコン八イラは、C90への準拠率が
の処理系定義の文書がある。また、Visua1
を表示てきるようにした。利用したGCCは、C99
関数とmain関数を利用して処理結果と処理経過
そのためには、stdio.hをincludeし、printf
対応するサンプルをコン八イル、実行を行った
Studi06.0.及てトgcc(cygwin))・てMISRA—C:1998(こ
階としてWindows上のコン八イラ(Visua1
への復元を図った。復元の過程としては、第-段
トてあったため、コン八イルてきるソ-スの状態
MISRA-C関連書籍でのサンプ丿レは断片的なコー
3. コーディングサンプ丿レ
できる可能性がある。
で理解する手掛かりを掴むきっかけとすることが
コーディング丿レー丿レによる該当する規則との関係
である。そのため、単体試験プロクラムを作成し、
るが、開発対象をすぐに書きたい場合には、膨大
の作業は特定のosを開発するためには必要であ
トを、辿っていく方法が考えられる。しかし、
としてオープンソースであるGCCのソースコー
ある。c言語の機種依存性を理解するための方法
コンバイラに依存した部分を理解している必要が
読み下し、検査を行うためには、c言語のCPUと
アプリケーション開発において、ソースコートを
開発や、c言語が想定していなかったos上での
題もある。しかし、osのない組込みシステムの
ある。POSIX準拠のosでは、osが解決すべき課
にはPOSIXに対応するUNIX/LINUXのようなOSが
区分されている。c言語が想定している実行環境
境と、osを前提としたプロクラミング環境とに
C
ー語は、osのない状態でのプロクラミング環
きた。
の課題と、機種依存性の課題があることが確認で
るものである。この教育で、c言語には可読性上
果を出力することにより、c言語の機能を確認す
を教育に利用してきた。具体的に処理の過程、結
ては、コン八イラの処理系定義の確認作業の重要
さと、試験プロクラムの重要さが確認できた。サ
ンプ丿レプロクラムは、実際にコン八イルして動作
させると、C標準に対する誤解、または処理系定
義の意味の誤解により、想定したものと実行結果
とが異なる場合があった。また、OSがある場合
とない場合の記述上の制約について確認できた。
第三段階として、MISRA-C:2004に対応するサン
プ丿レを統合し、コン八イ丿レして実行した。
プロクラムの書式は次の通りである。
heade「:author,C「eatedate′Updatedate
Rule:Rule#′「ule(JapaneseandEnglish)
B0dy:
#inclueくmiS「ac.h>
Result:VisualStudio(MicroS0ft),
N308(RenesasTechnology)
Foote「:updatelog
127の丿レー丿レに対して、原則1プロクラム1
丿レー丿レとした。ファイ丿レに関連するルー丿レでは、
複数ファイ丿レで1ルールとなる。プロクラムファ
イ丿レの内部構成は5部構成にした。ヘッタ部には
著者、作成日を記述した。丿レー丿レ部には、日本語
と英語の丿レー丿レを記載した。本体はプロクラムそ
のもので、コン八イル時のスイッチによって、
DOSモード、TOPPERS/JSPモードが切り替わるよ
うにした。結果部は、各コン八イラでコンバイル
した際のエラーと実行するための修正、実行した
結果をつけ、比較をしやすくした。最後にフッタ
部に改訂の履歴をつけた。
GccてはC90準拠を確認する必要がある場合は、
-ansiてコン八イ丿レした。それそれのOS上ての
MISRA—Cの対応のカイトは存在していないが、
OSごとに逸脱の手続きを定義してあるとよい事
項が確認てきた
4 逸脱の手続きとまとめ
MISRAては、規則の-員として、規則に適合し
ないコ-トは、逸脱とし、その逸脱の理由を明確
にし、文書化することを規定している。この逸脱
の手続きを取ることは信頼性の確保にとって重要
てある。あるコ-ディンク規則はどんな種類の処
理にも有効とは限らないという仮定を取れは、
個々の目的によってどのように適用するのがよい
かの検討が必要てある。費用を最小にして規則を
守ることを重視すると、処理速度の低下、コ-ト
の移植性の低下を招くかもしれない。例えは、
goto文を使わない方法てプロクラムを書くには、
リカーシブコー丿レを使うか、関数のネストを深く
することによって実現することは容易である。し
かし、関数のネストが深くなることは、スタック
オー八フローを招いたり、呼び出しのオー八ヘッ
トが多くなり、メモリが少なかったり、高速化が
必要な場合には、安易にgoto文を使わないよう
にするだけでは信頼性が低くなることがある。ま
た、CPU固有の機能により、異なるCPUで振る
舞いが異ならないようにするために、同一の動作
をさせようとする場合に、機械語で直接書くより
C言語でgoto文を利用した方が明確に書くこと
ができる場合もある。
C言語で書かれた特定のOSでは、そのOS自身
の標準的な逸脱の手続きと、そのOSの上に書く
アプリケーションについて逸脱の手続きがあると
便利である。名古屋市工業研究所では、ITRON準
拠のオープンソースであるTOPPERS/JSPカーネ丿レ
のM16C/M32Cへの移植を行い、教育に利用して
いるが、そのソースを評価するため、MISRA-Cチ
ェッカを利用し、OSにおけるMISRA—Cの適用に
ついて検討している。規則の逸脱の手続きを踏ん
でいるものが多ければ多いほど、信頼性が高い可
能性もあり、形式的な規則の適用の危険性を確認
することができた。
5 まとめと今後の課題
コーディング規則の解説におけるサンプ丿レを複
数のコンバイラでコンバイルし、評価した。また、
組込みITRONのオープンソースのOSである
TOPPERS/JSPカーネ丿レ上でのタスクとして実行さ
せた。規則を守らないときだけ文書化させるので
は、非対称であるためうまく使われない可能性が
あり、守らない方が品笛が高いような事例に共通
性がある事項は、運用する側が、その品質につい
て記述するようにすることが重要てあることがわ
かった。OSことに、MISRA-Cの対応のカイドがあ
ると、OS上のアプリケ-ション開発者に役立つ
と思われた。プロクラムは複数の規則を1つの実
行ファイ丿レにし、TOPPERS/JSPのMonito「上てタ
スクとして選択てきるように改良中てある。
文献
[1]CpuzzleB00k′AIanR.Feue「′Addison WesIey
[2]組み込み開発者におくるMISRA-C組み込みプログラミンクの高信頼化カイト、MISRA-C研究、日本規格協会′2004
[3]www.misra.org.uk, lndustry Moter Software Reliability Association
[4]www.toppers.jp′www.sessame.jp 1ー220 GCC,