测试用例精准推荐方法、装置、系统、设备及存储介质与流程

文档序号:13297315阅读:376来源:国知局
测试用例精准推荐方法、装置、系统、设备及存储介质与流程

本发明涉及软件测试领域,特别是涉及一种测试用例推荐方法、装置、系统、计算设备以及存储介质。



背景技术:

软件测试是指在规定的条件下对应用程序进行操作,以发现程序错误,衡量应用质量,对其是否能满足设计要求进行评估的过程。测试用例(testcase)是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。

回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。回归测试作为软件生命周期的一个组成部分,在整个软件测试过程中占有很大的工作量比重,软件开发的各个阶段都会进行多次回归测试。在渐进和快速迭代开发中,新版本的连续发布使回归测试进行得更加频繁,而在极端编程方法中,更是要求每天都进行若干次回归测试。因此,通过选择正确的回归测试策略来改进回归测试的效率和有效性是非常有意义的。

回归测试理论上应该在代码变化后执行先前的所有测试用例,但是由于工作量巨大,目前经常采用的方式是在代码变化后选择性地执行先前的测试用例,即可以仅选择与代码变化部分相关联的测试用例,所选定的测试用例即为“回归测试用例”。

针对应用程序的测试用例集往往很大,在提交针对应用程序的新的代码后,选取回归测试用例时,往往会出现以下问题:选取的回归测试用例中存在很多重复的测试用例,导致对同一段代码测试多遍,浪费了很多测试时间;测试不完全,某些测试代码并没有覆盖到。

以测试为android应用的手工测试为例,android应用的手工测试用例集往往达到上千个。现有选取手工回归测试用例的方法,一般是结合产品需求、产品设计以及测试工程师对于业务的熟悉程度和自己的工作经验来选取手工回归测试用例。为了便于区分,测试用例一般会根据功能分成不同粒度的测试用例集,或者给测试用例标上标签,如此在选取测试用例集时,选取的粒度是用例集或者是整个标签,选取粒度比较大,很容易出现漏选或者是多选的情况。

由此,在进行回归测试时,如何从测试用例集中选取合适的测试用例,以使得在满足回归测试的同时,尽量减少乃至消除重复测试或无效测试,是目前面临的主要问题。



技术实现要素:

本发明的主要目的在于提供一种能够在实现对代码变更部分的测试的同时,减少重复测试和/或无效测试的测试用例推荐方案。

根据本发明的一个方面,提供了一种测试用例推荐方法,包括:基于待测试应用相比上一测试版本的代码变更信息,从测试用例集中选取与代码变更信息相关联的测试用例,得到目标测试用例集,其中,测试用例集包括一个或多个测试用例及其代码覆盖信息,代码变更信息包括代码变更部分;根据代码覆盖信息以及代码变更信息,确定目标测试用例集中每个测试用例的推荐度,以便根据推荐度选取对代码变更部分进行测试的测试用例。

由此,得到的目标测试用例集中的测试用例均为与代码变更部分相关的测试用例,如此可以避免无效测试;所确定的推荐度可以作为进一步从目标测试用例集中选取针对回归测试的测试用例的参考因素,也可以作为执行目标测试用例集中的测试用例的优先级参考,如此可以进一步提高测试的精准度,并且可以避免测试的盲目性。

优选地,确定目标测试用例集中每个测试用例的推荐度的步骤可以包括:根据测试用例对代码变更部分的贡献度和/或专一度,确定目标测试用例集中每个测试用例的推荐度,其中贡献度与测试用例所关联的变更代码占代码变更部分的变更比例正相关,专一度与测试用例所关联的变更代码占其所覆盖的代码的覆盖比例正相关。

由此,贡献度可以反映测试用例对回归测试的有用程度,专一度则可以反映测试用例被执行时的有效测试的占比,根据贡献度和/或专一度确定的推荐度可以准确地衡量测试用例对于回归测试的测试质量。

优选地,代码变更信息还可以包括代码变更部分中变更代码的变更频率,确定目标测试用例集中每个测试用例的推荐度的步骤还可以包括:根据测试用例所关联的变更代码的变更频率,确定目标测试用例集中每个测试用例的推荐度。

由此,在确定测试用例的推荐度时,还可以参考测试用例所关联的变更代码的变更频率,变更频率高的变更代码为需要重点测试的部分。

