论文部分内容阅读
软件调试通过分析程序错误根源为开发者提供软件错误信息以及修复方案,是保证软件质量的重要环节。然而,软件调试一直以来都是一件非常繁琐的工作,所以有很多研究者致力于软件调试相关的工作,力图通过研究自动化的软件调试方法为开发者提供有效的帮助。已有的自动软件调试工作已经能够在很大程度上帮助开发者定位并理解软件中的错误,但是绝大多数的软件调试工作都需要以待测程序中含有测试预言为前提,而很多现实中的程序中没有测试预言,如何对这类缺少测试预言的程序进行自动调试就成为了一个很大的挑战。针对无测试预言的程序,一部分研究者提出了蜕变关系来解决对这类程序的测试问题,也有少部分工作在此基础上提出了对无测试预言问题的自动调试方法,然而在可扩展性,系统开销以及调试效果等方面都存在局限。针对自动调试无测试预言程序的问题,本文提出了一种面向没有测试预言程序基于混合执行的自动错误定位技术Comedy, Comedy在较少的系统开销下实现较好的错误定位效果,是一种针对无测试预言程序可行且有效的自动错误定位技术。具体而言,本文的工作主要包括以下几点:·本文首先总结了自动调试领域的研究现状,指出了现今绝大部分已有工作针对无测试预言程序无法有效调试的问题。本文接下来介绍了旨在解决无测试预言程序测试问题的蜕变测试技术,并分析了已有基于蜕变测试的自动调试工作的缺陷与局限。·本文提出了蜕变模型的概念,即根据蜕变关系的要求将输入转换,多次原程序执行以及蜕变约束检查等多个步骤封装到一个新的程序中,解决了原来程序中测试预言缺失的问题。·本文提出了一个面向无测试预言程序的自动错误定位技术Comedy, Comedy的错误定位思想是从错误的执行出发,通过逐步倒转其执行路径上的分支,从而不断得到新的输入来执行程序,以此得到新的执行。Comedy通过这种方式系统地搜索新的执行路径来搜索正确执行,从而找到从程序错误路径迁移到正确执行路径的关键分支作为可疑错误位置。·Comedy利用原程序中存在的多个蜕变关系构造多个蜕变模型,针对每个蜕变模型,使用多个错误输入进行自动错误定位,提高了错误定位的能力与效果。·本文在Java Pathfinder与Symbolic Pathfinder平台之上实现了一个Comedy工具原型,针对存在测试预言问题的Java程序进行自动错误定位。该工具包括了蜕变模型程序框架,自动测试引擎,基于混合执行的自动错误定位引擎。该工具为开发者提供了一套高度自动化的错误定位辅助。·本文通过在一组Java程序上进行实验评估了Comedy的错误定位有效性与效率。实验结果表明,Comedy能够在可以接受的开销下得到比较有效的错误定位结果,为开发者发现程序中的错误位置提供很大的帮助。另外,本文通过在真实Web服务器软件Tomcat上进行简答案例分析进一步证明了Comedy的有用性。