テスト自動化の習慣を最速で組織に定着させるためには、ツールの使い方だけではなく「何を目的に自動化するか」「どの順番で自動化を進めるか」の2つが非常に重要です。
この2つが適切であれば、自動化はスムーズに組織に浸透し、成果もすぐに得られます。この2つが適切でなければ、成果を得るのに時間がかかり途中で失敗するリスクも高くなります。1つずつ見ていきましょう。
1.何を目的に自動化するか
目的は2つ
テスト自動化の際には、次のA・Bどちらか(または両方)を目的の1つに入れてください。
A. 開発チームの生産性を上げる
開発環境でテストを毎日実行することで、開発したものの不具合にすぐに気付くことができ、迅速な修正が可能です。
もし開発期間が完了した後に不具合が見つかったとすると、開発期間中に追加された多数の変更の中からその原因を特定するのに大きな労力がかかります。特定できても、開発者が問題の変更を入れてから時間が経っているので、内容を思い出して修正するのに時間がかかります。
また、開発中のコードに不具合があると、多くの開発者が開発中にその問題に遭遇し、調査に余計な時間を割かれます。テストを毎日実行することで、開発・テスト環境をクリーンに保ち、生産性を落とさずに開発業務を行えます。
B. 不具合・トラブルを迅速に検出する
開発環境でテストを毎日時実行することで、開発期間中の不具合にQAチームがすぐに気付けます。
もし不具合が開発期間後のテスト期間中に見つかったとすると、その不具合の修正を待つ間テストのスケジュールは遅れ、リリース遅延にもつながります。リリース前に手動テストを行うのだとしても、毎日の自動テストでコードの品質を一定に保つことはQAチームにとっても重要です。
また、作成したテストを本番環境で常時流すことで、本番環境でサーバなどのトラブルが起きた場合に素早く気付いて対処できます。
「リリース前のテストにかかるコストを削減する」も目的にして良いですが、AかBも目的に入れることが重要です。
成功のカギとなるのは、毎日テストを回す習慣
なぜAやBが重要なのでしょうか。それは、AやBが目的に入っていると、必ず自動テストを毎日回すことになるからです。その結果、
- 毎日自動テストのメリットを実感することになるのでチームメンバーが恩恵を実感しやすく、毎日結果を確認するので習慣化も進みます。
- 月1回や週1回しか回さない時と比べ、何倍何十倍もテストを活用でき、費用対効果が爆発的に上がります。
- 毎日のテストの場合「手で実行する」ことは不可能なので、メンテナンスが大変なことがあっても「やっぱり手動テストでいいや」ではなく「頑張ってメンテナンスしよう」というマインドになります。
- 日々のプロセスの中に組み込まれ、チーム全体で自動テストをメンテナンスする意識が高まるので、最初に導入を進めたメンバーがいなくなった後でも引き続き自動化が機能しやすいです。
逆にリリース前にしか自動テストを流さないと、
- 開発期間中の変更を全部まとめてテストするので、エラーの切り分けが難しく、エラーが出たまま放置されるテストがどんどん増えていきます。
- リリース直前にエラー修正・調査が必要になったりテストのメンテナンスが必要になったりすると、忙しくて後回しとなり、せっかくの自動テスト結果がリリース判定に使われない事態になります。後回しにされたテストはエラーが出たまま放置され、通らないテストがどんどん増えていきます。
実際、MagicPodを活用し成果を上げている多くのお客様が、
- 「リリース前の修正はバタバタと大変になるので、毎日実行することで問題に早く気づけるのはエンジニア目線でメリット」(note様)
- 「前日の定期実行が問題なくて今日NGだったという場合、原因は1日の差分にある可能性が高いと考えられるので、解決までの工数が下がった」(Showcase Gig様)
- 「デグレが早いタイミングで検知できるようになって修正対応がスムーズになり、締め切り間際に慌てることがなくなった」(LINE Fukuoka様)
のように、A・Bのメリットを重視し、テストを毎日実行しています。
リリース前テストのコスト削減だけを目的にしている場合は、目的を再検討してください。毎日回さない自動テストは、メンテナンスされなくなるリスクが非常に高いです。
最後に、MagicPodでは月額料金はどれだけテストを実行しても固定です。そしてこの固定料金は、ユーザーが毎日テストを実行する前提で設定されています。支払ったお金を無駄にしないために、テストは毎日実行しましょう!
2.どの順番で自動化を進めるか
立ち上げ時
「A. 開発チームの生産性を上げる」「B. 不具合・トラブルを迅速に検出する」を目的に決めたら、まず行うことは「開発中の最新のプログラムに対しテストを毎日実行し、チームに結果が通知される仕組みを作ること」です。
「たくさんのテストを自動化すること」でも「テストケース全体を再整理すること」でもありません。
自動化するテストは最初はなんでも良いです。自動化しやすいものを、まずは1テストケースだけ自動化します。
具体的なテストケースの作り方はスタートガイドの1と2を、毎日実行するための設定はスタートガイドの3を参考にしてください。
うまく自動化できたでしょうか?
おめでとうございます!これで何もなかった時と比べ、少しだけ開発効率が上がり、少しだけ不具合の検出速度が上がりました!
さすがに1テストケースだけではあまり大きな効果がありませんが、5〜10テストケースほど作れば自動テストがそれなりにバグを検出してくれるようになります。
チームに自動化を浸透させる最良の方法は、早く成果を得ることです。小さくても成果が出れば、上司やチームメンバーから継続することへの理解が得やすくなります。
本格導入時
テストを毎日実行する仕組みができたら、いよいよ本格的に自動化をチームに浸透させていきましょう。
次のような順番がおすすめです。
- まずは1テストケース毎日実行されるようにします。
- テストをきちんとメンテナンスできるか、チームメンバーが自動化に関心を持ってくれるか、ということに気をつけながら、少しずつ毎日回すテストを増やしていきます。
- まずは基本的な機能や画面が一通り動くかのチェックを自動化します。1つの機能に対し深掘りしてたくさん自動化するのではなく、広く浅く一通りの機能・画面を網羅しましょう。
- 一通りの機能を網羅した後しばらく運用してみて、きちんと継続的にメンテナンスできるかを確認します。
- きちんとメンテナンスができそうだということが分かったら、エラーメッセージの動作確認や特殊な状況下での動作確認など、より複雑なテストケースの自動化に進みます。こういったテストの自動化の際には、MagicPodだけでなくAPIテストツールやユニットテストツールの利用も検討します。
1〜5のステップについて、1つずつ具体的に解説していきます。
- まずは毎日実行 これは立ち上げ時に達成されているはずです。
- 毎日実行しながら、少しずつテストを増やしていく 毎日テストを実行してみると、テストの安定性など、実行してみるまで気付かなかった様々な問題にぶつかります。これらを解決しながら、少しずつテストを増やしていきます。まとまった時間を確保して一気にテストを作り、その後毎日回した方が効率がよいと感じる方もいるかもしれませんが、それは幻想です。メンテナンスできるかどうか検証されていない大量のテストがいきなり増えても、誰もメンテナンスできずすぐに使われなくなります。少しずつ検証しながら、着実にチームに浸透させていきましょう。
- 広く浅く一通りの機能を網羅する 最小の労力で最大の成果を得るために、まずは広く浅く機能を網羅することに注力しましょう。手動用のテストケースを上から順番に自動化してはいけません。優先順位をつけて、まずは基本的なテストケースだけを自動化します。
- メンテナンスできるかしばらく運用する 一通りの機能が自動化できると、次はもっと自動化したくなりますが、まずはこの状態でチームに浸透できるか、きちんとメンテナンスできるか、少なくとも1〜2ヶ月様子を見ましょう。うまく運用できないのにどんどんテストを増やしてしまうと、結局全てメンテナンスできなくなり、これまでの労力が全て無駄になってしまいます。
- さらにテストを増やしていく 基本的なテストケースを継続的にメンテナンスできる頃には、チームの自動テスト運用力も従来より格段に上がっているでしょう。ここまで来たら、より多くのテストを自動化していきましょう。ただし、E2E(UI)テストを増やせば増やすほど、メンテナンスコストは上がり、テスト実行に時間がかかるようになります。シリコンバレーの有名企業はたくさんのテストを自動化し、一日に何回もリリースを行っています。しかしそれができるのは、多くのテストをユニットテストやAPIテストで自動化しているからです。ユニットテストやAPIテストも活用し、開発チームとQAチームが協力して自動化の網羅率(カバレッジ)を高めていってください。
最後は、操作方法・エラーなどで困った際の問い合わせ方法と、Slackコミュニティを紹介します。