機能安全認証おけるソフトウェア開発のテストプロセスとは?

解析ツールの活用における現実解とは?

機能安全認証における「自社でやるべきではない項目」のひとつとして解析ツールがあげられるが、日本の開発現場では解析ツールを使用していない企業も未だに少なからず存在するのも事実である。
その理由として例えばMISRAコーディング規約の場合、解析すると数千/数万もの違反が検出され、適用を諦めてしまうケースや、逆に効果が無いと判断してしまうケースがある。

一方でグローバル市場を相手にする場合、解析ツールでのコードレビューやそのエビデンスが存在しなければ、そもそも受け入れられないこともある。機能安全認証もその一つといえる。

現実解としては、「やる」or「やらない」という二極での判断ではなく、付加価値のない活動に労力を費やすことなく規格の根本的な要求を満たし、MISRAを順守していると主張できるような理想と現実との中間地点を見つけ、「やる」判断をすべきである。尚且エビデンスを用意することも満たすためには、ソフトウェア開発で解析ツールを使う流れは必然といえる。

実際に、弊社(テクマトリックス)で取り扱う解析ツールC++testを例にしても近年、解析ツールの普及が爆発的に広がってきている。MISRAやCERT、AUTOSARといったコーディング規約において、解析ツールを使うことが前提で定義されていることもあり、「やらない」という選択が減少傾向であるためだ。

機能安全認証で求められるソフトウェア検証

機能安全認証開発では、システムの複雑さ、ソフトウェア、メカトロニクスの肥大化に比例して、系統的故障や偶発ハードウェア故障のリスクも増加する。そのためIEC 61508-2(ハードウェアおよびソフトウェア/ハードウェア統合とシステムとしての要求事項)、IEC 61508-3(安全関連ソフトウェアの実現フェーズとしてソフトウェアの要求事項)には、実行可能な要求事項および手順を提示することによって、許容できるレベルにまでリスクを低減するための指針が含まれている。

ソフトウェア開発のテストにおいては、どの企業においてもソフトウェアの品質確保のため、なにかしらのテストプロセスを定めた上でテストを実施している。しかし、機能安全認証の場合、従来のままでは不十分という答えになるだろう。機能安全認証ではソフトウェア開発ライフサイクルに応じたテストが必要で、十分にテストを実施したという文書(エビデンス)が必要になるためである。 また、設計又は実行コードのテストあるいは検証を行うツール(静的解析ツール,動的解析ツールなど)はT2クラスとなり、使用するツールの妥当性も証明する必要があり、機能安全認証ならではの作業が必要である。

図1. ライフサイクルを通じて求められる文書およびコード(V字モデルでの例)

機能安全認証で求められるテストは人力で 実現可能なのか?

ソフトウェアのソースコードは増加・複雑化傾向にある。たとえとても優秀なエンジニアでそのシステムを熟知したスペシャリストであったとしても、コード検証において、目視レビューでのコーディング規約のチェックやランタイムエラーチェックは困難であるといえる。

それ以前に、機能安全認証においては、C /C++言語を単体で使用することは推奨されていない(NR)。つまり、組込み機器開発で多く用いられるC/C++言語では、静的解析ツールの使用は必須ということである。

図2. ICE 61508-7(Table C.1) ~抜粋~

また、動的解析では、SIL2以上で境界値分析からのブラックボックステスト、ホワイトボックステストにおいてはSIL3でbranch coverage(C1)、SIL4でcondition coverage(C2)・MC/DCといったカバレッジ基準が必要となる(HR)。

図3. IEC 61508-3(Table B.2) ~抜粋~

組込み機器開発では、従来デバッガによるステップ実行でのテストが行われていたが、statement coverage(C0)を基準としている場合が多く、それ以外のカバレッジ計測は難しい。尚且ステップ実行では、適切なエビデンスを残す手段が無いに等しい。
さらに、この方法で特に問題視すべき点は「回帰テスト」である。ソフトウェアの変更が発生するたびに、ステップ実行による回帰テストを行うことは現実的に不可能だろう。機能安全認証では回帰テストの観点、カバレッジ要求の観点、エビデンス作成の観点からもツールを用いた単体テストは必要不可欠である。

コーディング規約の選定と静的解析ツールの有効活用

前述の通り、コード検証では静的解析ツールによるコーディング規約の適用が必要である。適用するコーディング規約はその有効性が証明されていなければならない。

コーディング規約にはMISRA、Effective C++、JSF、IPAといった様々な規約が存在するが、実際にはMISRAコーディングガイドラインを適用することが多い。今後はセキュリティの観点でCERT C/C++の適用も必要になってくる可能性もある。MISRAの主な目的は、車載ソフトウェアの開発において、C言語の実用性を確保しつつ、安全性、信頼性、移植性を確保したプログラミング手法を促進することであるが、セーフティクリティカルなシステムのためのソフトウェア コーディングのガイドラインであるため、機能安全認証が必要なシステムでも有用である。今日では車載ソフトウェアに留まらず、航空システムや医療システムなどの、安全性が不可欠な幅広い産業で適用されている。

