なぜ、MISRA-Cは進化するのか?
MISRA-CはC言語を安全に、信頼性高く、保守性を高めるためのコーディング規約として世界中で認識されています。その起源であるMISRA-C:1998からその時代時代で必要とされる要求のためにガイドラインは進化をしてきました。しかし、なぜ継続的にその変化が発生しているのでしょうか?
実は答えは簡単です。MISRA-Cが進化するのは、C言語が進化しているからなのです。
MISRA-Cのガイドラインは、プログラミング環境の変化に応じて変化するC言語の新しい標準に適用する必要があります。2012年を振り返ると、その時のC言語の標準はC90とC99で、それぞれ1990年と1999年に策定されたものです。それからC言語はC11(2011年)やC18(2018年)と進化して、マルチスレッドやgenericといった強力な機能が追加されています。これらの追加機能、特に C11 では並列処理や共有データに対して、安全で信頼性の高いコードを作成する際に新たな課題が生じます。
MISRA-C:2012のAmendmentを適用しない場合は、新しいC言語標準の新しい機能については十分にカバーすることができません。MISRA-C:2023では4 つの C 言語バージョン (C90、C99、C11、および C18)をサポートします。C18は大きな機能的な変化はありませんが、進化する言語とその機能に対してガイドラインアップデートする必要がありました。
MISRA-C:2023の新しいポイントとは?
MISRA-C:2023の重要な点は、言語の新しい文法への対応とその新しい文法への対応です。
たとえば、C11で導入されたatomicタイプを考えてみます。このアトミック型修飾子はマルチスレッド・アプリケーションのためには必須な機能です。これらは、異なったスレッドからの共有変数を安全にアクセスをサポートします。しかし、これらを間違って使うと、潜在的なリスクを発生させてしまいます。そのために、MISRA-C:2023ではいくつかのルールが追加されました。たとえば、以下のものがあります。
- ルール9.7:アトミック変数は使用する前に適切に初期化される必要がある。
- ルール 12.6: 構造体や共用体のatomic 変数では、要素に直接アクセスしてはすべきではない。
以下の例はC11で導入されたアトミック型修飾子を使った記述ですが、これらは先ほどの2つのルールを満たしていません。
アトミック変数に関するルールの違反例
なぜこれらのUpdateに注意しないといけないのか?
開発がマルチスレッドやマルチコアに対応するものであれば、先ほどのルールは必ず注意する必要があります。こうしたプログラミング・パラダイムが使用されるようになり、こうした新しいC11やC18の機能はより重要になってきます。このような機能はとてもパワフルですが、当然、責任も発生します。かりに最新のMISRAのガイドラインに準拠していなければ、微妙なバグや未定義動作が残り、不具合となるリスクがあります。
静的解析ツールが役立つワケ
もちろん、MISRA-Cのルールを把握するだけでは十分ではありません。開発中のコードが準拠しているかどうか、が重要です。バグを発生させると修正するために多くの時間やコストを使用しますが、静的解析ツールはソースコードを見ただけでそうした違反を掲出できるため、とてもコスト・パフォーマンスが良い手法となります。
組込み開発業界のリーダーとしての、IARはMISRA-C:2023に迅速に対応をしました。
IAR Embedded Workbench for ARM 9.60.2にアドオンされたC-STATを使うことで、みなさんのコードが最新のガイドラインに準拠しているかを確認し、プロジェクトが準拠しているかを確認できます。
追加されたC-STATツール(MISRA-C:2023関連)
MISRA-C:2023のプロジェクト適用がオススメ
MISRA-C:2023は安全性が必要な分野でのCプログラマのために必要な進化をしました。更新されたガイドラインはC言語の最新の機能に対応しており、より便利に機能を実装するだけでなく、より安全で、信頼性も高く、将来性のあるコードを作成するのに役立ちます。すでにMISRA-C:2012を使用している場合には、この新しい標準を皆様のプロジェクトに適用することを推奨します。
新しいガイドラインとそれを支えるIARのCSTATを採用することで、次世代の組み込み開発に取り組む準備が整います。
C-STATについてより詳しい情報は下記をご覧ください。
https://www.iar.com/ja/products/c-stat