论文部分内容阅读
代码覆盖测试可以反映程序代码被执行的百分比,从而真实反映软件内部被测试的情况,实现对软件测试工作完整性评估。本论文就代码覆盖测试中的代码插装技术、测试数据自动生成以及软件错误定位等方面进行研究,旨在提高代码覆盖测试的效率并加速软件测试与调试进度。 在对研究工作所需的基础知识进行介绍后,本论文对影响覆盖测试效率和有效性的代码插装技术展开研究,通过在程序控制流图中插入虚拟节点,并结合程序之间的支配关系确定代码插装位置,给出了一种插装损耗较少的代码插装策略;接着将指定程序节点的测试数据生成问题抽象成最优化问题,结合程序控制流以及程序路径的执行概率设计有效的适应函数,利用启发式算法对其求解,研究了自动测试数据生成方法对未覆盖的代码进行覆盖以提高测试覆盖率,并从理论上和实验上分析和验证了该方法的可行性和高效性;最后,将代码覆盖测试所收集的一系列测试用例的执行信息用于软件错误定位,用实验的方法揭露现在基于代码覆盖的错误定位方法中存在“结”的普遍性,并归纳出相应的解决方案,在不影响定位效率的情况下,对结语句进行重排,减轻了结对软件错误定位方法的影响;同时,针对存在多错误的软件,提出了混合式的调试方法,并研究了失败测试用例的聚类算法以提高错误定位效率。 本论文的创新点主要体现在: (1)提出了基于虚拟节点和超级块支配图的代码插装方法,减少了探针插装的数量及其在程序中的执行次数,从而减少了对因插装所引起被测试程序的运行性能的影响,提高了代码覆盖测试的效率和有效性。 (2)提出了基于路径概率的测试数据生成方法,提高了生成目标测试数据的的几率,同时减少了生成数据所需的迭代次数,有效地提高了程序的代码覆盖率。 (3)提出了失败测试用例的软聚类方法,提高了失败用例归属于相应的错误聚焦簇的准确性,从而提高了错误定位效率。 最后,将本论文的部分理论和方法开发了一套C语言代码覆盖测试工具,并已在WEB-EDA平台中集成与应用。