Technology 17.05.19

QA(品質保証)チームによる実機端末をつかった自動/手動テストの裏側(アドテクセンター通信)

TAGS :
  • Ad Generation
  • アドテクセンター
  • 動画リワード

Ad Generation(アドジェネ)では、メディア様の広告運用をサポートする責任ある立場として、安心してご利用いただけるよう、開発・営業・運営のチームに加え、QA(Quality assurance:品質保証)チームを専属で設け、日々品質管理への取り組みを行っております。

QAチームについてはこちらの記事をご確認ください。
Quality Assurance(QA)チームによる品質管理の取り組み

本記事では、QAチームがこだわりをもって行っている実機端末を使ったテストについて、実際のテストフローや利用しているツールなどを簡単にご紹介いたします。

手動テストについて

QAチームで行うテストには大きく分けて手動と自動の2パターンがあります。当然のことですが、手動テストは人力で行う単純作業の繰り返しになるので、疲れて集中力がなくなってくると、間違った結果を記入するなどのヒューマンエラーが発生する可能性が高くなります。人間、誰しも長時間の単純作業はストレスとなりますので、全てのテストを手動で行うことは難しいですが、手動テストと自動テストを使い分けることで効率よくテストを行うようにしています。

手動テストで行うものは、自動テストでは組みにくい特殊な操作や設定が複雑なテストを行うことが多いです。
手動で行うテストの例
・音楽再生中に、動画広告が再生されたときのテスト
・クラッシュログや通信内容をもとに、該当箇所をピンポイントで調査するテスト

手作業での地道な作業ですが、テストをしながら発見することができるプロダクトの改善アイデアや効率の良いテスト方法などを日々話し合い、品質向上に努めています。

自動テストについて

手動テストとは逆に、単純操作を繰り返すような長時間に及ぶテストは自動テストツールを活用します。
一言で「自動テスト」と言っても、開発フェーズごとにその内容は異なるかと思いますが、ここでは、「SDKを組み込んだサンプルアプリの動作を確認するテスト(システムテスト、総合テストと呼ばれる段階に近い)」について説明していきます。

▼Android端末のテストの様子

上記のように、自動テストは専用のテストプログラムをインストールしたPCにテスト対象のスマートフォンを繋げ、画面を触らずにPC側からスマートフォンを動かして実施しています。
なお、自動テストにはメリットもありますが、デメリットもあるので、テスト内容に応じて自動テストと手動テストを使い分ける必要があります。

メリット
◎単純な動作の繰り返しを長時間・複数回、連続でテストすることが可能
◎動作の合間に必要な記録や画像を残し、分析データとしての利用が可能
◎上記を手動で実施した場合と比較して、ヒューマンエラーがない
◎動画広告の場合、再生が完了するまで待つ必要があり、その間は人員が拘束されない
◎複数の端末で同時に同じ内容のテストを実施することが可能

デメリット
☓個別に設定の変更が必要なケースでは設定のコストが割に合わないケースがある
☓想定していない挙動への対応が苦手(レポートから発見する必要がある)
☓導入(テストの開発)にあたり、準備期間がある程度必要となる
☓テスト対象やテスト環境のアップデートの際に対応が必要になる

Appuimを活用した自動テスト

