牛傳明
(六安職業(yè)技術(shù)學院,安徽 六安 237000)
D計算機軟件開發(fā)是一項較為復雜且系統(tǒng)的工作,數(shù)據(jù)庫測試是計算機軟件開發(fā)中的重要環(huán)節(jié)之一,即依據(jù)相關規(guī)范,對計算機軟件系統(tǒng)的數(shù)據(jù)庫結(jié)構(gòu)、數(shù)據(jù)庫表以及數(shù)據(jù)調(diào)用關系進行測試[1]。所有的軟件基本上都需要數(shù)據(jù)庫作為支撐,如果計算機軟件脫離數(shù)據(jù)庫,那么其功能則無法實現(xiàn)。因此,在計算機軟件開發(fā)中,必須對數(shù)據(jù)庫進行測試。
1.1.1 軟件開發(fā)
軟件開發(fā)是指按照用戶的實際需求,對軟件系統(tǒng)進行建立的過程,是一項包含需求分析、功能設計與實現(xiàn)以及測試的系統(tǒng)工程。程序設計語言是軟件實現(xiàn)的關鍵,通常情況下,開發(fā)人員會使用相關的軟件開發(fā)工具對計算機軟件進行開發(fā)??蓪④浖毞譃橛嬎銠C系統(tǒng)軟件和應用軟件兩大類,而能夠在計算機中運行的程序均可稱之為軟件,與程序相關的文件,則是軟件的組成部分。
1.1.2 數(shù)據(jù)庫
數(shù)據(jù)庫是一種存放在計算機系統(tǒng)的存儲器當中,根據(jù)一定的格式編成的關聯(lián)數(shù)據(jù)的集合。簡而言之,數(shù)據(jù)庫是存儲電子文件的處所。用戶通過數(shù)據(jù)庫能夠?qū)ξ募械臄?shù)據(jù)進行查詢、增減及刪除。
1.1.3 數(shù)據(jù)庫測試
所謂數(shù)據(jù)庫測試,具體是指按照數(shù)據(jù)庫設計規(guī)范,對軟件系統(tǒng)的數(shù)據(jù)庫結(jié)構(gòu)、數(shù)據(jù)表及其之間的數(shù)據(jù)調(diào)用關系進行測試的過程。任何軟件應用程序都離不開數(shù)據(jù)庫的支撐,可以說數(shù)據(jù)庫是計算機軟件的核心,為數(shù)據(jù)庫提供滿足軟件的應用需求。在軟件開發(fā)時,需要對數(shù)據(jù)庫進行測試。
這是數(shù)據(jù)庫測試中較為重要的一項工作。按照階段的不同,分析的內(nèi)容也有所差別。在初始階段,需要對整個數(shù)據(jù)庫的實質(zhì)性需要進行全面分析,即用戶對數(shù)據(jù)信息的需求,具體的分析過程可以通過數(shù)據(jù)庫邏輯模型進行直觀呈現(xiàn)。進入第二階段,則需要對業(yè)務的開發(fā)需求進行分析,在該階段的測試主要是實體測試,包括視圖測試、表結(jié)構(gòu)測試、存儲測試等等。數(shù)據(jù)庫測試是一項看似簡單、實則復雜的工作,些許的疏忽大意,都可能對測試結(jié)果造成影響。因此,要求測試人員應當有較高的專業(yè)技術(shù)水平和豐富的經(jīng)驗,能夠細致地完成每一項測試任務。
數(shù)據(jù)庫測試對于計算機軟件開發(fā)而言,是一項非常重要的工作。通過對數(shù)據(jù)庫實體進行測試,能夠及時發(fā)現(xiàn)開發(fā)的軟件的各種功能是否合理,以及這些功能在各種環(huán)境中的運行是否穩(wěn)定、可靠,這對于軟件的使用具有一定的影響。不僅如此,實體測試可以有效解決數(shù)據(jù)冗余問題,對軟件的優(yōu)化至關重要。當數(shù)據(jù)庫測試完成后,測試人員可針對發(fā)現(xiàn)的問題及漏洞提出相應的處理建議,以便彌補軟件數(shù)據(jù)庫的缺陷和不足。
1.4.1 創(chuàng)建查詢
創(chuàng)建查詢是數(shù)據(jù)庫測試的第一步,主要目的是測試數(shù)據(jù)庫的正確性和準確性[2]。要求測試人員應當對相關的數(shù)據(jù)庫語言加以熟練掌握,如SQL、DML等,同時還要對數(shù)據(jù)庫的結(jié)構(gòu)有一個大體的了解,隨后便可開始對數(shù)據(jù)庫進行測試。
1.4.2 數(shù)據(jù)表查詢
在進行測試過程中,測試人員可以通過對數(shù)據(jù)表的查詢,來驗證程序GUI的操作結(jié)果,當數(shù)據(jù)庫的容量較大且其中存儲的數(shù)據(jù)較多時,會使數(shù)據(jù)表的查詢量隨之增大,此時可以使用相應的工具來完成查詢。
對于計算機軟件開發(fā)而言,數(shù)據(jù)庫的測試尤為重要,直接關系到軟件功能的發(fā)揮。因此,必須對數(shù)據(jù)庫的測試予以高度重視,并在測試中,結(jié)合具體的測試內(nèi)容,采取合理可行的方法和技術(shù),提高測試效率,確保測試結(jié)果的準確性。
在開發(fā)計算機應用軟件的過程中,當數(shù)據(jù)庫構(gòu)建完畢之后,測試人員應當對數(shù)據(jù)庫進行壓力測試。任何一款應用軟件要想發(fā)揮出自身所具備的各種功能,都必須保證軟件本身的正確性,這也是評價軟件開發(fā)質(zhì)量的關鍵指標之一。而對數(shù)據(jù)庫進行壓力測試的主要目的在于評測軟件的響應速度。軟件的響應速度越快,表明其質(zhì)量越高[3]。計算機軟件開發(fā)時,軟件的響應速度會受到諸多方面因素的影響,比較常見的因素(見圖1)。
圖1 影響計算機軟件響應速度的關鍵因素
通過對數(shù)據(jù)庫進行壓力測試,能夠?qū)﹂_發(fā)出來的軟件程序的實際響應速度進行判定,從而為軟件質(zhì)量評價提供依據(jù)[4]。如果在某一段時間當中,突然出現(xiàn)大量用戶并發(fā)訪問,那么很可能對軟件功能造成影響,為了避免這種情況影響軟件的正常使用,則應在軟件開發(fā)時,對數(shù)據(jù)庫進行壓力測試。如購物網(wǎng)站的流量壓力測試,很多購物網(wǎng)站經(jīng)常都會搞一些力度非常大的促銷活動,在活動開始的這段時間內(nèi),登錄和瀏覽購物網(wǎng)站的用戶數(shù)量會激增,所以在系統(tǒng)軟件開發(fā)時,必須對數(shù)據(jù)庫進行壓力測試,從而了解在大量數(shù)據(jù)占用數(shù)據(jù)庫空間時,軟件能否保持穩(wěn)定運行。對數(shù)據(jù)庫進行壓力測試,能夠幫助用戶分析軟件所能承受的最大壓力,從而使用戶可以按照系統(tǒng)的實際情況,對業(yè)務接口及開放時間進行調(diào)整。
目前,可用于數(shù)據(jù)庫壓力測試的技術(shù)方法相對較多,比較常用的有Web測試、數(shù)據(jù)庫自動測試工具等。在對數(shù)據(jù)庫進行壓力測試后,若是無法滿足實際的使用需求時,則需要對數(shù)據(jù)庫的反應時間進行優(yōu)化,具體的優(yōu)化過程中,可以應用的工具包括:JMeter、.NET等。不同的優(yōu)化工具適用于不同的項目,比如在基于Java的項目中,可以使用JMeter對數(shù)據(jù)庫的反應時間進行優(yōu)化調(diào)整,而.NET則可為相關的集成開發(fā)環(huán)境提供有效的測試方法。為進一步提升數(shù)據(jù)庫的壓力測試及優(yōu)化效果,測試人員應當對各種測試工具的適用條件加以了解和掌握,并在不同的開發(fā)系統(tǒng)中進行合理選用。
對于計算機軟件而言,數(shù)據(jù)庫的主要作用是對各類數(shù)據(jù)信息進行存儲和管理,數(shù)據(jù)庫的容量越大,能夠存儲的數(shù)據(jù)資源就越多,管理效率也就越高[5]。所以在軟件開發(fā)的過程中,需要對數(shù)據(jù)庫的容量進行測試,從而判斷數(shù)據(jù)庫是否能夠滿足軟件的使用需求。在對數(shù)據(jù)庫的容量進行實際測試時,記錄的數(shù)據(jù)量為每個字段占用的字節(jié)數(shù)總和,而數(shù)據(jù)表的數(shù)據(jù)量則是記錄數(shù)據(jù)量與記錄數(shù)的乘積,各個數(shù)據(jù)表中數(shù)據(jù)量的總和就是數(shù)據(jù)庫的實際容量。在計算機軟件開發(fā)過程中,數(shù)據(jù)庫作為整個軟件功能得以實現(xiàn)的前提和基礎,其容量大小至關重要,而數(shù)據(jù)庫的容量除了與數(shù)據(jù)表的大小有關之外,計算機軟件系統(tǒng)還有很多會占用數(shù)據(jù)庫的容量,比如各類視圖、數(shù)據(jù)信息的存儲過程以及系統(tǒng)表等等,上述實體全部都會占用一定的數(shù)據(jù)庫容量。在數(shù)據(jù)庫中,表內(nèi)的數(shù)據(jù)是基本數(shù)據(jù),通常情況下,系統(tǒng)日志文件的容量約為預留文件容量的2倍左右。數(shù)據(jù)庫容量測試常用的工具為DataFactory,這是一種能夠快速生成測試數(shù)據(jù)且?guī)в兄庇X用戶界面的測試工具,通過該測試功能,可以在較短的時間內(nèi)構(gòu)建起復雜的數(shù)據(jù)關系[6]。從本質(zhì)的角度上講,DataFactory是數(shù)據(jù)產(chǎn)生器,軟件開發(fā)人員可利用該工具產(chǎn)生正確的測試數(shù)據(jù)庫,該工具支持多種類型的數(shù)據(jù)庫,如Oracle數(shù)據(jù)庫、SQL Server數(shù)據(jù)庫等等,不僅如此,還支持ODBC連接,可將之作為數(shù)據(jù)庫容量測的首選工具。
在計算機軟件開發(fā)中,當數(shù)據(jù)庫的實體測試完成之后,還要對數(shù)據(jù)表的一致性進行測試,以此來確保數(shù)據(jù)庫中所有數(shù)據(jù)信息的一致性。對數(shù)據(jù)的一致性進行具體測試的過程中,也將有重點地進行測試。
2.3.1 表的主鍵
在數(shù)據(jù)庫的表中,有一個列或列的組合,它的值能夠唯一標識表中的每一行,這就是表的主鍵,其主要作用是強制表的實體完整性。通常情況下,一個表只能有一個primary key約束,并且約束中的每列不能接受空值。表的主鍵除了可以加快數(shù)據(jù)庫的操作速度之外,還能使數(shù)據(jù)庫自動完成新添加數(shù)據(jù)主鍵值的檢查。所以在對表的一致性進行測試時,應當先對表的主鍵進行測試。在實際測試中,測試人員應當了解計算機軟件的開發(fā)需求,并以此為依據(jù),對表的主鍵進行測試。由于每個表的主鍵均有與之對應的數(shù)據(jù)記錄要求,只有主鍵完全一致,才能使數(shù)據(jù)庫滿足軟件的使用需要。若是表的主鍵測試結(jié)果顯示出不是唯一的記錄,則說明表的主鍵存在不一致的情況,此時必須對表的主鍵進行重設。
2.3.2 表間主外鍵關系
在數(shù)據(jù)庫中,外鍵又被稱之為外關鍵字,是一致性測試的重點環(huán)節(jié)之一,具體包括的測試內(nèi)容為字段長度、字段類型、字段信息等,通過測試保證主外鍵關鍵字段的長度與數(shù)據(jù)表的一致性要求相符,若是存在不符的情況,則應當對主外鍵進行重新設置。在此需要著重闡明的一點是大部分計算機軟件在開發(fā)時,常常會忽略主外鍵的測試,這樣容易影響測試結(jié)果的準確性,可能會引起某些字段出現(xiàn)偏差的情況,從而對軟件的功能造成影響。所以在數(shù)據(jù)庫測試中,應當對表間主外鍵關系的測試予以重視,采取相應的方法確保測試結(jié)果的準確性。
為在計算機軟件開發(fā)過程中,對數(shù)據(jù)庫的整體性能進行評測,設計一款具有分布式特點和實時監(jiān)控功能的測試程序。同時,要求設計的測試程序能夠?qū)?shù)據(jù)庫的正確執(zhí)行能力進行測試,主要包括數(shù)據(jù)庫的原子性、一致性、隔離性和持久性。結(jié)合聯(lián)機事務處理過程,對數(shù)據(jù)庫測試程序的基本結(jié)構(gòu)進行設計(見圖2)。
圖2 數(shù)據(jù)庫測試程序框架結(jié)構(gòu)示意圖
本次設計的測試程序中,控制器可對圖形界面進行測試管理,整個測試器由兩個模塊組合而成,即性能測試模塊和數(shù)據(jù)庫執(zhí)行能力驗證模塊;負載發(fā)生器采用的是多個PC系統(tǒng),以分布式的方法進行部署,這樣能夠使測試程序的設計成本大幅度降低[7]。該測試程序能夠?qū)Ω鞣N類型的數(shù)據(jù)庫進行測試,具有良好的通用性。此外,為使各個模塊之間的通信順暢,選用TCP協(xié)議。
在提出的數(shù)據(jù)庫性能測試程序中,具體評測功能模塊的設計情況(見圖3)。在測試模塊中,測試管理、系統(tǒng)監(jiān)控、測試報告、截圖均為監(jiān)控器的功能。當測試人員啟動測試程序后,可以通過測試管理功能,對實際的測試場景進行構(gòu)建,據(jù)此發(fā)起數(shù)據(jù)庫的性能測試[8]。
圖3 測試模塊功能示意圖
在具體測試的過程中,測試程序能夠?qū)?shù)據(jù)庫的整體性能及負載曲線進行實時監(jiān)控。測試程序中的負載發(fā)生器由以下模塊組成:日志管理模塊、負載管理模塊和通信管理模塊,不同的模塊具有不同的功能,如日志管理能夠?qū)y試日志的輸出程序進行控制,以此來平衡模塊的性能[9]。通過對事務請求及相關運行參數(shù)的調(diào)用,可對測試結(jié)果進行統(tǒng)計,包括響應時間等內(nèi)容。訪問控制模塊在被測目標的系統(tǒng)端運行,因不同的數(shù)據(jù)庫具有不同的功能,為實現(xiàn)測試程序最大化兼容的目標,在設計時,采用C++語言對每個事務進行實現(xiàn),從而滿足不同類型數(shù)據(jù)庫的性能測試需要。
為滿足數(shù)據(jù)庫性能評測的要求,根據(jù)數(shù)據(jù)庫測試目標,在測試程序設計中,確定了幾個測試指標。
3.3.1 并發(fā)數(shù)
這是數(shù)據(jù)庫性能測試中較為重要的一個指標,即數(shù)據(jù)庫能夠支持的最大并發(fā)用戶連接數(shù),該指標可用于數(shù)據(jù)庫并行連接能力的評測。
3.3.2 響應時間
該指標是請求從發(fā)出到接收結(jié)果的時間,包括負載發(fā)生器與測試目標之間的通信時間。通過該指標可對數(shù)據(jù)庫的處理速度進行評測。
3.3.3 資源利用率
這個測試指標能夠?qū)?shù)據(jù)庫的空載和滿載運行時的資源使用情況進行統(tǒng)計,由此可對數(shù)據(jù)庫的運行情況進行評價。
3.3.4 驗證失敗數(shù)
這是一個具有功能性的測試指標,當數(shù)據(jù)庫測試中出現(xiàn)驗證失敗的情況后,測試程序會認定數(shù)據(jù)庫不滿足原子性、一致性、隔離性和持久性的要求。
3.3.5 恢復時間
數(shù)據(jù)庫在使用過程中不可避免地會出現(xiàn)問題。當問題發(fā)生后,恢復時間的長短非常重要,該指標可對數(shù)據(jù)庫恢復時間進行測試。
3.4.1 實現(xiàn)方法
數(shù)據(jù)庫的ACID驗證包括以下四項內(nèi)容:原子性測試、一致性測試、隔離性測試以及持久性測試。規(guī)范給出數(shù)據(jù)庫ACID驗證中,每一項特性的測試,可以采用的事務與測試時執(zhí)行會話的順序。鑒于此,文章所設計的測試程序,參考規(guī)范中給出的方法,對數(shù)據(jù)庫的ACID進行驗證。其中原子性測試借助通信TradeOrder事務進行驗證;一致性測試則是通過對各個數(shù)據(jù)表中對應列的值進行比較來達到驗證的目的;而隔離性的測試是根據(jù)規(guī)范給出的順序進行驗證;持久性測試以引入故障的方法,對通信恢復時間進行測試。因規(guī)范并沒有給出的獲取相關參數(shù)的方法,所以在測試程序設計時,所有的參數(shù)均采用隨機的方式生成,這樣可以保證Egen的規(guī)律不會被破壞。
3.4.2 測試結(jié)果分析
選取數(shù)據(jù)庫中較具典型性和代表性的Oracle和MySQL作為測試對象,數(shù)據(jù)庫的配置情況如下:表Customer記錄數(shù)均為5 000,數(shù)據(jù)庫文件的大小分別為43.5 G和43.8 G。測試平臺在Linux操作系統(tǒng)下運行,對每個數(shù)據(jù)庫進行10次驗證。經(jīng)過測試得到如下結(jié)果:兩個數(shù)據(jù)庫的原子性、一致性和隔離性均未出現(xiàn)驗證失敗的情況。因持久性測試需要付出較高的代價,故此不進行恢復性測試。通過其余三項測試結(jié)果可以證明,此次設計的數(shù)據(jù)庫測試程序合理可行。
綜上所述,在計算機軟件開發(fā)中,應當對數(shù)據(jù)庫測試予以重視,采取合理可行的方法和技術(shù),對數(shù)據(jù)庫進行壓力測試、容量測試及一致性測試。同時,為提高數(shù)據(jù)庫性能的測試效率,并確保測試結(jié)果的準確性,提出一種測試程序,其適用于絕大多數(shù)類型的數(shù)據(jù)庫,可使測試結(jié)果重現(xiàn),具有良好的推廣使用價值。