SlideShare a Scribd company logo
1 of 46
+

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

WACATE実行委員会 朱峰錦司
+

はじめに

WACATE 2013 冬

2013/12/14
+

3

自己紹介
 朱峰錦司(あけみねきんじ)@kjstylepp
 某豊洲にあるSIer

技術開発本部 プロアクティブ・テスティングCOE




全社向けテストプロセスの策定・普及展開
上記プロセスを実現したツールの開発・普及展開
その他対外活動



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

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

 WACATE実行委員
 テスト自動化研究会


キーワード駆動テスト勉強会

WACATE 2013 冬

2013/12/14
+

4

お品書き
1.

状態遷移テスト概要

2.

状態遷移モデル

3.

状態遷移テスト

4.

自動化ツール

WACATE 2013 冬

2013/12/14
+

1. 状態遷移テスト概要

WACATE 2013 冬

2013/12/14
+

6

1.1 状態遷移テストとは
 状態遷移モデルを参照してテストケースを作成す

るテスト設計技法
 仕様をもとにテストケースを作成するのでブラックボッ

クステストに該当
 仕様モデルをベースにして(ある程度)機械的にテストケー
スを作成するのでモデルベースドテストに該当

WACATE 2013 冬

2013/12/14
+

7

1.2 モデルベースドテストとは
 モデルを活用してテスト成果物を作成する技術

モデル

詳細化・開発

生
成

抽象化された
テスト

WACATE 2013 冬

この過程がモデル
ベースドテスト

詳細化・開発

実システム

実
行
実行可能な
テスト

2013/12/14
+

8

1.3 モデルベースドテストの注意点
 入力となるモデルの質に大きく依存
 よい状態遷移モデルをかけないと、状態遷移テストの価

値が低くなる

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

与する必要がある

WACATE 2013 冬

2013/12/14
+

2. 状態遷移モデル

WACATE 2013 冬

2013/12/14
+

10

2.1 モデル
 開発対象のシステム(=テスト対象)の振る舞い

や性質を特定の観点で抽象化して表現したもの
 ひとつのモデルで全ての仕様を表現することは不可能

WACATE 2013 冬

2013/12/14
+

11

2.2 モデルの種類
 様々な観点によるモデリング手法が存在
 状態遷移モデル
 論理モデル

本日はこれの話

 組合せモデル

 フローモデル
 代数モデル
 統計モデル

 システム特性に応じて適切なモデリング手法を選

択する必要がある
 しっかりと文法/メタモデルを決めて記述
 誰かが適当に書いた絵ではモデルとしての価値が低い
WACATE 2013 冬

2013/12/14
+

12

2.3 状態遷移モデル(1/2)
 システムの状態の変化に着目してシステムの振る

舞いをモデリング

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

事前状態

WACATE 2013 冬

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

事後状態

2013/12/14
+

13

2.3 状態遷移モデル(2/2)
 構成要素
構成要素

説明

状態

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

初期状
態

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

終了状
態

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

イベント

状態遷移が発生するきっかけ。

事前条件

状態遷移の分岐条件。

アクショ
ン

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

WACATE 2013 冬

2013/12/14
+

14

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

出典:UML Superstructure Specification, v2.4.1
WACATE 2013 冬

2013/12/14
+

15

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

 状態遷移表
 仕様の漏れを発見できる

 網羅的に整理するのに向いている

WACATE 2013 冬

2013/12/14
+

16

2.4.1 状態遷移図の例

WACATE 2013 冬

2013/12/14
+

17

2.4.2 状態遷移表の例(1/2)
 事前状態/事後状態を軸にした場合
事前状態
/
事後状態

商品選択
不可

商品選択
不可

商品選
択
可能

商品搬出
中

商品選択

商品搬出
中
懸賞中

搬出完了
[懸賞購入
でない]

搬出完了
[懸賞購入]
懸賞終了
[落選]

WACATE 2013 冬

懸賞当
選

貨幣投入

商品選択
可能

懸賞当選

懸賞中

懸賞終了
[当選]
商品選択
2013/12/14
+

18

2.4.2 状態遷移表の例(2/2)
 事前状態/イベントを軸にした場合

事前状態/イベン
ト

貨幣投入

商品選択不可

商品選択
可能

商品選択可能

商品選択

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

懸賞中
懸賞当選

懸賞終了

商品搬出中

商品搬出中

WACATE 2013 冬

搬出完了

懸賞当選
[当選]

商品搬出中

2013/12/14
+

19

(参考)状態変数の扱い(1/2)
 状態に変数を持たせることでより効率的なモデリ

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

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

WACATE 2013 冬

追加
削除
削除
削除

追加
•
•
•
•

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

削除
削除
削除
削除

2013/12/14
+

20

(参考)状態変数の扱い(2/2)
 変数を使わないと…
追加
リストが0件

追加
リストが1件

