用于软件开发的智能回归测试选择制造技术

技术编号:30886016 阅读:21 留言:0更新日期:2021-11-22 20:32
一种对软件代码中的改变进行测试的方法,包括:搜索测试的数据库以标识包括执行该改变的函数的测试的子集,从该子集形成多个组,该多个组各自具有不同的执行路径。相同组中的测试具有相同的执行路径。该方法还包括:基于一个或多个测试特性,对多个组中的每个组内的测试进行优先级排序,以及从组中的每个组选择经优先级排序的测试中的一个或多个测试以测试该改变。该改变。该改变。

【技术实现步骤摘要】
用于软件开发的智能回归测试选择
[0001]相关申请的交叉引用
[0002]本申请依照35 USC 119(e)要求于2020年5月13日提交的美国专利申请号63/024,328的权益,其内容通过引用而整体合并于此。


[0003]本公开涉及软件的测试,并且更具体地涉及对软件代码中的改变的回归测试。

技术介绍

[0004]在迭代和/或增量软件开发过程中,软件代码可以在相对短的时间段内被改变,以适应新代码的添加或促进对现有代码的修改。然而,这样的添加或修改可能会在代码中产生新的错误。回归测试(RT)可以被用于确保任何添加或修改都没有错误,并且不会对软件的其他部分产生不利影响。当将回归测试作为系统的连续的集成/部署流程的一部分被应用时,回归测试是有效的。

技术实现思路

