テストの基礎
テスト設計とは
効果的で効率的なソフトウェアテストを実施するためには、テスト対象に対してどのようにテストするのか、を明確にすることが必要不可欠です。標準的なテストプロセスでは、それを「テスト設計」というプロセスで実施します。
ここでは、テスト設計の実施内容と、その重要性や目的について解説していきます。
なぜ、テストに設計が必要なのか
テスト設計の最終成果物は「テストケース」と呼ばれるものです。
テストケースとは、テストオペレータと呼ばれる者がテスト実施時に用いる手順書のことです。テストケースには、テスト対象を最初にどんな状態にし、どんな操作をし、その結果から何を確認してOK/NGをどう判定するかが記載されています。
このテストケースは、機能仕様書等から直接的に作成せず、いくつかの中間成果物を作りながら設計して生成するようにします。これを、「段階的詳細化」と呼びます。
テストを設計しないで機能仕様書等から直接的にテストケースを作成すると、さまざまな問題が生じます。
たとえば、
・テストの抜け漏れが生じ、ひいてはバグを見逃す可能性が高まってしまう
・テストケースの項目数が無闇に増えてしまい、コスト的・時間的ロスが生じてしまう
逆に言うと、テストを段階的に詳細化して設計することで、以下のメリットが得られます。
・抜け漏れの無いテストケースが生成でき、ひいてはバグを見逃す可能性を低くできる
・より細かいところに突っ込んだテストケースを生成し、バグを検出する可能性を高められる
・テストケースの数を必要最少に抑え、コスト・時間の両面で最適化が図れる
以降で、段階的詳細化の考え方、テスト設計の大きな流れを解説します。
テスト設計の大きな流れ:段階的詳細化の考え方
段階的詳細化の考え方は、地図を使うことに似ています。
たとえば、日本の九州を出発地として、北海道の目的地へのルートを確認しようとする際に、最初から細かい市街地図を使うことはしないでしょう。当面のルートは詳細に分かりますが、目的地まで辿っていく時間が莫大にかかってしまいますし、最適なルートを見逃してしまうことも容易に想像できます。
詳細な道順を設定するのは最終的には必要になりますが、最初は日本全体地図で出発地と目的地を大雑把に把握し、考えられる道筋を大きくいくつか考えて、徐々に拡大率を大きくしながら検討する方が効率的です。
テスト設計にも同じことが言えます。
最初はテスト対象を大きく捉え、テストすべき観点を考え、順を追ってテストの粒度を少しずつ小さくしながら具体化していくことが必要です。このことで、抜け漏れの無い、バグを検出しやすいテストケースを、より少ない項目数で生成できるようになります。
テスト設計プロセス
ここでは、テストの段階的詳細化の考え方をもう少し細かく解説します。
テスト設計のプロセスを以下に記します。 このプロセスは、前述の段階的詳細化の思想で組み立てられています。
①テスト対象の分析プロセス
②テスト基本設計プロセス
③テスト詳細設計プロセス
④テスト実装プロセス
より具体的な解説は以下の解説コンテンツに記載されていますので、併せてご参照ください。
①テスト対象の分析プロセス
具体的な作業としては、機能仕様書等の読み込みがあります。
この作業は、単に仕様を把握するためだけでなく、テスト対象を分割し、それぞれに対してどのようなテストを行うか、概要を整理するためにあります。
機能仕様書等の読み込みから、既にテスト設計は始まっているのです。
詳しくは以下の解説コンテンツをご参照ください。
②テスト基本設計プロセス
テスト基本設計プロセスでは、テストオペレータがテスト実施する際に用いるテストケースは生成しません。
テストケースには、テスト対象を最初にどんな状態にし、どんな操作をし、その結果 何を確認してOK/NGをどう判定するかが具体的に記述されます。
このようなテストケースを一足飛びに作成するのではなく、テスト基本設計では、テスト対象の全体を、またはテスト対象の機能を大きく捉えて扱います。
もう少しかみ砕くと、「そのシステムには(または機能には)、どんなテストが必要か」というレベルで、テスト全体の指針を決めていきます。
この検討の中で、テストに使うデータや環境はどんなものが必要か、概要が検討されます。
③テスト詳細設計プロセス
テスト基本設計プロセスの指針を受け継ぎ、より詳細にテストを設計していきます。
例えば、テキストボックスの入力チェックで、どのような文字種・文字数でテストするか、具体的に決めていきます。
また、テストに使うデータや環境はどんなものが必要か、詳細を具体的に決めていきます。
④テスト実装プロセス
テスト詳細設計プロセスまで検討した内容を基に、テストケースを生成します。
併せて、テストデータの作成や、テスト環境のセットアップを行い、テスト実施の準備を整えます。
このように、テスト設計はいくつかの段階を踏んで徐々に詳細化・具体化し、最終的なテストケースを生成します。
テスト設計の成果物
テストケースの生成に至るまでに、テスト設計のそれぞれの段階で、テスト設計の中間成果物を生成することになります。
この中間成果物が、テストドキュメントとなります。 これらテストドキュメントは、どうしてそのようなテストを設計したのかを表すものになり、レビューがしやすくなりますし、テストの再利用性を向上させることにも役立ちます。(どうしてこんなテストケースがあるのか意図が分からない、という悩みが解消されます)
また、機能仕様書とテストケースのトレーサビリティを取るベースにもなり、漏れなくテストケースを生成することに加え、仕様変更に対処しやすくなるというメリットも得られることになります。
テスト設計の目的
これまで、テスト設計プロセスを示すことで、テスト設計の大きな流れを解説してきました。
もう一度、要点を振り返る意味で、テスト設計の目的を整理してみます。
テスト設計の目的は、大きく分けて以下の3つが上げられます。
・抜け漏れの無いテストケースを生成する
・バグを検出する可能性の高いテストケースを生成する
・より項目数が少ないテストケースを生成する
つまり、口語的に言い表すと、「抜け漏れが無い網羅性の高い、バグを発見しやすいテストを、より少ない件数のテストケースで実現する」ということになります。
上述しているとおり、このようなテストケースを、機能仕様書等から直接生成することは非常に困難です。例えば、プログラム開発に比喩すると、機能仕様書から直接コーディングすると、プログラム全体がいびつになり、考慮漏れが多々発生することになりますが、それと同じことがテストにも言える、ということです。
テスト設計の段階的詳細化の考え方は、最初はテスト対象を大きな視野で捉え、段階的に視野を絞って詳細化・具体化することで、テスト設計の目的を満たすために必要なものなのです。
まとめ
ここまで、テスト設計で実施する内容と重要性、そして、テスト設計の目的について解説しました。
ソフトウェアの品質を向上させるには、テスト設計が不可欠となります。
具体的な実施内容については、これ以降の「QUINTEE(クインティ)」テスト設計メソッドの解説コンテンツを参照してください。