Your SlideShare is downloading. ×
探索的テスト入門
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

探索的テスト入門

6,096

Published on

Published in: Technology
0 Comments
41 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
6,096
On Slideshare
0
From Embeds
0
Number of Embeds
10
Actions
Shares
0
Downloads
69
Comments
0
Likes
41
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 探索的テスト入門 2013/11/10  テスト技術勉強会   井芹 洋輝 1
  • 2. この講演について •  この講義は探索的テストの基礎知識の学習を目 的としています   •  自己紹介   – 井芹洋輝   •  組み込みの開発・テストに従事   •  テスト自動化研究会、TDD研究会などに従事   2
  • 3. 目次 •  1.  探索的テストの概要   –  探索的テストとは   –  探索的テストの定義   –  探索的テストの歴史的経 緯   –  探索的テストの適用領域   –  探索的テストの位置づけ についての注意点 –  探索的テストのメリット・デ メリット –  探索的テストの主な用途   •  2.  探索的テストの基礎 –  探索的テストの入出力 –  探索的テストの実施者に 求められるもの –  探索的テストのスタイル –  探索的テストの進め方 •  フリースタイルの探索的テ スト •  テストチャータを用いる探 索的テスト •  テストチャータの例   •  セッションベースドテスト –  探索的テストの自動化   •  3.探索的テストの実践 3
  • 4. 1.  探索的テストの概要 4
  • 5. 1.1  探索的テストとは(概要) •  ソフトウェアテストのアプローチの一つ   •  以下のアプローチを効率的に行う   – テスト手順のスクリプト化を行わない   – テスト実施者が主体となり、   •  実施者の知見や思考   •  事前の分析情報   •  動かして得たフィードバック    を元に、テスト実施とテストの構築を並行実施する   5
  • 6. 1.1  探索的テストとは(2つのパラダイム) 6 ●探索的テスト     ・テスト手順のドキュメ ント化を行わない       ・事前分析情報、実施 者の能力、動かして得 られたフィードバックな どを活用して、テストの 構築と実施を並行的に 行う ●スクリプトテスト     ・テスト設計を行い、事 前にテスト手順をドキュ メント化する     ・テスト手順にしたがっ てテストを実施する テスト手順の管理   テスト実施  
  • 7. 1.2  探索的テストの定義 •  標準的な定義確立の動きはあるが収束していな い   – “Exploratory  Tes9ng  Research  Summitなどで議論した が収束しなかった”(Cem  Kaner)   •  hFp://kaner.com/?p=46   •  ただしおおまかに共通定義が形成されている   7
  • 8. 1.2  探索的テストの定義(James  Bach) •  「Exploratory  tes9ng  is  simultaneous  learning,  test   design,  and  test  execu9on.  」   (探索的テストは、学習、テスト設計、テスト実行を 並行して実施するものだ)   – James  Bach,  Exploratory  Tes9ng  Explained(v.1.3   4/16/03)   •  探索的テストの定義として引用されていることが 多い 8
  • 9. 1.2  探索的テストの定義(Cem  Kaner) •  Exploratory  soRware  tes9ng   –  is  a  style  of  soRware  tes9ng   –  that  emphasizes  the  personal  freedom  and  responsibility   –  of  the  individual  tester   –  to  con9nually  op9mize  the  value  of  her  work   –  by  trea9ng     •  test-­‐related  learning,     •  test  design,     •  test  execu9on,  and   •  test  result  interpreta9on   –  as  mutually  suppor9ve  ac9vi9es   –  that  run  in  parallel  throughout  the  project.      (Cem  Kaner,  A  Tutorial  in  Exploratory  Tes9ng)   •  こちらも探索的テストの定義として引用されることが多い 9
  • 10. 1.2  探索的テストの定義(Cem  Kaner) •  Exploratory  soRware  tes9ng   –  is  a  style  of  soRware  tes9ng   –  that  emphasizes  the  personal  freedom  and  responsibility   –  of  the  individual  tester   –  to  con9nually  op9mize  the  value  of  her  work   –  by  trea9ng     •  test-­‐related  learning,     •  test  design,     •  test  execu9on,  and   •  test  result  interpreta9on   –  as  mutually  suppor9ve  ac9vi9es   –  that  run  in  parallel  throughout  the  project.      (Cem  Kaner,  A  Tutorial  in  Exploratory  Tes9ng)   •  こちらも探索的テストの定義として引用されることが多い 10 ●ソフトウェアテストのスタイル   ●テスター一人一人の自由意思 と責務に基づく   ●各々の価値に合わせて洗練さ せていく   ●テスト関係の学習、テスト設計、 テスト実施、テスト結果の説明を 扱う   ●プロジェクトを通して並行実施さ れる補完的な活動
  • 11. 1.3  探索的テストの歴史的経緯 •  ソフトウェア開発初期   –  探索的テストは一般的なテストアプローチ。ソフトウェア開発が始まっ た初期から実施されてきた   •  1980年代〜   –  手順書に依存せずに分析やフィードバックを活用するアプローチとし て、探索的テストという名前で概念を明確化する   •  1983年にCem  Kanerが命名   –  それまで探索的なアプローチとアドホックテストは区別されておらず。 知的なアプローチ(=探索的テスト)とそれ以外のアプローチを区別 するため、探索的テストという考え方を確立した   •  1990年代後半〜   –  専門の文献が整備され、テスト手法の一分野として確立する   •  Ex)「Exploratory  SoRware  Tes9ng:  Tips,  Tricks,  Tours,  and  Techniques  to   Guide  Test  Design」   •  「How  to  Break  SoRware:  A  Prac9cal  Guide  to  Tes9ng」   –  (いずれもJames  A.  WhiFaker)   11
  • 12. 1.4  探索的テストの適用領域 12 • テスト設計・実装・実施が主な対象 テストプロセス • どのテストレベルでも活用できる • システムテストなど上位のテストレベル で主に活用される テストレベル • 多くのテストタイプで活用できる • ブラックボックステストで主に活用され る。ただしそれ以外で活用できないわ けではない テストタイプ
  • 13. 1.5  探索的テストの位置づけについての注意点 •  アドホックテスト≠探索的テスト   – 探索的テストの歴史的経緯の通り、   知的でないアドホックテストは探索的テストではない   •  課題となるのは「探索的テストの生産性をどう高 めるか?」   – 探索的テストの効果はやり方によって大きく変動する   – 暗黙的・非明示的なものも含めて、探索的テストはす でに多くの現場で実践されている   – 多くの場面で課題となるのが、探索的テストの効果を どう活かしていくか?/生産性をどう高めていくか?   13
  • 14. 1.6  探索的テストのメリット・デメリット    スクリプトテストに対するメリット •  軽快   –  テスト設計・実装コストを削減   –  必要なところをピンポイントでテスト   •  柔軟性が高い   –  テスト手順の変更コストを削減   –  実物に合わせながらテストを構築できる   –  人間の知能を使って次のようなものにも柔軟に対応できる   •  仕様やテスト設計の穴   •  明文化しにくい操作や動作   •  人間の能力を活用しやすい   –  暗黙知や明文化しにくいノウハウを活用できる   14 欠陥検出での 高い生産性 テストの保守コ スト削減 検出困難な欠 陥検出の実現
  • 15. 1.7  探索的テストのメリット・デメリット    スクリプトテストに対するデメリット •  属人性が高い   –  人によって効果が変動する   •  能力のない人間が担当するとアドホックテストと変わらなくなる   •  テスト設計の品質がわかりにくい   –  漏れ・だぶり・網羅率がわかりにくい   –  テストの品質を保証しにくい   •  記録が残りにくい   –  テストのエビデンスや監査証跡の記録を保証しにくい   –  テストの再現性を保証しにくい   •  テスト設計段階でのバグの予防効果が低い場合がある   –  テスト分析・設計による問題検出効果が属人的 15
  • 16. 1.8  探索的テストの主な用途 •  他のテスト手法の補完   – 最も多い用途   – Ex)スクリプトテストの補完   – Ex)テスト終了後の追加テスト   •  テスト漏れの確認。不具合ではないが怪しい現象の調査   •  軽快さの確保   – Ex)スモークテストとしての実施   •  長大なスクリプトテストの直前に実施。手戻りを防ぐ   •  テストの保守コストの削減   – Ex)反復開発でのイテレーションごとのテストとして実 施   16
  • 17. 1.8  探索的テストの主な用途   (スクリプトテストの補完) •  一般的に探索的テストとスクリプトテストは相互補完 の形で活用される   •  テストケースの網羅度の補完   –  詳細なスクリプトテストは高コスト   •  テスト設計・実装コスト・変更対応コスト・保守コスト   •  テストの効果がテストのコストに見合わなくなることがある   –  保証のためのテストをスクリプトテストで構築しつつ、詳細 な欠陥検出のテストは探索的テストで補完する   •  変化への対応   –  スクリプトテストは変更コストが高い   –  テストの変動部分は探索的テストで担保することで変更コ ストを削減する   17
  • 18. 2.  探索的テストの基礎 18
  • 19. 2.1  探索的テストの入出力 19 探索的   テスト ●動かして得た フィードバック   Ex)怪しい動作     ●実施者の能力 や知見   Ex)テスト技術、バグ や品質リスクに対す る考察力     ●事前分析結果   Ex)対象の品質リスク、 機能構成、品質の偏 在度、テストチャータ   インプット ●不具合関連の 情報     ●テストログ     ●気づきや学習効 果   アウトプット
  • 20. 2.2  探索的テストの実施者に求められるもの •  製品知識   – Ex)対象の構成がわかる/対象の弱点がわかる •  テスト技術   – Ex)テスト要求に応じて必要なテストのアプローチやテ ストケースを柔軟に組み立てられる/各種テスト技術を 扱える •  バグの知識   – 欠陥のBad  Smellを感覚的に感じ取れる/欠陥の特徴 を理解している/欠陥の傾向を柔軟に学習できる 20
  • 21. 2.3  探索的テストのスタイル   (今回扱うもの) •  フリースタイルの探索的テスト   •  テストチャータを用いる探索的テスト   – Ex)シナリオベースドテスト   •  セッションベースドテスト   21 管理の厳格さ
  • 22. 2.4  探索的テストの進め方 •  手順 – 準備 •  計画・学習   –  必要な能力・情報を特定し確保する   –  テスト目的やミッションを明確化する   •  設計   –  テストチャータを確保する – 実施 •  実施・学習・舵取り – 報告 •  テスト実施結果を報告する   •  テストの十分性を評価する   22 ※探索的テストは様々な進め方がある。あくまで一例
  • 23. 2.5  探索的テストの進め方 •  手順 – 準備 •  計画・学習   –  必要な能力・情報を特定し確保する   –  テスト目的やミッションを明確化する   •  設計   –  テストチャータを確保する – 実施 •  実施・学習・舵取り – 報告 •  テスト実施結果を報告する   •  テストの十分性を評価する   23 フリースタイルの探索的テスト ・テストチャータを   用いる探索的テスト   ・セッションベースドテスト   ※探索的テストは様々な進め方がある。あくまで一例
  • 24. 2.5.1  フリースタイルの探索的テスト •  フリースタイルの探索的テスト   –  テスト実施者の責任に基づいて、自由意思により探索的 テストを実施する   –  ソフトウェア開発では珍しくない。Bad  Smellや不安の調査、 デバッグなどを知的に行おうとすると、しばしばこのスタイ ルとなる   –  実施時の基本サイクル   1.  実施   –  テストを実施する   2.  学習   –  テスト結果から知見を得る   3.  舵取り(Steering)   –  学習結果も加味してテストの方向性を補正する   24 反復する
  • 25. 2.5.1  フリースタイルの探索的テスト •  フリースタイルの探索的テストの手順の例   – 仮説検証型   1.  システムについて仮説(メンタルモデル)を作る   2.  仮説を反証するようなテストを設計する   3.  テストを実行し結果を得る   4.  仮説に反する結果を評価する   •  仮説が証明されるか反証されるまで上記を繰り返す   – 学習型   1.  学習の対象やミッションを選ぶ   2.  対象の動きを探索し、必要な知見を学習する            (リー・コープランド,「はじめて学ぶソフトウェアのテスト技法」)   25
  • 26. 2.5.2  テストチャータを用いる探索的テスト •  テストの目的とテストチャータ   – テストチャータを用いる探索的テストでは、準備段階で テストの目的(or  ミッション or  テストのゴール)と、その 達成のためのテストチャータを用意する   – テストの目的   •  テストの実施で達成したい目的   •  Ex)「XSSの脆弱性がないことを確認する」「ユーザマニュアル と実際の動作が合致することを確認する」   – テストチャータ   •  テストの目的達成のための方針や目印   •  抽象度の高いテストケース、機能リスト、リスクリスト等   26
  • 27. 2.5.3テストチャータの例 27 テストの目的 テストチャータ テストの進め方 マニュアルとの合致性を確認 する マニュアル ・マニュアルで説明される操作 に対して、探索的テストを実施   ・これをマニュアルの最初から 最後まで実施 あるUIのセキュリティバグを検 出する 一般的なセキュリティリ スクや攻撃手法、典型 的バグをまとめたリスト ・リストの各項目についてのバ グがないか、順々に探索的テス トを実施 作りかけのあるテストケース で、バグが検出されないことを 確認する   テスト未実装の上位の テストケース ・テストケースごとにバグがない か探索的テストを実施。テスト 実装は探索的に行う   ・これを上位のテストケース1つ 1つで実施   ある変更でリグレッションが発 生していないことを確認する リグレッションのリスク 分析結果をまとめたリ スクリスト ・リスクリストの項目ごとにバグ がないか、順々に探索的テスト を実施   ・これを上位リスクを網羅するよ うに実施する  
  • 28. 2.5.3  テストチャータの例(James  A.  WhiFaker)   シナリオに基づいた探索的テスト •  探索的テストではシナリオをテストチャータとして活用する 手法がある   –  James  A.  WhiFaker「Exploratory  SoRware  Tes9ng:  Tips,  Tricks,   Tours,  and  Techniques  to  Guide  Test  Design」   •  シナリオに基づく探索的テストは、スクリプトテストでのシナ リオテストと異なるもの   –  スクリプトテストでのシナリオ   •  具体的なテスト手順   –  探索的テストのシナリオ   •  実施の方針や大まかな流れを示すものである。実施者の判断で手順を 派生させたり、気になった箇所を追加で深堀りしたりして良い   •  形式としては最低限達成すべき手順やテスト条件、ベースとする手順 (実施中に派生させたり補強したりする)、上位のテストケース(テスト実 装は探索的に行う)など 28
  • 29. 2.5.3  テストチャータの例(James  A.  WhiFaker)   ランドマークツアーテスト •  ランドマークツアーテストはシナリオに基づく探索的テス トの一つ   –  James  A.  WhiFaker「Exploratory  SoRware  Tes9ng:  Tips,  Tricks,   Tours,  and  Techniques  to  Guide  Test  Design」   •  テスト対象の状態やイベントをランドマークとする。ランド マークの網羅方針や遷移の網羅方針をテストチャータと する 29 画面A 画面B 画面C 画面D Ex)テストの方針   探索的テストで、各ランド マーク(例では画面)の遷移 をひと通り網羅する  
  • 30. 2.5.3  テストチャータの例(Explore  It!)   Explore  Itのチャータフォーマット •  Given/When/Thenのシナリオフォーマットのように、形式的にテ ストシナリオを記述し、それをテストチャータとする場合がある。   ここでのチャータはセッションのタイムボックスに合わせて粒度 が調整される   •  テストチャータテンプレートの例   –  フォーマット(Elisabeth  Hendrickson「Explore  It!」)   •  Explore  (target)   •  with  (resources)   •  to  discover  (informa9on)   –  上記フォーマットの()の項目に以下の内容を記述する   •  Target   –  探索する対象   •  Resources   –  テストで使用するリソース。ツールや技術、データ等   •  Informa9on  to  discover   –  見つけるべきものについての情報。観点や特定のバグ、品質特性など   30
  • 31. 2.5.3  テストチャータの例(Explore  It!)   Explore  Itのチャータフォーマット •  テストチャータテンプレートの例   – Target:   •  Target   –  アップデートシステム   •  Resources   –  指定のExploitを使用する   •  Informa9on  to  discover   –  フォーマットに違反する不正アップデートデータによるアップデート   31
  • 32. 2.5.4  セッションベースドテスト •  セッションベースドテストは探索的テストから派生 した手法。タイムボックスを設けた探索的テスト   – 探索的テストの実施単位として「セッション」を定義す る   •  セッションというタイムボックスでテストを構成する ことで、探索的テストの計画管理や全体網羅性の 確認を容易にする   32
  • 33. 2.5.4  セッションベースドテスト   基礎用語 •  セッション   – 1時間弱から2時間程度のタイムボックス。各セッショ ンはミッションとテストチャータを持つ。   – セッションベースドテストでは、セッションを構成要素と して、テストの設計・実施を行う   •  テスト設計は、セッションで構成する。   •  テスト設計では、テストの目的をセッションのミッション・テス トチャータまでブレークダウンする   •  テスト実施では、セッションの単位で計画や工数確保を行う   •  ミッション   – セッションで達成を目指すテストの目的 33
  • 34. 2.5.4  セッションベースドテスト(進め方の例) •  計画・設計   –  テストの目的を各セッションのミッション(=テストの目的) にブレークダウンする。またセッションのミッションに応じた テストチャータを作成する   •  実施   –  セッション単位でテストを実施する。   –  セッションが指定する時間内で、セッションの示すテスト チャータに従って探索的テストを実施し、セッションのミッ ション達成を目指す   •  報告   –  指定の形式に従ってセッションレポートを作成する   –  また各セッションの結果から、テストの全体網羅性などを 評価する 34
  • 35. 2.6  探索的テストの自動化 •  探索的テストのあらゆる作業にツールを活用でき る余地がある。効率化のため、各作業をツールで 自動化するのが推奨されている   •  探索的テストの様々な作業をコンピュータで支 援・代替させることは「探索的テストの自動化」と 呼称される   – (Cem  Kaner,  A  Tutorial  in  Exploratory  Tes9ng)   35
  • 36. 2.6  探索的テストの自動化 •  探索的テストの作業支援ツールの例   –  品質分析のためのツール   •  静的解析ツール、レビュー支援ツール   –  操作のツール   •  キャプチャ&リプライツール、デバッガ、データジェネレータ、ファ ジングツール   –  記録のツール   •  ロギングツール   –  思考支援のためのツール   •  マインドマップツール   –  Cem  Kanerが挙げているもの   •  Test  Explorer、BBTest  Assisntant、Atlas.9等   36
  • 37. 3.  探索的テストの実践 37
  • 38. 3.1  探索的テストの実施例   スクリプトテストの補完 1.  スクリプトテストを実施中に以下を留意事項とし てリスト化していく   – 期待値に反していないが不具合の可能性がある現象   – テスト設計・実装の間違いや不足部分   – その他調査が要因   2.  上記リストをテストチャータとして、スクリプトテス ト終了後に探索的テストを実施する   38
  • 39. 3.2  探索的テストの実施例   リスクベースドテスト •  品質リスクの分析を行う   – 例えば開発者や要求定義者などを交えたブレストで 発生が予期されるバグをリストアップする   – バグのリスクレベルを定義する   •  上記リスクリストをテストチャータとし、リスクレベ ルの高いものにフォーカスを当てて探索的テスト を実施する 39
  • 40. まとめ •  1.  探索的テストの概要   –  探索的テストとは   –  探索的テストの定義   –  探索的テストの歴史的経 緯   –  探索的テストの適用領域   –  探索的テストの位置づけ についての注意点 –  探索的テストのメリット・デ メリット –  探索的テストの主な用途   •  2.  探索的テストの基礎 –  探索的テストの入出力 –  探索的テストの実施者に 求められるもの –  探索的テストのスタイル –  探索的テストの進め方 •  フリースタイルの探索的テ スト •  テストチャータを用いる探 索的テスト •  テストチャータの例   •  セッションベースドテスト –  探索的テストの自動化   •  3.探索的テストの実践 40

×