Slide 1

Slide 1 text

XP祭り 2019 やってみよう 状態遷移テスト

Slide 2

Slide 2 text

アイスブレイク

Slide 3

Slide 3 text

⾃⼰紹介 • ⾓⽥ 俊 • ソフトウェア開発者 • XP⼤好き • XP祭りは5回⽬の参加 • コミュニティ活動 • WACATE実⾏委員 • NaITE(⻑崎IT技術者会)運営委員

Slide 4

Slide 4 text

このセッションのゴール • テストに関して興味を持ってもらう • テスト技法について興味を持ってもらう • モデルについて興味を持ってもらう • テスト技法、モデルを活⽤しようと思う

Slide 5

Slide 5 text

⽬次 • テスト技法について • モデルについて • 状態遷移テスト • 状態遷移図 • 状態遷移表 • 演習 • 状態遷移テスト • 演習 • まとめ

Slide 6

Slide 6 text

テスト技法

Slide 7

Slide 7 text

テスト技法とは •テストを効率的に⾏う⼿法 • 全数テストは不可能 • テストの7原則 http://jstqb.jp/dl/JSTQB-SyllabusFoundation_Version2018.J02.pdf • 全てのパラメータを確認することは 不可能 • 全てのパラメータの組み合わせを試験を実施する ことは更に不可能

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

製造⽬線と検証⽬線の違い •宅配便の再配達サービス 照会 不在票に記載された伝票番号を⼊⼒してください。 製造⽬線 照会ボタンが押された時に、⼊⼒された伝表 番号をDBで検索して、該当のデータがあった ら検索して次のページに進んで、なかったら エラー表⽰だな!

Slide 13

Slide 13 text

製造⽬線と検証⽬線の違い •宅配便の再配達サービス 伝票番号は番号のみ⼊⼒が可能?英字、⽇本語、特殊 ⽬などを⼊れたらどうなる?無効な伝票番号はない? 何の位の⻑さの番号を⼊⼒しても⼤丈夫なのかな? 下限値とかあるのかな? SQLインジェクション対策はできているだろうか? 照会のボタンを連打したらどうなるだろう? DBに該当データが複数⼊っていることはないのかな? 検証⽬線 照会 不在票に記載された伝票番号を⼊⼒してください。

Slide 14

Slide 14 text

製造⽬線と検証⽬線の違い •宅配便の再配達サービス 伝票番号は番号のみ⼊⼒が可能?英字、⽇本語、特殊 ⽬などを⼊れたらどうなる?無効な伝票番号はない? 何の位の⻑さの番号を⼊⼒しても⼤丈夫なのかな? 下限値とかあるのかな? SQLインジェクション対策はできているだろうか? 照会のボタンを連打したらどうなるだろう? DBに該当データが複数⼊っていることはないのかな? 検証⽬線 同値分割 境界値分析 経験ベースのテスト技法 照会 不在票に記載された伝票番号を⼊⼒してください。

Slide 15

Slide 15 text

幅広い⽬線 • 製造⽬線と検証⽬線の両⽅を考慮することが重要 となる 製造⽬線 検証⽬線 プロダクト

Slide 16

Slide 16 text

エクストリームプログラミング •テスト駆動開発 • 検証⽬線に意識的に切り替えることで異常系のテス トを追加できる • テスト駆動開発はプログラミングの⼿法なので、意識し ないと正常系のみになりがち •⽋陥コスト増加(DCI:Defect Cost Increase) の削減 • 検出の早い⽋陥の修正はコストが低い

Slide 17

Slide 17 text

モデル

Slide 18

Slide 18 text

モデル

Slide 19

Slide 19 text

モデルとは •対象の振る舞いや構造を⽰したもの • ソフトウェアは⽬に⾒えないため可視化する • 簡単な表などもモデルと⾔える •⼀つのモデルはある特定の振る舞いや構造を⽰した もので⼀つのモデルですべてを表現はできない • ユースケース図:利⽤者とその関係 • アクティビティ図:アクティビティの実⾏順序や実⾏ 条件 • 状態遷移図:状態の遷移とアクティビティの関係

Slide 20

Slide 20 text

モデルを活⽤するメリット •ダイアグラムを⽤いて構造を可視化 • ⾃然⾔語ではなかなか表現するのが難しい • ぱっと⾒て理解することができる •空中戦の防⽌ • ダイアグラムを⽤いて視覚的な議論

Slide 21

Slide 21 text