优选地,可以使用如下计算公式计算测试用例的推荐度r,r=c×a×f,其中,c为测试用例所关联的变更代码占代码变更部分的变更比例,a为测试用例所关联的变更代码占其所覆盖的代码的覆盖比例,f为所述测试用例所关联的变更代码的变更频率。该计算公式仅为本发明的一个示例性说明,还可以通过其它多种变形公式计算推荐度。

优选地,代码变更部分可以包括一个或多个代码变更单元,代码覆盖信息可以包括一个或多个代码覆盖单元,从测试用例集中选取与所述代码变更信息相关联的测试用例的步骤可以包括:从测试用例集中选取代码覆盖信息中具有与代码变更单元相对应的代码覆盖单元的测试用例。

由此,选取粒度更加精细,在避免漏选的同时,还可以清楚地获知所选取的测试用例与代码变更部分之间的关联关系。

优选地,对于与两个或两个以上的代码变更单元相关联的测试用例,可以分别确定该测试用例在每个代码变更单元下的子推荐度,测试用例在与其相关的所有代码变更单元下的子推荐度贡之和即为该测试用例的推荐度。

由此,可以清楚地了解每个代码变更单元下的测试用例的子推荐度以及每个测试用例的总的推荐度。

优选地,该应用测试方还可以包括:在测试客户端上执行对代码变更部分进行测试的测试用例过程中,获取待测试应用的代码执行信息;根据代码执行信息,重新确定测试用例的代码覆盖信息,并将重新确定的代码覆盖信息与测试用例关联地保存在测试用集中。

由此,本发明的应用测试方法可以实现为一种闭环推荐策略,整个流程是一个不断反馈、优化推荐的过程。

根据本发明的另一个方面,还提供了一种测试用例推荐装置,包括:测试用例选取模块,用于基于待测试应用相比上一测试版本的代码变更信息,从测试用例集中选取与代码变更信息相关联的测试用例,得到目标测试用例集,其中,测试用例集包括一个或多个测试用例及其代码覆盖信息,代码变更信息包括代码变更部分;推荐度确定模块,用于根据代码覆盖信息以及代码变更信息,确定目标测试用例集中每个测试用例的推荐度,以便根据推荐度选取对代码变更部分进行测试的测试用例。

优选地,推荐度确定模块可以根据测试用例对代码变更部分的贡献度和/或专一度,确定目标测试用例集中每个测试用例的推荐度,其中,贡献度与测试用例所关联的变更代码占代码变更部分的变更比例正相关,专一度与测试用例所关联的变更代码占其所覆盖的代码的覆盖比例正相关。

优选地,代码变更信息还包括代码变更部分中的变更代码的变更频率,推荐度确定模块还根据测试用例所关联的变更代码的变更频率,确定目标测试用例集中每个测试用例的推荐度。

优选地,推荐度确定模块可以使用如下计算公式计算测试用例的推荐度贡献分值r,r=c×a×f,其中,c为测试用例所关联的变更代码占代码变更部分的变更比例,a为测试用例所关联的变更代码占其所覆盖的代码的覆盖比例,f为测试用例所关联的变更代码的变更频率。

优选地,代码变更部分包括一个或多个代码变更单元,代码覆盖信息包括一个或多个代码覆盖单元,测试用例选取模块从测试用例集中选取代码覆盖信息中具有与代码变更单元相对应的代码覆盖单元的测试用例作为目标测试用例集。

优选地,对于与两个或两个以上的代码变更单元相关联的测试用例,推荐度确定模块将该测试用例在每个代码变更单元下的子推荐度之和作为该测试用例的推荐度。

优选地,该应用测试装置还可以包括:代码执行信息获取模块,用于在测试客户端上执行对代码变更部分进行测试的测试用例过程中,获取待测试应用的代码执行信息;代码覆盖信息确定及保存模块,用于根据代码执行信息,重新确定测试用例的代码覆盖信息,并将重新确定的代码覆盖信息与测试用例关联地保存在测试用集中。

根据本发明的另一个方面,还提供了一种测试用例推荐系统,包括:测试客户端,其上安装有待测试应用,用于在其上执行测试用例以测试待测试应用;测试用例数据库,用于存储测试用例及其代码覆盖信息;以及测试用例决策服务器,用于基于待测试应用相比上一测试版本的代码变更信息,从测试用例数据库中选取与代码变更信息相关联的测试用例,得到目标测试用例集,其中,代码变更信息包括代码变更部分,并根据代码覆盖信息以及代码变更信息,确定目标测试用例集中每个测试用例的推荐度,以便根据推荐度选取用于测试客户端执行的对代码变更部分进行测试的测试用例。

