Special
» 2019年03月14日 10時00分 公開

組み込みソフトウェアテスト:MISRAもCERTもAUTOSARも、コーディング規約はどうすれば順守できるのか

テクマトリックスが販売する「C++test」は、車載機器や産業機器、医療機器などの組み込みソフトウェア開発で広く利用されている、C言語/C++言語向けのテストツールだ。2019年3月にリリースされたC++testの最新バージョンである10.4.1は、どういった機能拡充が行われているのだろうか。

[PR/MONOist]
PR

 IoT(モノのインターネット)やAI(人工知能)の活用が製造業に求められるようになる中で、自動車をはじめ産業機器や医療機器などに用いられる組み込みソフトウェア開発に求められる要件も大きく変わりつつある。もちろん、それらの組み込みソフトウェアの品質を確保するためのテストツールにも対応する機能の拡充が求められている。

 テクマトリックスが販売する「C++test」は、車載機器や産業機器、医療機器などの組み込みソフトウェア開発で広く利用されている、C言語/C++言語向けのコーディング規約チェックやフロー解析、単体テストやカバレッジ計測などを統合的に行うテストツールである。同社は2019年3月、C++testの最新バージョンである10.4.1をリリース。同バージョンでは、どういった機能拡充が行われているのだろうか。テクマトリックス システムエンジニアリング事業部 ソフトウェアエンジニアリング技術部 ソフトウェアエンジニアリング技術一課の藤澤克貴氏に聞いた。

コーディング規約のルール搭載数は3,790に

テクマトリックスの藤澤克貴氏 テクマトリックス システムエンジニアリング事業部 ソフトウェアエンジニアリング技術部 ソフトウェアエンジニアリング技術一課の藤澤克貴氏

 車載機器や産業機器、医療機器といったミッションクリティカル分野の組み込みソフトウェア開発では、MISRA CやMISRA C 2004、MISRA C++ 2008、MISRA C 2012などのコーディング規約の順守が強く求められることが多い。

 また最近では、さまざまな機器がIoT化する流れの中で、サイバーセキュリティを確保するためのコーディング規約として、米国のCERT Coordination CenterがリリースしているCERT C コーディングスタンダードやC++ コーディングスタンダードへの対応なども求められつつある。インターネット接続が当たり前になりつつある昨今のシステムでは、セキュリティ対策を施さないシステムが危険極まりないのは言うまでも無い。「しかし、これまでセキュリティ関連になじみのなかった組み込みソフトウェア開発者にとって、IoT化に向けてセキュリティ対策を独自に講じることは容易ではありません。そこで、その答えの1つとして検討されているのが、CERT C/C++ コーディングスタンダードへの準拠なのです」(藤澤氏)。

 ただし、MISRAやCERTなどのコーディング規約は膨大な量のルールから構成されるので、全ての規約に違反しないコードをツールなしで開発するというのは不可能である。そのため、適切なコーディング検証ツールを利用して問題箇所を随時修正しながらコーディングを進めて行くことになる。C++testは、こうした要件に対応するツールであり、実際に2017年リリースのVersion 10.3.4では、既にMISRA C 2012への対応を完了している。

 また、C++言語向けコーディング規約の業界の動向に対応する形で、C++testの最新バージョンであるVersion 10.4.1は、MISRA C/C++に加えてCERT C/C++、さらに車載ソフトウェア標準であるAUTOSARに対応するためのC++のコーディング規約であるAUTOSAR C++への対応も追加されている。

 現在も、組み込みソフトウェア開発に用いられるプログラミング言語として、C言語が一般的であることに変わりはない。藤澤氏は「しかし車載機器については、自動運転なども絡んでシステムアーキテクチャそのものが切り替わるケースが出てきています。この際に開発言語もCからC++に入れ替わっている事例が増えつつあるのです」と説明する。2017年3月にAUTOSAR C++がリリースされたのもこの流れに沿った話であり、C++testもそういったトレンドにいち早く対応しているわけだ。

 なお、C++testでは、コーディング規約への対応に先立ち、自動車向け機能安全規格のISO 26262や産業機器向け機能安全規格のIEC 61508のツール認証を取得している他、医療機器向けの安全規格であるFDAに準拠するための、推奨ルールセットも搭載している。こうした安全規格への準拠が必要になるミッションクリティカル分野のシステム開発では、設計と実装、そして検証に関して細かく要求が規定されており、さらに成果物がその規格に準拠して作成されたことを証明する必要もある。C++testはこのうち、実装と検証に関して、安全規格が要求する規定に準拠した形での支援が可能となっており、これでシステム開発の負荷削減と品質の向上が可能となっている。

 なお、C++testのコーディング規約のカバー度合を示す数字としてルールの搭載数がある。今回のVersion 10.4.1では、全部で3,790ものルールが用意されており、このうち約1,500が今回のバージョンアップで追加された。

 さらに、この3,790のルールに加えて、独自のコーディングルールの作成が可能な機能も用意している。「社内やプロジェクトのコーディング規約にあわせて、ルールを修正したり、新規に作成したりできます。このツールの機能を含めて、C++testのルール対応率は静的解析ツールとして非常に高いものとなっています」(藤澤氏)という。

C++testのVersion 10.4.1におけるコーディング規約関連の機能 C++testのVersion 10.4.1におけるコーディング規約関連の機能。これらのルールセットを常に全て適用するわけではなく、利用したいルールを選んでそこから細かく設定することもできる。このあたりは開発の要件として事前に決まっていることが多く、それに合わせて設定を行うことになるだろう