UML •Unified Modeling Language (統⼀モデリング⾔語) •OMG(Object Managememt Group)によって策定さ れている •最新版は2.5で、13個のダイアグラムが定義され ている。

Slide 22

Slide 22 text

PlantUML ダイアグラムをテキストで表現することGitなどでバージョン管理ができる

Slide 23

Slide 23 text

状態遷移テスト

Slide 24

Slide 24 text

状態遷移テストとは •状態遷移図/表を元にソフトウェアテストケース を作成するソフトウェアテスト技法 •ブラックボックスのテスト技法の⼀つ •すべてのテストレベルに適応可能 • 単体、結合テスト • 状態とイベントのテスト • 状態遷移表をベースとすると良い • システムテスト • ⼀連の遷移のテスト

Slide 25

Slide 25 text

状態遷移図

Slide 26

Slide 26 text

状態遷移図とは • ソフトウェアの動作を整理することが出来るダイアグ アラム • システムの状態と状態の遷移を表現する • 状態遷移図を作成することで、ステータスと遷移する イベントを整理することができる • UML2では” State Machine Diagram” ※ 本セッションでは、UMLでの厳密な記述⽅法は取り上げません • システムの振る舞いやデータの状態の整理する際に有 効

Slide 27

Slide 27 text

状態遷移図の書き⽅

Slide 28

Slide 28 text

状態遷移図の書き⽅ •状態 • システムの状態 • 振る舞いや処理に名前をつけたもの • 何かをする状態 • 何かを受付可能な状態 • 何かをしている状態

Slide 29

Slide 29 text

状態遷移図の書き⽅ •イベント • システムの状態を遷移させるトリガ • 状態の遷移元と遷移先が同じという 場合もある(⾃⼰遷移)

Slide 30

Slide 30 text

状態遷移図の書き⽅ •条件 • イベントが発⽣した際に状態を 遷移させる条件 • 条件が成⽴するときのみ状態を 遷移させる •エフェクト • 遷移するときに⾏われる処理

Slide 31

Slide 31 text

状態遷移図の書き⽅ 1. 状態とイベントを抜き出してみる • 最初は仕様書から抜き出してみる • 仕様書に記載がないが必要だと思ったもの 2. とりあえず、図をかいてみる 3. ⾜りない状態とイベントを追加していく

Slide 32

Slide 32 text

より良い状態遷移図を書くコツ • 状態 • 隠れた状態に注意する • 状態遷移中の状態などは⼀つの状態として定義するほうが良 い • 同じような状態でも遷移前の状態により処理が異なるよ うな場合は別状態とする • ⼀回⽬と2回⽬で同じイベントを受信しても動作が異なる場合 • イベント • システムが検知(受信)可能なモノのみをイベントとす る

Slide 33

Slide 33 text

No content

Slide 34

Slide 34 text

検証視点での状態遷移図 •システムの振る舞いを試験するときは振る舞いの みをまとめる • 内部の状態を意識しすぎない意識しない •できるだけ、シンプルな状態遷移図でまとめる • UMLでは⼀つの状態の中に状態を持つような状態遷 移図も表現は可能だが振る舞いを整理する際には⽤ いない •⽂法にはあまり囚われすぎない

Slide 35

Slide 35 text

状態遷移表

Slide 36

Slide 36 text

状態遷移表とは •状態とイベントの関係性の整理を⾏う •状態遷移図に抜けがあることに気がついた場 合は状態遷移図も修正する •メリット • 状態遷移図で明確になっていない遷移が明確に なる

Slide 37

Slide 37 text

状態遷移表の書き⽅ •2次元の表を作成し、⽚⽅に状態、もう⽚⽅にイ ベントを記載する (状態とイベントのどちらを、縦と横に割り当て るのかは⾃由) ※ 状態遷移表については様々な記載⽅法がある ため、今回紹介するのは⼀例です

Slide 38

Slide 38 text

イベント 状態 電 源 ON 番 号 キ 押 下 発 話 キ 押 下 [ 圏 内 ] 発 話 キ 押 下 [ 圏 外 ] 終 話 キ 押 下 着 信 あ り 電 話 相 ⼿ 終 話 キ 押 下 電 話 相 ⼿ 発 話 キ 押 下 切 断 完 了 ①初期状態 ②待機中 ③発信番号⼊⼒中 ④着信中 ⑤発信中 ⑥通話中 ⑦切断中

Slide 39

Slide 39 text

