S. Copty
,
S.Ur/Electronic Notes in Theoretical Computer Science 174
(
2007
)
151
创造自我修复的技术。对于依赖于特定交织的间歇性错误,可以自动检测并删除导
致错误的交织。虽然这项工作还不成熟,我们相信,这是有趣的,由于以下贡献:
我们表明,至少在小程序,DD技术和测试通过噪声生成的组合产生一个实用的并发
调试技术。我们展示了一种新的DD算法,在某些情况下,比文献中发现的更好。此
外,还详细介绍了实际实现,其中包括可应用于 到其他应用程序。
2
相关工作
编程是计算机程序开发中最常见的活动之一,并且对其自动化给予了很多考
虑。在并行程序设计中,同样的测试有时会失败,有时会成功。在[5]中,DD在
交错中发现了指示失败的位置这些位置是使用一个名为DEJAVU的重放工具来识
别的,该工具在一个特殊的确定性JVM上使用。在回归测试中,检查程序的新版
本,看看它是否包含错误。一旦测试发现了bug,自动调试的目标是找到产生
bug所需的更改的最小子集在[25]中可以看到一个这样的例子,其中存在两个版
本的这些程序之间的差异是178,000行代码。使用DD,导致bug的单行被自动
定位。
类似的想法也适用于另一个领域,其中测试被简化为显示错误所需的基本部
分[26]。DD在减少bug报告的数量和理解这个bug的核心需求方面很有用在这些
应用中使用的算法可以在[25]中找到,其中它用于找到一组变化,前提是保证单
调性和一致性这通常是测试多线程应用程序时的一个问题,因为执行相同的测
试可能会产生不同的结果。这个问题可以通过在确定性JVM上使用重播来避免。
通过插入时间表修改状态(“噪声”)(如睡眠和产量)来测试多线程应用程序这
是一种有效的技术,用于找出是否存在错误,但它不寻找错误的根本原因。研究已
经完成,以找到插入噪声的正确点[2]。这些研究发现,在许多地方的噪音并不像在
一些正确的地方插入噪音那样有效。这意味着太多的噪声可能会掩盖bug,或者使
用[25]的定义,问题是非单调的。
对多线程程序中错误模式的研究[12],[17]揭示了大多数错误模式可以使用很少
的检测点来暴露,有时只有一个。然而,仪表化噪声必须是非确定性的,即, 每次
执行交织时不影响交织的噪声。这一要求