wacate2013冬 状態遷移テスト #wacate2013w

46
+ 状状状状状状状 2013 状 12 状 14 状 状状 () WACATE 2013 状 WACATE 状状状状状 状状状状

Upload: kinji-akemine

Post on 17-Dec-2014

797 views

Category:

Technology


0 download

DESCRIPTION

WACATE2013冬のセッションで講義をした状態遷移テストのスライドです。

TRANSCRIPT

Page 1: WACATE2013冬 状態遷移テスト #wacate2013w

+

状態遷移テスト2013 年 12 月 14 日(土) WACATE 2013 冬

WACATE 実行委員会 朱峰錦司

Page 2: WACATE2013冬 状態遷移テスト #wacate2013w

+

はじめに

2013/12/14WACATE 2013 冬

Page 3: WACATE2013冬 状態遷移テスト #wacate2013w

3+自己紹介

朱峰錦司(あけみねきんじ) @kjstylepp

某豊洲にある SIer技術開発本部 プロアクティブ・テスティング COE 全社向けテストプロセスの策定・普及展開 上記プロセスを実現したツールの開発・普及展開 その他対外活動

書籍:革新を続けるソフトウェア生産技術 Web 連載:実践!テスト自動化の勘所

http://itpro.nikkeibp.co.jp/article/COLUMN/20120919/423524/

WACATE 実行委員

テスト自動化研究会 キーワード駆動テスト勉強会

2013/12/14WACATE 2013 冬

Page 4: WACATE2013冬 状態遷移テスト #wacate2013w

4+お品書き

1. 状態遷移テスト概要

2. 状態遷移モデル

3. 状態遷移テスト

4. 自動化ツール

2013/12/14WACATE 2013 冬

Page 5: WACATE2013冬 状態遷移テスト #wacate2013w

+

1. 状態遷移テスト概要

2013/12/14WACATE 2013 冬

Page 6: WACATE2013冬 状態遷移テスト #wacate2013w

+1.1 状態遷移テストとは

状態遷移モデルを参照してテストケースを作成するテスト設計技法 仕様をもとにテストケースを作成するのでブラック

ボックステストに該当 仕様モデルをベースにして(ある程度)機械的にテスト

ケースを作成するのでモデルベースドテストに該当

2013/12/14WACATE 2013 冬

6

Page 7: WACATE2013冬 状態遷移テスト #wacate2013w

7+1.2 モデルベースドテストとは

モデルを活用してテスト成果物を作成する技術

2013/12/14WACATE 2013 冬

モデル 実システム

抽象化されたテスト

実行可能なテスト

詳細化・開発

詳細化・開発

実行生成 この過程がモデル

ベースドテスト

Page 8: WACATE2013冬 状態遷移テスト #wacate2013w

8+1.3 モデルベースドテストの注意点

入力となるモデルの質に大きく依存 よい状態遷移モデルをかけないと、状態遷移テストの

価値が低くなる

作成されるテストケースは抽象的 実際に実行可能なテストケースにするために、情報を

付与する必要がある

2013/12/14WACATE 2013 冬

Page 9: WACATE2013冬 状態遷移テスト #wacate2013w

+

2. 状態遷移モデル

2013/12/14WACATE 2013 冬

Page 10: WACATE2013冬 状態遷移テスト #wacate2013w

+2.1 モデル

開発対象のシステム(=テスト対象)の振る舞いや性質を特定の観点で抽象化して表現したもの ひとつのモデルで全ての仕様を表現することは不可能

2013/12/14WACATE 2013 冬

10

Page 11: WACATE2013冬 状態遷移テスト #wacate2013w

11+2.2 モデルの種類

様々な観点によるモデリング手法が存在 状態遷移モデル 論理モデル 組合せモデル フローモデル 代数モデル 統計モデル

システム特性に応じて適切なモデリング手法を選択する必要がある

しっかりと文法/メタモデルを決めて記述 誰かが適当に書いた絵ではモデルとしての価値が低い

2013/12/14WACATE 2013 冬

本日はこれの話

Page 12: WACATE2013冬 状態遷移テスト #wacate2013w

12+2.3 状態遷移モデル( 1/2 )

システムの状態の変化に着目してシステムの振る舞いをモデリング

構成要素 様々な書き方が存在 基本的な構成要素は以下の通り

2013/12/14WACATE 2013 冬

事前状態 事後状態

イベント [ 事前条件 ]/アクション

Page 13: WACATE2013冬 状態遷移テスト #wacate2013w

13+2.3 状態遷移モデル( 2/2 )

構成要素

2013/12/14WACATE 2013 冬

構成要素 説明

状態 ある時点でのシステムの状態を表現。

 初期状態

特殊な状態。モデルで表現したい状態遷移の開始時点を表現。

 終了状態

特殊な状態。モデルで表現したい状態遷移の終了時点を表現。なくてもよい。

イベント 状態遷移が発生するきっかけ。

事前条件 状態遷移の分岐条件。

アクション

状態遷移の結果、システムに発生する状態遷移以外の変化。

Page 14: WACATE2013冬 状態遷移テスト #wacate2013w

14+(参考) state machine のメタモデル

2013/12/14WACATE 2013 冬

出典: UML Superstructure Specification, v2.4.1

Page 15: WACATE2013冬 状態遷移テスト #wacate2013w

15+2.4 状態遷移モデルの書き方

状態遷移図直観的で書きやすい 全体の概要把握に向いている

状態遷移表 仕様の漏れを発見できる網羅的に整理するのに向いている

2013/12/14WACATE 2013 冬

Page 16: WACATE2013冬 状態遷移テスト #wacate2013w

16+2.4.1 状態遷移図の例

2013/12/14WACATE 2013 冬

Page 17: WACATE2013冬 状態遷移テスト #wacate2013w

17+2.4.2 状態遷移表の例( 1/2 )

2013/12/14WACATE 2013 冬

事前状態/

事後状態

商品選択不可

商品選択

可能

商品搬出中

懸賞中懸賞当

商品選択不可

貨幣投入

商品選択可能

商品選択

商品搬出中

搬出完了[懸賞購

入 ]

搬出完了[懸賞購

入でない ]

懸賞中 懸賞終了[落選 ]

懸賞終了[ 当選 ]

懸賞当選 商品選択

事前状態/事後状態を軸にした場合

Page 18: WACATE2013冬 状態遷移テスト #wacate2013w

18+2.4.2 状態遷移表の例( 2/2 )

2013/12/14WACATE 2013 冬

事前状態/イベント

貨幣投入 商品選択 搬出完了 懸賞終了

商品選択不可 商品選択可能

商品選択可能 商品搬出中

商品搬出中

商品選択不可[懸賞購入 ]

商品選択不可[懸賞購入でな

い ]

懸賞中

商品選択不可[落選 ]

懸賞当選[ 当選 ]

懸賞当選 商品搬出中

事前状態/イベントを軸にした場合

Page 19: WACATE2013冬 状態遷移テスト #wacate2013w

19+(参考)状態変数の扱い( 1/2 )

状態に変数を持たせることでより効率的なモデリングが可能

例題非常にシンプルな Web フォームの画面状態遷移を考え

2013/12/14WACATE 2013 冬

えええええ 追加

• あああああ• いいいいい• ううううう

追加

• あああああ• いいいいい• ううううう• えええええ

削除削除削除

削除削除削除削除

Page 20: WACATE2013冬 状態遷移テスト #wacate2013w

20+(参考)状態変数の扱い( 2/2 )

変数を使わないと…

変数(とアクション)を使うと…

2013/12/14WACATE 2013 冬

リストが 0件

リストが 1件

リストが 2件 ・・・

リストが 0件 リストが 1 件以上

追加 追加

削除削除

追加/ x=1変数 x: リスト件数

追加/ x++

削除 [x>1] / x--削除 [x==1] / x=0

Page 21: WACATE2013冬 状態遷移テスト #wacate2013w

21+2.5 状態遷移モデルの使いどころ

組込みシステムユーザ操作や信号受信などをイベントとしてモデリン

グ 同期/非同期などの複雑な仕様の表現に適している

近年は状態遷移モデルに対するモデル検査を実施することも増えてきている

業務システム データモデルのライフサイクル UI の変化

2013/12/14WACATE 2013 冬

Page 22: WACATE2013冬 状態遷移テスト #wacate2013w

22+(参考)モデル検査

モデル(=設計)自体の妥当性を検証する技術稀にモデルベースドテストと混同されることがあるが、

全く違う技術 テストではないが、品質向上に寄与する技術

テストでは難しい「○○しないこと」をチェックする手段

モデルがある性質を満たすかどうかをチェック デッドロックしないこと一般ユーザが特権業務を実施できないこと

2013/12/14WACATE 2013 冬

来年の冬あたりに入門セッションできるといいな

