アジャイルテスティングとテスト自動化
主催するイベントでも、アジャイルテスティングをテーマにすることが多々あります。アジャイルテスティングをより具体化するために、有識者をお招きして、具体的なプラクティスを質問したことがありました。そこで、以下のようなキーワードが登場しました。
- ユーザー視点での妥当な継続的フィードバック
- 迅速なフィードバックのためのテスト自動化、探索的テストの活用
- チーム全体で品質保証できる仕組みづくり
特に、探索的テストとテスト自動化は、アジャイルテスティングを支える重要なプラクティスと言えるかもしれません。
アジャイルテスティングを実現するためには、すべてのソフトウェア開発活動において、継続的テストを行うしかありません。筆者がアジャイルテスティングを目指す現場を支援するときには、いつも最初にこう伝えています。
- イテレーション・スプリントの最後にまとめてテストしない方法を考えてください
- テストをする以外の活動を増やしてください
「最後にまとめてテストしない」ためには、イテレーションやスプリントの最後に自動でリグレッションテストを流すだけでリリースできる状態を目指さなければなりません。そうしなければ、「テストがボトルネック」という問題と永遠に付き合っていかなければなりません。
特にバグ原因が「仕様不備」だとすれば、すぐに手を打つ必要があります。最後の最後で仕様不備に気がつくと、大きな手戻りが発生します。つまり、多くの時間を失っているという意味になります。
よって、自動化できるものは自動化して、最後にまとめてやっていたテストを、それ以外の活動(自動テストコードではカバーできない要件定義、設計、リリース、モニタリングなど)で行っていく必要があります。
ここでいうテストは、「テストコードを書く」や「手動でテストする」ではなく、設計をレビューしたり、モニタリングしているデータの意味を推測したり、従来の「テスト」とはちょっと異なる活動になるはずです。そういった「ちょっと異なる活動」が増えていくことで、「テストをする以外の活動を増やす」ことが可能になってきます。
しかしながら、「意見を言うだけのご意見番」にならないように注意も必要です。例えば仕様検討という活動で品質保証活動を行う場合、仕様矛盾を指摘するぐらいであれば、専門知識がなくてもできるかもしれません。しかし、「ユーザーの利用データを見る限りXXXしたほうがいい」というような周囲が意思決定しやすい情報を踏まえてフィードバックができるなら、「意見を言うだけの人」から「データをもとにフィードバックできる人」に変わります。その活動の価値がより高まります。
コラム:アジャイルテスティングはシフトレフトが嫌い?
アジャイルテスティングと同時に「シフトレフト」という言葉も登場する機会が増えてきました。日本語に訳するのが難しい単語ですが「上流工程に品質保証をシフトする」、「前倒してテストする」などいくつかの解釈があるようです。
言葉の定義はさておき、書籍『Agile Testing(邦訳:実践アジャイルテスト テスターとアジャイルチームのための実践ガイド、翔泳社)』の著者であるジャネット・グレゴリー氏は、自身のブログでこの言葉を批判しています。
By shifting left, it feels like the development process is a linear process, and it’s not.
意訳:シフトレフトと言うと、開発プロセスが線形プロセスであるように感じられますが、本当にそうなのでしょうか?
アジャイル開発は開発サイクルを高速に回します。DevOpsでは無限大の形をしたサイクルを回していきます。よって、左も右もありません。
シフトレフトという言葉自体が、従来型の線形プロセスにしばられてしまっている可能性があるのかもしれません。そもそも上流・下流という言い方が、日本だとあまりポジティブに受け取られないかもしれませんね。