本發(fā)明涉及軟件測試
技術(shù)領(lǐng)域:
:,具體涉及一種基于動態(tài)規(guī)劃算法的數(shù)據(jù)庫軟件升級檢測系統(tǒng)及方法。
背景技術(shù):
::一般情況下,計算機軟件在設(shè)計最初,由于設(shè)計人員考慮不全面或程序功能不完善,在運行過程中,會不斷出現(xiàn)新的問題。有些是代碼漏洞引起的故障,有些是軟硬件之間新出現(xiàn)的兼容性問題,也有些是用戶在使用過程中提出的新需求。這些問題一般通過軟件升級到更新的版本來解決,還能夠提高性能,完善功能,增強軟件的競爭力。因此,軟件升級在后期維護中愈加重要,不可或缺。軟件研發(fā)發(fā)布的一系列版本,一般要求比較高的版本支持從低版本的升級,這就是軟件升級。例如某個軟件發(fā)布了version1.0、version2.0兩大版本;針對version1.0又分別發(fā)布了若干補丁版本,例如version1.0servicepack1、version1.0servicepack2等;針對version2.0發(fā)布若干補丁版本。以大版本升級為例(暫不考慮補丁版本),該軟件新開發(fā)version3.0版本需要支持如下升級路徑測試如下:(1)支持從version1.0升級到version3.0;(2)支持從version2.0升級到version3.0;(3)支持從version1.0升級到version2.0,再升級到version3.0;前兩種升級測試路徑是顯然的,后一種升級測試路徑也是實際需要的,因為全新安裝的version2.0版本和從version1.0升級得到的version2.0版本是會存在差異的,雖然對客戶來說這種差異往往是感覺不明顯的,但是在數(shù)據(jù)庫結(jié)構(gòu)與數(shù)據(jù)上往往會存在差異??梢钥闯觯S著發(fā)布版本的增加,版本升級測試路徑將越來越多。假設(shè)已經(jīng)發(fā)布了n(n>=1)個軟件版本(即存在n個源版本),那么發(fā)布第n+1個軟件版本時,需要測試的升級路徑數(shù)就是c(n,1)+c(n,2)+c(n,3)+…+c(n,n)=2^n-1。另外,如果軟件支持多種操作系統(tǒng)與數(shù)據(jù)庫類型組合,例如windows+sqlserver中/英文、linux+oracle中/英文、solaris+oracle中/英文,那么升級測試路徑再把測試環(huán)境考慮上(ω表示測試環(huán)境個數(shù)),測試路徑組合數(shù)就變?yōu)棣?2^n-1)。隨著版本數(shù)目的增多,測試路徑數(shù)可以說是爆炸式增長的。同時,要進行一次版本升級測試,都需要經(jīng)過若干過程(源版本軟件安裝、源版本軟件基本數(shù)據(jù)的生成和一定量的歷史數(shù)據(jù)產(chǎn)生、升級過程,以及升級后一致性測試等環(huán)節(jié)),需要消耗的人力與占用服務(wù)器資源是比較高的。目前,版本升級過程的測試大體先后經(jīng)歷三個主要的時期:升級故障頻發(fā)期、升級故障驗證初期、升級測試回歸期。版本升級測試任務(wù)就是發(fā)現(xiàn)升級模塊存在的故障、修改故障、驗證故障,最終輸出一個對外發(fā)布的升級軟件版本。在升級故障頻發(fā)期,故障較多,升級過程無法順利進行。經(jīng)過實踐證明:此時切入自動化測試是不合適的,此時需要測試人員精心挖掘潛在故障,在版本相對穩(wěn)定后才切入自動化測試。因為版本升級過程中,各步驟間是串行進行的。因此,在升級故障頻發(fā)期和升級故障驗證初期,使用一種半自動化測試方式;在升級驗證回歸期,使用全自動化測試方式。但是,由于在升級故障頻發(fā)期和升級故障驗證初期采用人工與自動化結(jié)合的半自動測試方式,測試較慢。若是在升級檢測初期(升級故障頻發(fā)期和升級故障驗證初期),每條升級路徑都去檢測,這類似于窮舉法,檢測速度較慢,升級程序錯誤搜索效率較低,需大量投入時間與人力。尤其在版本升級過程中,數(shù)據(jù)庫應(yīng)用程序測試需要在數(shù)據(jù)庫實例(數(shù)據(jù)庫狀態(tài))下運行測試用例,而測試結(jié)果也與數(shù)據(jù)庫狀態(tài)有關(guān)。相同的數(shù)據(jù)庫結(jié)構(gòu)在不同數(shù)據(jù)庫數(shù)據(jù)記錄下形成的不同數(shù)據(jù)庫狀態(tài),會導(dǎo)致相同測試用例的不同測試輸出,由于升級測試路徑組合數(shù)指數(shù)增長,數(shù)據(jù)庫狀態(tài)組合數(shù)也隨之指數(shù)增長,在實際測試中,也是需大量投入時間與人力,成本是非常高的。針對上述出現(xiàn)的技術(shù)問題,版本升級過程中數(shù)據(jù)庫的軟件升級路徑搜索速度慢,測試效率低,成本高的問題,是當前需要解決的問題。技術(shù)實現(xiàn)要素:本發(fā)明的目的是克服現(xiàn)有技術(shù)中版本升級過程中數(shù)據(jù)庫的軟件升級路徑搜索速度慢,測試效率低,成本高的問題。本發(fā)明的基于動態(tài)規(guī)劃算法的數(shù)據(jù)庫軟件升級檢測系統(tǒng)及方法,解決了數(shù)據(jù)庫的軟件升級測試效率低,成本高的問題,提高了數(shù)據(jù)庫的軟件升級測試效率,降低了測試成本,具有良好的應(yīng)用前景。為了達到上述目的,本發(fā)明所采用的技術(shù)方案是:一種基于動態(tài)規(guī)劃算法的數(shù)據(jù)庫軟件升級檢測系統(tǒng),其特征在于:包括依次連接的設(shè)計模塊、第一獲取模塊、第二獲取模塊和第一檢測模塊,所述設(shè)計模塊,用于根據(jù)有向圖設(shè)計動態(tài)規(guī)劃算法,選取數(shù)據(jù)庫軟件升級的最短路徑和關(guān)鍵路徑,優(yōu)先對最短路徑和關(guān)鍵路徑進行靜態(tài)測試,最短路徑和關(guān)鍵路徑分別是有向圖路徑上各邊權(quán)值和的最小值和最大值;所述第一獲取模塊,用于獲取待測試軟件數(shù)據(jù)庫的升級程序語句,截取所述升級程序語句中的變更語句,所述變更語句為已發(fā)布軟件數(shù)據(jù)庫的實例轉(zhuǎn)變?yōu)樗龃郎y試軟件數(shù)據(jù)庫的實例的語句;所述第二獲取模塊,用于獲取已發(fā)布軟件數(shù)據(jù)庫的初始化語句,并從所述初始化語句中抽取與所述變更語句中數(shù)據(jù)庫表名相對應(yīng)的數(shù)據(jù)庫表以及字段信息,所述數(shù)據(jù)庫表以及字段信息包括約束信息和字段類型信息;第一檢測模塊,用于在檢測所述變更語句的執(zhí)行是否違反所述數(shù)據(jù)庫表以及字段信息內(nèi)的約束信息,以及檢測所述變更語句是否匹配所述數(shù)據(jù)庫表以及字段信息內(nèi)的字段類型信息。前述的基于動態(tài)規(guī)劃算法的數(shù)據(jù)庫軟件升級檢測系統(tǒng),其特征在于:還包括判斷模塊和第二檢測模塊,所述判斷模塊分別與第一獲取模塊、第一檢測模塊相連接,用于掃描所述升級程序語句是否存在判斷語句;所述第二檢測模塊與判斷模塊相連接,用于若存在的所述判斷語句,則檢測對應(yīng)的變更語句的執(zhí)行是否違反所述約束信息。前述的基于動態(tài)規(guī)劃算法的數(shù)據(jù)庫軟件升級檢測系統(tǒng),其特征在于:所述已發(fā)布軟件數(shù)據(jù)庫的已發(fā)布軟件包括所述待測試軟件數(shù)據(jù)庫中待測軟件支持的所有源版本軟件,且已發(fā)布軟件和所述待測軟件所用軟件的版本號唯一確定。前述的基于動態(tài)規(guī)劃算法的數(shù)據(jù)庫軟件升級檢測系統(tǒng),其特征在于:所述已發(fā)布軟件數(shù)據(jù)庫的初始化語句為待測試軟件數(shù)據(jù)庫需要執(zhí)行的數(shù)據(jù)庫語句。前述的基于動態(tài)規(guī)劃算法的數(shù)據(jù)庫軟件升級檢測系統(tǒng),其特征在于:所述變更語句,至少包括以下之一:插入insert語句、刪除delete語句、更新update語句、創(chuàng)建create語句、刪除表drop語句、修改alter語句;所述約束信息,至少包括以下之一:主鍵約束、外鍵約束、唯一unique約束、檢查check約束、缺省default定義、允許空值;所述字段類型信息,至少包括以下之一:字段類型、字段最大寬度。一種基于動態(tài)規(guī)劃算法的數(shù)據(jù)庫軟件升級檢測方法,其特征在于:包括以下步驟,步驟(a),根據(jù)有向圖設(shè)計動態(tài)規(guī)劃算法,獲取數(shù)據(jù)庫軟件升級的最短路徑和關(guān)鍵路徑,優(yōu)先對最短路徑和關(guān)鍵路徑進行靜態(tài)測試,最短路徑和關(guān)鍵路徑分別是有向圖路徑上各邊權(quán)值和的最小和最大的路徑;步驟(b),獲取待測試軟件數(shù)據(jù)庫的升級程序語句,截取該升級程序語句中的變更語句,所述變更語句為已發(fā)布軟件數(shù)據(jù)庫的實例轉(zhuǎn)變?yōu)樵摯郎y試軟件數(shù)據(jù)庫的實例的語句;步驟(c),獲取已發(fā)布軟件數(shù)據(jù)庫的初始化語句,并從該初始化語句中抽取與該變更語句中數(shù)據(jù)庫表名對應(yīng)的數(shù)據(jù)庫表以及字段信息,所述數(shù)據(jù)庫表以及字段信息,包括約束信息和字段類型信息;步驟(d),檢測所述變更語句的執(zhí)行是否違反數(shù)據(jù)庫表以及字段信息內(nèi)的約束信息后,繼續(xù)檢測所述變更語句是否匹配數(shù)據(jù)庫表以及字段信息內(nèi)的字段類型信息。前述的基于動態(tài)規(guī)劃算法的數(shù)據(jù)庫軟件升級檢測方法,其特征在于:步驟(b),還包括掃描所述升級程序語句是否存在判斷語句;若存在的所述判斷語句,則檢測所述變更語句的執(zhí)行是否違反所述約束信息。前述的基于動態(tài)規(guī)劃算法的數(shù)據(jù)庫軟件升級檢測方法,其特征在于:步驟(c),所述已發(fā)布軟件數(shù)據(jù)庫的已發(fā)布軟件包括所述待測試軟件數(shù)據(jù)庫中待測軟件支持的所有源版本軟件,且已發(fā)布軟件和所述待測軟件所用軟件的版本號唯一確定。前述的基于動態(tài)規(guī)劃算法的數(shù)據(jù)庫軟件升級檢測方法,其特征在于:所述已發(fā)布軟件數(shù)據(jù)庫的初始化語句為待測試軟件數(shù)據(jù)庫需要執(zhí)行的數(shù)據(jù)庫語句。前述的基于動態(tài)規(guī)劃算法的數(shù)據(jù)庫軟件升級檢測方法,其特征在于:所述變更語句,至少包括以下之一:插入insert語句、刪除delete語句、更新update語句、創(chuàng)建create語句、刪除表drop語句、修改alter語句;所述約束信息,至少包括以下之一:主鍵約束、外鍵約束、唯一unique約束、檢查check約束、缺省default定義、允許空值;所述字段類型信息,至少包括以下之一:字段類型、字段最大寬度。本發(fā)明的有益效果是:本發(fā)明的基于動態(tài)規(guī)劃算法的數(shù)據(jù)庫軟件升級檢測系統(tǒng)及方法,解決了數(shù)據(jù)庫的軟件升級測試效率低,成本高的問題,提高了數(shù)據(jù)庫的軟件升級測試效率,降低了測試成本,實現(xiàn)快速地、不需要動態(tài)安裝搭建測試環(huán)境,可提前發(fā)現(xiàn)數(shù)據(jù)庫應(yīng)用軟件升級程序錯誤的靜態(tài)測試方法,在一定程度上降低了由于升級路徑爆炸式增長導(dǎo)致的高成本測試投入的風(fēng)險,提高了路徑和程序錯誤搜索效率,為盡早發(fā)現(xiàn)程序錯誤,盡早將升級軟件版本推向市場提供了保障,具有良好的應(yīng)用前景。附圖說明圖1是本發(fā)明的基于動態(tài)規(guī)劃算法的數(shù)據(jù)庫軟件升級檢測系統(tǒng)的系統(tǒng)框圖;圖2是本發(fā)明的基于動態(tài)規(guī)劃算法的數(shù)據(jù)庫軟件升級檢測方法的流程圖;圖3是本發(fā)明的第三實施例數(shù)據(jù)庫軟件升級檢測方法的流程圖;圖4是本發(fā)明的第三實施例數(shù)據(jù)庫軟件升級檢測方法的掃描待測試軟件數(shù)據(jù)庫升級程序的流程圖;圖5是本發(fā)明的第三實施例數(shù)據(jù)庫軟件升級檢測方法的掃描已發(fā)布軟件數(shù)據(jù)庫初始化程序的流程圖;圖6是本發(fā)明的第三實施例數(shù)據(jù)庫軟件升級檢測方法的變更語句錯誤檢測的流程圖。具體實施方式下面將結(jié)合說明書附圖,對本發(fā)明作進一步的說明。如圖1所示,本發(fā)明的基于動態(tài)規(guī)劃算法的數(shù)據(jù)庫軟件升級檢測系統(tǒng),包括依次連接的設(shè)計模塊1、第一獲取模塊2、第二獲取模塊3和第一檢測模塊4,所述設(shè)計模塊1,用于根據(jù)有向圖設(shè)計動態(tài)規(guī)劃算法,選取數(shù)據(jù)庫軟件升級的最短路徑和關(guān)鍵路徑,優(yōu)先對最短路徑和關(guān)鍵路徑進行靜態(tài)測試,最短路徑和關(guān)鍵路徑分別是有向圖路徑上各邊權(quán)值和的最小值和最大值;所述第一獲取模塊2,用于獲取待測試軟件數(shù)據(jù)庫的升級程序語句,截取所述升級程序語句中的變更語句,所述變更語句為已發(fā)布軟件數(shù)據(jù)庫的實例轉(zhuǎn)變?yōu)樗龃郎y試軟件數(shù)據(jù)庫的實例的語句;所述第二獲取模塊3,用于獲取已發(fā)布軟件數(shù)據(jù)庫的初始化語句,并從所述初始化語句中抽取與所述變更語句中數(shù)據(jù)庫表名相對應(yīng)的數(shù)據(jù)庫表以及字段信息,所述數(shù)據(jù)庫表以及字段信息包括約束信息和字段類型信息;第一檢測模塊4,用于在檢測所述變更語句的執(zhí)行是否違反所述數(shù)據(jù)庫表以及字段信息內(nèi)的約束信息,以及檢測所述變更語句是否匹配所述數(shù)據(jù)庫表以及字段信息內(nèi)的字段類型信息。優(yōu)選的本發(fā)明的基于動態(tài)規(guī)劃算法的數(shù)據(jù)庫軟件升級檢測系統(tǒng),還包括判斷模塊5和第二檢測模塊6,所述判斷模塊5分別與第一獲取模塊2、第一檢測模塊4相連接,用于掃描所述升級程序語句是否存在判斷語句;所述第二檢測模塊6與判斷模塊5相連接,用于若存在的所述判斷語句,則檢測對應(yīng)的變更語句的執(zhí)行是否違反所述約束信息。優(yōu)選的所述已發(fā)布軟件數(shù)據(jù)庫的已發(fā)布軟件包括所述待測試軟件數(shù)據(jù)庫中待測軟件支持的所有源版本軟件,且已發(fā)布軟件和所述待測軟件所用軟件的版本號唯一確定。優(yōu)選的所述已發(fā)布軟件數(shù)據(jù)庫的初始化語句為待測試軟件數(shù)據(jù)庫需要執(zhí)行的數(shù)據(jù)庫語句。優(yōu)選的所述變更語句,至少包括以下之一:插入insert語句、刪除delete語句、更新update語句、創(chuàng)建create語句、刪除表drop語句、修改alter語句;所述約束信息,至少包括以下之一:主鍵約束、外鍵約束、唯一unique約束、檢查check約束、缺省default定義、允許空值;所述字段類型信息,至少包括以下之一:字段類型、字段最大寬度。本發(fā)明的基于動態(tài)規(guī)劃算法的數(shù)據(jù)庫軟件升級檢測模塊,解決了數(shù)據(jù)庫的軟件升級搜索速度慢,測試效率低,成本高的問題,提高了數(shù)據(jù)庫的軟件升級路徑搜索速度及測試效率,降低了測試成本。根據(jù)上述的基于動態(tài)規(guī)劃算法的數(shù)據(jù)庫軟件升級檢測模塊的數(shù)據(jù)庫軟件升級檢測方法,如圖2所示,包括以下步驟,步驟(a),根據(jù)有向圖設(shè)計動態(tài)規(guī)劃算法,獲取數(shù)據(jù)庫軟件升級的最短路徑和關(guān)鍵路徑,優(yōu)先對最短路徑和關(guān)鍵路徑進行靜態(tài)測試,最短路徑和關(guān)鍵路徑分別是有向圖路徑上各邊權(quán)值和的最小和最大的路徑;步驟(b),獲取待測試軟件數(shù)據(jù)庫的升級程序語句,截取該升級程序語句中的變更語句,所述變更語句為已發(fā)布軟件數(shù)據(jù)庫的實例轉(zhuǎn)變?yōu)樵摯郎y試軟件數(shù)據(jù)庫的實例的語句,本步驟還還包括掃描所述升級程序語句是否存在判斷語句;若存在的所述判斷語句,則檢測所述變更語句的執(zhí)行是否違反所述約束信息;步驟(c),獲取已發(fā)布軟件數(shù)據(jù)庫的初始化語句,并從該初始化語句中抽取與該變更語句中數(shù)據(jù)庫表名對應(yīng)的數(shù)據(jù)庫表以及字段信息,所述數(shù)據(jù)庫表以及字段信息,包括約束信息和字段類型信息,所述已發(fā)布軟件數(shù)據(jù)庫的已發(fā)布軟件包括所述待測試軟件數(shù)據(jù)庫中待測軟件支持的所有源版本軟件,且已發(fā)布軟件和所述待測軟件所用軟件的版本號唯一確定;所述已發(fā)布軟件數(shù)據(jù)庫的初始化語句為待測試軟件數(shù)據(jù)庫需要執(zhí)行的數(shù)據(jù)庫語句;步驟(d),檢測所述變更語句的執(zhí)行是否違反數(shù)據(jù)庫表以及字段信息內(nèi)的約束信息后,繼續(xù)檢測所述變更語句是否匹配數(shù)據(jù)庫表以及字段信息內(nèi)的字段類型信息。所述變更語句,至少包括以下之一:插入insert語句、刪除delete語句、更新update語句、創(chuàng)建create語句、刪除表drop語句、修改alter語句;所述約束信息,至少包括以下之一:主鍵約束、外鍵約束、唯一unique約束、檢查check約束、缺省default定義、允許空值;所述字段類型信息,至少包括以下之一:字段類型、字段最大寬度。本發(fā)明的基于動態(tài)規(guī)劃算法的數(shù)據(jù)庫軟件升級檢測方法,實現(xiàn)快速地、不需要動態(tài)安裝搭建測試環(huán)境,可提前發(fā)現(xiàn)數(shù)據(jù)庫應(yīng)用軟件升級程序錯誤的靜態(tài)測試方法,在一定程度上降低了由于升級路徑爆炸式增長導(dǎo)致的高成本測試投入的風(fēng)險,提高了路徑和程序錯誤搜索效率,為盡早發(fā)現(xiàn)程序錯誤,盡早將升級軟件版本推向市場提供了保障。下面根據(jù)本發(fā)明的基于動態(tài)規(guī)劃算法的數(shù)據(jù)庫軟件升級檢測系統(tǒng)及方法,介紹第一實施例的數(shù)據(jù)庫軟件升級檢測方法,包括以下步驟,步驟(1),獲取最短路徑和關(guān)鍵路徑的動態(tài)規(guī)劃算法,優(yōu)先選用最短路徑和關(guān)鍵路徑進行靜態(tài)測試;步驟(2),獲取待測試軟件數(shù)據(jù)庫升級程序語句,在所述變更語句中獲取到數(shù)據(jù)庫表名;步驟(3),獲取已發(fā)布軟件數(shù)據(jù)庫初始化語句,獲取步驟2)得到的數(shù)據(jù)庫表名對應(yīng)表以及字段信息;步驟(4),檢測步驟(2)得到的變更語句前是否存在判斷語句,判斷語句目的在于檢查該變更語句的執(zhí)行是否違反步驟(3)得到的對應(yīng)數(shù)據(jù)庫表及字段約束信息;繼續(xù)檢測步驟(3)得到的變更語句是否違反步驟(3)得到的對應(yīng)數(shù)據(jù)庫表各字段類型信息。上述的數(shù)據(jù)庫軟件升級檢測方法,所述步驟(1)關(guān)于最短路徑和關(guān)鍵路徑分別是有向圖路徑上各邊權(quán)值和的最小和最大的路徑;所述步驟(2)關(guān)于數(shù)據(jù)庫變更語句是將數(shù)據(jù)庫實例從一種狀態(tài)轉(zhuǎn)變?yōu)榱硪环N實例狀態(tài)的語句,也就是將已發(fā)布軟件數(shù)據(jù)庫實例轉(zhuǎn)變?yōu)樾碌拇郎y試軟件數(shù)據(jù)庫實例的語句,變更語句是數(shù)據(jù)庫升級程序語句的核心內(nèi)容;所述步驟(2)數(shù)據(jù)庫升級程序語句信息將用于步驟(4)的檢測過程。上述的數(shù)據(jù)庫軟件升級檢測方法,所述步驟(3)關(guān)于已發(fā)布軟件可以是待測試軟件需要支持升級的所有源版本軟件,使用軟件版本號唯一確定;所述步驟(3)關(guān)于數(shù)據(jù)庫初始化語句是全新安裝數(shù)據(jù)庫應(yīng)用軟件需要執(zhí)行的數(shù)據(jù)庫語句;所述步驟(3)數(shù)據(jù)庫表及字段信息將用于步驟(4)的檢測過程。上述數(shù)據(jù)庫軟件升級檢測方法,所述步驟(4)關(guān)于判斷語句是一種選擇性判斷,也就是說如果判斷語句結(jié)果為真,則執(zhí)行其后的數(shù)據(jù)庫變更語句;如果判斷語句結(jié)果為假,則不執(zhí)行其后的數(shù)據(jù)庫變更語句。以確保數(shù)據(jù)庫變更語句的正確執(zhí)行。如圖3所示,本發(fā)明優(yōu)選的第二實施例,包括三個步驟,步驟(11):針對輸入的待測試數(shù)據(jù)庫應(yīng)用軟件版本,獲取其數(shù)據(jù)庫升級程序變更語句,具體而言,所述數(shù)據(jù)庫程序語言可以為任意一種結(jié)構(gòu)化查詢語言(sql),數(shù)據(jù)庫可以為所有關(guān)系型數(shù)據(jù)庫。所述數(shù)據(jù)庫升級程序變更語句包括insert、delete、update、create、drop、alter語句。不需要安裝待測試數(shù)據(jù)庫應(yīng)用軟件,只需要提供待測試數(shù)據(jù)庫應(yīng)用軟件文件;如圖4所示,上述步驟(11)的流程示意圖,包括四個步驟:步驟1101:針對輸入的待測試數(shù)據(jù)庫應(yīng)用軟件版本,掃描其升級程序,所述升級程序就是該軟件用于升級已發(fā)布軟件版本時需要執(zhí)行的程序集合;步驟1102:在升級程序中獲取數(shù)據(jù)庫升級程序語句,數(shù)據(jù)庫升級程序語句在步驟(13)中將再次使用;步驟1103:獲取數(shù)據(jù)庫升級程序變更語句;步驟1104:在數(shù)據(jù)庫升級程序變更語句中截取數(shù)據(jù)庫表名,所述截取過程依據(jù)結(jié)構(gòu)化查詢語言語法規(guī)則。舉例而言,若掃描升級程序后得到的數(shù)據(jù)庫升級語句集合中,存在一條變更語句,insertintopm_nepodef_table(mocid,netypeid,poid,poname,podes,potablename)values('an_port','zxdsl9852v','50009','igmp端口統(tǒng)計','igmp端口統(tǒng)計','zxdsl9852v_50009'),依據(jù)語法規(guī)則“insertintotable(columns)values(columnsvalues)”,可以抽取出表名pm_nepodef_table,并將包含該變更語句在內(nèi)的所有數(shù)據(jù)庫升級程序語句集合儲存?zhèn)溆?;步驟(12):針對輸入的已發(fā)布數(shù)據(jù)庫應(yīng)用軟件,獲取數(shù)據(jù)庫初始化語句,具體而言,所述已發(fā)布數(shù)據(jù)庫應(yīng)用軟件可以為任意一個已經(jīng)發(fā)布過的需要待測試應(yīng)用軟件支持升級的源版本,所述數(shù)據(jù)庫初始化程序語句為全新安裝該版本應(yīng)用軟件過程中初始執(zhí)行的數(shù)據(jù)庫程序語句,不需要安裝已發(fā)布數(shù)據(jù)庫應(yīng)用軟件,只需要提供已發(fā)布數(shù)據(jù)庫應(yīng)用軟件文件,依據(jù)版本號來定位版本,如圖5所示,步驟(12)的流程示意圖,包括三個步驟:步驟1201:針對輸入的已發(fā)布數(shù)據(jù)庫應(yīng)用軟件,掃描其安裝程序。所述安裝程序就是該軟件用于初始安裝時需要執(zhí)行的程序集合;步驟1202:在安裝程序中依據(jù)步驟1得到的數(shù)據(jù)庫表名定向搜索獲取表的初始化程序;步驟1203:抽取數(shù)據(jù)庫表及字段信息,包括約束信息和字段類型信息。所述約束信息包括主鍵約束、外鍵約束、unique約束、check約束、default定義、允許空值;所述字段類型信息包括字段類型、字段最大寬度,所述數(shù)據(jù)庫表及字段信息將用于步驟(13),舉例而言,掃描得到已發(fā)布數(shù)據(jù)庫應(yīng)用軟件數(shù)據(jù)庫初始化程序語句,依據(jù)數(shù)據(jù)庫表名pm_nepodef_table鎖定相關(guān)初始化程序語句為:依據(jù)語法規(guī)則,抽取約束信息和字段類型信息,最終結(jié)果如下表1展示:表1步驟(13):檢測步驟(11)得到的變更語句前是否存在正確的判斷,檢測步驟(11)得到的變更語句是否違反步驟(12)得到的數(shù)據(jù)庫初始化語句,具體而言,所述判斷語句可以是任意結(jié)構(gòu)化查詢語言中判斷語句,該語句結(jié)果為真或者假,用于控制后續(xù)一段語句的執(zhí)行與否,如圖6所示,步驟(13)的流程示意圖,包括兩個步驟:步驟1301:在步驟(11)所得數(shù)據(jù)庫升級程序語句集合中對應(yīng)數(shù)據(jù)庫變更語句前搜索是否存在判斷語句,判斷語句目的在于檢查該變更語句的執(zhí)行是否違反步驟(12)得到的對應(yīng)數(shù)據(jù)庫表及字段約束信息,如果存在,則進一步檢測是否有效于該變更語句,也就是說判斷其是否違反步驟(12)得到的表的約束信息;步驟1302:在步驟(11)所得數(shù)據(jù)庫變更語句中檢測其中涉及的字段值是否與步驟(12)得到的字段類型以及字段最大寬度相匹配,舉例而言,示例insertintotable(columns)values(columnvalues)變更語句錯誤檢測,首先,在待測數(shù)據(jù)庫應(yīng)用軟件升級程序集合中的變更語句insertintopm_nepodef_table(mocid,netypeid,poid,poname,podes,potablename)values('an_port','zxdsl9852v','50009','igmp端口統(tǒng)計','igmp端口統(tǒng)計','zxdsl9852v_50009')前搜索是否存在判斷語句,例如如果存在如下語句:ifexists(select*frompm_nepodef_tablewherenetypeid='zxdsl9852v'andmocid='an_port'andpoid='50009'andpotablename='zxdsl9852v_50009')則進一步檢測對應(yīng)字段是否包含主鍵約束,netypeid,mocid,poid,potablename,并且對應(yīng)字段值是否與變更語句中字段值類型一致或者前者包含后者的范圍。在所述步驟中,還需要檢測變更語句中所有涉及的字段,(mocid,netypeid,poid,poname,podes,potablename)對應(yīng)的取值'an_port','zxdsl9852v','50009','igmp端口統(tǒng)計','igmp端口統(tǒng)計','zxdsl9852v_50009'在類型、在字段寬度上是否與表pm_nepodef_table的字段類型信息相匹配。綜上所述,本發(fā)明的基于動態(tài)規(guī)劃算法的數(shù)據(jù)庫軟件升級檢測方法,解決了數(shù)據(jù)庫的軟件升級測試效率低,成本高的問題,提高了數(shù)據(jù)庫的軟件升級測試效率,降低了測試成本,實現(xiàn)快速地、不需要動態(tài)安裝搭建測試環(huán)境,可提前發(fā)現(xiàn)數(shù)據(jù)庫應(yīng)用軟件升級程序錯誤的靜態(tài)測試方法,在一定程度上降低了由于升級路徑爆炸式增長導(dǎo)致的高成本測試投入的風(fēng)險,提高了路徑和程序錯誤搜索效率,為盡早發(fā)現(xiàn)程序錯誤,盡早將升級軟件版本推向市場提供了保障,具有良好的應(yīng)用前景。以上顯示和描述了本發(fā)明的基本原理、主要特征及優(yōu)點。本行業(yè)的技術(shù)人員應(yīng)該了解,本發(fā)明不受上述實施例的限制,上述實施例和說明書中描述的只是說明本發(fā)明的原理,在不脫離本發(fā)明精神和范圍的前提下,本發(fā)明還會有各種變化和改進,這些變化和改進都落入要求保護的本發(fā)明范圍內(nèi)。本發(fā)明要求保護范圍由所附的權(quán)利要求書及其等效物界定。通過以上的實施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到根據(jù)上述實施例的方法可根據(jù)具體情況,選擇設(shè)計合適的動態(tài)規(guī)劃算法,不限于某種特定的優(yōu)化算法,并借助軟件加必需的通用硬件平臺的方式來實現(xiàn),當然也可以通過硬件,但很多情況下前者是更佳的實施方式?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì)(如rom/ram、磁碟、光盤)中,包括若干指令用以使得一臺終端設(shè)備(可以是手機,計算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所述的方法。本發(fā)明的實施例還提供了一種存儲介質(zhì)??蛇x地,在本實施例中,上述存儲介質(zhì)可以被設(shè)置為存儲用于執(zhí)行上述實施例方法步驟的程序代碼:在本實施例中,上述存儲介質(zhì)可以包括但不限于:u盤、只讀存儲器(rom,read-onlymemory)、隨機存取存儲器(ram,randomaccessmemory)、移動硬盤、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。在本實施例中,處理器根據(jù)存儲介質(zhì)中已存儲的程序代碼執(zhí)行上述實施例的方法步驟。當前第1頁12當前第1頁12