陳晶晶
(龍巖學院物理與機電工程學院,福建龍巖364000)
軟件單元測試淺議
陳晶晶
(龍巖學院物理與機電工程學院,福建龍巖364000)
本文首先介紹了單元測試的概念,闡述了單元測試的目的,然后著重分析了單元測試的重要性和實施現狀,最后對單元測試技術的未來進行了展望.
單元測試;軟件錯誤;軟件質量
在當今信息化的時代背景下,軟件的使用越來越普及和深化.伴隨著現代軟件規模的日益擴大,軟件的復雜程度也越來越大.這意味著在軟件的開發過程中可能存在很多問題,甚至是未發現的問題.由于有問題存在而難以解決或者是存在而未發現的問題,軟件在使用和開發的過程中輕則可能導致費用失控、進度延遲、執行代碼臃腫、低效,重則可能導致整個軟件項目的失敗.因此,如何提高軟件質量,保證軟件運行的安全性是軟件行業一直在探討和關注的問題.高質量的軟件開發技術將是未來軟件業的追求,而單元測試正是確保高質量軟件的關鍵技術之一[1].
從軟件設計的思想上來說,軟件設計思想可以分為面向對象的軟件開發思想和面向過程的軟件開發思想.但是不論是用面向對象的開發思想還是用面向過程寫出來的程序,它們都可以劃分為若干個相對獨立的軟件單元,因此,軟件單元是構成軟件的最小單位.在面向對象開發的程序中,最小軟件單元是類,而在面向過程開發的程序中,最小軟件單元是函數.可見,單元測試實質上是將軟件劃分為若干個獨立的測試單元進行隔離測試,它是軟件開發過程中最低級別的測試活動.在軟件生命周期V模型中,它的依據是詳細設計說明書[2].
單元測試是軟件測試中的一種,IEEE對軟件測試的定義為,使用人工或自動手段來運行或評價某個系統或系統部件的過程,其目的在于檢驗它是否滿足規定的需求;或是弄清楚預期結果和實際結果之間的差別.這個定義明確的說明了軟件測試目的,即檢驗所設計的軟件能否滿足設計時的需求,這也是單元測試的目的.通過確保軟件設計中最小單元的正確性來提高軟件產品的質量.
軟件錯誤是不可避免的[3].因為軟件是人編寫的,凡是由人編寫的軟件都不可能是完美無暇的,只能是無限的逼近完美.所以問題的關鍵就在于如何去避免錯誤的產生和糾正已經產生的錯誤.具體來說,引起軟件錯誤的原因有[4]:(1)交流上面的誤解或者是根本不進行交流;(2)軟件的復雜性;(3)程序設計錯誤;(4)需求發生變化;(5)時間壓力;(6)代碼文檔匱乏;(7)軟件開發工具中的錯誤.曾經有些觀點認為較好的程序開發語言可以解決這些問題,但是從程序開發語言的發展進程來看,較好的程序開發語言確實在一定程度上提高了軟件開發效率并且也解決了一些難題.不過在軟件可靠性的問題上,它所起的作用甚小.事實上,對于軟件來講,還沒有像銀彈那樣的東西[5].不論采用什么技術,軟件中仍然會有錯誤.采用新的語言、先進的開發方式、完善的開發過程,可以減少錯誤的引入,但是不可能完全杜絕軟件中的錯誤,這些引入的錯誤需要通過測試將其找出來,軟件中的錯誤密度也需要測試來評估[6].因此單元測試在整個軟件開發過程中是非常重要的,它是所有軟件測試的第一個環節,也是最基本的一個環節.同時,單元測試也是唯一一次能夠保證代碼覆蓋率達到100%的測試,這樣可以防止開發后期因bug過多或是加入新功能導致的程序框架改變而引起的失控.下圖是微軟公司統計的各種測試的數據圖[7]:

圖1 測試數據統計
從微軟公司的統計圖中不難看出,事后控制不如事中控制,事中控制不如事前控制.在測試中捕捉錯誤,定位問題的最佳時機應該是在項目開發的早期.并且修正一個軟件錯誤所需的費用將隨著軟件生命周期的進展而上升,錯誤發現的越晚,修正它所需的費用就越高.需要強調的是,測試是一個貫穿于軟件項目開發的持續過程,在軟件生命周期中需要運行多種測試,充分發揮不同測試的優點.
單元測試是目前軟件測試中研究的熱點問題,許多學者提出了大批的測試方法和測試理論.John Watkins在《An Off-the-Shelf software Testing Process》中提出了軟件單元測試通常覆蓋的區域,執行單元測試應該遵循的基本方法等.但是總的來說,這些理論缺乏實際的工程解決方案.從軟件組織對單元測試的實施現狀來看,許多軟件開發組織存在以下問題:
(1)沒有單元測試,或單元測試不徹底.
(2)單元測試大多依賴手工進行,沒有有效的自動化測試工具,導致軟件測試效率低下,測試周期長,不能在軟件開發的各個周期完整測試.
(3)測試驅動難以編寫、測試程序難以管理、軟件單元難以介定[8].
針對這些問題,有些廠家推出了一系列的單元測試工具.其中包括,Purify,CPPUnit,NUnit,junit等.這些工具的推出有效的推動了單元測試的實施.
雖然極限化編程方法和測試驅動開發的興起使得單元測試的應用受到了更多的重視,但是從發展的眼光來看,未來不論是公司還是研究機構,在軟件的開發過程中廣泛的使用自動化單元測試技術還是有一定難度的,因為它需要測試人員具有相當豐富的軟件測試和開發經驗.不過,相信隨著軟件測試理論的發展和各種自動化單元測試工具的逐漸成熟,軟件單元測試將在未來取得長足的發展.
〔1〕陳占華.軟件單元測試[J].無線電通信技術, 2003,5(5):50-51.
〔2〕John Watkins.實用軟件測試過程[M].北京:機械工業出版社,2004:10-20.
〔3〕James A.Whittaker.實用軟件測試指南[M].北京:電子工業出版社,2003:51-70.
〔4〕John D.McGregor David A.sykes.面向對象的軟
件測試.北京:機械工業出版社,2002:65-80.〔5〕Ron Patton.軟件測試.北京:機械工業出版社,2002:70-79.
〔6〕陳和平.面向對象的自動化單元測試[D].武漢理工大學,2004.
〔7〕陳靜.單元測試在軟件開發過程中的作用.艦船電子對抗,2006(6).
〔8〕肖波.通訊系統嵌入式平臺下的單元測試技術研究[D].華東師范大學,2006.
TP31
A
1673-260X(2010)11-0029-02