摘 要 數(shù)據(jù)庫管理系統(tǒng)經(jīng)歷了30多年的發(fā)展演變,已經(jīng)取得了輝煌的成就,發(fā)展成了一門內(nèi)容豐富的學(xué)科。我國數(shù)據(jù)庫系統(tǒng)已經(jīng)具備了普通應(yīng)用所需的基本數(shù)據(jù)庫管理功能,也具有一定的擴(kuò)展性,能夠滿足一般的應(yīng)用需求。數(shù)據(jù)庫應(yīng)用系統(tǒng)是在數(shù)據(jù)庫管理系統(tǒng)(DBMS)支持下建立的計算機(jī)應(yīng)用系統(tǒng),以數(shù)據(jù)庫為基礎(chǔ)的財務(wù)管理系統(tǒng)、人事管理系統(tǒng)、圖書管理系統(tǒng)等等為代表,其數(shù)據(jù)庫測試甚為重要。
關(guān)鍵詞 數(shù)據(jù)庫;測試;應(yīng)用系統(tǒng);完整性
中圖分類號 TP 文獻(xiàn)標(biāo)識碼 A 文章編號 1673-9671-(2012)031-0112-01
就數(shù)據(jù)庫領(lǐng)域測試而言,目前國際上的TPC組織雖然提出了性能測試標(biāo)準(zhǔn),然而由于數(shù)據(jù)庫應(yīng)用的領(lǐng)域不同、運(yùn)行的環(huán)境不同,加上數(shù)據(jù)庫管理系統(tǒng)功能、結(jié)構(gòu)日趨復(fù)雜、度量特性繁多等諸多因素,目前國際上并沒有被普遍接受的數(shù)據(jù)庫結(jié)合評測體系。
隨著市場對軟件系統(tǒng)的要求越來越高,軟件產(chǎn)品結(jié)構(gòu)也越來越復(fù)雜,從以前的單層結(jié)構(gòu)進(jìn)入了目前的雙層,三層甚至多次架構(gòu)的設(shè)計。同時,由于對數(shù)據(jù)存儲,分析,安全,性能和穩(wěn)定性的要求越來越高,數(shù)據(jù)庫也從以前一個默默無聞的后臺倉庫,逐漸成為了數(shù)據(jù)庫系統(tǒng)。同時數(shù)據(jù)庫開發(fā)設(shè)計人員和數(shù)據(jù)庫系統(tǒng)管理員成為各個公司不可或缺的重要人物。
針對于數(shù)據(jù)庫應(yīng)用系統(tǒng)的數(shù)據(jù)庫的設(shè)計與實(shí)現(xiàn),其測試內(nèi)容大致包括:數(shù)據(jù)備份與恢復(fù)測試;故障轉(zhuǎn)移和恢復(fù)測試。
從測試過程的角度來說我們也可以把數(shù)據(jù)庫測試分為:
1)系統(tǒng)測試。傳統(tǒng)軟件系統(tǒng)測試的測試重點(diǎn)是需求覆蓋,而對于我們的數(shù)據(jù)庫測試同樣也需要對需求覆蓋進(jìn)行保證。那么數(shù)據(jù)庫在初期設(shè)計中也需要對這個進(jìn)行分析,測試。例如存儲過程,視圖,觸發(fā)器,約束,規(guī)則等我們都需要進(jìn)行需求的驗(yàn)證確保這些功能設(shè)計是符合需求的。另一方面我們需要確認(rèn)數(shù)據(jù)庫設(shè)計文檔和最終的數(shù)據(jù)庫相同,當(dāng)設(shè)計文檔變化時我們同樣要驗(yàn)證改修改是否落實(shí)到數(shù)據(jù)庫上。
2)集成測試。集成測試是主要針對接口進(jìn)行的測試工作,從數(shù)據(jù)庫的角度來說和普通測試稍微有些區(qū)別對于數(shù)據(jù)庫測試來說,需要考慮的是數(shù)據(jù)項的修改操作、數(shù)據(jù)項的增加操作、數(shù)據(jù)項的刪除操作、數(shù)據(jù)表增加滿、數(shù)據(jù)表刪除空、刪除空表中的記錄、數(shù)據(jù)表的并發(fā)操作、針對存儲過程的接口測試、結(jié)合業(yè)務(wù)邏輯做關(guān)聯(lián)表的接口測試。
同樣我們需要對這些接口考慮采用等價類、邊界值、錯誤猜測等方法進(jìn)行測試。
3)單元測試。單元測試側(cè)重于邏輯覆蓋,相對對于復(fù)雜的代碼來說,數(shù)據(jù)庫開發(fā)的單元測試相對簡單些,可以通過語句覆蓋和走讀的方式完成。
系統(tǒng)測試相對來說比較困難,這要求有很高的數(shù)據(jù)庫設(shè)計能力和豐富的數(shù)據(jù)庫測試經(jīng)驗(yàn)。而集成測試和單元測試就相對簡單了。
而我們也可以從測試關(guān)注點(diǎn)的角度對數(shù)據(jù)庫進(jìn)行分類。
4)功能測試。對數(shù)據(jù)庫功能的測試我們可以依賴與工具進(jìn)行。
DBunit:一款開源的數(shù)據(jù)庫功能測試框架,可以使用類似與Junit的方式對數(shù)據(jù)庫的基本操作進(jìn)行白盒的單元測試,對輸入輸出進(jìn)行校驗(yàn)。
QTP:大名鼎鼎的自動測試工具,通過對對象的捕捉識別,我們可以通過QTP來模擬用戶的操作流程,通過其中的校驗(yàn)方法或者結(jié)合數(shù)據(jù)庫后臺的監(jiān)控對整個數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行測試。個人覺得比較偏向
灰盒。
DataFactory:一款優(yōu)秀的數(shù)據(jù)庫數(shù)據(jù)自動生成工具,通過它你可以輕松的生成任意結(jié)構(gòu)數(shù)據(jù)庫,對數(shù)據(jù)庫進(jìn)行填充,幫助你生成所需要的大量數(shù)據(jù)從而驗(yàn)證我們數(shù)據(jù)庫中的功能是否正確。這是屬于黑盒測試。
數(shù)據(jù)庫性能雖然我們的硬件最近幾年進(jìn)步很快,但是我們需要處理的數(shù)據(jù)以更快的速度在增加。幾億條記錄的表格在現(xiàn)在是司空見慣的,如此龐大的數(shù)據(jù)量在大量并發(fā)連接操作時,我們不能像以前一樣隨意的使用查詢,連接查詢,嵌套查詢,視圖,這些操作如果不當(dāng)會給系統(tǒng)帶來非常巨大的壓力,嚴(yán)重影響系統(tǒng)性能。
5)性能測試。我們?nèi)绾螌π阅芊矫孢M(jìn)行測試呢,業(yè)界也提供了很多工具通過數(shù)據(jù)庫系統(tǒng)的SQL語句分析工具,我們可以分析得到數(shù)據(jù)庫語句執(zhí)行的瓶頸,從而優(yōu)化SQL語句。
Loadrunner:這個不用多說,我們可以通過對協(xié)議的編程來對數(shù)據(jù)庫做壓力測試。
Swingbench:(這是一個重量級別的feature,類似LR,而且非常強(qiáng)大,只不過專門針對oracle而已)數(shù)據(jù)庫廠商也意識到這點(diǎn),例如oracle11g已經(jīng)提供了real applicationtest,提供數(shù)據(jù)庫性能測試,分析系統(tǒng)的應(yīng)用瓶頸。
還有很多第三方公司開發(fā)了SQL語句優(yōu)化工具來幫助你自動的進(jìn)行語句優(yōu)化工作從而提高執(zhí)行效率。
6)安全測試。軟件日益復(fù)雜,而數(shù)據(jù)又成為了系統(tǒng)中重中之重的核心,從以往對系統(tǒng)的破壞現(xiàn)在更傾向于對數(shù)據(jù)的獲取和破壞。而數(shù)據(jù)庫的安全被提到了最前端自從SQL注入攻擊被發(fā)現(xiàn),
在基于數(shù)據(jù)庫應(yīng)用系統(tǒng)的數(shù)據(jù)庫測試中數(shù)據(jù)庫完整性對于數(shù)據(jù)庫應(yīng)用系統(tǒng)非常關(guān)鍵,其作用主要體現(xiàn)在以下幾個方面:
1)數(shù)據(jù)庫完整性約束能夠防止合法用戶使用數(shù)據(jù)庫時向數(shù)據(jù)庫中添加不合語義的數(shù)據(jù)。
2)利用基于DBMS的完整性控制機(jī)制來實(shí)現(xiàn)業(yè)務(wù)規(guī)則,易于定義,容易理解,而且可以降低應(yīng)用程序的復(fù)雜性,提高應(yīng)用程序的運(yùn)行效率。同時,基于DBMS的完整性控制機(jī)制是集中管理的,因此比應(yīng)用程序更容易實(shí)現(xiàn)數(shù)據(jù)庫的完整性。
3)合理的數(shù)據(jù)庫完整性設(shè)計,能夠同時兼顧數(shù)據(jù)庫的完整性和系統(tǒng)的效能。比如裝載大量數(shù)據(jù)時,只要在裝載之前臨時使基于DBMS的數(shù)據(jù)庫完整性約束失效,此后再使其生效,就能保證既不影響數(shù)據(jù)裝載的效率又能保證數(shù)據(jù)庫的完整性。
4)在應(yīng)用軟件的功能測試中,完善的數(shù)據(jù)庫完整性有助于盡早發(fā)現(xiàn)應(yīng)用軟件的錯誤。
一個好的數(shù)據(jù)庫完整性設(shè)計首先需要在需求分析階段確定要通過數(shù)據(jù)庫完整性約束實(shí)現(xiàn)的業(yè)務(wù)規(guī)則,然后在充分了解特定DBMS提供的完整性控制機(jī)制的基礎(chǔ)上,依據(jù)整個系統(tǒng)的體系結(jié)構(gòu)和性能要求,遵照數(shù)據(jù)庫設(shè)計方法和應(yīng)用軟件設(shè)計方法,合理選擇每個業(yè)務(wù)規(guī)則的實(shí)現(xiàn)方式;最后,認(rèn)真測試,排除隱含的約束沖突和性能問題?;贒BMS的數(shù)據(jù)庫完整性設(shè)計大體分為以下幾個階段:
1)需求分析階段。經(jīng)過系統(tǒng)分析員、數(shù)據(jù)庫分析員、用戶的共同努力,確定系統(tǒng)模型中應(yīng)該包含的對象,如人事及工資管理系統(tǒng)中的部門、員工、經(jīng)理等,以及各種業(yè)務(wù)規(guī)則。
在完成尋找業(yè)務(wù)規(guī)則的工作之后,確定要作為數(shù)據(jù)庫完整性的業(yè)務(wù)規(guī)則,并對業(yè)務(wù)規(guī)則進(jìn)行分類。其中作為數(shù)據(jù)庫模式一部分的完整性設(shè)計按下面的過程進(jìn)行。而由應(yīng)用軟件來實(shí)現(xiàn)的數(shù)據(jù)庫完整性設(shè)計將按照軟件工程的方法進(jìn)行。
2)概念結(jié)構(gòu)設(shè)計階段。概念結(jié)構(gòu)設(shè)計階段是將依據(jù)需求分析的結(jié)果轉(zhuǎn)換成一個獨(dú)立于具體DBMS的概念模型,即實(shí)體關(guān)系圖(ERD)。在概念結(jié)構(gòu)設(shè)計階段就要開始數(shù)據(jù)庫完整性設(shè)計的實(shí)質(zhì)階段,因?yàn)榇穗A段的實(shí)體關(guān)系將在邏輯結(jié)構(gòu)設(shè)計階段轉(zhuǎn)化為實(shí)體完整性約束和參照完整性約束,到邏輯結(jié)構(gòu)設(shè)計階段將完成設(shè)計的主要工作。
3)邏輯結(jié)構(gòu)設(shè)計階段。此階段就是將概念結(jié)構(gòu)轉(zhuǎn)換為某個DBMS所支持的數(shù)據(jù)模型,并對其進(jìn)行優(yōu)化,包括對關(guān)系模型的規(guī)范化。此時,依據(jù)DBMS提供的完整性約束機(jī)制,對尚未加入邏輯結(jié)構(gòu)中的完整性約束列表,逐條選擇合適的方式加以實(shí)現(xiàn)。
一個基于數(shù)據(jù)庫應(yīng)用系統(tǒng)的功能、性能,安全性往往和數(shù)據(jù)庫開發(fā)有直接的關(guān)系,但是實(shí)際工作中,我們從來沒有真正將數(shù)據(jù)庫作為一個
(下轉(zhuǎn)第126頁)
(上接第112頁)
獨(dú)立的系統(tǒng)進(jìn)行測試,而是通過對代碼的測試工作間接對數(shù)據(jù)庫進(jìn)行一定的測試,數(shù)據(jù)庫方面的測試仍然處于空白。為了進(jìn)一步的提高軟件質(zhì)量和開發(fā)效率,我們必須關(guān)注數(shù)據(jù)庫測試,并且盡早的參與數(shù)據(jù)庫開發(fā)。
參考文獻(xiàn)
[1]柳純錄.軟件評測師教程 [M].清華大學(xué)出版社.
[2]朱少民.軟件測試方法和技術(shù)[M].清華大學(xué)出版社.
[3]http://www.51testing.com/
作者簡介
陳鄭珍,女,本科,廣州南洋理工職業(yè)學(xué)院教師,從事計算機(jī)軟件開發(fā)方面的教學(xué)工作,主要研究領(lǐng)域:軟件系統(tǒng)開發(fā)。