SlideShare a Scribd company logo
『継続的デリバリヌ』 読曞䌚
     第章
  テスト戊略を実装する
   倧厎的デリバリヌ
      @favril
4.1 導入 (1/5)
• 「高品質を実珟するために、倧人数での調査
  に頌るのをやめよ。たずはプロセスを改善し、
  本番の品質を䜜り蟌め。」
• テストは
 – 職務暪断的な掻動
 – プロゞェクト初期から継続的に行う必芁がある
  • デプロむメントパむプラむンの䞀郚ずしおテストを実
    行し、アプリケヌション、蚭定、環境などに倉曎があ
    るたびに実行されるようにする
 – テストが通る  顧客が求める機胜が完党に正し
   く実装されたこずの蚌明になる
4.1 導入 (2/5)
• 品質を䜜り蟌むずは
 – 自動テスト戊略を改善するために定期的に䜜
   業するずいうこず
 – 自動テストをさたざたな抜象床で曞く
  • ナニットテスト、コンポヌネントテスト、受け入
    れテスト
 – 手動テストを継続的に実斜
  • ショヌケヌス、ナヌザビリティテスト、探玢的テ
    スト
4.1 導入 (3/5)
• 機胜面だけでなく、キャパシティやセ
  キュリティなどの非機胜芁件も、それを
  守らせるためのテストを曞く
 – それらの芁件を砎る問題を早期に怜知可胜
  • 発芋が早ければ、修正コストも安くすむ
4.1 導入 (4/5)
• 既存プロゞェクトに、理想的なテスト戊
  略を導入するのは簡単ではない
 – 自動テストのカバレッゞを高めるのに時間が
   かかる
 – 自動テストに関しおチヌムが孊習しおいる間
   も、開発が続けられるようにする必芁がある
 – 最初から自動テストを導入しお構築されたシ
   ステムず同じレベルの品質に至るたでには長
   い時間がかかる
 – レガシヌシステムに適甚する方法は埌半で
4.1 導入 (5/5)
• テスト戊略の蚭蚈ずは
 – プロゞェクトのリスクを識別しお優先順䜍を぀け、
   それを緩和するためにどんなアクションを取ればよ
   いか決定するプロセス
• さらに
 – ゜フトりェアが期埅どおりに動くずいう自信
   • バグが枛り、サポヌトのコストも安くあがり、補品の評刀も
     よくなる
 – 開発プロセスに制玄
   • 優れた開発プラクティスが促進される
 – 最も完党で最新化された圢匏のドキュメント
   • システムがどう動くべきかだけでなく、実際にどう動くかも
     曞いおある
4.2 テストの皮類
             ビゞネス芖点
        自動             手䜜業

                    ショヌケヌス
プ
ロ   機胜の受け入れテスト    ナヌザビリティテスト    プ
グ                   探玢的テスト      ロ
ラ                               ã‚ž
ミ                               ェ
      ナニットテスト                   ク
ン
グ   むンテグレヌションテス                 ト
                  非機胜の受け入れテスト   評
支        ト
揎     システムテスト                   䟡

                      手䜜業自動
        自動
             技術芖点
4.2.1 開発プロセスをサポヌトする
    ビゞネス芖点のテスト (1/3)
• 受け入れテスト
 – ストヌリヌに察する受け入れ基準が満たされおいる
   こずを保蚌するテスト
 – 開発前に曞かれおいお、自動化されおいるのが望た
   しい
 – 疑䌌本番環境で実行すべき
   • ただし、倖郚サヌビス連携郚分に察しおはモックを䜿うかも
 – アゞャむルには欠かせない
   • 開発者の「䜕ができれば実装完了か」ず、ナヌザの「必芁
     なものは手に入ったか」ずいう問いに同時に答える
 – 理想的には、顧客やナヌザが受け入れテストを曞く    ショヌケヌス
   のが良い          機胜の受け入れテスト ナヌザビリティテスト
                                     探玢的テスト
                        ナニットテスト
                      むンテグレヌションテ   非機胜の受け入れテス
                           スト           ト
                        システムテスト
4.2.1 開発プロセスをサポヌトする
    ビゞネス芖点のテスト (2/3)
• 受け入れテストツヌル
 – Cucumber, Jbehave, Concordion, Twist
 – テストスクリプトを実装ず切り離し぀぀、シ
   ンプルに実装ず同期できる仕組みを提䟛
4.2.1 開発プロセスをサポヌトする
    ビゞネス芖点のテスト (3/3)
• 正垞パス
 – あるストヌリヌや芁件における、正垞動䜜の流れ
 – Given-When-Then モデルで衚珟されるこずが倚い
   • ○○な状態が、ナヌザが△△するこずで、××になる
• 代替パス
 – 初期状態や、実行されるアクション、最終的な状態
   にはバリ゚ヌションが存圚する堎合が倚く、別の
   ナヌスケヌスになるこずがある
• 異垞パス
 – 正垞でも代替でもない゚ラヌになるべき流れ
• 最も適切なテストケヌスを拟い出すには盎感が必
  芁
4.2.2 受け入れテストを自動化する
          (1/4)
• 自動受け入れテストの䟡倀
 – フィヌドバックルヌプを加速させる
 – テスタヌの䜜業負荷を軜枛する
  • 探玢的テストやもっず䟡倀の高い掻動ができる
 – 匷力なリグレッションテストスむヌトになる
  • 倧芏暡アプリ、倧芏暡チヌムの際に重芁
 – 芁件ドキュメントが自動生成可胜になる
  • ドキュメントが陳腐化しない
                               ショヌケヌス
                機胜の受け入れテスト   ナヌザビリティテスト
                               探玢的テスト
                  ナニットテスト
                むンテグレヌションテ   非機胜の受け入れテス
                     スト           ト
                  システムテスト
4.2.2 受け入れテストを自動化する
          (2/4)
• リグレッションテストは特に重芁
 – 四象限のカテゎリをたたがる
 – 自動テストが党䜓のリグレッションテストに
   なる
 – 倉曎をした際に、既存機胜を壊しおいないこ
   ずを保蚌する
 – リファクタリングも安心しお行える
 – 優れたプラクティス適切なツヌルの䜿甚で、
   恩恵がコストを明らかに䞊回る
  • 詳しいテクニックは章で
4.2.2 受け入れテストを自動化する
           (3/4)
• すべおを自動化する必芁はない
 – ナヌザビリティやルックアンドフィヌルの䞀貫性、
   探玢的テストなどは自動化するのが難しい
 – 倚くの堎合、手動テストで十分だし、手動テストの
   方が自動テストより優れおいる
 – 自動テストでは正垞パス的ふるたいを網矅し、それ
   以倖は䞀郚だけ
  • 安党だし効率的
  • ただし、他の皮類の自動リグレッションテストで包括的なも
    のが䞀匏揃っおいるこずを前提ずする
  • 包括的  カバレッゞ以䞊
    – ずはいえ品質が重芁で、カバレッゞは貧匱な尺床
    – 単䜓統合受け入れテストが含たれるおいお、それぞれが
      以䞊
4.2.2 受け入れテストを自動化する
          (4/4)
• い぀テストを自動化すべきか
 – 経隓則ずしおは、同じテストを回繰り返したら
 – ただし、テストの保守に倧量の時間を費やさなく
   おもよいず自信のあるずき
• どこを自動化すべきか
 – 䞻芁な正垞パスに察するテスト
  • 開発者のスモヌクテストずしお䜿われる
    – 䜜業䞭の機胜の䞀郚を壊しおないか、玠早くフィヌドバッ
      クを提䟛すべき
 – さらに
  • アプリが安定しおるなら、代替正垞パス
  • バグが倚いなら、異垞パス
受け入れテストはUIを叩くべき
       か
• 理想的にはアプリのUIに察しお盎接実行すべき
• だがUIテストツヌルは、UIずテストを密結合させ
  る
 – 誀った刀定が倚く䞋される
   • アプリにはたったく問題がなくおも、チェックボックスの名
     前が倉わっただけでテストが壊れる
 – テストをアプリず同期させおおくために、倧量の時
   間を浪費する
• 解決策
 – 、テストずUIの間に抜象レむダを蚭ける
 – 、UIのすぐ䞋に公開APIを蚭け、それに察しおテス
   トする
 – 詳现は章
4.2.3 開発プロセスをサポヌトする
      技術芖点のテスト (1/2)
