针对测试系统的代码覆盖率测量技术方案

技术编号:37504336 阅读:21 留言:0更新日期:2023-05-07 09:40
提供了针对用于测试源代码的测试系统的代码覆盖率的方法和系统。该方法获得具有针对对一个或多个测试模块的函数调用的在测试模块的入口和出口处写的跟踪记录的跟踪。该方法将从跟踪中提取的针对函数的响应代码与针对函数的从源代码的元数据检索的响应代码的有限列表进行比较,并基于比较来分析代码覆盖率。率。率。

【技术实现步骤摘要】
针对测试系统的代码覆盖率测量


[0001]本专利技术涉及代码覆盖率测量,更具体地,涉及针对测试系统的代码覆盖率测量。

技术介绍

[0002]传统上通过使用代码覆盖率来测量测试完整性。代码覆盖率是用于描述当特定测试套件运行时程序的源代码被执行的程度的度量。
[0003]具有高测试覆盖率的程序在测试期间已执行了它的许多源代码。与具有低测试覆盖率的程序相比,针对程序的高测试覆盖率表明该程序包含未被检测到的软件错误的机会更低。许多不同的度量可以用于计算测试覆盖率;最基本的一些是程序子例程的百分比和在测试套件的执行期间所调用的程序语句的百分比。
[0004]代码覆盖率通常通过以低级别插桩诸如机器指令来完成。这在模块级别被报告,然后被聚合到总值。现有的解决方案聚焦于代码路径是否已被执行,或者它是否已针对特定外部输入标准被执行。
[0005]实际上,问题更加复杂,因为执行将取决于被传递到各个模块的值。这些可导致代码覆盖率度量没有完全捕获的大量错误流。例如,如果模块执行了各种输入验证并针对这些检查中的每个检查被分支到设置坏的返回代码的代码并返回,则可能仅小部分的代码会涉及返回代码设置和返回。因此,模块可具有非常高的覆盖率,但实际上不一定已经测试了许多可能的错误流。这会不得不通过逐行查看覆盖率数据来确定。

技术实现思路

