今日読んだのはこちら。
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.
読もうと思ったきっかけ、参照していたもの
だいぶ前に読みたいと思ってストックしておいた。
メモ
論文の概要
- iOSアプリからAndroidアプリへとGUIテストを移行する仕組み、TestMigを考案した
- ストアにある5つのアプリに対して評価し、GUIイベントの80.2%を正しく変換、移行後のAndroidテストケースは元となるiOSのテストケースとほぼ同じステートメントカバレッジ(60%前後)を達成した
背景
- iOSとAndroid、同じアプリが同時に開発・リリースされないことが多い
- 論文中では、iOSのほうが先にリリースされるケースが多いとされている
- iOSのアプリとGUIテストから、AndroidむけのGUIテストが生成できるとうれしい
- しかし課題もある
- GUIのデザインが異なる
- GUIコントロールが同一でなく、マッピングが必要
手法
TestMigの手法の概要は上図の通り。
入力としてGUIテストを含むiOSアプリと、そのAndroid版を受け取る。 RecorderがiOS向けGUIテストの実行からイベントトレースを取得する。 Converterが、Android向けのイベントに変換し、Exploreがアプリを探索する。
この過程での工夫として、例えばUIコントロール間のマッピングにといて、UI要素をいくつかのカテゴリ分けして処理している。 例えばテキストボックスやデートピッカーなど編集可能なもの、ボタンやメニューアイテムなどクリック可能なもの、などのくくり。
探索時は、下図のようにiOS側のアクションがAndroid側のアクションと1対1対応しておらず、 最大で3アクション程度に対応している場合が多いとわかった。
結果
5つのオープンソースのアプリを用いて評価した。
以下がRQと結果。
- RQ1:GUIテストの移行において、どの程度有効か
- アプリによって、どの程度のテストあるいはイベントを移行できるかは異なった。
- しかし、すべてのテストを完全にもしくは部分的に移行できた。
- 3つのアプリは移行率は80%以上。(テスト、イベントの割合)
- これはiOSとAndroidで同じ機能を有しているから
- 残りは60%~70%程度
- これはiOSにはあるがAndroidにはない機能があるため、移行率が低くなっている
- しかし、無い機能のテストは不要なので、移行の有効性を損なうものではない
- RQ2:トランスダクション長がどの程度効果に影響するか
- 移行に成功したiOSのGUIイベントのほとんどは、Androidの最大3のGUIイベントにマッピングされる
- 1対1のイベントマッピングでは不十分で、トランスダクションに基づく探索が有効であると言える
- RQ3:移行に失敗する場合の原因はなにか
- 今回は116テスト中26テストを完全に移行できなかった
- 主な原因は3つ
- 機能が無い
- システムイベントをシミュレートした(TestMigでは扱えないため)
- 類似のUIイベント(例えばリーディングリストという機能があるアプリで、iOSのシステム側のリーディングリストと混同された、など)
感想
まずは(いつも言ってる気がするけど)面白い発想だなと感じた。iOSのほうが先に出るから、は若干こじつけのような気がしなくもないが・・・ 同手法をAndroid→iOSでやろうとすると精度が落ちそうな予感がする。
これも、繰り返し使える、たとえばiOSアプリに改修を加えた際に再度TestMigを動かしてAndroidのテストを生成させるようなことができると便利なのかもしれない。おそらくテストケースの差分のみを対象に使えば実現できるはず。
他の研究と同じで、生成したテストが仮にそのまま動かなかったとしても「ゼロから作るよりはマシ」という点がある。
テストオラクル(アサーション)は移行できない、は現実的には不足か・・・。難しいのもわかる。
次に気になっているもの
本論文で参照していたのでこれを。
引用数けっこう多い。