HOME | products | LDRA | MISRA C:2023 セミナー

 
  

  
MISRA C:2023 の
最新情報と実践的使用法

 

MISRA C ワーキンググループ議長 Andrew Banks の来日講演

  

MISRA C:2023 の最新情報と実践的使用法

MISRA C:2023とMISRA C:2012 Amendment 4 (AMD 4)が Embedded World 2023 で発表されました。AMD 4では、マルチスレッドとアトミック型に対するルールとディレクティブを追加/変更し、既存のガイダンスについても、開発者がC言語をどのように使用しているかに合わせて明確にしています。また MISRA C:2023 は、以前のバージョンのガイドライン、修正版 (AMD 4 を含む)、および補遺が 1 つの包括的な版に統合されたもので、準拠が促進できます。
MISRA C ワーキンググループ議長 Andrew Banks氏が、これらの更新と実践的な使用法について紹介します。

 

以下に、当日使用した資料を公開しました。

Andrew Banks と LDRA について

MISRA C 発展の概要

MISRA C:2023 最新情報と実践的使用法

質疑応答

当日は多くの質問が寄せられ、また Andrew Banks氏の丁寧な回答もあり、たいへん盛況でした。
 
Q:「ソフトウェアの検証」の部分についての質問です。ファジングテストということもよく言われます。今回の資料の中にはありませんでしたが、ファジングテストと今回説明があった様々なソフトウェアの検証との違いを紹介いただければと思います。
 
A:ファジングは、コミュニケーションインターフェースの部分をテストする手法の1つとしてとらえることができます。一方、MISRAは基本的に、すべてのケースでコードが適切に動作するか確認しようとするものです。ファジングはハードウェアとの接続であるとか、メモリーに対してデータを読み込むとかというところを主要な目的としているもので、ソフトウェアのレベルでは、バッファーが最後を越えて上書きされないよう保護されているかどうかを確認するものです。ファジング自体は、大量の不正なデータを与えるもので、システムがその不正を検知できるかどうかというようにご理解いただければと思います。


Q:この2023年4月に発行されたものに対して、元々予定されていた2024年の3月までに何かアップデートは予定されているでしょうか?
 
A:今回の発行を前倒ししたのは、この4月が生誕25年というアニバーサリー的なものがあったためです。元々の計画では、今年にAmendment 4の発行で、来年2024年が文書の統合でした。来年は中間年として主に新しいドキュメント発行に向けて、ユーザーコミュニティからのブレティンボードなどのフィードバック質問を受けるということになります。それらが反映されるのは、2年後の2025年になる予定です。現時点では、2024年にはMISRA Cのアップデートの予定はありません。あと来年について、これは必ずやると約束はできないもので大きなものではありませんが、現在作業を行っているものでAddendum 2と3のようなCERT、C Secure、CWEとのマッピングを更新できる可能性があります。「embedded world」で新しいものを発表すると、注目を浴びることになります。


Q:検証ツールがこのMISRA C:2023に適合するのはいつぐらいでしょうか?
 
A:セールスとしてかエンジニアとしてかで回答は違ってきます。LDRAでも他社でもほぼすべてで営業サイドからは、もう2023年版には適合を完了していると伝えられると思います。私自身が具体的な開発チームに携わっているツールでは、この後すぐにリリースされるバージョンで、すべてではありませんがかなりの部分がサポートされます。LDRAの現時点のバージョンでもいくつかはサポートされていますし、次のバージョンでさらにです。


Q:開発するソフトウェアがMISRA C:2023に適合していることを要求している自動車メーカーについて、情報などお持ちでしょうか?
 
A:まだ持っていません。自動車メーカーは基本的にはISO 26262準拠を要件としており、ISO 26262は、MISRA Cの使用を強く推奨しています。ISO 26262の発行は2018年ですので、このMISRA CはMISRA C:2012(2019年発行のリビジョン1ではないもの)ということです。ISO 26262の規定文ではMISRA C:2012と言われていますが、MISRA C:2023はより良くなっているし進んだものですので、グッドプラクティスとしてはこの新しい版を使うことが推奨されます。私はISO 26262 WGのメンバーとして、ここの記述で2012版を2023版(これは今後改訂される可能性あり、と注釈付きで)に変更するべきであると提案しています。私のお勧めは、既存のプロジェクトであれば使用中のバージョンにとどまる、新しいプロジェクトであれば2023版を使用して開始する、ということです。また、既存のプロジェクトであっても、プロジェクトの進行状況に依存するでしょうが、もし可能であれば、新しいものへのアップデートを検討いただくということです。


Q:17ページで説明いただいた「オブジェクトと初期化」について、これらのルールは、C11やC18に対してこのように対応しましたということではなく、C99からあるガイダンス内容を更新したものという理解であっているでしょうか?
 
A:ネストした指示付き初期化はC11からのものですので、この4つの中で2番目のルール9.6がC11に対する新しいルールになっています。その他の3つについては、その時点での既存の課題を新しいガイダンスとして追加したものです。ルール18.9について、これは以前(C90)からの課題に関連しているものですが、「一時的な生存期間(temporary lifetime)」がC11から規格に導入された用語ですので、このルールは今回追加されたものです。


Q:MISRA C:23にはCERT Cと同じ内容のガイダンスが含まれていますが、その他にもCERT Cと同様のルールを新しく取り入れて行く予定でしょうか?それとも、現状MISRA Cにあるガイダンスだけが今後もCERT Cのルールとマッピングされて発表されるということでしょうか?
 
