河南許繼儀表有限公司 郭改霞 張斌斌
數(shù)據(jù)庫開發(fā)不同階段測試技術(shù)研究
河南許繼儀表有限公司 郭改霞 張斌斌
隨著現(xiàn)代計算機科技的飛速發(fā)展和社會信息化程度的不斷提高,數(shù)據(jù)庫已逐步成為計算機信息系統(tǒng)和計算機應用系統(tǒng)的基礎(chǔ)和核心,而數(shù)據(jù)庫系統(tǒng)測試的重要性也越來越引起人們的關(guān)注,本文就數(shù)據(jù)庫的測試技術(shù)進行初步的探討,希望對數(shù)據(jù)系統(tǒng)的測試起到拋磚引玉的作用。
數(shù)據(jù)庫系統(tǒng)的生命周期可以分成設計、開發(fā)和成品三個階段。越早進行數(shù)據(jù)庫性能優(yōu)化成本就越低,收益也越大,反之越晚進行數(shù)據(jù)庫性能優(yōu)化成本就越高,收益也越小。因此,數(shù)據(jù)庫系統(tǒng)問題發(fā)現(xiàn)的越早,為修改缺陷所付出的代價就越小。根據(jù)數(shù)據(jù)庫系統(tǒng)的生命周期,數(shù)據(jù)庫系統(tǒng)測試可分成三個層次來進行:集成測試、數(shù)據(jù)驗證和系統(tǒng)測試。集成測試也可以說是數(shù)據(jù)庫結(jié)構(gòu)測試,對數(shù)據(jù)庫邏輯結(jié)構(gòu)和物理結(jié)構(gòu)的規(guī)范性進行測試,開始于軟件開發(fā)的概要設計階段。數(shù)據(jù)驗證主要是回顧程序代碼及數(shù)據(jù)庫測試環(huán)境中的數(shù)據(jù)映射,驗證通過程序載入數(shù)據(jù)庫的數(shù)據(jù)是否與源數(shù)據(jù)相符合,并驗證數(shù)據(jù)的正確性,數(shù)據(jù)驗證測試在軟件測試的確認測試階段進行。系統(tǒng)測試是對數(shù)據(jù)庫系統(tǒng)的整體性能進行檢測,在數(shù)據(jù)驗證測試之后進行。
數(shù)據(jù)庫結(jié)構(gòu)規(guī)范性測試一般開始于軟件開發(fā)的概要設計階段,在數(shù)據(jù)庫設計完成之后進行。集成測試的第一階段是數(shù)據(jù)庫邏輯結(jié)構(gòu)測試,第二階段是物理模型的驗證。
1.邏輯結(jié)構(gòu)檢測。一個規(guī)范的數(shù)據(jù)庫設計應遵循以下原則。首先必須定義主鍵,并且在每個表的最上部。
除此之外,關(guān)系型數(shù)據(jù)庫一般遵循三個范式。參照這些原則和范式,對數(shù)據(jù)庫邏輯結(jié)構(gòu)主要進行以下檢測:數(shù)據(jù)庫表是否創(chuàng)建了主鍵,主鍵是否能保證記錄的唯一性;是否建立索引和約束、已創(chuàng)建的索引或約束是否必要、是否正確;是否創(chuàng)建表間的主外鍵關(guān)系、主外鍵關(guān)系是否能保證數(shù)據(jù)庫的完整性。
數(shù)據(jù)庫規(guī)范化測試除人工檢測外,還可以借助自動化數(shù)據(jù)庫測試工具進行測試。如ERWin和ERWinExaminer,這兩種工具是數(shù)據(jù)庫建模工具和數(shù)據(jù)庫規(guī)范性測試工具。可以利用ERWin創(chuàng)建數(shù)據(jù)庫的邏輯模型,利用ERWinExaminer工具對邏輯模型進行規(guī)范化檢測,測試人員只需要對測試結(jié)果進行分析,就能找出數(shù)據(jù)庫邏輯結(jié)構(gòu)中存在的缺陷。
2.物理結(jié)構(gòu)驗證。集成測試的第二階段是物理模型的驗證。在邏輯模型中的一些元素將包含在物理表中,有些元素可能只作為占位符存在,在物理模型創(chuàng)建時被替換掉,邏輯模型中的幾個表也可能被合并成一個物理表,因此在創(chuàng)建物理模型之前,必須建立不需要載入的數(shù)據(jù)元素清單。數(shù)據(jù)庫管理員應根據(jù)物理表的訪問方式,合理地設置數(shù)據(jù)文件的存放位置,確定索引所包含的數(shù)據(jù)元素,以改善物理表的訪問速度和效率。然后,邏輯數(shù)據(jù)模型就可以轉(zhuǎn)換成具有實際數(shù)據(jù)庫測試環(huán)境的物理模型。
集成測試的第三種元素是通過程序或其他數(shù)據(jù)裝載工具向數(shù)據(jù)庫中裝載數(shù)據(jù),在裝載數(shù)據(jù)之前,應首先設置好數(shù)據(jù)源。在數(shù)據(jù)裝載的過程中,將發(fā)現(xiàn)數(shù)據(jù)類型和尺寸方面的錯誤,這些錯誤將被記錄到日志中,在數(shù)據(jù)裝載完成或失敗之后,可以查看日志以確定問題的所在。
在數(shù)據(jù)驗證期間最重要的工作是驗證程序?qū)?shù)據(jù)的映射。因為數(shù)據(jù)庫表中對各數(shù)據(jù)元素的尺寸都進行了限制,源數(shù)據(jù)被裝載進測試數(shù)據(jù)庫中可能要經(jīng)過適當?shù)牟脺p,因此應重點驗證那些認為應該裝載到指定數(shù)據(jù)元素中的數(shù)據(jù)是否確實來源于源數(shù)據(jù)集合。
數(shù)據(jù)驗證的第二步采用計數(shù)的方式進行。進行簡單數(shù)據(jù)庫查詢時,可以在源數(shù)據(jù)集合和測試數(shù)據(jù)庫中分別進行查詢,如果兩次查詢的結(jié)果相同,則可以假定在數(shù)據(jù)載入過程中,沒有丟失數(shù)據(jù),數(shù)據(jù)裝載過程是安全的。
在多維數(shù)據(jù)庫系統(tǒng)中,多個數(shù)據(jù)庫表會有完全一樣的副本,因此需要對這些表進行比較來驗證這些表的一致性。如果副本與原表之間沒有差異,則可以默認這些表100%經(jīng)過了驗證。也可以隨機從測試環(huán)境中抽取一組數(shù)據(jù),與存儲在數(shù)據(jù)庫中的數(shù)據(jù)進行比較,如果兩種數(shù)據(jù)一致,則更能增強對數(shù)據(jù)庫程序的信心。
系統(tǒng)測試是對數(shù)據(jù)庫的系統(tǒng)性能、數(shù)據(jù)一致性、完整性、安全性等方面的綜合性測試,在軟件開發(fā)的最后階段進行。
1.數(shù)據(jù)庫系統(tǒng)性能檢測。在進行數(shù)據(jù)庫性能檢測之前,須先要檢測數(shù)據(jù)的硬件環(huán)境,如網(wǎng)絡環(huán)境、內(nèi)存、磁盤I/O及CPU。在硬件環(huán)境滿足的情況下方可進行性能檢測。性能檢測主要從以下幾個方面進行。
磁盤I/O讀寫監(jiān)視,監(jiān)控磁盤的數(shù)據(jù)塊使用情況以及被頻繁讀寫的熱點區(qū)域。通過這些信息使用者就可以較容易地平衡在磁盤上數(shù)據(jù)量的存儲分配以及磁盤的I/O分配,有效地幫助使用者作好磁盤容量規(guī)劃并在當前的磁盤設備上有效的提高數(shù)據(jù)的讀寫效率。
檢測CPU時間,找出占有CPU最多的進程及相關(guān)數(shù)據(jù)庫表。
檢測數(shù)據(jù)庫服務器的吞吐量,找出讀取數(shù)據(jù)庫業(yè)務最繁忙的時段。
檢測數(shù)據(jù)庫用戶的響應時間,找出響應時間最長的進程或用戶。
監(jiān)控超出共享內(nèi)存緩沖區(qū)的操作數(shù),按照這個基準,使用者可以對緩沖區(qū)進行額外的調(diào)整,以便更好地支持實際系統(tǒng)的運行需要,提高用戶生產(chǎn)效率。
監(jiān)測上一輪期間作業(yè)等待緩沖區(qū)的時間,幫助使用者發(fā)現(xiàn)可能存在的并發(fā)性問題。通過一段時間的監(jiān)測,使用者可以得出該實際生產(chǎn)系統(tǒng)并發(fā)訪問的需求和可用性等基準參數(shù)。
根據(jù)用戶事務或者表空間監(jiān)控事務日志。通過這項監(jiān)控,使用者可以清晰的了解到重要作業(yè)對數(shù)據(jù)庫存儲、CPU操作和內(nèi)存使用的情況,精確測算和分析現(xiàn)有資源,使之能夠更好的適應對數(shù)據(jù)庫的持續(xù)工作要求。
監(jiān)測關(guān)鍵業(yè)務數(shù)據(jù)表的表空間增長,當空間低于預定的閥值時發(fā)出警告。通過這項功能,使用者可以有效地安排關(guān)鍵業(yè)務數(shù)據(jù)的存儲,并且有效地防止因為數(shù)據(jù)空間不足而導致的關(guān)鍵業(yè)務停頓。
2.數(shù)據(jù)庫系統(tǒng)一致性、完整性測試。在集成測試階段對數(shù)據(jù)庫的一致性和完整性已經(jīng)有了一定的保證,但只是在基于數(shù)據(jù)庫靜態(tài)結(jié)構(gòu)的基礎(chǔ)上進行的,對數(shù)據(jù)庫系統(tǒng)的動態(tài)行為不能保證。數(shù)據(jù)一致性的意外破壞可能由以下原因造成的。
在事務處理過程中發(fā)生崩潰;對數(shù)據(jù)庫的并發(fā)訪問所導致的異常;在幾個計算機上分布數(shù)據(jù)所導致的異常;違反事務保證數(shù)據(jù)一致性這一假設的邏輯錯誤所導致的異常。
針對以上可能產(chǎn)生的情況,應采用如下測試策略。
在數(shù)據(jù)處理過程中,人為中止程序,查看數(shù)據(jù)一致性是否遭到破壞;模擬多用戶同時訪問數(shù)據(jù)庫系統(tǒng)的情況,查看數(shù)據(jù)一致性是否遭到破壞;如數(shù)據(jù)庫系統(tǒng)存在多個服務器,在人為制造故障系統(tǒng)又重新正常運行后,還要查看不同數(shù)據(jù)庫之間的一致性;頻繁添加/刪除/修改數(shù)據(jù),數(shù)據(jù)包括正常數(shù)據(jù)和不合理數(shù)據(jù)兩種,查看數(shù)據(jù)的一致性和完整性是否一致。
3.數(shù)據(jù)庫系統(tǒng)安全性測試。數(shù)據(jù)庫系統(tǒng)中存儲的數(shù)據(jù)需要保護,以防止未授權(quán)訪問、惡意破壞或修改以及意外引入的不一致性。為保護數(shù)據(jù)庫,必須在以下幾個層次上采取安全性措施:物理層、人際層、操作系統(tǒng)層、網(wǎng)絡層、數(shù)據(jù)庫系統(tǒng)層。針對數(shù)據(jù)庫系統(tǒng)層的進行測試的安全測試主要包括以下幾個方面:數(shù)據(jù)庫系統(tǒng)管理員用戶是否加密、密碼是否容易破解、是否限制了用戶的登錄次數(shù)等。
本文概述了數(shù)據(jù)庫系統(tǒng)不同階段的不同測試技術(shù)和方法,數(shù)據(jù)庫系統(tǒng)測試開始于軟件開發(fā)的概要設計階段,終止于軟件開發(fā)的系統(tǒng)測試階段。采用的測試技術(shù)包括手工測試和自動化工具測試,但是目前用于數(shù)據(jù)庫系統(tǒng)測試的自動化工具并不多,大多需要測試人員依靠自己的數(shù)據(jù)庫設計和管理經(jīng)驗以及對軟件業(yè)務流程的理解進行測試,測試結(jié)果也會因測試人員的水平不同而不同。