陳晶晶
(龍巖學(xué)院物理與機(jī)電工程學(xué)院,福建龍巖364000)
軟件單元測試淺議
陳晶晶
(龍巖學(xué)院物理與機(jī)電工程學(xué)院,福建龍巖364000)
本文首先介紹了單元測試的概念,闡述了單元測試的目的,然后著重分析了單元測試的重要性和實(shí)施現(xiàn)狀,最后對單元測試技術(shù)的未來進(jìn)行了展望.
單元測試;軟件錯誤;軟件質(zhì)量
在當(dāng)今信息化的時代背景下,軟件的使用越來越普及和深化.伴隨著現(xiàn)代軟件規(guī)模的日益擴(kuò)大,軟件的復(fù)雜程度也越來越大.這意味著在軟件的開發(fā)過程中可能存在很多問題,甚至是未發(fā)現(xiàn)的問題.由于有問題存在而難以解決或者是存在而未發(fā)現(xiàn)的問題,軟件在使用和開發(fā)的過程中輕則可能導(dǎo)致費(fèi)用失控、進(jìn)度延遲、執(zhí)行代碼臃腫、低效,重則可能導(dǎo)致整個軟件項目的失敗.因此,如何提高軟件質(zhì)量,保證軟件運(yùn)行的安全性是軟件行業(yè)一直在探討和關(guān)注的問題.高質(zhì)量的軟件開發(fā)技術(shù)將是未來軟件業(yè)的追求,而單元測試正是確保高質(zhì)量軟件的關(guān)鍵技術(shù)之一[1].
從軟件設(shè)計的思想上來說,軟件設(shè)計思想可以分為面向?qū)ο蟮能浖_發(fā)思想和面向過程的軟件開發(fā)思想.但是不論是用面向?qū)ο蟮拈_發(fā)思想還是用面向過程寫出來的程序,它們都可以劃分為若干個相對獨(dú)立的軟件單元,因此,軟件單元是構(gòu)成軟件的最小單位.在面向?qū)ο箝_發(fā)的程序中,最小軟件單元是類,而在面向過程開發(fā)的程序中,最小軟件單元是函數(shù).可見,單元測試實(shí)質(zhì)上是將軟件劃分為若干個獨(dú)立的測試單元進(jìn)行隔離測試,它是軟件開發(fā)過程中最低級別的測試活動.在軟件生命周期V模型中,它的依據(jù)是詳細(xì)設(shè)計說明書[2].
單元測試是軟件測試中的一種,IEEE對軟件測試的定義為,使用人工或自動手段來運(yùn)行或評價某個系統(tǒng)或系統(tǒng)部件的過程,其目的在于檢驗它是否滿足規(guī)定的需求;或是弄清楚預(yù)期結(jié)果和實(shí)際結(jié)果之間的差別.這個定義明確的說明了軟件測試目的,即檢驗所設(shè)計的軟件能否滿足設(shè)計時的需求,這也是單元測試的目的.通過確保軟件設(shè)計中最小單元的正確性來提高軟件產(chǎn)品的質(zhì)量.
軟件錯誤是不可避免的[3].因為軟件是人編寫的,凡是由人編寫的軟件都不可能是完美無暇的,只能是無限的逼近完美.所以問題的關(guān)鍵就在于如何去避免錯誤的產(chǎn)生和糾正已經(jīng)產(chǎn)生的錯誤.具體來說,引起軟件錯誤的原因有[4]:(1)交流上面的誤解或者是根本不進(jìn)行交流;(2)軟件的復(fù)雜性;(3)程序設(shè)計錯誤;(4)需求發(fā)生變化;(5)時間壓力;(6)代碼文檔匱乏;(7)軟件開發(fā)工具中的錯誤.曾經(jīng)有些觀點(diǎn)認(rèn)為較好的程序開發(fā)語言可以解決這些問題,但是從程序開發(fā)語言的發(fā)展進(jìn)程來看,較好的程序開發(fā)語言確實(shí)在一定程度上提高了軟件開發(fā)效率并且也解決了一些難題.不過在軟件可靠性的問題上,它所起的作用甚小.事實(shí)上,對于軟件來講,還沒有像銀彈那樣的東西[5].不論采用什么技術(shù),軟件中仍然會有錯誤.采用新的語言、先進(jìn)的開發(fā)方式、完善的開發(fā)過程,可以減少錯誤的引入,但是不可能完全杜絕軟件中的錯誤,這些引入的錯誤需要通過測試將其找出來,軟件中的錯誤密度也需要測試來評估[6].因此單元測試在整個軟件開發(fā)過程中是非常重要的,它是所有軟件測試的第一個環(huán)節(jié),也是最基本的一個環(huán)節(jié).同時,單元測試也是唯一一次能夠保證代碼覆蓋率達(dá)到100%的測試,這樣可以防止開發(fā)后期因bug過多或是加入新功能導(dǎo)致的程序框架改變而引起的失控.下圖是微軟公司統(tǒng)計的各種測試的數(shù)據(jù)圖[7]:
圖1 測試數(shù)據(jù)統(tǒng)計
從微軟公司的統(tǒng)計圖中不難看出,事后控制不如事中控制,事中控制不如事前控制.在測試中捕捉錯誤,定位問題的最佳時機(jī)應(yīng)該是在項目開發(fā)的早期.并且修正一個軟件錯誤所需的費(fèi)用將隨著軟件生命周期的進(jìn)展而上升,錯誤發(fā)現(xiàn)的越晚,修正它所需的費(fèi)用就越高.需要強(qiáng)調(diào)的是,測試是一個貫穿于軟件項目開發(fā)的持續(xù)過程,在軟件生命周期中需要運(yùn)行多種測試,充分發(fā)揮不同測試的優(yōu)點(diǎn).
單元測試是目前軟件測試中研究的熱點(diǎn)問題,許多學(xué)者提出了大批的測試方法和測試?yán)碚?John Watkins在《An Off-the-Shelf software Testing Process》中提出了軟件單元測試通常覆蓋的區(qū)域,執(zhí)行單元測試應(yīng)該遵循的基本方法等.但是總的來說,這些理論缺乏實(shí)際的工程解決方案.從軟件組織對單元測試的實(shí)施現(xiàn)狀來看,許多軟件開發(fā)組織存在以下問題:
(1)沒有單元測試,或單元測試不徹底.
(2)單元測試大多依賴手工進(jìn)行,沒有有效的自動化測試工具,導(dǎo)致軟件測試效率低下,測試周期長,不能在軟件開發(fā)的各個周期完整測試.
(3)測試驅(qū)動難以編寫、測試程序難以管理、軟件單元難以介定[8].
針對這些問題,有些廠家推出了一系列的單元測試工具.其中包括,Purify,CPPUnit,NUnit,junit等.這些工具的推出有效的推動了單元測試的實(shí)施.
雖然極限化編程方法和測試驅(qū)動開發(fā)的興起使得單元測試的應(yīng)用受到了更多的重視,但是從發(fā)展的眼光來看,未來不論是公司還是研究機(jī)構(gòu),在軟件的開發(fā)過程中廣泛的使用自動化單元測試技術(shù)還是有一定難度的,因為它需要測試人員具有相當(dāng)豐富的軟件測試和開發(fā)經(jīng)驗.不過,相信隨著軟件測試?yán)碚摰陌l(fā)展和各種自動化單元測試工具的逐漸成熟,軟件單元測試將在未來取得長足的發(fā)展.
〔1〕陳占華.軟件單元測試[J].無線電通信技術(shù), 2003,5(5):50-51.
〔2〕John Watkins.實(shí)用軟件測試過程[M].北京:機(jī)械工業(yè)出版社,2004:10-20.
〔3〕James A.Whittaker.實(shí)用軟件測試指南[M].北京:電子工業(yè)出版社,2003:51-70.
〔4〕John D.McGregor David A.sykes.面向?qū)ο蟮能?/p>
件測試.北京:機(jī)械工業(yè)出版社,2002:65-80.〔5〕Ron Patton.軟件測試.北京:機(jī)械工業(yè)出版社,2002:70-79.
〔6〕陳和平.面向?qū)ο蟮淖詣踊瘑卧獪y試[D].武漢理工大學(xué),2004.
〔7〕陳靜.單元測試在軟件開發(fā)過程中的作用.艦船電子對抗,2006(6).
〔8〕肖波.通訊系統(tǒng)嵌入式平臺下的單元測試技術(shù)研究[D].華東師范大學(xué),2006.
TP31
A
1673-260X(2010)11-0029-02