Upgrade to Pro — share decks privately, control downloads, hide ads and more …

探索的テスト入門改訂版/Introduction to exploratory testing

Hiroki Iseri
November 10, 2013

探索的テスト入門改訂版/Introduction to exploratory testing

Hiroki Iseri

November 10, 2013
Tweet

More Decks by Hiroki Iseri

Other Decks in Programming

Transcript

  1. アウトライン • 探索的テストの概要 – 探索的テストとは – 探索的テストの定義 – 探索的テストの歴史 –

    探索的テストの適用領域 – 探索的テストの位置づけ についての注意点 – 探索的テストのメリット・ デメリット – 探索的テストの主な用途 • 探索的テストの基礎 – 探索的テストの入出力 – 探索的テストの実施者に 求められるもの – 探索的テストのスタイル – 探索的テストの進め方 • フリースタイル • テストチャータベース • セッションベース – 探索的テストの自動化 • 探索的テストの実践 • 探索的テストの活用拡大 3
  2. 探索的テストとは(2つのパラダイム) 6 探索的テスト •テスト手順を ドキュメント化しない •動かして得られた フィードバックを活用し て、テストの構築と並行 して実行する スクリプトテスト

    (記述式テスト) •テスト設計・実装を行 い、事前にテスト手順を ドキュメント化する •テスト手順に従って テストを実施する テスト手順の管理 テスト実行
  3. 探索的テストの定義(James Bach) • 「Exploratory testing is simultaneous learning, test design,

    and test execution. 」 (探索的テストは、学習、テスト設計、テスト実行 を並行して実施するものだ) – James Bach, Exploratory Testing Explained(v.1.3 4/16/03) • 探索的テストの定義として引用されていること が多い 8
  4. 探索的テストの定義(Cem Kaner) • Exploratory software testing – is a style

    of software testing – that emphasizes the personal freedom and responsibility – of the individual tester – to continually optimize the value of her work – by treating • test-related learning, • test design, • test execution, and • test result interpretation – as mutually supportive activities – that run in parallel throughout the project. (Cem Kaner, A Tutorial in Exploratory Testing) • こちらも探索的テストの定義として引用されることが多い 9
  5. 探索的テストの定義(Cem Kaner) • Exploratory software testing – is a style

    of software testing – that emphasizes the personal freedom and responsibility – of the individual tester – to continually optimize the value of her work – by treating • test-related learning, • test design, • test execution, and • test result interpretation – as mutually supportive activities – that run in parallel throughout the project. (Cem Kaner, A Tutorial in Exploratory Testing) • こちらも探索的テストの定義として引用されることが多い 10 •ソフトウェアテストのスタイル •テスター一人一人の自由意思 と責務に基づく •各々の価値に合わせて洗練さ せていく •テスト関係の学習、テスト設計、 テスト実施、テスト結果の説明を 扱う •プロジェクトを通して並行実施 される補完的な活動
  6. 探索的テストの歴史的経緯 • ソフトウェア開発初期 – 探索的テストはありふれたテストのアプローチであり、ソフトウェア開発が 始まった初期から存在する • 1980年代〜 – 手順書に依存しないテストのうち、以下の2つを区別するために、後者に

    「探索的テスト」という名前をつけて、アプローチを明確化した • 考えなしに実行するテスト(アドホックテスト) • 訓練可能で知的にバグを見つけるテスト – 1988年にCem Kanerが命名 • 1990年代〜 – 専門の文献が整備され、テスト手法の一分野として確立する • Ex)「Exploratory Software Testing: Tips, Tricks, Tours, and Techniques to Guide Test Design」 • 「How to Break Software: A Practical Guide to Testing」 – (いずれもJames A. Whittaker) • 2000年代~ – アジャイル開発・アジャイルテストの普及に伴って、一般的なテストアプ ローチとなる 11
  7. 探索的テストの適用領域 • テストレベル – どのテストレベルでも活用できる – 手動テストが主な適用対象のため、システムテストな ど手動テストの多いテストレベルで主に活用される • テストタイプ

    – ブラックボックステスト/グレーボックステストで主に 活用される。それ以外で使えないわけではない • テストタイプ – テスト設計、テスト実装、テスト実行に適用する 12
  8. 探索的テストのメリット・デメリット スクリプトテストに対するメリット • 軽快 – テスト設計・実装コストを削減 – 必要なところをピンポイントでテスト • 柔軟性が高い

    – テスト手順の変更コストを削減 – 実物に合わせながらテストを構築できる – 人間の知能を使って次のようなものにも柔軟に対応できる • 仕様やテスト設計の穴 • 明文化しにくい操作や動作 • 人間の能力を活用しやすい – 暗黙知や明文化しにくいノウハウを活用できる 13 欠陥検出での 高い生産性 テストの保守 コスト削減 困難な欠陥検出 の実現
  9. 探索的テストのメリット・デメリット スクリプトテストに対するデメリット • 属人性が高い – 人によって効果が変動する • 能力のない人間が担当するとアドホックテストと変わらなくなる • テスト設計の品質がわかりにくい

    – テスト設計の漏れ・だぶりがわかりにくい – 品質保証としての信頼性を確保しにくい • 記録が残りにくい – テストのエビデンスや監査証跡を記録しにくい – テストの再現性を保証しにくい • テスト設計段階でのバグの予防効果が低い – テスト分析・設計による問題検出効果が属人的 14
  10. 探索的テストの主な用途 • スクリプトテスト、自動テストの補完 – 最も一般的な用途 – 例)テストスクリプトや自動テストが網羅できないテ スト条件のカバー • アジリティの確保

    – 例)イテレーションごとの品質保証の高速化 • テストの保守コストの軽減 – 例)変更頻度の高いUIに対するテスト 15
  11. 探索的テストの主な用途 探索的テストによるスクリプトテストの補完 • 一般的に探索的テストとスクリプトテストは相互 補完の形で平行実施される • テストケースの網羅度の補完 – 詳細なスクリプトテストは高コスト •

    テスト設計・実装コスト・変更対応コスト・保守コスト – 保証のためのテストをスクリプトテストで構築しつつ、 詳細な欠陥検出のテストは探索的テストで補完する • 変化への対応 – スクリプトテストは変更コストが高い – テストの変動部分は探索的テストで担保することで 変更コストを削減する 16
  12. 探索的テストの実施者に求められるもの • テスト対象の知識 – 例)対象の弱点がわかる、欠陥の要因を推定できる • 品質の知識 – 例)ユーザにとって妥当性がわかる •

    テスト技術 – 例)必要に応じて、適切なテストを組み立てられる/ 各種テスト作成のテクニックを活用できる • 境界を狙うなど • バグの知識 – バグのBad Smellを感じ取れる/バグの傾向を学 習できる 20
  13. 探索的テストの進め方 • 手順 – 準備 • 計画・学習 – 必要な能力・情報を特定し確保する –

    テスト目的やミッションを明確化する • 設計 – テストチャータを確保する – 実行 • 実行・学習・舵取り – 報告 • テスト実行結果を報告する • テストの十分性を評価する 22 ※探索的テストは様々な進め方がある。あくまで一例
  14. • 手順 – 準備 • 計画・学習 – 必要な能力・情報を特定し確保する – テスト目的やミッションを明確化する

    • 設計 – テストチャータを確保する – 実行 • 実行・学習・舵取り – 報告 • テスト実行結果を報告する • テストの十分性を評価する 探索的テストの進め方とスタイル 23 ※探索的テストは様々な進め方がある。あくまで一例 フリースタイルの探索的テスト テストチャータを用いる探索的テスト セッションベーステスト
  15. フリースタイルの探索的テスト • テスト実施者の責務に基づいて、自由意思で テストの構築と実行を平行実行する – ソフトウェア開発では珍しくない。 Bad Smellの調査、デバッグなどを知的に行おう とすると、しばしばこのスタイルとなる –

    フリースタイルの基本サイクル 1. 実施 – テストを実施する 2. 学習 – テスト結果から知見を得る 3. 舵取り(Steering) – 学習結果を加味してテストの方向性を補正する 24 反復する
  16. フリースタイルの探索的テスト 基本サイクルの具体的な実践アプローチ • 仮説検証型 1. システムについて仮説(メンタルモデル)を作る 2. 仮説を反証するようなテストを設計する 3. テストを実行し結果を得る

    4. 仮説に反する結果を評価する • 仮説が証明されるか反証されるまで上記を繰り返す • 学習型 1. 学習の対象やミッションを選ぶ 2. 対象の動きを探索し、必要な知見を学習する • 学習目標が達成されるまで上記を繰り返す (リー・コープランド,「はじめて学ぶソフトウェアのテスト技法」) 25
  17. テストチャータを用いる探索的テスト • テストチャータとは – 探索的テストの目的達成のための道しるべ – テストセッション(探索的テスト実行活動を実行可能 な粒度まで分割したもの)ごとの、「テストの目的」と 「目的達成の方針・見通し」で構成される •

    テストセッションの例: – ユーザストーリごと、一定のテスト実行時間ごと • テストの目的の例: – 「XSSの脆弱性がないことを確認する」「ユーザマニュアルと実際 の動作が合致することを確認する」 • テストの目的達成の方針・見通しの例: – 抽象度の高いテストケース、機能リスト、テスト条件の指定 26
  18. テストチャータの例 Explore Itのチャータフォーマット • 以下のテンプレートで記述したシナリオをテスト チャータとする – Explore (target) with

    (resources) to discover (information) – 上記フォーマットの中の入力項目: • Target – 探索する対象 – 例)アップデートシステム • Resources – テストで使用するリソース。ツールや技術、データ等 – 例)指定のExploitを使用する • Information – 見つけるべき情報。特定のバグ、品質の確証など – 例)フォーマットに違反する不正データによるアップデート 28
  19. テストチャータの例 James A. Whittakerのシナリオテスト • ツアーのメタファーを使ったシナリオをテスト チャータとする • シナリオを主軸に、テスト条件を派生的に広げ ながら探索していく

    – スクリプトテストでのシナリオ • その通りに実行すべき具体的なテスト手順 – 探索的テストでのシナリオ • テスト実行の大まかな流れ。テスト実施者の判断で手順を 派生させたり、追加で深堀させたりしてよい James A. Whittaker「Exploratory Software Testing: Tips, Tricks, Tours, and Techniques to Guide Test Design 30
  20. テストチャータの例 James A. Whittakerのシナリオテスト • ランドマークツアーテスト – メタファーの一つ – テスト対象の状態やイベントをランドマークとする。

    ランドマークの網羅方針をシナリオとする – シナリオをテストチャータとして、探索的テストを 実施する 31 画面A 画面B 画面C 画面D 例)ランドマークツアーシナリオ 各ランドマーク(例では画面)の 遷移を一通り巡る
  21. テストチャータの例 様々な種類・粒度がある 32 テストチャータ 探索的テストの進め方 テストの目的 目的達成の方針や道しるべ マニュアルとの合致性 を確認する マニュアル

    ・マニュアルで説明される操作 に対して、探索的テストを実施 ・これをマニュアルの最初から 最後まで実施 あるUIのセキュリティ バグを検出する 一般的なセキュリティリスクや 攻撃手法、典型的バグをまと めたリスト ・リストの各項目についてのバ グがないか、順々に探索的テス トを実施 ある変更でリグレッ ションが発生していな いことを確認する リグレッションのリスク分析結 果をまとめたリスクリスト ・一定レベル以上のリスクごと にバグがないか、順々に探索的 テストを実施 スプリントの成果物の 品質保証 ユーザストーリ ・スプリントバッグログに格納さ れたユーザストーリごとに探索 的テストを実施
  22. セッションベースドテストの進め方 • 計画・設計 – テストの目的を各セッションのミッション(=テストの目 的)にブレークダウンする。またセッションのミッションに 応じたテストチャータを作成する • 実行 –

    セッション単位でテストを実施する。 – セッションが指定する時間内で、セッションの示すテスト チャータに従って探索的テストを実施し、セッションの ミッション達成を目指す • 報告 – 指定の形式に従ってセッションレポートを作成する – また各セッションの結果から、テスト十分性や有効性を 評価する 35
  23. 【補記】探索的テストの自動化 • 探索的テストの作業支援ツールの例 – 品質分析のためのツール • 静的解析ツール、レビュー支援ツール – 操作のツール •

    キャプチャ&リプライツール、デバッガ、データジェネレー タ、ファジングツール – 記録のツール • ロギングツール – 思考支援のためのツール • マインドマップツール – Cem Kanerが挙げているもの • Test Explorer、BBTest Assisntant、Atlas.ti等 37
  24. 探索的テストの効果を引き出すアプローチ • テスト環境確保を工夫する – 探索的テストのスコープはテスト環境制約で制限されることが多い。早期から必 要環境を分析し、適時に適切なテスト環境を使えるように段取りを工夫すること • 探索的テストの活躍どころを明示的に確保する – 探索的テストの適時性を見極め、チームの活動に明示的に組み込むこと。

    非明示的な探索的テストはチームの工数不足時に実施されなくなる • 必要な知識・能力をチームとして確保する – 知識・能力のあるメンバーをテスト実行に巻き込むこと – 反復開発などで学習機会を設け、チームの探索的テスト能力を磨くこと • 正しい方位に方向づけする – テスト分析を行って探索的テストを正しく方向づけすること – 不具合流出など実施したテストを分析し、改善フィードバックサイクルを回して方 向を補正していくこと • テストのニーズ・シーズを収集する – チームの探索的テストのニーズ・シーズをよく識別し積極的にテストすること – ニーズ・シーズが気付けるように、知識・技術を日ごろから蓄積すること • 効率化技術を蓄積する – 自動化や品質分析をはじめ、探索的テストを効率化する手段を蓄積すること 42