Slide 1

Slide 1 text

意外と知らない 状態遷移テストの世界 ブロッコリー (@nihonbuson)

Slide 2

Slide 2 text

自己紹介 ● 風間裕也(ブロッコリー) ● 株式会社10X 品質管理チーム ● 副業…B-Testing(個人事業主)として ○ 株式会社MonotaRO(テストコンサルタント) 他数社でお手伝い ● 社外活動 ○ WACATE実行委員長 ○ JaSST Review実行委員長 ○ Developers Summitコンテンツ委員 ○ SReEE(ソフトウェアレビューを エンジニアリングっぽく捉える会)リーダー ● 猫派 SNS上の アイコン

Slide 3

Slide 3 text

状態遷移テストとは何か

Slide 4

Slide 4 text

状態遷移テストとは何か ブラックボックステスト技法のひとつ。状態遷移モデルの 要素を実行するようにテストケースを設計する。 状態遷移テスト(state transition testing) - ISTQB Glossary

Slide 5

Slide 5 text

例題を用いて説明 ストップウォッチの 「スタート/ストップ」ボタンと 「リセット」ボタンについて どんなテストをしますか? ※計測部分は正確であり、  テスト対象外とする ※ラップ機能は搭載していないとする スタート /ストップ リセット https://goo.gl/iAvVm8

Slide 6

Slide 6 text

状態遷移図の作成

Slide 7

Slide 7 text

状態遷移図とは何か 状態遷移図は、システムの取り得る状態と有効な遷移を 示すことで、システムの振る舞いをモデル化する。 遷移は、イベントによって開始され、さらにガード条件に よって限定されることがある。 遷移は瞬時に起きることを想定しており、遷移によってソ フトウェアがアクションを起こす場合がある。 ISTQBテスト技術者資格制度 Foundation Level シラバス 日本語版 Version 2023V4.0.J02 4.2.4 状態遷移テスト

Slide 8

Slide 8 text

状態遷移図の作成 待機中

Slide 9

Slide 9 text

状態遷移図の作成 待機中 状態

Slide 10

Slide 10 text

状態遷移図の作成 待機中 開始擬似 状態

Slide 11

Slide 11 text

状態遷移図の作成 待機中 計測中 スタート/ ストップ 押下

Slide 12

Slide 12 text

状態遷移図の作成 待機中 計測中 スタート/ ストップ 押下 イベント

Slide 13

Slide 13 text

状態遷移図の作成 待機中 計測中 遷移 スタート/ ストップ 押下

Slide 14

Slide 14 text

状態遷移図の作成 待機中 計測中 一時停止中 スタート/ ストップ 押下 スタート/ ストップ 押下

Slide 15

Slide 15 text

状態遷移図の作成 待機中 計測中 一時停止中 スタート/ ストップ 押下 スタート/ ストップ 押下 スタート/ ストップ 押下

Slide 16

Slide 16 text

状態遷移図の作成 待機中 計測中 一時停止中 リセット 押下 スタート/ ストップ 押下 スタート/ ストップ 押下 スタート/ ストップ 押下

Slide 17

Slide 17 text

状態遷移図を積極的に作成すべきパターン① 待機中 計測中 スタート/ ストップ 押下 一時停止中 同じイベントでも前状態によって 遷移先の状態が異なる場合に作成すると良い スタート/ ストップ 押下 スタート/ ストップ 押下 リセット 押下

Slide 18

Slide 18 text

状態遷移図を積極的に作成すべきパターン② 待機中 計測中 一時停止中 同じ状態でもイベントによって 遷移先の状態が異なる場合に作成すると良い スタート/ ストップ 押下 スタート/ ストップ 押下 スタート/ ストップ 押下 リセット 押下

Slide 19

Slide 19 text

状態表の作成

Slide 20

Slide 20 text

状態表は、状態遷移図に相当するモデルである。 行は状態を表し、 列はイベント(存在する場合はガード条件)を表す。 テーブルの項目(セル)は遷移を表し、 ターゲット状態、ガード条件、 および定義されている場合は結果のアクションを含む。 状態遷移図とは対照的に、状態表は無効な遷移を明示的に 示し、空のセルで表す。 ISTQBテスト技術者資格制度 Foundation Level シラバス 日本語版 Version 2023V4.0.J02 4.2.4 状態遷移テスト 状態表