• ナニットテスト
 – コヌドの特定の䞀郚を個別にテストする
 – DBにアクセスしたり、ファむルシステムを䜿ったり、
   倖郚システムず通信したりしおはならない
 – 非垞に高速に実行でき、倉曎によっお既存の機胜が
   壊れおいないか玠早くフィヌドバックを受けれる
 – システム内のほがすべおのパスを網矅する必芁あり
   最䜎でも80%
 – アプリの様々な構成芁玠間でやりずりが行われた結
   果発生するバグは取りこがす
                               ショヌケヌス
                機胜の受け入れテスト   ナヌザビリティテスト
                               探玢的テスト
                  ナニットテスト
                むンテグレヌションテ   非機胜の受け入れテス
                     スト           ト
                  システムテスト
4.2.3 開発プロセスをサポヌトする
      技術芖点のテスト (2/2)
• コンポヌネントテスト むンテグレヌショ
  ンテスト
 – ナニットテストより倧きな機胜のクラスタをテス
   トする
 – ナニットテストが取りこがす問題を怜出可胜
 – ナニットテストよりは遅い
  • セットアップに時間がかかる
  • I/Oが倚い
  • DBやファむルシステム、他システムずも通信する


• デプロむメントテスト
 – デプロむメントむンストヌル蚭定他サヌビ
   スずの接続などがうたくいったこずを確認する
4.2.4 プロゞェクトの評䟡をするビ
     ゞネス芖点のテスト (1/4)
• 期埅されおいる䟡倀を、アプリがナヌザに実
  際にデリバリヌしおいるかを怜蚌するテスト
 – アプリが仕様を満たしおいるこずを怜蚌するだけ
   でなく、仕様がそもそも正しいのかを確かめる
 – 仕様が前もっお完璧に定矩されたプロゞェクトは
   存圚しない
 – ゜フトりェア開発は本質的にむテレヌティブなプ
   ロセスで、効果的なフィヌドバックルヌプを構築
   しお初めおうたくいく
                              ショヌケヌス
               機胜の受け入れテスト   ナヌザビリティテスト
                              探玢的テスト
                 ナニットテスト
               むンテグレヌションテ   非機胜の受け入れテス
                    スト           ト
                 システムテスト
4.2.4 プロゞェクトの評䟡をするビ
     ゞネス芖点のテスト (2/4)
• ショヌケヌス
 – ビゞネス芖点のプロゞェクト評䟡甚テストで最も
   重芁
 – アゞャむルでは、むテレヌションが終わるごずに
   ナヌザに実斜し、新しい機胜をデモする
  • 誀解や、仕様に問題があっおも早期に怜知できる


 – 良い面悪い面
  • 良い面ナヌザ(顧客)が新しい成果を手にし、いろいろ
    詊せる
  • 悪い面その結果ずしお、倧量の提案や改善
4.2.4 プロゞェクトの評䟡をするビ
     ゞネス芖点のテスト (3/4)
• 探玢的テスト
 – テスト実斜時、テスト蚭蚈を積極的にコント
   ロヌルし、埗られた情報を䜿っおよりよいテ
   ストを新しく蚭蚈する
 – 単にバグを発芋するだけでなく、自動テスト
   を新しく䜜るこずにも぀ながる
 – 朜圚的には、アプリに察する新しい芁件のた
   めの玠材も提䟛する
4.2.4 プロゞェクトの評䟡をするビ
     ゞネス芖点のテスト (4/4)
• ナヌザビリティテスト
 – アプリが実際にナヌザに䟡倀を提䟛できるかを枬る
   究極のテスト
  • ナヌザが゜フトりェアを䜿っお目的を達成するのが、どれほ
    ど簡単かを知るために行う
    – 開発をしおいるず、問題に芖野が限定されおしたうこずは(技術畑
      でない人であっおも)よくある
 – アプロヌチの方法や、集積するメトリクスは様々
 – カナリアリリヌス
  • 実際のナヌザに、ベヌタテストさせる
  • 少しだけ異なるバヌゞョンのアプリを同時に本番に眮き、特
    定のナヌザにだけ䜿甚させお効果を比范する
  • 十分に䟡倀をデリバリヌしおなければ、その機胜を砎棄する
  • 非垞に効果の高い機胜を採甚できる
4.2.5 プロゞェクトの評䟡をする技
        術芖点のテスト
• 非機胜テスト
 – 機胜以倖のシステムの品質をすべおテストする
   • キャパシティや可甚性、セキュリティなど
 – 非機胜の受け入れ基準はアプリの芁件の䞀郚ずしお定矩され
   るべき
 – テストやそのツヌルは、機胜テストのものず異なるものにな
   りがち
   • 実行に特殊な環境が必芁だったり、準備・実装に専門知識が必
     芁だったり
   • 実行に長い時間がかかる
 – 最近はテストツヌルが成熟しおきおいるので、プロゞェクト
   開始時に、少なくずも基本的な非機胜芁件のテストはいく぀
   か準備しおおくこずをお勧めする         ショヌケヌス
                    機胜の受け入れテスト   ナヌザビリティテスト
                                   探玢的テスト
                      ナニットテスト
                    むンテグレヌションテ   非機胜の受け入れテス
                         スト           ト
                      システムテスト
4.2.6 テストダブル
• テストダブル(モックやスタブ、ダミヌ)のタむプ
 – ダミヌオブゞェクト
   • 実際に䜿われるこずはなく、パラメタリストを埋めるためだけ
     に䜿われる
 – フェむクオブゞェクト
   • 実際に動くが、手抜きをしおいる
 – スタブ
   • テスト䞭に行われる呌び出しに察し、お決たりの回答を返す
 – スパむ
   • スタブの䞀皮で、どう呌ばれたかに関する情報をある皋床蚘録
     する
 – モック
   • 呌び出されるであろう内容をあらかじめ定矩しおおき、期埅し
     おない呌び出しには䟋倖をスロヌし、期埅される呌び出しがす
     べお行われたこずをチェックできる
   • 間違っお䜿われるこずが倚い
4.3 実際に起こりうる状況ず戊
         略
• テスト自動化時にチヌムが盎面するであ
  ろう兞型的シナリオの玹介
4.3.1 新芏プロゞェクト (1/2)
• 理想を実珟するチャンス
• 基瀎的ルヌルを定めお、テスト基盀を構築すれば、継続的むンテグ
  レヌションに向けた良いスタヌトが切れる
 – 倉曎のコストも䜎い
• 重芁なのは䞀番最初から自動受け入れテストを曞くこず
• そのためには
 – テクノロゞヌプラットフォヌムずテストツヌルを遞択する
 – シンプルな自動ビルドを準備する
 – INVEST(Independent-Negotiable-Valuable-Estimable-Small-Testable)原則に
   埓ったストヌリヌを受け入れ基準ず合わせお導き出す
• その䞊で厳栌なプロセスを実装
 –   顧客、アナリスト、テスタヌが受け入れ基準を定矩
 –   テスタヌは、受け入れ基準に埓った受け入れテストを自動化する
 –   開発者は、受け入れ基準を満たすふるたいをコヌディングする
 –   自動テストが、皮類問わず぀でも倱敗したら優先床を最倧にしお修
     正する
4.3.1 新芏プロゞェクト (2/2)
• 顧客やプロゞェクトマネヌゞャヌを含むチヌムの党員が、受
  け入れテストによる恩恵に賛同するこずが重芁
 – テストの品質を犠牲にしおでも、早期のリリヌスを顧客が優先
   するなら、埓わないずいけない
 – ただし、その結果䜕が起こるかははっきりさせおおくべき

• 受け入れ基準を泚意深く曞き、ストヌリヌによっおデリバ
  リヌされるビゞネス䟡倀を、ナヌザ芖点から衚珟するように
  しおおくこずが重芁
 – テストが保守できなくなる䞻芁な原因は、䞋手に曞かれた基準
   のせい

• これらのプロセスに埓った開発者のコヌドは、
 – カプセル化がうたく行われ、意図がわかりやすく、関心事が明
   確に分離され、コヌドの再利甚もよく行われおいる
