Slide 1

Slide 1 text

探索的テスト入門 2013/11/10 テスト技術勉強会 井芹 洋輝 【改訂版】 1

Slide 2

Slide 2 text

この講演について • 目的 – 探索的テストの基礎知識の習得 • 対象 – ソフトウェアテスト初学者 2

Slide 3

Slide 3 text

アウトライン • 探索的テストの概要 – 探索的テストとは – 探索的テストの定義 – 探索的テストの歴史 – 探索的テストの適用領域 – 探索的テストの位置づけ についての注意点 – 探索的テストのメリット・ デメリット – 探索的テストの主な用途 • 探索的テストの基礎 – 探索的テストの入出力 – 探索的テストの実施者に 求められるもの – 探索的テストのスタイル – 探索的テストの進め方 • フリースタイル • テストチャータベース • セッションベース – 探索的テストの自動化 • 探索的テストの実践 • 探索的テストの活用拡大 3

Slide 4

Slide 4 text

探索的テストの概要 4

Slide 5

Slide 5 text

探索的テストとは(概要) • ソフトウェアテストのアプローチの一つ • 以下のアプローチを効率的に行う – テスト手順のドキュメント化を行わない – テスト実施者が主体となり、 • 実施者の知見や思考 • 事前の分析情報 • 動かして得たフィードバック を元に、テストの構築と実行を並行実行する 5

Slide 6

Slide 6 text

探索的テストとは(2つのパラダイム) 6 探索的テスト ●テスト手順を ドキュメント化しない ●動かして得られた フィードバックを活用し て、テストの構築と並行 して実行する スクリプトテスト (記述式テスト) ●テスト設計・実装を行 い、事前にテスト手順を ドキュメント化する ●テスト手順に従って テストを実施する テスト手順の管理 テスト実行

Slide 7

Slide 7 text

探索的テストの定義 • 複数の定義がある – “Exploratory Testing Research Summitな どで議論したが収束しなかった”(Cem Kaner) • http://kaner.com/?p=46 • 定義の方向性は大まかに一致している 7

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

探索的テストの定義(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

Slide 10

Slide 10 text

探索的テストの定義(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 ●ソフトウェアテストのスタイル ●テスター一人一人の自由意思 と責務に基づく ●各々の価値に合わせて洗練さ せていく ●テスト関係の学習、テスト設計、 テスト実施、テスト結果の説明を 扱う ●プロジェクトを通して並行実施 される補完的な活動

Slide 11

Slide 11 text

探索的テストの歴史的経緯 • ソフトウェア開発初期 – 探索的テストはありふれたテストのアプローチであり、ソフトウェア開発が 始まった初期から存在する • 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

Slide 12

Slide 12 text

探索的テストの適用領域 • テストレベル – どのテストレベルでも活用できる – 手動テストが主な適用対象のため、システムテストな ど手動テストの多いテストレベルで主に活用される • テストタイプ – ブラックボックステスト/グレーボックステストで主に 活用される。それ以外で使えないわけではない • テストタイプ – テスト設計、テスト実装、テスト実行に適用する 12

Slide 13

Slide 13 text

探索的テストのメリット・デメリット スクリプトテストに対するメリット • 軽快 – テスト設計・実装コストを削減 – 必要なところをピンポイントでテスト • 柔軟性が高い – テスト手順の変更コストを削減 – 実物に合わせながらテストを構築できる – 人間の知能を使って次のようなものにも柔軟に対応できる • 仕様やテスト設計の穴 • 明文化しにくい操作や動作 • 人間の能力を活用しやすい – 暗黙知や明文化しにくいノウハウを活用できる 13 欠陥検出での 高い生産性 テストの保守 コスト削減 困難な欠陥検出 の実現

Slide 14

Slide 14 text

探索的テストのメリット・デメリット スクリプトテストに対するデメリット • 属人性が高い – 人によって効果が変動する • 能力のない人間が担当するとアドホックテストと変わらなくなる • テスト設計の品質がわかりにくい – テスト設計の漏れ・だぶりがわかりにくい – 品質保証としての信頼性を確保しにくい • 記録が残りにくい – テストのエビデンスや監査証跡を記録しにくい – テストの再現性を保証しにくい • テスト設計段階でのバグの予防効果が低い – テスト分析・設計による問題検出効果が属人的 14

Slide 15

Slide 15 text

探索的テストの主な用途 • スクリプトテスト、自動テストの補完 – 最も一般的な用途 – 例)テストスクリプトや自動テストが網羅できないテ スト条件のカバー • アジリティの確保 – 例)イテレーションごとの品質保証の高速化 • テストの保守コストの軽減 – 例)変更頻度の高いUIに対するテスト 15

Slide 16

Slide 16 text