Slide 21

Slide 21 text

状態表の作成 待機中 計測中 スタート/ ストップ 押下 一時停止中 スタート/ ストップ 押下 スタート/ ストップ 押下 リセット 押下 動作 スタート/ストップ押下 リセット押下 前状態 待機中 計測中 一時停止中

Slide 22

Slide 22 text

状態表の作成 待機中 計測中 スタート/ ストップ 押下 一時停止中 スタート/ ストップ 押下 スタート/ ストップ 押下 リセット 押下 動作 スタート/ストップ押下 リセット押下 前状態 待機中 計測中 計測中 一時停止中

Slide 23

Slide 23 text

状態表の作成 待機中 計測中 スタート/ ストップ 押下 一時停止中 スタート/ ストップ 押下 スタート/ ストップ 押下 リセット 押下 動作 スタート/ストップ押下 リセット押下 前状態 待機中 計測中 計測中 一時停止中 一時停止中

Slide 24

Slide 24 text

状態表の作成 待機中 計測中 スタート/ ストップ 押下 一時停止中 スタート/ ストップ 押下 スタート/ ストップ 押下 リセット 押下 動作 スタート/ストップ押下 リセット押下 前状態 待機中 計測中 計測中 一時停止中 一時停止中 計測中

Slide 25

Slide 25 text

状態表の作成 待機中 計測中 スタート/ ストップ 押下 一時停止中 スタート/ ストップ 押下 スタート/ ストップ 押下 リセット 押下 動作 スタート/ストップ押下 リセット押下 前状態 待機中 計測中 計測中 一時停止中 一時停止中 計測中 待機中

Slide 26

Slide 26 text

状態表の作成 待機中 計測中 スタート/ ストップ 押下 一時停止中 スタート/ ストップ 押下 スタート/ ストップ 押下 リセット 押下 動作 スタート/ストップ押下 リセット押下 前状態 待機中 計測中 計測中 一時停止中 一時停止中 計測中 待機中

Slide 27

Slide 27 text

状態表の作成 待機中 計測中 スタート/ ストップ 押下 一時停止中 スタート/ ストップ 押下 スタート/ ストップ 押下 リセット 押下 リセット 押下 リセット 押下 動作 スタート/ストップ押下 リセット押下 前状態 待機中 計測中 計測中 一時停止中 一時停止中 計測中 待機中

Slide 28

Slide 28 text

状態表の作成 待機中 計測中 スタート/ ストップ 押下 一時停止中 スタート/ ストップ 押下 スタート/ ストップ 押下 リセット 押下 リセット 押下 リセット 押下 自己遷移は ハイフンで表現する ※通例の表現 動作 スタート/ストップ押下 リセット押下 前状態 待機中 計測中 ー 計測中 一時停止中 ー 一時停止中 計測中 待機中

Slide 29

Slide 29 text

もしもリセットボタンが非活性になる場合… 動作 スタート/ストップ押下 リセット押下 前状態 待機中 計測中 N/A 計測中 一時停止中 N/A 一時停止中 計測中 待機中 待機中 計測中 スタート/ ストップ 押下 一時停止中 スタート/ ストップ 押下 スタート/ ストップ 押下 リセット 押下 起こり得ない遷移は N/A(Not Applicable)で 表現する ※通例の表現

Slide 30

Slide 30 text

テストケース例 # 前状態 操作 期待結果 1 0:00で停止している スタート/ストップ ボタン押下 カウントアップが始まる 2 0:00で停止している リセットボタン押下 0:00で停止したままになる 3 カウントアップしている スタート/ストップ ボタン押下 押した瞬間の時間で カウントが止まる 4 カウントアップしている リセットボタン押下 何も変わらず カウントアップし続ける 5 0:05で停止している スタート/ストップ ボタン押下 0:05からカウントアップが 再開する 6 0:05で停止している リセットボタン押下 0:00に変化し、停止している

Slide 31

Slide 31 text

