# Henka：テストのためのテスト

テストが全部通れば、テストが通ったことはわかります。でも、コードが間違っていたらテストが失敗するかどうかはわかりません。**Henka**（変化）はそこを確かめます。コードをわざと小さく 1 か所ずつ壊し、そのたびにテストを実行して、どのテストも捕まえなかった変更をすべて一覧にします。行カバレッジ 94% の debuff のエフェクト用パッケージでは、Henka の 266 個の変更のうち 132 個がすべてのテストを通りました。その中には、全部のパーティクルを逆向きに飛ばす変更もあります（[見つかったもの](/ja/research/what-coverage-missed)）。

```bash
npm install -D henka
npx henka
```

```
✔ caught   src/score.ts:3:15 hits * 2 → hits / 2
✖ missed   src/score.ts:2:12 hits  runMyTests(),
  mutants: () => [{ id: "timeout=0", label: "request timeout 30 s → 0", expect: "noticed" }],
  run: (mutant) => runMyTests({ apply: mutant.id }),
});
writeOut(report, "mutants.out");
```

## 制限 {#limits}

- `npx henka` には Vitest が必要です。debuff のゲームは Keiko でテストするので、今はパラメータの変更だけを使えます。Keiko 経由のソースの変更は次に取り組みます。
- 小さなパッケージで数百個の変更を作り、数分かかります。同じ負荷でほかのツールと比べる測定はまだしていないので、速さについては何も主張しません。
- テストからは違いが見えない変更もあります。そうした行には `// henka-skip` を付けます。

Henka は MIT ライセンスで、ランタイム依存はありません。次のブランチで試してみてください。

```bash
npx henka --since main
```