什麽是單元測試?

“單元測試”通常又被稱為(wèi)“白盒測試”,這些概念雖然在測試對象和(hé)方法的(de)定義上,業內(nèi)可(kě)能存在略有差異的(de)理(lǐ)解方式,但它們并沒有本質的(de)區别。單元測試,就是對軟件中最小可(kě)測單元或單元之間的(de)邏輯關系所做(zuò)的(de)測試和(hé)驗證。比如(rú)對C/C++代碼中的(de)一(yī)個函數、類或是少數函數組成的(de)一(yī)個集合,抑或是一(yī)個小的(de)功能模塊的(de)測試,通常都可(kě)以歸為(wèi)單元測試的(de)範疇。 

單元測試通過為(wèi)被測單元設計輸入參數,并驗證其執行後的(de)輸出值、關聯值或執行過程來驗證被測對象的(de)堅固性(魯棒性)和(hé)正确性。堅固性取決于被測單元在各種類型或極端輸入條件下運行正常與否;正确性則是通過判定代碼的(de)運行邏輯是否符合原本的(de)設計需求來驗證。單元測試的(de)效果依賴于測試用例,也就是外部輸入參數是否合理(lǐ)、充分,而這些輸入參數主要需要測試人員根據被測單元的(de)業務邏輯需求來設計,所以并不存在萬能的(de)“銀子(zǐ)彈”代替所有單元測試的(de)工作。

    • 對單個函數的(de)單元測試。根據函數的(de)設計需求,來設計輸入值、樁函數和(hé)全局變量等相關的(de)外部輸入條件,在測試執行完成後判定實際的(de)輸出值是否符合預定的(de)期望值,以此作為(wèi)單元測試用例通過與否的(de)依據。如(rú)下圖所示:

    • 對多個單元的(de)測試,也可(kě)以理(lǐ)解為(wèi)單元之間的(de)集成測試,因為(wèi)其測試對象仍然集中于底層函數級别,也是單元測試工作中常見的(de)測試場景。對多個單元的(de)測試可(kě)以驗證多個單元連續調用執行之後的(de)輸出值,也可(kě)以用來測試多個單元之間的(de)相互依賴邏輯。

單元測試-1

為(wèi)什麽要做(zuò)單元測試?

因為(wèi)傳統的(de)系統功能測試(又稱“黑盒測試”),由于系統集成後的(de)複雜性,在有限的(de)時間內(nèi)無法充分地(dì)對軟件內(nèi)部的(de)分支、模塊及模塊之間的(de)錯誤進行檢測,并且由于系統測試階段的(de)bug所需的(de)修複成本往往較高(gāo),所以對于要求高(gāo)可(kě)靠性和(hé)安全性的(de)系統,軟件的(de)測試需要“左移”到項目研發的(de)更早期,對底層的(de)代碼行、函數、類、子(zǐ)模塊進行驗證,以實現對軟件更早、更徹底地(dì)測試。另外,由于早期bug的(de)修複相對容易,項目整體研發成本也得以降低(dī) – 這也就是單元測試初衷。

換言之,單元測試的(de)目的(de)就是為(wèi)了在系統集成之前根據下層需求測試函數或子(zǐ)模塊的(de)bug,以減輕後期系統集成測試的(de)壓力,最終實現對軟件更徹底地(dì)測試,提高(gāo)質量并降低(dī)成本。

殊途同歸,關于功能安全ASIL, SIL認證标準,如(rú)ISO 26262, IEC 61508, EN 50128, IEC 62304, 或是GJB-5000A等标準明确要求了軟件的(de)研發過程中需要進行單元測試,其出發點也正是為(wèi)了通過強制要求更底層的(de)測試以規避測試不充分可(kě)能導緻的(de)安全風險,保證汽車、工業、軌道(dào)交通、醫療器械和(hé)國防軍工等各類事故容忍度極低(dī)的(de)系統的(de)安全可(kě)靠。

單元測試-2

難點和(hé)挑戰

  • 單元測試耗時耗力。準備測試環境、編寫驅動代碼、設計測試用例、執行結果判定、測試用例的(de)管理(lǐ)、回歸和(hé)覆蓋率分析等每一(yī)步都需要繁瑣的(de)工作,對于一(yī)個包含幾百甚至幾千乃至上萬個函數單元的(de)工程來說,人工方式嚴格完成單元測試所需要的(de)工作量不亞于整個軟件的(de)開發工作

  • 下層需求文檔和(hé)測試經驗的(de)缺失形成了單元測試實施的(de)門檻。函數級的(de)設計需求文檔不足或不規範的(de)情況,在曆史遺留項目中是非常常見的(de),單元測試全憑少數的(de)測試人員通過解讀代碼來進行會造成測試工作舉步維艱

  • 嵌入式軟件的(de)單元測試因為(wèi)關系到交叉編譯過程,以及對目标機的(de)兼容,準備測試環境和(hé)執行測試用例會更加困難

  • 海量的(de)單元測試用例庫的(de)變更分析、回歸執行和(hé)複用,對測試用例的(de)管理(lǐ)方式有很高(gāo)的(de)要求

  • 單元測試的(de)覆蓋率統計幾乎不可(kě)能通過人工方式完成

解決方案

  • 使用VectorCAST自(zì)動生成的(de)單元測試環境,原生态支持絕大部分主流上位機環境編譯器和(hé)嵌入式交叉編譯器,避免對代碼大幅修改或重構、甚至為(wèi)了測試變更編譯器

  • VectorCAST支持業界領先的(de)智能、自(zì)動地(dì)批量生成單元測試用例,通常可(kě)達50%-80%甚至更高(gāo)的(de)測試覆蓋率

  • 自(zì)動解析代碼結構,提供便捷、多樣化的(de)圖形化測試設計平台,極大簡化單元測試用例設計工作

  • 有機管理(lǐ)單元測試用例,讓測試用例的(de)協作、維護和(hé)複用變得非常容易

  • VectorCAST提供豐富的(de)第三方集成,無縫集成開發過程上下遊的(de)研發工具鏈和(hé)管理(lǐ)平台,如(rú)需求管理(lǐ)、持續集成、模型開發和(hé)靜态分析工具等

  • 真正的(de)嵌入式的(de)單元測試,測試用例無縫集成到嵌入式目标闆或模拟器上運行

  • 多種報告形式,滿足單元測試不同的(de)使用場景和(hé)第三方認證審計需求

相關資源

  • 白皮書

  • 博客

  • 新聞資訊

  • 修複和(hé)預防Bug的(de)成本量化對比_白皮書

    點擊下載

  • 如(rú)何評估嵌入式軟件測試工具_白皮書

    點擊下載

  • 如(rú)何開發高(gāo)質量的(de)軟件_白皮書

    點擊下載

  • 利用Wind River VxWorks7實現自(zì)動化軟件測試_白皮書

    點擊下載

  • 基于變更的(de)測試_白皮書

    點擊下載

  • 故障注入和(hé)多維度白盒測試_白皮書

    點擊下載

  • 2015軟件測試技術報告_白皮書

    點擊下載

  • 如(rú)何滿足IEC 61508-3 2010标準相關的(de)軟件驗證和(hé)确認要求_白皮書

    點擊下載

RELATED RESOURCES

下載申請

是否需要技術支持

驗證碼

溫馨提示:

我們将通過電子(zǐ)郵件向您發送下載地(dì)址,請核對您填寫的(de)工作郵箱是否正确。

提 交