优选地,测试用例决策服务器根据测试用例对代码变更部分的贡献度和/或专一度,确定目标测试用例集中每个测试用例的推荐度,其中贡献度与测试用例所关联的变更代码占代码变更部分的变更比例正相关,专一度与测试用例所关联的变更代码占其所覆盖的代码的覆盖比例正相关。

优选地,代码变更信息还包括代码变更部分中变更代码的变更频率,测试用例决策服务器还根据测试用例所关联的变更代码的变更频率,确定目标测试用例集中每个测试用例的推荐度。

优选地,测试用例决策服务器使用如下计算公式计算测试用例的推荐度r,r=c×a×f,其中,c为测试用例所关联的变更代码占代码变更部分的变更比例,a为测试用例关联的变更代码占其所覆盖的代码的覆盖比例,f为测试用例所关联的变更代码的变更频率。

优选地,代码变更部分包括一个或多个代码变更单元,代码覆盖信息包括一个或多个代码覆盖单元,测试用例决策服务器从测试用例集中选取代码覆盖信息中具有与代码变更单元相对应的代码覆盖单元的测试用例作为目标测试用例集。

优选地,对于与两个或两个以上的代码变更单元相关联的测试用例,测试用例决策服务器将该测试用例在每个代码变更单元下的子推荐度之和作为该测试用例的推荐度。

优选地,该应用测试系统还可以包括:代码覆盖信息分析装置,用于在测试客户端执行对代码变更部分进行测试的测试用例过程中,获取待测试应用的代码执行信息,根据代码执行信息,重新确定测试用例的代码覆盖信息,并将重新确定后的代码覆盖信息与测试用例关联地保存至测试用例数据库。

根据本发明的另一个方面,还提供了一种计算设备,包括:处理器;以及存储器,其上存储有可执行代码,当可执行代码被处理器执行时,使处理器执行上文述及的测试用例推荐方法。

根据本发明的另一个方面,还提供了一种非暂时性机器可读存储介质,其上存储有可执行代码,当可执行代码被计算设备的处理器执行时,使处理器执行上文述及的测试用例推荐方法。

综上,利用本发明的测试用例精准推荐方法、装置、系统以及存储介质,得到的目标测试用例集中的测试用例均为与代码变更部分相关的测试用例,如此可以避免无效测试,而所确定的推荐度可以作为进一步从目标测试用例集中选取针对回归测试的测试用例的参考因素,也可以作为执行目标测试用例集中的测试用例的优先级参考,如此可以进一步提高测试的精准度,并且可以避免测试的盲目性。

附图说明

通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。

图1是示出了根据本发明一实施例的测试用例推荐系统的结构示意图。

图2是示出了根据本发明一实施例的测试用例推荐方法的示意性流程图。

图3是示出了根据本发明一实施例的测试用例推荐装置的结构的示意性方框图。

图4是示出了根据本发明一实施例的计算设备的结构的示意性方框图。

图5是示出了本发明一具体实施例下的测试用例推荐系统的结构示意图。

具体实施方式

下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。

如背景技术部分所述,在对应用的代码进行修改后,需要对其进行回归测试,以验证修改是否引入了新的错误,或导致其他代码产生错误。在渐进和快速迭代开发中,新版本的连续发布使回归测试进行得更加频繁,而在极端编程方法中,更是要求每天都进行若干次回归测试。因此,通过选择正确的回归测试策略来改进回归测试的效率和有效性是非常有意义的。因此,在进行回归测试时,需要从测试用例集中选取合适的测试用例作为回归测试用例。其中,此处述及的“合适的测试用例”是指选取的测试用例应能够尽可能多地覆盖代码变化的部分,并且尽可能少地出现重复测试或无效测试。

本发明即是在这种需要对待测试应用进行回归测试的场景下提出了一种测试用例推荐方案。其中,本发明述及的“待测试应用”可以是适于运行在多种类型的终端设备上的应用程序,例如可以是适于安装在智能手机、平板电脑或是其他便携式移动终端上的应用程序,也可以是适于安装在台式电脑、智能电视等固定式终端设备上的应用程序。

本发明的测试用例推荐方案可以实现为图1所示的测试用例推荐系统。图1是示出了根据本发明一实施例的测试用例推荐系统的结构的示意性方框图。

参见图1,测试用例推荐系统可以由一个或多个测试客户端(图中10_1、10_2、10_n)、测试用例数据库30以及测试用例决策服务器20构成。