探索的テストの主な用途 探索的テストによるスクリプトテストの補完 • 一般的に探索的テストとスクリプトテストは相互 補完の形で平行実施される • テストケースの網羅度の補完 – 詳細なスクリプトテストは高コスト • テスト設計・実装コスト・変更対応コスト・保守コスト – 保証のためのテストをスクリプトテストで構築しつつ、 詳細な欠陥検出のテストは探索的テストで補完する • 変化への対応 – スクリプトテストは変更コストが高い – テストの変動部分は探索的テストで担保することで 変更コストを削減する 16

Slide 17

Slide 17 text

【補記】探索的テストを支えるスクリプトテスト • スクリプトテストの推進では、探索的テストの 計画や環境準備を支援する – スクリプトテストの計画・分析を通じて、探索的テス トにとっても必要な、テスト対象の分析、テスト要求 分析、必要なテスト環境の識別と準備手配を進める • テスト環境は探索的テストの制約となる – スクリプトテストの実行を通じて、漏れ・ムラなくテス ト対象の情報を学習する →一般的に探索的テストとスクリプトテストは相 互補完の形で平行実施される 17

Slide 18

Slide 18 text

探索的テストの基礎 18

Slide 19

Slide 19 text

探索的テストの入出力 19 探索的 テスト ●動かして得たフィードバック 例)怪しいふるまい、品質の程度 ●実施者の能力や知見 例)バグや品質リスクの知識 ●事前の調査結果 例)品質の偏在度、設計構造 インプット ●不具合情報 ●テストログ ●気づき、学習 アウトプット

Slide 20

Slide 20 text

探索的テストの実施者に求められるもの • テスト対象の知識 – 例)対象の弱点がわかる、欠陥の要因を推定できる • 品質の知識 – 例)ユーザにとって妥当性がわかる • テスト技術 – 例)必要に応じて、適切なテストを組み立てられる/ 各種テスト作成のテクニックを活用できる • 境界を狙うなど • バグの知識 – バグのBad Smellを感じ取れる/バグの傾向を学 習できる 20

Slide 21

Slide 21 text

探索的テストのスタイル (今回扱うもの) • フリースタイルの探索的テスト • テストチャータを用いる探索的テスト – Ex)シナリオベースドテスト • セッションベースドテスト 21 管理の厳格さ

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

フリースタイルの探索的テスト • テスト実施者の責務に基づいて、自由意思で テストの構築と実行を平行実行する – ソフトウェア開発では珍しくない。 Bad Smellの調査、デバッグなどを知的に行おう とすると、しばしばこのスタイルとなる – フリースタイルの基本サイクル 1. 実施 – テストを実施する 2. 学習 – テスト結果から知見を得る 3. 舵取り(Steering) – 学習結果を加味してテストの方向性を補正する 24 反復する

Slide 25

Slide 25 text

フリースタイルの探索的テスト 基本サイクルの具体的な実践アプローチ • 仮説検証型 1. システムについて仮説(メンタルモデル)を作る 2. 仮説を反証するようなテストを設計する 3. テストを実行し結果を得る 4. 仮説に反する結果を評価する • 仮説が証明されるか反証されるまで上記を繰り返す • 学習型 1. 学習の対象やミッションを選ぶ 2. 対象の動きを探索し、必要な知見を学習する • 学習目標が達成されるまで上記を繰り返す (リー・コープランド,「はじめて学ぶソフトウェアのテスト技法」) 25

Slide 26

Slide 26 text

テストチャータを用いる探索的テスト • テストチャータとは – 探索的テストの目的達成のための道しるべ – テストセッション(探索的テスト実行活動を実行可能 な粒度まで分割したもの)ごとの、「テストの目的」と 「目的達成の方針・見通し」で構成される • テストセッションの例: – ユーザストーリごと、一定のテスト実行時間ごと • テストの目的の例: – 「XSSの脆弱性がないことを確認する」「ユーザマニュアルと実際 の動作が合致することを確認する」 • テストの目的達成の方針・見通しの例: – 抽象度の高いテストケース、機能リスト、テスト条件の指定 26

Slide 27

Slide 27 text

テストチャータを用いる探索的テスト • テストチャータを用いる探索的テストとは – 事前にテストチャータを作成し、テストチャータの 道しるべに沿って探索的テストを実施する 27

Slide 28

Slide 28 text

テストチャータの例 Explore Itのチャータフォーマット • 以下のテンプレートで記述したシナリオをテスト チャータとする – Explore (target) with (resources) to discover (information) – 上記フォーマットの中の入力項目: • Target – 探索する対象 – 例)アップデートシステム • Resources – テストで使用するリソース。ツールや技術、データ等 – 例)指定のExploitを使用する • Information – 見つけるべき情報。特定のバグ、品質の確証など – 例)フォーマットに違反する不正データによるアップデート 28

Slide 29

Slide 29 text

テストチャータの例 Explore Itの探索的テスト • テスト要求をシナリオテンプレートに基づいた シナリオに分解 • テストセッションにシナリオを割り当て、シナリオ ごとに探索的テストを実施する 29

Slide 30

