stryker-agent-reporter
stryker-agent-reporterv0.3.0Apache-2.0
A Stryker reporter that writes JSON Lines a coding agent can act on directly
インストール
npm install stryker-agent-reporter- GitHub のソースコード
- 使っているツール: archstrict, nukadoko
- このツールを使っているツール: archstrict, autospawn, finderscope, firstlight, polylinedb, solarsql
stryker-agent-reporter は、コーディングエージェントのための Stryker レポーターです。
1 行に 1 つの JSON オブジェクトを書く JSON Lines を出力するので、エージェントは結果を 1 行ずつ読み、grep や jq で絞り込めます。
生き残ったミュータントの行には、その場所、元のテキストと置き換え後のテキスト、そのまま適用できるパッチ、再実行コマンドが入ります。
エージェントは、これらを Stryker 本体のレポートから改めて割り出す必要がありません。
ほかに convert と gate の 2 つのコマンドがあり、どちらもこの出力だけをもとに動きます。
- ミュータントごとに 1 行。
reports/mutation/agent.jsonlはrunの行で始まり、変異させたファイルごとのscopeの行、対処すべきミュータントごとの行、どのミュータントも kill しなかったテストごとのtestWithoutKillsの行が続きます。testWithoutKillsの行のcoveredMutantsは、そのテストが到達した、この実行のミュータントの数です。 これで、ミュータントに対して実行されたのに 1 つも kill しなかったテストと、--mutateで絞った範囲のミュータントに一度も到達しなかったテストを区別できます。 最後にsummaryの行が来るので、この行がないファイルは、実行が最後まで終わらなかったことを示します。 - 修正のための材料。
survivorの行には、git apply --unidiff-zeroでそのまま適用できるpatchが付きます。 そのファイルを再実行するrerunと、そのミュータントだけを再実行するrerunExactも付きます。 - 安定したキー。
各ミュータントの
keyは、行番号ではなく、そのミュータント自身のソースのテキストから作ります。 そのため、ファイルのほかの場所を編集してもkeyは変わりません。scopeの行にはそのファイルのすべてのキーが並ぶので、kill されたミュータントと、狭いmutateの範囲から外れたミュータントを区別できます。 - 実行中に読める結果。
レポーターは、完了したミュータントを 1 つずつ
reports/mutation/agent.partial.jsonlに追記します。 そのため、Stryker の実行中でもtail -fで生き残ったミュータントを確認できます。 - プルリクエストのゲート。
stryker-agent-reporter gate --since origin/main --format githubは、変更された行だけを検査し、GitHub Actions でその行にアノテーションを付けます。 終了コード 1 は、生き残ったミュータントか、カバーされていないミュータントが残っていることを表します。 終了コード 3 は測定の失敗を表し、テストの不足が証明されたわけではありません。--baseline <file>を付けると、新たに生き残ったミュータントがあるときだけゲートが失敗します。 - 保存済みのレポート。
stryker-agent-reporter convertは、保存済みのmutation.jsonを同じ JSON Lines に変換します。
エージェントでの使い方
Section titled “エージェントでの使い方”agentレポーターを指定して Stryker を実行し、実行中はagent.partial.jsonlを読みます。- 生き残ったミュータントを抽出します。
たとえば
jq -c 'select(.kind=="survivor")' reports/mutation/agent.jsonlを使います。 - 生き残ったミュータントごとに
original、replacement、patchを読んで変更を加え、そのrerunExactのコマンドで、そのミュータントをもう一度テストします。 - CI では
gate --sinceを実行し、プルリクエストが、自分で変更した行のミュータントでだけ失敗するようにします。
npm install --save-dev stryker-agent-reporterStryker の設定に agent レポーターを加えます。
Stryker の既定の plugins は @stryker-mutator/* しか読み込まないので、このパッケージも明示的に指定します。
{ "reporters": ["clear-text", "agent"], "plugins": ["@stryker-mutator/*", "stryker-agent-reporter"]}