测试客户端10可以经由网络40或其它通讯方式实现与测试用例决策服务器20之间的数据通讯。不同的测试客户端之间(例如,10_1与10_2或10_n之间)也可以经由网络40彼此通信。网络40可以是广义上的用于信息传递的网络,可以包括一个或多个通信网络,诸如无线通信网络、因特网、私域网、局域网、城域网、广域网或是蜂窝数据网络等。在一个实施例中,网络40也可以包括卫星网络,由此将移动终端10的gps信号传送给测试用例决策服务器20。应当注意,如果向图1中添加或从图1中去除附加模块,不会改变本发明的示例实施例的底层概念。另外,虽然为了方便说明而在图中示出了从测试用例数据库30到测试用例决策服务器20的双向箭头,但本领域技术人员可以理解的上,上述数据的收发也是可以通过网络40实现的。

测试客户端10可以是适于执行应用测试的多种形式的电子设备,包括但不限于智能电话、平板电脑或是其他便携式移动客户端,台式电脑、智能电视等终端设备。测试用例决策服务器20则是能够执行本发明的应用测试方法的服务器。图中虽然示出了多个测试客户端10-1…n以及单个测试用例决策服务器20和测试用例数据库30,但是本领域技术人员应该理解的是,上述1…n个测试客户端10旨在表示真实网络中存在的多个客户端设备,示出的单个测试用例决策服务器20和测试用例数据库30旨在表示本发明的技术方案涉及服务器及数据库的操作。对特定编号的测试客户端以及单个服务器和数据库加以详述至少为了说明方便,而非暗示对测试客户端和服务器的类型或是位置等具有限制。

测试客户端10上可以安装有一个或多个待测试应用,可以在测试客户端10上执行测试用例以测试待测试应用。测试用例数据库30中可以存储有针对一个或多个应用的测试用例集,测试用例集中包括一个或多个测试用例及其代码覆盖信息。其中,测试用例可以是自动化测试用例,也可以是手工测试用例,测试用例的代码覆盖信息可以是通过多种方式预先获取的,代码覆盖信息反映了测试用例被执行时待测试应用中的代码覆盖情况。

测试用例数据库30中所存储的测试用例为对之前版本的待测试应用进行测试时所使用的测试用例。在进行回归测试时,测试用例决策服务器20可以根据待测试应用相比上一测试版本的代码变更信息以及测试用例数据库30中所存储的测试用例的代码覆盖信息,从测试用例数据库30中选取与代码变更信息相关联的测试用例,以得到目标测试用例集。在得到目标测试用例集后,测试用例决策服务器20可以进一步确定目标测试用例集中每个测试用例的推荐度,以便后续可以根据推荐度确定用于测试客户端10执行的针对回归测试的测试用例。其中,此处述及的推荐度可以作为进一步从目标测试用例集中选取测试用例的一个参考因素,此外,还可以根据推荐度的大小确定测试用例执行时的优先级顺序,如此可以避免盲目无效的回归测试。

作为本发明的一个可选实施例,图1所示的测试用例推荐系统还可以包括代码覆盖信息分析装置(图中未示出),代码覆盖信息分析装置可以获取测试客户端执行测试用例过程中待测试应用的代码执行信息,根据代码执行信息,重新确定测试用例的代码覆盖信息,并将重新确定的代码覆盖信息与其对应的测试用例关联地保存至测试用例数据库30。如此,本发明的应用测试系统可以实现为一种闭环推荐系统,系统的整个工作流程是一个不断反馈、优化推荐的过程。

下面结合图2就本发明的测试用例推荐系统实现回归测试的原理及过程进行详细说明,图2是示出了根据本发明一实施例的测试用例推荐方法的示意性流程图。其中,下文结合图2所描述的各步骤均可以由相应的功能装置实现,而这些功能装置均可以包含在本发明的测试用例推荐系统中。

在执行图2所示的测试用例推荐方法之前,可以通过多种方式预先获取待测试应用相比上一测试版本的代码变更信息。例如,可以通过代码差异比较工具对当前的待测试应用与上一测试版本的应用之间的源代码进行比较,以得到代码变更信息。此处述及的代码变更信息反映了待测试应用相比上一测试版本的代码变化情况,其可以包括用于指示修改、增加或删除了多少行代码的代码变更部分。

作为本发明的一个可选实施例,代码变更信息可以是单元级别的代码变更信息,即代码变更部分可以包括多个代码变更单元,每个代码变更单元可以视为单元级别下的代码变更部分。此处述及的“单元”需要根据具体情况确定,例如,c语言中的单元指一个函数,java中可以是一个类或方法,图形化的软件中可以指一个窗口或一个菜单。以待测试应用为android系统下的应用为例,代码变更单元可以是类文件中方法级的代码变更信息。