[0005]根据本公开的一个实施例的一种对软件代码中的改变进行测试的方法部分地包括:由处理器搜索测试的数据库以标识执行覆盖改变的函数的测试的子集,从子集形成多个组,该多个组各自具有不同的执行路径。相同组中的测试具有相同的执行路径。该方法还部分地包括:基于一个或多个测试特性来对组中的每个组内的测试进行优先级排序,以及从组中的每个组选择经优先级排序的测试中的一个或多个测试以测试该改变。
[0006]根据本公开的一个实施例的一种非瞬态计算机可读介质包括存储的指令,该指令在由处理器执行时使处理器:搜索测试的数据库以标识执行覆盖软件代码改变的函数的测试的子集,从子集中形成多个组,该多个组各自具有不同的执行路径。相同组中的测试具有相同的执行路径。该指令还使处理器基于一个或多个测试特性来对组中的每个组内的测试进行优先级排序,以及从组中中的每个组选择经优先级排序的测试中的一个或多个测试以测试代码改变。
附图说明
[0007]从下面给出的具体实施方式和从本公开的实施例的附图,将更全面地理解本公开。附图用于提供对本公开的实施例的知识和理解,并且不将本公开的范围限于这些特定实施例。此外,附图不一定按比例绘制。
[0008]图1是根据本公开的一个实施例的用于测试软件代码中的改变的过程的流程图。
[0009]图2是根据本公开的一些实施例的在集成电路的设计和制造期间使用的各种过程的流程图。
[0010]图3是可以在其中操作本公开的实施例的计算机系统的示例。
具体实施方式
[0011]已经被修改以包括新函数或改进现有函数的软件通常在被发布用于更广泛或商业用途之前被测试。数据库中通常存在为测试软件的早期版本而开发的一套测试。然而,当软件修改包括有限次数的改变时,完整地应用测试套件是很耗时且耗费资源的。
[0012]本公开的实施例从测试套件的已有数据库中标识执行覆盖软件程序中已经被修改的行的一个或多个函数的列表。然后应用基于例如优先级和/或资源使用情况而选择的一个或多个准则,以进一步减少列表上的测试数目。因此,本公开的实施例在修改的软件的测试中实现了量级减少。
[0013]图1是根据本公开的一个实施例的用于测试修改的(改变的)软件的步骤的流程图100。在101,包括修改/改变的软件被接收。在102,先前已被经开发用于测试软件的测试的现有数据库被搜索,以标识执行覆盖改变的一个或多个函数的测试的子集,在本文中也称为与改变相关的测试子集。例如,命名为A文件中的编程代码的第66行被改变。在另一示例中,1000个不同的测试先前已经被开发并且被存储在数据库中以测试文件A中的代码。在102,数据库从该1000个测试中,搜索标识测试第66行中的代码的测试的子集。存在许多开源软件工具,例如Gcov或ctags,可用于执行搜索并且标识包含并因此测试软件改变的测试。Gcov是源代码包含情况分析和逐语句分析工具。Gcov生成对程序中每个语句执行次数的精确计数,并对源代码进行注释以添加工具植入(instrumentation)。Ctags是一种生成在各种编程语言的源文件和头文件中找到的名称的索引文件以帮助理解代码的编程工具。这样的软件工具还可以提供有关任何标识的测试可以提供的包含情况的等级的信息。从已有测试中标识包含经改变的代码的子集的过程在本文中备选地称为映射。与经改变的代码无关且不包含经改变的代码的测试被滤除,并且从进一步考虑中被删除。
[0014]在103,先前未能检测到故障是否已经由改变产生的测试也被过滤出来并且从在102处确定的子集中被删除。在104,在102被标识的测试的子集基于执行经改变的代码的函数的执行路径而被分组。例如,测试的子集可以被划分成3个不同的组,每个组具有不同的执行路径。相同中的测试具有相同的执行路径。在105处,每个组中的测试基于一个或多个测试特性而被进行优先级排序。在一个实施例中,测试的回转时间(turn

around time,TAT)可以被用作针对优先级的测试特性。在另一实施例中,从与测试相关联的历史失败率所确定的测试的故障检测能力可以被用作测试特性,以对每个组内的测试进行优先级排序。
[0015]在106,在每个测试组内经优先级排序的测试基于诸如资源可用性和时序要求的因素而被评估,以进一步减少每个组内的测试数目。例如,用户要求对改变的测试使用给定的服务器群在给定的时间间隔内被完成。在另一示例中,如上所述,三组测试已经被进行优先级排序,以用于对改变的测试。然后,用户可以从组I中选择前两个经优先级排序的测试,从组II中选择前三个经优先级排序的测试,并且仅从组III中选择第一个经优先级排序的测试以用于对改变的测试。如果用户分配更多的计算资源或时间来执行测试,则可以从每个组中选择更多的测试。在107,每个组内在106处被选择的测试被执行以测试改变。
[0016]如上所述,基于已经改变的代码的行号来执行测试的数据库的搜索可能并不总是提供准确的结果。例如,如果包含该代码的文件先前已被另一用户修改,则代码的行号可能已经被改变。因此,在一个实施例中,为了获得上述映射,首先包括并且因此执行经改变的
代码的函数被标识。此后,诸如开放源代码工具Gcov或Ctags的软件工具被用于从现有测试的数据库(在本文中也称为数据库)标识包括函数的测试以及每个这样的测试中的函数的(多个)行号两者。例如,函数F在软件程序中执行经修改的代码行。因此,数据库被搜索以标识执行函数F的测试。搜索还标识执行函数F的每个经标识的测试内的行号。
[0017]假设命名为x.cpp的文件中的、并且由命名为wfb::workflowBrowser::workflowBrowser(QWidget*)的函数(在本文中称为函数wfb)执行的代码行被修改。进一步假设诸如Gcov的软件工具从已有数据库中标识执行函数wfb的六个不同测试,即TC_A、TC_B、TC_C、TC_D、TC_E和TC_F。该工具还标识函数出现的每个测试内的行号。以下是针对示例性测试TC_A的Gcov的示例性输出:
[0018]“file:x.cpp
[0019]function:33,1,wfb::workflowB本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种测试软件代码中的改变的方法,所述方法包括:由处理器搜索测试的数据库,以从测试的所述数据库标识包括执行所述改变的函数的测试的子集;从测试的所述子集形成多个组,所述多个组各自具有不同的执行路径,其中相同组中的所述测试具有相同的执行路径;基于一个或多个测试特性,对所述多个组中的每个组内的所述测试进行优先级排序;以及从所述多个组中的每个组选择经优先级排序的所述测试中的一个或多个测试来测试所述改变。2.根据权利要求1所述的方法,还包括:根据可用计算资源,从每个组选择一个或多个经优先级排序的所述测试。3.根据权利要求1所述的方法,其中测试的所述测试特性由所述测试的回转时间TAT来定义。4.根据权利要求1所述的方法,其中测试的所述测试特性由所述测试的故障检测能力来定义。5.根据权利要求1所述的方法,其中所述搜索使用开源软件工具被执行。6.根据权利要求5所述的方法,其中所述开源软件工具包括Gcov和ctags工具。7.根据权利要求1所述的方法,还包括:生成与所述执行路径中的每个执行路径相关联的哈希值;将所述哈希值存储在所述数据库中;以及使用所述哈希值来搜索所述数据库,以标识包括所述函数的测试的所述子集。8.根据权利要求7所述的方法,其中所述哈希值使用MD5哈希算法而被获得。9.根据权利要求1所述的方法,还包括:在测试的所述子集中的每个测试内,标识所述函数的行号。10.根据权利要求1所述的方法,其中软件改变在其中被进行的所述软件是在集成电路的开发中所使用的设计自动化软件。11.一种非瞬态计算机可读介质,包括所存储的指令,所述指令在由处理器执行时使所述处理器:搜索测试的数据库,以标识包括执行软件代码改变的函数的所述测试的子集;从所述子集形成多个组,所述多个组各自具有不同的执行路径,其中相同组中的所述测试具有相同的执行路径;基于一个或多个测试特性,对所述多个组中的每个组内的所述测试进行...

【专利技术属性】
技术研发人员:吴晓亮
申请(专利权)人:美商新思科技有限公司
类型:发明
国别省市:

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

1