静的解析ツールは特定のコーディング規約の適用以外にも、構造化プログラミング(Table A.4)やモジュールサイズの制限(Table B.9)にも活用できる。さらに、制御フロー解析/データフロー解析(Table B.8)といったフロー解析を行える静的解析ツールも必要となる。
これらの機能はツールによって、パターンベースの解析やメトリクス解析を行うツール、フローベース(プログラム実行ベース)の解析機能を行うツール、どちらも有しているツールなど、ツールごとのコンセプトによって異なる。導入コスト・環境構築のコスト・ツール妥当性の証明のためのコストなどの観点からもツール選定が必要になる。

機能安全に最適な解析ツールの一例 (C++testを使ったテスト効率化)

機能安全対応における解析ツール選びの主なポイントは、3つある。

a.機能
b.エビデンス作成の効率化
c. 導入性

ここでは、代表的なツールとして、機能安全認証開発においてグローバルで広く利用されているParasoft社「C++test」を例にあげて説明する。

a.機能 (静的解析機能/動的解析機能)

C++testは、静的解析と動的解析の両方の機能を備えた機能安全開発に最適なオールインワンツールである。
C++testが機能安全認証における要求のどこに寄与できるかは多岐にわたるため全ては挙げられないが、代表例として以下の機能が有効活用可能である。

静的解析

  • コーディング規約のチェック
    MISRA、Effective C++、JSP、IPA、CERTなど
  • フロー解析
    データフロー・制御フローによる解析
  • メトリクス解析
    HISメトリクスの解析

動的解析

  • 単体テスト、モジュールテスト
    ブラックボックステスト・ホワイトボックステスト(9種類のカバレッジ計測)など
  • アプリケーションモニタリング
    統合テスト(システムテスト)時のカバレッジ計測、メモリアクセスエラー、メモリリーク、メモリ破壊チェックなど

b.エビデンス作成の効率化(レポート機能/ツール認定)

C++testのレポート機能では、静的解析においては、解析を行ったルールの一覧や抑制(修正不要と判断した違反)と抑制理由を1クリックで出力することができる。どのようなテストを行った結果、違反が0件、つまり対象のプログラムが当該のコーディング規約を遵守しているといったエビデンスを簡単に出力することができる。単体テストでは、テストに使用したコンパイラ情報・C++testの設定情報、カバレッジ計測結果など、こちらも1クリックで出力ができる。

また、TÜV SÜD社によりIEC 61508-3:2010を満足するT2クラスのソフトウェアサポートツールとして、またISO 26262-8:2011を満足するTCL3のソフトウェアツールとしてツール認定も受けており、出力したレポートはそのまま認証機関へ提出が可能である。

図4. 単体テストレポート例

c. 導入性(立ち上げ工数/サポート)

組込みおよびクロスプラットフォーム開発では、静的解析では開発で使用するクロスコンパイラにてテストを行い、動的解析ではシミュレータや実機などのターゲット上で行えるため、より実環境に近いテストが行える。
しかし、テスト環境の構築は開発者が想定しているよりも時間がかかる。統合開発環境によって設定が異なるため、ツール側でその開発環境ごとの設定を吸収するための設定が必要になるためである。静的解析ツールや、動的解析ツールなど、ツールごとに設定を行う必要があるが、C++testでは静的解析と動的解析のテスト環境がひとつの環境構築で済むということもオールインワンツールの強みである。

図4. クロスプラットフォームでの単体テストの流れ

多機能のツールを導入した場合に、十分にツールを使いこなせないといった課題がありがちだが、エンジニアによる立ち上げフォローや問い合わせ対応など、Parasoft社のツールを20年以上取り扱っているテクマトリックスの安心サポートが受けられる。

執筆者紹介 テクマトリックス株式会社 ソフトウェアエンジニアリング事業部 藤澤 克貴

Parasoft社のC/C++test言語対応の静的解析・動的解析ツール「C++test」のプリセールス、導入支援、保守サポートに従事。ソフトウェアエンジニアリング事業部ではソフトウェア開発における工数削減と品質向上を可能にする各種開発支援ツールと、チーム開発におけるエラーの予防・プロジェクト管理・品質管理を支援するソリューションを提供しています。ソフトウェア開発でお困りのことがございましたら、お気軽にご連絡ください。
※テクマトリックスではC# / VB.NET言語向け静的解析・動的解析ツール「dotTEST」、Java言語向け静的解析・動的解析ツール「Jtest」も販売しています。

お問い合わせ先:se-info@techmatrix.co.jp
会社URL:https://www.techmatrix.co.jp/