在获取了待测试应用相比上一测试版本的代码变更信息后,就可以执行步骤s210,基于代码变更信息从测试用例集中选取与代码变更信息相关联的测试用例,以得到目标测试用例集。

测试用例集中的测试用例为对之前一个或多个测试版本的待测试应用进行测试时所使用的测试用例。测试用例集中可以包括一个或多个测试用例以及每个测试用例的代码覆盖信息,代码覆盖信息反映了测试用例被执行时待测试应用中的代码执行情况。代码覆盖信息也可以包括多个代码覆盖单元,此处述及的单元与上文述及的单元的含义相同,这里不再赘述。根据代码覆盖信息可以将测试用例与其被执行时覆盖的待测试应用中的代码关联起来。因此,可以根据代码覆盖信息从测试用例集中选取与代码变更部分相关联的测试用例,以得到目标测试用例集。

就本发明而言,可以预先通过多种方式获取测试用例的代码覆盖信息,并将其与测试用例关联保存在测试用例集中。例如,可以是在测试客户端上执行测试用例以对之前版本的待测试应用进行测试的过程中,获取待测试应用的代码执行信息,通过对获取的代码执行信息进行分析,就可以确定测试用例的代码覆盖信息。具体实现上,可以利用代码插桩的方式在待测试应用中插入覆盖率生成sdk(softwaredevelopmentkit,软件开发工具包),覆盖率生成sdk用于在使用测试用例对待测试应用进行测试时,记录待测试应用中的代码执行情况,如可以记录测试用例执行时待测试应用中可执行语句被执行(即被覆盖)的情况、程序执行的路径、变量的引用、定义等信息。通过对记录的信息做进一步分析就可以将测试用例与代码关联起来,其中,分析操作可以由人工执行也可以由相应的分析脚本执行。确定测试用例的代码覆盖率的具体实现为本领域技术人员所公知,这里不再详述。

基于步骤s210获取的目标测试用例集可以视为对测试用例集的初步筛选结果,所得到的目标测试用例集中的测试用例均为与代码变更部分相关联的测试用例,因此,通过步骤s210可以排除测试用例集中无效的测试用例。在获取目标测试用例集后,可以简单地直接使用目标测试用例集进行测试,以实现对代码变更部分的测试。但是,这种测试方法会产生重复测试,例如,目标测试用例集中可能存在多个测试用例对应于代码变更部分中的同一部分的变更代码。因此,在获取目标测试用例集后,还需要对目标测试用例集中的测试用例做进一步筛选,以减少重复测试。为此,在获取目标测试用例集后,可以执行步骤s220,根据代码覆盖信息以及代码变更信息,确定目标测试用例集中每个测试用例的推荐度,以便根据推荐度选取对代码变更部分进行测试的测试用例。

所确定的推荐度可以用于衡量测试用例针对代码变更部分的测试质量,其可以作为测试用例的一个推荐因子,在从目标测试用例集中选取测试用例时,可以参考测试用例的推荐度进行选取。另外,推荐度也可以作为目标测试用例集中的测试用例执行时的优先级参考,即可以根据推荐度的大小决定目标测试用例集中的测试用例的执行顺序。

作为本发明的一个可选实施例,可以根据测试用例对代码变更部分(即回归测试)的贡献度和/或专一度,来确定目标测试用例集中每个测试用例的推荐度。其中,“贡献度”可以反映测试用例对回归测试的有用程度,贡献度可以与测试用例所关联的变更代码占代码变更部分的变更比例正相关。“专一度”则可以反映测试用例被执行时的有效测试率,此处述及的有效测试率是指测试用例被执行时测试到的代码中变更代码所占的比例。优选地,可以根据测试用例所关联的变更代码占其所覆盖的代码的覆盖比例来确定专一度,专一度与覆盖比例正相关。

由于贡献度反映了测试用例对回归测试的有用程度,专一度反映了测试用例被执行时的有效测试率。因此,优选地,在确定目标测试用例集中测试用例的推荐度时,可以同时参考测试用例的贡献度和专一度,此时贡献度和专一度之间为正相关关系。

作为本发明的一个可选实施例,可以使用如下计算公式计算测试用例的推荐度r,r=c×a,其中,c为测试用例所关联的变更代码占代码变更部分的变更比例,a为测试用例所关联的变更代码占其所覆盖的代码的覆盖比例。需要说明的是,上述推荐度的计算公式仅是本发明的一种示例,还可以根据其它多种变形公式来确定测试用例的推荐度r。例如,还可以根据如r=c+a、r=lnc+lna、r=c2+a2等多种公式计算测试用例的推荐度,这里不再赘述。

