CN103186468B - 一种验证软件升级准确性的方法和装置 - Google Patents
一种验证软件升级准确性的方法和装置 Download PDFInfo
- Publication number
- CN103186468B CN103186468B CN201310122570.3A CN201310122570A CN103186468B CN 103186468 B CN103186468 B CN 103186468B CN 201310122570 A CN201310122570 A CN 201310122570A CN 103186468 B CN103186468 B CN 103186468B
- Authority
- CN
- China
- Prior art keywords
- use case
- identification information
- function
- information
- data packet
- 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
- 238000000034 method Methods 0.000 title claims abstract description 102
- 230000006870 function Effects 0.000 claims description 544
- 238000012795 verification Methods 0.000 claims description 118
- 238000004806 packaging method and process Methods 0.000 claims description 13
- 230000010365 information processing Effects 0.000 claims description 12
- 238000010200 validation analysis Methods 0.000 claims description 9
- 238000012217 deletion Methods 0.000 claims description 7
- 230000037430 deletion Effects 0.000 claims description 7
- 238000012544 monitoring process Methods 0.000 description 34
- 238000012360 testing method Methods 0.000 description 26
- 238000010586 diagram Methods 0.000 description 14
- 230000014509 gene expression Effects 0.000 description 12
- 238000004891 communication Methods 0.000 description 8
- 238000012545 processing Methods 0.000 description 7
- 230000000694 effects Effects 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 6
- 239000011800 void material Substances 0.000 description 6
- 230000007547 defect Effects 0.000 description 4
- 230000006399 behavior Effects 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 239000000284 extract Substances 0.000 description 3
- 238000002955 isolation Methods 0.000 description 3
- 238000012423 maintenance Methods 0.000 description 3
- 239000013589 supplement Substances 0.000 description 3
- 238000006467 substitution reaction Methods 0.000 description 2
- 238000013142 basic testing Methods 0.000 description 1
- XXQCMVYBAALAJK-UHFFFAOYSA-N ethyl n-[4-[benzyl(2-phenylethyl)amino]-2-(2-phenylethyl)-1h-imidazo[4,5-c]pyridin-6-yl]carbamate Chemical compound N=1C=2C(N(CCC=3C=CC=CC=3)CC=3C=CC=CC=3)=NC(NC(=O)OCC)=CC=2NC=1CCC1=CC=CC=C1 XXQCMVYBAALAJK-UHFFFAOYSA-N 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 238000011022 operating instruction Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Landscapes
- Stored Programmes (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明实施例提供一种验证软件升级准确性的方法和装置,用于对升级后的软件进行精确地验证,该方法包括:软件升级验证装置获取升级数据包和本地软件,在确定该升级数据包内函数的版本高于该本地软件内对应的函数的版本时,根据该升级数据包内函数的标识信息从用例关系数据库中获取对应的用例的标识信息,获取该用例的标识信息对应的用例,并将该用例封装为验证执行包,以用于验证该本地软件通过该升级数据包升级后的准确性。本发明实施例用于验证软件升级的准确性。
Description
技术领域
本发明涉及软件升级验证领域,尤其涉及一种验证软件升级准确性的方法和装置。
背景技术
软件升级,是指软件开发者在编写软件的时候,由于设计人员考虑不全面或程序功能不完善,在软件发行后,通过对程序的修改或加入新的功能后,以补丁的形式发布的方式,用户把这些补丁更新,即升级完成。在软件升级的同时,也要注意该版本的稳定性和实用性,并不是最新版本就是最好,对大多数用户来说,稳定性往往比功能更重要。目前通行的做法是,在软件升级之后,会先停止对外服务一段时间,对升级后的软件进行基本功能的验证,验证的基础是一些基本测试用例的集合,验证基本功能后再对外提供服务。
现有的软件升级和升级验证过程包括以下步骤:
步骤1、升级数据包发布后,查看升级数据包的升级内容,判定是否需要升级;
步骤2、确定需要升级后,对外停止提供服务(特别是对外服务的大型软件,如网管软件和网站服务等),并停止软件的进程,备份软件系统与数据,进行升级;
步骤3、完成升级数据包安装,启动软件进程,进行内部基本功能测试,一般会执行简单的验收测试用例
步骤4、基本功能测试通过后,软件再度上线,对外提供服务。
步骤5、软件升级后上线正常运行一段时间(如两周),确认软件运行稳定,则升级顺利完成。
由此可知,现有技术中的升级验证通常是根据一套基本功能验证用例来验证。由于该套用例针对最基础功能,很容易导致软件缺陷不被发现,使得验证的过程不精确,从而影响软件对外提供的服务。
发明内容
本发明提供一种验证软件升级准确性的方法和装置,用于一定程度上提高对升级后软件的验证准确性。。
为达到上述目的,本发明的实施例采用如下技术方案:
第一方面,提供一种验证软件升级准确性的方法,包括:
获取升级数据包和本地软件;
在确定所述升级数据包内函数的版本高于所述本地软件内对应的函数的版本时,根据所述升级数据包内函数的标识信息从用例关系数据库中获取对应的用例的标识信息;其中,所述用例关系数据库包括所述升级数据包内函数的标识信息和所述用例的标识信息的对应关系;
获取所述用例的标识信息对应的用例,并将所述用例封装为验证执行包,以用于验证所述本地软件通过所述升级数据包升级后的准确性。
在第一方面的第一种可能的实现方式中,所述确定所述升级数据包内函数的版本高于所述本地软件内对应的函数的版本,包括:
在所述升级数据包内函数的版本号高于所述本地软件内对应的函数的版本号时,确定所述升级数据包内函数的版本高于所述本地软件内函数的版本。
在第一方面的第二种可能的实现方式中,所述方法还包括:
在所述获取本地软件和升级数据包的步骤之后,所述方法还包括:
根据所述升级数据包内函数和所述本地软件内对应的函数得到差量信息;其中,所述差量信息包括升级标记和所述升级数据包内函数的标识信息,所述升级标记用于指示所述本地软件内函数和所述升级数据包内对应的函数的版本状态;
在确定所述升级数据包内函数的版本高于所述本地软件内函数的版本时,根据所述升级数据包内函数的标识信息从用例关系数据库中获取对应的用例的标识信息,包括:
在根据所述差量信息中的升级标记确定所述升级数据包内函数的版本高于所述本地软件内对应的函数的版本时,根据所述差量信息中所述升级数据包内函数的标识信息从所述用例关系数据库中获取对应的用例的标识信息。
结合后第二种可能的实现方式,在第三种可能的实现方式中,所述升级标记包括:更新标识、删除标识和无变更标识;
所述更新标识指示所述升级数据包内函数和所述本地软件内对应的函数都存在且所述升级数据包内函数的版本高于所述本地软件内对应的函数的版本;或者,所述更新标识指示所述升级数据包内函数存在,所述本地软件内对应的函数不存在且所述升级数据包内函数的版本高于所述本地软件内对应的函数的版本;
所述删除标识指示所述升级数据包内函数不存在,所述本地软件内对应的函数存在,且所述升级数据包内函数的版本高于所述本地软件内对应的函数的版本;
所述无变更标识指示所述升级数据包内函数和所述本地软件内对应的函数都存在且所述升级数据包内函数的版本与所述本地软件内对应的函数的版本一致。
结合第一方面至第三种可能的实现方式中的任一项,在第四种可能的实现方式中,在所述根据所述升级数据包内函数的标识信息从用例关系数据库中获取对应的用例的标识信息之前,所述方法还包括:
确定所述用例关系数据库中是否存储有与所述升级数据包内函数的标识信息对应的用例的标识信息;
所述根据所述升级数据包内函数的标识信息从用例关系数据库中获取对应的用例的标识信息,包括:
在确定所述用例关系数据库中存储有与所述升级数据包内函数的标识信息对应的用例的标识信息时,根据所述升级数据包内函数的标识信息从所述用例关系数据库中获取对应的用例的标识信息;
在确定所述用例关系数据库中未存储与所述升级数据包内函数的标识信息对应的用例的标识信息时,将所述升级数据包内函数的标识信息封装为无用例信息包。
结合第一方面至第一方面第四种可能的实现方式中的任一种,在第五种可能的实现方式中,在所述获取所述用例的标识信息对应的用例前,所述方法还包括:
确定是否缓存有所述用例的标识信息对应的用例;
所述获取所述用例的标识信息对应的用例,包括:
在确定缓存有所述用例的标识信息对应的用例时,获取缓存的所述用例的标识信息对应的用例;
在确定未缓存所述用例的标识信息对应的用例时,从公共用例库中获取所述用例的标识信息对应的用例。
结合第五种可能的实现方式,在第六种可能的实现方式中,所述方法还包括:
在所述获取缓存的所述用例的标识信息对应的用例的步骤之后,所述方法还包括:
将所述升级数据包内函数的优先级评分与获取的所述用例的标识信息对应的用例的优先级评分中最高的优先级评分作为所述用例的优先级评分;
在所述从公共用例库中获取所述用例的标识信息对应的用例的步骤之后,所述方法还包括:
缓存所述用例,并将所述升级数据包内函数的优先级评分作为所述用例的优先级评分。
结合第一方面至第一方面第六种可能的实现方式中的任一种,在第七种可能的实现方式中,
所述方法还包括:
更新所述用例关系数据库。
结合第七种可能的实现方式,在第八种可能的实现方式中,所述更新所述用例关系数据库包括:
获取用例的标识信息,所述用例的标识信息为用户通过用例信息输入界面输入的用例的标识信息,或通过用例信息录入接口接收的用例的标识信息;
获取所述用例的标识信息对应的用例运行时调用的验证软件内函数的标识信息;其中,所述验证软件为所述本地软件通过所述升级数据包升级后所对应的软件;
根据所述用例的标识信息和所述用例运行时调用的验证软件内函数的标识信息更新所述用例关系数据库,其中,所述用例运行时调用的验证软件内函数的标识信息与所述升级数据包内函数的标识信息对应。
结合第八种可能的实现方式,在第九种可能的实现方式中,在所述根据所述用例的标识信息和所述用例运行时调用的验证软件内函数的标识信息更新用例关系数据库,包括:
根据所述用例的标识信息和所述用例运行时调用的验证软件内函数的标识信息获得用例关系信息,其中,所述用例关系信息包括所述用例的标识信息和所述用例运行时调用的验证软件内函数的标识信息的对应关系;
根据所述用例关系信息更新所述用例关系数据库。
结合第九种可能的实现方式,在第十种可能的实现方式中,在所述根据所述用例关系信息更新所述用例关系数据库前,所述方法还包括:
确定所述用例关系数据库是否存储有所述用例关系信息中的用例的标识信息对应的历史用例关系信息;
所述根据所述用例关系信息更新所述用例关系数据库,包括:
若确定所述用例关系数据库未存储所述历史用例关系信息,则将所述用例关系信息存入所述用例关系数据库中;
若确定所述用例关系数据库存储有所述历史用例关系信息,则根据所述用例关系信息按照更新策略更新所述用例关系数据库。
结合第十种可能的实现方式,在第十一中可能的实现方式中,所述根据所述用例关系信息按照更新策略更新所述用例关系数据库,包括:
删除所述历史用例关系信息,并将所述用例关系信息存入所述用例关系数据库中;或者,
保留所述历史用例关系信息,并将所述用例关系信息存入所述用例关系数据库中;或者,
保留所述历史用例关系信息,丢弃所述用例关系信息。
第二方面,提供一种软件升级验证装置,包括:
差量升级分析单元,用于获取升级数据包和本地软件,并确定所述升级数据包内函数的版本高于所述本地软件内对应的函数的版本;
用例关系解析单元,用于在所述差量升级分析单元确定所述升级数据包内函数的版本高于所述本地软件内对应的函数的版本时,根据所述升级数据包内函数的标识信息从用例关系数据库中获取对应的用例的标识信息;其中,所述用例关系数据库包括所述升级数据包内函数的标识信息和所述用例的标识信息的对应关系;
自动化用例组装单元,用于获取所述用例关系解析单元获取的用例的标识信息对应的用例,并将所述用例封装为验证执行包,以用于验证所述本地软件通过所述升级数据包升级后的准确性。
在第二方面第一种可能的实现方式中,所述差量升级分析单元具体用于,在所述升级数据包内函数的版本号高于所述本地软件内对应的函数的版本号时,确定所述升级数据包内函数的版本高于所述本地软件内函数的版本。
在第一方面第二种可能的实现方式中,所述差量升级分析单元还用于,在获取本地软件和升级数据包之后,根据所述升级数据包内函数和所述本地软件内对应的函数得到差量信息;其中,所述差量信息包括升级标记和所述升级数据包内函数的标识信息,所述升级标记用于指示所述本地软件内函数和所述升级数据包内对应的函数的版本状态;
所述用例关系解析单元具体用于,在根据所述差量升级分析单元得到的差量信息中的升级标记确定所述升级数据包内函数的版本高于所述本地软件内对应的函数的版本时,根据所述差量信息中所述升级数据包内函数的标识信息从所述用例关系数据库中获取对应的用例的标识信息。
结合第二种可能的实现方式,在第三种可能的实现方式中,所述升级标记包括:更新标识、删除标识和无变更标识;
所述更新标识指示所述升级数据包内函数和所述本地软件内对应的函数都存在且所述升级数据包内函数的版本高于所述本地软件内对应的函数的版本;或者,所述更新标识指示所述升级数据包内函数存在,所述本地软件内对应的函数不存在且所述升级数据包内函数的版本高于所述本地软件内对应的函数的版本;
所述删除标识指示所述升级数据包内函数不存在,所述本地软件内对应的函数存在,且所述升级数据包内函数的版本高于所述本地软件内对应的函数的版本;
所述无变更标识指示所述升级数据包内函数和所述本地软件内对应的函数都存在且所述升级数据包内函数的版本与所述本地软件内对应的函数的版本一致。
结合第二方面至第三种可能的实现方式中的任一项,在第四种可能的实现方式中,所述用例关系解析单元,还用于在根据所述升级数据包内函数的标识信息从用例关系数据库中获取对应的用例的标识信息之前,确定所述用例关系数据库中是否存储有与所述升级数据包内函数的标识信息对应的用例的标识信息;
在确定所述用例关系数据库中存储有与所述升级数据包内函数的标识信息对应的用例的标识信息时,根据所述升级数据包内函数的标识信息从所述用例关系数据库中获取对应的用例的标识信息;
在确定所述用例关系数据库中未存储与所述升级数据包内函数的标识信息对应的用例的标识信息时,将所述升级数据包内函数的标识信息封装为无用例信息包。
结合第二方面至第四种可能的实现方式中的任一项,在第五种可能的实现方式中,所述用例关系解析单元,还用于在获取所述用例的标识信息对应的用例前,确定是否缓存有所述用例的标识信息对应的用例;
在确定缓存有所述用例的标识信息对应的用例时,获取所述缓存的所述用例的标识信息对应的用例;
在确定未缓存所述用例的标识信息对应的用例时,从公共用例库中获取所述用例的标识信息对应的用例。
结合第五种可能的实现方式,在第六种可能的实现方式中,所述用例关系解析单元,还用于在获取缓存的所述用例的标识信息对应的用例之后,将所述升级数据包内函数的优先级评分与获取的所述用例的标识信息对应的的用例的优先级评分中最高的优先级评分作为所述用例的优先级评分;
在从公共用例库中获取所述用例的标识信息对应的用例之后,缓存所述用例,并将所述升级数据包内函数的优先级评分作为所述用例的优先级评分。
结合第二方面至第六种可能的实现方式中的任一项,在第七种可能的实现方式中,所述装置还包括:
用例关系更新单元,用于更新所述用例关系数据库。
结合第七种可能的实现方式,在第八种可能的实现方式中,所述用例关系更新单元包括:
用例信息收集模块,用于获取用例的标识信息,所述用例的标识信息为用户通过用例信息输入界面输入的用例的标识信息,或通过用例信息录入接口接收的用例的标识信息;
软件运行信息收集模块,用于获取所述用例的标识信息对应的用例运行时调用的验证软件内函数的标识信息;其中,所述验证软件为所述本地软件通过所述升级数据包升级后所对应的软件;
关系信息处理模块,用于根据所述用例的标识信息和所述用例运行时调用的验证软件内函数的标识信息更新所述用例关系数据库,其中,所述用例运行时调用的验证软件内函数的标识信息与所述升级数据包内函数的标识信息对应。
结合第八种可能的实现方式,在第九种可能的实现方式中,所述关系信息处理模块具体用于,在根据所述用例的标识信息和所述用例运行时调用的验证软件内函数的标识信息获得用例关系信息,并根据所述用例关系信息更新所述用例关系数据库,其中,所述用例关系信息包括所述用例的标识信息和所述用例运行时调用的验证软件内函数的标识信息的对应关系。
结合第九种可能的实现方式,在第十种可能的实现方式中,所述关系信息处理模块,还用于在根据所述用例关系信息更新所述用例关系数据库前,确定所述用例关系数据库是否存储有所述用例关系信息中的用例的标识信息对应的历史用例关系信息;
若确定所述用例关系数据库未存储所述历史用例关系信息,则将所述用例关系信息存入所述用例关系数据库中;
若确定所述用例关系数据库存储有所述历史用例关系信息,则根据所述用例关系信息按照更新策略更新所述用例关系数据库。
结合第十种可能的实现方式,在第十一种可能的实现方式中,所述关系信息处理模块,具体用于在确定所述用例关系数据库存储有所述历史用例关系信息时,
删除所述历史用例关系信息,并将所述用例关系信息存入所述用例关系数据库中;或者,
保留所述历史用例关系信息,并将所述用例关系信息存入所述用例关系数据库中;或者,
保留所述历史用例关系信息,丢弃所述用例关系信息。
采用上述方案,软件升级验证装置获取升级数据包和本地软件,在确定该升级数据包内函数的版本高于该本地软件内对应的函数的版本时,根据该升级数据包内函数的标识信息从用例关系数据库中获取对应的用例的标识信息,并获取该用例的标识信息对应的用例,并将该用例封装为验证执行包,以用于验证该本地软件通过该升级数据包升级后的准确性。从而能够精确的对升级后的软件进行验证,提高了验证过程的可靠性,另外,该软件升级验证装置还可以根据获取的用例的标识信息和该用例的标识信息对应的用例运行时调用的验证软件内函数的标识信息更新用例关系数据库,该用例关系数据库中存储有用例的标识信息与验证软件内函数的标识信息的对应关系,从而支持上述对升级软件的精确验证。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种验证软件升级准确性的系统;
图2为本发明实施例提供的一种验证软件升级准确性的方法示意图;
图3为本发明实施例提供的一种验证执行包采用JAVA语言实现的示例图;
图4为本发明实施例提供的另一种验证软件升级准确性的方法示意图;
图5为本发明实施例提供的一种用例信息输入界面示意图;
图6为本发明实施例提供的一种用例关系信息的表结构与结构关系示例图;
图7为本发明实施例提供的一种验证软件升级准确性的方法的流程示意图;
图8为本发明实施例提供的另一种验证软件升级准确性的方法的流程示意图;
图9为本发明实施例提供的一种软件升级验证装置的结构示意图;
图10为本发明实施例提供的另一种软件升级验证装置的结构示意图;
图11为本发明实施例提供的另一种软件升级验证装置的结构示意图;
图12为本发明实施例提供的另一种软件升级验证装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明各实施例提供的技术方案可应用于一种验证软件升级准确性的系统,如图1所示,该系统包括:
软件升级验证装置10,用于获取升级数据包和本地软件,在确定该升级数据包内函数的版本高于该本地软件内对应的函数的版本时,根据该升级数据包内函数的标识信息从用例关系数据库中获取对应的用例的标识信息;并获取该用例的标识信息对应的用例,并将该用例封装为验证执行包,以用于验证该本地软件通过该升级数据包升级后的准确性。
其中,该用例关系数据库包括该升级数据包内函数的标识信息和该用例的标识信息的对应关系。
另外,该软件升级验证装置10还用于更新该用例关系数据库。
软件信息监控模块11,用于跟踪监测用例的标识信息对应的用例运行时调用的验证软件内函数,以便软件升级验证装置根据获取的用例的标识信息和用例运行时调用的验证软件内函数的标识信息更新用例关系数据库。
其中,该验证软件为该本地软件通过该升级数据包升级后所对应的软件,且该验证软件由软件厂商提供并能够正常运行基本的软件功能。
用例关系数据库12,用于存储用例关系信息。
其中,该用例关系信息包括该用例的标识信息和该用例运行时调用的验证软件内函数的标识信息的对应关系;该用例运行时调用的验证软件内函数的标识信息与升级包内函数的标识信息对应。
公共用例库13,用于存储用例的标识信息对应的用例。
本发明实施例提供一种验证软件升级准确性的方法,如图2所示,该方法的执行主体可以为本发明实施例提供的软件升级验证装置,该方法包括:
S201、软件升级验证装置获取升级数据包和本地软件。
S202、在确定该升级数据包内函数的版本高于该本地软件内对应的函数的版本时,软件升级验证装置根据该升级数据包内函数的标识信息从用例关系数据库中获取对应的用例的标识信息。
其中,该用例关系数据库包括该升级数据包内函数的标识信息和该用例的标识信息的对应关系,示例地,该用例的标识信息可以包括用例的名称、用例的编号和用例的类型等信息。
具体地,软件升级验证装置根据该升级数据包内函数的版本号和本地软件内对应的函数的版本号确定该升级数据包内函数的版本是否高于本地软件内对应的函数的版本,在该升级数据包内函数的版本号高于该本地软件内对应的函数的版本号时,确定该升级数据包内函数的版本高于该本地软件内函数的版本,例如,该升级数据包内函数的版本号为3.2.1,该本地软件内对应的函数的版本号为3.2.0,则确定该升级数据包内函数的版本号高于该本地软件内对应的函数的版本号,也就是说,该升级数据包内函数的版本高于该本地软件内对应的函数的版本。
进一步地,在本发明一种可能的实现方式中,软件升级验证装置在获取本地软件和升级数据包之后,软件升级验证装置根据该升级数据包内函数和该本地软件内对应的函数得到差量信息,并在根据该差量信息中的升级标记确定该升级数据包内函数的版本高于该本地软件内对应的函数的版本时,软件升级验证装置根据该差量信息中该升级数据包内函数的标识信息从该用例关系数据库中获取对应的用例的标识信息。
其中,该差量信息包括升级标记和该升级数据包内函数的标识信息,该升级标记用于指示该本地软件内函数和该升级数据包内对应的函数的版本状态。
需要说明的是,该升级标记包括更新标识、删除标识和无变更标识,其中,该更新标识指示该升级数据包内函数和该本地软件内对应的函数都存在且该升级数据包内函数的版本高于该本地软件内对应的函数的版本,或者,
该更新标识指示该升级数据包内函数存在,该本地软件内对应的函数不存在且该升级数据包内函数的版本高于该本地软件内对应的函数的版本,此时,该本地软件内对应的函数的版本号可以视为0。
该删除标识指示该升级数据包内函数不存在,该本地软件内对应的函数存在,且该升级数据包内函数的版本高于该本地软件内对应的函数的版本。
该无变更标识指示该升级数据包内函数和该本地软件内对应的函数都存在且该升级数据包内函数的版本与该本地软件内对应的函数的版本一致。
需要说明的是,当该升级标记为删除标识时,虽然升级数据包内函数不存在,但是,由于升级数据包内函数的标识信息和该升级数据包内函数的版本号存在,因此,仍然可以通过升级数据包内函数的版本号和本地软件内对应的函数的版本号确定该升级数据包内函数的版本高于本地软件内对应的函数的版本。
示例地,该差量信息中升级数据包内函数的标识信息可以是函数名或者路径,例如,该升级数据包内函数的标识信息可以包括以下几种定义格式:
JAVA格式:包+类+“::”+函数(参数类型),如com.my.corp.sample.Test::testl(String,int,TestSample)
C++格式:类+“::”+函数(含参数类型),如Ne_CreateSeq::Test_Create(TestSample)
Python、shell脚本格式:相对路径文件名称+“::”+函数(含参数类型),如Python脚本格式:bin/module/test.py::test()以及shell脚本格式:bin/module/test.sh::test()
Xml、properties文件格式:相对路径文件名名称+“::”+文件内结构,
如Xml文件格式:config/test.xml::body.html.value以及properties文件格式:config/test.properties::ServerIP。
上述定义的格式只是举例说明,不作限定。
进一步地,在获取该用例的标识信息对应的用例前,软件升级验证装置确定是否缓存有该用例的标识信息对应的用例。
在确定缓存有该用例的标识信息对应的用例时,软件升级验证装置获取该缓存的用例。
在获取缓存的该用例的标识信息对应的用例之后,软件升级验证装置将该升级数据包内函数的优先级评分与获取的该用例的标识信息对应的用例的优先级评分中最高的优先级评分作为该用例的优先级评分。
具体地,将升级数据包内函数对应的CODE_INFO中的CODE_RANGE字段的值和获取的该用例的标识信息对应的用例对应的CODE_INFO中的CODE_RANGE字段的值进行比较,由于CODE_RANGE字段的值越低,则优先级评分越高,因此将升级数据包内函数和该用例中的CODE_RANGE字段的最低值对应的优先级评分作为该用例的优先级评分。
在确定未缓存该用例的标识信息对应的用例时,软件升级验证装置从公共用例库中获取该用例的标识信息对应的用例。
在从公共用例库中获取该用例的标识信息对应的用例之后,软件升级验证装置缓存该用例,并将该升级数据包内函数的优先级评分作为该用例的优先级评分。
需要说明的是,用例的标识信息对应的用例可以按照优先级评分进行排序,而优先级评分是根据CODE_RANGE字段的值确定的,每当有一个用例跟该CODE_RANGE字段对应的升级数据包内函数的标识信息建立关系时,该CODE_RANGE的值就加1。
另外,优先级评分高的用例优先进行验证,如果验证的用例数量过多,优先级低的用例将被排除。
S203、软件升级验证装置获取该用例的标识信息对应的用例,并将该用例封装为验证执行包,以用于验证所述本地软件通过所述升级数据包升级后的准确性。
图3为该验证执行包采用JAVA语言实现的示例图,其中,AutoCaseRunnerFactory表示组装自动化用例的总调度;assembleCase用于接收用例列表,然后通过运算,分配每个自动化用例的运行脚本(script)、自动化用例实现类型(java、C++、script)、运行器(ICaseRunner),运行优先级(priority)来收纳进一个可执行包,输出执行包在其定义的属性路径中(executableFilePath);IAutoTestCase表示用例的总接口,提供几个通用的属性供子类扩展,包括有用例名称(name),用例编号(ID),执行器(ICaseRunner),自动化脚本(script),优先级(priority);JavaTypeCase、C++TypeCaseb和ScriptTypeCase表示IAutoTestCase的具体实现体,分别实现java类、c++类以及脚本类的自动化用例调度方式;ICaseRunner和IScriptCaseRunner表示自动化用例运行器接口,该接口定义了运行平台以及触发命令,同时Run方法要求子类实现用例具体调度内容,Run方法具体为执行单独某用例的过程,并且提供执行过程信息以及报告给执行框架;JavaCaseRunner、C++CaseRunner、ShellCaseRunner、BatCaseRunner和PythonCaseRunner表示每种自动化类型用例的具体执行器,如java执行器需要调度jvm的java程序执行,python执行器需要调度python的python命令执行。
需要说明的是,上述验证执行包包括该用例的标识信息和该用例的标识信息对应的用例以及该用例的基本信息,该用例的基本信息包括用例执行时间、自动化脚本、用例执行步骤与预期结果、用例关联特性、用例关联缺陷、性能指标等信息,该用例的基本信息还可以包括其他信息,本发明对此不作限定;这样,用户可以根据该验证执行包对升级的本地软件进行精确地验证。
进一步地,在根据该升级数据包内函数的标识信息从用例关系数据库中获取对应的用例的标识信息之前,软件升级验证装置确定该用例关系数据库中是否存储有与该升级数据包内函数的标识信息对应的用例的标识信息;
在确定该用例关系数据库中存储有与该升级数据包内函数的标识信息对应的用例的标识信息时,根据该升级数据包内函数的标识信息从该用例关系数据库中获取对应的用例的标识信息;
在确定该用例关系数据库中未存储与该升级数据包内函数的标识信息对应的用例的标识信息时,将该升级数据包内函数的标识信息封装为无用例信息包。
其中,该无用例信息包包括该升级数据包内函数的标识信息,需要说明的是,该无用例信息包并不提供给用户,而是提供给软件厂商,以便软件厂商针对该无用例信息包中升级数据包内函数的标识信息补充该升级数据包内函数的标识信息对应的用例。
进一步地,该软件升级验证装置还可以更新用例关系数据库,具体地,如图4所示,该更新过程包括以下步骤:
S401、软件升级验证装置获取用例的标识信息。
具体地,软件升级验证装置获取用例的标识信息包括以下两种方式:
方式一:该用例的标识信息为用户通过用例信息输入界面输入的用例的标识信息。
具体地,该用例信息输入界面如图5所示,其中,用例名称和用例编号用于通知软件升级验证装置目前在收集的用例;用例执行类型用于告知软件升级验证装置用例的类型,在输出给用户执行的自动化用例中,会影响用例执行的环境,可选项有功能用例(默认)、性能用例、可靠性用例、界面用例;用例关系维护策略用于在录入的用例此前已经存储有历史用例关系信息的情况下,根据更新策略(包括覆盖(默认)、合并、忽略)更新用例关系数据库。
方式二:该用例的标识信息通过用例信息录入接口接收的用例的标识信息。
软件升级验证装置通过用例信息录入接口接收该用例的标识信息。
具体地,软件升级验证装置提供调用接口(如API接口),接收外界命令调用。自动化运行程序在运行用例的时候,会告知软件升级验证装置开始录入对应的用例的标识信息,运行用例结束后告知软件升级验证装置结束录入;其中,自动化运行程序是指软件厂商对软件产品进行自动化测试的用例程序。
上述方式一中用户输入的用例的标识信息对应的用例以及方式二中自动化运行程序自动录入的用例的标识信息对应的用例都来自公共用例库。
S402、软件升级验证装置获取该用例的标识信息对应的用例运行时调用的验证软件内函数的标识信息。
其中,该验证软件为该本地软件通过该升级数据包升级后所对应的软件,且该验证软件由软件厂商提供并能够正常运行基本的软件功能。
具体地,软件升级验证装置向软件信息监控模块发送收集指令,以便该软件信息监控模块清空历史数据,并收集该用例的标识信息对应的用例运行时调用的验证软件内函数的标识信息,软件升级验证装置接收软件信息监控模块发送的该验证软件内函数的标识信息。这样,软件信息监控模块在接收到收集执行指令后,清空历史数据,从而保证后续收集信息的精确性。
其中,该软件升级验证装置获取用例的标识信息对应的用例运行时调用的验证软件内函数的标识信息可以包括以下格式:
JAVA格式:包+类+“::”+函数(参数类型),如com.my.corp.sample.Test::testl(String,int,TestSample)
C++格式:类+“::”+函数(参数类型),如Ne_CreateSeq::Test_Create(TestSample)。
需要说明的是,上述软件信息监控模块用于跟踪监测被监控对象运行时的信息(如代码片段、内存申请释放信息或者空间占用信息)。其中,该软件信息监控模块是以插件的形式加载在被测对象的进程中,支持使用JAVA和C++语言编写的应用程序。该软件信息监控模块主要包括以下两种实现方式:
方式一:对被监控对象的源代码或二进制文件或运行环境进行改造,实现监控。
具体地,包括以下三种方案:
方案一,通过在编译期对源代码插桩实现对源代码的改造;该情形适用于C++以及JAVA语言编写的被监控对象,但该方案会带来源代码膨胀,从而使得软件编译变慢,占用的磁盘空间变大,导致运行效率低下。
例如,对于下面被监控语句:
inti=printf(”Iamhere”);
void*ptr=&printf;
源代码经过自动插桩改造,变为:
inti=(z000002(),printf)(”Iamhere”);
void*ptr=&(z000002(),printf);
此处借助C语言的逗号表达式实现插装,根据ANSICC规范,逗号表达式的结果值是最后一个表达式的计算值,比如“exprl,exprt2,expr3”,这3个表达式依次运算,最后返回值是expr3的计算值。所以,不难看出,运行上述插装代码等效于插装前代码,只有一点差别,每次printf函数调用前,插桩函数z000002都被调用一次。由此可知此处代码是否被调用,实现调用状况监控。
方案二,对二进制文件改造;该方案适用于JAVA语言编写的被监控对象,但是该方案会影响软件运行的速度。
例如,JAVA语言的class是种半编译状态的语言,因此在class插桩可以获得类似在上述方案一中源代码插桩的效果,原理与上述方案一相同,此处不再赘述了。
方案三,通过在运行期插桩实现对运行环境的改造,该方案适用于JAVA语言编写的被监控对象。
例如,在JDK5中引进了-javaagent参数,这个参数是允许JVM在加载被测类之前加载依赖java.lang.instrument接口编写的代理;Instrument接口能在JVM运行时向JVM调用的函数添加字节码,以搜集JVM方法调用函数。这种方案对源代码和编译过程没有任何变化,使用时需要对每个JVM进行配置。
方式二:使用面向切面技术进行调用监控。
面向切面(AspectOrientedProgramming,简称AOP)通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。
AOP主要针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果,通过拦截一个对象的行为并添加我们需要的功能来完成。
S403、软件升级验证装置根据该用例的标识信息和该用例运行时调用的验证软件内函数的标识信息更新该用例关系数据库。
其中,该用例运行时调用的验证软件内函数的标识信息与该升级数据包内函数的标识信息对应,示例地,该用例运行时调用的验证软件内函数的标识信息可以与该升级数据包内函数的标识信息一致。
具体地,软件升级验证装置根据该用例的标识信息和该用例运行时调用的验证软件内函数的标识信息获得用例关系信息,并根据该用例关系信息更新该用例关系数据库。
其中,该用例关系信息包括该用例的标识信息和该用例运行时调用的验证软件内函数的标识信息的对应关系。
图6为上述用例关系信息的表结构与结构关系示例图,其中,FUNC_TABLE为功能特性表,即按照用例的标识信息对应的用例的功能特性划分的类别,该表以PARENT_FUNC字段自我关联,支持多层功能特性结构,FUNC_NAME作为记录的关键字段;TESTCASE_INFO为用例信息表,存放用例的标识信息(即用例的基本信息和运行信息等),如用例类型(可选为“功能用例”、“性能用例”、“稳定性用例”、“界面测试用例”)、执行时间等,该表与FUNC_TABLE以PARENT_FUNC字段关联,表示每条用例都会从属于唯一一个功能特性,该表以CASE_ID作为关键字,用例的标识信息与公共用例库中的信息保持一致,另外,该表与FUNC_TABLE是多对一的关系(即图中的n、1表示的关系);CODE_INFO为函数标识信息表,存放验证软件内函数的标识信息(如函数名或路径信息),在本发明实施例中,验证软件内函数的标识信息可以与升级数据包内函数的标识信息一致,以CODE_PATH作为关键字;RELATE_CODE_CASE为用例与验证软件内函数的标识信息的关系表,全字段作为关键字,该表与TESTCASE_INFO以及CODE_INFO均是多对多(即图中的m、n表示的关系)关系,分别以CASE_ID以及CODE_PATH作为关键字关联,本发明实施例中,即表示一个验证软件内函数的标识信息可能对应多个用例的标识信息,一个用例的标识信息也可能对应多个验证软件内函数的标识信息,其中,CODE_INFO表中的CODE_PATH字段对应验证软件内函数的标识信息,TESTCASE_INFO表中的CASE_ID字段对应用例的标识信息,在RELATE_CODE_CASE表中,CODE_PATH字段与CASE_ID字段关联,因此,软件升级验证装置可以根据升级数据包内函数的标识信息通过CODE_INFO表中的CODE_PATH字段确定RELATE_CODE_CASE表中关联的CASE_ID字段,并通过该RELATE_CODE_CASE表中关联的CASE_ID字段得到ESTCASE_INFO表中的CASE_ID字段对应的用例的标识信息。
具体地,在根据该用例关系信息更新该用例关系数据库前,软件升级验证装置确定该用例关系数据库是否存储有该用例关系信息中的用例的标识信息对应的历史用例关系信息;
若确定该用例关系数据库未存储该历史用例关系信息,则将该用例关系信息存入该用例关系数据库中;
若确定该用例关系数据库存储有该历史用例关系信息,则根据该用例关系信息按照更新策略更新该用例关系数据库。
需要说明的是,在确定该用例关系数据库存储有该历史用例关系信息,则根据该用例关系信息按照更新策略更新该用例关系数据库具体包括以下三种更新策略:
一、覆盖:删除该历史用例关系信息,并将该用例关系信息存入该用例关系数据库中;
二、合并:保留该历史用例关系信息,并将该用例关系信息存入该用例关系数据库中;
具体地,将该用例关系信息和历史用例关系信息的并集部分保留,即该用例关系信息和历史用例关系信息不同部分保留,该用例关系信息与该历史用例关系信息相同部分不重复保留。
三、删除:保留该历史用例关系信息,丢弃该用例关系信息。
采用上述执行主体为软件升级验证装置方案,软件升级验证装置获取升级数据包和本地软件,在确定该升级数据包内函数的版本高于该本地软件内对应的函数的版本时,根据该升级数据包内函数的标识信息从用例关系数据库中获取对应的用例的标识信息,并获取该用例的标识信息对应的用例,并将该用例封装为验证执行包,以用于验证该本地软件通过该升级数据包升级后的准确性。从而能够精确的对升级后的软件进行验证,提高了验证过程的可靠性,另外,该软件升级验证装置还可以根据获取的用例的标识信息和该用例的标识信息对应的用例运行时调用的验证软件内函数的标识信息更新用例关系数据库,该用例关系数据库中存储有用例的标识信息与验证软件内函数的标识信息的对应关系,从而支持上述对升级软件的精确验证。
本发明实施例提供一种验证软件升级准确性的方法,如图7所示,包括:
S701、软件升级验证装置获取升级数据包和本地软件,并根据该升级数据包内函数和该本地软件内对应的函数得到差量信息。
其中,该差量信息包括升级标记和该升级数据包内函数的标识信息,该升级标记用于指示该本地软件内函数和该升级数据包内对应的函数的版本状态;
需要说明的是,该升级标记包括更新标识、删除标识和无变更标识,其中,该更新标识指示该升级数据包内函数和该本地软件内对应的函数都存在且该升级数据包内函数的版本高于该本地软件内对应的函数的版本,或者,
该更新标识指示该升级数据包内函数存在,该本地软件内对应的函数不存在且该升级数据包内函数的版本高于该本地软件内对应的函数的版本,此时,该本地软件内对应的函数的版本号可以视为0。
该删除标识指示该升级数据包内函数不存在,该本地软件内对应的函数存在,且该升级数据包内函数的版本高于该本地软件内对应的函数的版本。
该无变更标识指示该升级数据包内函数和该本地软件内对应的函数都存在且该升级数据包内函数的版本与该本地软件内对应的函数的版本一致。
需要说明的是,当该升级标记为删除标识时,虽然升级数据包内函数不存在,但是,由于升级数据包内函数的标识信息和该升级数据包内函数的版本号存在,因此,仍然可以通过升级数据包内函数的版本号和本地软件内对应的函数的版本号确定该升级数据包内函数的版本高于本地软件内对应的函数的版本。
示例地,该差量信息中升级数据包内函数的标识信息可以是函数名或者路径,例如,该升级数据包内函数的标识信息可以包括以下几种定义格式:
JAVA格式:包+类+“::”+函数(参数类型),如com.my.corp.sample.Test::testl(String,int,TestSample)
C++格式:类+“::”+函数(含参数类型),如Ne_CreateSeq::Test_Create(TestSample)
Python、shell脚本格式:相对路径文件名称+“::”+函数(含参数类型),如Python脚本格式:bin/module/test.py::test()以及shell脚本格式:bin/module/test.sh::test()
Xml、properties文件格式:相对路径文件名名称+“::”+文件内结构,
如Xml文件格式:config/test.xml::body.html.value以及properties文件格式:config/test.properties::ServerIP。
上述定义的格式只是举例说明,不作限定。
S702、软件升级验证装置根据该差量信息中的升级标记确定该升级数据包内函数的版本是否高于该本地软件内对应的函数的版本。
在本发明实施例中,当升级标记为更新标识或者删除标识时,则确定该升级数据包内函数的版本高于该本地软件内对应的函数的版本。
在确定存储有与该升级数据包内函数的标识信息对应的用例的标识信息时,执行步骤S703至S709;
在确定未存储与该升级数据包内函数的标识信息对应的用例的标识信息时,执行步骤S710。
S703、软件升级验证装置根据该差量信息中该升级数据包内函数的标识信息从该用例关系数据库中获取对应的用例的标识信息。
其中,该用例关系数据库包括用例关系信息,该用例关系信息包括该用例的标识信息和该用例运行时调用的验证软件内函数的标识信息的对应关系;该用例运行时调用的验证软件内函数的标识信息与升级包内函数的标识信息对应,示例地,该用例的标识信息可以包括用例的名称、用例的编号和用例的类型等信息。
该用例关系信息的表结构与结构关系参照上述实施例对图6的描述,此处不再赘述。
S704、软件升级验证装置确定是否缓存有该用例的标识信息对应的用例。
在确定缓存有该用例的标识信息对应的用例时,执行步骤S705至S706和步骤S709至S710;
在确定未缓存该用例的标识信息对应的用例时,执行步骤S707至S710。
S705、软件升级验证装置获取该缓存的用例。
S706、软件升级验证装置将该升级数据包内函数的优先级评分与获取的该用例的标识信息对应的用例的优先级评分中最高的优先级评分作为该用例的优先级评分。
具体地,将升级数据包内函数对应的CODE_INFO中的CODE_RANGE字段的值和获取的该用例的标识信息对应的用例对应的CODE_INFO中的CODE_RANGE字段的值进行比较,由于CODE_RANGE字段的值越低,则优先级评分越高,因此将升级数据包内函数和该用例中的CODE_RANGE字段的最低值对应的优先级评分作为该用例的优先级评分。
另外,用例的标识信息对应的用例可以按照优先级评分进行排序,而优先级评分是根据CODE_RANGE字段的值确定的,每当有一个用例跟该CODE_RANGE字段对应的升级数据包内函数的标识信息建立关系时,该CODE_RANGE的值就加1。
S707、软件升级验证装置从公共用例库中获取该用例的标识信息对应的用例,并缓存该用例。
S708、软件升级验证装置将该升级数据包内函数的优先级评分作为该用例的优先级评分。
具体地,在确定未缓存该用例的标识信息对应的用例时,软件升级验证装置缓存该用例,并根据该升级数据包内函数对应的CODE_INFO中的CODE_RANGE字段的值确定该升级数据包内函数的优先级评分,并将该优先级评分添加至该用例中。
S709、软件升级验证装置将该用例封装为验证执行包,以用于验证该本地软件通过该升级数据包升级后的准确性。
其中,验证执行包包括该用例的标识信息和该用例的标识信息对应的用例以及该用例的基本信息,该用例的基本信息包括用例执行时间、自动化脚本、用例执行步骤与预期结果、用例关联特性、用例关联缺陷、性能指标等信息,该用例的基本信息还可以包括其他信息,本发明对此不作限定;这样,用户可以根据该验证执行包对升级的本地软件进行精确地验证。
另外,该验证执行包采用JAVA语言实现的类图参考上述实施例对图3的描述,此处不再赘述了。
S710,软件升级验证装置将该差量信息指示的升级数据包内函数的标识信息封装为无用例信息包。
其中,该无用例信息包包括该升级数据包内函数的标识信息,需要说明的是,该无用例信息包并不提供给用户,而是提供给软件厂商,以便软件厂商针对该无用例信息包中升级数据包内函数的标识信息补充该升级数据包内函数的标识信息对应的用例。
需要说明的是,对于上述方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
采用上述方案,软件升级验证装置获取升级数据包和本地软件,在确定该升级数据包内函数的版本高于该本地软件内对应的函数的版本时,根据该升级数据包内函数的标识信息从用例关系数据库中获取对应的用例的标识信息,并获取该用例的标识信息对应的用例,并将该用例封装为验证执行包,通过执行该验证执行包能够精确的对升级后的本地软件进行验证,解决传统验证方式中的验证差异以及用户手动操作的问题,从而提高了软件升级验证的效率以及验证过程的可靠性。
对应上述图7描述的实施例,本发明还提供一种更新用例关系数据库的方法,如图8所示,该方法包括:
S801、软件升级验证装置获取用例的标识信息。
具体地,软件升级验证装置获取用例的标识信息包括以下两种方式:
方式一:该用例的标识信息为用户通过用例信息输入界面输入的用例的标识信息。
具体地,该用例信息输入界面如图5所示,其中,用例名称和用例编号用于通知软件升级验证装置目前在收集的用例;用例执行类型用于告知软件升级验证装置用例的类型,在输出给用户执行的自动化用例中,会影响用例执行的环境,可选项有功能用例(默认)、性能用例、可靠性用例、界面用例;用例关系维护策略用于在录入的用例此前已经存储有历史用例关系信息的情况下,根据更新策略(包括覆盖(默认)、合并、忽略)更新用例关系数据库。
方式二:该用例的标识信息通过用例信息录入接口接收的用例的标识信息。
软件升级验证装置通过用例信息录入接口接收该用例的标识信息。
具体地,软件升级验证装置提供调用接口(如API接口),接收外界命令调用。自动化运行程序在运行用例的时候,会告知软件升级验证装置开始录入对应的用例的标识信息,运行用例结束后告知软件升级验证装置结束录入;其中,自动化运行程序是指软件厂商对软件产品进行自动化测试的用例程序。
上述方式一中用户输入的用例的标识信息对应的用例以及方式二中自动化运行程序自动录入的用例的标识信息对应的用例都来自公共用例库。
S802、软件升级验证装置向软件信息监控模块发送收集指令。
S803、软件信息监控模块在接收到该收集指令后,清空历史数据,并收集该用例的标识信息对应的用例运行时调用的验证软件内函数的标识信息。
其中,该验证软件为该本地软件通过该升级数据包升级后所对应的软件,且该验证软件由软件厂商提供并能够正常运行基本的软件功能。
需要说明的是,上述软件信息监控模块用于跟踪监测被监控对象运行时的信息(如代码片段、内存申请释放信息或者空间占用信息)。其中,该软件信息监控模块是以插件的形式加载在被测对象的进程中,支持使用JAVA和C++语言编写的应用程序。该软件信息监控模块主要包括以下两种实现方式:
方式一:对被监控对象的源代码或二进制文件或运行环境进行改造,实现监控。
具体地,包括以下三种方案:
方案一,通过在编译期对源代码插桩实现对源代码的改造;该情形适用于C++以及JAVA语言编写的被监控对象,但该方案会带来源代码膨胀,从而使得软件编译变慢,占用的磁盘空间变大,导致运行效率低下。
例如,对于下面被监控语句:
inti=printf(”Iamhere”);
void*ptr=&printf;
源代码经过自动插桩改造,变为:
inti=(z000002(),printf)(”Iamhere”);
void*ptr=&(z000002(),printf);
此处借助C语言的逗号表达式实现插装,根据ANSICC规范,逗号表达式的结果值是最后一个表达式的计算值,比如“exprl,exprt2,expr3”,这3个表达式依次运算,最后返回值是expr3的计算值。所以,不难看出,运行上述插装代码等效于插装前代码,只有一点差别,每次printf函数调用前,插桩函数z000002都被调用一次。由此可知此处代码是否被调用,实现调用状况监控。
方案二,对二进制文件改造;该方案适用于JAVA语言编写的被监控对象,但是该方案会影响软件运行的速度。
例如,JAVA语言的class是种半编译状态的语言,因此在class插桩可以获得类似在上述方案一中源代码插桩的效果,原理与上述方案一相同,此处不再赘述了。
方案三,通过在运行期插桩实现对运行环境的改造,该方案适用于JAVA语言编写的被监控对象。
例如,在JDK5中引进了-javaagent参数,这个参数是允许JVM在加载被测类之前加载依赖java.lang.instrument接口编写的代理;Instrument接口能在JVM运行时向JVM调用的函数添加字节码,以搜集JVM方法调用函数。这种方案对源代码和编译过程没有任何变化,使用时需要对每个JVM进行配置。
方式二:使用面向切面技术进行调用监控。
面向切面(AspectOrientedProgramming,简称AOP)通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。
AOP主要针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果,通过拦截一个对象的行为并添加我们需要的功能来完成。
S804、软件升级验证装置接收该软件信息监控模块发送的该用例的标识信息对应的用例运行时调用的验证软件内函数的标识信息。
其中,该用例运行时调用的验证软件内函数的标识信息与该升级数据包内函数的标识信息对应,该验证软件内函数的标识信息主要包括JAVA和C++两种格式:
JAVA格式:包+类+“::”+函数(参数类型),如com.my.corp.sample.Test::testl(String,int,TestSample)
C++格式:类+“::”+函数(参数类型),如Ne_CreateSeq::Test_Create(TestSample)。
进一步地,在用例执行完成后,用户通知该软件升级验证装置该用例执行完成,该软件升级验证装置通知软件信息监控模块停止收集验证软件内函数的标识信息,并返回已收集的验证软件内函数的标识信息。
S805、软件升级验证装置根据该用例的标识信息和该验证软件内函数的标识信息获得用例关系信息。
其中,该用例关系信息包括该用例的标识信息和该用例运行时调用的验证软件内函数的标识信息的对应关系。
S806、软件升级验证装置确定该用例关系数据库是否存储有该用例的标识信息对应的历史用例关系信息。
在确定该用例关系数据库未存储该用例的标识信息对应的历史用例关系信息时,执行步骤S807;
在确定该用例关系数据库存储有该用例的标识信息对应的历史用例关系信息时,执行步骤S808。
S807、软件升级验证装置将该用例关系信息存入该用例关系数据库中。
S808、软件升级验证装置根据该用例关系信息按照更新策略更新该用例关系数据库。
具体地,根据该用例关系信息按照更新策略更新该用例关系数据库具体包括以下三种更新策略:
一、覆盖:删除该历史用例关系信息,并将该用例关系信息存入该用例关系数据库中;
二、合并:保留该历史用例关系信息,并将该用例关系信息存入该用例关系数据库中;
具体地,将该用例关系信息和历史用例关系信息的并集部分保留,即该用例关系信息和历史用例关系信息不同部分保留,该用例关系信息与该历史用例关系信息相同部分不重复保留。
三、删除:保留该历史用例关系信息,丢弃该用例关系信息。
需要说明的是,对于上述方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
本发明实施例提供的更新用例关系数据库的方法,软件升级验证装置用于更新用例关系数据库,通过获取的用例的标识信息和该用例的标识信息对应的用例运行时调用的验证软件内函数的标识信息更新用例关系数据库,从而使得软件升级验证装置根据从该用例关系数据库中获取的用例关系信息精确的对升级后的软件进行验证,从而增加验证过程的可靠性。
本发明实施例提供一种软件升级验证装置90,如图9所示,该软件升级验证装置90包括:差量升级分析单元91、用例关系解析单元92和自动化用例组装单元93;
该差量升级分析单元91,用于获取升级数据包和本地软件,并确定该升级数据包内函数的版本高于该本地软件内对应的函数的版本。
可选地,该差量升级分析单元91具体用于,在该升级数据包内函数的版本号高于该本地软件内对应的函数的版本号时,确定该升级数据包内函数的版本高于该本地软件内函数的版本。
该用例关系解析单元92,用于在该差量升级分析单元91确定该升级数据包内函数的版本高于该本地软件内对应的函数的版本时,根据该升级数据包内函数的标识信息从用例关系数据库中获取对应的用例的标识信息。
其中,该用例关系数据库包括该升级数据包内函数的标识信息和该用例的标识信息的对应关系,示例地,该用例的标识信息可以包括用例的名称、用例的编号和用例的类型等信息。
具体地,软件升级验证装置根据该升级数据包内函数的版本号和本地软件内对应的函数的版本号确定该升级数据包内函数的版本是否高于本地软件内对应的函数的版本,在该升级数据包内函数的版本号高于该本地软件内对应的函数的版本号时,确定该升级数据包内函数的版本高于该本地软件内函数的版本,例如,该升级数据包内函数的版本号为3.2.1,该本地软件内对应的函数的版本号为3.2.0,则确定该升级数据包内函数的版本号高于该本地软件内对应的函数的版本号,也就是说,该升级数据包内函数的版本高于该本地软件内对应的函数的版本。
进一步地,差量升级分析单元91还用于,在获取本地软件和升级数据包之后,根据该升级数据包内函数和该本地软件内对应的函数得到差量信息。
其中,该差量信息包括升级标记和该升级数据包内函数的标识信息,该升级标记用于指示该本地软件内函数和该升级数据包内对应的函数的版本状态。
该用例关系解析单元92具体用于,在根据该差量升级分析单元91得到的差量信息中的升级标记确定该升级数据包内函数的版本高于该本地软件内对应的函数的版本时,根据该差量信息中该升级数据包内函数的标识信息从该用例关系数据库中获取对应的用例的标识信息。
需要说明的是,该升级标记包括更新标识、删除标识和无变更标识,其中,该更新标识指示该升级数据包内函数和该本地软件内对应的函数都存在且该升级数据包内函数的版本高于该本地软件内对应的函数的版本,或者,
该更新标识指示该升级数据包内函数存在,该本地软件内对应的函数不存在且该升级数据包内函数的版本高于该本地软件内对应的函数的版本,此时,该本地软件内对应的函数的版本号可以视为0。
该删除标识指示该升级数据包内函数不存在,该本地软件内对应的函数存在,且该升级数据包内函数的版本高于该本地软件内对应的函数的版本。
该无变更标识指示该升级数据包内函数和该本地软件内对应的函数都存在且该升级数据包内函数的版本与该本地软件内对应的函数的版本一致。
需要说明的是,当该升级标记为删除标识时,虽然升级数据包内函数不存在,但是,由于升级数据包内函数的标识信息和该升级数据包内函数的版本号存在,因此,仍然可以通过升级数据包内函数的版本号和本地软件内对应的函数的版本号确定该升级数据包内函数的版本高于本地软件内对应的函数的版本。
示例地,该差量信息中升级数据包内函数的标识信息可以是函数名或者路径,例如,该升级数据包内函数的标识信息可以包括以下几种定义格式:
JAVA格式:包+类+“::”+函数(参数类型),如com.my.corp.sample.Test::testl(String,int,TestSample)
C++格式:类+“::”+函数(含参数类型),如Ne_CreateSeq::Test_Create(TestSample)
Python、shell脚本格式:相对路径文件名称+“::”+函数(含参数类型),如Python脚本格式:bin/module/test.py::test()以及shell脚本格式:bin/module/test.sh::test()
Xml、properties文件格式:相对路径文件名名称+“::”+文件内结构,
如Xml文件格式:config/test.xml::body.html.value以及properties文件格式:config/test.properties::ServerIP。
上述定义的格式只是举例说明,不作限定。
可选地,该用例关系解析单元,还用于在获取该用例的标识信息对应的用例前,确定是否缓存有该用例的标识信息对应的用例;
在确定缓存有该用例的标识信息对应的用例时,获取该缓存的该用例的标识信息对应的用例;
在确定未缓存该用例的标识信息对应的用例时,从公共用例库中获取该用例的标识信息对应的用例。
进一步地,该用例关系解析单元92,还用于在获取缓存的该用例的标识信息对应的用例之后,将该升级数据包内函数的优先级评分与获取的该用例的标识信息对应的的用例的优先级评分中最高的优先级评分作为该用例的优先级评分;
在从公共用例库中获取该用例的标识信息对应的用例之后,缓存该用例,并将该升级数据包内函数的优先级评分作为该用例的优先级评分。
需要说明的是,用例的标识信息对应的用例可以按照优先级评分进行排序,而优先级评分是根据CODE_RANGE字段的值确定的,每当有一个用例跟该CODE_RANGE字段对应的升级数据包内函数的标识信息建立关系时,该CODE_RANGE的值就加1。
另外,优先级评分高的用例优先进行验证,如果验证的用例数量过多,优先级低的用例将被排除。
该自动化用例组装单元93,用于获取该用例关系解析单元92获取的用例的标识信息对应的用例,并将该用例封装为验证执行包,以用于验证该本地软件通过该升级数据包升级后的准确性。
其中,图3为该验证执行包采用JAVA语言实现的示例图,其中,AutoCaseRunnerFactory表示组装自动化用例的总调度;assembleCase用于接收用例列表,然后通过运算,分配每个自动化用例的运行脚本(script)、自动化用例实现类型(java、C++、script)、运行器(ICaseRunner),运行优先级(priority)来收纳进一个可执行包,输出执行包在其定义的属性路径中(executableFilePath);IAutoTestCase表示用例的总接口,提供几个通用的属性供子类扩展,包括有用例名称(name),用例编号(ID),执行器(ICaseRunner),自动化脚本(script),优先级(priority);JavaTypeCase、C++TypeCaseb和ScriptTypeCase表示IAutoTestCase的具体实现体,分别实现java类、c++类以及脚本类的自动化用例调度方式;ICaseRunner和IScriptCaseRunner表示自动化用例运行器接口,该接口定义了运行平台以及触发命令,同时Run方法要求子类实现用例具体调度内容,Run方法具体为执行单独某用例的过程,并且提供执行过程信息以及报告给执行框架;JavaCaseRunner、C++CaseRunner、ShellCaseRunner、BatCaseRunner和PythonCaseRunner表示每种自动化类型用例的具体执行器,如java执行器需要调度jvm的java程序执行,python执行器需要调度python的python命令执行。
需要说明的是,上述验证执行包包括该用例的标识信息和该用例的标识信息对应的用例以及该用例的基本信息,该用例的基本信息包括用例执行时间、自动化脚本、用例执行步骤与预期结果、用例关联特性、用例关联缺陷、性能指标等信息,该用例的基本信息还可以包括其他信息,本发明对此不作限定;这样,用户可以根据该验证执行包对升级的本地软件进行精确地验证。
进一步地,该用例关系解析单元92,还用于在根据该升级数据包内函数的标识信息从用例关系数据库中获取对应的用例的标识信息之前,确定该用例关系数据库中是否存储有与该升级数据包内函数的标识信息对应的用例的标识信息;
在确定该用例关系数据库中存储有与该升级数据包内函数的标识信息对应的用例的标识信息时,根据该升级数据包内函数的标识信息从该用例关系数据库中获取对应的用例的标识信息;
在确定该用例关系数据库中未存储与该升级数据包内函数的标识信息对应的用例的标识信息时,将该升级数据包内函数的标识信息封装为无用例信息包。
其中,该无用例信息包包括该升级数据包内函数的标识信息,需要说明的是,该无用例信息包并不提供给用户,而是提供给软件厂商,以便软件厂商针对该无用例信息包中升级数据包内函数的标识信息补充该升级数据包内函数的标识信息对应的用例。
进一步地,如图10所示,该软件升级验证装置90还包括:用例关系更新单元94,用于更新该用例关系数据库。
具体地,如图11所示,该用例关系更新单元94包括:
用例信息收集模块941,用于获取用例的标识信息。
其中,该用例信息收集模块获取用例的标识信息包括以下两种方式:
方式一:该用例的标识信息为用户通过用例信息输入界面输入的用例的标识信息。
具体地,该用例信息输入界面如图5所示,其中,用例名称和用例编号用于通知软件升级验证装置目前在收集的用例;用例执行类型用于告知软件升级验证装置用例的类型,在输出给用户执行的自动化用例中,会影响用例执行的环境,可选项有功能用例(默认)、性能用例、可靠性用例、界面用例;用例关系维护策略用于在录入的用例此前已经存储有历史用例关系信息的情况下,根据更新策略(包括覆盖(默认)、合并、忽略)更新用例关系数据库。
方式二:该用例的标识信息通过用例信息录入接口接收的用例的标识信息。
软件升级验证装置通过用例信息录入接口接收该用例的标识信息。
具体地,软件升级验证装置提供调用接口(如API接口),接收外界命令调用。自动化运行程序在运行用例的时候,会告知软件升级验证装置开始录入对应的用例的标识信息,运行用例结束后告知软件升级验证装置结束录入;其中,自动化运行程序是指软件厂商对软件产品进行自动化测试的用例程序。
上述方式一中用户输入的用例的标识信息对应的用例以及方式二中自动化运行程序自动录入的用例的标识信息对应的用例都来自公共用例库。
软件运行信息收集模块942,用于获取该用例的标识信息对应的用例运行时调用的验证软件内函数的标识信息。
其中,该验证软件为该本地软件通过该升级数据包升级后所对应的软件,且该验证软件由软件厂商提供并能够正常运行基本的软件功能。
具体地,软件升级验证装置向软件信息监控模块发送收集指令,以便该软件信息监控模块清空历史数据,并收集该用例的标识信息对应的用例运行时调用的验证软件内函数的标识信息,软件升级验证装置接收软件信息监控模块发送的该验证软件内函数的标识信息。这样,软件信息监控模块在接收到收集执行指令后,清空历史数据,从而保证后续收集信息的精确性。
其中,该软件升级验证装置获取用例的标识信息对应的用例运行时调用的验证软件内函数的标识信息可以包括以下格式:
JAVA格式:包+类+“::”+函数(参数类型),如com.my.corp.sample.Test::testl(String,int,TestSample)
C++格式:类+“::”+函数(参数类型),如Ne_CreateSeq::Test_Create(TestSample)。
需要说明的是,上述软件信息监控模块用于跟踪监测被监控对象运行时的信息(如代码片段、内存申请释放信息或者空间占用信息)。其中,该软件信息监控模块是以插件的形式加载在被测对象的进程中,支持使用JAVA和C++语言编写的应用程序。该软件信息监控模块主要包括以下两种实现方式:
方式一:对被监控对象的源代码或二进制文件或运行环境进行改造,实现监控。
具体地,包括以下三种方案:
方案一,通过在编译期对源代码插桩实现对源代码的改造;该情形适用于C++以及JAVA语言编写的被监控对象,但该方案会带来源代码膨胀,从而使得软件编译变慢,占用的磁盘空间变大,导致运行效率低下。
例如,对于下面被监控语句:
inti=printf(”Iamhere”);
void*ptr=&printf;
源代码经过自动插桩改造,变为:
inti=(z000002(),printf)(”Iamhere”);
void*ptr=&(z000002(),printf);
此处借助C语言的逗号表达式实现插装,根据ANSICC规范,逗号表达式的结果值是最后一个表达式的计算值,比如“exprl,exprt2,expr3”,这3个表达式依次运算,最后返回值是expr3的计算值。所以,不难看出,运行上述插装代码等效于插装前代码,只有一点差别,每次printf函数调用前,插桩函数z000002都被调用一次。由此可知此处代码是否被调用,实现调用状况监控。
方案二,对二进制文件改造;该方案适用于JAVA语言编写的被监控对象,但是该方案会影响软件运行的速度。
例如,JAVA语言的class是种半编译状态的语言,因此在class插桩可以获得类似在上述方案一中源代码插桩的效果,原理与上述方案一相同,此处不再赘述了。
方案三,通过在运行期插桩实现对运行环境的改造,该方案适用于JAVA语言编写的被监控对象。
例如,在JDK5中引进了-javaagent参数,这个参数是允许JVM在加载被测类之前加载依赖java.lang.instrument接口编写的代理;Instrument接口能在JVM运行时向JVM调用的函数添加字节码,以搜集JVM方法调用函数。这种方案对源代码和编译过程没有任何变化,使用时需要对每个JVM进行配置。
方式二:使用面向切面技术进行调用监控。
面向切面(AspectOrientedProgramming,简称AOP)通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。
AOP主要针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果,通过拦截一个对象的行为并添加我们需要的功能来完成。
关系信息处理模块943,用于根据该用例的标识信息和该用例运行时调用的验证软件内函数的标识信息更新该用例关系数据库。
其中,该用例运行时调用的验证软件内函数的标识信息与该升级数据包内函数的标识信息对应,示例地,该用例运行时调用的验证软件内函数的标识信息可以与该升级数据包内函数的标识信息一致。
可选地,该关系信息处理模块943具体用于,在根据该用例的标识信息和该用例运行时调用的验证软件内函数的标识信息获得用例关系信息,并根据该用例关系信息更新该用例关系数据库。
其中,该用例关系信息包括该用例的标识信息和该用例运行时调用的验证软件内函数的标识信息的对应关系。
图6为上述用例关系信息的表结构与结构关系示例图,其中,FUNC_TABLE为功能特性表,即按照用例的标识信息对应的用例的功能特性划分的类别,该表以PARENT_FUNC字段自我关联,支持多层功能特性结构,FUNC_NAME作为记录的关键字段;TESTCASE_INFO为用例信息表,存放用例的标识信息(即用例的基本信息和运行信息等),如用例类型(可选为“功能用例”、“性能用例”、“稳定性用例”、“界面测试用例”)、执行时间等,该表与FUNC_TABLE以PARENT_FUNC字段关联,表示每条用例都会从属于唯一一个功能特性,该表以CASE_ID作为关键字,用例的标识信息与公共用例库中的信息保持一致,另外,该表与FUNC_TABLE是多对一的关系(即图中的n、1表示的关系);CODE_INFO为函数标识信息表,存放验证软件内函数的标识信息(如函数名或路径信息),在本发明实施例中,验证软件内函数的标识信息可以与升级数据包内函数的标识信息一致,以CODE_PATH作为关键字;RELATE_CODE_CASE为用例与验证软件内函数的标识信息的关系表,全字段作为关键字,该表与TESTCASE_INFO以及CODE_INFO均是多对多(即图中的m、n表示的关系)关系,分别以CASE_ID以及CODE_PATH作为关键字关联,本发明实施例中,即表示一个验证软件内函数的标识信息可能对应多个用例的标识信息,一个用例的标识信息也可能对应多个验证软件内函数的标识信息,其中,CODE_INFO表中的CODE_PATH字段对应验证软件内函数的标识信息,TESTCASE_INFO表中的CASE_ID字段对应用例的标识信息,在RELATE_CODE_CASE表中,CODE_PATH字段与CASE_ID字段关联,因此,软件升级验证装置可以根据升级数据包内函数的标识信息通过CODE_INFO表中的CODE_PATH字段确定RELATE_CODE_CASE表中关联的CASE_ID字段,并通过该RELATE_CODE_CASE表中关联的CASE_ID字段得到ESTCASE_INFO表中的CASE_ID字段对应的用例的标识信息。
进一步地,该关系信息处理模块943,还用于在根据该用例关系信息更新该用例关系数据库前,确定该用例关系数据库是否存储有该用例关系信息中的用例的标识信息对应的历史用例关系信息;
若确定该用例关系数据库未存储该历史用例关系信息,则将该用例关系信息存入该用例关系数据库中;
若确定该用例关系数据库存储有该历史用例关系信息,则根据该用例关系信息按照更新策略更新该用例关系数据库。
可选地,该关系信息处理模块943,具体用于在确定该用例关系数据库存储有该历史用例关系信息时,
删除该历史用例关系信息,并将该用例关系信息存入该用例关系数据库中;
或者,保留该历史用例关系信息,并将该用例关系信息存入该用例关系数据库中。
具体地,将该用例关系信息和历史用例关系信息的并集部分保留,即该用例关系信息和历史用例关系信息不同部分保留,该用例关系信息与该历史用例关系信息相同部分不重复保留。
或者,
保留该历史用例关系信息,丢弃该用例关系信息。
采用上述软件升级验证装置,软件升级验证装置获取升级数据包和本地软件,在确定该升级数据包内函数的版本高于该本地软件内对应的函数的版本时,根据该升级数据包内函数的标识信息从用例关系数据库中获取对应的用例的标识信息,并获取该用例的标识信息对应的用例,并将该用例封装为验证执行包,以用于验证该本地软件通过该升级数据包升级后的准确性。从而能够精确的对升级后的软件进行验证,提高了验证过程的可靠性,另外,该软件升级验证装置还可以根据获取的用例的标识信息和该用例的标识信息对应的用例运行时调用的验证软件内函数的标识信息更新用例关系数据库,该用例关系数据库中存储有用例的标识信息与验证软件内函数的标识信息的对应关系,从而支持上述对升级软件的精确验证。
所属本领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的软件升级验证装置的具体工作过程和描述,可以参考前述方法实施例中的对应过程,在此不再赘述。
本发明实施例提供一种软件升级验证装置120,如图12所示,包括:处理器(processor)121、通信接口(CommunicationsInterface)122、存储器(memory)123和通信总线124;其中,所述处理器121、所述通信接口122和所述存储器123通过所述通信总线124完成相互间的通信。
处理器121可能是一个中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecificIntegratedCircuit),或者是被配置成实施本发明实施例的一个或多个集成电路。
存储器123用于存放程序代码,所述程序代码包括计算机操作指令。存储器123可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。
所述通信接口122,用于实现这些装置之间的连接通信。
所述处理器121执行程序代码,用于获取升级数据包和本地软件,在确定该升级数据包内函数的版本高于该本地软件内对应的函数的版本时,根据该升级数据包内函数的标识信息从用例关系数据库中获取对应的用例的标识信息,获取该用例的标识信息对应的用例,并将该用例封装为验证执行包,以用于验证该本地软件通过该升级数据包升级后的准确性。
其中,该用例关系数据库包括该升级数据包内函数的标识信息和该用例的标识信息的对应关系。
可选地,该处理器121具体用于,在该升级数据包内函数的版本号高于该本地软件内对应的函数的版本号时,确定该升级数据包内函数的版本高于该本地软件内函数的版本。
可选地,该处理器121还用于,根据该升级数据包内函数和该本地软件内对应的函数得到差量信息。
其中,该差量信息包括升级标记和该升级数据包内函数的标识信息,该升级标记用于指示该本地软件内函数和该升级数据包内对应的函数的版本状态。
在根据该差量信息中的升级标记确定该升级数据包内函数的版本高于该本地软件内对应的函数的版本时,根据该差量信息中该升级数据包内函数的标识信息从该用例关系数据库中获取对应的用例的标识信息。
可选地,该处理器121具体用于,确定该用例关系数据库中是否存储有与该升级数据包内函数的标识信息对应的用例的标识信息;
在确定该用例关系数据库中存储有与该升级数据包内函数的标识信息对应的用例的标识信息时,根据该升级数据包内函数的标识信息从该用例关系数据库中获取对应的用例的标识信息;
在确定该用例关系数据库中未存储与该升级数据包内函数的标识信息对应的用例的标识信息时,将该升级数据包内函数的标识信息封装为无用例信息包。
可选地,该处理器121还用于,确定是否缓存有该用例的标识信息对应的用例;
在确定缓存有该用例的标识信息对应的用例时,获取缓存的该用例的标识信息对应的用例;
在确定未缓存该用例的标识信息对应的用例时,从公共用例库中获取该用例的标识信息对应的用例。
可选地,该处理器121还用于,在获取缓存的该用例的标识信息对应的用例的步骤之后,将该升级数据包内函数的优先级评分与获取的该用例的标识信息对应的用例的优先级评分中最高的优先级评分作为该用例的优先级评分;
在从公共用例库中获取该用例的标识信息对应的用例的步骤之后,缓存该用例,并将该升级数据包内函数的优先级评分作为该用例的优先级评分。
进一步地,该处理器121还用于更新该用例关系数据库。
可选地,该处理器121具体用于,获取用例的标识信息,该用例的标识信息为用户通过用例信息输入界面输入的用例的标识信息,或通过用例信息录入接口接收的用例的标识信息,并获取该用例的标识信息对应的用例运行时调用的验证软件内函数的标识信息,并根据该用例的标识信息和该用例运行时调用的验证软件内函数的标识信息更新该用例关系数据库,
其中,该验证软件为该本地软件通过该升级数据包升级后所对应的软件,该用例运行时调用的验证软件内函数的标识信息与该升级数据包内函数的标识信息对应。
可选地,该处理器121具体用于,根据该用例的标识信息和该用例运行时调用的验证软件内函数的标识信息获得用例关系信息,并根据该用例关系信息更新该用例关系数据库。
其中,该用例关系信息包括该用例的标识信息和该用例运行时调用的验证软件内函数的标识信息的对应关系。
可选地,该处理器121还用于,确定该用例关系数据库是否存储有该用例关系信息中的用例的标识信息对应的历史用例关系信息;
若确定该用例关系数据库未存储该历史用例关系信息,则将该用例关系信息存入该用例关系数据库中;
若确定该用例关系数据库存储有该历史用例关系信息,则根据该用例关系信息按照更新策略更新该用例关系数据库。
可选地,该处理器121具体用于,删除该历史用例关系信息,并将该用例关系信息存入该用例关系数据库中;或者,
保留该历史用例关系信息,并将该用例关系信息存入该用例关系数据库中;或者,
保留该历史用例关系信息,丢弃该用例关系信息。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (24)
1.一种验证软件升级准确性的方法,其特征在于,包括:
获取升级数据包和本地软件;
在确定所述升级数据包内函数的版本高于所述本地软件内对应的函数的版本时,根据所述升级数据包内函数的标识信息从用例关系数据库中获取对应的用例的标识信息;其中,所述用例关系数据库包括所述升级数据包内函数的标识信息和所述用例的标识信息的对应关系;
获取所述用例的标识信息对应的用例,并将所述用例封装为验证执行包,以用于验证所述本地软件通过所述升级数据包升级后的准确性。
2.根据权利要求1所述的方法,其特征在于,所述确定所述升级数据包内函数的版本高于所述本地软件内对应的函数的版本,包括:
在所述升级数据包内函数的版本号高于所述本地软件内对应的函数的版本号时,确定所述升级数据包内函数的版本高于所述本地软件内函数的版本。
3.根据权利要求1所述的方法,其特征在于,在所述获取本地软件和升级数据包的步骤之后,所述方法还包括:
根据所述升级数据包内函数和所述本地软件内对应的函数得到差量信息;其中,所述差量信息包括升级标记和所述升级数据包内函数的标识信息,所述升级标记用于指示所述本地软件内函数和所述升级数据包内对应的函数的版本状态;
在确定所述升级数据包内函数的版本高于所述本地软件内函数的版本时,根据所述升级数据包内函数的标识信息从用例关系数据库中获取对应的用例的标识信息,包括:
在根据所述差量信息中的升级标记确定所述升级数据包内函数的版本高于所述本地软件内对应的函数的版本时,根据所述差量信息中所述升级数据包内函数的标识信息从所述用例关系数据库中获取对应的用例的标识信息。
4.根据权利要求3所述的方法,其特征在于,所述升级标记包括:更新标识、删除标识和无变更标识;
所述更新标识指示所述升级数据包内函数和所述本地软件内对应的函数都存在且所述升级数据包内函数的版本高于所述本地软件内对应的函数的版本;或者,所述更新标识指示所述升级数据包内函数存在,所述本地软件内对应的函数不存在且所述升级数据包内函数的版本高于所述本地软件内对应的函数的版本;
所述删除标识指示所述升级数据包内函数不存在,所述本地软件内对应的函数存在,且所述升级数据包内函数的版本高于所述本地软件内对应的函数的版本;
所述无变更标识指示所述升级数据包内函数和所述本地软件内对应的函数都存在且所述升级数据包内函数的版本与所述本地软件内对应的函数的版本一致。
5.根据权利要求1至4任一项所述的方法,其特征在于,在所述根据所述升级数据包内函数的标识信息从用例关系数据库中获取对应的用例的标识信息之前,所述方法还包括:
确定所述用例关系数据库中是否存储有与所述升级数据包内函数的标识信息对应的用例的标识信息;
所述根据所述升级数据包内函数的标识信息从用例关系数据库中获取对应的用例的标识信息,包括:
在确定所述用例关系数据库中存储有与所述升级数据包内函数的标识信息对应的用例的标识信息时,根据所述升级数据包内函数的标识信息从所述用例关系数据库中获取对应的用例的标识信息;
在确定所述用例关系数据库中未存储与所述升级数据包内函数的标识信息对应的用例的标识信息时,将所述升级数据包内函数的标识信息封装为无用例信息包。
6.根据权利要求1至4任一项所述的方法,其特征在于,在所述获取所述用例的标识信息对应的用例前,所述方法还包括:
确定是否缓存有所述用例的标识信息对应的用例;
所述获取所述用例的标识信息对应的用例,包括:
在确定缓存有所述用例的标识信息对应的用例时,获取缓存的所述用例的标识信息对应的用例;
在确定未缓存所述用例的标识信息对应的用例时,从公共用例库中获取所述用例的标识信息对应的用例。
7.根据权利要求6所述的方法,其特征在于,在所述获取缓存的所述用例的标识信息对应的用例的步骤之后,所述方法还包括:
将所述升级数据包内函数的优先级评分与获取的所述用例的标识信息对应的用例的优先级评分中最高的优先级评分作为所述用例的优先级评分;
在所述从公共用例库中获取所述用例的标识信息对应的用例的步骤之后,所述方法还包括:
缓存所述用例,并将所述升级数据包内函数的优先级评分作为所述用例的优先级评分。
8.根据权利要求1至4任一项所述的方法,其特征在于,所述方法还包括:
更新所述用例关系数据库。
9.根据权利要求8所述的方法,其特征在于,所述更新所述用例关系数据库包括:
获取用例的标识信息,所述用例的标识信息为用户通过用例信息输入界面输入的用例的标识信息,或通过用例信息录入接口接收的用例的标识信息;
获取所述用例的标识信息对应的用例运行时调用的验证软件内函数的标识信息;其中,所述验证软件为所述本地软件通过所述升级数据包升级后所对应的软件;
根据所述用例的标识信息和所述用例运行时调用的验证软件内函数的标识信息更新所述用例关系数据库,其中,所述用例运行时调用的验证软件内函数的标识信息与所述升级数据包内函数的标识信息对应。
10.根据权利要求9所述的方法,其特征在于,在所述根据所述用例的标识信息和所述用例运行时调用的验证软件内函数的标识信息更新用例关系数据库,包括:
根据所述用例的标识信息和所述用例运行时调用的验证软件内函数的标识信息获得用例关系信息,其中,所述用例关系信息包括所述用例的标识信息和所述用例运行时调用的验证软件内函数的标识信息的对应关系;
根据所述用例关系信息更新所述用例关系数据库。
11.根据权利要求10所述方法,其特征在于,在所述根据所述用例关系信息更新所述用例关系数据库前,所述方法还包括:
确定所述用例关系数据库是否存储有所述用例关系信息中的用例的标识信息对应的历史用例关系信息;
所述根据所述用例关系信息更新所述用例关系数据库,包括:
若确定所述用例关系数据库未存储所述历史用例关系信息,则将所述用例关系信息存入所述用例关系数据库中;
若确定所述用例关系数据库存储有所述历史用例关系信息,则根据所述用例关系信息按照更新策略更新所述用例关系数据库。
12.根据权利要求11所述的方法,其特征在于,所述根据所述用例关系信息按照更新策略更新所述用例关系数据库,包括:
删除所述历史用例关系信息,并将所述用例关系信息存入所述用例关系数据库中;或者,
保留所述历史用例关系信息,并将所述用例关系信息存入所述用例关系数据库中;或者,
保留所述历史用例关系信息,丢弃所述用例关系信息。
13.一种软件升级验证装置,其特征在于,包括:
差量升级分析单元,用于获取升级数据包和本地软件,并确定所述升级数据包内函数的版本高于所述本地软件内对应的函数的版本;
用例关系解析单元,用于在所述差量升级分析单元确定所述升级数据包内函数的版本高于所述本地软件内对应的函数的版本时,根据所述升级数据包内函数的标识信息从用例关系数据库中获取对应的用例的标识信息;其中,所述用例关系数据库包括所述升级数据包内函数的标识信息和所述用例的标识信息的对应关系;
自动化用例组装单元,用于获取所述用例关系解析单元获取的用例的标识信息对应的用例,并将所述用例封装为验证执行包,以用于验证所述本地软件通过所述升级数据包升级后的准确性。
14.根据权利要求13所述的装置,其特征在于,所述差量升级分析单元具体用于,在所述升级数据包内函数的版本号高于所述本地软件内对应的函数的版本号时,确定所述升级数据包内函数的版本高于所述本地软件内函数的版本。
15.根据权利要求13所述的装置,其特征在于,所述差量升级分析单元还用于,在获取本地软件和升级数据包之后,根据所述升级数据包内函数和所述本地软件内对应的函数得到差量信息;其中,所述差量信息包括升级标记和所述升级数据包内函数的标识信息,所述升级标记用于指示所述本地软件内函数和所述升级数据包内对应的函数的版本状态;
所述用例关系解析单元具体用于,在根据所述差量升级分析单元得到的差量信息中的升级标记确定所述升级数据包内函数的版本高于所述本地软件内对应的函数的版本时,根据所述差量信息中所述升级数据包内函数的标识信息从所述用例关系数据库中获取对应的用例的标识信息。
16.根据权利要求15所述的装置,其特征在于,所述升级标记包括:更新标识、删除标识和无变更标识;
所述更新标识指示所述升级数据包内函数和所述本地软件内对应的函数都存在且所述升级数据包内函数的版本高于所述本地软件内对应的函数的版本;或者,所述更新标识指示所述升级数据包内函数存在,所述本地软件内对应的函数不存在且所述升级数据包内函数的版本高于所述本地软件内对应的函数的版本;
所述删除标识指示所述升级数据包内函数不存在,所述本地软件内对应的函数存在,且所述升级数据包内函数的版本高于所述本地软件内对应的函数的版本;
所述无变更标识指示所述升级数据包内函数和所述本地软件内对应的函数都存在且所述升级数据包内函数的版本与所述本地软件内对应的函数的版本一致。
17.根据权利要求13至16任一项所述的装置,其特征在于,所述用例关系解析单元,还用于在根据所述升级数据包内函数的标识信息从用例关系数据库中获取对应的用例的标识信息之前,确定所述用例关系数据库中是否存储有与所述升级数据包内函数的标识信息对应的用例的标识信息;
在确定所述用例关系数据库中存储有与所述升级数据包内函数的标识信息对应的用例的标识信息时,根据所述升级数据包内函数的标识信息从所述用例关系数据库中获取对应的用例的标识信息;
在确定所述用例关系数据库中未存储与所述升级数据包内函数的标识信息对应的用例的标识信息时,将所述升级数据包内函数的标识信息封装为无用例信息包。
18.根据权利要求13至16任一项所述的装置,其特征在于,所述用例关系解析单元,还用于在获取所述用例的标识信息对应的用例前,确定是否缓存有所述用例的标识信息对应的用例;
在确定缓存有所述用例的标识信息对应的用例时,获取所述缓存的所述用例的标识信息对应的用例;
在确定未缓存所述用例的标识信息对应的用例时,从公共用例库中获取所述用例的标识信息对应的用例。
19.根据权利要求18所述的装置,其特征在于,所述用例关系解析单元,还用于在获取缓存的所述用例的标识信息对应的用例之后,将所述升级数据包内函数的优先级评分与获取的所述用例的标识信息对应的的用例的优先级评分中最高的优先级评分作为所述用例的优先级评分;
在从公共用例库中获取所述用例的标识信息对应的用例之后,缓存所述用例,并将所述升级数据包内函数的优先级评分作为所述用例的优先级评分。
20.根据权利要求13至16任一项所述的装置,其特征在于,所述装置还包括:
用例关系更新单元,用于更新所述用例关系数据库。
21.根据权利要求20所述的装置,其特征在于,所述用例关系更新单元包括:
用例信息收集模块,用于获取用例的标识信息,所述用例的标识信息为用户通过用例信息输入界面输入的用例的标识信息,或通过用例信息录入接口接收的用例的标识信息;
软件运行信息收集模块,用于获取所述用例的标识信息对应的用例运行时调用的验证软件内函数的标识信息;其中,所述验证软件为所述本地软件通过所述升级数据包升级后所对应的软件;
关系信息处理模块,用于根据所述用例的标识信息和所述用例运行时调用的验证软件内函数的标识信息更新所述用例关系数据库,其中,所述用例运行时调用的验证软件内函数的标识信息与所述升级数据包内函数的标识信息对应。
22.根据权利要求21所述的装置,其特征在于,所述关系信息处理模块具体用于,在根据所述用例的标识信息和所述用例运行时调用的验证软件内函数的标识信息获得用例关系信息,并根据所述用例关系信息更新所述用例关系数据库,其中,所述用例关系信息包括所述用例的标识信息和所述用例运行时调用的验证软件内函数的标识信息的对应关系。
23.根据权利要求22所述的装置,其特征在于,所述关系信息处理模块,还用于在根据所述用例关系信息更新所述用例关系数据库前,确定所述用例关系数据库是否存储有所述用例关系信息中的用例的标识信息对应的历史用例关系信息;
若确定所述用例关系数据库未存储所述历史用例关系信息,则将所述用例关系信息存入所述用例关系数据库中;
若确定所述用例关系数据库存储有所述历史用例关系信息,则根据所述用例关系信息按照更新策略更新所述用例关系数据库。
24.根据权利要求23所述的装置,其特征在于,所述关系信息处理模块,具体用于在确定所述用例关系数据库存储有所述历史用例关系信息时,
删除所述历史用例关系信息,并将所述用例关系信息存入所述用例关系数据库中;或者,
保留所述历史用例关系信息,并将所述用例关系信息存入所述用例关系数据库中;或者,
保留所述历史用例关系信息,丢弃所述用例关系信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310122570.3A CN103186468B (zh) | 2013-04-10 | 2013-04-10 | 一种验证软件升级准确性的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310122570.3A CN103186468B (zh) | 2013-04-10 | 2013-04-10 | 一种验证软件升级准确性的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103186468A CN103186468A (zh) | 2013-07-03 |
CN103186468B true CN103186468B (zh) | 2016-03-30 |
Family
ID=48677644
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310122570.3A Active CN103186468B (zh) | 2013-04-10 | 2013-04-10 | 一种验证软件升级准确性的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103186468B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105765908B (zh) * | 2014-06-30 | 2019-07-19 | 北京新媒传信科技有限公司 | 一种多站点自动更新方法、客户端和系统 |
CN106326100A (zh) * | 2015-06-30 | 2017-01-11 | 中兴通讯股份有限公司 | 一种软件自动化测试方法及装置 |
CN105630898A (zh) * | 2015-12-18 | 2016-06-01 | 国云科技股份有限公司 | 一种适用于应用程序数据库表数据版本切换的方法 |
CN105487982B (zh) * | 2015-12-22 | 2018-01-16 | 艾体威尔电子技术(北京)有限公司 | Api测试方法及系统 |
CN108170453B (zh) * | 2018-01-17 | 2021-01-01 | 中国平安人寿保险股份有限公司 | 一种mit系统升级方法、存储介质及终端设备 |
CN113010196B (zh) * | 2019-12-20 | 2023-09-26 | 武汉斗鱼鱼乐网络科技有限公司 | 补丁筛选方法、装置、设备和存储介质 |
CN112181470B (zh) * | 2020-09-22 | 2024-05-17 | 京东科技控股股份有限公司 | 一种部署补丁的方法和装置 |
CN115687292B (zh) * | 2022-08-03 | 2023-06-23 | 杭州新中大科技股份有限公司 | 一种可验证的与数据库技术无关的数据库升级方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101719095A (zh) * | 2009-12-30 | 2010-06-02 | 北京世纪高通科技有限公司 | 一种回归测试的管理方法及装置 |
CN102495790A (zh) * | 2011-10-20 | 2012-06-13 | 镇江睿泰信息科技有限公司 | 一种版本变更差异识别器及版本变更识别方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4134218B2 (ja) * | 2006-11-16 | 2008-08-20 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 回帰テストにおいて実施すべきテストケースの優先度を決定するための情報処理装置、方法、及びプログラム |
JP5626786B2 (ja) * | 2010-11-09 | 2014-11-19 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | ソフトウエア開発支援方法とソフトウエア開発支援装置とソフトウエア開発支援プログラム |
EP2482192B1 (en) * | 2011-01-31 | 2018-10-24 | Tata Consultancy Services Limited | Testing lifecycle |
-
2013
- 2013-04-10 CN CN201310122570.3A patent/CN103186468B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101719095A (zh) * | 2009-12-30 | 2010-06-02 | 北京世纪高通科技有限公司 | 一种回归测试的管理方法及装置 |
CN102495790A (zh) * | 2011-10-20 | 2012-06-13 | 镇江睿泰信息科技有限公司 | 一种版本变更差异识别器及版本变更识别方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103186468A (zh) | 2013-07-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103186468B (zh) | 一种验证软件升级准确性的方法和装置 | |
CN108027722B (zh) | 在编译和部署中动态更新应用 | |
Sen et al. | Jalangi: A selective record-replay and dynamic analysis framework for JavaScript | |
US9208057B2 (en) | Efficient model checking technique for finding software defects | |
US9875173B2 (en) | Time travel debugging in managed runtime | |
US8954936B2 (en) | Enhancing functional tests coverage using traceability and static analysis | |
US9632916B2 (en) | Method and apparatus to semantically connect independent build and test processes | |
Hayden et al. | Specifying and verifying the correctness of dynamic software updates | |
US8381175B2 (en) | Low-level code rewriter verification | |
Dietrich et al. | Xcorpus–an executable corpus of java programs | |
WO1996012224A1 (en) | Method and apparatus for testing object-oriented programming constructs | |
EP2939111A1 (en) | Extending a development environment | |
US8214393B2 (en) | Integrating database deployment with code deployment | |
US10514898B2 (en) | Method and system to develop, deploy, test, and manage platform-independent software | |
CN113568839A (zh) | 软件测试和统计测试覆盖率的方法、装置、设备及介质 | |
CN103186463B (zh) | 确定软件的测试范围的方法和系统 | |
CN109032631A (zh) | 应用程序补丁包获取方法、装置、计算机设备及存储介质 | |
US20220114076A1 (en) | Methods and apparatus to determine refined context for software bug detection and correction | |
CN110826074A (zh) | 一种应用漏洞检测方法、装置和计算机可读存储介质 | |
CN110399156B (zh) | 面向航天软件的在轨升级方法 | |
CN110532015B (zh) | 面向航天软件的在轨升级系统 | |
Chatterjee et al. | A low-level memory model and an accompanying reachability predicate | |
US11106522B1 (en) | Process memory resurrection: running code in-process after death | |
KR101562282B1 (ko) | 오덱스 무결성 검증 시스템 및 방법 | |
US8453108B1 (en) | Static, configurable kernel interface |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |