今日読んだのはこちら。

Hu, Gang, Linjie Zhu, and Junfeng Yang. 2018. “AppFlow: Using Machine Learning to Synthesize Robust, Reusable UI Tests.” In Proceedings of the 2018 26th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering, 269–82. ESEC/FSE 2018. New York, NY, USA: Association for Computing Machinery.

読もうと思ったきっかけ、参照していたもの

先日読んだ“GUI Test Transfer from Web to Android.”から。

メモ

論文の概要

  • 機械学習を用いて、あるカテゴリのアプリとそのテストから、同じカテゴリの違うアプリに対してUIテストを合成する仕組みAppFlowを作った
    • 既存アプリとそのテスト(汎用的な記述)から、操作とその対象の意味を学習し、別のアプリ(異なるUI要素)に対して同じテストを行う
  • 新しいアプリのテストの労力を最大90%削減できた
  • ストアに公開されているアプリのバグも見つけた

背景

  • GUIテストはコストがかかり、エラーが起きやすい=お守りが必要
  • UIテストでは類似のユーザーフローを実装しているアプリがあるため、テストを再利用する機械が十分ある

手法

Image from Gyazo

上が概要図。

アプリの画面要素について、

  • スクリーンショット
  • OCR
  • クラス情報(UIオブジェクト情報)

を見て多面的に判断。

画面要素を区分して、元アプリとテスト合成対象アプリとの間で対応付けを探る。ここに対しては、人間が機械学習の結果を確認して、必要に応じて正解・不正解を教える。(それ用のGUIアプリも作ったとのこと)

テスト自体はGherkinで記載。

結果

以下がRQと結果。

  • RQ1:現実世界のアプリ間で共有される量
    • ショッピングアプリでは61.3%、ニュースアプリでは30.2%のテストを再利用できた。
  • RQ2:画面やウィジェットの判定精度
    • 画面認識精度が87.3%、ウィジェット認識精度は全体平均で87.8%と高い。
    • サンプル数が多いほうが認識精度が上がる。
  • RQ3:同じアプリの違うバージョンでの精度
    • はっきりした数値がない・・・。ロバストだ、と説明されている。
  • RQ4:テストを作る際の手作業をどのくらい削減できるか
    • 推定だが、Calabashで作成するときと比べて9.3%
  • RQ5:テストを自動化するコストをどのくらい削減できるのか
    • AppFlowを使うと46%のテストを自動作成できた
  • RQ6:バグ検出における有効性
    • ストア公開されているアプリのバグを8つ発見
    • うち7つは非クラッシュバグ、つまりテストの意味を設定できていなければ検出できないもの

感想

手動であっても「テストケース再利用」みたいな話はよくされるので、自動テストでそれができるというのは夢がある話だなと素直に思った。 理屈が理解しきれなかったところもあるので、またいつか。

自動テストの操作をモジュール化して組み合わせ(これを合成といっている)るという発想は素直な理屈のように思う。

次に気になっているもの

前にストックしておいた類似の論文を。

Qin, Xue, Hao Zhong, and Xiaoyin Wang. 2019. “TestMig: Migrating GUI Test Cases from iOS to Android.” In Proceedings of the 28th ACM SIGSOFT International Symposium on Software Testing and Analysis, 284–95. ISSTA 2019. New York, NY, USA: Association for Computing Machinery.