2

一个例子:你有一个大型复杂网页,它以某种方式被破坏,比如说一个按钮在它应该是不可点击的时候是不可点击的,并且曾经是。您可以使用 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),它可以尝试每次进行较小的更改,如果它一直在工作或不工作,它可能会增加到更大更残酷的削减。

而不是作为提示,您可以通过某种自动方式来测试它处于 3 个条件中的哪一个。

那么这样的事情是否存在于任何问题领域?是否有任何通用框架来构建类似的东西,您可以将新类型的文件/域插入其中?

4

0 回答 0