另外,作为本发明的一个可选实施例,在计算测试用例的推荐度时,还可以参考测试用例所关联的变更代码的变更频率,此时,代码变更信息还可以包括代码变更部分中变更代码的变更频率,这里述及的变更频率是指变更代码或者变更代码所属的代码模块在历次版本中被更改的次数。频繁变更的代码或者模块,表明其调用频率高,耦合度高,应将其作为重点测试部分进行测试。而对于经历若干版本都不怎么变化的代码模块,其可能是历史冗余代码,需要进行删减。由此,在计算测试用例的推荐度时,除了考虑上文述及的贡献度、专一度外,还可以参考测试用例所关联的变更代码的变更频率。例如,可以使用如下计算公式计算所述测试用例的推荐度r,r=c×a×f,其中,f为测试用例所关联的变更代码的变更频率,c、a的含义可以参见上文说明,这里不再赘述。另外,还可以对此处述及的计算公式进行多种变形,这里也不再赘述。

如上文所述,代码变更信息可以包括一个或多个代码变更单元,代码覆盖信息也可以包括一个或多个代码覆盖单元。如此,在执行步骤s210的过程中,可以从测试用例集中选取代码覆盖信息中具有与代码变更单元相对应的代码覆盖单元的测试用例,以得到目标测试用例集。在执行步骤s220的过程中,可以分别计算目标测试用例集中每个测试用例在其关联的每个代码变更单元下的子推荐度。对于与两个或两个以上代码变更单元相关联的测试用例,可以将其在所有关联的代码变更单元下的子推荐度之和作为该测试用例的总的推荐度。由此,可以清楚地了解每个代码变更单元下的测试用例的子推荐度以及每个测试用例的总的推荐度,从而在从目标测试用例集中选取用于回归测试的测试用例时,选取粒度更加精细。其中,计算子推荐度的过程可以参见上文推荐度的计算过程,这里不再赘述。

另外,假如在从测试用例集中选取与代码变更部分的代码变更单元相关联的测试用例时,选取结果表明目标测试用例集中没有与代码变更部分中的一个或多个代码变更单元相关联的测试用例时,可以针对这一个或多个代码变更单元设计新的测试用例参与回归测试。

需要说明的是,本发明述及的推荐度可以作为进一步从目标测试用例集中选取测试用例的一个参考因素,而非唯一因素,在根据推荐度从目标测试用例集中选取测试用例参与回归测试时,还需要兼顾使得所选取的测试用例尽可能地覆盖代码变更部分、尽可能地少地产生重复测试等原则。

例如,假设代码变更部分涉及3个代码变更单元,分别是代码变更单元a、b、c,测试用例集中与代码变更单元a相关联的测试用例为用例1、用例2,测试用例集中与代码变更单元b相关联的测试用例为用例2、用例3,测试用例集中与代码变更单元c相关联的测试用例为用例4。其中,用例1仅与代码变更单元a关联,用例2与代码变更单元a、b关联,用例3仅与代码变更单元b关联,用例4除了与代码变更单元c关联,还与代码单元d关联,假设代码变更单元a、b、c的变更比例相同。

如此,根据本发明上文述及的推荐度的计算公式可以计算得到用例1、用例2、用例3的推荐因子相同,且均大于用例4的推荐因子。由于有且仅有用例4与变更类级别c的代码关联,因此在选取回归测试用例时应选取用例4以使得选取的测试用例能够测试变更类级别c的代码。为了测试变更类级别a、b,可以选取用例1、用例3作为回归测试用例,也可以仅选取用例2作为回归测试用例。优选地,可以选取用例2,以减少测试次数。

最后需要说明的是,本发明的测试用例推荐方法可以实现为一种闭环形式的测试用例推荐方案。具体地说,在利用本发明的测试用例推荐方法选取了针对代码变更部分的测试用例后,可以在测试客户端上执行所选取的测试用例,以进行回归测试。并且,在执行测试用例的过程中,可以获取待测试应用的代码执行信息,根据代码执行信息,重新确定测试用例的代码覆盖信息。由此可以根据重新确定的代码覆盖信息,对之前保存的测试用例的代码覆盖信息进行更新。在后续进行回归测试时,就可以根据最新保存的测试用例的代码覆盖信息,执行图2所示的测试用例推荐方案选取合适的测试用例作为回归测试用例,整个流程是一个不断反馈、优化推荐的过程。

