一种软件测试范围确定方法、软件测试方法和装置与流程

文档序号:16735987发布日期:2019-01-28 12:37阅读:406来源:国知局
一种软件测试范围确定方法、软件测试方法和装置与流程

本发明属于互联网软件测试领域,具体涉及一种软件测试范围确定方法、应用该软件测试范围确定方法的软件测试方法和装置。



背景技术:

常量池在java用于保存在编译期已确定的,已编译的class文件中的一份数据。它包括了关于类,方法,接口等中的常量,也包括字符串常量,当然也可扩充,执行器产生的常量也会放入常量池,常量池被认为是jvm的一块特殊的内存空间。在本申请中,常量池包括了一个类的结构索引,代码文件中对对象的引用可以通过索引位置来替代。

class文件全名称为javaclass文件,是java文件的源码编译之后的文件,主要在平台无关性和网络移动性方面使java更适合网络。它在平台无关性方面的任务是:为java程序提供独立于底层主机平台的二进制形式的服务。

bytecodeengineeringlibrary(bcel),是javaclassworking最广泛使用的一种框架,它可以让用户深入jvm汇编语言进行类操作的细节。bcel作为处理字节码方法,是在实际的jvm指令层次上进行操作(bcel拥有丰富的jvm指令级支持)。具体通过深入jvm的汇编来创建、分析、和操纵class文件。

完全限定名是指能够唯一标识一个类或者一个函数绝对路径的名称,该名称在所有其他命名空间或类型中唯一标识该命名空间或类型。

互联网的业务测试迭代迅速,随着业务发展,已有业务的回归测试和代码优化的重构测试占用的时间越来越长,影响范围也越来越难以评估。在业务开发的过程中,开发人员的替换也会造成代码影响性评估不准确,此时问题隐藏的路径变深,为敏捷开发过程中的已有业务的不稳定埋下隐患。

申请公布号为cn108073510a公开了一种软件测试方法,包括对软件业务场景进行分割,生成多个软件业务子场景;从所述软件业务子场景中抽取软件业务功能点,生成包含所述软件业务子场景信息和所述软件业务功能点信息的表单;根据所述表单和软件业务规则获得有效软件业务场景;以及根据所述有效软件业务场景获取软件业务功能点脚本进行测试。这专利申请公布的软件测试方法虽然能够检测软件的缺陷,但是对回归测试和重构测试的场景下很难确定测试范围。



技术实现要素:

本发明的目的是提供一种软件测试范围确定方法,具体通过把代码文件常量池的静态分析和覆盖率相结合,根据覆盖率返回的未覆盖代码行确定软件测试范围,该软件测试范围确定方法能够精确地确定软件测试范围,为后续的软件测试提供精准的数据。

本发明的另一目的是提供一种软件测试方法,利用上述软件测试范围确定方法确定测试范围,再根据确定的测试范围进行软件测试,该软件测试方法测试范围准确,测试效率高。

本发明的另一目的是提供一种软件测试装置,该测试装置中包括了上述软件测试方法,该软件测试装置能够准确确定软件测试范围,进而提高测试准确性和效率。

为实现上述发明目的,本发明提供以下技术方案:

一种软件测试范围确定方法,包括:

根据改动代码的覆盖状态确定未覆盖的改动代码;

基于源代码库,通过分析代码常量池,构建代码中调用关系;

根据所述调用关系确定所述未覆盖的改动代码的调用链,将所述调用链作为软件测试范围。

该软件测试范围确定方法中,根据覆盖率确定未覆盖的改动代码,再对代码进行格式的静态分析得到调用关系。最后根据调用关系确定未覆盖的改动代码的调用链,进而确定软件测试范围。该方法确定的软件测试范围精准,为后续软件测试提供可靠的数据源。

具体地,所述改动代码的覆盖状态获取方法包括:

以固定周期解析代码仓库,经比较获得该固定周期内改动代码文件;

解析所述改动代码文件获得改动代码;

根据所述改动代码文件和测试的覆盖状态生成增量代码覆盖率文件;

结合所述增量代码覆盖率文件确定改动代码的覆盖状态。

在应用时,首先获取jar包。jar包是:把业务功能的代码进行处理,编译成一个包含执行命令的集合。在本发明中,以固定周期解析代码仓库中的jar包,比较两次解析获得的差异,获得在这个固定周期内被改动的代码文件。

根据改动代码文件能够获得改动代码和增量代码覆盖率文件。具体地,解析改动代码文件即可以获得改动代码,进而能够确定改动的代码行,一般情况下,以(文件名;代码行号)二元组形式表示被改定的代码,例如解析后获得二元组(a,32)表示名称为a的文件中的第32行代码被改动。

代码覆盖率是指在某个文件中,被执行的代码与总代码的比值,增量代码覆盖率是指在某个固定周期中,增加代码中被执行的代码与总代码的比值。例如,文件a中,代码总计为1000行,被执行的代码有800行,增加代码为200行,这200行代码中被执行代码有180行,则代码覆盖率为800/1000=80%,增量代码覆盖率为180/200=90%。

根据改动代码文件的覆盖情况,生成增量代码覆盖率文件。例如:在该文件中,改动的代码可以用红色表示,改动代码中被执行的代码可以用绿色表示。当增量代码覆盖率文件确定后,即获得改动代码中哪些代码被执行。

具体地,所述根据代码仓库的改动代码的覆盖状态确定未覆盖的改动代码包括:

从所述改动代码的覆盖状态中提取未覆盖的改动代码;或,

从所述改动代码的覆盖状态中剔除覆盖的改动代码,剩下的为未覆盖的改动代码。

优选地,所述基于源代码库,通过分析代码常量池,构建代码中调用关系包括:

解析源代码库,获得源代码库中的函数信息和类信息;

以所述函数信息和类信息的常量池为数据源,按照指定格式构建代码中调用关系。

源代码库可以为各种编码语言的源代码库,当源代码库为jar/war包文件时,采用bcel工具解析所述jar/war包文件,获得所有class文件;

根据所有class文件中的常量池存储结构抽取相应的函数信息和类信息,形成调用关系。

class文件中的常量池中存储有固定格式的数据信息,将类、方法和接口等常量按照固定格式串到一起进行存储,在本发明中,常量池存储结构存储的信息过多,直接调用会增加计算量,降低计算效率。因此,对常量池中的函数信息和类信息进行抽取,将有用的常量构成预定格式的调用关系并存储,以备用。将调用关系存储可以提高后续静态代码分析性能,即提高根据调用关系确定所述未覆盖的改动代码的调用链的性能,进而能够减少用户等待时间,同时也能够方便被二次处理。

具体地,所述调用关系的格式为:

函数调用关系的格式为:函数调用的标识-起始函数的类完全限定名-起始函数-起始函数的参数-函数调用的类型标识-被调用函数的名称-被调用函数的类的完全限定名-被调用函数的参数-起始函数的注解-起始函数的代码行号;

类调用关系的格式为:类调用的标识-起始类-被调用类。

举例说明从class文件的常量池中获得的信息包括:

(a)起始调用函数,比如函数a调用函数b,那么函数a作为起始调用函数,函数b作为被调用函数;

(b)函数的参数:主要包括函数的参数类型和个数,由于java语言特性,存在重载等会导致函数名同样的情况,因此会记录此函数的参数类型和个数;

(c)函数的注解:api的路径在每个函数中均使用注解的方式设置,所以会记录注解,作为最终显示的结果;

(d)函数的行号:记录每个函数体中起始指令和终止指令的范围。

具体地,通过正则表达式获取文件中所需要的信息,例如:函数名称,函数注解,函数参数,函数行号等。把每一个原始函数信息和类信息进行封装成特定的调用关系。

在编码的过程中,有些函数例如支持底层功能的函数不可能被修改,关于该函数的函数调用关系是一些无用的调用关系,需要将其去除。具体地,在获得函数调用关系后,对所述函数调用关系进行去重和过滤处理,以去掉重复和不可能被修改的函数对应的函数调用关系。

其中,所述根据所述函数调用关系确定所述未覆盖的改动代码的调用链包括:

在所有函数调用关系中,根据未覆盖的改动代码行号进行搜索,找到该改动代码行号所在的函数调用关系;

并根据找到的函数调用关系确定起始函数,以该起始函数的接口名称和路径作为软件测试范围。

该软件测试范围确定方法可以作为一个代码分析工具,当返回起始函数的接口名称和路径,可以根据返回的起始函数的接口名称和路径进行诸如代码合入精准的门禁检测。

一种软件测试方法,包括:

根据上述所述的软件测试范围确定方法确定软件测试范围;

对确定的软件测试范围进行软件测试。

具体地,可以采用接口测试自动化方式和ui自动化方式对对确定的软件测试范围进行软件测试。其中,接口测试自动化可以基于testng框架实现,ui自动化可以通过robotframework、selenium等方式实现。

该软件测试方法能够精确地确定软件测试范围,减少了盲目覆盖或者过度覆盖带来的人力和资源浪费,进而提高了测试精度和测试效率。