Page 23: WACATE2013冬 状態遷移テスト #wacate2013w

23+2.6 状態遷移モデルを書くコツ( 1/2 )図から?表から?

まずは紙ベースで試行錯誤しながら状態遷移図粒度感が決定したら状態遷移表

抜け漏れのないモデリングのため 必要に応じて状態遷移図に変換

ツールを使う場合は… リアルタイムで状態遷移表で網羅具合を確認しながら

状態遷移図を作成

2013/12/14WACATE 2013 冬

Page 24: WACATE2013冬 状態遷移テスト #wacate2013w

24+2.6 状態遷移モデルを書くコツ( 2/2 )状態から?遷移から?

どちらでもよい

不慣れなときは遷移からのほうが書きやすい(かも) 振る舞いをイベントとして列挙

「会員登録する」「入金する」… etc イベントの事前条件や期待結果を状態として定義

2013/12/14WACATE 2013 冬

Page 25: WACATE2013冬 状態遷移テスト #wacate2013w

25+2.7 誰がモデル書くか?

理想 設計者が設計時に書いてくれる

現実私はあまり見たことがない… なければテストエンジニアが書く

モデルを自分で整理することで仕様理解が促進される 仕様もれの指摘にもつながる

ex.) 業務フローをもとにデータモデルの状態遷移を整理したら考慮されていない振る舞いのパターンが見つかった

2013/12/14WACATE 2013 冬

Page 26: WACATE2013冬 状態遷移テスト #wacate2013w

+

3. 状態遷移テスト

2013/12/14WACATE 2013 冬

Page 27: WACATE2013冬 状態遷移テスト #wacate2013w

27+3.1 完全なテストは不可能

完全な仕様は誰にも書けないため

網羅型のテスト設計技法で考えるべきこと網羅対象

何を網羅するか? 状態遷移テストの場合は状態遷移モデル

カバレッジ基準(網羅基準) 対象をどう扱えれば 100 点とするか?

ex.) C0カバレッジ vs. C1カバレッジ 状態遷移テストの場合はスイッチカバレッジが一般的

2013/12/14WACATE 2013 冬

Page 28: WACATE2013冬 状態遷移テスト #wacate2013w

28+3.2 スイッチカバレッジ

1 つ以上の連続する遷移列のパターンを網羅しているかどうか 0 スイッチ

個々の遷移をテストすれば 100 点 1 スイッチ

連続する 2 遷移のパターンを網羅すれば 100 点 n スイッチ

連続する (n+1) 遷移のパターンを網羅すれば 100 点

どこまでやるかはプロジェクト次第 0 スイッチは最低限実施

2013/12/14WACATE 2013 冬

Page 29: WACATE2013冬 状態遷移テスト #wacate2013w

29+3.2.1 0 スイッチ網羅の例

個々の遷移をテストケースとして抽出 下記の例では 4パターン

0 スイッチ網羅のコツ 状態遷移表を作成する

表のセル 1 つが 1 遷移を表現 全セルに対応するテストケースを

作成すれば 0 スイッチ網羅ができる

2013/12/14WACATE 2013 冬

A B C

1.A -> B2.B -> C3.C -> C4.C -> B

事前状態/事後状態

A B C

A ○

B ○

C ○[¬x]

○[x]

[x]

[¬x]

Page 30: WACATE2013冬 状態遷移テスト #wacate2013w

30+3.2.2 1 スイッチ網羅の例

連続する 2 遷移をテストケースとして抽出 下記の例では 6パターン

2013/12/14WACATE 2013 冬

A B C

1.A -> B -> C

2.B -> C -> C

3.B -> C -> B

4.C -> C -> C

5.C -> C -> B

6.C -> B -> C

[x]

[¬x]

Page 31: WACATE2013冬 状態遷移テスト #wacate2013w

+

小演習

2013/12/14WACATE 2013 冬

Page 32: WACATE2013冬 状態遷移テスト #wacate2013w

32+題材

シンプルな音楽プレイヤー ボタンは「停止」「再生」「早送り」の 3 つ

2013/12/14WACATE 2013 冬

Page 33: WACATE2013冬 状態遷移テスト #wacate2013w

33+問題

状態遷移表に変換して仕様もれを指摘しよう

状態遷移表から 0 スイッチ網羅をするようなテストケースを作成しよう

2013/12/14WACATE 2013 冬

Page 34: WACATE2013冬 状態遷移テスト #wacate2013w

34+状態遷移表

