軟體測試之單元測試:開發人員的測試

來源:互聯網
上載者:User

標籤:

說到單元測試,幾乎所有人都知道,由開發人員完成。可是為什麼要進行單元測試呢?

開發人員寫單元測試的時間幾乎和他寫產品代碼的時間相當,因此,當做專案計劃的時候,把單元測試考慮進去是合理的。儘管單元測試增加了相當大的開發工作量,看上去開發時間延長了,但實際上對於一個長期不斷改進和維護的項目而言,我們不能忽視級聯效應,要從項目整體來看。

單元測試可以保證最基本的缺陷儘早的發現並解決,因此,用來解決被流轉到後期的測試階段的缺陷時間實際上就會縮短。

而如果問開發人員是否進行了單元測試,他們通常也會說,是的,已經做了單元測試。如果問開發人員,他們的單元測試的步驟,答案很可能是:

  開發完代碼之後,實際運行了程式,簡單的做了些功能測試,沒有問題
  通過斷點調試進行了代碼跟蹤

不得不說,這麼做是對的,也都具有一定的價值,但是並未關注到單元測試最核心的價值,那麼,什麼樣的測試是有效單元測試呢?

有效單元測試需要編寫簡單的、自動化的測試代碼,並且幾乎是和開發代碼同時完成的

開發人員做單元測試不僅必要,而且重要,每個開發人員都有責任對自己開發的代碼進行單元測試。

那麼,單元測試有哪些特點和作用呢?保證代碼品質、更容易發現缺陷、可重複執行、代碼更容易維護、解決缺陷的成本更低

為什麼單元測試可以更容易發現缺陷

因為單元測試是在系統的最低層級進行測試,與別的方法或模組進行隔離了,因此單元測試的缺陷要比其他層面的缺陷更容易發現並解決。

進行單元測試最主要的原因之一就是解決缺陷的成本更低,因為單元測試中就解決缺陷是缺陷產生到解決最短的周期。

開發人員眼中的測試——把缺陷扼殺在搖籃裡

1. 什麼是單元測試?

單元測試是由開發人員在開發產品代碼的同時進行的一種獨立測試,驗證其開發的每個代碼單元。

2. 單元測試的目的是什嗎?

確保程式的邏輯和開發人員對它的預期是一致的。

3. 為什麼單元測試應該由開發人員來執行?

對於程式的預期結果,開發人員自己比其他人都要清楚,因此編寫有效單元測試,開發人員本人是最合適的人選。

4. 什麼時候進行單元測試呢?

單元測試和開發產品代碼應該是同時進行,實際上,引入敏捷開發理論之後,更高的要求是測試驅動開發,即單元測試代碼要在產品代碼之前編寫。

5. 單元測試的單元是什嗎?測試對象又如何理解?

從實用角度講,單元通常是指類的成員方法,也可以是任何具有明確功能、規格定義、明確介面定義,且其規模一般比較小的程式碼模組的組合體。

6. 都說單元測試是獨立的測試,那麼什麼是獨立測試呢?

獨立,是指將代碼從原始程式中隔離出來,儘可能地與程式其他部分或者外界以來隔離,針對各個單元單獨進行測試。

 

到這裡,做個小的總結來把握單元測試的關鍵點:

  a. 單元測試記錄預期的行為
  b. 每個單元測試針對一個單獨的行為進行測試
  c. 儘可能地與程式其他部分或外界依賴隔離
  d. 一旦失敗,可以清楚地定位失敗的原因
  e. 可以重複運行,且每次運行都有確定的行為,不受上一次啟動並執行影響
  f. 可以快速地執行(10秒左右),簡單、實用、高效
  g. 有效單元測試是自動化的

 

通過以上的介紹,可以對單元測試有了大概的瞭解,單元測試是什麼,為什麼要進行單元測試,但是,單元測試需要覆蓋的內容有哪些呢?單元測試,作為白盒而進行的測試,測試包括主要的流程和出錯的分支,以及邊界條件,使用代碼量來衡量測試的覆蓋率。

1. 單元測試的測什嗎?

單元測試需要保證:覆蓋到所有新開發的代碼、修改過的代碼以及存在的受影響的代碼。

  a. 覆蓋代碼所有分支,包括正常路徑和錯誤路徑
  b. 覆蓋所有有效輸入/輸出情況
  c. 覆蓋所有無效的或預期以外的輸入/輸出情況
  d. 覆蓋所有的記錄檔和傳回碼
  e. 如果有出錯恢複步驟,確保其正確性
  f. 驗證代碼的邏輯正確
  g. 在虛擬翻譯的構建環境中通過測試
  h. 對敏感代碼要測試其效能(可能需要描述代碼路徑及對資料庫的訪問)
  i. 單元測試需要在開發環境中完成
  j. 修改所有可翻譯的程式碼片段,確保其正確

2. 單元測試的流程?

  設計文檔--設計單元測試--建立/修改代碼和相關文檔--對新開發代碼或者修改代碼進行單元測試--代碼審核--整合到代碼存放庫

3. 單元測試開始的標誌?

當接收到一份新的設計文檔或者一個缺陷後,就需要開始考慮單元測試了。

4. 單元測試結束的標誌?

程式碼完成,解決了已知的問題或已提出解決遺留問題的下一步計劃,且經過代碼審核及執行通過單元測試後整合至代碼存放庫中。

5. 審核單元測試報告:

  手動的單元測試報告需要有詳細的步驟,包括使用到的資料集
  自動化的單元測試報告不僅要有運行結果,還要給出描述,說明這一組單元測試所測的是哪一部分代碼

接下來瞭解下測試驅動開發(TDD)

TDD每次針對一個很小的功能點,通常是小到一個單獨的方法。

1. TDD流程:

  a. 在實現新功能之前,先考慮代碼的使用需求(包括功能、過程、介面等),為其編寫測試代碼
  b. 讓新寫的測試代碼和已有的測試代碼一起運行
  c. 為新功能編寫最少的實現代碼
  d. 再次讓新測試代碼和已有的測試代碼一起運行,根據運行結果修改實現代碼,直到測試全部通過
  e. 在此過程中,積極地對待代碼重構,使底層設計和實現更加最佳化,使介面更加簡單
  f. 重複以上步驟

對TDD的總結:設計代碼-->編寫代碼-->代碼不可運行-->可運行-->重構

2. TDD的目的?

不是為了驗證代碼的實現,而是為了描述一段代碼的用途和用法的設計規格說明,這種描述是無二義的,是可執行驗證的。

3. TDD的優勢在哪裡?

  TDD要求測試優先,因此可以使得代碼天生具有可測性,也因此保證了幾乎100%的單元測試覆蓋,代碼中的缺陷密度低,有利於更早地發現缺陷,方便調試。
  TDD最大的好處,不是最終得到單元測試資產,也不是使單元測試全部通過,而是通過不斷對代碼進行重構,而最終從設計層面對代碼做出改進。

4. TDD與敏捷開發的關係總結:

 

軟體測試之單元測試:開發人員的測試

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.