摘要:構(gòu)件技術(shù)成為當(dāng)前軟件工程中的發(fā)展方向,構(gòu)件的軟件測試成為軟件測試中的一個新的研究領(lǐng)域。本文對構(gòu)件技術(shù)做了簡單的介紹后,對構(gòu)件測試中遇到的困難和問題做了比較詳細(xì)的描述,并介紹了目前過內(nèi)外在構(gòu)件測試方面的一些成果現(xiàn)狀。
關(guān)鍵字:軟件測試;構(gòu)件技術(shù);構(gòu)件測試
中圖分類號:TP311文獻標(biāo)識碼:A文章編號:1009-3044(2008)14-20952-02
1 軟件構(gòu)件技術(shù)
自上個80年代以來,面向?qū)ο蠹夹g(shù)的發(fā)展與應(yīng)用,在提高軟件可重用性方面起了積極的推動作用,軟件重用已經(jīng)成軟件工程技術(shù)的一個重要目標(biāo),成為開發(fā)出高效、低成本、可重用軟件系統(tǒng)的重要的現(xiàn)實途徑。當(dāng)今軟件開發(fā)技術(shù)的主流已是基于軟件構(gòu)件技術(shù)。只要遵循軟件構(gòu)件模型規(guī)范,各個軟件開發(fā)商就可以用自己方便的程序語言去實現(xiàn)可重用的軟件構(gòu)件,應(yīng)用程序開發(fā)人員就有可能實現(xiàn)在計算機硬件領(lǐng)域早已實現(xiàn)的夢想:挑選構(gòu)件,組合成新的應(yīng)用軟件系統(tǒng)。oscarNierstrasz提出[1]:Applieations=Components + seripts即應(yīng)用軟件就是構(gòu)件和構(gòu)件描述組成。
2 傳統(tǒng)的軟件測試
2.1 軟件測試的重要性、目的和原則
為了能夠保證交付的軟件使客戶滿意,需要在軟件開發(fā)、集成和形成系統(tǒng)之后進行充分、全面、有效的測試,軟件測試是保證軟件質(zhì)量的重要手段。
測試過程貫穿在軟件開發(fā)的整個生命周期過程,覆蓋范圍是很廣泛的,包括需求分析,設(shè)計文檔、程序代碼等。目前比較俠義的理解是軟件測試就是對程序代碼的測試。
Grenford.J.Myers[2] 就軟件的測試目的提出了如下的觀點:(1)軟件測試是程序的執(zhí)行過程,目的在于發(fā)現(xiàn)缺陷;(2)一個好的測試用例在于能發(fā)現(xiàn)至今未發(fā)現(xiàn)的缺陷;(3)一個成功的測試是發(fā)現(xiàn)了至今未發(fā)現(xiàn)的多個缺陷的測試。因而,測試的目的是在資源消耗合理的情況下,發(fā)現(xiàn)盡可能多的缺陷和錯誤。
軟件測試中應(yīng)該遵循主要原則包括:(1)應(yīng)當(dāng)把“盡早地和不斷地進行軟件測試”作為軟件開發(fā)者的座右銘;(2)測試用例應(yīng)由測試輸入數(shù)據(jù)和與之對應(yīng)的預(yù)期輸出結(jié)果這兩部分組成;(3)序員應(yīng)避免檢查自己的程序;(4)在設(shè)計測試用例時,應(yīng)當(dāng)包括合理的輸入條件和不合理的輸入條件;(5)充分重視測試中的群集現(xiàn)象;(6)嚴(yán)格執(zhí)行測試計劃,排除測試的隨意性;(7)應(yīng)當(dāng)對每一個測試結(jié)果做全面的檢查;(8)妥善的保存測試計劃,測試用例,出錯統(tǒng)計和最終分析報告,為維護提供方便[3]。
2.2 傳統(tǒng)的軟件測試主要方法和技術(shù)
通常依照如下方法對軟件測試進行分類:
(1) 軟件開發(fā)過程中的測試:包括單元測試;集成測試;系統(tǒng)測試; 驗收測試。
(2) 軟件產(chǎn)品測試。測試對象是已經(jīng)或即將產(chǎn)品化的軟件。包括:功能測試;性能測試;β測試;Benchmark測試。
(3) 專門的軟件測試:包括可靠性測試;標(biāo)準(zhǔn)符合性測試;互操作性測試;安全性測試;強度測試。
3 構(gòu)件測試方法概述
3.1 構(gòu)件測試技術(shù)發(fā)展現(xiàn)狀
構(gòu)件測試技術(shù)發(fā)展歷史并不長,構(gòu)件繼承了傳統(tǒng)軟件的特點,與傳統(tǒng)軟件相比又具有一定的特殊性,所以構(gòu)件軟件的測試技術(shù)也相應(yīng)的繼承了傳統(tǒng)軟件測試技術(shù)中適用的部分,同時又具有傳統(tǒng)軟件測試所不具備的特性。
正是這些特殊性決定了構(gòu)件軟件的測試方式、方法在某些方面具有自己的特點。為此,在傳統(tǒng)軟件測試技術(shù)的基礎(chǔ)上,對構(gòu)件軟件測試技術(shù)進行挖掘和開拓成為構(gòu)件軟件測試領(lǐng)域的一項主要研究內(nèi)容,并有了一定的發(fā)展。
構(gòu)件軟件作為軟件的一種,是軟件技術(shù)發(fā)展的新階段,面臨著更加復(fù)雜的開發(fā)模式,為此需要對構(gòu)件軟件進行一系列的測試,從而保證構(gòu)件軟件的質(zhì)量要求。
3.2 構(gòu)件測試面臨的主要問題
基于構(gòu)件的軟件開發(fā)所面對的測試單元是構(gòu)件產(chǎn)品,作為構(gòu)件開發(fā)方來說可以針對構(gòu)件的源碼進行測試,而對于構(gòu)件的使用方來說往往構(gòu)件的源碼是不可知的也很難與構(gòu)件的開發(fā)者進行交流。這一差異導(dǎo)致構(gòu)件的測試與傳統(tǒng)的軟件測試相比具有了新的問題,包括:
3.2.1 構(gòu)件生產(chǎn)者所面臨的測試問題
(1) 構(gòu)件的應(yīng)用環(huán)境復(fù)雜多變,作為構(gòu)件開發(fā)者難以考慮所有的構(gòu)件可能運行的環(huán)境,因而也就不能對構(gòu)件進行充分的測試;(2)構(gòu)件軟件測試集的組合爆炸問題導(dǎo)致測試工作量非常大,卻難以覆蓋所有的測試點[4];(3)構(gòu)件的測試環(huán)境配置困難重重,構(gòu)件生產(chǎn)者不可能搭建構(gòu)件使用的確切環(huán)境;(4)構(gòu)件測試的可重復(fù)性;(5)構(gòu)件測試工具缺乏。
3.2.2 構(gòu)件使用者面臨的測試問題
(1)很難獲得軟件的源程序,因而不能對構(gòu)件的內(nèi)部細(xì)節(jié)有詳細(xì)的了解,從而對構(gòu)件的測試帶有一定的盲目性;(2)測試數(shù)據(jù)的產(chǎn)生:由于同樣的原因,難以產(chǎn)生合適的測試輸入,使得對底層元素難以達到較高的覆蓋率;(3)組合爆炸問題依然存在,導(dǎo)致測試?yán)щy;(4)集成測試中有可能對構(gòu)件單元測試中的測試點造成重復(fù)測試,從而造成測試冗余性;(5)構(gòu)件測試的可重用性:對構(gòu)件的測試應(yīng)該是可重用的;(6)構(gòu)件測試工具的缺乏。
3.3 構(gòu)件測試與傳統(tǒng)的軟件測試的主要區(qū)別
構(gòu)件與傳統(tǒng)軟件從系統(tǒng)設(shè)計開始就是不同的,傳統(tǒng)軟件開發(fā)從需求分析、軟件設(shè)計到編寫代碼一直到測試都是軟件公司獨立完成的,所以具有比較清晰的脈絡(luò),也能得到軟件的內(nèi)部細(xì)節(jié)信息。
基于構(gòu)件的軟件開發(fā)采用的模式也是從需求分析開始的,但是組成軟件的基本單元不再是傳統(tǒng)的軟件模塊(比如類),而是來自于第三方的軟件構(gòu)件。從而面向構(gòu)件的軟件開發(fā)技術(shù)面對的主要問題是如何選擇以及組裝軟件構(gòu)件[5],經(jīng)過充分的測試,最終形成軟件產(chǎn)品。
因此,傳統(tǒng)軟件測試的軟件設(shè)計詳細(xì)信息和軟件的源代碼都是可以得到的,脈絡(luò)十分清晰。軟件構(gòu)件的測試以及軟件構(gòu)件產(chǎn)品集成測試和系統(tǒng)測試需要尋找合適的構(gòu)件產(chǎn)品并組裝,而構(gòu)件設(shè)計以及內(nèi)部代碼對于構(gòu)件使用者來說是不可見的。
傳統(tǒng)軟件測試?yán)碚摵头椒夹g(shù)都比較成熟,構(gòu)件測試的測試方法和測試技術(shù)部分可以采用傳統(tǒng)的軟件測試。但是構(gòu)件測試具有自己的特點,需要區(qū)別對待,根據(jù)構(gòu)件的新特性研究構(gòu)件的測試方法。
3.4 國內(nèi)外構(gòu)件測試的研究現(xiàn)狀
國外及國內(nèi)在構(gòu)件測試方面的研究已經(jīng)取得一定的成果,例如:Freedman提出了構(gòu)件的可測性理論[6];Jerry[7]提出了構(gòu)件可跟蹤性以及構(gòu)件可理解性;浙江大學(xué)提出界面構(gòu)件關(guān)聯(lián)圖的測試方法,等等
從國內(nèi)外構(gòu)件測試技術(shù)研究的現(xiàn)狀來看,具體的軟件構(gòu)件測試方法主要有以下幾種:
(1) 基于元數(shù)據(jù)的構(gòu)件測試
這種測試方法由構(gòu)件開發(fā)者提供包含構(gòu)件信息的元數(shù)據(jù),這些元數(shù)據(jù)覆蓋了構(gòu)件各個方面的信息。構(gòu)件測試者提取元數(shù)據(jù)中的信息并根據(jù)這些信息來制定合理的測試用例,然后對構(gòu)件進行測試。由于這些元數(shù)據(jù)具有明確的構(gòu)件使用上下文信息,所以通過元數(shù)據(jù)提供的數(shù)據(jù)對構(gòu)件進行測試具有明確的目標(biāo)和清晰的測試切入點。不過元數(shù)據(jù)的制定比較困難。
(2) 軟件構(gòu)件流程圖
使用數(shù)據(jù)流和控制流的方法,利用從構(gòu)件中獲取的信息將構(gòu)件數(shù)據(jù)和信息的交互做成交互圖,然后根據(jù)此交互圖來制定測試用例。
(3) 錯誤注入的構(gòu)件測試
通過對程序進行錯誤注入來觀察構(gòu)件失效或產(chǎn)生錯誤的狀態(tài)下對整個系統(tǒng)的影響。通過對構(gòu)件功能的限制來發(fā)現(xiàn)系統(tǒng)入侵情況下構(gòu)件的運行狀態(tài)以及由此而產(chǎn)生的對整個軟件系統(tǒng)的危害。
(4) 測試序列技術(shù)
該方法對構(gòu)件間的交互進行測試,通過應(yīng)用需求分離出構(gòu)件交互的序列并不斷集成直到生成整個應(yīng)用系統(tǒng),因而可以看作是一個漸進的測試過程。但是隨著系統(tǒng)中構(gòu)件數(shù)目和規(guī)模的增加,這種測試的難度也逐漸的增加。
4 總結(jié)
隨著構(gòu)件技術(shù)成為當(dāng)前軟件工程中的熱點發(fā)展方向,構(gòu)件的軟件測試成為軟件測試中的一個新的研究領(lǐng)域。本文對構(gòu)件技術(shù)做了簡單的介紹后,對構(gòu)件測試中遇到的困難和問題做了比較詳細(xì)的描述,并介紹了目前過內(nèi)外在構(gòu)件測試方面的一些成果現(xiàn)狀。所做的工作屬于項目組系統(tǒng)實現(xiàn)的前期熟悉工作的組成部分。
參考文獻:
[1] Osear Nierstrasz,Theo Dirk Meijler.Research direetions in software composition[J].ACM computing surveys,1995,27(2):262-264.
[2] Grenford J Myers.The Art of Software Testing[M].2nd Edition.2004:147.
[3] 鄭人杰.實用軟件工程[M].2版.北京:清華大學(xué)出版社,1999:169.
[4] 李延春.軟件構(gòu)件技術(shù)的現(xiàn)狀與未來[J].計算機工程與應(yīng)用,2003,3(1):86-96.
[5] 艾萍.軟件構(gòu)件組裝基礎(chǔ)研究[J].計算機工程與設(shè)計,2003(12):6-27.
[6] R S Freedman.Testablility of software Components[J].IEEE Transaction on Software Engineering,1991,6(17).
[7] Jerry Gao,Eugene,Simon Shim,et al.Monitoring Software Components and Component-based Software[C].Proc 24th Annual International Conforance on Computer Software an Applications,2000.