削除

リストが2件

・・・

削除

 変数(とアクション)を使うと…
変数x:リスト件数

追加/x=1

リストが0件

追加/x++
リストが1件以上

削除[x==1]/x=0
WACATE 2013 冬

削除[x>1]/x-2013/12/14
+

21

2.5 状態遷移モデルの使いどころ
 組込みシステム
 ユーザ操作や信号受信などをイベントとしてモデリング


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

 近年は状態遷移モデルに対するモデル検査を実施するこ

とも増えてきている

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

WACATE 2013 冬

2013/12/14
+

22

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

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

テストでは難しい「○○しないこと」をチェックする手段
来年の冬あたりに
入門セッション
できるといいな

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

WACATE 2013 冬

2013/12/14
+

23

2.6 状態遷移モデルを書くコツ(1/2)
 図から?表から?
 まずは紙ベースで試行錯誤しながら状態遷移図
 粒度感が決定したら状態遷移表


抜け漏れのないモデリングのため

 必要に応じて状態遷移図に変換

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

態遷移図を作成

WACATE 2013 冬

2013/12/14
+

24

2.6 状態遷移モデルを書くコツ(2/2)
 状態から?遷移から?
 どちらでもよい
 不慣れなときは遷移からのほうが書きやすい(かも)




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

WACATE 2013 冬

2013/12/14
+

25

2.7 誰がモデル書くか?
 理想
 設計者が設計時に書いてくれる

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

モデルを自分で整理することで仕様理解が促進される
仕様もれの指摘にもつながる
 ex.) 業務フローをもとにデータモデルの状態遷移を整理したら
考慮されていない振る舞いのパターンが見つかった

WACATE 2013 冬

2013/12/14
+

3. 状態遷移テスト

WACATE 2013 冬

2013/12/14
+

27

3.1 完全なテストは不可能
 完全な仕様は誰にも書けないため

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

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

 カバレッジ基準(網羅基準)




対象をどう扱えれば100点とするか?
 ex.) C0カバレッジ vs. C1カバレッジ
状態遷移テストの場合はスイッチカバレッジが一般的

WACATE 2013 冬

2013/12/14
+

28

3.2 スイッチカバレッジ
 1つ以上の連続する遷移列のパターンを網羅して

いるかどうか
 0スイッチ


個々の遷移をテストすれば100点

 1スイッチ


連続する2遷移のパターンを網羅すれば100点

 nスイッチ


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

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

WACATE 2013 冬

2013/12/14
+

29

3.2.1 0スイッチ網羅の例
 個々の遷移をテストケースとして抽出
 下記の例では4パターン
[x]
A

B

C

1. A -> B
2. B -> C
3. C -> C
4. C -> B

[¬x]

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

表のセル1つが1遷移を表現
全セルに対応するテストケースを
作成すれば0スイッチ網羅ができる

WACATE 2013 冬

事前状態
/
事後状態
A

A

B
○

○

B
C

C

○
[¬x]

○
[x]
2013/12/14
+

30

3.2.2 1スイッチ網羅の例
 連続する2遷移をテストケースとして抽出
 下記の例では6パターン
[x]
A

B

C
[¬x]

WACATE 2013 冬

1. A -> B -> C
2. B -> C -> C
3. B -> C -> B
4. C -> C -> C
5. C -> C -> B
6. C -> B -> C
2013/12/14
+

小演習

WACATE 2013 冬

2013/12/14
+

32

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

WACATE 2013 冬

2013/12/14
+

33

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

 状態遷移表から0スイッチ網羅をするようなテス

トケースを作成しよう

WACATE 2013 冬

2013/12/14
+

34

状態遷移表

事前状態/
イベント

WACATE 2013 冬

2013/12/14
+

35

テストケース

項
番

事前条件

操作

期待結果

1
2
3
4

5
6
7
8
9
10
11
12

WACATE 2013 冬

2013/12/14
+

36

小演習の回答(1/2)

事前状態/
イベント

再生ボタン
押下

停止ボタン
押下

早送りボタン
押下

電源OFF

停止中

電源OFF

電源OFF

停止中

再生中

電源OFF

停止中

再生中

一時停止

停止中

再生中

一時停止

再生中

停止中

一時停止

WACATE 2013 冬

2013/12/14
+

37

小演習の回答(2/2)
事前条件

項
番

操作

期待結果

1

電源OFFであること

再生ボタン押下

停止中となる

2

電源OFFであること

停止ボタン押下

電源OFFのまま

3

電源OFFであること

早送りボタン押下 電源OFFのまま

4

停止中であること

再生ボタン押下

曲が再生される

5

停止中であること

停止ボタン押下

電源OFFとなる

6

停止中であること

早送りボタン押下 停止中のまま曲送りされる

7

再生中であること

再生ボタン押下

曲が一時停止する

8

再生中であること