テストケース例 # 前状態 操作 期待結果 1 0:00で停止している スタート/ストップ ボタン押下 カウントアップが始まる 2 0:00で停止している リセットボタン押下 0:00で停止したままになる 3 カウントアップしている スタート/ストップ ボタン押下 押した瞬間の時間で カウントが止まる 4 カウントアップしている リセットボタン押下 何も変わらず カウントアップし続ける 5 0:05で停止している スタート/ストップ ボタン押下 0:05からカウントアップが 再開する 6 0:05で停止している リセットボタン押下 0:00に変化し、停止している 状態遷移図や状態表では 表現できていない部分

Slide 32

Slide 32 text

お題

Slide 33

Slide 33 text

お題 (ワークのため割愛)

Slide 34

Slide 34 text

ポイント ● 状態遷移図を描くことで、認識の違いに気付ける ● 状態表を書くことで、 起こり得ない遷移や自己遷移のパターンに気付ける

Slide 35

Slide 35 text

カバレッジ

Slide 36

Slide 36 text

カバレッジ JSTQB Advanced Level テストアナリストには 以下のカバレッジが提示されている ● 遷移カバレッジ ● Nスイッチカバレッジ ○ 0スイッチカバレッジ = 遷移カバレッジ ○ 1スイッチカバレッジ ○ 2スイッチカバレッジ … ● ラウンドトリップカバレッジ ● (+αとして)無効な遷移を含める

Slide 37

Slide 37 text

遷移カバレッジ =0スイッチカバレッジ

Slide 38

Slide 38 text

遷移カバレッジ(0スイッチカバレッジ) すべての状態に滞在し、すべての遷移を通過することを 保証する。 ISTQBテスト技術者資格制度 Advanced Level シラバス 日本語版 テストアナリスト Version 3.1.1.J03

Slide 39

Slide 39 text

遷移カバレッジ(0スイッチカバレッジ)の例 リセット スタート/ ストップ スタート/ ストップ スタート/ ストップ リセット リセット 待機中 計測中 一時停止中

Slide 40

Slide 40 text

遷移カバレッジ(0スイッチカバレッジ)の例 リセット スタート/ ストップ スタート/ ストップ スタート/ ストップ リセット リセット 待機中 計測中 一時停止中

Slide 41

Slide 41 text

遷移カバレッジ(0スイッチカバレッジ)の例 リセット スタート/ ストップ スタート/ ストップ スタート/ ストップ リセット リセット 待機中 計測中 一時停止中 上記2ケースを実行することで、 遷移カバレッジが100%になる

Slide 42

Slide 42 text

Nスイッチカバレッジ

Slide 43

Slide 43 text

Nスイッチカバレッジ 「N スイッチカバレッジ」は、長さ N+1 でカバーされた スイッチの数を意味し、その長さのスイッチの総数の パーセンテージで表す。 例えば、100%の1スイッチカバレッジを達成するには、 2つの連続する遷移のすべての有効なシーケンスを、1 回 以上テストする必要がある。 このテストでは、100%の 0 スイッチカバレッジで見落と しがちな故障の種類のいくつかを見つけ出すことができ る。 ISTQBテスト技術者資格制度 Advanced Level シラバス 日本語版 テストアナリスト Version 3.1.1.J03

Slide 44

Slide 44 text

Nスイッチカバレッジの説明用お題 状態C 状態A 状態B 状態D 状態E

Slide 45

Slide 45 text

0スイッチカバレッジ 状態C 状態A 状態B 状態D 状態E 上の各矢印をテストすることで、すべての遷移を通過する

Slide 46

Slide 46 text

0スイッチカバレッジ 状態C 状態A 状態B 状態D 状態E 上の各矢印をテストすることで、すべての遷移を通過する

Slide 47

Slide 47 text

0スイッチカバレッジ 状態C 状態A 状態B 状態D 状態E 上の各矢印をテストすることで、すべての遷移を通過する

Slide 48

Slide 48 text

0スイッチカバレッジ 状態C 状態A 状態B 状態D 状態E 上の各矢印をテストすることで、すべての遷移を通過する

Slide 49

Slide 49 text