Slide 30 text

テストチャータの例 James A. Whittakerのシナリオテスト • ツアーのメタファーを使ったシナリオをテスト チャータとする • シナリオを主軸に、テスト条件を派生的に広げ ながら探索していく – スクリプトテストでのシナリオ • その通りに実行すべき具体的なテスト手順 – 探索的テストでのシナリオ • テスト実行の大まかな流れ。テスト実施者の判断で手順を 派生させたり、追加で深堀させたりしてよい James A. Whittaker「Exploratory Software Testing: Tips, Tricks, Tours, and Techniques to Guide Test Design 30

Slide 31

Slide 31 text

テストチャータの例 James A. Whittakerのシナリオテスト • ランドマークツアーテスト – メタファーの一つ – テスト対象の状態やイベントをランドマークとする。 ランドマークの網羅方針をシナリオとする – シナリオをテストチャータとして、探索的テストを 実施する 31 画面A 画面B 画面C 画面D 例)ランドマークツアーシナリオ 各ランドマーク(例では画面)の 遷移を一通り巡る

Slide 32

Slide 32 text

テストチャータの例 様々な種類・粒度がある 32 テストチャータ 探索的テストの進め方 テストの目的 目的達成の方針や道しるべ マニュアルとの合致性 を確認する マニュアル ・マニュアルで説明される操作 に対して、探索的テストを実施 ・これをマニュアルの最初から 最後まで実施 あるUIのセキュリティ バグを検出する 一般的なセキュリティリスクや 攻撃手法、典型的バグをまと めたリスト ・リストの各項目についてのバ グがないか、順々に探索的テス トを実施 ある変更でリグレッ ションが発生していな いことを確認する リグレッションのリスク分析結 果をまとめたリスクリスト ・一定レベル以上のリスクごと にバグがないか、順々に探索的 テストを実施 スプリントの成果物の 品質保証 ユーザストーリ ・スプリントバッグログに格納さ れたユーザストーリごとに探索 的テストを実施

Slide 33

Slide 33 text

セッションベースドテスト • セッションベースドテストは探索的テストの派生 形。タイムボックスを設けた探索的テスト – テストセッションに実行時間を設定し、タイムボック スとする – テストをタイムボックスで構成することで、探索的テ ストの計画・管理や、十分性の確認を実現する 33

Slide 34

Slide 34 text

セッションベースドテストにおける用語 • セッション – 1時間弱から2時間程度のタイムボックス。 各セッションはミッションとテストチャータを持つ。 – セッションベースドテストでは、セッションを構成要 素として、テストの設計・実行を行う • ミッション – セッションで達成を目指すテストの目的 34

Slide 35

Slide 35 text

セッションベースドテストの進め方 • 計画・設計 – テストの目的を各セッションのミッション(=テストの目 的)にブレークダウンする。またセッションのミッションに 応じたテストチャータを作成する • 実行 – セッション単位でテストを実施する。 – セッションが指定する時間内で、セッションの示すテスト チャータに従って探索的テストを実施し、セッションの ミッション達成を目指す • 報告 – 指定の形式に従ってセッションレポートを作成する – また各セッションの結果から、テスト十分性や有効性を 評価する 35

Slide 36

Slide 36 text

【補記】探索的テストの自動化 • 探索的テストのあらゆる作業にツールを活用で きる余地がある。効率化のため、各作業をツー ルで自動化するのが推奨されている – (Cem Kaner, A Tutorial in Exploratory Testing) 36

Slide 37

Slide 37 text

【補記】探索的テストの自動化 • 探索的テストの作業支援ツールの例 – 品質分析のためのツール • 静的解析ツール、レビュー支援ツール – 操作のツール • キャプチャ&リプライツール、デバッガ、データジェネレー タ、ファジングツール – 記録のツール • ロギングツール – 思考支援のためのツール • マインドマップツール – Cem Kanerが挙げているもの • Test Explorer、BBTest Assisntant、Atlas.ti等 37

Slide 38

Slide 38 text

探索的テストの実践 38

Slide 39

Slide 39 text

探索的テストの実施例 スクリプトテストの補完 1. スクリプトテストを実施中に以下を留意事項と してリスト化していく – 期待値に反していないが不具合の可能性がある現 象 – テスト設計・実装の間違いや不足部分 – その他調査が要因 2. 上記リストをテストチャータとして、スクリプト テスト終了後に探索的テストを実施する 39

Slide 40

Slide 40 text

探索的テストの実施例 リスクベースドテスト • 品質リスクの分析を行う – 例えば開発者や要求定義者などを交えたブレストで 発生が予期される障害事象をリストアップする – 障害事象のリスクレベルを定義する • 上記リスクリストをテストチャータとし、リスクレ ベルの高いものにフォーカスを当てて探索的テ ストを実施する 40

Slide 41

Slide 41 text

探索的テストを より活用するために 41

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

ご清聴ありがとうございました 43