今日読んだのはこちら。
Shi, August, Peiyuan Zhao, and Darko Marinov. 2019. “Understanding and Improving Regression Test Selection in Continuous Integration.” In 2019 IEEE 30th International Symposium on Software Reliability Engineering (ISSRE). IEEE. https://doi.org/10.1109/issre.2019.00031.
読もうと思ったきっかけ、参照していたもの
A Survey of Flaky Tests | ACM Transactions on Software Engineering and Methodologyを先に読み始めて、参照されていたので気になった。
※他でも参照してたはずなんだけど忘れてしまった
メモ
論文の概要
- 回帰テストは広く用いられるが、実行コストがかかる場合がある
- これを削減するため、Regression Test Selection(回帰テスト選択、RTS)という手法がある
- TravisCIにおいて、2つのRTS、モジュールレベルとクラスレベルを比較し、両者のハイブリッドRTSを開発・評価した
- 結果、RTSはテストの実行時間短縮だけでなくFlakyテスト回避にも効果があった
背景
- 回帰テストは広く用いられているが、以下課題がある
- コードに変更を加えるたびにすべて実行(RetestAll)していると時間がかかる
- これをクラウド上で実行すると、クラウドリソースがかかる(すなわち金銭的コストがかかる)
- Flakyになる場合がある
- RTSという技術がある。これは、回帰テストのうち、その時点のコード変更で影響をうけるテストのみを実行する手法。
- 開発現場と研究の現場ではRTSの粒度にギャップがある。
- 開発現場では、都度全テストを実行する(RetestAll)か、モジュールレベルでの依存関係を調べて関係箇所を実行することが多い
- ここで言っているモジュールはmavenの文脈でのモジュール。クラスやパッケージよりも大きな規模の概念。
- 開発現場では、都度全テストを実行する(RetestAll)か、モジュールレベルでの依存関係を調べて関係箇所を実行することが多い
手法
- 以下のRTSを比較した
- モジュールレベルのRTS(ツール名GIB)
- クラスレベルのRTS(ツール名Ekstazi)
- 本研究で新しく提案する、ハイブリッドのRTS(ツール名GIBstazi)
- GitHubからOSSのJavaプロジェクトをもってきて(スター数やプロジェクト規模などを加味)各RTS手法の効率などを分析
結果
ResearchQuestionは以下
- RQ1:それぞれのRTSについて、選択したテスト、テスト実行時間、CIの総ビルド時間を比較するとどんな結果になるか
- RQ2:RTSはCIで失敗したテストをどの程度選ぶか
RQ1については以下の通り
全体として、GIB、Ekstazi、GIBstaziはそれぞれ59.1%、35.2%、42.8%のテストを選択し、86.6%、65.5%、 59.4%のテスト時間を取り、77.3%、77.9%、72.2%の時間を要しています。意外なことに、GIBstaziは当初の予想とは異なり、 最も高速な手法であるように見えます。しかし、ある手法では 多くのジョブが合格し、対応するジョブはRetestAllでは失敗し ていることがわかります。
基本的に、GIBは絞り込みが荒いので対象となるテストも多くなるし、Ekstaziは絞り込みが細かいので対象テストも少なくなる。そしてハイブリッドなGIBstaziはその中間。この予想は結果に現れていた。ただ、ビルド時間のみは予想に反してハイブリッドなRTSが最も高速となった。
RQ2については、FlakyでないFail(=バグかもしれないもの)を見逃さなかった、という結果になっている。
※ただ、ここの理解が正直甘いので、RTSがFlakyそうなテストを対象としないこと、その精度が高いことは本当にいいのか?Flakyが見つかるのが遅くなるのでは?と思ったりする。他の論文も合わせて多方面から理解を高めたい。
感想
回帰テストのケースを絞る手法は前々から興味があったので、この論文ではさわりの部分しか理解できなかったけれども、もう少し深掘りしたい。たぶん仕事の現場でも使えるポイントがあるはず。
次に気になっているもの
ということで、次はもうひとつRTSがらみのを読んでみる。
Regression test selection for Java software | ACM SIGPLAN Notices