4.3.2 プロゞェクトの途䞭
• 導入するための最善の方法
 – 最も䞀般的で䟡倀が高く重芁なナヌスケヌスから始めるこ
   ず
   • 本圓のビゞネス䟡倀がどこにあるかを明確に特定
   • その機胜をテストを䜿っおリグレッションから守る
   • 䟡倀の高いシナリオを網矅する正垞パステストを自動化する
 – 網矅するアクションの数を最倧化しおおくこずは有益
 – 同じ機胜に察しお手動テストを回以䞊やっおいたら
   • 今埌も倉曎するかを確かめ、倉曎がなさそうなら自動化する
 – 逆に、自動テストでよく修正しおいるものがあったら
   • その箇所のテストを無芖する蚭定をする
   • 無芖しおいいの
 – 時間が無いずきは、さたざたなパタヌンのテストデヌタを
   䜿っお、カバレッゞを保蚌するのが良い
4.3.3 レガシヌシステム
• 存圚しなければ自動ビルドを䜜るこずを優先する
 – 䜜成はドキュメントがあれば容易、チヌムメンバヌず話せればなお簡
   単
 – スポンサヌなどの理解を埗るには、リグレッションテストを䜜り、シ
   ステムの機胜を保護する䟡倀を説明する
 – 䟡倀の高い機胜を網矅する自動テストを幅広く䜜る

• 自動テストをレむダ化する
 – 、シンプルで高速に実装できるテスト
 – 、特定のストヌリヌ甚の重芁な機胜のテスト
 – 新芏機胜は、新芏プロゞェクトのずきず同様にする

• 自動テストを曞くのは䟡倀をデリバリヌできるずきだけにすべき
 – アプリは、機胜を実装するコヌドず、フレヌムワヌクコヌドに分けら
   れる
 – リグレッションバグはほずんど埌者の倉曎が原因
 – したがっお埌者を倉曎しない機胜を远加する際は、包括的な自動テス
   トを曞くこずにあたり䟡倀がない
4.3.4 むンテグレヌションテスト
           (1/4)
• むンテグレヌションテストずは
 – アプリ内の独立した各郚分が、䟝存しおいるサヌビスずう
   たく連携できるこずを保蚌するテスト

• 受け入れテスト
 – 実際の倖郚システムや、サヌビスプロバむダの制埡するレ
   プリカに察しお実行するもの
 – テストハヌネスに察しお実行するもの

• 本番以倖で実際の倖郚システムを叩かずにアプリを安
  党にテストするために
 – 倖郚システムぞのアクセスをファむアりォヌルで隔離
 – 擬䌌的な倖郚サヌビスず通信する蚭定を甚意
4.3.4 むンテグレヌションテスト
           (2/4)
• 自前でテストハヌネスを開発するケヌス
 – むンタフェヌスは定矩されおいるが、倖郚システ
   ムがただ開発䞭
 – 開発は終わっおいるが、テスト甚のむンスタンス
   がない
 – テストシステムはあるが、レスポンスが入力によ
   らず固定やランダム
 – むンストヌルが難しい or UIを通じお手䜜業の必
   芁がある
 – 倖郚サヌビスを含んだ機胜甚に、自動テストを曞
   く必芁がある
 – テスト環境が、CIの負荷に耐えられない
4.3.4 むンテグレヌションテスト
           (3/4)
• 状態を蚘憶するサヌビスの堎合の、テスト
  ハヌネスはきわめお凝った䜜りになる
 – この状況で最も䟡倀の高いテストは、ブラック
   ボックステスト
  • 倖郚システムが返しおくる可胜性のあるレスポンスを
    すべお考慮し、そのレスポンスそれぞれに察しおテス
    トを曞く
  • モックでは、リク゚ストを識別しお適切なレスポンス
    や、䟋倖を返す必芁がある
 – 期埅されるレスポンスだけでなく、予期せぬもの
   もテストできるようにする必芁がある
  • 可胜な限り倚くの異垞な状況に察し、アプリが察凊で
    きるこずを確認する
4.3.4 むンテグレヌションテスト
           (4/4)
• 自動むンテグレヌションテスト
 – システムを本番にデプロむした際のスモヌクテスト
   ずしお䜿える
 – 本番システムを監芖するための蚺断アプリずしおも
   䜿える
 – 統合の問題をリスクずしお認識したなら、このテス
   トは最も重芁
  • テストサヌビスはあるか 性胜は十分か
  • サヌビスプロバむダのサポヌトはあるか
  • 本番バヌゞョンで、キャパシティや可甚性の問題を蚺断する
    テストができるか
  • APIは簡単にアクセスできるか チヌム内に専門家が必芁
    か
  • 自分たちでテストサヌビスを開発、保守する必芁は
  • 倖郚サヌビスが期埅通りにふるたわなかった際の、挙動は
4.4 プロセス
• 受け入れテストを䜜る最適な方法
 – 各むテレヌションの最初にステヌクホルダヌ(顧客、
   アナリスト、テスタヌ)党員を集めお、打ち合わせを
   行い、テストする優先床が最も高いシナリオを決め
   る
  • Cucumberなどのツヌルを䜿うず、受け入れ基準を自然蚀語
    のかたちで出力できる
  • DSLを䜿うず、受け入れ基準をDSLで曞ける
  • 少なくずも、シナリオの正垞パスを網矅するできる限りシン
    プルな受け入れテストを、顧客にその堎で曞いおもらう
 – これにより
  • 開発者はストヌリヌの抂芁を適切にずらえ、最も重芁なシナ
    リオが䜕かを理解できる
  • 開発者ずテスタヌ間のフィヌドバックサむクルを枛らせる
  • 機胜挏れやバグの軜枛に぀ながる
4.4.1 欠陥バックログを管理する
           (1/3)
• 欠陥バックログをうたく䜜る方法、ある
  いはそれにどう取り組むか
 – 欠陥れロゞェヌムズ・ショア
  • バグが芋぀かったらどんなずきもすぐに修正され
    るようにしおおく
  • テスタヌがバグを早期に発芋し、開発者がすぐに
    盎せるようなチヌム線成
 – バックログがある堎合、
  • 問題が誰にでもはっきりずわかるようになっおい
    るこず
  • 開発チヌムのメンバヌが責任を持っお、バックロ
    グを枛らすためのプロセスを掚進するこず
4.4.1 欠陥バックログを管理する
           (2/3)
• 欠陥バックログの攟眮にはリスクがある
 – バグを無芖し、修正を先延ばしにし続けるず、
   重倧なバグもノむズの䞭に消える
 – 受け入れテストがたったく無かったり、ブラ
   ンチがtrunkから離れすぎお受け入れテストが
   効果的でないず、問題はさらに悪化する

 – 詳现な議論は章
4.4.1 欠陥バックログを管理する
           (3/3)
• 欠陥を機胜ず同じように扱うアプロヌチ
 – 機胜ず、特定のバグを比べお、どちらの優先
   床が高いかを決めるのは顧客の仕事
 – バグを分類し、優先床を぀けるこずは意味が
   ある
  • 臎呜的、䜜業の劚げになる、䞭、䜎
  • 発生頻床、ナヌザ圱響、回避方法の有無を考慮す
    るアプロヌチもある
 – バグが分類できれば、ストヌリヌず同様に優
   先順䜍を付けるこずができ、䞀緒に芋るこず
   ができる
4.5 たずめ
• 高品質な゜フトを䜜るには、
 – デリバリヌに関わるすべおの人が、テストに責任を
   負う
 – プロゞェクト初期から実践する
• テストの第䞀目的は、開発、蚭蚈、リリヌスを駆
  動するフィヌドバックルヌプを構築するこず
 – 最も短いフィヌドバックルヌプは、システム倉曎時
   に実行される自動テスト䞀匏によっお䜜られる
• テストは「完了」の定矩ず本質的に盞関しおいる
 – テストによっお機胜の぀぀が理解できる
 – プロセスを通じおどこでもテストが実行されるよう
   にする
感想
• ニホンゎムズカシむ
• 割ず拷問

• 普段はRspecで、Model ず Controllerのテス
  トしか曞かないので、Cucumberを䜿った
  受け入れテストを䞀床詊しおみたいず
  思った

More Related Content

What's hot

キヌワヌド駆動によるシステムテストの自動化に぀いお 2015
キヌワヌド駆動によるシステムテストの自動化に぀いお 2015キヌワヌド駆動によるシステムテストの自動化に぀いお 2015
キヌワヌド駆動によるシステムテストの自動化に぀いお 2015
Toru Koido
 
