皆さんこんにちは! テストエンジニアのマツキョーです!
ソフトウェア開発で品質を担保する活動の1つがソフトウェアテスト(以降、テスト)です。テストには様々な種類がありますが、基本的にテストを設計して実行するという工程で実施されます。
ですが、テストといえばテスト実行のことをイメージされる方も多いのではないでしょうか。現在はテスト技法が確立されたり、プロセスの概念が浸透してきたことでテストプロセスという考え方もかなり浸透してきました。しかしながら、現在もテストを「ひとつの作業」と捉えている人や、詳しいテストプロセスについて知らない人も少なくありません。
テストプロセスとは、「テスト計画」「テストのモニタリングとコントロール」「テスト分析」「テスト設計」「テスト実装」「テスト実行」「テスト完了」の7つで構成された テストの目的を達成する確率を高めるための活動 のことです。その中でも「テスト分析」は、テスト計画やテスト設計に比べるとまだまだ知名度の低い活動の1つではないでしょうか。そんな少し影の薄いテスト分析ですが、私はテスト全体の成否を分けるくらい重要な工程だと考えています。
私が「テスト分析」を重要だと考える理由として以下の3つがあります。
- 理由1:『テスト分析』は、テストの土台をつくる作業である
- 理由2:『テスト分析』は、最もテストを理解しやすい工程である
- 理由3:『テスト分析』は、テストと品質を繋ぐ中継地点である
この記事では、テスト分析がどのような活動なのかを説明した後、3つの理由を通じてどのように重要かをお話できればと思います。またテスト分析を適切に行うことのメリットや、適切に行えなかった場合のリスクについても触れていきたいと思います。
テスト分析とは?
テスト分析の位置づけ
まず、テスト分析がテストプロセス全体のどこに位置するのかを確認しましょう。
上図では、テスト分析はテスト計画とテスト設計のあいだに位置しています。JSTQBテスト技術者資格 Foundation Level シラバスでは、以下のように記述されています。
テスト分析では、テスト可能なフィーチャーを識別し、テスト条件を決めるためにテストベースを分析する。言い換えると、テスト分析では計測可能なカバレッジ基準から見た「何をテストするか」を決定する。
JSTQB-SyllabusFoundation_Version2018.J03
要約すると、テスト分析はテストベースからテストする機能とテスト条件を定義することで「何をテストするか」を決める工程ということが書かれています。
テスト分析の作業
テスト分析の作業は、以下の4つのステップで行います。
- ステップ1:テストレベルに適したテストベースを読み解いて情報を整理する
- ステップ2:テストベースの欠陥を見つける
- ステップ3:テスト対象の機能とテスト条件を洗い出してカテゴライズし優先度をつける
- ステップ4:テストベースとテスト条件のトレーサビリティを確立する
各ステップを理解するために、ここまでに度々出てきた「テストベース」という用語を知る必要があります。ISTQB Glossary では、以下のようにテストベースが説明されています。
テスト分析と設計のベースとして使用するあらゆる情報。
ISTQB Glossary
具体的には、要件定義書、機能設計書、ユーザーストーリーといった開発ドキュメントが主なテストベースとなりますが、開発者との口頭でのヒアリング内容といった形のない情報もテストベースに該当します。
まとめると、テスト計画で定めたテスト目的を達成するためにテストベースを分析して、テストする機能やテスト条件を導き出していく工程が「テスト分析」というわけです。
簡単ではありますがテスト分析についてご説明したところで、ここからはテスト分析が重要だと考える理由をひとつずつお話していきます。
『テスト分析』は、テストの土台を作る作業である
テスト分析では後続のテスト工程に影響するテスト条件を決める
テストは、テストプロセスを通じて目に見えない品質を積み上げていく活動と言えます。「テスト計画」でテストの目的や達成するためのアプローチを定め、「テスト分析」「テスト設計」「テスト実装」で目的を達成するためのテストを構築し、「テスト実行」で品質を担保していきます。その中でも「テスト分析」は、以降のテスト工程にも影響する テスト条件 を決める工程です。
テスト分析が適切に行われない場合のリスク
テスト分析が適切に行われない場合、以下の問題が発生する可能性があります。
- テスト条件の抜け漏れが出る
- 誤ったテスト条件を定義してしまう
後続の工程であるテスト設計では、テスト条件を基にテストケースを作成します。そのためテスト条件に抜け漏れがあると、必要なテストケースが作成されず、テストしていない機能や条件ができてしまいます。同様に誤ったテスト条件が定義されると、間違った仕様のままテストケースが作成されてしまう事でしょう。いずれの場合も、そのままテストが終わってしまうと 不具合の流出 や 本来の品質・価値を提供できない というリスクが高まります。
テスト条件は後続のテスト工程の基礎となる重要な要素であることから、テスト分析はテストの土台をつくる作業である と言えます。
『テスト分析』は、最もテストを理解しやすい工程である
テスト分析の成果物
テスト分析では、膨大なテストベースから情報を読み解いてテスト条件を定義していきます。当然、テスト条件を定義するためには、対象となる機能を深く理解する必要があります。
そのためテスト分析では、ドキュメントの文字を追うだけでなく、情報を図表などを用いて整理していきます。この過程で、テストベースとテスト条件の関係が整理されたドキュメントが作成されます。このドキュメントは、テスト全体を俯瞰で捉えることができるため、他者とのコミュニケーションや後続の工程における情報整理に利用できます。
テスト分析の成果物の活用例
テストエンジニアが作成したテスト成果物のレビューを例にしてみます。テスト成果物は、開発者やプロダクトマネージャ等のステークホルダと共にレビューを行うことでテストが品質を担保できるかを検討します。立場によってプロダクトに関する知識にはバラつきがありますので、レビューの際はできるだけ関係者間で共通認識を持つことが重要だと考えます。
このときテスト全体をシンプルに整理したドキュメントがあれば、ステークホルダ全員が共通の認識を持つことを助け、テストを正しく理解することができ、より建設的なレビューが可能になるでしょう。
テストベースを、テスト目的の達成のために分析してテスト条件を定義する というシンプルな構図で整理されたドキュメントを作る工程がテスト分析というわけです。
このことから、テスト分析が 最もテストが理解しやすい工程である と言えます。
『テスト分析』は、テストと品質を繋ぐ中継地点である
テスト分析でトレーサビリティを確立する
テスト分析は、テスト計画で定めたテスト目的を達成するためにテストベースを分析して「何をテストするか?」を決める工程です。この「何をテストするか?」はテスト設計の「どうやってテストするか?」を考える基盤になります。
このようにテスト分析は、テスト計画とテスト設計の工程を関連づける役割をもっています。この関連付けされた状態を作ることを「トレーサビリティ(追跡可能性)を確立する」と言い、テスト分析ではテストの目的と様々なテストベースや後続の工程を関連付けてトレーサビリティを確立します。
トレーサビリティが確立されていない場合のリスク
もしも、テスト分析の時点でトレーサビリティが確立されていないと、以下のような状況に陥るリスクが高まります。
- テストがどのくらい仕様をカバーしているのかがわからない
- 仕様変更が発生した時にプロダクトやプロジェクトにどれだけ影響があるかわからない
- テストの実行結果でテスト目的を達成したかを計測できずリリース判断ができない
適切にトレーサビリティが確立され、各工程や情報間の結びつきが強固なほど、正確なテストのモニタリングとコントロール、そして品質の管理が可能となります。
このようにテスト目的とテスト条件や、テスト計画と後続のテスト工程などを連動させるトレーサビリティの中核となる役割を持つことから、テスト分析は テストと品質を繋ぐ中継地点である と言えます。
さいごに
テスト分析が重要な理由のおさらい
テスト分析が重要だと考える理由についておさらいします。
- 理由1:『テスト分析』は、テストの土台をつくる作業である
- テストベースを分析してテスト条件を決め、後続の工程の基礎を固める役割
- 理由2:『テスト分析』は、最もテストを理解しやすい工程である
- テストをシンプルに整理したドキュメントを作り、コミュニケーションを補助したり、仕様変更に柔軟に対応できるようにする役割
- 理由3:『テスト分析』は、テストと品質を繋ぐ中継地点である
- テスト全体のトレーサビリティの中核となってテストと品質を結びつける役割
以上の3つの理由から、テスト分析はテスト活動全体においても重要な役割を担っており、適切な工数をかけて実施することはプロダクトにとって十分なリターンのある工程だと考えます。
現状と今からできる対応
しかしながら、様々な要因でテスト分析を含めテストプロセスを導入できない場合もあると思います。特に、QCD(Quality/品質、Cost/予算、Delivery/納期)の Cost/予算 や Delivery/納期 に制約がある場合は、テスト分析の優先度を低く設定してしまう状況も多々あるのではないでしょうか。
そういった制約のある場合でも、テストエンジニアとして品質を担保していく上では、テスト分析をテスト活動に組み込んで適切に実施したいところです。理想を言えば、テスト分析の重要性について決定権を持つステークホルダの理解を得て工数を確保する ことですが、すぐに実現するのは難しいでしょう。今からできる対応としては、テスト分析を行う範囲や作業を絞って工数内でやりくりする方法が考えられます。
- 一例
- 重要度の高い機能や複雑な機能にポイントを絞って実施する
- トレーサビリティの確立に絞ってドキュメントを作成する
このように制約があっても、工夫次第でテスト分析をテスト活動に取り入れることはできますので、少しでもテスト分析をテスト活動に組み込んでみてください。
テストプロセスの各工程はどれも重要な役割を持っています。その中でもテスト分析は、テストの土台を作り、コミュニケーションや情報共有を助け、テスト全体と品質を繋ぐ重要なポジションを担っています。テスト分析の重要性を正しく理解して、効果的で建設的なテスト活動を推進していきましょう。