什么是统计调试?

时间:2009-02-03 03:17:02

标签: debugging statistics code-analysis

什么是统计调试?我还没有找到一个清晰,简洁的解释,但这个词当然听起来令人印象深刻。

它只是一个研究主题,还是在某个地方被用于实际开发?换句话说:它会帮助我找到程序中的错误吗?

3 个答案:

答案 0 :(得分:15)

我创建了统计调试,以及多年来各种精彩的合作者。我希望几个月前我注意到你的问题!但如果你仍然好奇,也许这个迟到的答案总比没有好。

在很高的层次上,统计调试是使用程序成功/失败的统计模型来追踪错误的想法。这些统计模型揭示了特定程序行为与运行的最终成功或失败之间的关系。例如,假设您注意到程序中有一个特定的分支有时会离开,有时是正确的。而且你还注意到分支离开的运行很好,但是在分支正确的情况下运行的可能性会降低75%。因此,这里存在统计相关性,值得进一步研究。统计调试形成并自动化查找与失败相关的程序(错误)行为的过程,从而指导开发人员找出错误的根本原因。

回到原来的问题:

  

它只是一个研究主题,还是在某个地方被用于实际开发?

这主要是一个研究课题,但它在“真实”世界中有两种方式:

  1. public deployment of the Cooperative Bug Isolation Project寻找在Fedora Linux下运行的各种开源程序中的错误。您可以download pre-instrumented packages并且每次使用它们时都会向我们提供数据以帮助我们找到错误。

  2. Microsoft已发布Holmes, an implementation of statistical debugging for .NET。它很好地集成到Visual Studio中,应该是一种非常简单的方法,您可以使用统计调试来帮助您在自己的代码中找到自己的错误。我与Holmes的微软研究院密切合作,这些都是知识如何推出高质量工具的聪明人。

  3. 要记住的一个警告:统计调试需要充足的原始数据来构建良好的统计模型。在CBI的公共部署中,原始数据来自真实的最终用户。对于福尔摩斯,我认为微软假设原始数据来自内部自动化单元测试和手动测试。 不会工作的是完全没有运行的代码,或者只有失败的运行但没有成功的反例。统计调试在好的和坏的运行之间运行对比,因此您需要同时提供它。如果你想要没有运行的bug搜索工具,那么你需要某种静态分析。我也对此进行了研究,但这不是统计调试。 : - )

    我希望这有所帮助并且不会太久。我很乐意回答任何后续问题。快乐的狩猎!

答案 1 :(得分:1)

当你运送的软件说“好吧,可能有效......” ; - )

编辑:它是research topic,其中机器学习和统计聚类用于尝试在程序中找到错误预测器的模式,以识别可能隐藏更多错误的位置。

答案 2 :(得分:0)

听起来就像统计抽样一样。当您购买产品时,很有可能不会检查出现在“装配线”上的每一件产品的质量。

统计抽样要求检查一定比例的产品几乎确保它们都没有问题。它可以最大限度地减少一些问题潜行的风险,并且在测试过程具有破坏性的情况下是绝对必要的 - 如果您对100%的生产线进行破坏性测试,那将不会留下太多的分配:-)

老实说,除非您检查每个执行路径和每个可能的输入值,否则您已经在测试中执行此操作。除了最简单的系统之外,测试所有所需的工作量是不值得的。额外费用会使您的产品成为非竞争产品。

请注意,统计抽样不会涉及每100个单位的测试。有一些方法可以将抽样作为目标,以提高捕捉问题的机会。例如,如果历史数据表明在特定阶段引入了大多数错误,则以该阶段为目标。如果您的某个开发人员比其他开发人员更有问题,请更密切地检查他的内容。

从粗略看一些研究论文中可以看出,统计调试就是这样 - 根据过去的问题历史来定位区域。

我知道我们已经为我们的软件做了这个。由于任何修复的错误必须通过单元和系统测试来复制问题(我们的TDD说这些测试应该在尝试修复bug之前编写),这些测试会自动添加到回归测试套件中,以便那些区域导致更多问题自然会在将来更频繁地进行测试。