数据库软件升级检测方法及装置与流程

文档序号:12596370阅读:255来源:国知局
本发明涉及通信领域,具体而言,涉及一种数据库软件升级检测方法及装置。
背景技术
::计算机软件在运行过程中,会不断出现新的问题。有些是代码漏洞引起的故障,有些是软硬件环境发生变化引起的适应性缺陷,也有些是用户在使用过程中提出的新需求。这些问题一般通过软件升级到更新的版本来解决。另一方面,为了增强软件的竞争力,也需要不断升级来完善产品。因此,软件升级在后期维护中变得越来越必要,越来越常见,成为软件生命周期中一个不可或缺的过程。软件研发发布的一系列版本,一般要求比较高的版本支持从低版本的升级,这就是软件升级。例如某个软件发布了Version1.0、Version2.0、Version3.0三个大版本;针对Version1.0又分别发布了若干补丁版本,例如Version1.0ServicePack1、Version1.0ServicePack2等;针对Version2.0和Version3.0也分别发布若干补丁版本。以大版本升级为例(暂不考虑补丁版本),该软件新开发Version4.0版本需要支持如下升级路径测试:1.支持从Version1.0升级到Version4.0;2.支持从Version2.0升级到Version4.0;3.支持从Version3.0升级到Version4.0;4.支持从Version1.0升级到Version2.0,再升级到Version4.0;5.支持从Version2.0升级到Version3.0,再升级到Version4.0;6.支持从Version1.0升级到Version3.0,再升级到Version4.0;7.支持从Version1.0升级到Version2.0,再升级到Version3.0,再升级到Version4.0;前三种升级测试路径是显然的。后四种路径也是实际需要的,因为全新安装的Version2.0版本和从Version1.0升级得到的Version2.0版本是会存在差异的,虽然对客户来说这种差异往往是感觉不明显的,但是在数据库结构与数据上往往会存在差异。从中可以看出,随着发布版本不断增多,版本升级测试路径将越来越多。假设已经发布了n(n>=1)个软件版本(即存在n个源版本),那么发布第n+1个软件版本时,需要测试的升级路径数就是C(n,1)+C(n,2)+C(n,3)+…+C(n,n)=2^n-1。另外,如果软件支持多种操作系统与数据库类型组合,例如Windows+SQLServer中/英文、Linux+Oracle中/英文、 Solaris+Oracle中/英文,那么升级测试路径再把测试环境考虑上(ω表示测试环境个数),测试路径组合数就变为为ω(2^n-1)。随着版本数目的增多,测试路径数可以说是爆炸式增长的。同时,要进行一次版本升级测试,都需要经过若干过程(源版本软件安装、源版本软件基本数据的生成和一定量的历史数据产生、升级过程,以及升级后一致性测试等几个环节),人力与物力投入是比较大的。基于数据库的软件升级中,数据库的升级测试是比较重要的环节,同时也是错误多发的区域。数据库应用程序测试与一般软件程序测试的主要区别是数据库应用程序测试需要在数据库实例(数据库状态)下运行测试用例,而测试结果也与数据库状态有关。相同的数据库结构在不同数据库数据记录下形成的不同数据库状态,会导致相同测试用例的不同测试输出。然而,由于升级测试路径组合数指数增长,数据库状态组合数也随之指数增长,在实际测试中,成本是非常高的。针对相关技术中,数据库的软件升级测试效率低,成本高的问题,目前还没有有效的解决方案。技术实现要素:本发明提供了一种数据库软件升级检测方法及装置,以至少解决相关技术中数据库的软件升级测试效率低,成本高的问题。根据本发明的一个方面,提供了一种数据库软件升级检测方法,包括:获取待测试软件数据库的升级程序语句,截取所述升级程序语句中的变更语句,所述变更语句是已发布软件数据库的实例转变为所述待测试软件数据库的实例的语句;获取已发布软件数据库的初始化语句,并从所述初始化语句中抽取与所述变更语句中数据库表名对应的数据库表以及字段信息,所述数据库表以及字段信息包括:约束信息和字段类型信息;在检测所述变更语句的执行是否违反所述约束信息之后,检测所述变更语句是否匹配所述字段类型信息。进一步地,截取所述升级程序语句中的变更语句之前,扫描所述升级程序语句是否存在判断语句,所述判断语句用于检测所述变更语句的执行是否违反所述约束信息;若存在的所述判断语句,则检测所述变更语句的执行是否违反所述约束信息。进一步地,所述已发布软件数据库的已发布软件包括所述待测试软件数据库中待测软件支持的所有源版本软件;所述已发布软件和所述待测试软件用软件的版本号唯一确定。进一步地,所述初始化语句为全新安装所述待测试软件数据库应用软件需要执行的数据库语句。进一步地,所述变更语句包括以下至少之一:插入INSERT语句,删除DELETE语句,更新UPDATE语句,创建CREATE语句,删除表DROP语句,修改ALTER语句。进一步地,所述约束信息包括以下至少之一:主键约束,外键约束,唯一UNIQUE约束,检查CHECK约束,缺省DEFAULT定义,允许空值;所述字段类型信息包括以下至少之一:字段类型,字段最大宽度。根据本发明的另一个方面,还提供了一种数据库软件升级检测装置,包括:第一获取模块,用于获取待测试软件数据库的升级程序语句,截取所述升级程序语句中的变更语句,所述变更语句是已发布软件数据库的实例转变为所述待测试软件数据库的实例的语句;第二获取模块,用于获取已发布软件数据库的初始化语句,并从所述初始化语句中抽取与所述变更语句中数据库表名对应的数据库表以及字段信息,所述数据库表以及字段信息包括:约束信息和字段类型信息;第一检测模块,用于在检测所述变更语句的执行是否违反所述约束信息之后,检测所述变更语句是否匹配所述字段类型信息。进一步地,所述装置还包括:判断模块,用于扫描所述升级程序语句是否存在判断语句,所述判断语句用于检测所述变更语句的执行是否违反所述约束信息;第二检测模块,用于若存在的所述判断语句,则检测所述变更语句的执行是否违反所述约束信息。进一步地,所述已发布软件数据库的已发布软件包括所述待测试软件数据库中待测软件支持的所有源版本软件;所述已发布软件和所述待测试软件用软件的版本号唯一确定。进一步地,所述初始化语句为全新安装所述待测试软件数据库应用软件需要执行的数据库语句。进一步地,所述变更语句包括以下至少之一:插入INSERT语句,删除DELETE语句,更新UPDATE语句,创建CREATE语句,删除表DROP语句,修改ALTER语句。进一步地,所述约束信息包括以下至少之一:主键约束,外键约束,唯一UNIQUE约束,检查CHECK约束,缺省DEFAULT定义,允许空值;所述字段类型信息包括以下至少之一:字段类型,字段最大宽度。通过本发明,获取待测试软件数据库的升级程序语句,截取该升级程序语句中的变更语句,该变更语句是已发布软件数据库的实例转变为该待测试软件数据库的实例的语句,获取已发布软件数据库的初始化语句,并从该初始化语句中抽取与该变更语句中数据库表名对应的数据库表以及字段信息,该数据库表以及字段信息包括:约束信息和字段类型信息,在检测该变更语句的执行是否违反该约束信息之后,检测该变更语句是否匹配该字段类型信息,解决了数据库的软件升级测试效率低,成本高的问题,提高了数据库的软件升级测试效率,降低了测试成本。附图说明此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:图1是根据本发明实施例的一种数据库软件升级检测方法的流程图;图2是根据本发明实施例的一种数据库软件升级检测装置的结构框图;图3是根据本发明优选实施例的数据库软件升级检测方法整体流程示意图;图4是根据本发明优选实施例的扫描待测试软件数据库升级程序流程示意图;图5是根据本发明优选实施例的扫描已发布软件数据库初始化程序流程示意图;图6是根据本发明优选实施例的变更语句错误检测流程示意图。具体实施方式下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。在本实施例中提供了一种数据库软件升级检测方法,图1是根据本发明实施例的一种数据库软件升级检测方法的流程图,如图1所示,该流程包括如下步骤:步骤S102,获取待测试软件数据库的升级程序语句,截取该升级程序语句中的变更语句,该变更语句是已发布软件数据库的实例转变为该待测试软件数据库的实例的语句;步骤S104,获取已发布软件数据库的初始化语句,并从该初始化语句中抽取与该变更语句中数据库表名对应的数据库表以及字段信息,该数据库表以及字段信息包括:约束信息和字段类型信息;步骤S106,在检测该变更语句的执行是否违反该约束信息之后,检测该变更语句是否匹配该字段类型信息。通过上述步骤,获取待测试软件数据库的升级程序语句,截取该升级程序语句中的变更语句,该变更语句是已发布软件数据库的实例转变为该待测试软件数据库的实例的语句,获取已发布软件数据库的初始化语句,并从该初始化语句中抽取与该变更语句中数据库表名对应的数据库表以及字段信息,该数据库表以及字段信息包括:约束信息和字段类型信息在检测该变更语句的执行是否违反该约束信息之后,检测该变更语句是否匹配该字段类型信息,解决了数据库的软件升级测试效率低,成本高的问题,提高了数据库的软件升级测试效率,降低了测试成本。在本实施例中,扫描该升级程序语句是否存在判断语句,该判断语句用于检测该变更语句的执行是否违反该约束信息;若存在的该判断语句,则检测该变更语句的执行是否违反该约束信息。在本实施例中,该已发布软件数据库的已发布软件包括该待测试软件数据库中待测软件支持的所有源版本软件,该已发布软件和该待测试软件用软件的版本号唯一确定。在本实施例中,该初始化语句为全新安装该待测试软件数据库应用软件需要执行的数据库语句。在本实施例中,该变更语句包括以下至少之一:插入INSERT语句,删除DELETE语句,更新UPDATE语句,创建CREATE语句,删除表DROP语句,修改ALTER语句。在本实施例中,该约束信息包括以下至少之一:主键约束,外键约束,唯一UNIQUE约束,检查CHECK约束,缺省DEFAULT定义,允许空值;该字段类型信息包括以下至少之一:字段类型,字段最大宽度。在本实施例中还提供了一种数据库软件升级检测装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。图2是根据本发明实施例的一种数据库软件升级检测装置的结构框图,如图2所示,该装置包括:第一获取模块22,用于获取待测试软件数据库的升级程序语句,截取该升级程序语 句中的变更语句,该变更语句是已发布软件数据库的实例转变为该待测试软件数据库的实例的语句;第二获取模块24,用于获取已发布软件数据库的初始化语句,并从该初始化语句中抽取与该变更语句中数据库表名对应的数据库表以及字段信息,该数据库表以及字段信息包括:约束信息和字段类型信息;第一检测模块26,用于在检测该变更语句的执行是否违反该约束信息之后,检测该变更语句是否匹配该字段类型信息。通过上述装置,获取待测试软件数据库的升级程序语句,截取该升级程序语句中的变更语句,该变更语句是已发布软件数据库的实例转变为该待测试软件数据库的实例的语句,获取已发布软件数据库的初始化语句,并从该初始化语句中抽取与该变更语句中数据库表名对应的数据库表以及字段信息,该数据库表以及字段信息包括:约束信息和字段类型信息在检测该变更语句的执行是否违反该约束信息之后,检测该变更语句是否匹配该字段类型信息,解决了数据库的软件升级测试效率低,成本高的问题,提高了数据库的软件升级测试效率,降低了测试成本。在本实施例中,该装置还包括:判断模块,用于扫描该升级程序语句是否存在判断语句,该判断语句用于检测该变更语句的执行是否违反该约束信息;第二检测模块,用于若存在的该判断语句,则检测该变更语句的执行是否违反该约束信息。下面结合优选实施例和实施方式对本发明进行详细说明。本优选实施例提供了一种数据库软件升级检测方法,不需要动态搭建升级测试环境,操作简单、低成本、快可速发现数据库升级程序存在的故障,提高数据库应用软件升级测试效率。该方法不需要动态准备升级测试环境就可以提前发现数据库升级程序错误。使错误被尽早发现,同时降低了测试成本,提高了测试精准度。该方法包括以下步骤:1)获取待测试软件数据库升级程序语句,在所述变更语句中获取到数据库表名。2)获取已发布软件数据库初始化语句,获取步骤1)得到的数据库表名对应表以及字段信息。3)检测步骤1)得到的变更语句前是否存在判断语句,判断语句目的在于检查该变更语句的执行是否违反步骤2)得到的对应数据库表及字段约束信息;检测步骤1)得到的变更语句是否违反步骤2)得到的对应数据库表各字段类型信息。上述数据库软件升级检测方法,所述步骤1)关于数据库变更语句是将数据库实例从一种状态转变为另一种实例状态的语句,也就是将已发布软件数据库实例转变为新的待测试软件数据库实例的语句。变更语句是数据库升级程序语句的核心内容;所述步骤1)数据库升级程序语句信息将用于步骤3)的检测过程。上述数据库软件升级检测方法,所述步骤2)关于已发布软件可以是待测试软件需要支持升级的所有源版本软件,可以使用软件版本号唯一确定;所述步骤2)关于数据库初始化语句是全新安装数据库应用软件需要执行的数据库语句;所述步骤2)数据库表及字段信息将用于步骤3)的检测过程。上述数据库软件升级检测方法,所述步骤3)关于判断语句是一种选择性判断,也就是说如果判断语句结果为真,则执行其后的数据库变更语句;如果判断语句结果为假,则不执行其后的数据库变更语句。以确保数据库变更语句的正确执行。图3是根据本发明优选实施例的数据库软件升级检测方法整体流程示意图,如图3所示,包括三个步骤:步骤1:针对输入的待测试数据库应用软件版本,获取其数据库升级程序变更语句。具体而言,所述数据库程序语言可以为任意一种结构化查询语言(SQL),数据库可以为所有关系型数据库。所述数据库升级程序变更语句包括INSERT、DELETE、UPDATE、CREATE、DROP、ALTER语句。不需要安装待测试数据库应用软件,只需要提供待测试数据库应用软件文件。图4是根据本发明优选实施例的扫描待测试软件数据库升级程序流程示意图,如图4所示,图4为上述步骤1的流程示意图。包括四个步骤:步骤401:针对输入的待测试数据库应用软件版本,扫描其升级程序。所述升级程序就是该软件用于升级已发布软件版本时需要执行的程序集合。步骤402:在升级程序中获取数据库升级程序语句。数据库升级程序语句在步骤3中将再次使用。步骤403:获取数据库升级程序变更语句。步骤404:在数据库升级程序变更语句中截取数据库表名。所述截取过程依据结构化查询语言语法规则。举例而言,若扫描升级程序后得到的数据库升级语句集合中,存在一条变更语句insertintoPM_NEPODEF_TABLE(MOCID,NETYPEID,POID,PONAME,PODES,POTABLENAME)values('an_port','ZXDSL9852V','50009','IGMP端口统计','IGMP端口统计','ZXDSL9852V_50009'),依据语法规则“INSERTINTOtable(columns)VALUES(columnsValues)”,可以抽取出表名PM_NEPODEF_TABLE,并将包含该变更语句在内 的所有数据库升级程序语句集合储存备用。步骤2:针对输入的已发布数据库应用软件,获取数据库初始化语句。具体而言,所述已发布数据库应用软件可以为任意一个已经发布过的需要待测试应用软件支持升级的源版本。所述数据库初始化程序语句为全新安装该版本应用软件过程中初始执行的数据库程序语句。不需要安装已发布数据库应用软件,只需要提供已发布数据库应用软件文件,依据版本号来定位版本。图5是根据本发明优选实施例的扫描已发布软件数据库初始化程序流程示意图,如图5所示,图5为步骤2的流程示意图。包括三个步骤:步骤501:针对输入的已发布数据库应用软件,扫描其安装程序。所述安装程序就是该软件用于初始安装时需要执行的程序集合。步骤502:在安装程序中依据步骤1得到的数据库表名定向搜索获取表的初始化程序。步骤503:抽取数据库表及字段信息,包括约束信息和字段类型信息。所述约束信息包括主键约束、外键约束、UNIQUE约束、CHECK约束、DEFAULT定义、允许空值;所述字段类型信息包括字段类型、字段最大宽度。所述数据库表及字段信息将用于步骤3。举例而言,扫描得到已发布数据库应用软件数据库初始化程序语句,依据数据库表名PM_NEPODEF_TABLE锁定相关初始化程序语句为:依据语法规则,抽取约束信息和字段类型信息,最终结果如下表1展示:表1步骤3:检测步骤1得到的变更语句前是否存在正确的判断,检测步骤1得到的变更语句是否违反步骤2得到的数据库初始化语句。具体而言,所述判断语句可以是任意结构化查询语言中判断语句,该语句结果为真或者假,用于控制后续一段语句的执行与否。图6是根据本发明优选实施例的变更语句错误检测流程示意图,如图6所示,图6为步骤3的流程示意图,包括两个步骤:步骤601:在步骤1所得数据库升级程序语句集合中对应数据库变更语句前搜索是否存在判断语句,判断语句目的在于检查该变更语句的执行是否违反步骤2得到的对应数据库表及字段约束信息。如果存在,则进一步检测是否有效于该变更语句,也就是说判断其是否违反步骤2得到的表的约束信息。步骤602:在步骤1所得数据库变更语句中检测其中涉及的字段值是否与步骤2得到的字段类型以及字段最大宽度相匹配。举例而言,示例INSERTINTOtable(colums)VALUES(columnValues)变更语句错误检测。首先,在待测数据库应用软件升级程序集合中的变更语句insertintoPM_NEPODEF_TABLE(MOCID,NETYPEID,POID,PONAME,PODES,POTABLENAME)values('an_port','ZXDSL9852V','50009','IGMP端口统计','IGMP端口统计','ZXDSL9852V_50009')前搜索是否存在判断语句,例如如果存在如下语句:ifexists(select*fromPM_NEPODEF_TABLEwhereNETYPEID='ZXDSL9852V'andMOCID='an_port'andPOID='50009'andPOTABLENAME='ZXDSL9852V_50009')则进一步检测对应字段是否包含主键约束NETYPEID,MOCID,POID,POTABLENAME,并且对应字段值是否与变更语句中字段值类型一致或者前者包含后者的范围。在所述步骤中,还需要检测变更语句中所有涉及的字段(MOCID,NETYPEID,POID,PONAME,PODES,POTABLENAME)对应的取值'an_port','ZXDSL9852V','50009','IGMP端口统计','IGMP端口统计','ZXDSL9852V_50009'在类型、在字段宽度上是否与表PM_NEPODEF_TABLE的字段类型信息相匹配。综上所述,本优选实施例提供了一种快速地、不需要动态安装搭建测试环境、可提前发现数据库应用软件升级程序错误的静态测试方法。在一定程度上降低了由于升级路径爆炸式增长导致的高成本测试投入的风险,为尽早发现程序错误,尽早将升级软件版本推向市场提供了保障。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。本发明的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以被设置为存储用于执行上述实施例方法步骤的程序代码:可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,RandomAccessMemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。可选地,在本实施例中,处理器根据存储介质中已存储的程序代码执行上述实施例的方法步骤。显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1