こんにちは、freeeで支出管理領域のQAマネージャーをしているrenです。
今回は、支出管理領域のCIパイプラインにJust in Time Test(JiT Test)という仕組みを試験的に導入している話をします。
PR作成時に、LLMを活用して生成するジャストインタイムなテストのことを指します。
MetaのMark Harman、Peter O'Hearn、Shubho Senguptaらが提唱している「Assured LLM-Based Software Testing」という研究領域に基づくものです。
論文「Harden and Catch for Just-in-Time Assured LLM-Based Software Testing: Open Research Challenges」では、PRが提出された際に生成される「JiTTest(Just-in-Time Test)」として定義されており、将来のリグレッションから保護する「hardening test」と、新しい機能の不具合やリグレッションを捕捉する「catching test」という概念が提案されています。特に「Catching JiTTest Challenge」として、バグのあるPRに対して欠陥を発見できるテストを自動生成する研究課題が提起されており、本番環境に欠陥が混入する前の最後の機会でテストを生成することの重要性が強調されています。
今回は論文で提案されている仕組みを始めやすいように簡略化し、GitHub Actions上でGooseを動かすことによるPRごとのテスト生成を実現しました。テスト生成に関するインストラクションはGoose Recipeとして作成しており、このレシピの大部分は、支出管理領域で蓄積したテスト設計ガイドライン*1の内容をベースにしています。
また、freeeの一部プロダクトではQAエンジニアのテスト成果物をGitHubで管理しているため、テスト生成のための詳細分析プロセスでテスト設計情報を参照するようにしています。これにより、テスト設計の内容がGooseによるテスト生成に反映されるようになります。
システムは以下のタイミングで起動されます:
@jittestという文言が含まれるPRレビューコメントが提出されたとき
正常に起動された場合は、以下のようなコメントがPRに投稿されます。

まだ導入したばかりですが、すでに以下の点で発見がありました。
現在はPRとコードベースを読み取るシンプルな形ですが、今後以下のような改善を検討しています:
上述したAssured LLMSTでは、以下のような有用なアイデアが提案されています:
これらの手法も各プロダクトの課題に沿う形で導入していければと思います。
freeeではQAエンジニアとして一緒に働く仲間を募集していますので、興味を持っていただいた方はぜひご応募ください!
*1:ソフトウェアアーキテクチャに基づいた自動テスト戦略と実装ガイドライン:https://developers.freee.co.jp/entry/testing-strategy-based-on-software-architecture
引用をストックしました
引用するにはまずログインしてください
引用をストックできませんでした。再度お試しください
限定公開記事のため引用できません。