2013/12/14WACATE 2013 冬

事前状態/イベント

Page 35: WACATE2013冬 状態遷移テスト #wacate2013w

35+テストケース

2013/12/14WACATE 2013 冬

項番 事前条件 操作 期待結果

1

2

3

4

5

6

7

8

9

10

11

12

Page 36: WACATE2013冬 状態遷移テスト #wacate2013w

36+小演習の回答( 1/2 )

2013/12/14WACATE 2013 冬

事前状態/イベント

再生ボタン押下

停止ボタン押下

早送りボタン押下

電源OFF 停止中 電源OFF 電源OFF

停止中 再生中 電源 OFF 停止中

再生中 一時停止 停止中 再生中

一時停止 再生中 停止中 一時停止

Page 37: WACATE2013冬 状態遷移テスト #wacate2013w

37+小演習の回答( 2/2 )

2013/12/14WACATE 2013 冬

項番 事前条件 操作 期待結果

1 電源 OFF であること 再生ボタン押下 停止中となる

2 電源 OFF であること 停止ボタン押下 電源 OFF のまま

3 電源 OFF であること 早送りボタン押下

電源 OFF のまま

4 停止中であること 再生ボタン押下 曲が再生される

5 停止中であること 停止ボタン押下 電源 OFF となる

6 停止中であること 早送りボタン押下

停止中のまま曲送りされる

7 再生中であること 再生ボタン押下 曲が一時停止する

8 再生中であること 停止ボタン押下 曲が停止する

9 再生中であること 早送りボタン押下

曲送りされて再生される

10 一時停止していること

再生ボタン押下 曲が再生される

11 一時停止していること

停止ボタン押下 停止中となる

12 一時停止していること

早送りボタン押下

一時停止のまま曲送りされる

Page 38: WACATE2013冬 状態遷移テスト #wacate2013w

+

4. 自動化ツール

2013/12/14WACATE 2013 冬

Page 39: WACATE2013冬 状態遷移テスト #wacate2013w

39+4.1 状態遷移テストの自動化ツール

モデルベースドテストの自動化 入力となるモデルとテスト設計プロセスが明確なため

自動化が可能

状態遷移テストの自動化ツール stateMatrix astah* 品質スイート ZIPC

2013/12/14WACATE 2013 冬

Page 40: WACATE2013冬 状態遷移テスト #wacate2013w

40+4.2 stateMatrix のデモ

OSS の状態遷移テスト支援ツール メンテはもうだいぶ前に止まっている

Excel で記述した状態遷移表から指定のスイッチカバレッジにもとづいた遷移列を生成

2013/12/14WACATE 2013 冬

Page 41: WACATE2013冬 状態遷移テスト #wacate2013w

41+4.3 astah* 品質スイートのデモ

有償の astah*製品のプラグイン

状態遷移モデリングをサポート 状態遷移表をリアルタイム表示指定のスイッチカバレッジにもとづいた遷移列を生成

2013/12/14WACATE 2013 冬

Page 42: WACATE2013冬 状態遷移テスト #wacate2013w

42+(参考)テストツールまるわかりガイドNPO 法人 ASTER から発行されたテストツールの辞書のようなドキュメント

テストツールをジャンル別に整理したのが特徴「状態遷移テストツール」も存在

組織のテスト自動化具合の診断もついているのでぜひやってみてください

2013/12/14WACATE 2013 冬

Page 43: WACATE2013冬 状態遷移テスト #wacate2013w

+

まとめ

2013/12/14WACATE 2013 冬

Page 44: WACATE2013冬 状態遷移テスト #wacate2013w

+状態遷移テストとは

状態遷移モデルを参照してテストケースを作成するテスト設計技法

状態遷移テストの適用手順 状態遷移モデルの作成 スイッチカバレッジを用いて網羅的にテスト設計

0 スイッチ網羅は状態遷移表を書くことで実現 必要な情報を付与して実行可能なテストケースに

2013/12/14WACATE 2013 冬

44

Page 45: WACATE2013冬 状態遷移テスト #wacate2013w

45+使う上でのポイント

まずは状態遷移モデルを書こう図から?表から? 状態から?遷移から? 設計者が書く?テストエンジニアが書く?

自動化をしよう有償 /無償さまざまなツールが存在

2013/12/14WACATE 2013 冬

Page 46: WACATE2013冬 状態遷移テスト #wacate2013w

+まずはモデリングから!

2013/12/14 WACATE 2013 冬