Launchable Advent Calendar 9日目 - observation mode
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%に変更してみました。
- 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
Observeページ
--observation
オプションを設定してsubset,record testsが実行できたらObserveページでPTSの効果を確認してみましょう。
Observeページは左サイドバー Predictive Test Selection > Observe
から遷移できます。
アクセスするとこの様なページが表示されます。
Observeページでは、どのようにSubsetを行ったか、何件がSubset(PTSで選ばれた集まり)で何件がRest(PTSに選ばれなかった集まり)だったか、実際のテストの結果の内訳等を確認できます。
試しに 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