MILY: 宋體; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋體; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">導讀
其實并不想寫關于理論的東西,理論性的東西網上有很多,更喜歡說一些實際操作性的話題。前幾篇大多是說的關于單元測試方面,現在就對單元測試做個總結。純屬于個人理解,不足和巧合之處敬請大家指正。
什么是單元測試
在你要去做一件事情時,總得知道是什么事吧。做單元測試也是如此,得先知道什么是單元測試。OK,傳統軟件對“單元”一詞有各種定義,對“單元測試”也是一如此。這里我取其一種,即單元是可以編譯和執行的最小軟件構件,是決不會指派給多個程序員開發的軟件構件。對于結構化程序而言,程序單元是指程序中定義的函數和子程序,單元測試就是對函數或子程序進行的測試。但有些也可以把緊密相關的一組函數或過程看做一個單元,如函數A調用函數B,那么在執行測試時,可以將A和B合并為一個單元進行測試。對于面向對象設計程序而言,程序單元是指特定的一個具體的類或相關的多個類,單元測試就是對類的測試;有時候,在一個類特別復雜的時候,可以把類中的方法作為一個單元進行測試。
單元測試要測試程序中的哪些方面
現在你已經知道什么是單元測試了,但單元測試到底要測試程序中的哪些方面呢?有些人,包括本人一開始學習單元測試也犯過這樣的錯誤,就是只寫一個測試用例,讓所有代碼從頭到尾跑一次,只測試一條能夠正確執行的路徑,如果測試通過了,就認為測試工作已經完成。實際上并非如此。單元測試的目的是根據可能是各種情況,確定測試內容,確定這段代碼是否在任何情況下都和期望的一致。因此,在單元測試時,測試人員在依據詳細設計規格說明書和源程序清單,理解程序的輸入輸出和模塊的邏輯結構,從以下五個方面考慮:
1, 模塊接口,主要測試數據在模塊接口處是否出錯,能否正確地輸入輸出。
2, 局部數據結構,主要檢查臨時存儲在模塊內部的數據在程序執行過程中是否完整,正確。
3, 獨立路徑,主要是為了發現因計算錯誤,比較不正確和控制流不適當而造成的錯誤而設計相應測試用例。
4, 出錯處理,主要檢查程序是否能預見各種出錯條件,并進行相應的出錯處理。
5, 邊界條件,邊界測試是單元測試中最后也是最重要的一項任務,主要檢查軟件在邊界上是否失效。
怎樣進行單元測試
到此處,或許你已經想躍躍欲試了。OK,現在就開始,對程序進行單元測試,方法大體上有兩種,一是靜態測試,另一種就是動態測試。涉及了白盒測試技術知識。
一,靜態測試
在靜態測試中,一般會用詞法分析與語法分析和靜態錯誤分析。
用詞法分析與語法分析可以獲得軟件組成的重要因數,如變量標識符,常量等,組合這些基本因數可以得到軟件的基本信息。
靜態錯誤分析用于確定在源程序中是否有某類錯誤或不安全的結構,主要有四種類型:類型和單位分析,引用分析,表達式分析和接口分析。
在實際工作中,如果測試需求嚴格,可能還會對代碼進行檢查,如桌面檢查,代碼審查,走查,等等。不同的公司有不同的做法。
二,動態測試
動態測試,是一種需要執行原程序或測試類程序的一種測試方法。在軟件動態測試中,程序插樁是一種基本的測試手段。借助在被測試程序中插入操作,來實現測試的目的。在單元測試中,最重要的莫過于邏輯覆蓋率的測試。邏輯覆蓋是通過對程序邏輯結構的遍歷實現程序的覆蓋,主要有語句覆蓋(SC),判定覆蓋(DC),條件覆蓋(CC),條件判定組合覆蓋(CDC),多條件覆蓋(MCC)和修正判定條件覆蓋(MCDC)。還有路徑覆蓋和基本路徑測試法等等。關于這些覆蓋的定義和用法這里就不做過多的述說了,因為很多測試資料及網上都可以很容易找到,也很容易看懂。關鍵的是在工作中,怎樣設計一個成功的測試用例來提高被測程序的覆蓋率,這才是作為一個測試工作者要思考的問題。與該文章一起,我會上傳一個相關的文檔,感興趣的朋友可以下載看看。
怎樣做好單元測試
在你知道為什么,怎樣做時,你是否這樣想過,怎樣才能做得最好呢?當有很多方法可以同是實現時,你是否想過,用哪種方法可以以最快的速度達到最好的效果?先搞懂為什么,再思考怎么做,最后深入研究怎樣才能做得最好。這是我一直以來的學習習慣,感覺很好,你們也可是試試。
怎樣做好單元測試,除了你要懂得軟件開發流程,測試基本知識,你還需要熟悉代碼,懂得編程,具備良好的邏輯思維能力和洞查能力加上有良好的職業敏感度。除此之外,你還得有很強的學習能力,因為單元測試中對不同開發語言,不同技術,相對應的測試方法和技術都會不同,所用到的測試工具也不同,所以你要有很強的學習能力。
要做好一個單元測試,當然少不了應用工具,在這里舉例一些
1, JUnit :一種測試java類的測試框架,可以ant結合,達到自動化測試,官網地址是:http://www.junit.org/ ant 下載地址是:http://ant.apache.org/
2, Jtest:和JUnit類似,只是JUnit是開源軟件。官網地址是:http://www.parasoft.com/jsp/home.jsp
3, Cactus:一種測試servlet,jsp,taglibs,filter的框架,是apache開發的一個開源軟件,官網地址是:http://www.apache.org
4, Strutstest:一種測試struts的框架,結合junit可以測試struts中的action。下載地址是:http://strutstestcase.sourceforge.net/
5, Jsunit:一種類似junit的測試框架,主要用來測試javascript。下載地址是:http://sourceforge.net/projects/jsunit/
6, httpUnit:httpUnit本身不是測試工具,而是協助進行功能單元測試的工具,與JUnit一起,可以整合cactus。官網地址為:http://httpunit.sourceforge.net/
7, C++test:一種C和C++的單元測試工具,官網地址是:http://www.parasoft.com/jsp/home.jsp
除了以上所要求具備的,會用的東西外,更少不了一個
好的測試計劃。當這些都準備好了后,就開始Run吧。
OK,就說這些我所常用的了,還有很多,大家在網上都很容易找到,就不一一例舉了。
這篇結束后,這類話題就不再說了,將轉入功能測試,性能測試及自動化測試(LoadRunner,WAS,JMeter,WinRunner)相關話題,謝謝大家的支持,歡迎大家指正錯誤的地方,我的QQ是117293968,加時請注明“軟件測試”,大家一起相互學習,相互幫助啦。