用于软件测试的Diff分析方法及装置的制造方法_2

文档序号:9750702阅读:来源:国知局
找的所述覆盖情况不同的代码片段是指,在进行比对的两个输出结果中,如果针对相同的分支判定代码标记的分支执行情况不一致,则所述分支判定代码及对应的代码分支即为所述覆盖情况不同的代码片段。
[0046]可选的,所述原始覆盖信息获取单元和所述修改后覆盖信息获取单元使用的代码分支分析-标记器为gcov工具软件时,所述覆盖信息解析比对单元包括:
[0047]覆盖信息解析子单元,用于采用gcov工具软件的扩展工具软件lcov,分别解析所述原始覆盖信息和所述修改后覆盖信息;
[0048]网页报告生成子单元,用于采用Icov工具软件自带的genhtml工具软件对所述覆盖信息解析子单元输出的解析结果分别进行处理,生成相应的网页格式的报告;
[0049]网页报告比对子单元,用于对所述网页报告生成子单元输出的网页格式的报告中标记的代码分支执行情况进行比对。
[0050]可选的,所述覆盖信息解析比对单元通过比对查找的所述覆盖情况不同的代码片段是指,在进行比对的两个网页格式的报告中,如果针对相同的分支判定代码标记的分支执行情况不一致,则所述分支判定代码及对应的代码分支即为所述覆盖情况不同的代码片段。
[0051]与现有技术相比,本申请具有以下优点:
[0052]本申请提供的用于软件测试的DifT分析方法,针对使原始代码和修改后代码产生不符合预期的不同运行结果的测试数据,获取在该数据下运行原始代码的代码覆盖信息、以及在该数据下运行修改后代码的代码覆盖信息,并对上述两种覆盖信息进行解析和比对,其中覆盖情况不同的代码片段即为造成所述不同运行结果的代码片段。采用上述方法,通过将度量测试完整性的覆盖率技术应用到软件测试的Diff分析中,可以快速、方便地定位造成Diff的代码片段,从而有效提高软件测试的效率。
【附图说明】
[0053]图1是本申请的一种用于软件测试的Diff分析方法的实施例的流程图;
[0054]图2是本申请实施例提供的使用代码分支分析-标记器获取原始覆盖信息的处理流程图;
[0055]图3是本申请实施例提供的使用代码分支分析-标记器获取修改后覆盖信息的处理流程图;
[0056]图4是本申请实施例提供的使用BullseyeCoverage工具软件解析代码分支覆盖信息的效果图;
[0057]图5是本申请实施例提供的使用Icov工具软件展示代码分支覆盖信息的网页报告效果图;
[0058]图6是本申请的一种用于软件测试的Diff分析装置的实施例的示意图。
【具体实施方式】
[0059]在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。
[0060]在本申请中,分别提供了一种用于软件测试的Diff分析方法,以及一种用于软件测试的Diff分析装置,在下面的实施例中逐一进行详细说明。
[0061]请参考图1,其为本申请的一种用于软件测试的DifT分析方法的实施例的流程图。所述方法包括如下步骤:
[0062]步骤101:获取在特定测试数据下运行原始代码的代码覆盖信息,作为原始覆盖信息;所述特定测试数据是指,使所述原始代码和修改后代码在运行时产生不符合预期的不同运行结果的测试数据。
[0063]在回归测试的过程中,通常采用针对业务场景进行测试的方式,即:随机输入各种业务场景的测试数据,分析原始代码(也称为旧版本代码)和修改后代码(也称为新版本代码)的运行结果,查看运行结果不同(通常称为发生Diff,Diff是different的英文简写)的情况是否发生在受代码修改影响的业务场景中,如果不是,则说明出现了不符合预期的Diff结果。本步骤所述的特定测试数据则是指,使所述原始代码和修改后代码在运行时产生不符合预期的不同运行结果的测试数据。
[0064]针对上述特定测试数据,采用本申请提供的技术方案,通过获取在特定测试数据下运行原始代码的代码覆盖信息,和在特定测试数据下运行修改后代码的代码覆盖信息,并将上述覆盖信息进行解析和比对,从而能够快速定位造成所述不同运行结果的代码片段。
[0065]所述代码覆盖(Code coverage)是软件测试中的一种度量,用于描述代码被测试的程度。而覆盖率则是度量测试完整性的一个手段,是测试有效性的一个度量,计算覆盖率或者进行覆盖分析并不是为了提高程序代码本身的质量而是为了确保测试用例的质量,通常认为覆盖率越高,测试用例越为完备。
[0066]代码覆盖通常可以分为以下几种:语句覆盖、分支覆盖、条件覆盖、路径覆盖、以及函数覆盖。所述语句覆盖,又称行覆盖,度量被测代码中每个可执行语句是否都被执行;所述分支覆盖,又称判定覆盖,度量被测代码中每一个判定的分支是否都被执行;所述条件覆盖,度量判定中的每个条件表达式结果为true和false的情况是否被执行;所述路径覆盖,度量被测代码中每一条可能的路径是否都被执行;所述函数覆盖,度量被测代码中每一个函数是否都被执行过。
[0067]采用上述任一种代码覆盖方式,都可以实现本申请的技术方案:通过对代码覆盖信息的比对,快速定位引发Diff的代码片段。然而通过上面的描述可以看出,每种代码覆盖方式各有优缺点,例如,语句覆盖,只度量代码中的执行语句是否被覆盖,简单易行,但是并不考虑各种分支的组合情况;路径覆盖,覆盖力度最强,但是由于随着分支数量的增加路径数量通常呈现指数级别的增加,对于有多分支嵌套的复杂程序代码,实现路径覆盖有时会相对比较耗时;而函数覆盖由于覆盖粒度比较大,不能反映函数体内的覆盖情况的细节。
[0068]从覆盖的粒度、执行效率、以及工具软件的支持等方面综合考虑,本实施例提供的优选实施方式采用分支覆盖方式。在其他实施方式中,可以选择上述的任何一种代码覆盖方式,同样可以实现本申请的技术方案。
[0069]本步骤获取在特定测试数据下运行原始代码的分支覆盖信息,作为原始覆盖信息。在具体实施时,可以在所述原始代码的每个分支处添加记录或者输出相应的分支覆盖信息的代码,从而通过运行原始代码就可以获取分支覆盖信息。
[0070]作为一种简便的实现方式,本实施例利用现有的代码分支分析-标记器实现上述功能。本申请所述的代码分支分析-标记器是指,能够记录或者标记代码在运行过程中的分支覆盖情况、并对所述分支覆盖情况进行统计分析的工具,该工具通常用于度量软件测试的完整性。所述代码分支分析-标记器包括=BullseyeCoverage工具软件(是BullseyeCoverage公司提供的一款代码覆盖率工具)、或者gcov工具软件(是gcc的内建工具,可用于C/C++的代码覆盖工具),以及其他能够实现上述功能的工具软件。
[0071]使用所述代码分支分析-标记器获取所述原始代码的分支覆盖信息(即:原始覆盖信息),包括下述步骤101-1至101-3,下面结合附图2作进一步说明。
[0072]步骤101-1:设置在编译代码的过程中保存代码分支信息的编译选项。
[0073]为了便于理解,首先对代码分支分析-标记器的基本原理作简要说明。作为一种可以记录或者标记代码覆盖信息的工具软件,各种代码分支分析-标记器的具体实现细节可能不同,但是其基本原理是相似的,即:先对被测代码进行插桩,然后收集代码覆盖信息,最后对收集到的信息进行解析。下面以BullseyeCoverage工具软件为例对其工作原理作进一步说明。
[0074]BullseyeCoverage工具软件通常针对不同的编译器设计一个和真实编译器名字相同的拦截器,这些拦截器文件存放在BullseyeCoverage的bin目录下。当覆盖编译开关打开时,被测试代码在编译过程中将首先被这些拦截器所拦截,并且所述拦截器会将一系列探针代码插入到被测试代码中(即:通常所说的插桩过程),然后被测试代码再次通过真实的编译器生成二进制代码,当被测试代码运行时,代码覆盖的情况会被自动记录到指定的覆盖文件中;当覆盖编译开关关闭时,这些拦截器将直接调用真实的编译器而不进行代码插桩的过程。
[0075]为了能够在编译过程中启动对应的拦截器执行额外的插桩操作,通常需要执行本步骤101-1,对编译代码所使用的编译器的编译选项进行设置,从而为步骤101-2在编译过程中形成代码分支覆盖文件做好准备。
[0076]在本实施例的一个具体例子中,使用的代码编译器为VC(Visual C++)编译平台,代码分支分析-标记器为BullseyeCoverage工具软件,该工具软件安装完毕后,会在VC编译器中以插件的方式出现,在“工具”菜单中设置启用BullseyeCoverage工具即可。
[0077]在上述具体例子中,采用的是BullseyeCoverage工具软件,在其他实施方式中,也可以采用能够记录代码覆盖信息的其他代码分支分析-标记器并进行相应的编译设置,同样可以实现本申请的技术方案。例如,采用gcov工具软件,则需要在编译代码的编译命令行中添加如下所示的编译选项:-fprofile-arcs-ftest_coverage。
[0078]步骤101
当前第2页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1