もうすでにご存じの方も多いと思いますが、Jenkins開発者の川口さんは、現在Jenkins関連のサービスを展開しているCloudbeesの一線を退き、新たなスタートアップであるLaunchableを立ち上げておられます。
今日(日本時間8月7日 午前2時)に、そのWebinarがあったので、聞いてみました。
そもそもLaunchable は何を売っているのか
もともとの川口さんのBlogなどでは、機械学習とテストを組み合わせた事業を行う、ということのみが語られていましたが、その後の詳細については、実はすでにPublickeyでの既報があります。
機械学習xテスト で思いつきやすいのが、テストの生成やメンテナンスそのものを(半)自動化してくれるようなソリューションです。例えばAutifyなんかは、テストのメンテナンスを機械学習を通じて行うことがキーのソリューションです。
Launchable が行っているのは、それとはちょっと方向性が違います。先程のPublickeyから引用すると、以下のような感じです。
いま取り組んでいる製品というのは、開発者がコードに加えた変更に敏感なテストを探し当てて割り当てる、というものです。するとテストを全部走らせなくても、10分の1程度のテストを走らせるだけで十分なフィードバックをテストから得られるようにする、ということをやっています。
上記のコンセプトはWebinarからも同一に思えました。ただ、コンセプトや実際の運用イメージなどが語られていたので、そのあたりを共有しようと思います。
Launchableのキーメトリクス: TTFF(Time to First Failure)の最小化
TTFFというのは、「最初にテストが失敗するまでの時間」です。ちょっと違和感がある表現だと思いますが、テストで価値を生んでいるのは失敗するテストです。失敗してフィードバックが発生するからこそ、書いているテストに価値があります。常に成功するテストは、実は何も生み出しておらず、むしろそのテストにかかる時間が無駄ですらあるのです。
例えば、全体のテストを回すのに8時間かかる、みたいな状況になっているとしましょう。8時間のテストはコード変更のたびに実行するのは不可能ですから、よくある話としては夜間ビルドに回すことになります。
ということは、最悪の場合、朝に埋め込んだ欠陥がテストで判明するのは翌日の朝、みたいなことになります。
この場合プロセスにおけるTTFFは、12時間を超えてきます。
Lanchable はここに手を入れます。つまり、少量でも欠陥を抽出しやすいテストを全テストケースの中から選び出し、それを実行するのです。例えば、8時間(480分)のテストのうち、5%の実行で欠陥検出率が50%となるようなテストケースを機械学習により選び出せるとしましょう(ここがLaunchableのエンジンです!)。
5%ということは24分です。24分なら、30分ごとにテストを回すことができます。欠陥検出率は50%なので、TTFFの期待値は1時間となり、開発者は圧倒的に早いフィードバックを得ることができます。
Launchable の仕組み
もちろん詳細なアルゴリズムは企業秘密ですから明かしてもらえませんでしたが、モデルとして利用しているデータについては少し言及がありました。
面白いのは、ソースコードそのものの解析はしていない、というところです。解析しているのは、
- だれが、どのファイルを、どのくらい、変更したかの情報(≒ チェンジセット)
- Gitのコミット情報以上のことは収集しないそうです
- そのコミットの時点でテストを実行した場合、どのテストが失敗するか(= 欠陥を検出し機能するか)
という情報です。おそらく前者がインプット、後者が教師データとして機械学習に利用されるのでしょう(他にもあるとは思いますが)
ソースコードそのものを解析しないので、このモデル自体はプログラミング言語に依存しないものとなります。なのでLaunchableは幅広いプロジェクトに対して、適用可能性がある、ということを示唆しています。(もちろん、言語によって異なる事前学習モデルを用意するなどはあるような気はしますが)
どうやってLaunchable を使うのか
Lauchableは、テストに対するエージェントのように機能します。Lauchableに与えるのはGitのチェンジセット範囲(コミットレンジを指定したり、PRのマージコミットを指定したりするのでしょう)で、Launchableはそれを受けて実行すべきテストケースのリストを返してくれます。そのリストを見て、テストランナーが選択的にテストを実行する、という形です。
たしかにこの仕組なら、言語やテストフレームワークに依存せず、その外側から仕組を構築することができそうです。
で、どうやったら使えるの?
まだまだ初期フェーズなので、現状はコンサル的にプロジェクト分析を行ってもらい、プロジェクトごとの機械学習モデルを作成し、という風にテーラーメイドで適用する形になっているそうです。SaaS的な適用も将来的には行われるのでしょうが、まだそういった利用しやすいケースは直近ではなさそうです。
とはいえすでに大規模な自動テスト実行に疲弊している方は、一度コンタクト取る価値はあるのではないでしょうか!