今回は新たな試みとして、テスト項目作成についての記事を書いてみたいと思います!
テスト項目作成時の課題
テスト項目作成時にいつも課題になる項目として、基本は1アクションにつき1つのテストを作成します。
しかし、条件分岐が多いとその条件分岐の数だけテストを作成するので、項目数が膨れ上がります。工数を減らすのは悩ましい問題です。
状態遷移表の利用
そのため、状態遷移表を使ってテスト項目の内容整理をやっています。
状態遷移表とは、システムの遷移前後の状態と遷移が発生する動作を表でまとめたものです。状態遷移表を作る場合は、事前に状態遷移図を作成してシステム全体の流れを整理します。
状態遷移表の例
例として、お腹の満たされ具合の状態(お腹が空いている、少し満たされる、腹八分目)と動作(飲み、食い、休む)の関係で考えてみましょう。
テスト要件としては、「ある人が行動した結果、お腹の満たされ具合の変化が起きる」ことを確認することにします。
お腹の満たされ具合を状態、飲食や休むのをアクションとして、状態遷移図では以下のように表してみます。人それぞれあるとは思いますが、あくまで例ということで。

ここで状態遷移図をもとに状態遷移表を作成してみます。
ジュースを飲む | 肉を食べる | 休む | |
お腹が空いている | 少し満たされてる | 腹八分目 | – |
少し満たされてる | 腹八分目 | 腹八分目 | お腹が空いている |
腹八分目 | – | – | お腹が空いている |
上の例では、「お腹が空いている」時に「ジュースを飲む」と「少し満たされてる」状態になります。また、「少し満たされてる」時に「肉を食べる」と「腹八分目」の状態になる、といった見方をします。
ここに一つ分岐を追加してみます。
お腹が少し満たされているときに、お菓子を食べると「腹五分目」になるとします。状態遷移図は以下の通りです。

状態遷移表にすると、以下のようになります。
分岐が増えてますが、確認する項目は以下の8項目となります。
ジュースを 飲む | お菓子を 食べる | 肉を食べる | 休む | 昼寝する | |
お腹が 空いてる | 少し満た されている | – | 腹八分目 | – | – |
少し満た されている | 腹八分目 | 腹五分目 | 腹八分目 | お腹が 空いてる | – |
腹五分目 | – | – | – | – | 少し満た されている |
腹八分目 | – | – | – | お腹が 空いてる | – |
ちなみにこの条件でテスト項目を上げてみると、以下の20項目になります。
12項目分存在しない確認が入っていますので、状態遷移表での整理の効果を実感します。
項番 | 行動 | 状態(結果) |
1 | 「お腹が空いてる」時に「ジュースを飲む」 | 少し満たされている |
2 | 「お腹が空いてる」時に「お菓子を食べる」 | 存在しない |
3 | 「お腹が空いてる」時に「肉を食べる」 | 腹八分目 |
4 | 「お腹が空いてる」時に「休む」 | 存在しない |
5 | 「お腹が空いてる」時に「昼寝する」 | 存在しない |
6 | 「少し満たされている」時に「ジュースを飲む」 | 腹八分目 |
7 | 「少し満たされている」時に「お菓子を食べる」 | 腹五分目 |
8 | 「少し満たされている」時に「肉を食べる」 | 腹八分目 |
9 | 「少し満たされている」時に「休む」 | お腹が空いてる |
10 | 「少し満たされている」時に「昼寝する」 | 存在しない |
11 | 「腹五分目」の時に「ジュースを飲む」 | 存在しない |
12 | 「腹五分目」の時に「お菓子を食べる」 | 存在しない |
13 | 「腹五分目」の時に「肉を食べる」 | 存在しない |
14 | 「腹五分目」の時に「休む」 | 存在しない |
15 | 「腹五分目」の時に「昼寝する」 | 少し満たされている |
16 | 「腹八分目」の時に「ジュースを飲む」 | 存在しない |
17 | 「腹八分目」の時に「お菓子を食べる」 | 存在しない |
18 | 「腹八分目」の時に「肉を食べる」 | 存在しない |
19 | 「腹八分目」の時に「休む」 | お腹が空いてる |
20 | 「腹八分目」の時に「昼寝する」 | 存在しない |
このようにテスト項目の内容整理をする場合は、状態遷移図の一部機能を抜き出して状態遷移表を作成しています。
一部機能だけに限定することで、必要な項目を簡潔にまとめることができ、テスト数を少なくできます。加えて、テストの範囲も明確にすることができます。
このように課題の解決に取り組んでいます。
おわりに
今回は状態遷移表でテスト項目整理について紹介しました。
テスト項目作成においては、動作内容や動作によって起こる事柄の整理が重要だと思います。色々な知見を使うことで、漏れのないテスト項目を作成できるようにしたいものです。
皆さんのテスト設計のご参考になれば幸いです。