イベント 状態 電 源 ON 番 号 キ 押 下 発 話 キ 押 下 [ 圏 内 ] 発 話 キ 押 下 [ 圏 外 ] 終 話 キ 押 下 着 信 あ り 電 話 相 ⼿ 終 話 キ 押 下 電 話 相 ⼿ 発 話 キ 押 下 切 断 完 了 ①初期状態 ② ②待機中 ③発信番号⼊⼒中 ④着信中 ⑤発信中 ⑥通話中 ⑦切断中 該当する状態のときにイベントが発⽣した場合、 どの状態に遷移するのかを記載する

Slide 40

Slide 40 text

イベント 状態 電 源 ON 番 号 キ 押 下 発 話 キ 押 下 [ 圏 内 ] 発 話 キ 押 下 [ 圏 外 ] 終 話 キ 押 下 着 信 あ り 電 話 相 ⼿ 終 話 キ 押 下 電 話 相 ⼿ 発 話 キ 押 下 切 断 完 了 ①初期状態 ② ②待機中 ③発信番号⼊⼒中 ④着信中 ⑤発信中 ⑥通話中 ⑦切断中 イベントが受信不可(検知不可)のときは、 斜線で記載する

Slide 41

Slide 41 text

イベント 状態 電 源 ON 番 号 キ 押 下 発 話 キ 押 下 [ 圏 内 ] 発 話 キ 押 下 [ 圏 外 ] 終 話 キ 押 下 着 信 あ り 電 話 相 ⼿ 終 話 キ 押 下 電 話 相 ⼿ 発 話 キ 押 下 切 断 完 了 ①初期状態 ② ②待機中 ③ ー ③発信番号⼊⼒中 ④着信中 ⑤発信中 ⑥通話中 ⑦切断中 イベントが受信可能だが、 どこにも遷移しない場合はハイフンで記載する

Slide 42

Slide 42 text

イベント 状態 電 源 ON 番 号 キ 押 下 発 話 キ 押 下 [ 圏 内 ] 発 話 キ 押 下 [ 圏 外 ] 終 話 キ 押 下 着 信 あ り 電 話 相 ⼿ 終 話 キ 押 下 電 話 相 ⼿ 発 話 キ 押 下 切 断 完 了 ①初期状態 ② ②待機中 ③ ー ー ー ④ ③発信番号⼊⼒中 ③ ⑤ ② ? ? ④着信中 ー ⑥ ー ⑦ ? ? ー ⑤発信中 ー ー ー ? ? ⑦ ⑥ ⑥通話中 ー ー ー ⑦ ? ⑦ ー ⑦切断中 ー ー ー ー ー ー ー ②

Slide 43

Slide 43 text

イベント 状態 電 源 ON 番 号 キ 押 下 発 話 キ 押 下 [ 圏 内 ] 発 話 キ 押 下 [ 圏 外 ] 終 話 キ 押 下 着 信 あ り 電 話 相 ⼿ 終 話 キ 押 下 電 話 相 ⼿ 発 話 キ 押 下 切 断 完 了 ①初期状態 ② ②待機中 ③ ー ー ー ④ ③発信番号⼊⼒中 ③ ⑤ ② ? ? ④着信中 ー ⑥ ー ⑦ ? ? ー ⑤発信中 ー ー ー ? ? ⑦ ⑥ ⑥通話中 ー ー ー ⑦ ? ⑦ ー ⑦切断中 ー ー ー ー ー ー ー ② 状態遷移表で整理すると、 状態遷移図で検討不⾜や仕様不明なところが明確になる

Slide 44

Slide 44 text

イベント 状態 電 源 ON 番 号 キ 押 下 発 話 キ 押 下 [ 圏 内 ] 発 話 キ 押 下 [ 圏 外 ] 終 話 キ 押 下 着 信 あ り 電 話 相 ⼿ 終 話 キ 押 下 電 話 相 ⼿ 発 話 キ 押 下 切 断 完 了 ①初期状態 ② ②待機中 ③ ー ー ー ④ ③発信番号⼊⼒中 ③ ⑤ ② ② ④ ④着信中 ー ⑥ ー ⑦ ー ⑦ ー ⑤発信中 ー ー ー ⑦ ー ⑦ ⑥ ⑥通話中 ー ー ー ⑦ ー ⑦ ー ⑦切断中 ー ー ー ー ー ー ー ② 仕様を整理し、状態遷移図に反映させる (今回は着信中の着信などは無視することとする)

