ソフトウェアテストの工程は複数ありますが、テスト設計はその1つです。「テスト設計」と言われても、ソフトウェアテストが初めての方、これから勉強する方は、具体的にどんなことをする工程なのかイメージできないのではないでしょうか。この記事では、そもそもテスト設計とは何をする工程か概要を解説した上で、実際にどんなことを行うか詳しく解説します。

テスト設計とは

ソフトウェアテストにおいてテスト設計とは、簡単に言うと「どのようにテストを行うか」という手段を決定することです。より具体的には、テスト設計では以下のような内容を決めていきます。

・テストをどのような手順で行うか
・その際にどんなデータを使うのか
・どのようなパターンでテストを行うか
・テストでは、どのような結果がでることが期待されるか

テスト設計では、これらの事項を「テスト設計書」にまとめます。JSTQBでは、テスト設計を「テスト対象に対して、どのようなテストをどのような手段で実施すべきかというテスト戦術を検討するためのタスク」と定義しています。

テスト計画との違い

テスト設計とよく混同されるのがテスト計画です。言葉は似ていますが、それぞれ役割が異なります。

テスト計画とはテストを行う上での目的や方針、留意点、スケジュール等をまとめることです。その内容はテスト計画書にまとめられます。

そうして作られたテスト計画書に基づき、テスト設計が行われます。このような段階を踏むことによって、テストの信頼性や品質を高めるわけです。

テスト設計の流れ

ステップ
テスト設計の概要についてみてきました。それではテスト設計はどのような順番で行われるのでしょうか。具体的には以下の通りです。

1. テスト分析
2. テスト設計
3. テスト実装

以下、それぞれの手順で、どのようなことを行うか1つずつ解説します。

1. テスト分析

テスト分析とは、要件定義書を読み込むなどして、テスト対象となるソフトウェアが持つ機能やその機能のふるまいを調査・理解することを指します。たとえば、スマートフォンゲーム「ポケモンGO」をテスト分析する場合を想定してみましょう。まず「ポケモンを捕まえる」「ポケモンを交換する」といったソフトウェアが持つ機能の種類を把握し、各機能の振る舞い方に関し調査・理解するわけです。

2. テスト設計

テスト分析が済んだら、次に行うのがテスト設計です。テスト設計の段階では「どの機能に対して、どのような『テスト観点』でテストを行うか。どんなパターンでテストを行うか。」を決定します。

テスト観点とは、ソフトウェアの機能が適切に動作していることを確認するために、「どんなテストをどのような点に注目して行うか」といった、テストを行う上での切り口や視点について定義したものです。テスト観点は、ソフトウェアの機能を理解していないと定義することができません。そのためテスト設計の前にテスト分析が行われるわけです。

たとえばポケモンGOのテストを例にとると、ポケモン交換の機能についてテストを行うことを決定し、実際にポケモン交換を行ってみてテストを実施すること、ポケモン交換を行うと交換を行ったトレーナーの所持ポケモンがどのように変化するべきか(整合性がとれているといえるか)という視点(テスト観点)までをまとめるまでが、テスト設計となります。

テスト設計で定義した内容は「テスト設計書」にまとめます。

3. テスト実装

テスト実装とは、テスターがテストを実施できるようにテストの手順や期待される結果を具体的にまとめた「テストケース」を作成することです。テストケースは、前の段階で定義したテスト観点を基にして作成されます。テストケースをまとめたものを「テスト項目書」や「テスト仕様書」と呼びます。

たとえば、ポケモンGOのポケモン交換では、以下のような「テストケース」を作成するのがテスト実装です。

テストケースの例

手順1:「ポケモン交換」のアイコンをタップして、交換画面へ遷移する
手順2:任意のポケモンを選択して、ポケモン交換を行う
期待される結果:交換に出したポケモンを交換相手が取得し、プレイヤーの所持ポケモンからそのポケモンが消滅する。相手が交換に出したポケモンをプレイヤーが取得し、相手の所持ポケモンからそのポケモンが消滅する。

ご覧のようにテストケースを参照すれば、テスターは自分がどのような手順でテストを行えばよいかが一目で理解できます。こういったテストケースを、必要な数だけ作成するのがテスト実装です。テスト実装まで終えるとテスト設計が完了し、次はテスターが実際にテストを行う段階へ移行します。

まとめ

テスト計画の工程で、ソフトウェテストの方針や方向性、スケジュールなどが決まったら、次にテスト設計の工程へ移行します。テスト設計は、実際にテストをどのように行うかという手段を決定するのが目的です。具体的には、ソフトウェアのどの機能をテストするかや、その機能が正常に動作するか確認するため「どのようなテストをどんな点に着目して実施するか」(「テスト観点」)や、テスターが実際にテストを実施する際に参照するテスト項目(「テストケース」)をまとめます。