一个例子:你有一个庞大的复杂网页,这个网页在某种程度上被打破了,比如一个按钮在它应该是的时候是不可点击的。您可以使用git bisect查找 时它已损坏,但我很好奇帮助您找到为什么它破坏的工具。在大型提交后它破坏的图像,或者您可能只有一个没有版本历史记录的网页。
通常要调试这样的事情,您需要经过以下过程将大型复杂页面缩减为最小的测试用例:
第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),那么它每次都可以尝试进行较小的更改,如果它一直在工作或不工作,它可能会匝道更大的残酷减少。
而不是一个提示,你可以通过一些自动方式来测试它所处的三个条件中的哪一个。
在任何问题域中都存在这样的事情吗?是否有任何通用框架可用于构建类似的东西,您可以将新类型的文件/域插入?