一种软件测试装置,包括:一个或多个处理器,存储器以及存储在所述存储器中并可在所述一个或多个处理器上执行的一个或多个计算机程序,所述一个或多个处理器在执行所述一个或多个计算机程序时,实现上述软件测试方法的步骤。

该测试装置中包括了上述软件测试方法,该软件测试装置能够准确确定软件测试范围,进而提高测试准确性和效率。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图做简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动前提下,还可以根据这些附图获得其他附图。

图1是本发明的一实施例提供的软件测试范围确定方法的流程框图;

图2是本发明的一实施例提供的函数调用关系图;

图3是本发明的一实施例提供的类调用关系图。

具体实施方式

为使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例对本发明进行进一步的详细说明。应当理解,此处所描述的具体实施方式仅仅用以解释本发明,并不限定本发明的保护范围。

为提升软件测试的效率和节省软件测试成本开销,以下实施例提供了一种软件测试范围确定方法、软件测试方法和装置。

实施例1

本实施例提供了一种软件测试范围确定方法,如图1所示,包括一下步骤:

s101,以固定周期解析代码仓库,经比较获得该固定周期内改动代码文件。

s102,解析所述改动代码文件获得改动代码。

s103,根据所述改动代码文件生成增量代码覆盖率文件。

s104,结合所述增量代码覆盖率文件确定改动代码的覆盖状态。

s105,根据代码仓库的改动代码的覆盖情况确定未覆盖的改动代码。

具体地,从所述改动代码的覆盖状态中提取未覆盖的改动代码;或,

从所述改动代码的覆盖状态中剔除覆盖的改动代码,剩下的为未覆盖的改动代码。

s106,选取分析的源代码库,即jar/war包文件。

s107,采用bcel工具解析所述jar/war包文件,获得所有class文件。

s108,根据所有class文件中的常量池存储结构抽取相应的函数信息和类信息,形成指定格式的调用关系。

本实施例中,调用关系包括函数调用关系和类调用关系。其中,如图2所示,函数调用关系的格式为:函数调用的标识-起始函数的类完全限定名-起始函数-起始函数的参数-函数调用的类型标识-被调用函数的名称-被调用函数的类的完全限定名-被调用函数的参数-起始函数的注解-起始函数的代码行号。如图3所示,类调用关系的格式为:类调用的标识-起始类-被调用类。

具体地,在获得函数调用关系后,对其进行去重和过滤处理,目的是去掉重复的和不可能被修改的函数中对应的那些函数调用关系。

s109,在所有函数调用关系中,根据未覆盖的改动代码行号进行搜索,找到该改动代码行号所在的函数调用关系。

s110,根据找到的函数调用关系确定起始函数,以该起始函数的接口名称和路径作为软件测试范围。

本实施例中,根据class文件中常量池的结构,通过处理覆盖率返回的指定代码行进行代码的静态分析,得到代码行所影响的所有接口名称,这样测试人员可以在接口粒度层面进行精准的覆盖,开发人员可以通过这些结果进行代码的优化和分析。减少了盲目覆盖或者过度覆盖带来的人力和资源浪费。

实施例2

本实施例提供了一种软件测试方法,具体包括:根据实施例提供的软件测试范围确定方法确定软件测试范围,然后对确定的软件测试范围进行软件测试。

应用时,可以采用接口测试自动化方式和ui自动化方式对对确定的软件测试范围进行软件测试。其中,接口测试自动化可以基于testng框架实现,ui自动化可以通过robotframework、selenium等方式实现。

本实施例提供的软件测试方法能够精确地确定软件测试范围,减少了盲目覆盖或者过度覆盖带来的人力和资源浪费,进而提高了测试精度和测试效率。

实施例3

本实施例提供了一种软件测试装置,具体包括一个或多个处理器,存储器以及存储在所述存储器中并可在所述一个或多个处理器上执行的一个或多个计算机程序,所述一个或多个处理器在执行所述一个或多个计算机程序时,实现实施例2提供的软件测试方法的步骤。

本实施例所述的处理器和存储器可以是现有的任意的处理器和存储器,此处不限制。

本实施例提供的测试装置中包括了上述软件测试方法,该软件测试装置能够准确确定软件测试范围,进而提高测试准确性和效率。

以上所述的具体实施方式对本发明的技术方案和有益效果进行了详细说明,应理解的是以上所述仅为本发明的最优选实施例,并不用于限制本发明,凡在本发明的原则范围内所做的任何修改、补充和等同替换等,均应包含在本发明的保护范围之内。

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