[0006]根据本专利技术的一个方面,提供了一种针对用于测试源代码的测试系统的代码覆盖率的计算机实现的方法,其包括:获取针对对一个或多个测试模块的函数调用的在一个或多个测试模块的入口和出口处写的跟踪记录;将从跟踪中提取的针对函数的响应代码与针对函数的从用于源代码的元数据检索的响应代码的有限列表进行比较;以及基于比较来分析代码覆盖率。
[0007]根据本专利技术的另一方面,提供一种针对用于测试源代码的测试系统的代码覆盖率的系统,其包括:处理器和存储器,存储器被配置成向处理器提供计算机程序指令以执行以下组件的功能:跟踪获得组件,用于获取针对对一个或多个测试模块的函数调用的在一个或多个测试模块的入口和出口处写的跟踪记录;元数据比较组件,用于将从跟踪中提取的针对函数的响应代码与针对函数的从用于源代码的元数据检索的响应代码的有限列表进行比较;以及代码覆盖率分析组件,用于基于比较来分析代码覆盖率。
[0008]根据本专利技术的另一方面,提供一种针对用于测试源代码的测试系统的代码覆盖率的计算机程序产品,该计算机程序产品包括计算机可读存储介质,该计算机可读存储介质具有与其体现的程序指令,该程序指令可由处理器执行以使处理器:获取针对对一个或多个测试模块的函数调用的在一个或多个测试模块的入口和出口处写的跟踪记录;将从跟踪中提取的针对函数的响应代码与针对函数的从用于源代码的元数据检索的响应代码的有
限列表进行比较;以及基于比较来分析代码覆盖率。
[0009]计算机可读存储介质可以是非暂时性计算机可读存储介质,并且计算机可读程序代码可由处理电路执行。
附图说明
[0010]在说明书的结论部分中特别指出并明确要求保护被视为本专利技术的主题。当结合附图阅读时,通过参考以下详细描述,可以最好地理解本专利技术(关于组织和操作方法)及其目标、特征和优点。
[0011]现在将参考以下附图仅通过实例的方式来描述本专利技术的优选实施例,在附图中:
[0012]图1是根据本专利技术的方法的示意图;
[0013]图2是根据本专利技术的方法的示例实施例的流程图;
[0014]图3是根据本专利技术的系统的示例实施例的框图;
[0015]图4是在其中可以实现本专利技术的计算机系统或云服务器的实施例的框图;
[0016]图5是在其中可以实现本专利技术的云计算环境的示意图;以及
[0017]图6是在其中可以实现本专利技术的云计算环境的抽象模型层的图。
[0018]应当理解,为了说明的简单和清晰,图中所示的元件不一定按比例绘制。例如,为了清楚起见,一些元件的尺寸可能相对于其他元件被放大。进一步,在认为适当的情况下,附图标记可在附图中重复以指示对应或类似的特征。
具体实施方式
[0019]提供了一种用于通过使用基于输入和输出组合的跟踪数据而不是代码路径来在测试期间分析代码覆盖率的方法和系统。
[0020]源代码可以由测试模块测试,并且它们的输入和输出被跟踪。输入可以包括测试模块已经调用的函数和其他可能的输入。其他可能的输入可包括函数所需的数值,例如,要分配多少存储,或者它们可包括函数可能需要的其他输入参数。输出可包括指示调用成功或调用失败的原因的响应代码。每个测试模块可调用其他测试模块,因此,跟踪具有其中每个输入跟踪被链接到输出跟踪的形式。
[0021]术语“函数”用于描述可以通过被调用而执行的功能或方法,并且包括例如应用编程接口(API)调用、Java方法(Java是Oracle公司的商标)或IBM客户信息控制系统(CICS)函数(IBM CICS是国际商业机器公司的商标)。
[0022]针对正在输入的函数检索列出输入和输出的元数据。这包括针对功能代码和响应代码的数据项的值,其是有限集。元数据可以是例如用于源代码的函数的文件列表,或者可以通过扫描源代码获得。输入可能影响程序内执行的代码路径;因此,除了输出之外,还需要输入。
[0023]所描述的方法和系统将跟踪响应数据与用于由测试模块执行的函数的元数据进行比较,以确定由测试模块实现的覆盖率。
[0024]参见图1,示意图100示出了所描述的方法和系统。作为测试系统的一部分,以函数输入111和其他输入112(例如,函数参数或值)的形式向测试模块120进行输入110,并且以响应代码(诸如返回代码131和原因代码132)的形式返回输出130。测试模块120可以是用于
测试源代码的调用的可执行模块。测试模块120可以调用其他测试模块120作为其执行的一部分,并且输出130可以来自测试模块120的结果系列。
[0025]元数据代码140被提供为所有响应代码的有限列表,诸如以针对函数式的返回代码和原因代码的形式。返回代码131可以指示成功的调用,并且原因代码132可以提供调用失败的原因。
[0026]本文所描述的代码覆盖率系统150接收用于由一个或多个测试模块120执行的函数的输入110和输出130的跟踪数据151。代码覆盖率系统150还检索采用用于由(一个或多个)测试模块120执行的函数的可能响应代码的有限列表形式的与输入110和输出130相关的元数据152。代码覆盖率系统150通过比较跟踪数据151和所检索的元数据代码152来分析(一个或多个)测试模块120的覆盖率153。
[0027]参见图2,流程图200示出了所描述的在测试系统中分析源代码的代码覆盖率的方法的示例实施例。
[0028]该方法可以获取201针对对一个或多个测试模块的函数调用的在一个或多个测试模块的入口和出口处写的跟踪记录。这可包括运行测试以产生具有针对函数被执行而在入口和出口处写的跟踪记录的跟踪。当运行本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种针对用于测试源代码的测试系统的代码覆盖率的计算机实现的方法,包括:获取针对对一个或多个测试模块的函数调用的在所述测试模块入口和出口处写的跟踪记录;将从所述跟踪中提取的针对所述函数的响应代码与针对所述函数的从用于所述源代码的元数据检索的响应代码的有限列表进行比较;以及基于所述比较,分析代码覆盖率。2.根据权利要求1所述的方法,其中,比较响应代码和元数据响应代码提供在所述跟踪记录中提供的所述元数据响应代码的比例。3.根据权利要求1所述的方法,其中,分析所述代码覆盖率包括:将所述函数分组成更高级别,并且将针对每个级别的所述代码覆盖率聚合成更高级别分析。4.根据权利要求3所述的方法,其中,更高级别是聚合所有可能函数和针对每个函数的所有可能响应代码的模块。5.根据权利要求4所述的方法,其中,更高级别是聚合所有可能模块的总源代码。6.根据权利要求3所述的方法,其中,更高级别是函数层次的更高级别。7.根据权利要求1所述的方法,包括:分析所述跟踪记录中遗漏的所述元数据的响应代码,以提供与所需测试相关的反馈。8.根据权利要求1所述的方法,包括:将入口跟踪记录和出口跟踪记录配对以生成跟踪记录,对所述跟踪记录进行排序,以及移除重复的跟踪记录。9.根据权利要求1所述的方法,其中,响应代码包括以下各项的组中的一项或多项:成功的返回代码;不成功的原因代码;以及异常。10.根据权利要求1所述的方法,其中,测试模块调用另一个测试模块作为它的函数调用的执行的一部分。11.一种针对用于测试源代码的测试系统的代码覆盖率的系统,包括:处理器和存储器,所述存储器被配置为向所述处理器提供计算机程序指令以执行以下组件的功能:跟踪获得组件,用于获取针对对一个或多个测...

【专利技术属性】
技术研发人员:C
申请(专利权)人:国际商业机器公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1