至此,结合图2就本发明的测试用例推荐方法做了详细说明,另外,本发明的测试用例推荐方法还可以实现为一种测试用例推荐装置。图3是示出了根据本发明一实施例的测试用例推荐装置的结构的示意性方框图。其中,测试用例推荐装置300的功能模块可以由实现本发明原理的硬件、软件或硬件和软件的结合来实现。本领域技术人员可以理解的是,图3所描述的功能模块可以组合起来或者划分成子模块,从而实现上述发明的原理。因此,本文的描述可以支持对本文描述的功能模块的任何可能的组合、或者划分、或者更进一步的限定。

下面仅就测试用例推荐装置300可以具有的功能模块以及各功能模块可以执行的操作做简要说明,对于其中涉及的细节部分可以参见上文描述,这里不再赘述。

参见图3,测试用例推荐装置300包括测试用例选取模块310和推荐度确定模块320。

测试用例选取模块310用于基于待测试应用相比上一测试版本的代码变更信息,从测试用例集中选取与代码变更信息相关联的测试用例,得到目标测试用例集,其中,测试用例集包括一个或多个测试用例及其代码覆盖信息,代码变更信息包括代码变更部分。

推荐度确定模块320用于根据代码覆盖信息以及代码变更信息,确定目标测试用例集中每个测试用例的推荐度,以便根据推荐度选取对代码变更部分进行测试的测试用例。

具体地,推荐度确定模块320可以根据测试用例对代码变更部分的贡献度和/或专一度,确定目标测试用例集中每个测试用例的推荐度,其中,贡献度与测试用例所关联的变更代码占代码变更部分的变更比例正相关,专一度与测试用例所关联的变更代码占其所覆盖的代码的覆盖比例正相关。

作为本发明的一个可选实施例,代码变更信息还可以包括代码变更部分中的变更代码的变更频率,推荐度确定模块320还可以根据测试用例所关联的变更代码的变更频率,确定目标测试用例集中每个测试用例的推荐度。

作为本发明的一个可选实施例,推荐度确定模块320可以使用如下计算公式计算所述测试用例的推荐度贡献分值r,r=c×a×f,其中,c为所述测试用例所关联的变更代码占所述代码变更部分的变更比例,a为所述测试用例所关联的变更代码占其所覆盖的代码的覆盖比例,f为测试用例所关联的变更代码的变更频率。

作为本发明的一个可选实施例,代码变更部分包括一个或多个代码变更单元,代码覆盖信息包括一个或多个代码覆盖单元,测试用例选取模块310可以从测试用例集中选取代码覆盖信息中具有与代码变更单元相对应的代码覆盖单元的测试用例作为目标测试用例集。

对于与两个或两个以上的代码变更单元相关联的测试用例,推荐度确定模块320可以分别将该测试用例在每个代码变更单元下的子推荐度之和作为该测试用例的推荐度。

如图3所示,测试用例推荐装置300还可以可选地包括图中虚线框所示的代码执行信息获取模块330和代码覆盖信息确定及保存模块340。

代码执行信息获取模块330用于获取在测试客户端上执行测试用例过程中的代码执行信息。代码覆盖信息确定及保存模块340用于根据代码执行信息,重新确定测试用例的代码覆盖信息,并将重新确定的代码覆盖信息与测试用例关联地保存在测试用集中。

图4是示出了根据本发明一实施例的计算设备的结构的示意性方框图。

参见图4,计算设备400可以是台式机、便携式计算机、平板电脑、智能手机、个人数据助理(pda),或者其他类型的计算机装置,但是不限于任何特定形式。计算设备400可以包括但不限于处理器410和存储器420。

处理器410可以是一个多核的处理器,也可以包含多个子处理器。在一些实施例中,处理器410可以包含一个通用的主处理器以及一个或多个特殊的协处理器,例如图形处理器(gpu)、数字信号处理器(dsp)等等。

存储器420可以包括存储文件形式或其他形式的内容的任何类型的存储设备中的一个或多个,包括磁硬盘驱动器、固态硬驱、半导体存储设备、闪存,或者能够存储程序指令或数字信息的任何其他计算机可读可写存储介质。存储器420上可以存储有可执行代码,在本发明中,当存储器420上的可执行代码被处理器410执行时,可以使处理器410执行图2所示的测试用例推荐方法。

具体应用例

图5是示出了本发明一具体实施例下的测试用例推荐系统的结构示意图。

