Upgrade to Pro — share decks privately, control downloads, hide ads and more …

【S2】明日から使えるテスト技法勉強会_3_状態遷移テスト

 【S2】明日から使えるテスト技法勉強会_3_状態遷移テスト

こちらはConnpassで開催した「明日から使えるテスト技法勉強会」シーズン2で使用された資料となります。合計7部ありますので、テスト技法にご興味を持つ方は、ぜひご活用いただければ幸いです。

また、本資料中使用されたツールGIHOZ(ギホーズ)は、各種テスト技法を手軽に利用できるクラウド型ツールです。
GIHOZはアカウント登録のみで、すぐに利用が可能です。高品質なテストを効率よく作成するために、熟練のテストエンジニアが利用しているさまざまなテスト技法を手軽に体感してください。

GIHOZに登録されたテスト技法はすべて無償でご利用いただけます。
詳細はこちらまでご確認ください。👉https://www.veriserve.co.jp/gihoz/

GIHOZ SUPPORT TEAM

September 30, 2022
Tweet

More Decks by GIHOZ SUPPORT TEAM

Other Decks in Education

Transcript

  1. © 2022 VeriServe Corporation 会社名・製品名・サービス名は、各社の登録商標または商標です。 ➢ 名前 ◼ 田上 諭

    (たのうえ さとし) ➢ 所属 ◼ 株式会社ベリサーブ 研究企画開発部 ➢ 経歴 ◼ 2018年度に新卒で入社 ◼ ソリューション事業部 ◆ 静的解析、セキュリティテスト、自動テスト 1年ほど ◼ 研究企画開発部で GIHOZ開発 ◆ 2019年 ~ 現在 自己紹介 1
  2. © 2022 VeriServe Corporation 会社名・製品名・サービス名は、各社の登録商標または商標です。 状態遷移モデル(状態遷移図や状態遷移表)から テストケースを作るテスト技法 状態遷移テストとは 4 S2

    ログアウト中 S1 ログイン中 S3 ロック中 E1: ログアウト E2: タイムアウト E3: ログイン E4: ロック時間経過 E5: ロックアウト 状態遷移図の例 状態遷移表の例 (遷移前の状態×遷移後の状態) 遷移後 遷移前 S1 S2 S3 S1 E1+E2 S2 E3 E5 S3 E4
  3. © 2022 VeriServe Corporation 会社名・製品名・サービス名は、各社の登録商標または商標です。 状態遷移図の例 5 S2 ログアウト中 S1

    ログイン中 S3 ロック中 E1: ログアウト E2: タイムアウト E3: ログイン E4: ロック時間経過 E5: ロックアウト ※アクションは省略される場合もある 状態 遷移 イベント[/アクション] 【凡例】
  4. © 2022 VeriServe Corporation 会社名・製品名・サービス名は、各社の登録商標または商標です。 状態遷移表の例(遷移前状態×イベント) 6 イベント 遷移前状態 E1

    ログアウト E2 タイムアウト E3 ログイン E4 ロック 時間経過 E5 ロックアウト S1 ログイン中 S2 S2 Ignore Ignore Ignore S2 ログアウト中 Ignore Ignore S1 Ignore S3 S3 ロック中 Ignore Ignore Ignore S2 Can’t happen Ignore:イベントが発生しても無視し、他の状態に遷移しないことを示す。 Can’t happen: イベントが発生しないことを示す。
  5. © 2022 VeriServe Corporation 会社名・製品名・サービス名は、各社の登録商標または商標です。 状態遷移表の例(遷移前状態×遷移後状態) 7 遷移後状態 遷移前状態 S1

    ログイン中 S2 ログアウト中 S3 ロック中 S1 ログイン中 E1+E2 S2 ログアウト中 E3 E5 S3 ロック中 E4 E1: ログアウト E2: タイムアウト E3: ログイン E4: ロック時間経過 E5:ロックアウト Nスイッチテストケース(後述)の作成は、この表を行列としてとらえて、行列の積を計算することでも可能。
  6. © 2022 VeriServe Corporation 会社名・製品名・サービス名は、各社の登録商標または商標です。 状態遷移テストで作るテストケースの例 8 開始状態 入力 終了状態

    1 ログイン中 ログアウト ログアウト中 2 ログアウト中 ロックアウト ロック中 3 ログイン中 タイムアウト ログアウト中 4 ログアウト中 ログイン ログイン中 5 ロック中 ロックアウト経過 ログアウト中
  7. © 2022 VeriServe Corporation 会社名・製品名・サービス名は、各社の登録商標または商標です。 Nスイッチカバレッジ 9 0スイッチ 中間状態を0個経由する 1スイッチ

    中間状態を1個経由する 2スイッチ 中間状態を2個経由する ある状態 ある状態 ある状態 ある状態 状態 x ある状態 ある状態 状態 x 状態 y ➢ ある状態からある状態に遷移するのに、中間状態をN個経由するようにテストケースを作成する
  8. © 2022 VeriServe Corporation 会社名・製品名・サービス名は、各社の登録商標または商標です。 1スイッチケースの作り方:完成形 10 開始状態 入力 後状態

    入力 終了状態 1 ログイン中 ログアウト ログアウト中 ロックアウト ロック中 2 ログイン中 ログアウト ログアウト中 ログイン ログイン中 3 ログアウト中 ロックアウト ロック中 ロックアウト経過 ログアウト中 4 ログイン中 タイムアウト ログアウト中 ロックアウト ロック中 5 ログイン中 タイムアウト ログアウト中 ログイン ログイン中 6 ログアウト中 ログイン ログイン中 ログアウト ログアウト中 7 ログアウト中 ログイン ログイン中 タイムアウト ログアウト中 8 ロック中 ロックアウト経過 ログアウト中 ロックアウト ロック中 9 ロック中 ロックアウト経過 ログアウト中 ログイン ログイン中
  9. © 2022 VeriServe Corporation 会社名・製品名・サービス名は、各社の登録商標または商標です。 1スイッチテストケースの作り方の例:Step1 11 開始状態 入力 終了状態

    1 ログイン中 ログアウト ログアウト中 2 ログアウト中 ロックアウト ロック中 3 ログイン中 タイムアウト ログアウト中 4 ログアウト中 ログイン ログイン中 5 ロック中 ロックアウト経過 ログアウト中 0スイッチテストケースを持ってくる
  10. © 2022 VeriServe Corporation 会社名・製品名・サービス名は、各社の登録商標または商標です。 1スイッチテストケースの作り方の例:Step2 12 開始状態 入力 後状態

    入力 終了状態 1 ログイン中 ログアウト ログアウト中 2 ログアウト中 ロックアウト ロック中 3 ログイン中 タイムアウト ログアウト中 4 ログアウト中 ログイン ログイン中 5 ロック中 ロックアウト経過 ログアウト中 終了状態を後状態に変更し、入力と終了状態の列を作る
  11. © 2022 VeriServe Corporation 会社名・製品名・サービス名は、各社の登録商標または商標です。 1スイッチテストケースの作り方の例:Step3 13 開始状態 入力 後状態

    入力 終了状態 1 ログイン中 ログアウト ログアウト中 ロックアウト ロック中 2 ログアウト中 ロックアウト ロック中 3 ログイン中 タイムアウト ログアウト中 4 ログアウト中 ログイン ログイン中 5 ロック中 ロックアウト経過 ログアウト中 後状態が取りうる入力を、表に記述する。入力に伴って、終了状態も決まるので、 終了状態も記述する。
  12. © 2022 VeriServe Corporation 会社名・製品名・サービス名は、各社の登録商標または商標です。 1スイッチテストケースの作り方の例:Step4 14 開始状態 入力 後状態

    入力 終了状態 1 ログイン中 ログアウト ログアウト中 ロックアウト ロック中 2 ログイン中 ログアウト ログアウト中 3 ログアウト中 ロックアウト ロック中 4 ログイン中 タイムアウト ログアウト中 5 ログアウト中 ログイン ログイン中 6 ロック中 ロックアウト経過 ログアウト中 ログアウト中が取りうる入力は、ロックアウトとログインと2つあるので行を追加する。
  13. © 2022 VeriServe Corporation 会社名・製品名・サービス名は、各社の登録商標または商標です。 1スイッチテストケースの作り方の例:Step5 15 開始状態 入力 後状態

    入力 終了状態 1 ログイン中 ログアウト ログアウト中 ロックアウト ロック中 2 ログイン中 ログアウト ログアウト中 ログイン ログイン中 3 ログアウト中 ロックアウト ロック中 4 ログイン中 タイムアウト ログアウト中 5 ログアウト中 ログイン ログイン中 6 ロック中 ロックアウト経過 ログアウト中 後状態が取りうる入力を、表に記述する。入力に伴って、終了状態も決まるので、 終了状態も記述する。
  14. © 2022 VeriServe Corporation 会社名・製品名・サービス名は、各社の登録商標または商標です。 1スイッチテストケースの作り方の例:Step6 16 開始状態 入力 後状態

    入力 終了状態 1 ログイン中 ログアウト ログアウト中 ロックアウト ロック中 2 ログイン中 ログアウト ログアウト中 ログイン ログイン中 3 ログアウト中 ロックアウト ロック中 ロックアウト経過 ログアウト中 4 ログイン中 タイムアウト ログアウト中 ロックアウト ロック中 5 ログイン中 タイムアウト ログアウト中 ログイン ログイン中 6 ログアウト中 ログイン ログイン中 ログアウト ログアウト中 7 ログアウト中 ログイン ログイン中 タイムアウト ログアウト中 8 ロック中 ロックアウト経過 ログアウト中 ロックアウト ロック中 9 ロック中 ロックアウト経過 ログアウト中 ログイン ログイン中 すべての取りうる入力のパターンがなくなるまで続ける。
  15. © 2022 VeriServe Corporation 会社名・製品名・サービス名は、各社の登録商標または商標です。 ➢ Nスイッチカバレッジでテストケースを作成するのが一般的 ➢ Nスイッチ以外にも様々なカバレッジを考えられる ◼

    状態遷移モデルの代表的な遷移のみを網羅する ◼ 全ての状態に少なくとも1度以上は訪れる(状態は網羅) ◼ 無効遷移を含めた全遷移の網羅 ◼ 不正に遷移しないことを確認する(状態遷移表のIgnore、Can’t happenを確認する) ◼ 状態遷移モデルから特定のパス(シナリオ)を導出する 状態遷移テストにおけるカバレッジ 17 0スイッチカバレッジ100% 対象となる状態遷移モデルにおける0スイッチの パス(経路)を少なくとも1回以上実行している 1スイッチカバレッジ100% 対象となる状態遷移モデルにおける1スイッチの パス(経路)を少なくとも1回以上実行している 2スイッチカバレッジ100% 対象となる状態遷移モデルにおける2スイッチの パス(経路)を少なくとも1回以上実行している 3スイッチカバレッジ100% 対象となる状態遷移モデルにおける3スイッチの パス(経路)を少なくとも1回以上実行している
  16. © 2022 VeriServe Corporation 会社名・製品名・サービス名は、各社の登録商標または商標です。 ➢ バグが見つかるのは遷移したタイミングとは限らない ◼ ある遷移で内部変数の値がおかしくなったとしても、バグとして現れるのは、その内部変数を次に参照したとき →

    これに気付くには、少なくとも1スイッチのテストケースが必要 ➢ Nスイッチカバレッジを網羅したからといって、 N-1 スイッチカバレッジを網羅できるとは限らない場合がある 覚えておきたいこと 19 1スイッチテストケースには、 「状態4→状態3」の遷移 が含まれていない
  17. © 2022 VeriServe Corporation 会社名・製品名・サービス名は、各社の登録商標または商標です。 ➢ メリット ◼ 仕様を状態遷移モデルで表すことで、テスト対象の状態の遷移が取り得る経路を整理できる ◼

    Nスイッチカバレッジなどの網羅基準を決めれば、テストケースを機械的に導出できる ◼ 1スイッチカバレッジでは、0スイッチカバレッジで見つからなかったバグを発見できる ➢ デメリット ◼ 状態を細かく分けたりスイッチ数を増やすと、経路が多くなり、テストケースの数が爆発的に増える ➢ 使いどころ ◼ テスト対象が複数の状態を持っており、定めたカバレッジに基づいて遷移を一通り確認したい場合 ◼ 画面遷移を一通り確認したい場合 状態遷移テストのメリット、使いどころ 20
  18. © 2022 VeriServe Corporation 会社名・製品名・サービス名は、各社の登録商標または商標です。 ➢ Nスイッチカバレッジでテストケースを作成するのが一般的 ➢ Nスイッチ以外にも様々なカバレッジを考えられる ◼

    状態遷移モデルの代表的な遷移のみを網羅する ◼ 全ての状態に少なくとも1度以上は訪れる(状態は網羅) ◼ 無効遷移を含めた全遷移の網羅 ◼ 不正に遷移しないことを確認する(状態遷移表のIgnore、Can’t happenを確認する) ◼ 状態遷移モデルから特定のパス(シナリオ)を導出する 状態遷移テストにおけるカバレッジ 26 0スイッチカバレッジ100% 対象となる状態遷移モデルにおける0スイッチの パス(経路)を少なくとも1回以上実行している 1スイッチカバレッジ100% 対象となる状態遷移モデルにおける1スイッチの パス(経路)を少なくとも1回以上実行している 2スイッチカバレッジ100% 対象となる状態遷移モデルにおける2スイッチの パス(経路)を少なくとも1回以上実行している 3スイッチカバレッジ100% 対象となる状態遷移モデルにおける3スイッチの パス(経路)を少なくとも1回以上実行している GIHOZは◦が付いている カバレッジをサポート
  19. © 2022 VeriServe Corporation 会社名・製品名・サービス名は、各社の登録商標または商標です。 ➢ 扇風機の仕様 ◼ 停止中に「運転・停止ボタン」を押すと、運転開始します。 ◼

    運転中に「運転・停止ボタン」を押すと、停止します。 ◼ 運転中に、「運転モード切り替えボタン」を押すと、「風量・弱」→「風量・中」→「風量・強」の順で切 り替わっていきます。 ◼ 運転中に、「風量・強」の状態で、「運転モード切り替えボタン」を押すと、「風量・弱」になります。 ◼ 運転を開始する場合は、必ず「風量・弱」の状態で始まります。 ➢ 状態遷移図を作成し、1スイッチのテストケースを作成してください 例題1 28
  20. © 2022 VeriServe Corporation 会社名・製品名・サービス名は、各社の登録商標または商標です。 ➢ 扇風機の仕様 ◼ 停止中に「運転・停止ボタン」を押すと、運転開始します。 ◼

    運転中に「運転・停止ボタン」を押すと、停止します。 ◼ 運転中に、「運転モード切り替えボタン」を押すと、「風量・弱」→「風量・中」→「風量・強」の順で切 り替わっていきます。 ◼ 運転中に、「風量・強」の状態で、「運転モード切り替えボタン」を押すと、「風量・弱」になります。 ◼ 運転を開始する場合は、必ず「風量・弱」の状態で始まります。 ➢ 状態遷移図を作成し、1スイッチのテストケースを作成してください 例題1: 状態遷移図を作る(状態とイベントを識別する) 29 停止中の状態と 運転中の状態がある 運転中には、風量が異なる 3つの状態がある 運転・停止ボタンと運転モード切り替え ボタンの2つのボタンがあり、これらを 押されることがイベントとなる
  21. © 2022 VeriServe Corporation 会社名・製品名・サービス名は、各社の登録商標または商標です。 ➢ 初期データを削除する 例題1: 状態遷移図を作る 30

    ①Ctrl+Aキーで要素を全選択 または、グレー背景の領域でドラッグ アンドドロップして要素を全選択 ②Deleteキーを押して、 選択した要素を削除
  22. © 2022 VeriServe Corporation 会社名・製品名・サービス名は、各社の登録商標または商標です。 ➢ 状態を追加する 例題1: 状態遷移図を作る 31

    ①グレー背景の領域でダブル クリックして新しい状態を追加 ②状態の中の文字列をダブルクリック または、 状態を選択してF2キーで、名前を編集
  23. © 2022 VeriServe Corporation 会社名・製品名・サービス名は、各社の登録商標または商標です。 ➢ 遷移を追加する 例題1: 状態遷移図を作る 32

    ①ある状態から別の状態に 向けてドラッグアンドドロップ ※注:状態の四角形の端の辺り からドラッグアンドドロップする ②矢印の上の文字列をダブルクリック または、矢印を選択してF2キーで、 イベントの名前を編集
  24. © 2022 VeriServe Corporation 会社名・製品名・サービス名は、各社の登録商標または商標です。 ➢ 状態は四角形の真ん中あたりをドラッグアンドドロップすると移動できる ➢ 遷移は矢印を選択して、水色のアイコンをドラッグアンドドロップすると位置を調整できる 例題1:

    状態遷移図を作る 34 ①状態の四角形をドラッグ アンドドロップして移動 ※注:状態名の文字列の辺り をドラッグアンドドロップする ②矢印を選択してから、水色の アイコンをドラッグアンドドロップ して位置調整
  25. © 2022 VeriServe Corporation 会社名・製品名・サービス名は、各社の登録商標または商標です。 ➢ 生成ボタンを押すと、自動で状態遷移表とテストケースを生成できる 例題1: 状態遷移表とテストケースを生成する 38

    ①「状態遷移表とテスト ケースを生成」ボタンを押す ②遷移の漏れがないか確認するために、 状態遷移表(状態×イベント)に 空欄がないか確認すると良い
  26. © 2022 VeriServe Corporation 会社名・製品名・サービス名は、各社の登録商標または商標です。 ➢ 扇風機の仕様 ◼ 停止中に「運転・停止ボタン」を押すと、運転開始します。 ◼

    運転中に「運転・停止ボタン」を押すと、停止します。 ◼ 運転中に、「運転モード切り替えボタン」を押すと、「風量・弱」→「風量・中」→「風量・強」の順で切 り替わっていきます。 ◼ 運転中に、「風量・強」の状態で、「運転モード切り替えボタン」を押すと、「風量・弱」になります。 ◼ 運転中に、「首振りボタン」を押すと、首を振り始めます。 ◼ 首振りをしている最中に、「首振りボタン」を押すと首振りを終了します。 ◼ 運転を開始する場合は、必ず「風量・弱」で首を振っていない状態で始まります。 ➢ 状態遷移図を作成し、1スイッチのテストケースを作成してください 例題2 ※赤字が例題1からの変更・追加箇所 42
  27. © 2022 VeriServe Corporation 会社名・製品名・サービス名は、各社の登録商標または商標です。 ➢ 扇風機の仕様 ◼ 停止中に「運転・停止ボタン」を押すと、運転開始します。 ◼

    運転中に「運転・停止ボタン」を押すと、停止します。 ◼ 運転中に、「運転モード切り替えボタン」を押すと、「風量・弱」→「風量・中」→「風量・強」の順で切 り替わっていきます。 ◼ 運転中に、「風量・強」の状態で、「運転モード切り替えボタン」を押すと、「風量・弱」になります。 ◼ 運転中に、「首振りボタン」を押すと、首を振り始めます。 ◼ 首振りをしている最中に、「首振りボタン」を押すと首振りを終了します。 ◼ 運転を開始する場合は、必ず「風量・弱」で首を振っていない状態で始まります。 ➢ 状態遷移図を作成し、1スイッチのテストケースを作成してください 例題2: 状態遷移図を作る(状態とイベントを識別する) 43 「首を振っている」という 状態が増えた
  28. © 2022 VeriServe Corporation 会社名・製品名・サービス名は、各社の登録商標または商標です。 ➢ 扇風機の仕様 ◼ 停止中に「運転・停止ボタン」を押すと、運転開始します。 ◼

    運転中に「運転・停止ボタン」を押すと、停止します。 ◼ 運転中に、「運転モード切り替えボタン」を押すと、「風量・弱」→「風量・中」→「風量・強」の順で切 り替わっていきます。 ◼ 運転中に、「風量・強」の状態で、「運転モード切り替えボタン」を押すと、「風量・弱」になります。 ◼ 運転中に、「首振りボタン」を押すと、首を振り始めます。 ◼ 首振りをしている最中に、「首振りボタン」を押すと首振りを終了します。 ◼ 運転を開始する場合は、必ず「風量・弱」、「首振り:なし」の状態で始まります。 ➢ 状態遷移図を作成し、1スイッチのテストケースを作成してください 例題2: 状態遷移図を作る(まず状態とイベントを識別する) 45 運転中の状態として、首を 振っている or 振っていない という状態が増えた
  29. © 2022 VeriServe Corporation 会社名・製品名・サービス名は、各社の登録商標または商標です。 ➢ 遷移を追加する 例題2: 状態遷移図を作る 48

    「首振り・あり」の状態間での、 運転モード切替ボタンによる 遷移を追加 「首振り・あり」の状態から 停止中への遷移を追加 首振りボタンに よる遷移を追加 首振りボタンに よる遷移を追加
  30. © 2022 VeriServe Corporation 会社名・製品名・サービス名は、各社の登録商標または商標です。 ➢ 生成ボタンを押すと、自動で状態遷移表とテストケースを生成できる 例題2: 状態遷移表とテストケースを生成する 50

    ①「状態遷移表とテスト ケースを生成」ボタンを押す (中略) ②遷移の漏れがないか確認するために、 状態遷移表(状態×イベント)に 空欄がないか確認すると良い
  31. © 2022 VeriServe Corporation 会社名・製品名・サービス名は、各社の登録商標または商標です。 ➢ 状態遷移テストについて解説&演習を行いました ◼ 状態遷移モデル(状態遷移図や状態遷移表)からテストケースを作成するテスト技法 ◼

    状態遷移モデルを作成する際は状態の識別や整理を行うなど、頭を使う必要がある ◼ 状態遷移モデルからテストケースを作成する「作業」はGIHOZなどのツールを使うと効率的 ➢ 状態遷移テストを活用する場面があったら、GIHOZを使ってもらえると嬉しいです まとめ 53