2.9K Views
December 28, 22
スライド概要
WACATE2022冬1日目の状態遷移テストのセッション資料です。
ソフトウェアエンジニア
状態遷移テスト 2022/12/17 WACATE2022冬
自己紹介 • 角玄 涼(かくげん りょう) • 2022夏からWACATE実行委員(2019冬、2021夏、2021冬に参加) • 組込みソフト開発者 ⇒ テストエンジニア ▫ 自動車のエンジン制御、建設機械の車体制御 • 犬派(一度猫を飼ってみたい) 2022/12/17 WACATE 2022 冬 2
目次 ● セッションの目的 ● 状態遷移テストとは ○ 状態遷移図 ○ 状態遷移表 ○ 状態遷移図と状態遷移表の関係 ○ 状態遷移モデルを作成する際のポイント ■ ワーク1 ○ 状態遷移テストのカバレッジ ○ テストケース作成方法 ■ ワーク2 ● まとめ 2022/12/17 WACATE 2022 冬 3
セッションの目的 ● 状態遷移テストでできることを理解する ● 状態遷移モデル(状態遷移図や状態遷移表)を実際に手を動かして 書いてみて、それぞれの特長を理解する ● 状態遷移テストのテストケース作成時におけるカバレッジの考え方を 理解する 2022/12/17 WACATE 2022 冬 4
状態遷移テストとは ● 状態遷移モデル(状態遷移図や状態遷移表)をもとにして、その モデルを網羅する遷移パスを確認するテスト手法 ● 代表的なブラックボックステスト技法の一つ ○ 仕様に基づいたテスト技法 ● システムが複数の状態を持ち、イベント発生時の状態によって 遷移先が異なる場合に有効 2022/12/17 WACATE 2022 冬 5
状態遷移図とは ● システムが取り得る状態を定義する為の図 ○ どのような状態があるのか、どのようなトリガー(イベント)で 状態遷移するのか、といった振る舞いを表現できる イベントA 初期の疑似状態 ● 開始 2022/12/17 状態2 状態1 イベントB WACATE 2022 冬 6
状態遷移図の書き方 ①仕様から状態とイベントを抜き出す <例>ストップウォッチ仕様 ● 初期状態は待機中で、カウンタの値は0とする ● 待機中に開始ボタンを押すと実行中となり、計測開始 ● 実行中に開始ボタンを押すと中断中となり、計測中断 ● 中断中に開始ボタンを押すと実行中となり、計測再開 ● 実行中に停止ボタンを押すと待機中となる 2022/12/17 WACATE 2022 冬 7
状態遷移図の書き方 ①仕様から状態とイベントを抜き出す <例>ストップウォッチ仕様 ● 初期状態は「待機中」で、カウンタの値は0とする ● 「待機中」に開始ボタンを押すと「実行中」となり、計測開始 ● 「実行中」に開始ボタンを押すと「中断中」となり、計測中断 ● 「中断中」に開始ボタンを押すと「実行中」となり、計測再開 ● 「実行中」に停止ボタンを押すと「待機中」となる 状態は「」部、イベントは下線部 2022/12/17 WACATE 2022 冬 8
状態遷移図の書き方 ②図を書いてみる 開始ボタン押下 開始ボタン押下 ● 待機中 実行中 停止ボタン押下 中断中 開始ボタン押下 状態遷移図を書くことで、文章で記載されている仕様を読むよりも 状態遷移全体の流れをイメージしやすくなる 2022/12/17 WACATE 2022 冬 9
状態遷移表とは ● 状態とイベントの関係を整理する為の表 ○ 状態遷移図で明確になっていない遷移を明確にできる ○ 様々な記載方法がある(以下は一例) イベントA イベントB 状態1 状態2 - 状態2 - 状態1 遷移前状態 × イベント 2022/12/17 状態1 状態2 イベントA 状態2 - 状態1 イベントB - 状態1 状態2 イベント × 遷移前状態 WACATE 2022 冬 状態1 状態2 イベントA イベントB 遷移前状態 × 遷移後状態 (関係行列) 10
状態遷移表の書き方 ● 状態遷移図の状態とイベントを2次元の表で表す 開始ボタン押下 開始ボタン押下 ● 待機中 実行中 中断中 停止ボタン押下 開始ボタン押下 開始ボタン押下 停止ボタン押下 待機中 実行中 ? 実行中 中断中 待機中 中断中 実行中 ? 「待機中」や「中断中」に 停止ボタンを押すと どの状態に遷移する? 「遷移前状態 × イベント」での記載例 2022/12/17 WACATE 2022 冬 11
状態遷移表の書き方 ● 仕様で定義されていないものは、状態遷移の有無や遷移先の 状態を明らかにする 開始ボタン押下 停止ボタン押下 待機中 実行中 ? 実行中 中断中 待機中 中断中 実行中 ? 修正後 開始ボタン押下 停止ボタン押下 待機中 実行中 ー 実行中 中断中 待機中 中断中 実行中 待機中 【状態遷移しない場合の記載例(一例)】 ● イベントを受け付けるがどこにも遷移しない場合は「ー(無視)」で表現 ● その状態ではイベントが発生しない場合は「N/A(適用不可)」で表現 2022/12/17 WACATE 2022 冬 12
状態遷移表の書き方 ● 仕様修正後の状態遷移図と状態遷移表 開始ボタン押下 ● 待機中 実行中 停止ボタン押下 停止ボタン押下 開始ボタン押下 開始ボタン押下 開始ボタン押下 停止ボタン押下 待機中 実行中 ー 実行中 中断中 待機中 中断中 実行中 待機中 中断中 状態遷移表を書くことで仕様の抜け漏れに気付くことができる 2022/12/17 WACATE 2022 冬 13
状態遷移図と状態遷移表の関係 ● 状態遷移図はシステム全体を俯瞰するのに有効 ● 状態遷移表は各状態毎の動作を網羅的に確認するのに有効 相補関係 状態遷移表 状態遷移図 両方を作成することで状態遷移テストの効果向上が期待できる 2022/12/17 WACATE 2022 冬 14
状態遷移モデルを作成する際のポイント ● 状態遷移図 ○ できるだけシンプルにまとめる ○ 仕様が最初から状態遷移図で表現されている場合、作り直してみる のもよい ■ 複雑な場合は粒度を上げてみる ● 状態遷移表 ○ イベントが発生しても何も起きない場合(無視)とそもそもイベントが 発生しない場合(適用不可)は区別した方がよい ■ テストの仕方が変わってくる 2022/12/17 WACATE 2022 冬 15
ワーク1 ● 仕様書を読んで、状態遷移図、状態遷移表を作成してみよう ○ 状態遷移図 ■ ○ Googleスライドで作成 状態遷移表 ■ Googleスプレッドシートで作成 ● ● 縦軸:状態 横軸:イベント ● 個人ワーク ○15分 ● グループでのディスカッション ○15分(各自のワーク内容説明後にグループ内で気付きや感想を共有) 2022/12/17 WACATE 2022 冬 16
状態遷移テストのカバレッジ ● テストケース作成の際にどのくらいのカバレッジ(網羅率)でテストする のかという基準として「Nスイッチカバレッジ」がある ○ 0スイッチカバレッジ ■ 全ての遷移を1回以上実行している場合、100% 状態1 状態2 ○ 1スイッチカバレッジ(状態2をスイッチに例えている) ■ 2連続する遷移を1回以上実行している場合、100% 状態1 2022/12/17 状態2 WACATE 2022 冬 状態3 17
0スイッチカバレッジの例 ● 状態1から状態2で0スイッチするパターン イベントA ● 開始 イベントC 状態1 状態2 状態3 イベントB イベントD イベントE イベントF 状態4 2022/12/17 WACATE 2022 冬 イベントA~Fの 全6パターンの遷移実行で カバレッジ100% 18
1スイッチカバレッジの例 ● 状態1から状態2で1スイッチするパターン① イベントA ● 開始 イベントCによる遷移で 状態2から状態3へ スイッチング イベントC 状態1 状態2 状態3 イベントB イベントD イベントE イベントF 状態4 2022/12/17 WACATE 2022 冬 19
1スイッチカバレッジの例 ● 状態1から状態2で1スイッチするパターン② イベントA ● イベントC 状態1 開始 状態2 イベントB イベントD イベントE イベントEによる遷移で 状態2から状態4へ スイッチング 2022/12/17 状態3 イベントF 状態4 WACATE 2022 冬 20
1スイッチカバレッジの例 ● 状態1から状態2で1スイッチするパターン③ イベントA ● 状態1 開始 イベントBによる遷移で 状態2から状態1へ スイッチング 2022/12/17 イベントC 状態2 状態3 イベントB イベントD イベントE イベントF 状態4 WACATE 2022 冬 21
1スイッチカバレッジの例 ● 状態2で1スイッチするパターンと同様に状態1、3、4で1スイッチ するパターンも考えていくと全部で12パターンになる ○ 0スイッチカバレッジと比較して、 1スイッチカバレッジは大幅にパターンが増加する ● 単純に1スイッチカバレッジ100%を目指すのではなく、工夫して パターンを減らすことを考えるべき ○ 組み合わせテストと同じ 2022/12/17 WACATE 2022 冬 22
状態遷移テストのカバレッジ ● カバレッジ基準はどうやって決めればよいか? ⇒基本は0スイッチカバレッジ ● 1スイッチ以上のカバレッジは状況によって判断すべき ○ 特定の状態にリスクがあると考えられる場合 ○ 0スイッチカバレッジ基準のテストケース実行後にテストケースを 追加したい場合 など 2022/12/17 WACATE 2022 冬 23
テストケース作成方法(0スイッチカバレッジ) ● 状態遷移表をベースにテストケースを作成する ○ イベント発生時に状態が遷移する/しないことをテストする <状態遷移表> <テストケース> No 遷移前状態 イベント 期待結果 ー 1 待機中 開始ボタン押下 実行中 中断中 待機中 2 待機中 停止ボタン押下 待機中 実行中 待機中 3 実行中 開始ボタン押下 中断中 4 実行中 ・ 停止ボタン押下 停止中 5 中断中 開始ボタン押下 実行中 6 中断中 停止ボタン押下 停止中 開始ボタン押下 停止ボタン押下 待機中 実行中 実行中 中断中 2022/12/17 WACATE 2022 冬 ・ 24
ワーク2 ● ワーク1で作成した状態遷移表を使ってテストケースを作成してみよう ○ ワーク1で使用したGoogleスプレッドシートで作成 ○ 遷移前状態/イベント/期待結果 ○ 0スイッチカバレッジ網羅 ● 個人ワーク ○ 10分 ● グループでのディスカッション ○ 10分(各自のワーク内容説明後にグループ内で気付きや感想を共有) 2022/12/17 WACATE 2022 冬 25
まとめ ● 状態遷移テストでは、状態遷移モデルを網羅するようなテストケースを 作成することで、システムの有効な遷移、無効な遷移を確認することが できる ● 状態遷移図/状態遷移表を作成することでシステム全体の状態遷移を 見える化し、仕様の抜け漏れをチェックすることができる ● Nスイッチカバレッジの考え方を使って、目的に沿ったテストケースの 抽出が可能 2022/12/17 WACATE 2022 冬 26
参考資料 ● ISTQBテスト技術者資格制度Advanced Level シラバス 日本語版 テストアナリスト Version 3.1.1.J03 ○ https://jstqb.jp/dl/jstqb.jpdlJSTQB-SyllabusALTA_V311.J03.pdf ● ソフトウェアテスト技法練習帳 ○ 1スイッチカバレッジのテストケース作成方法を知りたい方にお勧め 2022/12/17 WACATE 2022 冬 27
以上 2022/12/17 WACATE 2022 冬 28