🤖

結合テスト・機能テストの実施方法を種類別にまとめてみる【再入門】

2024/06/01に公開

はじめに

各テストの概要と意識したいこと【再入門】では、結合テスト・機能テストの種類として「状態遷移テスト」「機能確認テスト」の2つを紹介しました。
今回は状態遷移テストの実施方法についてまとめていきます。

こんな人におすすめ

  • 状態遷移テストについて知りたい

状態遷移テスト

状態遷移テストとは、状態遷移図や状態遷移表を用いたテストの総称です。
ソフトウェアの動作中に変化する「状態」に着目してテストを行います。

状態とは

状態を表すものには一般的に3種類あります。

種類 説明
部位の状態 機器を構成している各部位の状態のこと ランプ、スイッチなど
処理の状態 ソフトウェアの処理状態のこと 計算中、データ読み込み中など
モードの状態 機器全体の状態のこと 再生中/一時停止中/停止中モードなど

状態遷移図と状態遷移表を作成するメリット

  • 状態遷移図

    • 状態遷移の流れを容易に把握できる
    • 「できること」を確認することができる
    • テスト担当者と開発者間の仕様理解確認の助けになる
    • 図示することにより、仕様書に記載がない等の不備に気づくきっかけにななる
      (「どこへも遷移しない状態」や「複数の異なる状態に遷移するイベント」など)
  • 状態遷移表

    • 状態とイベントの網羅的な組み合わせを容易に把握できる
    • 「できないはずのこと」を確認することができる
    • 仕様が曖昧な箇所に潜む欠落を発見できる
    • 状態遷移図の不備を見つけることができる

状態遷移図を用いたテストの実施方法

  1. 状態遷移図を作成する。
  2. テストケースを作成する。
  3. 実際にモジュールを動作させ、2.で作成したテストケースを実施する。
  4. 結果を確かめる。

炊飯器を例に考えてみる

【仕様】
・電源を入れると「待機中」になり、炊飯や保温ができる状態となる。
・待機中」に炊飯ボタンを押下すると「炊飯中」になる。
・お米が炊きあがると「保温中」になる。
・「炊飯中」に取消ボタンを押下すると「保温中」になる。
・「保温中」に取消ボタンを押下すると「待機中」になる。
・「待機中」に保温ボタンを押下すると「保温中」になる。

状態遷移図の作り方

仕様書から「状態」と「イベント」を抽出し、"ある状態でイベントが起きると、別の状態へ遷移する"という関係性を図に起こします。仕様が複雑で状態遷移図が大きくなり過ぎてしまう場合は、機能ごとに分割します。

《状態とイベント》

項目 内容
状態 待機中、炊飯中、保温中、電源OFF
イベント 電源を入れる
炊飯ボタン押下
取消ボタン押下
保温ボタン押下
お米が炊きあがる
電源を切る

《状態遷移図》
状態遷移図

テストケースの作り方

3つのポイントに注目してテストケースを作成します。これらのテストケースは段階的に行われます。

テストケース 説明 テスト実施タイミング
1 全ての状態を一回は通る 機能単位のソフトウエアが完成したら実施
2 全てのイベントを一回は発生させる 機能間のイベントに関わる機能が完成したr実施
3 全ての遷移(矢印)を一回は通る 機能間のイベントに関わる機能が完成したら実施

テストケース1:全ての状態を一回は通る

遷移前の状態 発生させるイベント 遷移後の状態(期待結果)
保温中 取消ボタン押下 待機中
待機中 炊飯ボタン押下 炊飯中
炊飯中 お米が炊きあがる 保温中
保温中 電源を切る 電源OFF

テストケース2:全てのイベントを一回は発生させる

遷移前の状態 発生させるイベント 遷移後の状態(期待結果)
電源OFF 電源を入れる 待機中
待機中 炊飯ボタン押下 炊飯中
炊飯中 取消ボタン押下 待機中
待機中 保温ボタン押下 保温中
炊飯中 お米が炊きあがる 保温中
待機中 電源を切る 電源OFF

テストケース3:全ての遷移(矢印)を一回は通る

遷移前の状態 発生させるイベント 遷移後の状態(期待結果)
電源OFF 電源を入れる 待機中
待機中 炊飯ボタン押下 炊飯中
炊飯中 取消ボタン押下 待機中
炊飯中 お米が炊きあがる 保温中
保温中 取消ボタン押下 待機中
待機中 保温ボタン押下 保温中

