一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

用于软件开发的智能回归测试选择的制作方法

2021-11-20 03:14:00 来源:中国专利 TAG:

用于软件开发的智能回归测试选择
1.相关申请的交叉引用
2.本技术依照35 usc 119(e)要求于2020年5月13日提交的美国专利申请号63/024,328的权益,其内容通过引用而整体合并于此。
技术领域
3.本公开涉及软件的测试,并且更具体地涉及对软件代码中的改变的回归测试。


背景技术:

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


技术实现要素:

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

around time,tat)可以被用作针对优先级的测试特性。在另一实施例中,从与测试相关联的历史失败率所确定的测试的故障检测能力可以被用作测试特性,以对每个组内的测试进行优先级排序。
15.在106,在每个测试组内经优先级排序的测试基于诸如资源可用性和时序要求的因素而被评估,以进一步减少每个组内的测试数目。例如,用户要求对改变的测试使用给定的服务器群在给定的时间间隔内被完成。在另一示例中,如上所述,三组测试已经被进行优先级排序,以用于对改变的测试。然后,用户可以从组i中选择前两个经优先级排序的测试,从组ii中选择前三个经优先级排序的测试,并且仅从组iii中选择第一个经优先级排序的测试以用于对改变的测试。如果用户分配更多的计算资源或时间来执行测试,则可以从每个组中选择更多的测试。在107,每个组内在106处被选择的测试被执行以测试改变。
16.如上所述,基于已经改变的代码的行号来执行测试的数据库的搜索可能并不总是提供准确的结果。例如,如果包含该代码的文件先前已被另一用户修改,则代码的行号可能已经被改变。因此,在一个实施例中,为了获得上述映射,首先包括并且因此执行经改变的
代码的函数被标识。此后,诸如开放源代码工具gcov或ctags的软件工具被用于从现有测试的数据库(在本文中也称为数据库)标识包括函数的测试以及每个这样的测试中的函数的(多个)行号两者。例如,函数f在软件程序中执行经修改的代码行。因此,数据库被搜索以标识执行函数f的测试。搜索还标识执行函数f的每个经标识的测试内的行号。
17.假设命名为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::workflowbrowser::workflowbrowser(qwidget*)
[0020]
lcount:33,1
[0021]
lcount:39,1
[0022]
lcount:43,1
[0023]
lcount:44,1
[0024]
lcount:47,1
[0025]
lcount:48,1
[0026]
count:50,1”[0027]
上面的输出示出函数wfb在测试tc_a的行33、39、43、44、47、48和50中的每个行中被执行一次,如符号“lcount”所示。在其他示例中,这样被标识(例如,wfb)的函数可以在一个或多个设计的行中被执行多于一次。对于测试tc_a,函数wfb的执行路径被定义为:
[0028]
exectionpath(“x.cpp”,“wfb::workflowbrowser::workflowbrowser(qwidget*)”,“tc_a”)=“33,39,43,44,47,48,50”[0029]
换言之,针对测试tc_a的函数wfb的执行路径为“33,39,43,44,47,48,50”。假设由软件工具gcov确定的每个其他测试tc_b、tc_c、tc_d、tc_e、tc_f中函数wfb的执行路径如下所示:
[0030]
executionpath(“x.cpp”,“wfb∷workflowbrowser::workflowbrowser(qwidget*)”,“tc_b”)=“33,39,43,44,47,48,50”[0031]
exectionpath(“x.cpp”,“wfb:;workflowbrowser∷workflowbrowser(qwidget*)”,“tc_c”)=“33,39,43,44,47,48,50”[0032]
executionpath(”x.cpp”,“wfb::workflowbrowser::workflowbrowser(qwidget*)”,“tc_d”)=“33,39,45,46,47,48,50”[0033]
executionpath(“x.cpp”,“wfb∷workflowbrowser::workflowbrowser(qwidget*)”,“tc_e”)=“33,39,43,44,47,48,50”[0034]
executionpath(“x.cpp”,“wfb∷workflowbrowser∷workflowbrowser(qwidget*)”,“tc_f”)=“33,39,43,44,47,48,50”[0035]
从上面的示例中可以看出,测试tc_d中的函数wfb的执行路径“33,39,45,46,47,48,50”不同于其他五个测试中的函数wfb的执行路径,该其他五个测试中的函数wfb的执行路径为“33,39,43,44,47,48,50”。因此,测试tc_a、tc_b、tc_c、tc_e和tc_f被分组在一起作
为第一组测试。测试tc_d形成第二组测试,如参考流程图100的步骤104所述。
[0036]
参考流程图100,假设在步骤105,例如基于它们相应的tat和/或历史故障检测性能,第一组的测试tc_a、tc_b、tc_c、tc_e和tc_f以如下次序被进行优先级排序:tc_c,tc_b,tc_a,tc_e和tc_f。进一步假设基于分配的测试时间和计算资源,如上面参考流程图100的步骤106所述,用户将仅选择三个测试以用于测试经修改的行。由于测试tc_d是第二组测试中的唯一测试,因此用户选择测试tc_d。用户还从第一组测试中选择测试tc_c和tc_b。如果有更多测试时间或计算资源可用,则用户可以从第一组中选择更多或全部测试。应当理解,测试的分组可以产生n个不同的组,每个组具有m个测试,其中n和m是等于或大于1的整数。应当理解,m和n彼此可以相等或可以不相等。
[0037]
如上所述,执行路径可以是相对较长的字符串,因为测试经常包括相对大量的函数。因此,当执行路径被存储在数据库(例如,hadoop hbase)中时,可能需要大量的磁盘空间。相应地,为了优化磁盘空间,在一个实施例中,仅与执行路径相关联的哈希值被存储。
[0038]
与在多个不同的测试中所使用的函数的执行路径相关联的哈希值在以下被示出。在该示例中,在参数“值”之后示出了哈希值,该哈希值使用md5算法被确定并随后使用base64算法从二进制字符串被变换为文本。在“t:”之后出现的数字代表测试的唯一标识(id)号。与每个测试关联的时间戳表示哈希值被生成的时间。
[0039][0040]
以上数据示出了两个唯一的执行路径。一个执行路径具有与形成第一组测试的测试id 127837、147145、197005相关联的哈希值“blnxgzav1mqkmxa6yxhbuw”。其他执行路径具有与形成第二组测试的所有其他测试相关联哈希值“zfw3auw0whuuxjixjd1x9a”。如参考流程图100的步骤105和106所描述的,每个组中的测试在被选择用于测试经修改的代码之
前,可选地被进行优先级排序并且被减少。
[0041]
在一些实施例中,在其中进行改变的软件是电子设计自动化软件。图2图示了在用以变换和验证代表集成电路的设计数据和指令的制品(诸如集成电路)的设计、验证和制造期间所使用的示例过程集700。这些过程中的每个过程可以被结构化并被实现为多个模块或操作。术语“eda”表示术语“电子设计自动化”。这些过程开始于创建具有由设计师提供的信息的产品构思710,该信息被转换以创建使用eda过程集712的制品。当设计被完成时,设计被流片(taped

out)734,这是在用于集成电路的原图(artwork)(例如,几何图案)被发送到制造设施以制造掩模组时,然后其被用于制造集成电路。在流片之后,半导体管芯被制造736,并且执行封装和组装过程738以产生成品集成电路740。
[0042]
针对电路或电子结构的规范可以从低级晶体管材料布局到高级描述性语言。使用诸如vhdl、verilog、systemverilog、systemc、myhdl或openvera的硬件描述性语言(

hdl’),高级表示可以被用来设计电路和系统。hdl描述可以转换为逻辑级寄存器传输级(

rtl’)描述、门级描述、布局级描述或掩码级描述。设计的每个较低级表示形式在设计描述中添加更多有用的细节,例如,针对包括描述的模块的更多细节。设计的较低级表示可以由计算机生成,从设计库得出或由另一设计自动化过程创建。代表设计的较低级描述的规范语言的一个示例是spice,其被用于对具有许多模拟组件的电路进行详细描述。每个表示级别的描述被启用以用于由该层的对应工具(例如正式验证工具)使用。设计过程可以使用图2中描绘的序列。eda产品(或工具)启用所描述的过程。
[0043]
在系统设计714期间,规定要被制造的集成电路的功能性。设计可以针对所需的特性而被优化,例如功耗、性能、区域(物理和/或代码行)和成本降低等。在此阶段,可以发生将设计划分成不同类型的模块或组件。
[0044]
在逻辑设计和功能验证716期间,电路中的模块或组件以一个或多个描述性语言来指定,并且该规范被检查功能准确性。例如,可以验证电路的组件以生成与所设计的电路或系统的规范的要求相匹配的输出。功能验证可以使用模拟器和其他程序,例如测试台生成器,静态hdl检查器和正式验证器。在一些实施例中,被称为“仿真器(emulator)”或“原型系统(prototyping system)”的组件的特殊系统被用于加速功能验证。
[0045]
在针对测试718的综合(synthesis)和设计期间,hdl代码被转换为网表。在一些实施例中,网表可以是图结构,其中图结构的边缘代表电路的组件,并且图结构的节点代表组件如何被互连。hdl代码和网表都是制造的分层产品,eda产品可以使用该制造的分层产品来验证集成电路在被制造时是根据指定的设计来执行。网表可以针对目标半导体制造技术而被优化。附加地,成品集成电路可以被测试,以验证集成电路满足规范的要求。
[0046]
在网表验证720期间,检查网表是否符合时序约束以及与hdl代码相对应。在设计计划722期间,集成电路的全局平面图被构造并分析,以用于定时和顶层布线。
[0047]
在布局或物理实现724期间,发生物理布置(诸如晶体管或电容器的电路组件的定位)和布线(通过多个导体对电路组件的连接),并且从库中选择单元格(cell)以启用特定的逻辑功能可以被执行。如本文所使用的,术语“单元格”可以指定一组提供布尔逻辑功能(例如,and、or、not、xor)或存储功能(例如,触发器或锁存器)的晶体管、其他组件和互连件。如本文所使用的,电路“块”可以指两个或多个单元格。单元格和电路块都可以称为模块或组件,并且都可以被实现为物理结构以及在仿真中被实现。针对所选单元格(基于“标准
单元格”)规定了参数,例如大小,并在数据库中可访问以用于eda产品使用。
[0048]
在分析和提取726期间,电路功能在布局级被验证,这允许对布局设计进行细化。在物理验证728期间,检查布局设计以确保制造约束是正确的,诸如,drc约束、电约束、光刻约束,并且该电路功能与hdl设计规范相匹配。在分辨率增强730期间,布局的几何形状被变换以改进电路设计被制造的方式。
[0049]
在流片期间,数据被创建以被用于光刻掩模的生产(如果合适,在应用光刻增强之后)。在掩模数据准备732期间,“流片”数据被用于产生光刻掩模,该光刻掩模被用于产生成品集成电路。
[0050]
计算机系统(诸如,图3的计算机系统900)的存储子系统可以被用于存储本文所述的eda产品中的一些或全部eda产品所使用的程序和数据结构、以及被用于针对库的单元格开发以及使用该库的物理和逻辑设计的产品。
[0051]
图3示出了计算机系统900的示例机器,在该计算机系统内的指令集用于使该机器执行本文所讨论的方法中的任何一个或多个方法。在备选实现中,机器可以被连接(例如,联网)到lan、内联网、外联网和/或互联网中的其他机器。该机器可以在客户端

