本發明涉及軟件測試
技術領域:
:,具體涉及一種基于動態規劃算法的數據庫軟件升級檢測系統及方法。
背景技術:
::一般情況下,計算機軟件在設計最初,由于設計人員考慮不全面或程序功能不完善,在運行過程中,會不斷出現新的問題。有些是代碼漏洞引起的故障,有些是軟硬件之間新出現的兼容性問題,也有些是用戶在使用過程中提出的新需求。這些問題一般通過軟件升級到更新的版本來解決,還能夠提高性能,完善功能,增強軟件的競爭力。因此,軟件升級在后期維護中愈加重要,不可或缺。軟件研發發布的一系列版本,一般要求比較高的版本支持從低版本的升級,這就是軟件升級。例如某個軟件發布了version1.0、version2.0兩大版本;針對version1.0又分別發布了若干補丁版本,例如version1.0servicepack1、version1.0servicepack2等;針對version2.0發布若干補丁版本。以大版本升級為例(暫不考慮補丁版本),該軟件新開發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版本是會存在差異的,雖然對客戶來說這種差異往往是感覺不明顯的,但是在數據庫結構與數據上往往會存在差異。可以看出,隨著發布版本的增加,版本升級測試路徑將越來越多。假設已經發布了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定義、允許空值;所述字段類型信息,至少包括以下之一:字段類型、字段最大寬度。一種基于動態規劃算法的數據庫軟件升級檢測方法,其特征在于:包括以下步驟,步驟(a),根據有向圖設計動態規劃算法,獲取數據庫軟件升級的最短路徑和關鍵路徑,優先對最短路徑和關鍵路徑進行靜態測試,最短路徑和關鍵路徑分別是有向圖路徑上各邊權值和的最小和最大的路徑;步驟(b),獲取待測試軟件數據庫的升級程序語句,截取該升級程序語句中的變更語句,所述變更語句為已發布軟件數據庫的實例轉變為該待測試軟件數據庫的實例的語句;步驟(c),獲取已發布軟件數據庫的初始化語句,并從該初始化語句中抽取與該變更語句中數據庫表名對應的數據庫表以及字段信息,所述數據庫表以及字段信息,包括約束信息和字段類型信息;步驟(d),檢測所述變更語句的執行是否違反數據庫表以及字段信息內的約束信息后,繼續檢測所述變更語句是否匹配數據庫表以及字段信息內的字段類型信息。前述的基于動態規劃算法的數據庫軟件升級檢測方法,其特征在于:步驟(b),還包括掃描所述升級程序語句是否存在判斷語句;若存在的所述判斷語句,則檢測所述變更語句的執行是否違反所述約束信息。前述的基于動態規劃算法的數據庫軟件升級檢測方法,其特征在于:步驟(c),所述已發布軟件數據庫的已發布軟件包括所述待測試軟件數據庫中待測軟件支持的所有源版本軟件,且已發布軟件和所述待測軟件所用軟件的版本號唯一確定。前述的基于動態規劃算法的數據庫軟件升級檢測方法,其特征在于:所述已發布軟件數據庫的初始化語句為待測試軟件數據庫需要執行的數據庫語句。前述的基于動態規劃算法的數據庫軟件升級檢測方法,其特征在于:所述變更語句,至少包括以下之一:插入insert語句、刪除delete語句、更新update語句、創建create語句、刪除表drop語句、修改alter語句;所述約束信息,至少包括以下之一:主鍵約束、外鍵約束、唯一unique約束、檢查check約束、缺省default定義、允許空值;所述字段類型信息,至少包括以下之一:字段類型、字段最大寬度。本發明的有益效果是:本發明的基于動態規劃算法的數據庫軟件升級檢測系統及方法,解決了數據庫的軟件升級測試效率低,成本高的問題,提高了數據庫的軟件升級測試效率,降低了測試成本,實現快速地、不需要動態安裝搭建測試環境,可提前發現數據庫應用軟件升級程序錯誤的靜態測試方法,在一定程度上降低了由于升級路徑爆炸式增長導致的高成本測試投入的風險,提高了路徑和程序錯誤搜索效率,為盡早發現程序錯誤,盡早將升級軟件版本推向市場提供了保障,具有良好的應用前景。附圖說明圖1是本發明的基于動態規劃算法的數據庫軟件升級檢測系統的系統框圖;圖2是本發明的基于動態規劃算法的數據庫軟件升級檢測方法的流程圖;圖3是本發明的第三實施例數據庫軟件升級檢測方法的流程圖;圖4是本發明的第三實施例數據庫軟件升級檢測方法的掃描待測試軟件數據庫升級程序的流程圖;圖5是本發明的第三實施例數據庫軟件升級檢測方法的掃描已發布軟件數據庫初始化程序的流程圖;圖6是本發明的第三實施例數據庫軟件升級檢測方法的變更語句錯誤檢測的流程圖。具體實施方式下面將結合說明書附圖,對本發明作進一步的說明。如圖1所示,本發明的基于動態規劃算法的數據庫軟件升級檢測系統,包括依次連接的設計模塊1、第一獲取模塊2、第二獲取模塊3和第一檢測模塊4,所述設計模塊1,用于根據有向圖設計動態規劃算法,選取數據庫軟件升級的最短路徑和關鍵路徑,優先對最短路徑和關鍵路徑進行靜態測試,最短路徑和關鍵路徑分別是有向圖路徑上各邊權值和的最小值和最大值;所述第一獲取模塊2,用于獲取待測試軟件數據庫的升級程序語句,截取所述升級程序語句中的變更語句,所述變更語句為已發布軟件數據庫的實例轉變為所述待測試軟件數據庫的實例的語句;所述第二獲取模塊3,用于獲取已發布軟件數據庫的初始化語句,并從所述初始化語句中抽取與所述變更語句中數據庫表名相對應的數據庫表以及字段信息,所述數據庫表以及字段信息包括約束信息和字段類型信息;第一檢測模塊4,用于在檢測所述變更語句的執行是否違反所述數據庫表以及字段信息內的約束信息,以及檢測所述變更語句是否匹配所述數據庫表以及字段信息內的字段類型信息。優選的本發明的基于動態規劃算法的數據庫軟件升級檢測系統,還包括判斷模塊5和第二檢測模塊6,所述判斷模塊5分別與第一獲取模塊2、第一檢測模塊4相連接,用于掃描所述升級程序語句是否存在判斷語句;所述第二檢測模塊6與判斷模塊5相連接,用于若存在的所述判斷語句,則檢測對應的變更語句的執行是否違反所述約束信息。優選的所述已發布軟件數據庫的已發布軟件包括所述待測試軟件數據庫中待測軟件支持的所有源版本軟件,且已發布軟件和所述待測軟件所用軟件的版本號唯一確定。優選的所述已發布軟件數據庫的初始化語句為待測試軟件數據庫需要執行的數據庫語句。優選的所述變更語句,至少包括以下之一:插入insert語句、刪除delete語句、更新update語句、創建create語句、刪除表drop語句、修改alter語句;所述約束信息,至少包括以下之一:主鍵約束、外鍵約束、唯一unique約束、檢查check約束、缺省default定義、允許空值;所述字段類型信息,至少包括以下之一:字段類型、字段最大寬度。本發明的基于動態規劃算法的數據庫軟件升級檢測模塊,解決了數據庫的軟件升級搜索速度慢,測試效率低,成本高的問題,提高了數據庫的軟件升級路徑搜索速度及測試效率,降低了測試成本。根據上述的基于動態規劃算法的數據庫軟件升級檢測模塊的數據庫軟件升級檢測方法,如圖2所示,包括以下步驟,步驟(a),根據有向圖設計動態規劃算法,獲取數據庫軟件升級的最短路徑和關鍵路徑,優先對最短路徑和關鍵路徑進行靜態測試,最短路徑和關鍵路徑分別是有向圖路徑上各邊權值和的最小和最大的路徑;步驟(b),獲取待測試軟件數據庫的升級程序語句,截取該升級程序語句中的變更語句,所述變更語句為已發布軟件數據庫的實例轉變為該待測試軟件數據庫的實例的語句,本步驟還還包括掃描所述升級程序語句是否存在判斷語句;若存在的所述判斷語句,則檢測所述變更語句的執行是否違反所述約束信息;步驟(c),獲取已發布軟件數據庫的初始化語句,并從該初始化語句中抽取與該變更語句中數據庫表名對應的數據庫表以及字段信息,所述數據庫表以及字段信息,包括約束信息和字段類型信息,所述已發布軟件數據庫的已發布軟件包括所述待測試軟件數據庫中待測軟件支持的所有源版本軟件,且已發布軟件和所述待測軟件所用軟件的版本號唯一確定;所述已發布軟件數據庫的初始化語句為待測試軟件數據庫需要執行的數據庫語句;步驟(d),檢測所述變更語句的執行是否違反數據庫表以及字段信息內的約束信息后,繼續檢測所述變更語句是否匹配數據庫表以及字段信息內的字段類型信息。所述變更語句,至少包括以下之一:插入insert語句、刪除delete語句、更新update語句、創建create語句、刪除表drop語句、修改alter語句;所述約束信息,至少包括以下之一:主鍵約束、外鍵約束、唯一unique約束、檢查check約束、缺省default定義、允許空值;所述字段類型信息,至少包括以下之一:字段類型、字段最大寬度。本發明的基于動態規劃算法的數據庫軟件升級檢測方法,實現快速地、不需要動態安裝搭建測試環境,可提前發現數據庫應用軟件升級程序錯誤的靜態測試方法,在一定程度上降低了由于升級路徑爆炸式增長導致的高成本測試投入的風險,提高了路徑和程序錯誤搜索效率,為盡早發現程序錯誤,盡早將升級軟件版本推向市場提供了保障。下面根據本發明的基于動態規劃算法的數據庫軟件升級檢測系統及方法,介紹第一實施例的數據庫軟件升級檢測方法,包括以下步驟,步驟(1),獲取最短路徑和關鍵路徑的動態規劃算法,優先選用最短路徑和關鍵路徑進行靜態測試;步驟(2),獲取待測試軟件數據庫升級程序語句,在所述變更語句中獲取到數據庫表名;步驟(3),獲取已發布軟件數據庫初始化語句,獲取步驟2)得到的數據庫表名對應表以及字段信息;步驟(4),檢測步驟(2)得到的變更語句前是否存在判斷語句,判斷語句目的在于檢查該變更語句的執行是否違反步驟(3)得到的對應數據庫表及字段約束信息;繼續檢測步驟(3)得到的變更語句是否違反步驟(3)得到的對應數據庫表各字段類型信息。上述的數據庫軟件升級檢測方法,所述步驟(1)關于最短路徑和關鍵路徑分別是有向圖路徑上各邊權值和的最小和最大的路徑;所述步驟(2)關于數據庫變更語句是將數據庫實例從一種狀態轉變為另一種實例狀態的語句,也就是將已發布軟件數據庫實例轉變為新的待測試軟件數據庫實例的語句,變更語句是數據庫升級程序語句的核心內容;所述步驟(2)數據庫升級程序語句信息將用于步驟(4)的檢測過程。上述的數據庫軟件升級檢測方法,所述步驟(3)關于已發布軟件可以是待測試軟件需要支持升級的所有源版本軟件,使用軟件版本號唯一確定;所述步驟(3)關于數據庫初始化語句是全新安裝數據庫應用軟件需要執行的數據庫語句;所述步驟(3)數據庫表及字段信息將用于步驟(4)的檢測過程。上述數據庫軟件升級檢測方法,所述步驟(4)關于判斷語句是一種選擇性判斷,也就是說如果判斷語句結果為真,則執行其后的數據庫變更語句;如果判斷語句結果為假,則不執行其后的數據庫變更語句。以確保數據庫變更語句的正確執行。如圖3所示,本發明優選的第二實施例,包括三個步驟,步驟(11):針對輸入的待測試數據庫應用軟件版本,獲取其數據庫升級程序變更語句,具體而言,所述數據庫程序語言可以為任意一種結構化查詢語言(sql),數據庫可以為所有關系型數據庫。所述數據庫升級程序變更語句包括insert、delete、update、create、drop、alter語句。不需要安裝待測試數據庫應用軟件,只需要提供待測試數據庫應用軟件文件;如圖4所示,上述步驟(11)的流程示意圖,包括四個步驟:步驟1101:針對輸入的待測試數據庫應用軟件版本,掃描其升級程序,所述升級程序就是該軟件用于升級已發布軟件版本時需要執行的程序集合;步驟1102:在升級程序中獲取數據庫升級程序語句,數據庫升級程序語句在步驟(13)中將再次使用;步驟1103:獲取數據庫升級程序變更語句;步驟1104:在數據庫升級程序變更語句中截取數據庫表名,所述截取過程依據結構化查詢語言語法規則。舉例而言,若掃描升級程序后得到的數據庫升級語句集合中,存在一條變更語句,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,并將包含該變更語句在內的所有數據庫升級程序語句集合儲存備用;步驟(12):針對輸入的已發布數據庫應用軟件,獲取數據庫初始化語句,具體而言,所述已發布數據庫應用軟件可以為任意一個已經發布過的需要待測試應用軟件支持升級的源版本,所述數據庫初始化程序語句為全新安裝該版本應用軟件過程中初始執行的數據庫程序語句,不需要安裝已發布數據庫應用軟件,只需要提供已發布數據庫應用軟件文件,依據版本號來定位版本,如圖5所示,步驟(12)的流程示意圖,包括三個步驟:步驟1201:針對輸入的已發布數據庫應用軟件,掃描其安裝程序。所述安裝程序就是該軟件用于初始安裝時需要執行的程序集合;步驟1202:在安裝程序中依據步驟1得到的數據庫表名定向搜索獲取表的初始化程序;步驟1203:抽取數據庫表及字段信息,包括約束信息和字段類型信息。所述約束信息包括主鍵約束、外鍵約束、unique約束、check約束、default定義、允許空值;所述字段類型信息包括字段類型、字段最大寬度,所述數據庫表及字段信息將用于步驟(13),舉例而言,掃描得到已發布數據庫應用軟件數據庫初始化程序語句,依據數據庫表名pm_nepodef_table鎖定相關初始化程序語句為:依據語法規則,抽取約束信息和字段類型信息,最終結果如下表1展示:表1步驟(13):檢測步驟(11)得到的變更語句前是否存在正確的判斷,檢測步驟(11)得到的變更語句是否違反步驟(12)得到的數據庫初始化語句,具體而言,所述判斷語句可以是任意結構化查詢語言中判斷語句,該語句結果為真或者假,用于控制后續一段語句的執行與否,如圖6所示,步驟(13)的流程示意圖,包括兩個步驟:步驟1301:在步驟(11)所得數據庫升級程序語句集合中對應數據庫變更語句前搜索是否存在判斷語句,判斷語句目的在于檢查該變更語句的執行是否違反步驟(12)得到的對應數據庫表及字段約束信息,如果存在,則進一步檢測是否有效于該變更語句,也就是說判斷其是否違反步驟(12)得到的表的約束信息;步驟1302:在步驟(11)所得數據庫變更語句中檢測其中涉及的字段值是否與步驟(12)得到的字段類型以及字段最大寬度相匹配,舉例而言,示例insertintotable(columns)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頁12當前第1頁12