例: 大規模で複雑な Web ページが何らかの形で壊れているとします。たとえば、クリックできるはずのボタンがクリックできず、以前はクリックできなかったとします。git bisect を使用していつ壊れたかを調べることができますが、壊れた理由を見つけるのに役立つツールに興味があります。大規模なコミットの後に画像が破損したか、バージョン履歴のない Web ページしかない可能性があります。
通常、このようなものをデバッグするには、次のプロセスを実行して、大きく複雑なページを最小限のテスト ケースに減らします。
ステップ 1: コードから何かをランダムに削除すると、次のようになります。
a) バグはまだ存在するが、コードは以前よりも小さくなっている b) バグは存在せず、コードは以前よりも小さくなっている c) バグがあいまいである。つまり、機能/バグにとって重要であり、取り外せないので元に戻します
ステップ 2: 何も削除できなくなり、最小のテスト ケースが作成されるまで、コードの変更がどんどん小さくなっていくまで、すすいで繰り返します。
ランダムに何かを削除する場合は、ドメインを少なくとも表面的に認識している必要があります。たとえば、完全な css セレクターのみを削除するか、一致する html タグのペアのみを削除します。そうしないと、ほとんどすべての変更があいまいでロールバックされるため、実用的ではありません。
では、このようなツールは、どの問題領域にも存在するのでしょうか? 私は次のようなものを想像します:
> reduce file.html
Removed 10 html elements, does it (w)ork, (n)ot work or (c)an't tell?: w
Removed 4 html elements, does it (w)ork, (n)ot work or (c)an't tell?: c
Removed 5 css rules, does it (w)ork, (n)ot work or (c)an't tell?: n
Removed 3 html elements, does it (w)ork, (n)ot work or (c)an't tell?: w
Removed 2 html attributes, does it (w)ork, (n)ot work or (c)an't tell?: c
Removed 2 css declaration, does it (w)ork, (n)ot work or (c)an't tell?: a
Removed 1 html element, does it (w)ork, (n)ot work or (c)an't tell?: n
Removed 1 text node, does it (w)ork, (n)ot work or (c)an't tell?: n
Can't reduce anymore, reduced case is found: file.html.reduced
プロセスは各ステップで削減レベルを調整できるため、(c) が多数得られている場合は、毎回小さな変更を試みることができます。また、常に機能している場合や機能していない場合は、より大きな変更を行うことができます。より残忍な削減。
また、プロンプトの代わりに、3 つの条件のどれにあるかを自動的にテストする方法を渡すこともできます。
では、このようなものは問題のあるドメインに存在するのでしょうか? 新しいタイプのファイル/ドメインをプラグインできるようなものを構築するための一般的なフレームワークはありますか?