アジャイルテスティングはどこをテスト自動化するべきか

<H2>アジャイルテスティングとは</H2>
アジャイル開発の中でのテストのことですが、

> アジャイルテスティングは、ドキュメントへの依存度がより少なく、変化をより多く受け入れ、プロジェクトが品質について継続的に会話をするという考え方のテスティングスタイルである。
> Brian Marick
>引用元:  アジャイルソフトウェア要求

らしいです。

<h2>【しかし】アジャイルテスティングの時間がねー問題</h2>

[参考：QA challenges with agile software development](https://www.guru99.com/agile-testing-a-beginner-s-guide.html#4)

1. ドキュメンテーションの優先順位が低く、エラーが発生する可能性が高くなり、最終的QAチームにより作業時間に圧力がかかる
2. 新機能は迅速に導入される為、テストチームが最新機能が要件に合ってるか、ビジネスルールと合致しているか、を確認する時間が短い
3. テスターは開発者の役割も半分担う場合がある(テスト自動化...etc)為、時間がない
4. そしてテスト実行のサイクルはどんどん圧縮されていく、、、、
5. ついでに言っとくとテスト計画を準備する時間もねー

<h2>【なので】アジャイルテスティングでどこをテスト自動化するべきか考える</h2>


<h3>テストピラミットで考える</h3>

![test.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148127/dbd510eb-1a03-5b04-0afc-07abccc7af0c.jpeg)


このピラミッドが言いたいことはつまり、
Unit testレベルでいっぱいテストして、UI testレベルではなるべくテストを少なくしようぜ！
その方が費用対効果も高いし！
という意味です。

つまりは自動テストでも、Unite testレベルを多く自動化し、
UI testレベルのテスト自動化は最小限に止めるべきです。

なぜならUI testを自動化しても、テストが壊れやすく、メンテナンスコストがいっぱいかかるよ！
というのが世の中の常識です。(たぶん)

<h3>アジャイルテストの4象限でも考える</h3>

![無題の図形描画 (1).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148127/78d6fcc0-6a12-939d-0ac6-b2ddb2339aa0.jpeg)


アジャイルテストの4象限でも考えると、つまりは、第一象限と第二象限のとこで自動化するべき。
ということですね。

各象限の説明は軽めに以下。

<strong>1. アジャイル第一象限</strong> 
内部コードの品質がこの象限の主な焦点。
つまりは、単体テストなどを自動テストで実行し、チームを支援します。


<strong>2. アジャイル第二象限</strong>
要件に焦点をあててテストします。
つまりは、ビジネスルール通りに正しく動作しているかをテストし、チームを支援します


<strong>3. アジャイル第三象限</strong>
この象限は1、2にフィードバックを提供します。
製品の信頼性を高めるために何度も反復レギュ〜が行われます。


<strong>4. アジャイル第四象限</strong>
この象限はパフォーマンス、セキュリティ、安定性などの非機能要件にフォーカスします。

<h3>テストピラミッドとアジャイルテスト４象限を合わせて考える</h3>

テストピラミッドとアジャイルテスト４象限を合わせて考えると、
どこで、どらくらい注力して自動化するべきか、が見えてくる。
![M.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148127/9dbfea61-38ca-b6b5-7da3-3f5fe2428e6f.jpeg)



<h2>【とはいえ】アジャイルソフトウェア開発におけるテスト自動化のリスク</h2>

自動化することのリスクも理解してすすめよーねー編。

[参考：Risk of Automation in Agile Process](https://www.guru99.com/agile-testing-a-beginner-s-guide.html#5)

* 自動化されたUIテストは高いレベルの信頼性を提供しますが、実行に時間がかかり、壊れやすく、構築にコストがかかります。テスト担当者がテスト方法を知らない限り、自動化によってテストの生産性が大幅に向上することはありません。
* 信頼性の低いテストは、間違った検知を回避するために、失敗したテストの修正と脆弱なテストに関連する問題の解決が最優先事項になります。
* 自動テストがCIではなく手動で開始された場合、テストが定期的に実行されず、テストが失敗する可能性があるというリスクがあります。
* 自動テストは、探索的手動テストの代わりにはなりません。プロダクトの期待される品質を得るには、テストのタイプとレベルの混合が必要です
* 多くの市販の自動化ツールは、手動テストケースのキャプチャと再生の自動化などのシンプルな機能を提供します。そのようなツールは、UIを介したテストを促進し、本質的に壊れやすく、テストの維持が困難になります。また、バージョン管理システムの外部にテストケースを保存すると、不要な複雑さが生じます。
* 時間を節約するために、多くの場合、自動化テスト計画の計画が不十分または計画外であるため、テストが失敗します。
* 通常、テストの自動化時にはテストのセットアップとティアダウンの手順がないが、手動テストでは、テストのセットアップとティアダウンの手順は特に意識せず進められます。
* 1日に作成または実行されたテストケースの数などの生産性メトリックはひどく誤解を招く可能性があり、役に立たないテストの実行に多額の投資をする可能性があります
* アジャイル自動化チームのメンバーは効果的なコンサルタントでなければなりません：親しみやすく、協力的で、機知に富んでいなければ、このシステムはすぐに失敗します
* 自動テストでの効果的なソリューションを考案して提供する専門知識がない場合がある
* 自動テストは成功するが、重要な問題の解決に時間を使い果たし、重要でない問題に直面する


<h2>参考文献</h2>

* [What is Agile Testing? Process, Strategy, Test Plan, Life Cycle Example](https://www.guru99.com/agile-testing-a-beginner-s-guide.html)
* [アジャイルコーチング](https://books.google.com.vn/books?id=nIX3DQAAQBAJ&printsec=frontcover&hl=ja#v=onepage&q&f=false)
* [アジャイルテスト -高品質を追求するアジャイルチームにおけるテストの視点-](https://www.slideshare.net/satoshimasuda/ss-3241717)
* [アジャイルテストとその活用法](http://www.jasst.jp/archives/jasst10n/pdf/S2.pdf)
* [テストのピラミッドを3分で理解する](https://test-hack.com/%e3%83%86%e3%82%b9%e3%83%88%e3%81%ae%e3%83%94%e3%83%a9%e3%83%9f%e3%83%83%e3%83%89%e3%82%923%e5%88%86%e3%81%a7%e7%90%86%e8%a7%a3%e3%81%99%e3%82%8b/)