停止ボタン押下

曲が停止する

9

再生中であること

早送りボタン押下 曲送りされて再生される

10

一時停止していること 再生ボタン押下

曲が再生される

11

一時停止していること 停止ボタン押下

停止中となる

12

一時停止していること 早送りボタン押下 一時停止のまま曲送りされる

WACATE 2013 冬

2013/12/14
+

4. 自動化ツール

WACATE 2013 冬

2013/12/14
+

39

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

動化が可能

 状態遷移テストの自動化ツール
 stateMatrix

 astah*

品質スイート

 ZIPC

WACATE 2013 冬

2013/12/14
+

40

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

 Excelで記述した状態遷移表から指定のスイッチ

カバレッジにもとづいた遷移列を生成

WACATE 2013 冬

2013/12/14
+

41

4.3 astah* 品質スイートのデモ
 有償のastah*製品のプラグイン
 状態遷移モデリングをサポート
 状態遷移表をリアルタイム表示

 指定のスイッチカバレッジにもとづいた遷移列を生成

WACATE 2013 冬

2013/12/14
+

42

(参考)テストツールまるわかりガイド
 NPO法人ASTERから発行されたテストツールの

辞書のようなドキュメント

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

 組織のテスト自動化具合の診断もついているので

ぜひやってみてください
WACATE 2013 冬

2013/12/14
+

まとめ

WACATE 2013 冬

2013/12/14
+

44

状態遷移テストとは
 状態遷移モデルを参照してテストケースを作成す

るテスト設計技法

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

0スイッチ網羅は状態遷移表を書くことで実現

 必要な情報を付与して実行可能なテストケースに

WACATE 2013 冬

2013/12/14
+

45

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

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

WACATE 2013 冬

2013/12/14
+

2013/12/14

まずはモデリングから!

WACATE 2013 冬

More Related Content

More from Kinji Akemine

ICST 2015 まるわかりDay! -Model
ICST 2015 まるわかりDay! -ModelICST 2015 まるわかりDay! -Model
ICST 2015 まるわかりDay! -ModelKinji Akemine
 
モデル検査入門 #wacate
モデル検査入門 #wacateモデル検査入門 #wacate
モデル検査入門 #wacateKinji Akemine
 
テスト分析入門 -「ゆもつよメソッド」を例に- #wacate
テスト分析入門 -「ゆもつよメソッド」を例に- #wacateテスト分析入門 -「ゆもつよメソッド」を例に- #wacate
テスト分析入門 -「ゆもつよメソッド」を例に- #wacateKinji Akemine
 
第1回キーワード駆動テスト勉強会
第1回キーワード駆動テスト勉強会第1回キーワード駆動テスト勉強会
第1回キーワード駆動テスト勉強会Kinji Akemine
 
Astahプラグイン開発勉強会
Astahプラグイン開発勉強会Astahプラグイン開発勉強会
Astahプラグイン開発勉強会Kinji Akemine
 
TABOK Skill Category2解説
TABOK Skill Category2解説TABOK Skill Category2解説
TABOK Skill Category2解説Kinji Akemine
 
Beginning Java EE 6 勉強会(2) #bje_study
Beginning Java EE 6 勉強会(2) #bje_studyBeginning Java EE 6 勉強会(2) #bje_study
Beginning Java EE 6 勉強会(2) #bje_studyKinji Akemine
 

More from Kinji Akemine (7)

ICST 2015 まるわかりDay! -Model
ICST 2015 まるわかりDay! -ModelICST 2015 まるわかりDay! -Model
ICST 2015 まるわかりDay! -Model
 
モデル検査入門 #wacate
モデル検査入門 #wacateモデル検査入門 #wacate
モデル検査入門 #wacate
 
テスト分析入門 -「ゆもつよメソッド」を例に- #wacate
テスト分析入門 -「ゆもつよメソッド」を例に- #wacateテスト分析入門 -「ゆもつよメソッド」を例に- #wacate
テスト分析入門 -「ゆもつよメソッド」を例に- #wacate
 
第1回キーワード駆動テスト勉強会
第1回キーワード駆動テスト勉強会第1回キーワード駆動テスト勉強会
第1回キーワード駆動テスト勉強会
 
Astahプラグイン開発勉強会
Astahプラグイン開発勉強会Astahプラグイン開発勉強会
Astahプラグイン開発勉強会
 
TABOK Skill Category2解説
TABOK Skill Category2解説TABOK Skill Category2解説
TABOK Skill Category2解説
 
Beginning Java EE 6 勉強会(2) #bje_study
Beginning Java EE 6 勉強会(2) #bje_studyBeginning Java EE 6 勉強会(2) #bje_study
Beginning Java EE 6 勉強会(2) #bje_study
 

Recently uploaded

PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 

Recently uploaded (9)

PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 

WACATE2013冬 状態遷移テスト #wacate2013w