🚀

Launchable Advent Calendar 9日目 - observation mode

2022/12/09に公開

Launchableの各機能の利用方法を紹介する Launchable Advent Calendar 9日目です。

はじめに

9日目はSubsetのオプションのひとつ --observation オプションとObserveページついて紹介します。

Observationオプション

Day 6でPredictive Test Selection(PTS)とsubsetコマンドについて紹介しました。
PTSは便利なのですがいざ導入するとなるとPTSを導入してどれくらい効果があるのか事前に検証してから導入したい。という要望がありました。

それらの課題を解決するのが --observation オプション通称Observationモードです。
このオプションを使用することでPTSの効果がどれぐらいなのか、PTSで失敗するテストをきちんと選べているのかを安全に確認できます。

使用方法はsubsetのコマンドに --observation オプションを指定するだけです。

$ launchable subset --target 20% --observation maven src/test/java/ > launchable-subset.txt
Launchable created subset 392262 for build try-observation-mode (test session 1614299) in workspace konboi/advent-calendar-2022
(This test session is under observation mode)

|           |   Candidates |   Estimated duration (%) |   Estimated duration (min) |
|-----------|--------------|--------------------------|----------------------------|
| Subset    |            2 |                  19.6078 |                  0.0166667 |
| Remainder |            2 |                  80.3922 |                  0.0683333 |
|           |              |                          |                            |
| Total     |            4 |                 100      |                  0.085     |

Run `launchable inspect subset --subset-id 392262` to view full subset details

$ cat launchable-subset.txt
example.MulTest
example.AddTest
example.DivTest
example.SubTest

Github Actionsでの例

Day 6の設定にObservationモードを適用してみます。併せてsubsetの値も変更してみます。

--observation オプションを追加し --target の値を80%から20%に変更してみました。

ci.yaml
       - name: record build
         run: launchable record build --name ${GITHUB_RUN_ID}
       - name: subset
-        run: launchable subset --target 80% maven src/test/java > launchable-subset.txt
+        run: launchable subset --target 20% --observation maven src/test/java > launchable-subset.txt
       - name: Run tests
         run: mvn test -Dsurefire.includesFile=launchable-subset.txt
       - name: launchable record tests

サンプルPR

Observeページ

--observation オプションを設定してsubset,record testsが実行できたらObserveページでPTSの効果を確認してみましょう。

Observeページは左サイドバー Predictive Test Selection > Observe から遷移できます。

アクセスするとこの様なページが表示されます。

Observeページでは、どのようにSubsetを行ったか、何件がSubset(PTSで選ばれた集まり)で何件がRest(PTSに選ばれなかった集まり)だったか、実際のテストの結果の内訳等を確認できます。

試しに MulTest.java のテストをわざと失敗させてみます。

MulTest.java
 public class MulTest {
     @Test
     public void calc() {
-        assertThat(new Mul().calc(8,2), is(16));
+        assertThat(new Mul().calc(8,2), is(17));
     }
 }

この実行では MulTest.java は本来であればSubsetに含まれておりその失敗を検出できていた。ということで緑色のラベルが表示されています。

逆に失敗するテストがPTS検出できていない場合には赤いラベルが表示されます。

このように --observation オプションとObserveページを使ってPTSの効果を安全に確認できます。

さいごに

本日はsubsetコマンドの1オプション --observation オプションとObserveページおよび見方について紹介しました。
10日目はAnalyze PageとIntegration Issueについて紹介します。

Discussion