状態遷移テストのカバレッジの1つ「ラウンドトリップカバレッジ」

はじめに

アドベントカレンダー

本記事はソフトウェアテスト・QAの小ネタ Advent Calendar 2025の23日目の記事です。

本記事を書くキッカケ

本記事は、先日行われたWACATE 2025 冬 〜異変を見逃さないこと。異変を見つけたらすぐに報告すること〜でのセッション「意外と知らない状態遷移テストの世界」の一部を抜粋したものです。

セッションのスライドは公開済みですので、状態遷移テストについて詳しく知りたい方はこちらをご覧ください。

speakerdeck.com

状態遷移テストにおけるカバレッジの種類

状態遷移テストにはカバレッジがいくつか存在します。一番活用されているカバレッジは遷移カバレッジ(0スイッチカバレッジ)だと思います。また、業務では使ったことがない人でも知っていることが多いカバレッジとして、Nスイッチカバレッジがあります。

今回はその2つ以外のカバレッジとして「ラウンドトリップカバレッジ」を紹介します。

ラウンドトリップカバレッジとは何か

ISTQBテスト技術者資格制度 Advanced Level シラバス 日本語版 テストアナリスト Version 3.1.1.J03には以下のように書かれています。

「ラウンドトリップカバレッジ」は、遷移のシーケンスがループを形成するときに適用する。

100%のラウンドトリップカバレッジを達成するには、任意の状態から同じ状態に戻るすべてのループを、ループが開始および終了するすべての状態に対してテストする。このループには、開始状態と終了状態を除くすべての特定の状態が複数回含まれていてはならない。

具体例を用いて説明する

シラバスの定義だけだと分かりづらいところがあると思うので、具体例を用いて説明します。今回は状態遷移テストの例題でお馴染みのストップウォッチを題材に説明します。ストップウォッチの状態遷移図は以下のようになります。

ストップウォッチの状態遷移図(※ラップ機能は非搭載)

上図の各状態の定義は以下のとおりです。

  • 「待機中」状態:0:00で停止している状態
  • 「計測中」状態:0:01、0:02、0:03…とカウントアップしていく状態
  • 「一時停止中」状態:0:04などでカウントが止まっている状態

ラップ機能は搭載していないものとし、計測部分は正確にカウントアップできているものとします。また、今回は自己遷移を自分自身への矢印で表現するとします*1

ここまでの記述を見て、「そもそも状態遷移図が分からない」「自己遷移とは何か分からない」「遷移カバレッジやNスイッチカバレッジが何なのか分からない」といった方は、ここから先に進む前に先ほど紹介した状態遷移テストのセッションスライドを読んでください。

ラウンドトリップカバレッジの作成手順

手順1. 起点となる状態を1つ注目する

ループの起点となる状態を1つ選びます。今回は「待機中」状態を選ぶとします。

手順2. 手順1で選んだ状態へループする遷移を考える

手順1で選んだ状態からスタートして、その状態に戻ってくるような遷移を考えます。

「待機中」状態からスタートして「待機中」状態に戻ってくる遷移は以下の2ケースがあります。

待機中から待機中まで遷移するケースその1

待機中から待機中まで遷移するケースその2

手順3. 起点となる状態を変えて手順1と手順2を繰り返す

起点となる状態を変えて、ここまで行った内容を行います。

「計測中」状態からスタートして「計測中」状態に戻ってくる遷移は以下の3ケースがあります。

計測中から計測中まで遷移するケースその1

計測中から計測中まで遷移するケースその2

計測中から計測中まで遷移するケースその3

「一時停止中」状態からスタートして「一時停止中」状態に戻ってくる遷移は以下の2ケースがあります。

一時停止中から一時停止中まで遷移するケースその1

一時停止中から一時停止中まで遷移するケースその2

ラウンドトリップカバレッジを満たすテストケースの完成

ここまでで作成したケース全てを実施することで、ラウンドトリップカバレッジを満たすテストケースが完成します

ラウンドトリップカバレッジを満たすテストケース

ラウンドトリップカバレッジの対象外となるテストケース

「とある状態からスタートして、同じ状態に戻ってくるような遷移であれば、何回もグルグル遷移すればいくらでもテストケースを作れるのではないか?」と思うかもしれません。

例えば、以下のようなテストケースを考えることができるかもしれません。

ラウンドトリップカバレッジの対象外となるテストケース

この場合、通った状態は「待機中→計測中→一時停止中→計測中→一時停止中→待機中」となります。これはシラバスに書かれている定義「開始状態と終了状態を除くすべての特定の状態が複数回含まれていてはならない。」に反するため、ラウンドトリップカバレッジの対象外となります。

「計測中」状態が起点の際に「計測中」状態と「一時停止中」状態のループを確認しているため、このようなケースが対象外でも十分と判断できると考えられます。

計測中から計測中まで遷移するケースその2

おわりに

今回は状態遷移テストのカバレッジの1つ「ラウンドトリップカバレッジ」を紹介しました。

Nスイッチカバレッジなど、状態遷移テストでのその他のカバレッジについては記事冒頭に紹介した状態遷移テストのセッションのスライドを見てください。

また、今回の状態遷移テストを含め、WACATEでは、ソフトウェアテストを中心としたワークショップを、1泊2日の合宿形式で半年に一度開催しています。次回は2026年の6月の土日に行います。

興味のある方は参加の検討をよろしくお願いします。

wacate.jp

*1:自己遷移を状態遷移図に記述しない人もいるのですが、遷移不可の場合との区別が付きづらいため今回は表現する形にしています