服务器网络环境中以服务器或客户端计算机的能力操作,作为对等(或分布式)网络环境中的对等计算机,或者作为云计算基础架构或环境中的服务器或客户端机器。
[0052]
机器可以是个人计算机(pc)、平板电脑、机顶盒(stb)、个人数字助理(pda)、蜂窝电话、web设备、服务器、网络路由器、交换机或网桥、或能够执行指令集(顺序的或其他方式)的机器,这些指令规定该机器要执行的操作。此外,虽然图示了单个机器,但是术语“机器”也应被理解为包括机器的任何集合,这些机器单独地或共同地执行一组(或多组)指令以执行本文讨论的任何一个或多个方法。
[0053]
示例计算机系统900包括:经由总线930彼此通信的处理设备902、主存储器904(例如,只读存储器(rom)、闪存、动态随机存取存储器(dram)(诸如同步dram(sdram))、静态存储器906(例如,闪存、静态随机存取存储器(sram)等))以及数据存储设备918。
[0054]
处理设备902表示一个或多个处理器,例如微处理器、中央处理单元等。更具体地,处理设备可以是复杂指令集计算(cisc)微处理器、精简指令集计算(risc)微处理器、超长指令字(vliw)微处理器、或是实现其他指令集的处理器、或是实现指令集的组合的处理器。处理设备902也可以是一个或多个专用处理设备,诸如专用集成电路(asic)、现场可编程门阵列(fpga)、数字信号处理器(dsp)、网络处理器等。处理设备902可以被配置为执行指令926以执行本文所述的操作和步骤。
[0055]
计算机系统900还可包括网络接口设备908,以通过网络920进行通信。计算机系统900还可以包括视频显示单元910(例如,液晶显示器(lcd)或阴极射线管(crt))、字母数字输入设备912(例如键盘)、光标控制设备914(例如鼠标)、图形处理单元922、信号生成设备916(例如扬声器)、图形处理单元922、视频处理单元928和音频处理单元932。
[0056]
数据存储设备918可以包括机器可读存储介质924(也称为非瞬态计算机可读介质),其上存储体现本文所述的方法或功能中的任何一个或多个方法或功能的一个或多个指令集926或软件。在计算机系统900执行指令926期间,指令926还可以全部或至少部分地驻留在主存储器904中和/或处理设备902中,主存储器904和处理设备902也构成机器可读存储介质。
[0057]
在一些实现中,指令926包括用于实现与本公开相对应的功能的指令。尽管在示例实施方式中将机器可读存储介质924示为单个介质,但是术语“机器可读存储介质”应被认为包括存储一组或多组指令的单个介质或多个介质(例如,集中式或分布式数据库,和/或关联的缓存和服务器)。术语“机器可读存储介质”也应被认为包括能够存储或编码指令集以用于由机器执行并且使得机器和处理设备902执行本公开的任何一个或多个方法的任何介质。因此,术语“机器可读存储介质”应被认为包括但不限于固态存储器、光学介质和磁性介质。
[0058]
已经就对计算机存储器内的数据比特的操作的算法和符号表示而言,呈现了前述详细描述的某些部分。这些算法描述和表示是数据处理领域技术人员用来最有效地向本领域其他技术人员传达其工作实质的方式。算法可以是导致期望结果的一系列操作。这些操作是需要对物理量进行物理操纵的操作。这样的量可以采取能够被存储、组合、比较以及以其他方式操纵的电或磁信号的形式。这样的信号可以被称为比特、值、元素、符号、字符、项、数字等。
[0059]
然而,应当知道,所有这些和类似术语均应与适当的物理量相关联,并且仅仅是应用于这些量的方便标签。除非从本公开明显地另外指明,否则应理解,在整个说明书中,某些术语指的是计算机系统或类似电子计算设备的操作和过程,该操作和过程将被表示为计算机系统寄存器和存储器内的物理(电子)量的数据操纵和转换为其他类似表示为计算机系统存储器或寄存器或其他此类信息存储设备内的物理量的数据。
[0060]
本公开还涉及用于执行本文中的操作的设备。该设备可以针对预期目的而被专门构造,或者可以包括由存储在计算机中的计算机程序选择性地激活或重新配置的计算机。这样的计算机程序可以被存储在计算机可读存储介质中,例如但不限于,均与计算机系统总线耦合的任何类型的磁盘,包括软盘、光盘、cd

