ソフトウェアテストの設計、実施
ソフトウェア開発において、テストは品質を確保するために重要な工程です。
しかしながら、「テスト計画」「テスト設計」「テストケース」「テスト実施」といった言葉の違いや、それぞれの工程で何をすべきかが曖昧なまま進められているケースも少なくありません。
本記事では、ソフトウェアテストの基本的な流れである「テスト計画 → テスト設計 → テスト実装 → テスト実施」に沿って、各工程で行う作業内容を整理します。テスト観点やテスト条件の考え方、テストケース作成のポイント、テスト実施時の注意点までを体系的に解説します。組み込みソフトにおけるテストのポイントも紹介します。
ソフトウェアテストの流れ|計画→設計→実装→実施の4段階
一般にソフトウェアの開発において、テストは、以下の流れに沿って行われます。
テスト計画 → テスト設計 → テスト実装 → テスト実施
最初のテスト計画では、テスト全体の目的や、どのようなテストをどんなスケジュールで行うかといった大きな枠組みを決定します。次のテスト設計では、どんなテストを行ってどのような点を確認するのかを具体化します。実際にテストが実行可能になるように、一つひとつのテストの条件や入力値、期待する出力値などを記したテストケースを作成するところまでをこの工程で行います。そして、テスト実装、すなわちテスト環境を準備し、整えます。その後に、テストケースに基づいてテストを実施します。以下、その各工程について説明します。
1. テスト計画 ― テスト全体の方針を決める
テスト計画において決めるべき点とは
テスト計画では、テスト全体の基本方針と枠組みを定めます。すなわち「どのような考え方で、どのようなテストをどの範囲で行うか」を明確にします。主に次の各点の内容を決定します。これらのテスト計画は、実際の機器の設計と合わせて行います。どの段階のどのレベルのテストが、いつできるか、実際のソフト設計や実装と突き合わせてテストスケジュールや体制を検討します。
- テストの目的と目標 何をもって品質が確保されたと判断するのか、到達すべき品質レベルを定める。
- テスト対象と範囲 テストする機能、しない機能、対象外とする条件を明確にする。
- テストの種類 どの段階のテスト(単体テスト、結合テスト、システムテストなど)を行うか、どのようなタイプのテスト(機能テスト、パフォーマンステスト、セキュリティテストなど)を行うかを決定する。
- 体制・役割分担 誰がテストを設計し、誰が実施し、誰が結果を判断するかを決める。
- スケジュールと環境 テスト期間、使用する環境、ツール、実機の有無などを整理する。
- リスクと対策 テストや開発途中においてどのようなリスクがあり、どう対処するのかを決める。
2. テスト設計 ― 何を確認するかを具体化し、テストケースを作成する
テスト設計では、上記のテスト計画で定めた方針や枠組みを踏まえて、どのような「観点」や「条件」でテストを行うかを明確にし、実際に行うテストを具体的に決定します。テストの手順や項目までを詳細に定めたテストケースの作成までを行うのがこの工程での目標となります。
テストの「観点」とは
まずは、テストの「観点」を明確にする必要がありますが、テストの観点とは、「テストによってどのような点を確認したいか」ということを指します。例えば以下のような観点が考えられます。
- 機能の観点 各機能が仕様どおりに動作するか。
- 入出力の観点 どのような入出力があるか、またそれらの、正常値、境界値、異常値など、入力の種類によって出力がどうなるか。
- 状態遷移の観点 状態遷移(例:ログイン前→ログイン済み)のパターンごとに、遷移が正常に行われるか。状態遷移すべきではない入力をしたときに、状態遷移しないか。
- 異常・例外処理の観点 エラー発生時や想定外の状況に置かれた時にも適切な動作をするか。
テストを行う「条件」を決める
テストの観点が決まったら、次はそれらの観点ごとに、どのような「条件」でテストを行うのかを決めていきます。
例:「入力の観点」のテストにおける「条件」 → 入力値の上限・下限において、「最小値」「最小値+1」「最大値」「最大値-1」の4条件でテストを行う
これらの条件を決める際には、観点ごとに「どのような条件を確認すれば十分か」という網羅基準を定め、その条件が過不足なく洗い出されているようにすることが重要です。この例の場合、境界値での確認を上記の4条件で行っていますが、これらの条件で十分かどうかは、使用するテスト設計技法(境界値分析、同値分割など)や対象機能の特性に基づいて判断します。昨今の組み込み機器は搭載される機能や入出力が非常に多くなっています。それらを全て網羅するようにテストを行おうとすると、膨大な工数がかかってしまいます。そのため、機能の重要度や使用頻度を考えて必要なテストを過不足なくすることが重要です。
テストケースを作る上でのポイント
このようにして「テスト観点一覧」や「テスト条件表」を作成し、それらをもとに作られるのがテストケースです。整理した観点や条件を、実際にテストを実行できるところまで具体的に記述します。一般的なテストケースには、以下の要素が含まれます。
- テストケースID
- 前提条件(初期状態、設定など)
- 入力値や操作手順
- 期待される出力
- 実行結果(を記録する欄)
テストケースでは、「誰が実行しても同じ結果が得られる」レベルまでテスト内容を明確にすることが大切です。テストの設計者だけがテストを実施するわけではありません。実施者が正しくテストをすることができるように、曖昧な表現を避け、入力値や操作手順、期待される出力などをそれぞれ具体的に記述します。
3. テスト実装 ― テスト環境を整える
なぜテスト実装が重要か
テスト実装は、テストを実施するための環境を準備し、整える工程です。スケジュールの確認、テスト環境の準備(ソフトウェアのインストールや設定、スタブ・モックの準備、実機のセットアップなど)、テストデータの準備、といったことを行います。テスト実装をしっかりと行うことで、テストのスムーズな実施が実現します。
また、テストを効率よくすることができると、同じ時間でできるテストケースの数が増えます。振られた条件の網羅率(カバレッジ)を上げたり、テストのタイプを増やしたりすることで、ソフトウェアの品質を上げていくことができます。
4. テスト実施 ― 実行し、結果を記録する
テスト実施時に意識するべきこととは
いよいよテストの実施です。作成したテストケースに従って実際にソフトウェアを動かして、結果を確認・記録します。その際には、単に「動いた・動かない」を判断するだけでなく、以下のような各点を意識することが重要になります。
- 実行した環境や条件を正確に記録する
- 期待される出力と実際の出力との差分を明確にする
- 不具合発生時にその状況を再現できる情報を残す
再テストや回帰テストを行う際のポイント
不具合が見つかった場合は、バグとして報告し、ソフトウェアの設計・実装者による修正後に再テスト(確認テスト)や回帰テストを行います。そのため、不具合が起きた条件や状況、操作などは修正や修正後の再テストをする際に非常に有用な情報になります。テストを行った自身だけではなく、修正者や再テストをする人にもわかりやすいように情報を残す必要があります。テスト実施は、一度で終わるのではなく、修正とセットで繰り返される工程と言えます。
組み込みソフトウェアにおけるテストの設計と実施について
組み込みソフトにおけるテストのポイント
組み込みソフトの場合も、基本的なテストの流れは、上記の一般のソフトウェアの場合と同じです。ただし組み込みソフトは、特定のハードウェアに組み込まれて、特定の動作を確実にすることが求められるものであることから、以下のような点が、テストにおいてポイントになります。
- リアルタイム性が重要であるため、テスト設計においては、タイミングの観点のテストを考えることが必須。例えば、「処理応答時間の観点」のテストを「入出力の頻度が非常に多い状態」という条件で行う。
- 家電、自動車、医療機器など、安全性が強く求められる分野で使われることが多いため、通信エラーや想定外の操作、構成部品の故障といった異常が起きた時に、危険な動作をしないかを確認することが重要。すなわち、異常系のテストの重要性が高い。
最適なテストを設計、実施することが重要。国際規格も
以上、一般的なソフトウェアテストの流れに加えて、組み込みソフトのテストにおけるポイントを紹介しました。が、そのやり方はひと通りではありません。利用できるリソースや環境、予算などによっても、テストの方法は変わってきます。基本的な流れを理解した上で、この場合はどのようにテストを行うべきかを十分に考えて、最適なテストを設計、実施していくことが重要になります。ソフトウェアテストには、「ISO/IEC/IEEE 29119」という国際的な規格もあるので、その内容も参考にしてみるとよいでしょう。

