Appresso Engineer Blog

アプレッソのエンジニアが書く技術ブログです。

アジャイル開発になったらQA担当者はどうなるの? 〜「実践アジャイルテスト」で学んだこと〜 その4

こんにちは、品質マネジメント部の磯です!

書籍「実践アジャイルテスト」にて学んだことをアウトプットしていくエントリその4になります。

www.shoeisha.co.jp

前回は「テスト自動化の阻害要因」について書きました。

appresso.hatenablog.com

今回は「アジャイルテストの自動化戦略」について学んだことをいくつかピックアップしてきます。

テスト自動化のピラミッド

(P274 14.1.2 「テスト自動化のピラミッド」より)

f:id:yoiso:20161003181430p:plain

上記の図はテスト自動化における範囲や容易性などを示した図になります。

下に行くほど容易かつ広範囲をカバーすることができます。下から順に説明していきます。

  • 単体テスト/コンポーネントテスト

    • チームを支援する技術面のテスト(第1象限)
    • 一般にxUnit系のツールを用いて、対象システムと同言語で記述される
    • 高速で安価に記述できる(高ROI)
  • 受入テスト(APIレイヤー)

    • チームを支援するビジネス面のテスト(第2象限)
    • 「正しいものを作ったか?」を確かめる為、機能テストやストーリテストなどが含まれる
    • 単体テストに比べて大規模な機能の集合をカバーする
  • GUIテスト

    • 頻繁に変更が入る可能性が高い
    • 実行に時間がかかる
    • 低いROI
  • 手動テスト

    • ビジネス面について批評するテスト(第3象限)
    • 人間の手と目によって実施されるべき
    • ユーザビリティテストなど

テスト自動化を検討するにあたってはこのピラミッドに当てはめて考えるとよいとしています。 テスターがまず取り掛かりそうなGUIテストの自動化は実のところ投資対効果があまり高くありません。 それは頻繁な仕様変更や実行そのものにかかる時間などからです。

また、ビジネス面について批評するテストは人間の手と目によって実施されるべきものです。自動化ではその価値が計れません。

何を自動化できるのか, 何を自動化するべきでないのか

P277 14.2 「何を自動化できるか?」, P283 14.3 「何を自動化するべきでないか?」より

f:id:yoiso:20161014180809p:plain

上記の通り、開発工程の中で自動化できそうなものがあげられています。ここでは機能的な側面のテスト以外にも、定型的な繰り返し作業、たとえばテストの結果レポートをメールするといった作業についても自動化 候補として検討することが推奨されています。こういった周辺作業についても自動化を進めることによって、本来注力すべき作業の生産性もあがりそうです。

また、候補外とされているものについては、人間による批評が必要なもの、ROIが著しく低いと思われるものが含まれています。失敗する可能性がほぼないテスト(「絶対に失敗しないテスト」とありますが、「絶対」はありえません。念のため!)や1回限りのテストについて自動化することは、大きな無駄となってしまいます。

自動化の戦略を立てる---どこから始めるべきか?

P287 14.5 「自動化の戦略を立てる---どこから始めるべきか?」より

戦略を立てるにあたっては、冒頭の「テスト自動化のピラミッド」を参考にします。ピラミッドは下層にいくほどROIが高くなります。一方でビジネス面のテストを考えると上層にいく顧客が求める機能が実装されているか、状況が理解しやすくなります。

最下層のテストを充実させつつ、いくつかのテストケースにおいては手動で確認するようにするなど、目的に合わせて優先順位をつけていくことが重要と考えます。

テスト自動化にアジャイルの原則を適用する

P297 14.6 「テスト自動化にアジャイルの原則を適用する」より

テストの自動化においてもアジャイルの原則を適用して、その価値を利用していくことができます。テストの設計やスコープをシンプルに保つことが必要になります。これは様々な変化に対してテストが追従していくうえで重要な思想と考えます。また反復的なフィードバックも大きな効果をもたらします。よりよい自動化の方法やテストシナリオを検討してフィードバックしていくことが大切です。しかしここで忘れたくないのはROIを意識することです。全てをやり直すとなっては、今までかけた時間が無駄になってしまう可能性があります。顧客へ価値を届ける為に何が優先されるべきかをしっかり考えることが必要と思います。

また、チーム全体のアプローチはテスト自動化においても重要な考え方としています。テスタビリティが十分に考慮された実装となるように、プログラマやテスター、その他のチームメンバーが協力することで、複数の観点やスキルセットが得られます。チーム全体で助け合うことによって前進する勇気や自信が高まります。(いいですね!)

まとめ

今回は「アジャイルテストの自動化戦略」について学んだことをアウトプットしました。 まとめると...

  • 「テスト自動化のピラミッド」を利用して、注力すべきポイントを検討する
  • 開発にあたって自動化可能なもの(プロジェクト進行における定型業務含む)、自動化すべきでないもの(人間による批評が必要なもの、ROIが著しく低いもの)を考える
  • 自動化に対してもアジャイルの原則を適用する

となります。またそれぞれROIをしっかり意識して検討/実施していくことが重要ですね!

次回予告

次回はすこし飛んで第18章「コーディングとテスト」についてアウトプットしていきたいと思います。

ではまた!