● 摘要
回归错误是指在软件改动后出现的一类错误,它们意外地引起了新旧版本间行为上的差异。在成本压力和现有质量保障技术下,软件新版本不可避免的存在大量的回归错误。定位和修复回归错误是繁琐且费时的。研究高效的回归错误定位技术,提高软件调试效率,具有重要的实践意义。本文的目标就是研究如何利用回归错误的特点,研制在实际开发场景下有实践价值的回归错误的定位技术。本文的贡献点主要有: 1、针对多用例的每日构建场景,首次提出基于多个特定的光谱模型来进行错误定位的LOUPE技术。实验表明,LOUPE技术在评测基准集西门子组件上比六种代表性技术定位效果更好。在Space项目上的案例研究表明,在时间压力较小计算资源丰富的条件下,LOUPE技术可以用于大型项目中错误的定位。 2、针对单用例的连续演化场景,在十五个GNU软件中的真实错误上,实证研究了2009年ACM SIGSOFT Impact Paper Award得主,国际著名学者Andreas Zeller教授提出的Delta Debugging技术在调试回归错误时的可用性和有效性。本文澄清了人们先前对Delta Debugging技术应用和定位效果的模糊认识:在技术应用上,准备相邻版本和构建测试谕言繁琐且费时;在定位效果上,对于三分之一的实验对象,产生了过多误报甚至漏报。针对这些问题,本文研制了一个基于过程数据和程序数据的原型。在五个真实回归错误上进行的实验表明,使用这个原型可以自动地进行相邻版本的准备,且至多不超过四小时就可以产生定位线索,在一定程度上弥补了Delta Debugging的不足。 3、针对单用例的软件演化场景,首次提出将覆盖性分析和Delta Debugging技术相结合,用于识别引发故障的软件改动。与Delta Debugging调试相同的十二个真实错误,结果对比表明,此项技术在减少测试次数的同时,减少了63%的误报数,同时没有产生任何漏报。在代码改动的历史记录不可得到的情况下,使用这项技术可以高效地识别引发故障的改动。 4、针对单用例的软件演化场景,本文对修复回归错误的补丁特点进行了初步调查。受调查结果启发,本文提出了一个基于偏离分析的回归错误定位框架并建立了一个新颖的偏离模型SOLO。在十一个真实错误上的初步实验表明,对于超过三分之二的实验对象,SOLO技术都能产生有效的定位结果。在资源只允许执行新旧版本各一次的限制下,SOLO技术可以用于定位引发故障的函数。 5、本文在研究单用例的场景时,收集整理了一组GNU软件中的真实错误,作为回归错误的一组评测基准集。真实而非手工注入的回归错误,更适合评价调试技术的有效性。本文同时研制了若干研究原型,这些原型的源代码、使用方法和实验结果也均已经在四个项目网站上公开发布。这些原型连同之前的评测基准集,可以促进学术界在相关领域的研究。
相关内容
相关标签