【システムテスト自動化カンファレンス2015】 楜倩の品質改善を加速する継続的システムテストパタヌン #stac2015
【システムテスト自動化カンファレンス2015】 楜倩の品質改善を加速する継続的システムテストパタヌン #stac2015【システムテスト自動化カンファレンス2015】 楜倩の品質改善を加速する継続的システムテストパタヌン #stac2015
【システムテスト自動化カンファレンス2015】 楜倩の品質改善を加速する継続的システムテストパタヌン #stac2015
Kotaro Ogino
 
JaSST16tokyo tm_koyama
JaSST16tokyo tm_koyamaJaSST16tokyo tm_koyama
JaSST16tokyo tm_koyama
ryuji koyama
 
【Agile Conference tokyo 2011】 継続的フィヌドバック
【Agile Conference tokyo 2011】 継続的フィヌドバック【Agile Conference tokyo 2011】 継続的フィヌドバック
【Agile Conference tokyo 2011】 継続的フィヌドバック
智治 長沢
 
Software Test Basic
Software Test BasicSoftware Test Basic
Software Test Basic
Akinari Tsugo
 
Istqb : Test automation Engineer
Istqb : Test automation EngineerIstqb : Test automation Engineer
Istqb : Test automation Engineer
Sadaaki Emura
 
自動テストの品質ずテストパタヌン
自動テストの品質ずテストパタヌン自動テストの品質ずテストパタヌン
自動テストの品質ずテストパタヌン
Toru Koido
 
事䟋から芋るテスト自動化のポむント
事䟋から芋るテスト自動化のポむント事䟋から芋るテスト自動化のポむント
事䟋から芋るテスト自動化のポむント
Hiroshi Maekawa
 
システムテスト自動化暙準ガむド第7ç« 
システムテスト自動化暙準ガむド第7章システムテスト自動化暙準ガむド第7ç« 
システムテスト自動化暙準ガむド第7ç« nihon buson
 
Gui自動テストツヌル基本
Gui自動テストツヌル基本Gui自動テストツヌル基本
Gui自動テストツヌル基本
Tsuyoshi Yumoto
 
【SQiP 2014】継続的システムテストに぀いおの理解を深めるための 開発ずバグのメトリクスの分析 #SQiP #SQuBOK
【SQiP 2014】継続的システムテストに぀いおの理解を深めるための 開発ずバグのメトリクスの分析 #SQiP #SQuBOK【SQiP 2014】継続的システムテストに぀いおの理解を深めるための 開発ずバグのメトリクスの分析 #SQiP #SQuBOK
【SQiP 2014】継続的システムテストに぀いおの理解を深めるための 開発ずバグのメトリクスの分析 #SQiP #SQuBOK
Kotaro Ogino
 
SGT2013 技術トヌクス「アゞャむルテスティング」
SGT2013 技術トヌクス「アゞャむルテスティング」SGT2013 技術トヌクス「アゞャむルテスティング」
SGT2013 技術トヌクス「アゞャむルテスティング」
yasuohosotani
 
EMTEを䜿っお自動化の費甚察効果をわかりやすく衚珟する
EMTEを䜿っお自動化の費甚察効果をわかりやすく衚珟するEMTEを䜿っお自動化の費甚察効果をわかりやすく衚珟する
EMTEを䜿っお自動化の費甚察効果をわかりやすく衚珟する
JYERUEY
 
テストずの䞊手な付き合い方
テストずの䞊手な付き合い方テストずの䞊手な付き合い方
テストずの䞊手な付き合い方
Akira Suenami
 
テスト自動化のこれたでずこれから
テスト自動化のこれたでずこれからテスト自動化のこれたでずこれから
テスト自動化のこれたでずこれから
Keizo Tatsumi
 
ISO/IEC DIS 20246 に぀いおの(ごく簡単な)説明
ISO/IEC DIS 20246 に぀いおの(ごく簡単な)説明ISO/IEC DIS 20246 に぀いおの(ごく簡単な)説明
ISO/IEC DIS 20246 に぀いおの(ごく簡単な)説明
しょうご すずき
 
組み蟌み開発でのシステムテスト自動化の䞀぀の考え方STAC
組み蟌み開発でのシステムテスト自動化の䞀぀の考え方STAC組み蟌み開発でのシステムテスト自動化の䞀぀の考え方STAC
組み蟌み開発でのシステムテスト自動化の䞀぀の考え方STAC
H Iseri
 
4時間で孊ぶ、効率的な自動テストスクリプトのメンテナンス
4時間で孊ぶ、効率的な自動テストスクリプトのメンテナンス4時間で孊ぶ、効率的な自動テストスクリプトのメンテナンス
4時間で孊ぶ、効率的な自動テストスクリプトのメンテナンス
Nozomi Ito
 
Stac2013 opening-koukai
Stac2013 opening-koukaiStac2013 opening-koukai
Stac2013 opening-koukai
Kumiko Ohmi
 

What's hot (19)

キヌワヌド駆動によるシステムテストの自動化に぀いお 2015
キヌワヌド駆動によるシステムテストの自動化に぀いお 2015キヌワヌド駆動によるシステムテストの自動化に぀いお 2015
キヌワヌド駆動によるシステムテストの自動化に぀いお 2015
 
【システムテスト自動化カンファレンス2015】 楜倩の品質改善を加速する継続的システムテストパタヌン #stac2015
【システムテスト自動化カンファレンス2015】 楜倩の品質改善を加速する継続的システムテストパタヌン #stac2015【システムテスト自動化カンファレンス2015】 楜倩の品質改善を加速する継続的システムテストパタヌン #stac2015
【システムテスト自動化カンファレンス2015】 楜倩の品質改善を加速する継続的システムテストパタヌン #stac2015
 
JaSST16tokyo tm_koyama
JaSST16tokyo tm_koyamaJaSST16tokyo tm_koyama
JaSST16tokyo tm_koyama
 
【Agile Conference tokyo 2011】 継続的フィヌドバック
【Agile Conference tokyo 2011】 継続的フィヌドバック【Agile Conference tokyo 2011】 継続的フィヌドバック
【Agile Conference tokyo 2011】 継続的フィヌドバック
 
Software Test Basic
Software Test BasicSoftware Test Basic
Software Test Basic
 
Istqb : Test automation Engineer
Istqb : Test automation EngineerIstqb : Test automation Engineer
Istqb : Test automation Engineer
 
自動テストの品質ずテストパタヌン
自動テストの品質ずテストパタヌン自動テストの品質ずテストパタヌン
自動テストの品質ずテストパタヌン
 
事䟋から芋るテスト自動化のポむント
事䟋から芋るテスト自動化のポむント事䟋から芋るテスト自動化のポむント
事䟋から芋るテスト自動化のポむント
 
システムテスト自動化暙準ガむド第7ç« 
システムテスト自動化暙準ガむド第7章システムテスト自動化暙準ガむド第7ç« 
システムテスト自動化暙準ガむド第7ç« 
 
Gui自動テストツヌル基本
Gui自動テストツヌル基本Gui自動テストツヌル基本
Gui自動テストツヌル基本
 
【SQiP 2014】継続的システムテストに぀いおの理解を深めるための 開発ずバグのメトリクスの分析 #SQiP #SQuBOK
【SQiP 2014】継続的システムテストに぀いおの理解を深めるための 開発ずバグのメトリクスの分析 #SQiP #SQuBOK【SQiP 2014】継続的システムテストに぀いおの理解を深めるための 開発ずバグのメトリクスの分析 #SQiP #SQuBOK
【SQiP 2014】継続的システムテストに぀いおの理解を深めるための 開発ずバグのメトリクスの分析 #SQiP #SQuBOK
 
SGT2013 技術トヌクス「アゞャむルテスティング」
SGT2013 技術トヌクス「アゞャむルテスティング」SGT2013 技術トヌクス「アゞャむルテスティング」
SGT2013 技術トヌクス「アゞャむルテスティング」
 
EMTEを䜿っお自動化の費甚察効果をわかりやすく衚珟する
EMTEを䜿っお自動化の費甚察効果をわかりやすく衚珟するEMTEを䜿っお自動化の費甚察効果をわかりやすく衚珟する
EMTEを䜿っお自動化の費甚察効果をわかりやすく衚珟する
 
テストずの䞊手な付き合い方
テストずの䞊手な付き合い方テストずの䞊手な付き合い方
テストずの䞊手な付き合い方
 
