我有一个功能,旨在查找应用程序搜索功能中的错误,generates a variable-length search string from the non-control UTF-8 possibilities。在此函数上运行pytest迭代,提交搜索的随机UTF-8字符串大约每500次搜索生成一次调试错误。
由于我可以抓住导致错误的每个字符串,我想确定那些真正引发错误的字符串中字符的最小子系列是什么。换句话说,(在pytest循环内部):
def fumble_towards_ecstasy(string_that_breaks):
# iterate over both length and content of the string
nugget = # minimum series of characters that break the search
return nugget
我应该将字符串切成两半并减少每一边并重新提交直到它失败,从它的(len() - 1)中选择随机字符然后如果没有发生错误则备份?蛮力组合?什么是最好的方法来解决这个问题?
感谢。
答案 0 :(得分:2)
如果存在导致失败的两个字符序列,则将字符串拆分为一半将失败,并且该序列恰好位于中间。每一半都成功,但合并的字符串失败。
这是一种可以找到局部最小值的算法:
请尝试依次删除每个字符。
答案 1 :(得分:1)
我使用“双方都是”的方法。拆分字符串将始终存在分解导致错误的子字符串的风险。我的方法是:
希望有所帮助!
答案 2 :(得分:0)
首先,值得注意的是,该解决方案可能不是唯一的,即可能存在两个或更多损坏的子串。
另一个建议(对Xavier和Mark的好答案)是运行递归方法。使用导致错误的有限字符串子集重复采样。一旦找到另一个错误,重复直到达到最小子字符串。这种方法足够强大,可以处理更复杂的用例,其中错误可以存在于两个不相邻的条目中。我不认为这是这种情况,但有一个普通的purpopse方法很好。