MISRA について
MISRA コンソーシアムは25年間に亘り、MISRA C、MISRA C++ として知られるC言語サブセット(またはコーディング規約)を提供しています。これらは堅牢かつ保守が容易で、移植性の高いコードを開発するために活用され、安全で安心な電子システムソフトウェア開発のガイドラインとして、多くの業界で参照されています。
MISRA コンソーシアムは、志を同じくする個人のグループで構成される共同体であり、そのワーキンググループのメンバーは、自動車分野を含む安全関連の組み込みシステム業界の開発者やコンサルタントです。
LDRA社はMISRA ワーキンググループの発足直後から積極的に貢献しています。これはLDRA 社の安全・安心で信頼性の高いソフトウエアの開発を支援するという信念が、MISRA の目的と完全に一致しているためです。現在、MISRA C と MISRA C++ ワーキンググループの両議長を含む、複数名が参加しています。LDRA のツールにおける MISRA ガイドラインのサポートは、常にそのコミットメントを反映しており、現在も継続しています。
・Andrew Banks は2007年からMISRAに関わり、2013年初頭からMISRA Cワーキンググループの議長です。
・Chris Tapp は2001年からMISRAに携わり、現在は MISRA C++ ワーキンググループの議長であり、MISRA C ワーキンググループのアクティブメンバーです。
MISRA ガイドラインについて
・MISRA C、MISRA C++ のドキュメントは、まとめてガイドラインと呼ばれるいくつかのルールとディレクティブで構成されています。すべてのルールとディレクティブはガイドラインです。
・MISRA C++、MISRA C ドキュメントでは、「ガイドライン」という用語を、ドキュメント内のルールとディレクティブの総称として使用しています。
・MISRA Compliance ドキュメントには、「MISRA言語ドキュメント(ガイドライン) は、C および C++ 言語でのコーディングのガイドラインをまとめたものである」と記載されています。
したがって、「ガイドライン」という用語は、MISRA C および C++ ドキュメントの両方、それらのドキュメントの1つ、またはそれらのドキュメントに含まれる 2つ以上のルールおよび/またはディレクティブを指します。
これは紛らわしいように思えるかもしれませんが、通常、単語を使用する文脈によって意味が明確になります。
*MISRAはガイドラインであり、標準(Standards)ではありません。多くの人がそれらを標準と呼んでいますが、それはおそらくそれらが一般にコーディング標準と呼ばれる一連のドキュメントの一部であるためです。
*MISRA は「Motor Industry Software Reliability Association」の略でしたが、多くの業界で採用されるようになり、もはや「Motor Industry」に固有のものではありません。
MISRA ガイドラインへの準拠で得られる効果
・コンパイラ固有またはプラットフォーム固有の構造を回避することで移植性を向上させる
・予期しないアプリケーションの動作を避ける
・未規定および未定義の動作を避ける
・多くの場合、欠陥や潜在的なセキュリティの脆弱性を示唆する、到達不能または実行不可能なコードを特定する
・特定の言語構造を禁止することで、安全ではないコーディング慣行を削減する
・プログラムの複雑さを大幅に軽減する
・プログラムのテスト容易性を向上させる
・機能安全およびセキュリティ規格への準拠を容易にする
MISRAガイドラインは、セーフティクリティカルなシステムの開発に活用されてきましたが、近年セキュリティが重要な分野にも採用され始めています。自動車産業のみならず、航空宇宙、医療機器、金融、IoT、および産業用制御システム (IIoT) を含む、多くの分野で受け入れられています。
MISRA ルール、ディレクティブについて
・MISRA C ガイドラインは、「ルール」または「ディレクティブ」のいずれかに分類されます。ルールは、その要件の完全な説明が提供されているガイドラインです。それ以上の情報を必要とせずにソースコードがルールに準拠していることを確認できる必要があり、静的解析ツールがそれらの規則を確認できるようにする必要があります (いくつかの条件付きで)。ディレクティブは、コンプライアンスのチェックを実行するために必要な完全な説明を提供することができないガイドラインです。
・MISRA C++ ガイドラインは「ルール」として分類されます。MISRA C++ には、「ルール」と「ディレクティブ」の区別はありません。
MISRA C、MISRA C++ ルールへのコンプライアンスを支援するツールの対応表を用意しています。ご請求ください。
*各言語のルールとディレクティブの数は、エディションごとに異なります。例として、MISRA C:2012 (Third Edition, First Revision) には 175 のルールが含まれており、そのうち 16 が必須(Mandatory)、120 が必要(Required)、39 が推奨(Advisory)です。
MISRA AC について
MISRA AC ドキュメントは、MISRA ガイドラインの自動生成コードへの適用を扱っています。
MISRA AC AGC 「自動コード生成のコンテキストで MISRA-C:2004 を適用するためのガイドライン」は、5部構成のコアドキュメントであり、MISRA-C:2004 を補完するものでした。そのガイダンスは、MISRA C:2012 以降の MISRA C ガイドラインに統合されました。したがって、残りの 4つの文書は MISRA C:2012 を補完するものです。モデルから生成されたコードではなく、モデルに焦点を当てているため、言語固有ではありません。
・MISRA AC INTの紹介
・MISRA AC GMG 汎用モデリングの設計とスタイルのガイドライン
・Simulink および Stateflow の適用に関する MISRA AC SLSF モデリングの設計とスタイルのガイドライン
・自動コード生成のコンテキストで TargetLink を適用するための MISRA AC TL モデリングスタイルガイドライン
MISRA C:2023 と MISRA C:2012 Amendment 4
MISRA C:2023とMISRA C:2012 Amendment 4 (AMD 4) が Embedded World 2023 で発表されました。AMD 4では、マルチスレッドとアトミック型に対するルールとディレクティブを追加/変更し、既存のガイダンスについても、開発者がC言語をどのように使用しているかに合わせて明確にしています。また MISRA C:2023 は、以前のバージョンのガイドライン、修正版 (AMD 4 を含む)、および補遺が 1 つの包括的な版に統合されたもので、準拠が促進できます。
MISRA C:2023 について
この文書は、既存の4文書と新しいガイドラインAmendment 4 (AMD 4)を1つに統合したC言語サブセットです。
– MISRA C:2012 (3rd Edition, 1st Revision)
Guidelines for the use of the C language (Feb 2019)
– MISRA C:2012 Amendment 2
Updates for ISO/IEC 9899:2011 Core functionality (Feb 2020)
– MISRA C:2012 Technical Corrigendum 2
Technical clarification of MISRA C:2012 (Mar 2022)
– MISRA C:2012 Amendment 3
Updates for ISO/IEC 9899:2011/2018 Phase 2 — New C11/C18 features (Nov 2022)
– MISRA C:2012 Amendment 4
Updates for ISO/IEC 9899:2011/2018 Phase 3 — Multi-threading and Atomics (Mar 2023)
*マルチスレッドに関する新しいガイダンス
C11では、開発者が特定の実装(POSIX pthreadsなど)に縛られることなく、組込みシステムでの並行性のニーズをサポートするために、マルチスレッド処理の標準的な手法が導入されました。AMD 4は、マルチスレッド機能を安全なサブセットに制限するための12のルールと3つのディレクティブを追加することで、これらの問題の多くに対処します。
*Cアトミック型に関する新しいガイダンス
C11では、アトミック型やアトミック操作についてのセマンティクスとメモリモデルも導入され、開発者はデータオブジェクトを不可分に、すなわち他のスレッドによる干渉のリスクなしに操作できるようになりました。AMD 4には、3つの新ルールと3つの既存ルールの変更が含まれており、開発者がシステム全体でアトミック性を保証できるようになります。
*追加のガイダンス
AMD 4アップデートには、長年にわたり問題であるとわかっているC言語機能に対する4つの新ルールが含まれており、短整数マクロの使用、集成体型の初期化、可変長配列の使用、参照されない変数、に関連するものになります。これらの新ルールとは別に、既存のガイダンスを最新のものにするためのマイナーな改良もいくつか加えられています。
LDRAテストツールスイート
MISRA C ワーキンググループの議長であり、LDRA のテクニカルスペシャリストでもある Andrew Banks の指導の下、LDRAの静的解析ツール機能に MISRA C:2023 を追加することで、ますます複雑化してテストが困難になっているマルチスレッド、マルチプロセッサシステムで潜在的に危険なコードを特定します。 LDRA_MisraC2023


