走進單元測試一:初認Unit Test

Just4life發表於2013-08-05
前言:在公司寫單元測試已經有兩個多月了(思想上有過糾結),說實話有點像趕鴨子上架,在專案收尾的時候才做,很明顯它的作用已經是名副其實了,而且還找像我這樣的新手來寫(一開始我都不怎麼熟悉業務流程),所以現在一直努力學好單元測試,寫好它,把自己的事做好!

  我也是在讀程式設計師修煉之道 - 單元測試這本書之後,再閱讀了園子中的各個文章後的感悟把,寫出來跟大家一起分享!

  電子書下載地址:http://www.kuaipan.cn/file/id_29568238492847284.htm

  測試是貫穿整個整個軟體工程的始末,做好測試對軟體的質量會有一個質的保證,減少查詢BUG的工作量,所以作為一個開發者需要了解各種測試流程以及核心思想,然而這次的單元測試是我們開發者必須要具備的技能,這次就讓我們走進單元測試(Unit Test)!

 1.個人對單元測試的初識  

    ①堅持的開發中編寫單元測試,並把它培養成一種習慣!

    ②寫出高效的單元測試,這種能力需要在實踐中慢慢積累!

    ③提高對單元測試的認識高度,把它和編碼工作同等對待!

 

 2.什麼是單元測試?

    通俗講單元測試就是檢查一個函式執行後它的返回結果或者它對系統資料造成的影響(或者其它方面的影響)是否跟你的期望一致,也就是為了證明程式碼的行為和我期望的一致!

 

 3.我們為什麼要使用單元測試?

    ①最直接的原因是保證我們函式的正確性,如果這個函式在沒有保證正確的情況下就被上層程式碼呼叫,那麼隨著專案的深入,呼叫層次會越來越深,就很容易產生嚴重的BUG問題,從而增加開發難度,降低開發效率!

    ②根本原因是減輕我們開發人員的工作量,使我們的工作變的輕鬆(這只是一個相對說法)!

 

 4.單元測試的內涵

    如果把單元測試上升到一定程度後,它可以把我們的程式碼變的更加完美和簡潔!

 

 5.單元測試的本質

    請記住一點,不是為工作而編寫單元測試,單元測試是方便我們開發人員的,可以使我們的工作變的輕鬆!

    單元測試可以減少我們花在解決不必要的BUG之上(並不是說沒有BUG,而是說減少不必要的BUG),而把大量時間專注於業務需求上!

 

 6.函式的行為和預期的一致嗎?

    如果測試只考慮在正確的環境下造成正確的影響,那麼這樣的單元測試是不及格的!

    做測試就要考慮全面,各個方面都要涉及的到,如:環境因素(也可以是系統所處在的環境),各種異常,邊界值等等,所以儘可能的考慮特殊情況,做到做到百密而無一疏(儘自己的最大努力達到)!

   

 7.需要依賴單元測試嗎?    

    答案是肯定的!

           當你很自信的認為你寫的函式是絕對正確的且沒有測試程式碼做為依據的時候往往會出現意想不到的錯誤,因為你會疏忽了其它的一些情況,所以編寫單元測試來保證我們函式的準確性是非常有必要的!

           注:後面會說明測試應該測哪些情況!

  

  8.單元測試幹了什麼,作用是什麼?

    ①最直接的是保證了函式的正確性(這個大家都知道)!

      ②還有我們可以根據單元測試來判斷此函式是用來幹什麼的,也就說單元測試類似於一個可執行文件,其它開發人員可以通過看單元測試就會明白你測試的函式是用來幹嘛的!

   

 9.如何進行單元測試?

     這邊我們使用的VS2008,2010自帶的單元測試框架!     

 ①  使用VS自帶的Unit Test,簡單易學!

 ②  測試要全面!

 ③  保證所有測試都能通過,不管舊的還是新的測試程式碼,都要通過!

 ④  保證所有測試沒有對系統中任何模組產生影響(這個很重要)!

 ⑤  及時執行測試程式碼,檢視執行結果,保證系統的執行正常!

    

 10.不要為沒寫測試程式碼找藉口    

    一般情況的看來當你寫的一個函式已經不太需要修改了,你就應該編寫這個函式的單元測試程式碼!

         大多數情況下開發人員的大量時間都是修改BUG,如果能儘早的做單元測試將會減輕你的工作量(雖然不可能沒有BUG,但寫Unit Test卻對你是有益無害的),即使在以後的時間裡出現BUG,我想你能很快的定位產生BUG的位置!

           最後寫Unit Test千萬不要放在專案末期,如果此時寫單元測試的人還是一個剛進專案新手的話,寫單元測試就是扯淡,這樣的方式是不能體現單元測試的核心觀念的,而我就剛好處於這個狀態,真的很後怕,所以還需要多多加油,努力瞭解系統流程!

 

 11.如果真的沒有時間寫單元測試,請思考下面幾個問題?

    ①對於你所編寫的程式碼,你花在除錯上面的時間有多少?

    ②你目前認為你的程式碼正確無比,但很有可能在系統中卻存在嚴重隱患,你是否花了很多時間來查詢這些隱患?

    ③對於一個新的BUG,你花了多長時間來定位這個BUG在原始碼中的位置?

      總結:隨著專案的深入,你的函式會被呼叫的越來越深,那麼特殊情況就會經常發生,萬一出現什麼情況你將會耗費很多的精力來解決它,另一方面,適當的單元測試程式碼會很大程度上減少你的工作量,這是經過實踐檢驗的!  

 

總結:好了基本的單元測試思想就這麼多了,希望園友們能指點一二,單元測試系列將持續更新中!

相關文章