如图5所示,系统可以主要由覆盖率收集装置550、覆盖率文件存储服务器510、自动构建服务器520、用例推荐服务器530四部分构成。

覆盖率收集装置550可以由测试客户端和覆盖率收集sdk构成。覆盖率收集sdk可以集成在待测试应用中,在测试客户端上执行测试用例以对待测试应用进行测试时,覆盖率收集sdk可以标识测试用例id,获取待测试应用的代码执行信息以生成代码覆盖率文件,然后将代码覆盖率文件上传到覆盖率文件存储服务器510。

在具体实现上,覆盖率收集sdk可以使用jacoco代码覆盖率工具,无缝嵌入到任何待测应用(例如android应用)中。在使用测试用例对待测试应用进行测试的时候,覆盖率收集sdk可以记录待测试应用中的被测程序代码的覆盖率信息,并将覆盖率信息存储到测试机文件系统中。在完成一个测试用例的测试时,自动上传该测试用例的代码覆盖率文件,并重置覆盖率记录。同时,覆盖率收sdk可以实现本机持久化结果和失败重传机制,在网络不稳定或者服务器故障的情况下,可以保证覆盖率文件不会丢失。

盖率文件存储服务器510可以根据测试用例id以及其他可以定义的信息,如用例标签、用例集id、测试模块名称等,对测试用例的代码覆盖率文件按照约定的存储结构存储。

自动构建服务器520可以是jenkins服务器,其可以运行覆盖率处理业务,从覆盖率文件存储服务器510拉取覆盖率文件、从版本控制系统570(如git系统)拉取被测代码,生成覆盖率报告,然后解析覆盖率报告,将解析结果存储到用例覆盖结果数据库560中。具体地,自动构建服务器520可以监控覆盖率文件上传事件,执行用例级的覆盖率分析。也就是说,在每次将代码覆盖率文件上传到覆盖率文件存储服务器510时,自动构建服务器520都可以对该代码覆盖率文件进行分析,以生成代码覆盖率报告文件,该文件可以是xml文件。然后可以解析xml文件,并按照一定的格式,将解析结果存储到数据库560中,由此可以建立每个测试用例与代码之间的关联。此处,可以建立测试用例与单元级别的代码之间的关联,相关因子为对应单元的覆盖率。其中,关于单元的解释可以参见上文相关描述,这里不再赘述。

在需要进行回归测试时,可以由自动构建服务器520或者用例推荐服务器530从版本控制系统拉取本次测试时待测试应用的源代码,然后可以通过比较工具通过对待测试应用本次的源代码和上一次测试下的源代码进行比较,以得到代码变更信息,即修改、增加或删除了多少行代码,相比老版本变更占比多少。

在得到代码变更信息后,用例推荐服务器530可以执行图2所示的方法从用例覆盖结果数据库560中拉取与代码变更部分相关联的测试用例及其代码覆盖信息,以得到目标测试用例集。然后计算目标测试用例集中每个测试用例的推荐度,由此就可以向测试人员展示目标测试用例集中的测试用例、每个测试用例的代码覆盖信息、推荐度,如此测试人员就可以根据项目情况灵活选取最小范围测试用例集,在保证测试质量的同时,可以实现快速测试。如图5所示,用例推荐服务器530可以通过显示设备540将目标测试用例集展示给测试人员,以供测试人员选取合适的测试用例作为回归测试用例。在选取回归测试用例后,就可以在测试客户端上执行测试用例,以实现回归测试。

在执行回归测试的过程中,可以通过覆盖率收集装置550继续上传测试过程中的代码覆盖率文件,然后由自动构建服务器520更新测试用例的代码覆盖信息,整个流程是一个不断反馈、优化推荐的过程。

上文中已经参考附图详细描述了根据本发明的测试用例精准推荐方法、装置、系统以及计算设备。

此外,根据本发明的方法还可以实现为一种计算机程序或计算机程序产品,该计算机程序或计算机程序产品包括用于执行本发明的上述方法中限定的上述各步骤的计算机程序代码指令。

或者,本发明还可以实施为一种非暂时性机器可读存储介质(或计算机可读存储介质、或机器可读存储介质),其上存储有可执行代码(或计算机程序、或计算机指令代码),当所述可执行代码(或计算机程序、或计算机指令代码)被电子设备(或计算设备、服务器等)的处理器执行时,使所述处理器执行根据本发明的上述方法的各个步骤。

本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。

附图中的流程图和框图显示了根据本发明的多个实施例的系统和方法的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标记的功能也可以以不同于附图中所标记的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1