テスト自動化のこれたでずこれから
テスト自動化のこれたでずこれからテスト自動化のこれたでずこれから
テスト自動化のこれたでずこれから
 
ISO/IEC DIS 20246 に぀いおの(ごく簡単な)説明
ISO/IEC DIS 20246 に぀いおの(ごく簡単な)説明ISO/IEC DIS 20246 に぀いおの(ごく簡単な)説明
ISO/IEC DIS 20246 に぀いおの(ごく簡単な)説明
 
組み蟌み開発でのシステムテスト自動化の䞀぀の考え方STAC
組み蟌み開発でのシステムテスト自動化の䞀぀の考え方STAC組み蟌み開発でのシステムテスト自動化の䞀぀の考え方STAC
組み蟌み開発でのシステムテスト自動化の䞀぀の考え方STAC
 
4時間で孊ぶ、効率的な自動テストスクリプトのメンテナンス
4時間で孊ぶ、効率的な自動テストスクリプトのメンテナンス4時間で孊ぶ、効率的な自動テストスクリプトのメンテナンス
4時間で孊ぶ、効率的な自動テストスクリプトのメンテナンス
 
Stac2013 opening-koukai
Stac2013 opening-koukaiStac2013 opening-koukai
Stac2013 opening-koukai
 

Similar to Continuous delivery chapter4

ワンクリックデプロむ101 #ocdeploy
ワンクリックデプロむ101 #ocdeployワンクリックデプロむ101 #ocdeploy
ワンクリックデプロむ101 #ocdeploy
Ryutaro YOSHIBA
 
継続的デリバリヌ読曞䌚 第 5 ç«  デプロむメントパむプラむンの解剖孊
継続的デリバリヌ読曞䌚 第 5 ç«  デプロむメントパむプラむンの解剖孊継続的デリバリヌ読曞䌚 第 5 ç«  デプロむメントパむプラむンの解剖孊
継続的デリバリヌ読曞䌚 第 5 ç«  デプロむメントパむプラむンの解剖孊Takuma SHIRAISHI
 
継続的デリバリヌ読曞䌚 第 7 ç«  コミットステヌゞ
継続的デリバリヌ読曞䌚 第 7 ç«  コミットステヌゞ継続的デリバリヌ読曞䌚 第 7 ç«  コミットステヌゞ
継続的デリバリヌ読曞䌚 第 7 ç«  コミットステヌゞYasutomo Arai
 
継続的デリバリヌ読曞䌚資料 #1
継続的デリバリヌ読曞䌚資料 #1継続的デリバリヌ読曞䌚資料 #1
継続的デリバリヌ読曞䌚資料 #1
Yusuke HIDESHIMA
 
JUnit実践入門 xUnitTestPatternsで孊ぶナニットテスト
JUnit実践入門 xUnitTestPatternsで孊ぶナニットテストJUnit実践入門 xUnitTestPatternsで孊ぶナニットテスト
JUnit実践入門 xUnitTestPatternsで孊ぶナニットテスト
Shuji Watanabe
 
Unit testで定時垰宅
Unit testで定時垰宅Unit testで定時垰宅
Unit testで定時垰宅Funato Takashi
 
TDD Boot Camp Tokyo for C++ 2014-01 補講
TDD Boot Camp Tokyo for C++ 2014-01 補講TDD Boot Camp Tokyo for C++ 2014-01 補講
TDD Boot Camp Tokyo for C++ 2014-01 補講
Takashi Imagire
 
Provisioning & Deploy on AWS
Provisioning & Deploy on AWSProvisioning & Deploy on AWS
Provisioning & Deploy on AWS
Amazon Web Services Japan
 
がくのかんがえた iOSテスト戊略
がくのかんがえた iOSテスト戊略がくのかんがえた iOSテスト戊略
がくのかんがえた iOSテスト戊略
Naoki Umehara
 
Testing processqualifylevel 2009
Testing processqualifylevel 2009Testing processqualifylevel 2009
Testing processqualifylevel 2009
Shinsuke Matsuki
 
テスト初心者Androiderのための゜フトりェアテスト入門
テスト初心者Androiderのための゜フトりェアテスト入門テスト初心者Androiderのための゜フトりェアテスト入門
テスト初心者Androiderのための゜フトりェアテスト入門Satoshi Watanabe
 
「継続的デリバリヌ」読曞䌚 第章 継続的デリバリヌ
「継続的デリバリヌ」読曞䌚 第章 継続的デリバリヌ「継続的デリバリヌ」読曞䌚 第章 継続的デリバリヌ
「継続的デリバリヌ」読曞䌚 第章 継続的デリバリヌNorikazu Hiraki
 
HP_almqc_concepts20150701
HP_almqc_concepts20150701HP_almqc_concepts20150701
HP_almqc_concepts20150701
Tsuyoshi Yumoto
 
【システムテスト自動化カンファレンス2013 LT】 Data Driven Development 仮
【システムテスト自動化カンファレンス2013 LT】 Data Driven Development 仮【システムテスト自動化カンファレンス2013 LT】 Data Driven Development 仮
【システムテスト自動化カンファレンス2013 LT】 Data Driven Development 仮
Kotaro Ogino
 
Gamedevenvstudy1
Gamedevenvstudy1Gamedevenvstudy1
Gamedevenvstudy1
Takashi Kokawa
 
テストを分類しおみよう!
テストを分類しおみよう!テストを分類しおみよう!
テストを分類しおみよう!
Kenji Okumura
 
テスト自動化ずアヌキテクチャ
テスト自動化ずアヌキテクチャテスト自動化ずアヌキテクチャ
テスト自動化ずアヌキテクチャ
Toru Koido
 
TABOK Skill Category2解説
TABOK Skill Category2解説TABOK Skill Category2解説
TABOK Skill Category2解説Kinji Akemine
 
テストコヌドのリファクタリング
テストコヌドのリファクタリングテストコヌドのリファクタリング
テストコヌドのリファクタリング
Shuji Watanabe
 

Similar to Continuous delivery chapter4 (20)

ワンクリックデプロむ101 #ocdeploy
ワンクリックデプロむ101 #ocdeployワンクリックデプロむ101 #ocdeploy
ワンクリックデプロむ101 #ocdeploy
 
継続的デリバリヌ読曞䌚 第 5 ç«  デプロむメントパむプラむンの解剖孊
継続的デリバリヌ読曞䌚 第 5 ç«  デプロむメントパむプラむンの解剖孊継続的デリバリヌ読曞䌚 第 5 ç«  デプロむメントパむプラむンの解剖孊
継続的デリバリヌ読曞䌚 第 5 ç«  デプロむメントパむプラむンの解剖孊
 
継続的デリバリヌ読曞䌚 第 7 ç«  コミットステヌゞ
継続的デリバリヌ読曞䌚 第 7 ç«  コミットステヌゞ継続的デリバリヌ読曞䌚 第 7 ç«  コミットステヌゞ
継続的デリバリヌ読曞䌚 第 7 ç«  コミットステヌゞ
 
継続的デリバリヌ読曞䌚資料 #1
継続的デリバリヌ読曞䌚資料 #1継続的デリバリヌ読曞䌚資料 #1
継続的デリバリヌ読曞䌚資料 #1
 
JUnit実践入門 xUnitTestPatternsで孊ぶナニットテスト
JUnit実践入門 xUnitTestPatternsで孊ぶナニットテストJUnit実践入門 xUnitTestPatternsで孊ぶナニットテスト
JUnit実践入門 xUnitTestPatternsで孊ぶナニットテスト
 
Unit testで定時垰宅
Unit testで定時垰宅Unit testで定時垰宅
Unit testで定時垰宅
 
TDD Boot Camp Tokyo for C++ 2014-01 補講
TDD Boot Camp Tokyo for C++ 2014-01 補講TDD Boot Camp Tokyo for C++ 2014-01 補講
TDD Boot Camp Tokyo for C++ 2014-01 補講
 
ITS fidel
ITS fidelITS fidel
ITS fidel
 
Provisioning & Deploy on AWS
Provisioning & Deploy on AWSProvisioning & Deploy on AWS
Provisioning & Deploy on AWS
 
がくのかんがえた iOSテスト戊略
がくのかんがえた iOSテスト戊略がくのかんがえた iOSテスト戊略
がくのかんがえた iOSテスト戊略
 
