あなたはE2Eテスト自動化ジャーニーの第一歩を踏み出すべきか?
10年以上エンジニアとしてソフトウェア開発に従事してきた近澤氏。日本/シンガポール/アメリカの3カ国でエンジニアとして開発してきた中で、どこの国でもテストに苦労していたことから、Autifyの開発に踏み切った背景がある。
AIを用いたWeb/モバイルアプリのE2Eテスト自動化サービスのAutifyは、「ノーコードで誰でも簡単にE2Eテストを自動化できる」「AIがメンテナンスを自動化してくれる」という特徴を持ち、2019年10月のローンチから約半年で累計100社、現在は300社を超えるユーザーを抱えている。
近澤氏は、まずテスト自動化の必要性について言及した。「テストを自動化したい」と思いながらも、「本当にそれで楽になるのか? 逆に手間が増えることはないのだろうか?」と不安に思っている人も多いのではないか。近澤氏はテスト自動化に関するある論文を紹介し、「テスト自動化の損益分岐点は3回。それ以上リリースサイクルが短ければ短いほど、あるいはテストの頻度が高ければ高いほど、自動化の効果は高まる」と説く。
Autifyが独自で行ったリリース頻度調査によると、79.31%が月に1回以上リリースを行っていることがわかっている。これは顧客ニーズの変化に素早く対応するために、高速なリリースサイクルが必要不可欠な現状を示していると言えるだろう。特にアジャイル開発では、機能を追加するたびにリグレッションテストが発生する。手動でそれらをすべてカバーし続けるのは不可能だ。「極端な話、自動化しなければアジャイルにはならない。手動テストをしている限り、リリースサイクルを遅くするか、障害のリスクを許容するかの二者択一を迫られ続けることになる」(近澤氏)
本来、テストの理想的な在り方としては、まずUnit/Integrationテストを書き、カバーしきれない部分を自動E2Eテストや手動E2Eテストで補う形が望ましい。しかし、スピード優先で開発してきたためにテストコードがなかったり、レガシーコードでUnit/Integrationテストが書きにくかったり、チーム内のテストに対する理解が低くないがしろにされてしまったり……といった理由により、Unit/Integrationテストがほとんどないまま、手動のE2Eテストに依存している人も多いのではないか。「このような状態を“Ice cream cone”と呼ぶ。Ice cream coneを解消するには、肥大化した手動のE2Eテストを自動化して負荷を下げることが、非常に有効なアプローチだ」と近澤氏は話す。
E2Eテスト自動化ジャーニー、成功への道筋
エンジニアが十分に足りているのであれば、E2Eテストの自動化フレームワークを用いてコードを書く選択肢もあるだろう。しかし、その場合であっても、3つの落とし穴があると近澤氏は指摘する。
1つ目は、コードを書かなければならないことだ。技術知識が必要なため、できる人が限定され、属人化するリスクがある。また、できる人であってもコードを書くこと自体に時間がかかるため、テストを構築するために時間を要する。
2つ目は、よく落ちるのでメンテナンスの手間がかかることだ。要素が表示される前にクリックすると、なぜか1500msのwaitが差し込まれるということが頻発する。加えて、classやidを変更したがために落ちてしまうというのも、よくある話だ。このような本質的ではないところに多くの時間を取られてしまう。
3つ目は、クロスブラウザ実行の闇だ。ブラウザごとにバージョンを合わせてWebDriverをインストールする必要があるところに闇があり、Basic認証をちゃんとしようと思うと意外に難しく、再び闇に落ちる。さらにその先には、各ブラウザで実装の違いがあり、同じテストシナリオがそのまま使えるとは限らないという闇も待ち受けている。ここでもまた、本質的ではないところに多くの時間を取られることになる。
これらの落とし穴をきれいに解消したいという想いで作られているAutifyだが、「単にAutifyを入れるだけでE2Eジャーニーのすべてが終わるわけではない」と近澤氏は強調する。
ここからはAutifyを用いたE2Eテスト自動化の成功パターンを事例とともに見ていこう。
1. 責任者とプロセスを明確にする
Autifyを入れたとしても、テストの責任者を明確にしておかなければ、日々の業務に追われて、誰も手をつけない事態が発生してしまう。「いつ誰がどのシナリオの実装をするのか」「誰がシナリオのメンテナンスを行うのか」少なくとも、この2つは明確にした上で運用体制を築くことが大切だ。
Autifyを導入している株式会社ROBOT PAYMENTでは、ノーコードで使えるAutifyの特性を生かし、PMとCS(カスタマーサクセス)が主幹となってE2Eテストの自動化を行っている。
2. 小さく始めて徐々に広げる
すべてのテストが自動化できるわけではない。動画の音声と映像のズレがないかをテストする場合など、人間が対応したほうが明らかに精度も効率も高いこともあるからだ。すべてのテストを自動化しようと躍起になるのではなく、「人間がやるべきこと」と「機械に任せたほうがいいこと」をきちんと切り分ける必要がある。また、いきなり複雑なテストの構築から始めて挫折しないよう、最初は 「小さくてもインパクトのあるところ」から始めて、徐々に広げていく考え方が重要である。
Autifyを導入している株式会社GA technologiesでは、Pingコマンドを実行して接続確認をする延長で、WebサイトのCSSが崩れていないかを確認するところから始め、徐々にフォームのテストなどへと広げていった。これにより、24時間、確実にWebサイトからの問い合わせを受けられる環境を構築できた。
3. ナレッジの共有と展開を大切にする
Autifyのようなツールを使ったとしても、属人的なプロセスにしてしまうと、できる人が限られてボトルネックになってしまう。これを避けるためには、ナレッジの共有と展開を大切にしなければならない。どのようにテストを作っていくのか、その方針をチーム内で共有することで、各人がバラバラに動いて重複や抜け漏れが発生しないようにしたい。また、自動化がうまくいかないものはアプリケーションによって異なるため、そのトライ&エラーの過程で得た知見は、広く共有しておいたほうが良いだろう。さらに、うまくいったことは社内の他職種/他部署にも横展開することで、全社を挙げて品質向上に取り組む文化を築ければ最高だ。
株式会社LegalForceでは、シナリオ作成はQAエンジニアが行うが、開発エンジニアでも実行できるようマニュアルを作成し、チーム全体でAutifyを運用できる体制を敷いている。他にも株式会社タンバリンでは、QAエンジニア1人にナレッジが集中しないよう、チームメンバーにシナリオを作ってもらう工夫をしている。
次に、Autify自身のE2Eテストの自動化について話が及んだ。「社内ではAutifyでE2Eテストを自動化することを『Autifyする』と呼んでいるので、AutifyもAutifyでAutifyしています」と話す近澤氏。機能ごとの「featureブランチ」をステージング環境につながっている「developブランチ」にマージするタイミングで、Circle CIからキックされたAutifyが実行されるようになっており、その後ステージング環境でリグレッションテストをすべてクリアした段階で本番環境につながっているmasterブランチにマージする流れとなっている。
とはいえ、AutifyだけですべてのE2Eテストをカバーしているわけではない。Chrome ExtensionのRecorderは「CodeceptJS」を使ってE2Eテストを自動化しているし、Reactで書かれたアプリケーション上のWeb FrontendやTest workerは「Jest」を使うなど、適材適所を追求しているのだ。「すべてのE2Eテストが1つのソリューションで完結するはずがない。何にどれを当てればいいのかを考えて、できるだけ高いカバレッジを保つことが重要だ」(近澤氏)
E2Eテストの自動化によって得られる成果はさまざまある。まず挙げられるのは、リグレッションテストの工数削減であり、時間やコスト的に人手ではカバーしきれなかったテストまでできるようになる点だろう。また、自動化することで浮いた時間を、より本質的な業務に充てられたり、リリースサイクルを短縮化できたりするメリットもある。「E2Eテストの自動化ジャーニーに終わりはない」と言う近澤氏は、自動化を実現した先には、例えば次のような道が開けると述べた。
- よく失敗するテストの傾向分析をすることで、前のめりな品質改善につなげていく。
- Shift Leftの発想で、実装フェーズからE2Eテストの自動化を実施していく。
- Shift Rightの発想で、本番環境での定点観測を行っていく。
そして最後に近澤氏は、「自動化に取り組んでみると、徐々に効果を実感できるようになり、それが最終的に大きな成果へとつながってくるはずだ。ぜひみなさんもE2Eテスト自動化のジャーニーを楽しんでもらいたい」とエールを送った。