一种软件测试范围确定方法、软件测试方法和装置制造方法及图纸

技术编号:20221605 阅读:32 留言:0更新日期:2019-01-28 20:10
本发明专利技术公开了一种软件测试范围确定方法,包括:根据改动代码的覆盖状态确定未覆盖的改动代码;基于源代码库,按照指定格式构建代码中调用关系;根据所述调用关系确定所述未覆盖的改动代码的调用链,将所述调用链作为软件测试范围。还提供了一种软件测试方法和装置,对上述软件测试范围确定方法确定的软件测试范围进行软件测试。该软件测试方法和装置能够精确地确定软件测试范围,减少了盲目覆盖或者过度覆盖带来的人力和资源浪费,进而提高了测试精度和测试效率。

【技术实现步骤摘要】
一种软件测试范围确定方法、软件测试方法和装置
本专利技术属于互联网软件测试领域,具体涉及一种软件测试范围确定方法、应用该软件测试范围确定方法的软件测试方法和装置。
技术介绍
常量池在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)函数的行号:记录每个函数体中起始指令和终止指令的范围。具体地,通过正则表达式获取文件中所需要的信息,例如:函数名称,函数注解,函数参数,函数行号等。把每一个原始函数信息和类信息进行封装成特定的调用关系本文档来自技高网
...

【技术保护点】
1.一种软件测试范围确定方法,其特征在于,包括:根据改动代码的测试覆盖状态确定未覆盖的改动代码;基于源代码库,通过分析代码常量池,构建代码中调用关系;根据所述调用关系确定所述未覆盖的改动代码的调用链,将所述调用链作为软件测试范围分析依据。

【技术特征摘要】
1.一种软件测试范围确定方法,其特征在于,包括:根据改动代码的测试覆盖状态确定未覆盖的改动代码;基于源代码库,通过分析代码常量池,构建代码中调用关系;根据所述调用关系确定所述未覆盖的改动代码的调用链,将所述调用链作为软件测试范围分析依据。2.如权利要求1所述的软件测试范围确定方法,其特征在于,所述改动代码的覆盖状态获取方法包括:以固定周期解析代码仓库,经比较获得该固定周期内改动代码文件;解析所述改动代码文件获得改动代码;根据所述改动代码文件和测试的覆盖状态生成增量代码覆盖率文件;结合所述增量代码覆盖率文件确定改动代码的覆盖状态。3.如权利要求1或2所述的软件测试范围确定方法,其特征在于,所述根据代码仓库的改动代码的覆盖状态确定未覆盖的改动代码包括:从所述改动代码的覆盖状态中提取未覆盖的改动代码;或,从所述改动代码的覆盖状态中剔除覆盖的改动代码,剩下的为未覆盖的改动代码。4.如权利要求1所述的软件测试范围确定方法,其特征在于,所述基于源代码库,通过分析代码常量池,构建代码中调用关系包括:解析源代码库,获得源代码库中的函数信息和类信息;以所述函数信息和类信息的常量池为数据源,按照指定格式构建代码中调用关系。5.如权利要求1所述的软件测试范围确定方法,其特征在于,当源代码库为jar/war包文件时,采用BCEL方法解析所述jar/war包文件,获得所有class文件;根据所有class文件中的常量池存储结构抽取相应的...

【专利技术属性】
技术研发人员:郭文邦秦宙恺陆蓉蓉
申请(专利权)人:杭州群核信息技术有限公司
类型:发明
国别省市:浙江,33

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

1