程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 解讀C++單元測試種種錯誤方法說明

解讀C++單元測試種種錯誤方法說明

編輯:C++入門知識

C++單元測試本身是一個標准,各種實現之間有區別,對標准的理解、執行程度也不同。而C#、Java語言是由商業公司掌握的,在這方面很少有問題,但是看完了本篇文章你會有許多意想不到的東西啊。

一、 單元測試能幫助客戶更准更全面地找到錯誤,顯著提高軟件質量
上圖顯示了一個包含許多對象的應用程序的測試模型,大橢圓表示應用程序,小橢圓表示對象,箭
頭表示用戶輸入,紅星表示潛在的錯誤。

在集成測試中為了發現錯誤,我們希望通過不斷修改輸入,引發對象間的相互作用使得某對象引發 潛在的錯誤,但這無疑是有難度的。由於其難度,開發人員只能依賴應用軟件的運行失敗來發現錯誤, 這樣不僅很難找到錯誤發生的准確位置,而且實際上還有大量的類沒有得到測試。

C++單元測試提供了一種更有效的發現錯誤的方法,它將應用程序中的最小單元分離開,使得測試更接近錯誤,只要簡單地對每個最小單元進行獨立測試,就很容易地使全面准確地找到所有的程序錯誤成 為可能。

單元測試能夠在改善軟件質量的同時大量削減開發時間和成本
由於在較高的層次上修改一個類可能會改變多個程序部件的設計和功能性,因此越遲發現問題,通
◆常就要修改越多的代碼。當修改的代碼量增加時,其他兩個因素也會隨之增加:
◆修改每一個錯誤所需的時間和費用  在代碼中引入新的錯誤的機會

一次又一次的研究證明,隨著問題被檢測出來的時間的推遲,發現軟件錯誤所需的時間和成本會驚 人地增加。C++單元測試由於能夠更容易地找到錯誤,就會減少發現它們的時間和資源。 其次,由於你每完一個類,就能發現和改正其中的錯誤,你就不需要在以後花費大量時間重新了解和摸索。

最後,最重要的理由是由於類的相互作用和關聯性,在單元級修改一個類只會影響到原始的類,避 免了各個單元間的相互作用引發新的錯誤。因此單元測試能保證大大削減開發的時間和成本。

  • 高級程序員對C++程序說明操作
  • 淺析Visual C++兩套完整的Windows應用程
  • 探索豐富多彩的C++技術內幕手記
  • 深度剖析C++代碼編制和語句序列介紹
  • 漫談在Visual C++環境下進行編程

基於上述信息,單元測試看上去就象一劑萬能藥 如果是這樣的話,為什麼每一個 C/C++開發人員 不馬上對每一個類進行單元測試?就目前可以使用的技術來說,對 C/C++的單元測試是一件困難、煩瑣 和耗時的事情,沒有很好的工具來自動化這一過程,使得許多 C/C++開發人員望而生畏。

執行C++單元測試的第一步是是目標類變得可測。這需要兩個工作:
◆設計一個運行目標類的測試驅動程序
◆設計樁函數,它們為被測類所引用的任何外部資源返回值 建立一個測試驅動,需要建立一個新的類,除了C++單元測試原始類以外它不能用於任何其它目的。測試驅 動應該具有下列特性:
◆一個指定設置和清除的標准方式
◆一個選擇個別測試和所有有效測試的方法
◆一個分析輸出的預期或非預期)結果的機制
◆一個標准的錯誤報告形式

為了充分而正確地測試類,你需要設計一個能夠完全檢查被測類的測試驅動;若干次修改和重寫這 樣一個測試驅動是免不了的。一旦建立了測試驅動,你必須仔細檢查它不能包含任何錯誤。C++單元測試驅動中 的一個錯誤會破壞這個測試,但是你無法單獨測試一個類,你也不能測試測試驅動本身。

如果你的類引用任何還沒有准備好或不可訪問的外部資源如外部文件、數據庫和 CORBA 對象等),你必須建立相應的樁函數,它們的返回值類似於這些實際的外部資源應該返回的。

當建立這些樁函數時,你需要選擇樁函數的返回值,它們將影響程序的執行路徑:
◆為了測試類的功能性必須執行任何的路徑
◆足夠的路徑能夠提供徹底的測試覆蓋性

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved