クリティカル・システムに使う市販ソフトウェアの検証方法(3) ―― 検証記録に含めるべき事項を考える
本連載では,市販ソフトウェアの使用に際して求められるリスク分析や検証作業,市販ソフトウェアの検証記録の作り方について解説する.今回は,テストの基本を確認しつつ,検証記録に必要な事柄について解説する.(編集部)
技術解説・連載「クリティカル・システムに使う市販ソフトウェアの検証方法」 記事一覧
第1回 ソフトウェア品質論の推移とシステムの安全性確保の考え方
第2回 誰が,何をもって市販ソフトウェアが信頼できることを証明するのか
第3回 検証記録に含めるべき事項を考える
第4回 市販ソフトウェア・ベンダが提供する検証記録の内容
4.市販ソフトウェアの検証(リアルタイムOSを例に)
ここからは,リアルタイムOSを例として,市販ソフトウェアの検証記録の作り方について解説していきます.リアルタイムOSを選んだ理由は,現在,多くの組み込み機器の重要な部分にリアルタイムOSが使用されており,リアルタイムOSに何か問題があるとエンド・ユーザの安全を脅かす場合があるからです.
●テストの基本は「明確な仕様」と「漏れのないテスト・ケース」,「予想と結果の一致」
リアルタイムOSの検証の話をする前に,まず,テストの基本について書いておきます.なぜなら,ソフトウェア・エンジニアは検証記録の残し方について十分に教育されていない様子が見受けられるからです.
ソフトウェアもハードウェアもテストの基本は同じです(図1).まず,テストを実施するためには要求仕様の定義が必要です.要求仕様が定まらなければ,テストの範囲やテストの網羅性,テスト結果の妥当性の判定を行うことができません.要求仕様の定義が明確でないテストは場当たり的なテストであり,テスト結果が妥当かどうかはっきりしません.テストを計画,実施する前に,必ず要求仕様を定義し,仕様を明確にします.
図1 テストの基本的な考え方(デバッグ工学研究所 松尾谷 徹氏の講演資料より引用)
要求仕様とテスト・ケースから導き出される予想結果と,実際のテスト結果が一致するかどうかを確認する.

次に必要なのは,要求仕様に対して漏れのないテスト・ケースを作成することです.要求仕様の一つ一つには範囲がある場合があり,その際には範囲の端々をテストする境界値テストを含めます.そして,要求仕様とテスト・ケースから導き出される予想結果を作成しておきます.
その後,テスト・ケースをテスト対象のプログラムに通し,テスト結果と予想結果が一致するかどうかを確認します.
言われてみれば当たり前のテストの基本も,現場では驚くほど実現できていません.図2を見てください.これもリアルタイムOSのテストを目的に作成された文書の一つですが,テストの基本的な考え方が理解されていないことが分かります.これでは,検証記録として使うことはできません.
図2 検証結果として使えないテスト結果の例

図2が検証記録として使えない理由を以下に示します.
- 要求仕様が定義されていない(要求仕様が明示されていれば,「タスク機能の動作確認」といった抽象的なテスト・ケースにはならないはずである)
- テスト・ケースが特定されておらず,要求仕様をテストが網羅しているかどうか分からない
- 合否判定基準や予想結果が記載されていない
- 合否の結果が記録されていない
テスト結果の記録が図2のようになってしまうのには,以下の原因があると考えられます.
- ソフトウェアの改変が多いため,テスト・ケース作成者が「このテストによって製品が確定するわけではない」,「同じテストを指示されることはない」と考えており,テストに対するモチベーションが低い
- テスト・ケース立案者とテスト実施者,テスト記録の作成者が同一人物であるため,記録がいいかげんになる
- 要求仕様が提示されていないため,形だけのテスト結果を作ればよいと考えている
- 「テスト結果の評価者がテスト結果を判定できるわけがない」と高をくくっている
- テストをしても問題など出ないという自信がある
図2のような記録は検証記録ではなく,単なる作業記録です.何をインプットして何がアウトプットされたのかも分からないし,再テスト(回帰テスト)しようとしてもできません.検証記録として成立させるためには,インプットとアウトプットが明確であり,合否判定基準に照らし合わせて判断した結果が必要です.また,同じテストを回帰テストとして実施できるようになっている必要があります.
電気的安全性の試験などとは違って,ソフトウェアのテストは白黒を付けにくいことがよくあります.しかし,検証記録とするのならば,誰がテストしても合否を判定できるテスト・ケースを設計しなければなりません.この基本が分かっていないと,せっかく作成したテスト結果を,検証記録として使うことができません.