はじめに
こんにちは、ドコモの小林といいます。サービスデザイン部でahamoアプリの開発担当をしています。
このたびahamoアプリの開発プロセスの中で試験自動化に取り組みましたので、その経過について紹介します。
きっかけ
ahamoアプリはFlutterベースで開発をしています。こちらについては昨年のカレンダー(Flutterでアプリ開発してみた)でも紹介しています。
現在ほぼ月1回の間隔でアプリのリリースをしています。このリリースに関しては、実際のコード開発のほかに、ビルド・試験や各OSのストア審査等の開発以外の稼働もかなりの量がかかっています。
部・担当の方針として業務におけるToilの削減を図っていくことになり、ahamoとしてはこのリリース関連の稼働に目星をつけました。その中でも品質確保のためのリグレッション試験の稼働が大きいので、その効率化・稼働削減をターゲットに定めました。リグレッション試験はリリース毎に毎回行う項目も多く、試験の自動化を進めることの効果が大きいのではないかと試算しました。稼働削減だけでなく、リリースまでのタイムラグの削減、属人化の解消、人的ミスの減少といった効果も狙っています。
また、昨年度の開発の振り返りを行うなかで、アプリの機能開発に掛ける稼働割合が高く、品質向上や開発プロセスの改善・最適化といった非機能開発にあまり手を回せていないという現状を確認しました。そこで自動化の対応を進めることで、稼働の効率化だけでなく開発チームのレベルアップにも繋げたいと思い、取り組みをしています。
自動化の実施ツール
試験自動化を行うにあたり、Flutterで提供されているテストツール(FlutterDriver、integration_test)とFlutterに対応しているテストツール(Appium)の3種からツールを選定することとしました。選定は、ahamoアプリの評価に必要なボタンやリンク操作等の各種動作への対応状況を確認するため、15の動作要素について、それぞれについて比較検討しました。
結果として、Flutterのツールに関してはwebviewを使う機能についての制御が難しく、ahamoアプリで重要な認証周りの動作の追従の点でappiumが優れていると判断し、appiumでの実装を進めることとしました。
自動化の適用範囲
商用リリース前のリグレッション試験は、本番の商用環境もしくは本番に近い検証環境を用いて実施しています。自動化を検討するにあたり、
- 本番の商用環境に接続が必要な試験(万が一問題が起きるとまずい)
- サーバ設定(RemoteConfigなど)や端末設定(Wi-Fi、お知らせ設定など)の切り替えが必要な試験
- 待ち時間が必要な試験
- 判定が困難と思われる試験(複雑な操作が必要、外部リンクの奥まで確認するような試験など)
については、今回は対象外としました。結果として、検証環境に接続して行う試験を中心とした約250の試験項目を試験自動化の初期ターゲットとしました。
稼働削減見積もり
試験自体は夜間スクリプトを走行させ翌朝に結果を確認するという前提で、人間が試験するのに比べて1件あたり1分短縮になったしても、1分×250件×2(Android,iOSの2種)≒8時間程度となり毎月1回のリリースあたり1日分強の稼働削減が見込めるのではないかと試算しました。
実装での課題
実際に試験項目の自動化を進めていく中で、いくつかの課題が出てきました。
当初の見積もり通りに自動化ができない試験項目もありました。例えばアプリ外のwebview等で表示する画面については、ネットワークのレスポンスも考慮して画面が安定するの待つ必要があることがわかり、調整を必要としました。
大きな外部影響としては、検証環境に仕様変更や別の検証のための動作変更が入り、画面が切り替ったり、検証用の画面が途中で挟まって追加のボタン操作や入力が必要になったりして、操作を安定して行うことが困難となる問題がありました。人の手で実施しているときにはあまり気にかけていなかった変更でも自動化では大きな影響を受けることを痛感しました。検証環境の性質上このようなことはしばしばあるものなので、受け入れてその都度変更の対応を行っています。
また運用面の課題として、夜間にスクリプトを走行させる最中に何らかのエラーが発生することがありますが、そのハンドリングが不十分で試験の継続判断がうまくいかないことがありました。エラーパターンの洗い出しを行い、それぞれに対し試験中止か継続の対処判断をできるようにして、試験の実施効率を上げていけるように取り組みを進めています。またあわせて動作ログの改善も進め、発生したエラー内容を判別しやすくし、事後の対策を取りやすくするようにしていきます。
おわりに
試験自動化の対応自体はまだ道半ばというところですが、まずは安定した稼働ができるように取り組んでいき、その後は試験のバリエーションを増やしていけるようにしていきたいです。またこのリグレッション試験の自動化だけでなく、ビルド工程の自動化、試験工程全体の見直し・期間短縮などリリース工程全体に関わる施策にも取り組んでいき、ahamoアプリ開発のCI/CDを推進していきます。