今後の予定
2019年1月の発表に続き、MISRA とAUTOSAR C++ ガイドラインを統合して、安全関連の C++ 開発用の単一の「頼りになる」言語サブセットを開発する作業が進行中です。その結果、MISRA によって公開された統合された MISRA–AUTOSAR C++ ルールセットは、共通のルールセットを含む統一されたドキュメントを提供します。これは引き続き自動車セクターやその他のセクターに同様に適用され、LDRAはこれを完全にサポートします。
MISRA ルールへの準拠支援ツール
MISRA ガイドラインには多くのルールがあり、検査によってそれらがすべてが実装されていることを確認することは可能かもしれませんが、それは非常に熟練した能力が求められ、労働集約的で、エラーが発生しやすい作業です。LDRA社が提供するMISRA チェック機能は、そのプロセスを自動化します。MISRA ガイドラインを参照してソフトウェアを効率的に静的解析することで、コードの品質、一貫性、および展開までの時間の短縮という点で、開発チームに具体的なメリットをもたらします。
静的解析はコード実装段階から使用され、ユニット、システム、または統合テスト中にもCI/CD等を介して自動的に適用され、ソフトウェア開発ライフサイクル全体でガイドラインへの準拠が損なわれないようにします。MISRA ルールのすべてのバージョンは、LDRAのツールに完全に統合されており、使い慣れたIDE等の開発環境内で効率的にMISRA への準拠をチェックすることができます。
そして非準拠コードの領域を特定して、豊富なレポートとグラフィカルな表示によりソースコードの理解を深めることで、MISRA ルールに沿ったテスト容易性、可読性、および保守容易性の向上が促進されます。静的解析により得られた情報は、MISRA ガイドラインで推奨される、テストの十分性を示す構造化カバレッジ解析機能のベースにもなっています。
"LDRA のレポートがMISRA のガイドラインをより詳細で簡潔な定義に分類するので非常に役立ちました。この改善された粒度により、多くの場合、個々のルール違反が何に関連しているかを簡単に理解できるようになります"
機能安全カンファレンス 講演資料/動画を公開
MISRA C、MISRA C++ の沿革
時代と共に変化する開発者の要求を満たすためにMISRA ガイドラインは進化しています。
1988年4月
MISRA C:1998 「Guidelines for the use of the C language in vehicle based software」は、C 言語の C90 バージョンを対象としてリリース。
2004年10月
MISRA-C:2004 「Guidelines for the use of the C language in critical systems」をリリース。元のバージョンを使用しているエンジニアからのフィードバックに対応。新しいタイトルは、この文書がさまざまな分野で広く使用されていることを反映している。
2008年6月
MISRA C++:2008 「Guidelines for the use of the C++ language in critical systems」をリリース。重要なアプリケーションでC++ の採用が増加していることへの対処として。
2013年2月
MISRA C:2012 「Guidelines for the use of the C language in critical systems」をリリース。C 言語の新しいC99バージョンに対応し、C90 との下位互換性を維持。
2016年4月
MISRA C:2012 – Amendment 1 「Additional Security Guidelines」 を無料ダウンロードとしてリリース。メイン文書と併せて使用される14の新しいセキュリティガイドラインを詳述。
2017年6月
MISRA C:2012 – 技術正誤表 1 「Technical clarification of MISRA C:2012」をリリース。主要文書の発行以降に提起された問題に対処し、それを補足。
2019年2月
MISRA C:2012 「Guidelines for the use of the C language in critical systems」を、元のMISRA C:2012 ドキュメント、Amendment 1、および Technical Corrigendum 1 の内容を照合するために更新された形式でリリース。
2020年2月
MISRA C:2012 – Amendment 2 「Updates for ISO/IEC 9899:2011/18 Core functionality」をリリース。C11およびC18内の未定義、未規定、および処理系定義の動作を扱う。
2022年3月
MISRA C:2012 – 技術正誤表 2 「Technical clarification of MISRA C:2012」をリリース。第3版、初版の発行以降に提起された問題に対処し、それを補足。
2022年11月
MISRA C:2012 – Amendment 3 「Updates for ISO/IEC 9899:2011/2018 Phase 2 — New C11/C18 features」 をリリース。新しいC11 と C18機能を扱う。
2023年3月
MISRA C:2012 – Amendment 4 「Updates for ISO/IEC 9899:2011/2018 Phase 3 — Multi-threading and Atomics」 をリリース。マルチスレッドとアトミック型のルールとディレクティブを指定し、フィードバックに基づいて既存のガイダンスを明確化。
2023年3月
MISRA C:2023 「Guidelines for the use of the C language in critical systems」をリリース。MISRA C:2012の内容を、その後の修正および技術的な正誤表とともに照合。
MISRA C:2012 は国際的に広く産業界で採用されるMISRA の進化版。ISO 9899:1999 (C99)のサポートを追加する一方、C90のサポートも維持。コードの正当な使用あるいは振舞いを阻害しないこと・望ましくない結果を導かないことを目的に、ルールはより正確に定義され直した。ルールの精度や分類を改善し、より包括的な解釈で高い理解を得られるようにすることで、プログラマの労力を軽減して、セーフティクリティカルなアプリケーションのソフトウエアに関わるリスクを緩和する。ツールによる誤検知を削減してマニュアルレビューの工数を飛躍的に軽減できることも見逃せない。
・C90に加えてC99をサポート
・ルールの精度を改善(正当な使用や振舞いが阻害されない)
・Mandatory(必須)ルールを追加して、Required(必要)、Advisory(推奨)を補完
・ルールをシステムワイドと単一コンパイルユニットに区別
・決定可能・決定不可能なルールに分類
・自動生成コードに対するルール (例:オートコードのswitch文にはdefaultがあってはならない)
1998年、MISRAは車載システムへのC言語の使用に対するガイドラインを発行。これはMISRAの安全レベル2、3に分類される自動車システムへの安全なCコードの利用を促進する目的で作成されました。
このMISRAは自動車業界で広く受け入れられ、航空機、通信システム、医療機器、防衛、鉄道システムなど様々なドメインでベストプラクティスとして採用されるようになりました。
MISRA C:2004は、産業界とツールベンダの貢献により広範に改訂されました。MISRAに準拠するツールを提供する第一人者であるLDRA社は、このMISRA C:2004制定に貢献し、新規に追加されたルールや改訂された内容を包括する為に、ツールを拡張しました。
1998年、MISRA(Motor Industry Software Reliability Association)は車載システムへのC言語の使用に対するガイドラインを発行。これはMISRAの安全レベル2、3に分類される自動車システムへの安全なCコードの利用を促進する目的で作成されました。
公開以来、ベストプラクティスとして自動車業界だけでなく、製品の安全性、高信頼性が求められる他の業界でも、広く採用されています。
MISRA-C:1998には1~127のルールがあり、そのうち93は必須、34はルールへの準拠を推奨されています。MISRA C:2004には141のルールがあり、そのうち121は必須、20はルールへの準拠を推奨され、環境やランタイムエラーに至る21の項目に分類されています。