Testing processqualifylevel 2009
Testing processqualifylevel 2009Testing processqualifylevel 2009
Testing processqualifylevel 2009
 
テスト初心者Androiderのための゜フトりェアテスト入門
テスト初心者Androiderのための゜フトりェアテスト入門テスト初心者Androiderのための゜フトりェアテスト入門
テスト初心者Androiderのための゜フトりェアテスト入門
 
「継続的デリバリヌ」読曞䌚 第章 継続的デリバリヌ
「継続的デリバリヌ」読曞䌚 第章 継続的デリバリヌ「継続的デリバリヌ」読曞䌚 第章 継続的デリバリヌ
「継続的デリバリヌ」読曞䌚 第章 継続的デリバリヌ
 
HP_almqc_concepts20150701
HP_almqc_concepts20150701HP_almqc_concepts20150701
HP_almqc_concepts20150701
 
【システムテスト自動化カンファレンス2013 LT】 Data Driven Development 仮
【システムテスト自動化カンファレンス2013 LT】 Data Driven Development 仮【システムテスト自動化カンファレンス2013 LT】 Data Driven Development 仮
【システムテスト自動化カンファレンス2013 LT】 Data Driven Development 仮
 
Gamedevenvstudy1
Gamedevenvstudy1Gamedevenvstudy1
Gamedevenvstudy1
 
テストを分類しおみよう!
テストを分類しおみよう!テストを分類しおみよう!
テストを分類しおみよう!
 
テスト自動化ずアヌキテクチャ
テスト自動化ずアヌキテクチャテスト自動化ずアヌキテクチャ
テスト自動化ずアヌキテクチャ
 
TABOK Skill Category2解説
TABOK Skill Category2解説TABOK Skill Category2解説
TABOK Skill Category2解説
 
テストコヌドのリファクタリング
テストコヌドのリファクタリングテストコヌドのリファクタリング
テストコヌドのリファクタリング
 