0スイッチカバレッジを満たすテストケース 状態C 状態A 状態B 状態D 状態E 2ケースを実施することで、 0スイッチカバレッジを満たすことができる

Slide 50

Slide 50 text

1スイッチカバレッジ 状態C 状態A 状態B 状態D 状態E 状態Aを起点、状態Cを切り替えポイントとして、 状態A→状態C→??のパターンすべての遷移を通過する

Slide 51

Slide 51 text

1スイッチカバレッジ 状態C 状態A 状態B 状態D 状態E 状態Aを起点、状態Cを切り替えポイントとして、 状態A→状態C→??のパターンすべての遷移を通過する

Slide 52

Slide 52 text

1スイッチカバレッジ 状態C 状態A 状態B 状態D 状態E 同様に状態Bを起点、状態Cを切り替えポイントとして、 状態B→状態C→??のパターンすべての遷移を通過する

Slide 53

Slide 53 text

1スイッチカバレッジ 状態C 状態A 状態B 状態D 状態E 同様に状態Bを起点、状態Cを切り替えポイントとして、 状態B→状態C→??のパターンすべての遷移を通過する

Slide 54

Slide 54 text

1スイッチカバレッジを満たすテストケース 状態C 状態A 状態B 状態D 状態E 4ケースを実施することで、 1スイッチカバレッジを満たすことができる

Slide 55

Slide 55 text

2スイッチカバレッジ 状態C 状態A 状態B 状態D 状態E 2スイッチカバレッジの場合、 切り替えポイントが2箇所になる 状態F 状態G 状態I 状態H

Slide 56

Slide 56 text

2スイッチカバレッジ 状態C 状態A 状態B 状態D 状態E 2スイッチカバレッジの場合、 切り替えポイントが2箇所になる 状態F 状態G 状態I 状態H

Slide 57

Slide 57 text

2スイッチカバレッジ 状態C 状態A 状態B 状態D 状態E 2スイッチカバレッジの場合、 切り替えポイントが2箇所になる 状態F 状態G 状態I 状態H

Slide 58

Slide 58 text

2スイッチカバレッジ 状態C 状態A 状態B 状態D 状態E 2スイッチカバレッジの場合、 切り替えポイントが2箇所になる 状態F 状態G 状態I 状態H

Slide 59

Slide 59 text

2スイッチカバレッジ 状態C 状態A 状態B 状態D 状態E 2スイッチカバレッジの場合、 切り替えポイントが2箇所になる 状態F 状態G 状態I 状態H

Slide 60

Slide 60 text

2スイッチカバレッジ 状態C 状態A 状態B 状態D 状態E 2スイッチカバレッジの場合、 切り替えポイントが2箇所になる 状態F 状態G 状態I 状態H

Slide 61

Slide 61 text

2スイッチカバレッジ 状態C 状態A 状態B 状態D 状態E 2スイッチカバレッジの場合、 切り替えポイントが2箇所になる 状態F 状態G 状態I 状態H

Slide 62

Slide 62 text

2スイッチカバレッジ 状態C 状態A 状態B 状態D 状態E 2スイッチカバレッジの場合、 切り替えポイントが2箇所になる 状態F 状態G 状態I 状態H

Slide 63

Slide 63 text

ラウンドトリップ カバレッジ

Slide 64

Slide 64 text

ラウンドトリップカバレッジ 「ラウンドトリップカバレッジ」は、遷移のシーケンスが ループを形成するときに適用する。 100%のラウンドトリップカバレッジを達成するには、 任意の状態から同じ状態に戻るすべてのループを、ループ が開始および終了するすべての状態に対してテストする。 このループには、開始状態と終了状態を除くすべての特定 の状態が複数回含まれていてはならない。 ISTQBテスト技術者資格制度 Advanced Level シラバス 日本語版 テストアナリスト Version 3.1.1.J03

Slide 65

Slide 65 text

ラウンドトリップカバレッジの例 リセット 待機中 計測中 スタート/ ストップ 一時停止中 スタート/ ストップ スタート/ ストップ リセット リセット

Slide 66

Slide 66 text

リセット 待機中 計測中 スタート/ ストップ 一時停止中 スタート/ ストップ スタート/ ストップ リセット リセット まず「待機中」状態に注目する ラウンドトリップカバレッジを満たすテストケース

