论文部分内容阅读
覆盖率对于软件测试有着非常重要的作用,它是用来度量测试完整性的一个手段。通过覆盖率数据,可以知道测试工作是否充分,测试的弱点在哪些方面,进而指导我们设计能够增加覆盖率的测试用例,有效地提高测试质量。覆盖率中最常见的是代码覆盖率,而路径覆盖是代码覆盖方法里一种非常严格的覆盖准则。但是在实际代码中,一个较为复杂的程序包含的路径数目是相当庞大的,要完全达到路径覆盖是不可行的,实现自动化路径覆盖也是困难的。所以本文提出了基于函数调用路径的覆盖生成技术,将路径覆盖的分析粒度由语句扩展到函数级别,实现函数调用与控制逻辑相结合,既能避免路径的爆炸式增长,又可以保证测试完全。 对代码进行覆盖率分析,最重要的是能够跟踪记录源代码的运行路径。文章采用程序插桩技术对源代码进行插桩预处理,分别在函数的起始位置、结束位置和控 制关键字的位置插入桩点值,得到函数对象列表信息、控制关键字对象列表信息和插桩后的源代码。编译运行插桩后的源代码,输入测试数据得到由桩点数据流组成的动态路径。结合函数调用路径和动态路径的特点,并根据函数对象列表和控制关键字对象列表所提供的信息,对动态路径进行拆分获得函数调用路径子集。动态路径集里可能含有重复、冗余的动态路径,为了更好的维护测试数据库,进行覆盖率计算,使用优化算法去除动态路径集中重复、冗余的动态路径。 文中根据优化后的动态路径集获得的函数调用路径集,给出了函数调用路径覆盖率的计算公式,得出测试用例基于函数调用路径的覆盖率。分析出未被覆盖的函数调用路径集,指导测试人员针对未被覆盖的函数调用路径设计测试用例。