やってみよう状態遷移テスト #xpjug

Add1036688abcb2e3dbff7c3090f7e35?s=47 imtnd
September 21, 2019

やってみよう状態遷移テスト #xpjug

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

Add1036688abcb2e3dbff7c3090f7e35?s=128

imtnd

September 21, 2019
Tweet

Transcript

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

  2. アイスブレイク

  3. ⾃⼰紹介 • ⾓⽥ 俊 • ソフトウェア開発者 • XP⼤好き • XP祭りは5回⽬の参加

    • コミュニティ活動 • WACATE実⾏委員 • NaITE(⻑崎IT技術者会)運営委員
  4. このセッションのゴール • テストに関して興味を持ってもらう • テスト技法について興味を持ってもらう • モデルについて興味を持ってもらう • テスト技法、モデルを活⽤しようと思う

  5. ⽬次 • テスト技法について • モデルについて • 状態遷移テスト • 状態遷移図 •

    状態遷移表 • 演習 • 状態遷移テスト • 演習 • まとめ
  6. テスト技法

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

    • 全てのパラメータの組み合わせを試験を実施する ことは更に不可能
  8. テスト技法とは プロダクト ↑ 品質を検査したいが、 全数テストは出来ない プロダクト ↑ テストするべき場所は選択して ⽬的を絞ってテストする必要がある 効率よくテスト場所を選択する⼿段がテスト技法

  9. 品質良くソフトウェアを作るには 要件定義 基本設計 実装 単体テスト 統合テスト 詳細設計 システムテスト 受け⼊れテスト 設計⼯程

    テスト⼯程 設計⼯程でどういったテストがされるのかを予め知っておけば テスト⼯程で⾒つかる⽋陥を設計⼯程で事前に排除することが可能
  10. 製造⽬線と検証⽬線 • 製造⽬線と検証⽬線では対象の⾒⽅が異なる プロダクト 製造⽬線 検証⽬線

  11. 製造⽬線と検証⽬線の違い •宅配便の再配達サービス 照会 不在票に記載された伝票番号を⼊⼒してください。

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

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

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

    同値分割 境界値分析 経験ベースのテスト技法 照会 不在票に記載された伝票番号を⼊⼒してください。
  15. 幅広い⽬線 • 製造⽬線と検証⽬線の両⽅を考慮することが重要 となる 製造⽬線 検証⽬線 プロダクト

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

    Increase) の削減 • 検出の早い⽋陥の修正はコストが低い
  17. モデル

  18. モデル

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

    • アクティビティ図:アクティビティの実⾏順序や実⾏ 条件 • 状態遷移図:状態の遷移とアクティビティの関係
  20. モデルを活⽤するメリット •ダイアグラムを⽤いて構造を可視化 • ⾃然⾔語ではなかなか表現するのが難しい • ぱっと⾒て理解することができる •空中戦の防⽌ • ダイアグラムを⽤いて視覚的な議論

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

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

  23. 状態遷移テスト

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

    状態遷移表をベースとすると良い • システムテスト • ⼀連の遷移のテスト
  25. 状態遷移図

  26. 状態遷移図とは • ソフトウェアの動作を整理することが出来るダイアグ アラム • システムの状態と状態の遷移を表現する • 状態遷移図を作成することで、ステータスと遷移する イベントを整理することができる •

    UML2では” State Machine Diagram” ※ 本セッションでは、UMLでの厳密な記述⽅法は取り上げません • システムの振る舞いやデータの状態の整理する際に有 効
  27. 状態遷移図の書き⽅

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

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

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

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

    ⾜りない状態とイベントを追加していく
  32. より良い状態遷移図を書くコツ • 状態 • 隠れた状態に注意する • 状態遷移中の状態などは⼀つの状態として定義するほうが良 い • 同じような状態でも遷移前の状態により処理が異なるよ

    うな場合は別状態とする • ⼀回⽬と2回⽬で同じイベントを受信しても動作が異なる場合 • イベント • システムが検知(受信)可能なモノのみをイベントとす る
  33. None
  34. 検証視点での状態遷移図 •システムの振る舞いを試験するときは振る舞いの みをまとめる • 内部の状態を意識しすぎない意識しない •できるだけ、シンプルな状態遷移図でまとめる • UMLでは⼀つの状態の中に状態を持つような状態遷 移図も表現は可能だが振る舞いを整理する際には⽤ いない

    •⽂法にはあまり囚われすぎない
  35. 状態遷移表

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

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

  38. イベント 状態 電 源 ON 番 号 キ 押 下

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

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

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

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

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

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

    発 話 キ 押 下 [ 圏 内 ] 発 話 キ 押 下 [ 圏 外 ] 終 話 キ 押 下 着 信 あ り 電 話 相 ⼿ 終 話 キ 押 下 電 話 相 ⼿ 発 話 キ 押 下 切 断 完 了 ①初期状態 ② ②待機中 ③ ー ー ー ④ ③発信番号⼊⼒中 ③ ⑤ ② ② ④ ④着信中 ー ⑥ ー ⑦ ー ⑦ ー ⑤発信中 ー ー ー ⑦ ー ⑦ ⑥ ⑥通話中 ー ー ー ⑦ ー ⑦ ー ⑦切断中 ー ー ー ー ー ー ー ② 仕様を整理し、状態遷移図に反映させる (今回は着信中の着信などは無視することとする)
  45. None
  46. 演習 •システム試験のテストケースを考えてもらいます。 •仕様書を読み、振る舞いに着⽬して、 状態遷移図・表を作成してみよう •時間 • 個⼈ワーク 15分 • グループでのディスカッション

    5分
  47. 状態遷移テスト

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

  49. イベント 状態 電 源 ON 番 号 キ 押 下

    発 話 キ 押 下 [ 圏 内 ] 発 話 キ 押 下 [ 圏 外 ] 終 話 キ 押 下 着 信 あ り 電 話 相 ⼿ 終 話 キ 押 下 電 話 相 ⼿ 発 話 キ 押 下 切 断 完 了 ①初期状態 ② ②待機中 ③ ー ー ー ④ ③発信番号⼊⼒中 ③ ⑤ ② ② ④ ④着信中 ー ⑥ ー ⑦ ー ⑦ ー ⑤発信中 ー ー ー ⑦ ー ⑦ ⑥ ⑥通話中 ー ー ー ⑦ ー ⑦ ー ⑦切断中 ー ー ー ー ー ー ー ② # 前提条件 試験内容 期待結果 1初期状態であること 電源ON 待機状態になること 2待機状態であること タイヤルボタン押下 発信者番号⼊⼒画⾯に遷移すること 3待機状態であること 発話キー押下[圏内] 無視されること
  50. 遷移のテスト •遷移の確認は状態遷移図をベースに、テストケー スを作成する •開始疑似状態から終了状態までを1テストケース と最低限のテストケースとすることが出来る ※ 今回の例は終了状態がないため、待機中状態に戻ってくるまでを テストケースとする

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

    4 電源をONし、番号キーを押下し、圏内で発話キーを押下し、 電話相⼿が発話キーを押下後、通話中になり、電話相⼿が終話 キーを押下する
  53. テストカバレッジについて •どのくらいテストするのかという基準 •連続した状態遷移のテストはNスイッチカバレッ ジという基準で表現する

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

    • (N+1)連続する遷移を1回以上実⾏している場合 Nスイッチカバレッジ 100%
  55. 連続する遷移とは •2連続する遷移 • 以下の例は状態3への遷移元と遷移先が2つ 状態1 状態3 状態4 状態5 ① ②

    ③ 状態2 ④
  56. 連続する遷移とは •1スイッチカバレッジ • 以下の4ケースを最低限テストする必要がある 状態1 状態3 状態4 状態5 ① ②

    ③ 状態2 ④ ⾏き先を切り替えるスイッチ(状態)の⾏き先網羅率が100%
  57. None
  58. 演習 •仕様書を読んで、状態遷移テストを作成してみよ う • テストケースは待機状態に戻ってくるまでをテスト ケースとする。 • 0スイッチカバレッジを満たすテストケースを作成し てください。 •時間

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

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