自動テストは、オープンソースのモバイルテスト自動化ツール「Appium」(http://appium.io/)をベースに行っています。スマートフォンアプリ開発者向けに提供されている自動テストツールは他にもいくつかの種類があるなかで、Appiumを選択した理由は3つあります。

Appiumを選択した理由
1.既存のプロダクトに手を加えずにテストが実行できる(テストのための開発中のコードに組み込む必要がない)
2.AndroidとiOSの両方に対応している
3.海外での利用事例が多かった

QAチームより補足:
※Appiumをドライブするためのテストスクリプトを記述する言語は、Rubyを選択しました。これは、appium_libというライブラリの存在とブロックでループを扱う際の記述のしやすさ、OSXへの導入のしやすさなどを考慮した結果です。
※テスト内容が広告の表示およびデータ記録、画面キャプチャの記録といった単純なものだったことと、必要なテストパターンが一種類だったため、最初は自動化したテストを動作させることを優先し、Cucumberなどのテスト補助ツール的なものは採用しませんでした(今後テストのパターンが多様化した場合や環境の汎用化の際には再検討します)
※「Selenium Grid」を使用したWebベースの自動テスト環境も準備中です。
※Unity製のアプリではAppiumが利用できないので、Appuimで構築したテスト環境のなかで使用されているコマンド(AndroidであればADBコマンドなど)からヒントを得て、独自にテスト環境を構築しています。

苦労したポイント

色々と試行錯誤をしていくなかで、Appuimを活用したテスト環境の構築ノウハウは少しずつ蓄積されてきましたが、苦労したポイントもいくつかありました。

①情報が少なく、古い
Appiumの利点はさまざまなプログラム言語に対応していることだと当初は思ったのですが、いざテストを記述してみると、それが逆に災いして、他の言語での動作報告の情報を参考に、推測しながらコードを書き、挙動を確認するという効率の悪い作業の繰り返しとなりました。
また、情報の質においても、環境構築とサンプルを動作させてみただけといった情報がほとんどで、それ以降のステップへ進むための情報はなかなか見つけられませんでした。
最終的にはそれまでに得た情報を元に、公式サイトのリファレンスを参照して独自に環境を組み上げる必要があります。

②対象バージョンにより異なる挙動への対応
Appiumの新しいバージョンでは、IDやボタン名などで操作対象を特定することができますが、特定できないケース(古いOSバージョンやアプリの構造的な問題)では、最終的に座標を指定してイベントを送り込む必要があり、それが動作しない場合、問題特定(座標なのか、その他の問題なのか)がしづらく、対応が難しかったです。

③エラーの原因特定
Appiumは多くのツールを必要として動作し、また自らもサーバーとなって端末を操作しているため、エラーでテストが中断した場合、エラーの原因を特定するのが困難なケースが初期段階で多く発生しました。
これらの原因把握のためにログの出力設定や、コードの追加が必須であり、そのようなコードが、実際のテストのためのコードよりも多くなってしまい、テストコードが読みづらくなっているのが課題です。

④複数端末同時テスト
複数端末を同時にPCに接続してテストする環境の構築においては、少ない情報(PCのリソース状況のログや、複数端末の区別をどのようにつけるかなどのネットの情報など)から推測しながらの構築となりました。
また、仕様上の限界はないハズでも、実際にテストを実施した際には、さまざまな要因(主にリソース、まれに端末の要因、構築したプログラムの制限など)でテストが実行不能になるため、テストを繰り返すなかで限界を探っていく必要がありました。
現在では、これまでの経験に基づきテストの実施計画をたてることで、意図しないテスト中断により、期待した結果が得られないといった状況は少なくなりました。

⑤テスト結果の集計・途中経過の把握
Appiumができることは端末の遠隔操作・画面キャプチャの取得・ログの保存です。
取得したログや画面キャプチャを見やすい形に処理して、整理・保存するための環境を別途用意する必要があります。
QAチームではテスト実行後、シェルスクリプトにより、ログと画面キャプチャを処理し、集計結果をHTMLとして出力します。
レポート結果はGoogleスプレッドシートと部内のWebサーバーにて参照できるようにしています。

また、テスト結果ログの出力中でも経過を確認できるように改善したり、社内で活用しているチャットツール「Slack」へbotによるテスト結果の投稿を行う対応も行いました。

テスト結果の例:
▼実行内容

▼集計結果

ロードマップ

自動テストのブラッシュアップ
Appiumの自動テストに関しては、現在の環境をブラッシュアップし、
・動作環境の汎用化
※スクリプトを起動するのではなく、Webやアプリから実行できるようにする
・再利用可能なパーツへの仕分け(ライブラリ化、コードの整理)
・PCから操作困難な端末への対応
※物理的な自動テストツール(プロッタ的なハードウェアなど)の開発
・リモートによるテストの管理や運用(テスト再起動など)
・画像認識などによる操作精度の向上
などしていきたいと考えております。

動画クリエイティブ解析・CI
QAチームとしては、
・不適切な広告が紛れ込まないよう、動画内容を解析して素早く検知する仕組みの構築
・最新コードがPUSHされたら自動でビルドして、端末に配布
など、より効率的ないわゆるCI(継続的インテグレーション)環境の実現をしていきたいと考えております。

また、これまで構築したツールを社内の多くのケースで再利用・応用できるようブラッシュアップおよび情報共有も怠らないようしていきます。

今後も、実機端末のテスト結果につきましては、最新SDKの端末リストを各OSごとに公表していますのでご参考ください。
▼Android
https://ad-generation.jp/support/help/faqs/rewardedvideoad#testlist_android
▼iOS
https://ad-generation.jp/support/help/faqs/rewardedvideoad#testlist_ios

まとめ
以上、QAチームによる実機端末をつかった手動/自動テスト体制について、実際のフローやツールなどを含めてご紹介いたしました。
今後も人員の追加やテスト環境のブラッシュアップを行い、さらなる品質管理体制の強化に取り組んでいく予定です。
引き続き、多くのメディア様に安心してご利用いただけるプロダクトをご提供できるよう、尽力してまいりますので、今後ともAd Generation(アドジェネ)をどうぞよろしくおねがいします。
Ad Generation
Ad Generation スマートフォン特化型広告配信SSPサービス「Ad Generation(アドジェネ)」は、スマホサイト・アプリの広告収益を自動最大化する【制約のない】無料アドサーバーです。

CONTACT お問い合わせ

  • Goolgeplus
  • はてな