静的解析とフロー解析、単体テストなどをオールインワンで扱える

 もちろん、C++testの機能はコーディング規約への対応だけにとどまらない。フロー解析を利用してのバグの検出機能に加え、単体テストの実行やこれに必要なテストケース/スタブの設定、単体テストのカバレッジ計測、さらにシステムテストにおける動的なカバレッジ計測やエラー検出までを全て網羅している。

C++testのフロー解析の機能概要 C++testのフロー解析の機能概要。変更したコードをチェックインして退社後、夜間バッチでフロー解析を自動実行し、朝にはレポートが出ているといった使い方も可能だ

 オールインワンツールであるため各機能は全て統合されたインタフェースで提供されており、テストごとに別々のツールを立ち上げるといった手間も無い。当然ながら、クロスコンパイラを利用して開発を行っている環境でもこうしたフロー解析や単体テスト/システムテストを行える。ターゲット環境上だけでなくシミュレーター上で利用することも可能だ。

 Version 10.4.1におけるテストツールの機能向上では、テスト用のスタブ機能のフレームワークを一新した。スタブの管理、スタブの振る舞いの設定が簡略化され、テストケース作成工数をより効率化できるようになった。こうした細かい所での使い勝手向上も、バージョンアップにおける特徴の1つになっている。

C++testの単体テストの機能概要 C++testの単体テストの機能概要。Version 10.4.1では、テスト用のスタブの生成を行うフレームワークを一新した

 また、先述したクロス環境におけるサポートコンパイラが大幅に増加したのもVersion 10.4.1の特徴であり、34ほどのコンパイラが新たに追加されている(コンパイラのバージョンアップも含む)。「Visual Studio」や「Eclipse」をベースとした統合開発環境(IDE)などでは、プラグインの形で簡単にC++testを統合できるので、現在利用している環境を変えずにC++testを利用可能になるのもありがたい点だ。ターゲットOSとしては、Windows及びLinux(32bit/64bit)がサポートされている。

「Parasoft DTP」でMISRA Compliance:2016のレポートを自動生成

 C++testの最新バージョンであるVersion 10.4.1とともに、組み込みソフトウェア開発を支援してくれるのが、品質の可視化と開発ワークフローの高速化を実現する「Parasoft DTP」である。

 Parasoft DTPは、ソフトウェア開発におけるさまざまな情報(テスト結果、メトリクス、カバレッジ、構成管理など)を自動的に収集・集約し、プロジェクトの状況をレポーティング・分析するツールだ。C++testと連携することで、ダッシュボードにコーディング規約の順守状況やプロジェクトの品質状況などを随時表示できる。C++testとParasoft DTPの組み合わせにより、開発者に余計なレポーティングの作業を強いることなく、リアルタイムで開発中の状況確認ができるので、プロジェクト管理者の心強い武器になるし、開発者にとっても作業の優先順位を決めるのに役立つ。

 このParasoft DTPも、C++testに合わせてバージョンアップし、ダッシュボードのPDFレポート生成の機能が追加された。このレポート機能でも結果の共有に役に立つが、さらに車載機器のソフトウェア開発向けに有用なのが、このレポート機能を拡張した「コンプライアンスパック」である。

 車載機器の開発ではさまざまなコーディング規約への対応を求められるが、それだけでなく「MISRA Compliance:2016」への対応も必要になりつつある。MISRA Compliance:2016は、MISRAが2016年に規定したMISRAのコーディングガイドラインへの準拠と証明のためのガイダンスだが、最近では欧米の自動車メーカーを中心にシステム納入の際の条件として対応を求めるようになっているのだ。

 MISRA Compliance:2016では、「ガイドライン施行計画書(Guideline enforcement plan)」「ガイドライン再分類計画書(Guideline re-categorization plan)」「逸脱報告書(Deviation record)」「ガイドラインコンプライアンスサマリー(Guideline compliance summary)」「逸脱の定義(Deviation permit)」という5種類のレポートの作成が必要になるが、これらを手作業で作成するのは猛烈な手間がかかる。しかし、コンプライアンスパックを利用するとこれらのうち4種類のレポートを自動生成することができる。つまり、テストが終わって納品の準備ができた段階で、Parasoft DTPから生成するだけで済むわけだ。

C++testとParasoft DTPの連携によるMISRA C 2012順守用のダッシュボード C++testとParasoft DTPの連携によるMISRA C 2012順守用のダッシュボード。「コンプライアンスパック」を使えば、ダッシュボードのヴィジェットをクリックすることで、MISRA Compliance:2016に準拠した4つのレポートをいつでも出力できる

 テクマトリックスは他にもさまざまなツールを扱っており、これらを連携させてさらに効率化を図ることも可能だ。しかし、C++test単体、あるいはC++testとParasoft DTPの組み合わせだけでもかなりの開発効率の向上が図れるだろう。特に、最新の規格やトレンドにきちんと追従していくことの重要度は年々増しており、絶え間ないアップデートでこうしたトレンドをフォローしてゆくC++testは、今後のシステム開発に欠かせないツールになるだろう。

Copyright © ITmedia, Inc. All Rights Reserved.


提供:テクマトリックス株式会社
アイティメディア営業企画/制作:MONOist 編集部/掲載内容有効期限:2019年3月29日