rom和磁光盘、只读存储器(rom)、随机存取存储器(ram)、eprom、eeprom、磁卡或光卡或适用于存储电子指令的任何类型的介质。
[0061]
本文中呈现的算法和显示不与任何特定计算机或其他装置固有地相关。各种其他系统可以与根据本文的教导的程序一起使用,或者可以证明构造更专门的装置来执行该方法是方便的。另外,没有参考任何特定的编程语言来描述本公开。应当理解,可以使用多种编程语言来实现如本文所述的本公开的教导。
[0062]
本公开可以被提供为计算机程序产品或软件,其可以包括其上存储有指令的机器可读介质,其可以被用于对计算机系统(或其他电子设备)进行编程以执行根据本公开的过程。机器可读介质包括用于以机器(例如计算机)可读的形式存储信息的任何机制。例如,机器可读(例如,计算机可读)介质包括机器(例如,计算机)可读存储介质,诸如只读存储器(“rom”)、随机存取存储器(“ram”)、磁盘存储介质、光学存储介质、闪存设备等。
[0063]
在前述公开中,已经参考本公开的具体示例实施方式描述了本公开的实施方式。明显的是,在不脱离如所附权利要求书中阐述的本公开的更广泛的精神和范围的情况下,可以对其进行各种修改。在本公开内容以单数形式指代一些元素的情况下,在附图中可以描绘一个以上的元素,并且相似的元素用相似的数字标记。因此,本公开和附图应被认为是说明性的而不是限制性的。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献