IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

グーグルのクラウドを支えるテクノロジー

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

第79回 CI環境のテストを安全に効率化するアルゴリズム(パート2) (中井悦司) 2020年4月

はじめに

 前回に続いて、2019年に公開された論文「Assessing Transition-based Test Selection Algorithms at Google」を紹介します。今回は、Flaky(不安定な)テストの影響、そして、実際のアルゴリズムの評価結果を紹介します。

Flaky(不安定な)テストの影響

 前回は、テストデータの構成とアルゴリズムの評価方法の概要を説明しました。まず、テストデータについては、前回の図1のように、安全にスキップできるテスト(「Safe」フラグがついたもの)とスキップしてはいけないテスト(「Unsafe/Maybe Unsafe」フラグがついたもの)がありました。そして、それぞれのコミットに含まれるテストの中で、安全にスキップできるもの、すなわち、Safeフラグがついたものを発見するアルゴリズムについて、その性能を評価していきます。この際、前回の図2のように、すべてのコミットの中で、「Safeフラグがついたテストだけをスキップしたコミット」の割合を計算するわけですが、ここで言う「すべてのコミット」の範囲を明確にする必要があります。
 この際に問題なるのが「Flakyテスト」と呼ばれる不安定なテストの影響です。テストターゲットの中には、関連するコードを変更していないにも関わらず、タイミングによって、成功したり失敗したりするテストがあります。これは、テスト内容そのものに問題があるか、もしくは、コード以外の部分に失敗の原因があるものですので、コード変更のコミットごとにテストしても意味がありません。前述のテストデータの中には、このような不安定なテスト(Flakyテスト)が含まれており、これは、アルゴリズム評価の際に余計なノイズとなります。
 冒頭の論文では、Flakyテストの影響を表す例として、図1の結果が示されています。これは、ある特定のアルゴリズムで、すべてのテストターゲットに対してスキップする順序づけを行い、実際にスキップする割合を増やした際に、誤って「Unsafe/Maybe Unsafe」のターゲットをスキップしたコミットがどのように増えるかを示しています。波線は、Flakyテストを含む場合で、実践はFlakyテストを除外した場合です。

fig01

図1 Flakyテストの影響を示すグラフ(論文より抜粋)

 Flakyテストを含む場合、すべてのターゲットをスキップすると(横軸が100%の場合)、縦軸の値は3.8%になります。これは、すべてのコミットの中で、「Unsafe/Maybe Unsafe」のターゲットを含むものが3.8%あるということです。一方、Flakyテストを除外すると、この割合は1.4%まで下がります。横軸の値を変化させると、縦軸の値も呼応して変化しますが、変化の様子も波線と実線で異なります。波線の方は対数的な変化ですが、実線の方は直線に近い変化になっています。これは、Flakyテストによって、アルゴリズムの性能が過小評価されるだけではなく、アルゴリズムの性質そのものの読み取りにも影響を与える事を意味します。
 この論文では、アルゴリズムの本質的な性質を調べるために、過去データの中からFlakyテストの結果を除外しています。また、現実のテスト環境においても、Flakyテストを検知する仕組みを導入して、通常のテストとは別に対応することが重要になります。Googleでは、Flakyテストを検出するための専用の仕組みが用意されていることが論文内で紹介されています。

アルゴリズムの評価結果

 先ほどの図1から分かるように、Flakyテストを除外した場合、すべてのコミットの中で「Unsafe/Maybe Unsafe」のターゲットを含むものは1.4%です。逆に言うと、98.6%のコミットは、Safeフラグがついたターゲット、すなわち、安全にスキップできるターゲットだけを含んでおり、これらを用いてもアルゴリズムの性能評価にはなりません。この論文では、Falkyテストの結果に加えて、Safeフラグのターゲットだけを含むコミットもテストデータから除外しています。
 そして、これらの前提のもとに得られた評価結果の1つが、図2のグラフになります。

fig02

図2 さまざまなアルゴリズムを比較した結果(論文より抜粋)

 これは、前回の図2に示したように、「Safeフラグがついたターゲットだけがスキップされたコミット」の割合を示しており、この値が大きいほど優秀なアルゴリズムになります。スキップする割合(横軸)を増やしていくと、100%から0%に向かって減少していきますが、なるべく緩やかに変化する方がよいわけです。緑色のラインが理想的なアルゴリズムの場合で、オレンジ色のラインが最悪のケースに対応します。
 実際のアルゴリズムの結果は、これらの中間に位置することになりますが、このグラフを見ると「Author count」と「Affected count」の2つのアルゴリズムが他とくらべてよい成績を残していることがわかります。次回は、このグラフに示されたアルゴリズムについて、それぞれの内容を具体的に説明していきます。

次回予告

 今回は、2019年に公開された論文「Assessing Transition-based Test Selection Algorithms at Google」に基づいて、Flaky(不安定な)テストを除外することの重要性を示すデータ、そして、さまざまなアルゴリズムの性能比較結果を紹介しました。次回は、それぞれのアルゴリズムの中身を解説したいと思います。

Disclaimer:この記事は個人的なものです。ここで述べられていることは私の個人的な意見に基づくものであり、私の雇用者には関係はありません。

 


 

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes