スキルアップ
テスト技法の本質

テスト技法の活用状況
突然ですが、技術者の皆さんはテスト技法を活用していますか?
私は仕事柄、テスト技法について人に教えることが多く、また現場で作成されたテストケースを見る機会も多い中で、以前とは比較にならないほど、テスト技法を適用したテストケースが作成されていると感じます。
一方で、技法は使えているものの、技法そのものに対する考え方について、正しく理解された上で活用されているのか、少し不安になることもあり、改めて技術者に対してその本質を教えるケースも増えています。
本記事では、テスト技法に関してテスト技術者にいま一度伝えたいことを記載したいと思います。なお、本記事では「同値分割法」「デシジョンテーブルテスト」などの一つ一つのテスト技法についての解説は行いません。それらは別のテスト技法の解説記事を参照ください。
テスト技法は何のため?
先に、テスト技法が何のためにあるのかについて説明します。ずばり、それはカバレッジのためです。
カバレッジとは、JSTQB用語集(※1)では、「テストスイートで特定したカバレッジアイテムをどの程度確認したかを、パーセンテージで表した度合い」と説明されています。つまり簡単に書くと「テストしたいことをどれくらいテストしたかの割合」です。
例えば、テスト技法の一つである境界値分析を行う場合、あるテキストボックスの入力値に着目し、境界が2つと分析された際に、それぞれの境界に対して2つずつのテスト(※2)を行えば100パーセントのカバレッジとなります。つまり、テストしたかったことが全て満たされるわけです。
以下に代表的なテスト技法と、そのカバレッジを記載します。
テスト技法 | このテスト技法でカバレッジを測定できる主な対象(ターゲット) |
---|---|
同値分割法 | 同じ処理をするであろうと識別したグループ(同値パーティション) |
境界値分析 | 同じ処理をするであろうと識別したグループとその境界値 |
デシジョンテーブルテスト | 実行可能な条件の全ての組み合わせとその条件の組み合わせによって発生するアクション(※3) |
状態遷移テスト | カバレッジにはいくつかの度合いがあるが、代表的なものの一つは全ての状態と全ての遷移 |
ペアワイズテスト | 2パラメータ間の全ての値の組み合わせ |
ステートメントテスト | プログラム中の全ての命令文 |
ブランチテスト | プログラム中の全ての分岐 |
図表1:代表的なテスト技法とカバレッジ
✳︎ここに挙げたテスト技法は一部であり、またカバレッジの説明は簡略化して表現しています。他のテスト技法や詳細なカバレッジについての情報は、JSTQBシラバス(※4)などを参照ください。
では、カバレッジが確保されることで何がうれしいのでしょうか?
一つには、やりたかったテストが漏れなくテストケースとして作成されるという点ですが、もう一つうれしいことがあります。それはステークホルダとテストについて合意しやすくなるということです。ここでいうステークホルダには、テストチーム内のメンバーや、ソフトウェア開発チーム、ビジネスマネジャー、顧客などテストに関心を持つあらゆる人が含まれます。
そのため、カバレッジを確保すること、カバレッジについて説明できること、というのはテスト活動において非常に重要な意味を持ちますし、テスト技法は有効な技術だということにつながります。
テスト技法はテストしたいことを識別するものではない
では、冒頭に挙げたテスト技法そのものに対する考え方で、不安になることとは何かというと、「テスト技法が適用しやすいテストばかり作成していませんか?」ということです。
確かに、テスト技術者は非常によくテスト技法を勉強されており、特定のテスト条件(※5)に対してテスト技法を適用した場合のテストケースを適切に作成されています。つまり、テスト技法の適用という点では、正しく行われています。
しかし、私が気にしているのは、「テスト対象全体で見た場合、本当にそのテスト条件が今(特定のコンテキストの中で)テストしたいことなんですか?」ということです。
テストは多くの場合、期間やコストなど一定の制約があることが多く、やりたいテストの全てが行えるわけではありません。また、テストには「テストレベル」(※6)という考え方があり、複数のテストレベルで、それぞれのテストレベルの責務に応じて段階的に行っていきます。
もちろん、コンテキストはさまざまな条件により異なります。例えば、システムテストで、ユースケースを識別することなく、全ての数値入力のテキストボックスに対して、2値境界値分析を行うことが「今やるべきテストなんでしたっけ?」。例えば、コンポーネント統合テストで、全てのインターフェースをカバレッジすることよりも、コンポーネント内部の状態遷移テストを3スイッチカバレッジ(※7)でテストすることが、「今やるべきテストなんでしたっけ?」ということです。
テスト技法適用の前に
テスト技法は、特定のテスト条件に対してそれらのカバレッジを網羅するためには有効ですが、基本的にはテスト条件自体を識別するための方法論ではありません。
つまり、まずテストしたいこと(テスト条件)が重要で、そのテスト条件はテスト対象やコンテキストによって適切なものが異なります。そのテスト条件に対してテスト技法を正しく適用することで、初めてやりたかったテストが行えるのです。言い換えると、テスト分析において、しっかりテスト条件を識別し、テスト設計でそのテスト条件を十分に満たすテストケースを作成するために、テスト技法を活用しなくてはなりません。
もちろん、テスト技法を知っていることで、テスト条件が識別されることもあるため、テスト分析においてもテスト技法は活用できます。しかし、本質的なテスト技法の目的は、テスト条件に対して、特定のカバレッジを達成するテストケースを作成するためなのです。
最後に
私の周りのテスト技術者は、非常によく勉強されていて、テスト条件に対して適切にテスト技法を適用できるようになってきました。これは素晴らしいことであり、テストにおいて重要なことです。
同様に、テスト技法を適用する前のテスト条件を識別する技術、特定のコンテキストに合わせてテストに優先順位を付ける技術も重要です。身に付けたテスト技法という技術を最大限有効に使うために、テスト技法の本質を理解いただき、いま一度その使いどころと、使い方を考えることで、本来やりたかったテストが行えるようになるはずです。
テスト技法の習得で安心することなく、テスト分析など他のテスト技術も併せて勉強していくことをお勧めします。
◼️参照◼️
(※1)JSTQB 用語集Version3(https://glossary.istqb.org/)。
(※2)境界値分析では、境界値に対して2つのテストを行う2値BVA(境界値分析)と、境界値に対して3つのテストを行う3値BVAがある 。
(※3)デシジョンテーブルテストのカバレッジには、ここで説明した全ての条件の組み合わせの他に、確認する必要のある組み合わせに限定して行うカバレッジもあります。この確認する必要のある組み合わせに限定したデシジョンテーブルは、簡単化したデシジョンテーブルとも呼ばれます。
(※4)「テスト技術者資格制度 Foundation Levelシラバス」(2023年12月時点ではVersion 2023V4.0.J01)や「ISTQB® テスト技術者資格制度Advanced Level シラバス日本語版 テストアナリスト」(2024年12月時点ではVersion 3.1.1.J03)。
(※5)JSTQB用語集 Version3では「テストのための根拠となる、コンポーネントやシステムのテストが可能な一部分」と説明されていますが、補足するとテストケースよりも抽象度の高い「テストしたいこと」だと考えるとよいです。
(※6)JSTQB用語集 Version2では「具体的にインスタンス化したテストプロセス」と説明されていますが、補足するとコンポーネントテストやシステムテストなどの、開発プロジェクトにおける特定の責務を持ったテスト活動のグループと考えるとよいです。
(※7)状態遷移テストのカバレッジ基準の一つに「Nスイッチカバレッジ」という考え方があり、JSTQB用語集 Version1では「テストスイートが遂行したN+1遷移のシーケンスのパーセンテージ」と解説されています。
この記事は面白かったですか?
今後の改善の参考にさせていただきます!