A:MISRA C:2023はCERT Cのルールのすべてではありませんが、大部分をカバーできていると思います。我々から見て、それほど重要ではないと考えたCERT Cルールいくつかについてはカバーされてないものがあります。CERTは既存の具体的なコードについてアセスメントするために書かれたもので、多くのルールが適用の例外を含めた記述「やりたいと思わない限り、何かをしてはならない」のような形になっていて、そこはMISRAの考えと一致しないからです。今後も定常的に対応マトリクスのレビューを行って、十分に優れたカバレッジでないもの(いくつあるか、今すぐは思い浮かびませんが)については、別目的のルール、あるいはCERT C対応のルールを一つふたつ作って、タイムリーに改善できると思います。CERT CのRobert Seacordと私はお互い友人であり、競争相手でもあるという関係ですので、そのようにできると思っています。


Q:メトリクスに関して、複雑度を下げるために関数を細かく分けた方が良いというお話がありましたが、関数を細かく分けすぎると関数呼出しのネストが深くなりすぎて全体の流れがわからなくなってしまうという欠点があるかと思います。複雑度以外にも考えた方が良いメトリクスで、お勧めのものがありましたら教えてください。
 
A:本当に数えきれないぐらい多くの尺度があって使用でき、多くのものが何らかのことを伝えます。しかし、いつ有益なことを言ってくれるかが大きな問題です。たとえば、多くの人がよくLOCについて言いますが、LOCは恐らくソフトウェアエンジニアにとって最も役に立たないメトリックです。ネスティングは重要ですが、さほどではありません。良いツールで呼出し図が生成でき、ネスティングを見ることができます。また、ある地点からの呼出しグラフを作成するツールもあります。私にとっては、階層構造が非常に大切で、同様にそれぞれの関数の構造も非常に重要です。テスト行うときに、可能な解すべてをカバーするために多くのテストケースが必要です。そのためコードが複雑になるとメンテナンスが困難になります。できるだけ関数を小さくしましょうとしたのはメンテナンスのためです。やってはいけないと指摘している指標ではなく、何をしようとしているかについて考えることが必要です。


Q:本日 ご紹介いただいたルールの細かい内容についても相談したく思っておりますので、後で連絡先を交換させていただければと思っております。その時にMISRA Complianceに関する相談、逸脱理由の考え方についての相談は可能でしょうか?
 
A:はい。ご質問だけでなく、ご意見やお問い合わせについて、直接メールで問い合わせていただいて結構です。


Q:現在のMISRAの制約下において、製品にOSを導入するときに考慮すべきことを教えてください。
 
A:ホスト型のアプリケーションを開発している場合は、標準ライブラリのルールでいくつか考慮すべきことがあると思います。MISRAでは逸脱手順を用意していますので、個別に違反を許すべきルールがあれば、そのメカニズムで対処します。個別のOSについて特定の懸念点がある場合には、それぞれ個別に我々とやりとりして対応するのがよいと思います。


MISRA C ガイドラインの進化

MISRA C:2012 からMISRA C:2023 への進化

関数コールグラフとフローグラフで視覚化

 

MISRA C:2023 準拠レポートの例

■講師紹介
 
* Andrew Banks氏はLDRAのテクニカルスペシャリストで、高信頼性リアルタイムや組込み分野のソフトウェア開発において30年を超える経験があります。Banks氏は英国コンピュータ協会(BCS)の公認フェローであり、1989年にランカスター大学を卒業後、航空宇宙や防衛、自動車の分野で経験を積んできました。Banks氏は規格の制定に取り組んでおり、2007年にMISRAに参加し、2013年初頭からはMISRA Cワーキンググループの議長を務めています。また ISO/IEC JTC1/SC7 の英国代表団長でもあります。
 
Andrew Banks氏はMISRA Cワーキンググループ議長として、Embedded World 2023においてMISRA C:2023MISRA C:2012 Amendment 4について発表しました。今回、氏がISOの国際会議に来日する機会に、本講演を企画しました。

*  十山 圭介 (富士設備工業(株) 電子機器事業部 技術部長)

 
京都大学大学院情報工学専攻修士課程修了。東京工業大学大学院総合理工学研究科博士課程満期退学。(株)日立製作所で最適化コンパイラやJava、システムLSI向けソフトウェアなどの研究開発に従事後、(独)情報処理推進機構ソフトウェア高信頼化センターにてC/C++コーディング規約ガイドや障害原因診断に関する調査・普及活動を行う。2018年より富士設備工業(株) 電子機器事業部。博士(工学)

  13:15~
  受付
 
 
  13:30~
  14:00 

  MISRA C について
 
 
  14:00~
  16:10

  MISRA C Evolution (途中休憩あり)

 
    ・MISRA C Evolution
 ・MISRA C:2023 New Guidelines
 ・Looking Forward… (今後の予定)
 ・Software Verification (aka “Static Analysis”)
 
  16:10~
  16:30
  質疑応答/ クロージング  

◇2023年6月12日(月) 午後1時30分~4時30分 予定( 逐次通訳有り)
◇会場:秋葉原コンベンションホール 5F 会場 5B
◇参加費無料(事前登録制)
 
■お申し込み方法: 下記の内容をご記入の上、 LinkIcon E-mail にてお申し込みください。
 
 「お名前、会社名、部署名、住所、電話、E-mailアドレス」
 
  *このセミナーは、弊社製品に関わる様々な情報を共有することを目的にしています。企業に所属していない方の参加はできません。
 
  *以下の内容に該当する方からお申し込みの場合には、参加をご遠慮いただきます。
   ・競合他社・同業者
   ・ソフトウェア設計・開発などのコンサルティングやトレーニングに従事する方 (弊社パートナーを除く)