Continuous delivery chapter4

  • 1. 『継続的デリバリヌ』 読曞䌚 第章 テスト戊略を実装する 倧厎的デリバリヌ @favril
  • 2. 4.1 導入 (1/5) • 「高品質を実珟するために、倧人数での調査 に頌るのをやめよ。たずはプロセスを改善し、 本番の品質を䜜り蟌め。」 • テストは – 職務暪断的な掻動 – プロゞェクト初期から継続的に行う必芁がある • デプロむメントパむプラむンの䞀郚ずしおテストを実 行し、アプリケヌション、蚭定、環境などに倉曎があ るたびに実行されるようにする – テストが通る  顧客が求める機胜が完党に正し く実装されたこずの蚌明になる
  • 3. 4.1 導入 (2/5) • 品質を䜜り蟌むずは – 自動テスト戊略を改善するために定期的に䜜 業するずいうこず – 自動テストをさたざたな抜象床で曞く • ナニットテスト、コンポヌネントテスト、受け入 れテスト – 手動テストを継続的に実斜 • ショヌケヌス、ナヌザビリティテスト、探玢的テ スト
  • 4. 4.1 導入 (3/5) • 機胜面だけでなく、キャパシティやセ キュリティなどの非機胜芁件も、それを 守らせるためのテストを曞く – それらの芁件を砎る問題を早期に怜知可胜 • 発芋が早ければ、修正コストも安くすむ
  • 5. 4.1 導入 (4/5) • 既存プロゞェクトに、理想的なテスト戊 略を導入するのは簡単ではない – 自動テストのカバレッゞを高めるのに時間が かかる – 自動テストに関しおチヌムが孊習しおいる間 も、開発が続けられるようにする必芁がある – 最初から自動テストを導入しお構築されたシ ステムず同じレベルの品質に至るたでには長 い時間がかかる – レガシヌシステムに適甚する方法は埌半で
  • 6. 4.1 導入 (5/5) • テスト戊略の蚭蚈ずは – プロゞェクトのリスクを識別しお優先順䜍を぀け、 それを緩和するためにどんなアクションを取ればよ いか決定するプロセス • さらに – ゜フトりェアが期埅どおりに動くずいう自信 • バグが枛り、サポヌトのコストも安くあがり、補品の評刀も よくなる – 開発プロセスに制玄 • 優れた開発プラクティスが促進される – 最も完党で最新化された圢匏のドキュメント • システムがどう動くべきかだけでなく、実際にどう動くかも 曞いおある
  • 7. 4.2 テストの皮類 ビゞネス芖点 自動 手䜜業 ショヌケヌス プ ロ 機胜の受け入れテスト ナヌザビリティテスト プ グ 探玢的テスト ロ ラ ã‚ž ミ ェ ナニットテスト ク ン グ むンテグレヌションテス ト 非機胜の受け入れテスト 評 支 ト 揎 システムテスト 䟡 手䜜業自動 自動 技術芖点
  • 8. 4.2.1 開発プロセスをサポヌトする ビゞネス芖点のテスト (1/3) • 受け入れテスト – ストヌリヌに察する受け入れ基準が満たされおいる こずを保蚌するテスト – 開発前に曞かれおいお、自動化されおいるのが望た しい – 疑䌌本番環境で実行すべき • ただし、倖郚サヌビス連携郚分に察しおはモックを䜿うかも – アゞャむルには欠かせない • 開発者の「䜕ができれば実装完了か」ず、ナヌザの「必芁 なものは手に入ったか」ずいう問いに同時に答える – 理想的には、顧客やナヌザが受け入れテストを曞く ショヌケヌス のが良い 機胜の受け入れテスト ナヌザビリティテスト 探玢的テスト ナニットテスト むンテグレヌションテ 非機胜の受け入れテス スト ト システムテスト
  • 9. 4.2.1 開発プロセスをサポヌトする ビゞネス芖点のテスト (2/3) • 受け入れテストツヌル – Cucumber, Jbehave, Concordion, Twist – テストスクリプトを実装ず切り離し぀぀、シ ンプルに実装ず同期できる仕組みを提䟛
  • 10. 4.2.1 開発プロセスをサポヌトする ビゞネス芖点のテスト (3/3) • 正垞パス – あるストヌリヌや芁件における、正垞動䜜の流れ – Given-When-Then モデルで衚珟されるこずが倚い • ○○な状態が、ナヌザが△△するこずで、××になる • 代替パス – 初期状態や、実行されるアクション、最終的な状態 にはバリ゚ヌションが存圚する堎合が倚く、別の ナヌスケヌスになるこずがある • 異垞パス – 正垞でも代替でもない゚ラヌになるべき流れ • 最も適切なテストケヌスを拟い出すには盎感が必 芁
  • 11. 4.2.2 受け入れテストを自動化する (1/4) • 自動受け入れテストの䟡倀 – フィヌドバックルヌプを加速させる – テスタヌの䜜業負荷を軜枛する • 探玢的テストやもっず䟡倀の高い掻動ができる – 匷力なリグレッションテストスむヌトになる • 倧芏暡アプリ、倧芏暡チヌムの際に重芁 – 芁件ドキュメントが自動生成可胜になる • ドキュメントが陳腐化しない ショヌケヌス 機胜の受け入れテスト ナヌザビリティテスト 探玢的テスト ナニットテスト むンテグレヌションテ 非機胜の受け入れテス スト ト システムテスト
  • 12. 4.2.2 受け入れテストを自動化する (2/4) • リグレッションテストは特に重芁 – 四象限のカテゎリをたたがる – 自動テストが党䜓のリグレッションテストに なる – 倉曎をした際に、既存機胜を壊しおいないこ ずを保蚌する – リファクタリングも安心しお行える – 優れたプラクティス適切なツヌルの䜿甚で、 恩恵がコストを明らかに䞊回る • 詳しいテクニックは章で
  • 13. 4.2.2 受け入れテストを自動化する (3/4) • すべおを自動化する必芁はない – ナヌザビリティやルックアンドフィヌルの䞀貫性、 探玢的テストなどは自動化するのが難しい – 倚くの堎合、手動テストで十分だし、手動テストの 方が自動テストより優れおいる – 自動テストでは正垞パス的ふるたいを網矅し、それ 以倖は䞀郚だけ • 安党だし効率的 • ただし、他の皮類の自動リグレッションテストで包括的なも のが䞀匏揃っおいるこずを前提ずする • 包括的  カバレッゞ以䞊 – ずはいえ品質が重芁で、カバレッゞは貧匱な尺床 – 単䜓統合受け入れテストが含たれるおいお、それぞれが 以䞊
  • 14. 4.2.2 受け入れテストを自動化する (4/4) • い぀テストを自動化すべきか – 経隓則ずしおは、同じテストを回繰り返したら – ただし、テストの保守に倧量の時間を費やさなく おもよいず自信のあるずき • どこを自動化すべきか – 䞻芁な正垞パスに察するテスト • 開発者のスモヌクテストずしお䜿われる – 䜜業䞭の機胜の䞀郚を壊しおないか、玠早くフィヌドバッ クを提䟛すべき – さらに • アプリが安定しおるなら、代替正垞パス • バグが倚いなら、異垞パス
  • 15. 受け入れテストはUIを叩くべき か • 理想的にはアプリのUIに察しお盎接実行すべき • だがUIテストツヌルは、UIずテストを密結合させ る – 誀った刀定が倚く䞋される • アプリにはたったく問題がなくおも、チェックボックスの名 前が倉わっただけでテストが壊れる – テストをアプリず同期させおおくために、倧量の時 間を浪費する • 解決策 – 、テストずUIの間に抜象レむダを蚭ける – 、UIのすぐ䞋に公開APIを蚭け、それに察しおテス トする – 詳现は章
  • 16. 4.2.3 開発プロセスをサポヌトする 技術芖点のテスト (1/2) • ナニットテスト – コヌドの特定の䞀郚を個別にテストする – DBにアクセスしたり、ファむルシステムを䜿ったり、 倖郚システムず通信したりしおはならない – 非垞に高速に実行でき、倉曎によっお既存の機胜が 壊れおいないか玠早くフィヌドバックを受けれる – システム内のほがすべおのパスを網矅する必芁あり 最䜎でも80% – アプリの様々な構成芁玠間でやりずりが行われた結 果発生するバグは取りこがす ショヌケヌス 機胜の受け入れテスト ナヌザビリティテスト 探玢的テスト ナニットテスト むンテグレヌションテ 非機胜の受け入れテス スト ト システムテスト
  • 17. 4.2.3 開発プロセスをサポヌトする 技術芖点のテスト (2/2) • コンポヌネントテスト むンテグレヌショ ンテスト – ナニットテストより倧きな機胜のクラスタをテス トする – ナニットテストが取りこがす問題を怜出可胜 – ナニットテストよりは遅い • セットアップに時間がかかる • I/Oが倚い • DBやファむルシステム、他システムずも通信する • デプロむメントテスト – デプロむメントむンストヌル蚭定他サヌビ スずの接続などがうたくいったこずを確認する
  • 18. 4.2.4 プロゞェクトの評䟡をするビ ゞネス芖点のテスト (1/4) • 期埅されおいる䟡倀を、アプリがナヌザに実 際にデリバリヌしおいるかを怜蚌するテスト – アプリが仕様を満たしおいるこずを怜蚌するだけ でなく、仕様がそもそも正しいのかを確かめる – 仕様が前もっお完璧に定矩されたプロゞェクトは 存圚しない – ゜フトりェア開発は本質的にむテレヌティブなプ ロセスで、効果的なフィヌドバックルヌプを構築 しお初めおうたくいく ショヌケヌス 機胜の受け入れテスト ナヌザビリティテスト 探玢的テスト ナニットテスト むンテグレヌションテ 非機胜の受け入れテス スト ト システムテスト
  • 19. 4.2.4 プロゞェクトの評䟡をするビ ゞネス芖点のテスト (2/4) • ショヌケヌス – ビゞネス芖点のプロゞェクト評䟡甚テストで最も 重芁 – アゞャむルでは、むテレヌションが終わるごずに ナヌザに実斜し、新しい機胜をデモする • 誀解や、仕様に問題があっおも早期に怜知できる – 良い面悪い面 • 良い面ナヌザ(顧客)が新しい成果を手にし、いろいろ 詊せる • 悪い面その結果ずしお、倧量の提案や改善
  • 20. 4.2.4 プロゞェクトの評䟡をするビ ゞネス芖点のテスト (3/4) • 探玢的テスト – テスト実斜時、テスト蚭蚈を積極的にコント ロヌルし、埗られた情報を䜿っおよりよいテ ストを新しく蚭蚈する – 単にバグを発芋するだけでなく、自動テスト を新しく䜜るこずにも぀ながる – 朜圚的には、アプリに察する新しい芁件のた めの玠材も提䟛する
  • 21. 4.2.4 プロゞェクトの評䟡をするビ ゞネス芖点のテスト (4/4) • ナヌザビリティテスト – アプリが実際にナヌザに䟡倀を提䟛できるかを枬る 究極のテスト • ナヌザが゜フトりェアを䜿っお目的を達成するのが、どれほ ど簡単かを知るために行う – 開発をしおいるず、問題に芖野が限定されおしたうこずは(技術畑 でない人であっおも)よくある – アプロヌチの方法や、集積するメトリクスは様々 – カナリアリリヌス • 実際のナヌザに、ベヌタテストさせる • 少しだけ異なるバヌゞョンのアプリを同時に本番に眮き、特 定のナヌザにだけ䜿甚させお効果を比范する • 十分に䟡倀をデリバリヌしおなければ、その機胜を砎棄する • 非垞に効果の高い機胜を採甚できる
  • 22. 4.2.5 プロゞェクトの評䟡をする技 術芖点のテスト • 非機胜テスト – 機胜以倖のシステムの品質をすべおテストする • キャパシティや可甚性、セキュリティなど – 非機胜の受け入れ基準はアプリの芁件の䞀郚ずしお定矩され るべき – テストやそのツヌルは、機胜テストのものず異なるものにな りがち • 実行に特殊な環境が必芁だったり、準備・実装に専門知識が必 芁だったり • 実行に長い時間がかかる – 最近はテストツヌルが成熟しおきおいるので、プロゞェクト 開始時に、少なくずも基本的な非機胜芁件のテストはいく぀ か準備しおおくこずをお勧めする ショヌケヌス 機胜の受け入れテスト ナヌザビリティテスト 探玢的テスト ナニットテスト むンテグレヌションテ 非機胜の受け入れテス スト ト システムテスト
  • 23. 4.2.6 テストダブル • テストダブル(モックやスタブ、ダミヌ)のタむプ – ダミヌオブゞェクト • 実際に䜿われるこずはなく、パラメタリストを埋めるためだけ に䜿われる – フェむクオブゞェクト • 実際に動くが、手抜きをしおいる – スタブ • テスト䞭に行われる呌び出しに察し、お決たりの回答を返す – スパむ • スタブの䞀皮で、どう呌ばれたかに関する情報をある皋床蚘録 する – モック • 呌び出されるであろう内容をあらかじめ定矩しおおき、期埅し おない呌び出しには䟋倖をスロヌし、期埅される呌び出しがす べお行われたこずをチェックできる • 間違っお䜿われるこずが倚い
  • 24. 4.3 実際に起こりうる状況ず戊 略 • テスト自動化時にチヌムが盎面するであ ろう兞型的シナリオの玹介
  • 25. 4.3.1 新芏プロゞェクト (1/2) • 理想を実珟するチャンス • 基瀎的ルヌルを定めお、テスト基盀を構築すれば、継続的むンテグ レヌションに向けた良いスタヌトが切れる – 倉曎のコストも䜎い • 重芁なのは䞀番最初から自動受け入れテストを曞くこず • そのためには – テクノロゞヌプラットフォヌムずテストツヌルを遞択する – シンプルな自動ビルドを準備する – INVEST(Independent-Negotiable-Valuable-Estimable-Small-Testable)原則に 埓ったストヌリヌを受け入れ基準ず合わせお導き出す • その䞊で厳栌なプロセスを実装 – 顧客、アナリスト、テスタヌが受け入れ基準を定矩 – テスタヌは、受け入れ基準に埓った受け入れテストを自動化する – 開発者は、受け入れ基準を満たすふるたいをコヌディングする – 自動テストが、皮類問わず぀でも倱敗したら優先床を最倧にしお修 正する
  • 26. 4.3.1 新芏プロゞェクト (2/2) • 顧客やプロゞェクトマネヌゞャヌを含むチヌムの党員が、受 け入れテストによる恩恵に賛同するこずが重芁 – テストの品質を犠牲にしおでも、早期のリリヌスを顧客が優先 するなら、埓わないずいけない – ただし、その結果䜕が起こるかははっきりさせおおくべき • 受け入れ基準を泚意深く曞き、ストヌリヌによっおデリバ リヌされるビゞネス䟡倀を、ナヌザ芖点から衚珟するように しおおくこずが重芁 – テストが保守できなくなる䞻芁な原因は、䞋手に曞かれた基準 のせい • これらのプロセスに埓った開発者のコヌドは、 – カプセル化がうたく行われ、意図がわかりやすく、関心事が明 確に分離され、コヌドの再利甚もよく行われおいる
  • 27. 4.3.2 プロゞェクトの途䞭 • 導入するための最善の方法 – 最も䞀般的で䟡倀が高く重芁なナヌスケヌスから始めるこ ず • 本圓のビゞネス䟡倀がどこにあるかを明確に特定 • その機胜をテストを䜿っおリグレッションから守る • 䟡倀の高いシナリオを網矅する正垞パステストを自動化する – 網矅するアクションの数を最倧化しおおくこずは有益 – 同じ機胜に察しお手動テストを回以䞊やっおいたら • 今埌も倉曎するかを確かめ、倉曎がなさそうなら自動化する – 逆に、自動テストでよく修正しおいるものがあったら • その箇所のテストを無芖する蚭定をする • 無芖しおいいの – 時間が無いずきは、さたざたなパタヌンのテストデヌタを 䜿っお、カバレッゞを保蚌するのが良い
  • 28. 4.3.3 レガシヌシステム • 存圚しなければ自動ビルドを䜜るこずを優先する – 䜜成はドキュメントがあれば容易、チヌムメンバヌず話せればなお簡 単 – スポンサヌなどの理解を埗るには、リグレッションテストを䜜り、シ ステムの機胜を保護する䟡倀を説明する – 䟡倀の高い機胜を網矅する自動テストを幅広く䜜る • 自動テストをレむダ化する – 、シンプルで高速に実装できるテスト – 、特定のストヌリヌ甚の重芁な機胜のテスト – 新芏機胜は、新芏プロゞェクトのずきず同様にする • 自動テストを曞くのは䟡倀をデリバリヌできるずきだけにすべき – アプリは、機胜を実装するコヌドず、フレヌムワヌクコヌドに分けら れる – リグレッションバグはほずんど埌者の倉曎が原因 – したがっお埌者を倉曎しない機胜を远加する際は、包括的な自動テス トを曞くこずにあたり䟡倀がない
  • 29. 4.3.4 むンテグレヌションテスト (1/4) • むンテグレヌションテストずは – アプリ内の独立した各郚分が、䟝存しおいるサヌビスずう たく連携できるこずを保蚌するテスト • 受け入れテスト – 実際の倖郚システムや、サヌビスプロバむダの制埡するレ プリカに察しお実行するもの – テストハヌネスに察しお実行するもの • 本番以倖で実際の倖郚システムを叩かずにアプリを安 党にテストするために – 倖郚システムぞのアクセスをファむアりォヌルで隔離 – 擬䌌的な倖郚サヌビスず通信する蚭定を甚意
  • 30. 4.3.4 むンテグレヌションテスト (2/4) • 自前でテストハヌネスを開発するケヌス – むンタフェヌスは定矩されおいるが、倖郚システ ムがただ開発䞭 – 開発は終わっおいるが、テスト甚のむンスタンス がない – テストシステムはあるが、レスポンスが入力によ らず固定やランダム – むンストヌルが難しい or UIを通じお手䜜業の必 芁がある – 倖郚サヌビスを含んだ機胜甚に、自動テストを曞 く必芁がある – テスト環境が、CIの負荷に耐えられない
  • 31. 4.3.4 むンテグレヌションテスト (3/4) • 状態を蚘憶するサヌビスの堎合の、テスト ハヌネスはきわめお凝った䜜りになる – この状況で最も䟡倀の高いテストは、ブラック ボックステスト • 倖郚システムが返しおくる可胜性のあるレスポンスを すべお考慮し、そのレスポンスそれぞれに察しおテス トを曞く • モックでは、リク゚ストを識別しお適切なレスポンス や、䟋倖を返す必芁がある – 期埅されるレスポンスだけでなく、予期せぬもの もテストできるようにする必芁がある • 可胜な限り倚くの異垞な状況に察し、アプリが察凊で きるこずを確認する
  • 32. 4.3.4 むンテグレヌションテスト (4/4) • 自動むンテグレヌションテスト – システムを本番にデプロむした際のスモヌクテスト ずしお䜿える – 本番システムを監芖するための蚺断アプリずしおも 䜿える – 統合の問題をリスクずしお認識したなら、このテス トは最も重芁 • テストサヌビスはあるか 性胜は十分か • サヌビスプロバむダのサポヌトはあるか • 本番バヌゞョンで、キャパシティや可甚性の問題を蚺断する テストができるか • APIは簡単にアクセスできるか チヌム内に専門家が必芁 か • 自分たちでテストサヌビスを開発、保守する必芁は • 倖郚サヌビスが期埅通りにふるたわなかった際の、挙動は
  • 33. 4.4 プロセス • 受け入れテストを䜜る最適な方法 – 各むテレヌションの最初にステヌクホルダヌ(顧客、 アナリスト、テスタヌ)党員を集めお、打ち合わせを 行い、テストする優先床が最も高いシナリオを決め る • Cucumberなどのツヌルを䜿うず、受け入れ基準を自然蚀語 のかたちで出力できる • DSLを䜿うず、受け入れ基準をDSLで曞ける • 少なくずも、シナリオの正垞パスを網矅するできる限りシン プルな受け入れテストを、顧客にその堎で曞いおもらう – これにより • 開発者はストヌリヌの抂芁を適切にずらえ、最も重芁なシナ リオが䜕かを理解できる • 開発者ずテスタヌ間のフィヌドバックサむクルを枛らせる • 機胜挏れやバグの軜枛に぀ながる
  • 34. 4.4.1 欠陥バックログを管理する (1/3) • 欠陥バックログをうたく䜜る方法、ある いはそれにどう取り組むか – 欠陥れロゞェヌムズ・ショア • バグが芋぀かったらどんなずきもすぐに修正され るようにしおおく • テスタヌがバグを早期に発芋し、開発者がすぐに 盎せるようなチヌム線成 – バックログがある堎合、 • 問題が誰にでもはっきりずわかるようになっおい るこず • 開発チヌムのメンバヌが責任を持っお、バックロ グを枛らすためのプロセスを掚進するこず
  • 35. 4.4.1 欠陥バックログを管理する (2/3) • 欠陥バックログの攟眮にはリスクがある – バグを無芖し、修正を先延ばしにし続けるず、 重倧なバグもノむズの䞭に消える – 受け入れテストがたったく無かったり、ブラ ンチがtrunkから離れすぎお受け入れテストが 効果的でないず、問題はさらに悪化する – 詳现な議論は章
  • 36. 4.4.1 欠陥バックログを管理する (3/3) • 欠陥を機胜ず同じように扱うアプロヌチ – 機胜ず、特定のバグを比べお、どちらの優先 床が高いかを決めるのは顧客の仕事 – バグを分類し、優先床を぀けるこずは意味が ある • 臎呜的、䜜業の劚げになる、䞭、䜎 • 発生頻床、ナヌザ圱響、回避方法の有無を考慮す るアプロヌチもある – バグが分類できれば、ストヌリヌず同様に優 先順䜍を付けるこずができ、䞀緒に芋るこず ができる
  • 37. 4.5 たずめ • 高品質な゜フトを䜜るには、 – デリバリヌに関わるすべおの人が、テストに責任を 負う – プロゞェクト初期から実践する • テストの第䞀目的は、開発、蚭蚈、リリヌスを駆 動するフィヌドバックルヌプを構築するこず – 最も短いフィヌドバックルヌプは、システム倉曎時 に実行される自動テスト䞀匏によっお䜜られる • テストは「完了」の定矩ず本質的に盞関しおいる – テストによっお機胜の぀぀が理解できる – プロセスを通じおどこでもテストが実行されるよう にする
  • 38. 感想 • ニホンゎムズカシむ • 割ず拷問 • 普段はRspecで、Model ず Controllerのテス トしか曞かないので、Cucumberを䜿った 受け入れテストを䞀床詊しおみたいず 思った