Slide 67

Slide 67 text

ラウンドトリップカバレッジを満たすテストケース リセット 待機中 計測中 スタート/ ストップ 一時停止中 スタート/ ストップ スタート/ ストップ リセット リセット 「待機中」状態に戻ってくる遷移は…

Slide 68

Slide 68 text

ラウンドトリップカバレッジを満たすテストケース リセット 待機中 計測中 スタート/ ストップ 一時停止中 スタート/ ストップ スタート/ ストップ リセット リセット 「待機中」状態に戻ってくる遷移は…

Slide 69

Slide 69 text

リセット 待機中 計測中 スタート/ ストップ 一時停止中 スタート/ ストップ スタート/ ストップ リセット リセット 次に「計測中」状態に戻ってくる遷移は… ラウンドトリップカバレッジを満たすテストケース

Slide 70

Slide 70 text

ラウンドトリップカバレッジを満たすテストケース リセット 待機中 計測中 スタート/ ストップ 一時停止中 スタート/ ストップ スタート/ ストップ リセット リセット 次に「計測中」状態に戻ってくる遷移は…

Slide 71

Slide 71 text

ラウンドトリップカバレッジを満たすテストケース リセット 待機中 計測中 スタート/ ストップ 一時停止中 スタート/ ストップ スタート/ ストップ リセット リセット 次に「計測中」状態に戻ってくる遷移は…

Slide 72

Slide 72 text

ラウンドトリップカバレッジを満たすテストケース リセット 待機中 計測中 スタート/ ストップ 一時停止中 スタート/ ストップ スタート/ ストップ リセット リセット 次に「計測中」状態に戻ってくる遷移は…

Slide 73

Slide 73 text

リセット 待機中 計測中 スタート/ ストップ 一時停止中 スタート/ ストップ スタート/ ストップ リセット リセット 最後に「一時停止中」状態に戻ってくる遷移は… ラウンドトリップカバレッジを満たすテストケース

Slide 74

Slide 74 text

ラウンドトリップカバレッジを満たすテストケース リセット 待機中 計測中 スタート/ ストップ 一時停止中 スタート/ ストップ スタート/ ストップ リセット リセット 最後に「一時停止中」状態に戻ってくる遷移は…

Slide 75

Slide 75 text

ラウンドトリップカバレッジを満たすテストケース リセット 待機中 計測中 スタート/ ストップ 一時停止中 スタート/ ストップ スタート/ ストップ リセット リセット 最後に「一時停止中」状態に戻ってくる遷移は…

Slide 76

Slide 76 text

ラウンドトリップカバレッジを満たすテストケース リセット 待機中 計測中 スタート/ ストップ 一時停止中 スタート/ ストップ スタート/ ストップ リセット リセット 上記のテストケースが必要となる

Slide 77

Slide 77 text

ラウンドトリップカバレッジの対象外のケース リセット 待機中 計測中 スタート/ ストップ 一時停止中 スタート/ ストップ スタート/ ストップ リセット リセット ↑は「特定の状態が複数回含まれていてはならない。」 のラウンドトリップカバレッジの定義を満たさないため、 テストケースには入らない

Slide 78

Slide 78 text

お題

Slide 79

Slide 79 text

お題 (ワークのため割愛)

Slide 80

Slide 80 text

より実務に近いお題

Slide 81

Slide 81 text

お題 (ワークのため割愛)

Slide 82

Slide 82 text

ポイント ● 注目点によって、作成する状態遷移図は全く異なる ● 注目点によって、ある程度の抽象化が必要 ● 一見すると同じ状態でも、状況によって細分化 ● 状態表を書くと、自己遷移がたくさん発生する

Slide 83

Slide 83 text

まとめ

Slide 84

Slide 84 text

まとめ ● 状態遷移図を描き、状態の変化について認識を揃える ● 状態表を書き、気付いていなかった自己遷移や 無効な遷移を発見する ● 様々なカバレッジを駆使して、工数や要求を満たす 最適なテストケースを作成する ● 様々な情報がある中で適度な抽象化や細分化を行い 状態遷移図を作成する