Slide 45

Slide 45 text

No content

Slide 46

Slide 46 text

演習 •システム試験のテストケースを考えてもらいます。 •仕様書を読み、振る舞いに着⽬して、 状態遷移図・表を作成してみよう •時間 • 個⼈ワーク 15分 • グループでのディスカッション 5分

Slide 47

Slide 47 text

状態遷移テスト

Slide 48

Slide 48 text

状態とイベントのテスト •状態遷移表をベースに、テストケースを作成する •イベントを受信したときに、状態が遷移すること、 状態が遷移しないことをテストする

Slide 49

Slide 49 text

イベント 状態 電 源 ON 番 号 キ 押 下 発 話 キ 押 下 [ 圏 内 ] 発 話 キ 押 下 [ 圏 外 ] 終 話 キ 押 下 着 信 あ り 電 話 相 ⼿ 終 話 キ 押 下 電 話 相 ⼿ 発 話 キ 押 下 切 断 完 了 ①初期状態 ② ②待機中 ③ ー ー ー ④ ③発信番号⼊⼒中 ③ ⑤ ② ② ④ ④着信中 ー ⑥ ー ⑦ ー ⑦ ー ⑤発信中 ー ー ー ⑦ ー ⑦ ⑥ ⑥通話中 ー ー ー ⑦ ー ⑦ ー ⑦切断中 ー ー ー ー ー ー ー ② # 前提条件 試験内容 期待結果 1初期状態であること 電源ON 待機状態になること 2待機状態であること タイヤルボタン押下 発信者番号⼊⼒画⾯に遷移すること 3待機状態であること 発話キー押下[圏内] 無視されること

Slide 50

Slide 50 text

遷移のテスト •遷移の確認は状態遷移図をベースに、テストケー スを作成する •開始疑似状態から終了状態までを1テストケース と最低限のテストケースとすることが出来る ※ 今回の例は終了状態がないため、待機中状態に戻ってくるまでを テストケースとする

Slide 51

Slide 51 text

No content

Slide 52

Slide 52 text

テストケース例 # 試験内容 1 電源をONし、着信を受けて発話キーを押下して、通話中に終 話キーを押下する 2電源をONし、着信を受信中に電話相⼿が終話キーを押下する 3 電源をONし、番号キーを押下し、着信を受信し、受信中に終 話キーを押下する 4 電源をONし、番号キーを押下し、圏内で発話キーを押下し、 電話相⼿が発話キーを押下後、通話中になり、電話相⼿が終話 キーを押下する

Slide 53

Slide 53 text

テストカバレッジについて •どのくらいテストするのかという基準 •連続した状態遷移のテストはNスイッチカバレッ ジという基準で表現する

Slide 54

Slide 54 text

Nスイッチカバレッジ •Nスイッチカバレッジ • すべての遷移を1回以上実⾏している場合 0スイッチカバレッジ 100% • 2連続する遷移を1回以上実⾏している場合 1スイッチカバレッジ 100% • (N+1)連続する遷移を1回以上実⾏している場合 Nスイッチカバレッジ 100%

Slide 55

Slide 55 text

連続する遷移とは •2連続する遷移 • 以下の例は状態3への遷移元と遷移先が2つ 状態1 状態3 状態4 状態5 ① ② ③ 状態2 ④

Slide 56

Slide 56 text

連続する遷移とは •1スイッチカバレッジ • 以下の4ケースを最低限テストする必要がある 状態1 状態3 状態4 状態5 ① ② ③ 状態2 ④ ⾏き先を切り替えるスイッチ(状態)の⾏き先網羅率が100%

Slide 57

Slide 57 text

No content

Slide 58

Slide 58 text

演習 •仕様書を読んで、状態遷移テストを作成してみよ う • テストケースは待機状態に戻ってくるまでをテスト ケースとする。 • 0スイッチカバレッジを満たすテストケースを作成し てください。 •時間 • 個⼈ワーク 10分 • グループでのディスカッション 5分

Slide 59

Slide 59 text

まとめ •テスト技法を学んでテスト技法、検証⽬線を⾝に つけることでバグの少ないソフトウェアが作れる •モデルでは振る舞いや構造を可視化することが可 能 • UML •モデルベースのテストの⼀つを試してみた • 状態遷移テスト

Slide 60

Slide 60 text

振り返り •振り返りをしてみよう • YWTで(やったこと、わかったこと、次にやるこ と) •5分 やったこと わかったこと 次にやること