+α:シナリオに沿ってテストケース3を見直し、テストケースを追加する
シナリオは全てを網羅するのではなく、ユーザーが実際に操作するであろう手順を想定してピックアップしましょう。
この際、想定していない状態遷移を見つけられる可能性があるため、状態遷移の仕様に抜け漏れがないかを確認しながらテストケースを作成することが大切です。

手順 遷移前の状態 発生させるイベント 遷移後の状態(期待結果)
シナリオ(1)
1 電源OFF 電源を入れる 待機中
2 待機中 炊飯ボタン押下 炊飯中
3 炊飯中 お米が炊きあがる 保温中
4 保温中 電源を切る 電源OFF
シナリオ(2)
1 電源OFF 電源を入れる 待機中
2 待機中 保温ボタン押下 保温中
3 保温中 電源を切る 電源OFF

状態遷移表を用いたテストの実施方法

  1. 状態遷移表を作成する。
  2. 1.で作成した状態遷移表の1つのマス目をテストケースとみなし、テストケースを作成する。
  3. 実際にモジュールを動作させ、2.で作成したテストケースを実施する。
  4. 結果を確かめる。

炊飯器を例に考えてみる

【仕様】
・電源を入れると「待機中」になり、炊飯や保温ができる状態となる。
・待機中」に炊飯ボタンを押下すると「炊飯中」になる。
・お米が炊きあがると「保温中」になる。
・「炊飯中」に取消ボタンを押下すると「保温中」になる。
・「保温中」に取消ボタンを押下すると「待機中」になる。
・「待機中」に保温ボタンを押下すると「保温中」になる。

状態遷移表の作り方

状態遷移表には「状態×イベント」型と「状態×状態」型の2つがあります。

《「状態×イベント」型の場合》
状態(縦軸)とイベント(横軸)の組み合わせにおける遷移先の状態を記入します。
イベントが発生しても処理が起きないように実装されたイベントには「-」、発生させることができない(起こり得ない)イベントには「N/A」を記入します。

電源を入れる 炊飯ボタン押下 取消ボタン押下 保温ボタン押下 お米が炊きあがる 電源を切る
待機中 N/A 炊飯中 - 保温中 N/A 電源OFF
炊飯中 N/A - 待機中 - 保温中 電源OFF
保温中 N/A - 待機中 - N/A 電源OFF
電源OFF 待機中 N/A N/A N/A N/A N/A

《「状態×状態」型の場合》
マス目の中にイベントを記入し、遷移しない場合に「-」を記入します。

待機中 炊飯中 保温中 電源OFF
待機中 - 炊飯ボタン押下 保温ボタン押下 電源を切る
炊飯中 取消ボタン押下 - お米が炊きあがる 電源を切る
保温中 取消ボタン押下 - - 電源を切る
電源OFF 電源を入れる - - -

テストケースの作り方

作成した状態遷移表の各マス目をテストケースとして書き起こします。

No. 遷移前の状態 発生させるイベント 遷移後の状態(期待結果)
1 待機中 電源を入れる N/A
2 炊飯中 電源を入れる N/A
3 保温中 電源を入れる N/A
4 電源OFF 電源を入れる 待機中
5 待機中 炊飯ボタン押下 炊飯中
6 炊飯中 炊飯ボタン押下 何も起こらない
7 保温中 炊飯ボタン押下 何も起こらない
8 電源OFF 炊飯ボタン押下 N/A
9 待機中 取消ボタン押下 何も起こらない
10 炊飯中 取消ボタン押下 待機中
11 保温中 取消ボタン押下 待機中
12 電源OFF 取消ボタン押下 N/A
13 待機中 保温ボタン押下 保温中
14 炊飯中 保温ボタン押下 何も起こらない
15 保温中 保温ボタン押下 何も起こらない
16 電源OFF 保温ボタン押下 N/A
17 待機中 お米が炊きあがる N/A
18 炊飯中 お米が炊きあがる 保温中
19 保温中 お米が炊きあがる N/A
20 電源OFF お米が炊きあがる N/A
21 待機中 電源を切る 電源OFF
22 炊飯中 電源を切る 電源OFF
23 保温中 電源を切る 電源OFF
24 電源OFF 電源を切る N/A

さいごに

だいぶ長くなってしまいましたが、状態遷移テストの基本はこれで終わりです。

状態遷移テストを行う際、状態遷移図や状態遷移表の作成過程で仕様を再確認することも重要な役割として存在します。

書き起こすのは時間と労力が必要ですが、品質の良いソフトウェアを作成するためにも確実に実施できるようにしたいですね。

Discussion