CN109271322B - 一种软件测试范围确定方法、软件测试方法和装置 - Google Patents
一种软件测试范围确定方法、软件测试方法和装置 Download PDFInfo
- Publication number
- CN109271322B CN109271322B CN201811115049.6A CN201811115049A CN109271322B CN 109271322 B CN109271322 B CN 109271322B CN 201811115049 A CN201811115049 A CN 201811115049A CN 109271322 B CN109271322 B CN 109271322B
- Authority
- CN
- China
- Prior art keywords
- code
- function
- change
- determining
- software
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3676—Test management for coverage analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种软件测试范围确定方法,包括:根据改动代码的覆盖状态确定未覆盖的改动代码;基于源代码库,按照指定格式构建代码中调用关系;根据所述调用关系确定所述未覆盖的改动代码的调用链,将所述调用链作为软件测试范围。还提供了一种软件测试方法和装置,对上述软件测试范围确定方法确定的软件测试范围进行软件测试。该软件测试方法和装置能够精确地确定软件测试范围,减少了盲目覆盖或者过度覆盖带来的人力和资源浪费,进而提高了测试精度和测试效率。
Description
技术领域
本发明属于互联网软件测试领域,具体涉及一种软件测试范围确定方法、应用该软件测试范围确定方法的软件测试方法和装置。
背景技术
常量池在java用于保存在编译期已确定的,已编译的class文件中的一份数据。它包括了关于类,方法,接口等中的常量,也包括字符串常量,当然也可扩充,执行器产生的常量也会放入常量池,常量池被认为是JVM的一块特殊的内存空间。在本申请中,常量池包括了一个类的结构索引,代码文件中对对象的引用可以通过索引位置来替代。
class文件全名称为Java class文件,是Java文件的源码编译之后的文件,主要在平台无关性和网络移动性方面使Java更适合网络。它在平台无关性方面的任务是:为Java程序提供独立于底层主机平台的二进制形式的服务。
Byte Code Engineering Library(BCEL),是Java classworking最广泛使用的一种框架,它可以让用户深入JVM汇编语言进行类操作的细节。BCEL作为处理字节码方法,是在实际的JVM指令层次上进行操作(BCEL拥有丰富的JVM指令级支持)。具体通过深入jvm的汇编来创建、分析、和操纵class文件。
完全限定名是指能够唯一标识一个类或者一个函数绝对路径的名称,该名称在所有其他命名空间或类型中唯一标识该命名空间或类型。
互联网的业务测试迭代迅速,随着业务发展,已有业务的回归测试和代码优化的重构测试占用的时间越来越长,影响范围也越来越难以评估。在业务开发的过程中,开发人员的替换也会造成代码影响性评估不准确,此时问题隐藏的路径变深,为敏捷开发过程中的已有业务的不稳定埋下隐患。
申请公布号为CN 108073510 A公开了一种软件测试方法,包括对软件业务场景进行分割,生成多个软件业务子场景;从所述软件业务子场景中抽取软件业务功能点,生成包含所述软件业务子场景信息和所述软件业务功能点信息的表单;根据所述表单和软件业务规则获得有效软件业务场景;以及根据所述有效软件业务场景获取软件业务功能点脚本进行测试。这专利申请公布的软件测试方法虽然能够检测软件的缺陷,但是对回归测试和重构测试的场景下很难确定测试范围。
发明内容
本发明的目的是提供一种软件测试范围确定方法,具体通过把代码文件常量池的静态分析和覆盖率相结合,根据覆盖率返回的未覆盖代码行确定软件测试范围,该软件测试范围确定方法能够精确地确定软件测试范围,为后续的软件测试提供精准的数据。
本发明的另一目的是提供一种软件测试方法,利用上述软件测试范围确定方法确定测试范围,再根据确定的测试范围进行软件测试,该软件测试方法测试范围准确,测试效率高。
本发明的另一目的是提供一种软件测试装置,该测试装置中包括了上述软件测试方法,该软件测试装置能够准确确定软件测试范围,进而提高测试准确性和效率。
为实现上述发明目的,本发明提供以下技术方案:
一种软件测试范围确定方法,包括:
根据改动代码的覆盖状态确定未覆盖的改动代码;
基于源代码库,通过分析代码常量池,构建代码中调用关系;
根据所述调用关系确定所述未覆盖的改动代码的调用链,将所述调用链作为软件测试范围。
该软件测试范围确定方法中,根据覆盖率确定未覆盖的改动代码,再对代码进行格式的静态分析得到调用关系。最后根据调用关系确定未覆盖的改动代码的调用链,进而确定软件测试范围。该方法确定的软件测试范围精准,为后续软件测试提供可靠的数据源。
具体地,所述改动代码的覆盖状态获取方法包括:
以固定周期解析代码仓库,经比较获得该固定周期内改动代码文件;
解析所述改动代码文件获得改动代码;
根据所述改动代码文件和测试的覆盖状态生成增量代码覆盖率文件;
结合所述增量代码覆盖率文件确定改动代码的覆盖状态。
在应用时,首先获取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提供的软件测试方法的步骤。
本实施例所述的处理器和存储器可以是现有的任意的处理器和存储器,此处不限制。
本实施例提供的测试装置中包括了上述软件测试方法,该软件测试装置能够准确确定软件测试范围,进而提高测试准确性和效率。
以上所述的具体实施方式对本发明的技术方案和有益效果进行了详细说明,应理解的是以上所述仅为本发明的最优选实施例,并不用于限制本发明,凡在本发明的原则范围内所做的任何修改、补充和等同替换等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种软件测试范围确定方法,其特征在于,包括:
根据改动代码的测试覆盖状态确定未覆盖的改动代码;
基于源代码库,通过分析代码常量池,构建代码中调用关系,其中,函数调用关系的格式为:函数调用的标识-起始函数的类完全限定名-起始函数-起始函数的参数-函数调用的类型标识-被调用函数的名称-被调用函数的类的完全限定名-被调用函数的参数-起始函数的注解-起始函数的代码行号;类调用关系的格式为:类调用的标识-起始类-被调用类;
根据所述调用关系确定所述未覆盖的改动代码的调用链,将所述调用链作为软件测试范围分析依据;
其中,所述改动代码的覆盖状态获取方法包括:
以固定周期解析代码仓库,经比较获得该固定周期内改动代码文件;
解析所述改动代码文件获得改动代码;
根据所述改动代码文件和测试的覆盖状态生成增量代码覆盖率文件;
结合所述增量代码覆盖率文件确定改动代码的覆盖状态。
2.如权利要求1所述的软件测试范围确定方法,其特征在于,所述根据代码仓库的改动代码的覆盖状态确定未覆盖的改动代码包括:
从所述改动代码的覆盖状态中提取未覆盖的改动代码;或,
从所述改动代码的覆盖状态中剔除覆盖的改动代码,剩下的为未覆盖的改动代码。
3.如权利要求1所述的软件测试范围确定方法,其特征在于,所述基于源代码库,按照指定格式构建代码中调用关系包括:
解析源代码库,获得源代码库中的函数信息和类信息;
以所述函数信息和类信息的常量池为数据源,按照指定格式构建代码中调用关系。
4.如权利要求1所述的软件测试范围确定方法,其特征在于,
当源代码库为jar/war包文件时,采用BCEL方法解析所述jar/war包文件,获得所有class文件;
根据所有class文件中的常量池存储结构抽取相应的函数信息和类信息,形成调用关系。
5.如权利要求1所述的软件测试范围确定方法,其特征在于,在获得函数调用关系后,对所述函数调用关系进行去重和过滤处理,以去掉重复和不可能被修改的函数对应的函数调用关系。
6.如权利要求1所述的软件测试范围确定方法,其特征在于,所述根据所述函数调用关系确定所述未覆盖的改动代码的调用链包括:
在所有函数调用关系中,根据未覆盖的改动代码行号进行搜索,找到该改动代码行号所在的函数调用关系;
并根据找到的函数调用关系确定起始函数,以该起始函数的接口名称和路径作为软件测试范围。
7.一种软件测试方法,其特征在于,包括:
根据权利要求1~6任一项权利要求所述的软件测试范围确定方法确定软件测试范围;
对确定的软件测试范围进行软件测试。
8.一种软件测试装置,包括:一个或多个处理器,存储器以及存储在所述存储器中并可在所述一个或多个处理器上执行的一个或多个计算机程序,其特征在于,
所述一个或多个处理器在执行所述一个或多个计算机程序时,实现如权利要求7所述软件测试方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811115049.6A CN109271322B (zh) | 2018-09-25 | 2018-09-25 | 一种软件测试范围确定方法、软件测试方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811115049.6A CN109271322B (zh) | 2018-09-25 | 2018-09-25 | 一种软件测试范围确定方法、软件测试方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109271322A CN109271322A (zh) | 2019-01-25 |
CN109271322B true CN109271322B (zh) | 2021-09-28 |
Family
ID=65197962
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811115049.6A Active CN109271322B (zh) | 2018-09-25 | 2018-09-25 | 一种软件测试范围确定方法、软件测试方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109271322B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111831573B (zh) * | 2020-07-27 | 2024-03-08 | 中国工商银行股份有限公司 | 代码分支覆盖情况的确定方法、装置、计算机系统和介质 |
CN113190442A (zh) * | 2021-04-27 | 2021-07-30 | 上海安畅网络科技股份有限公司 | 一种测试范围度量及测试覆盖检查的方法及系统 |
CN117215965B (zh) * | 2023-11-09 | 2024-02-27 | 恒生电子股份有限公司 | 基于测试用例识别的测试方法、装置、电子设备和介质 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101482815B (zh) * | 2008-01-10 | 2013-08-07 | 国际商业机器公司 | 生成软件系统的测试用例的方法和设备 |
CN106528399A (zh) * | 2015-09-15 | 2017-03-22 | 腾讯科技(深圳)有限公司 | 一种测试用例确定方法及装置 |
CN106909510B (zh) * | 2017-03-02 | 2020-11-24 | 腾讯科技(深圳)有限公司 | 一种获取测试用例的方法以及服务器 |
-
2018
- 2018-09-25 CN CN201811115049.6A patent/CN109271322B/zh active Active
Non-Patent Citations (1)
Title |
---|
安全软件变更的测试范围界定;吴炳昊;《铁路通信信号工程技术》;20141231;第11卷(第06期);第15-17页 * |
Also Published As
Publication number | Publication date |
---|---|
CN109271322A (zh) | 2019-01-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108628751B (zh) | 一种无用依赖项检测方法及装置 | |
CN109271322B (zh) | 一种软件测试范围确定方法、软件测试方法和装置 | |
CN110737899A (zh) | 一种基于机器学习的智能合约安全漏洞检测方法 | |
CN109033843B (zh) | 用于分布式静态检测系统的Java文件依赖性分析方法及模块 | |
CN111209217A (zh) | 系统软件功能测试方法、装置、设备及存储介质 | |
CN107038117B (zh) | 一种基于事件处理函数间定义-引用的web自动化测试方法 | |
CN115905031A (zh) | 一种基于精准质量保障系统的测试用例推荐方法 | |
CN111190643A (zh) | 程序代码注释的生成方法、系统、电子设备及存储介质 | |
CN102521135B (zh) | 线性系统的测试方法和装置 | |
CN106919403B (zh) | 云环境下基于Java字节码的多粒度代码克隆检测方法 | |
CN111240987B (zh) | 移植程序检测方法、装置、电子设备及计算机可读存储介质 | |
CN115292203B (zh) | 一种源代码分析方法及装置 | |
CN111966578A (zh) | 一种安卓兼容性缺陷修复效果的自动化评估方法 | |
CN110716859A (zh) | 自动为修改的代码推送测试用例的方法及相关装置 | |
US11861389B2 (en) | Compiling a specified instruction from a first virtual application to a second virtual application | |
CN113821486B (zh) | pod库之间依赖关系的确定方法及其装置、电子设备 | |
CN113127367B (zh) | Android动态权限申请的缺陷检测方法 | |
CN113138767B (zh) | 代码语言转换方法、装置、电子设备及存储介质 | |
CN113946339A (zh) | 应用工程文件的处理方法、装置、电子设备及可读介质 | |
CN112445482B (zh) | 面向容量受限的程序栈空间深度追溯方法 | |
CN109144564B (zh) | 一种基于历史修改模式的修改影响分析推荐方法及其系统 | |
CN112631944A (zh) | 基于抽象语法树的源码检测方法及装置、计算机存储介质 | |
Nostas et al. | How do developers use the Java Stream API? | |
Ivankovic et al. | Productive Coverage: Improving the Actionability of Code Coverage | |
CN110297639B (zh) | 用于检测代码的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB03 | Change of inventor or designer information |
Inventor after: Guo Wenbang Inventor after: Qin Zhoukai Inventor after: Zhang Ji Inventor after: Lu Rongrong Inventor before: Guo Wenbang Inventor before: Qin Zhoukai Inventor before: Lu Rongrong |
|
CB03 | Change of inventor or designer information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |