第一部分:
C++ Test是Parasoft公司出品的一個針對C/C++源代碼進行自動化單元測試的工具。它可以對源代碼進行三種測試:白盒測試、黑盒測試以及回歸功能測試。
白盒測試
C++ Test對C/C++源代碼進行分析,針對所有的類的成員函數(包括:公共的、保護的以及私有類型的)進行測試。測試的方法是判斷當輸入一個非法的參數時,有關函數能否正確處理。(Record命令)在此狀態下軟件針對指定的文件、類或者是函數自動生成測試用例。
黑盒測試
不僅對源代碼進行分析,並且只針對類的公共接口函數進行測試。(Play命令)
在此狀態下軟件不自動生成測試用例,而是直接運行在"測試用例編輯器"中當前已有的測試用例(手工添加的)。
回歸功測試
在修改源代碼后用原有的測試用例進行重新測試。(Play命令)
建議在實際使用中首先用Record命令執行一遍白盒測試,讓軟件根據函數自動生成相應的測試用例,然后再根據需要手工添加一些測試用例,最后再通過Play命令執行一遍黑盒測試。
示例一
假設我們要測試如下一個類的成員函數:int mode2(int nParam),則在進行白盒測試時軟件會自動為我們生成如下6個測試用例:
nParam = 1, 0, -1, 2147483647, -2147483647, 230
可以看出,軟件測試用例的生成主要還是測試一些邊界值,例如最大值、最小值、0等。
示例二
假設我們要測試如下一個類的成員函數:void strcpy(char* dest, char const * src),則軟件會自動生成如下9個測試用例:
(1) dest = NULL, src = NULL
(2) dest = "yPqKIJ!u_", src = NULL
(3) dest = "", src = NULL
(4) dest = NULL, src = "h)zn9b"
(5) dest = "BsmC,/i=zI6CT}pX", src = "HcI{BeP(J"
(6) dest = "", src = "% i?~TnON"
(7) dest = NULL, src = ""
(8) dest = "($MN<n;^", src = ""
(9) dest = "", src = ""
可見,如果我們的代碼在實現時沒有對各種可能情況(尤其是邊界條件)進行特殊處理的話,則通過C++Test可以方便地發現這些潛在的問題。此外,對於一些特殊的測試情況,我們還可以手工創建測試用例。此外,采用C++ Test也可以幫助我們檢查程序的編碼情況,判斷是否嚴格按編碼規范進行開發。
使用
C++ Test的使用比較簡單,即可以針對一個VC工程進行全面的測試,也可以一次只對一個C/C++源文件進行測試。
在試用中發現,如果項目比較大時,最好不要直接對一個工程進行自動測試,而應按文件一個一個地測試,否則可會會導致程序死掉。由於其是采用JAVA技術開發的,所以在使用時最好使用運算速度較快的機器。
第二部分:
C++Test是一個C/C++單元級測試工具,自動測試C/C++類、函數或部件,而不需要編寫測試用例、測試驅動程序或樁調用代碼。C++Test能夠自動測試代碼構造(白盒測試)、測試代碼的功能性(黑盒測試)和維護代碼的完整性(回歸測試)。C++Test是一個易於使用的產品,能夠適應任何開發生命周期。通過將C++Test集成到開發過程中,您能夠有效地防止軟件錯誤,提高代碼的穩定性,並自動化地實現單元測試(這是極端編程過程的基礎)。
著名測試專家Boris Beizer博士認為:"軟件開發歷史上最臭名昭彰的錯誤都是單元錯誤--即通過適當的單元測試可以發現的錯誤。" 他引證了Voyager的錯誤(將探測器發送到太陽)、AT&T和DCS的錯誤(曾造成美國三分之一的電話癱瘓)以及Intel奔騰芯片錯誤,都能夠通過全面的單元測試排除掉。
C++Test進行的測試類型有:自動化測試代碼構造(白盒測試)、自動化測試代碼的功能性(黑盒測試)和自動化測試代碼更新以維護代碼的完整性(回歸測試)。
圖01. Parasoft C++test工具條直接嵌入到Visual Studio環境下使用
圖02. Parasoft C++test運行界面
1. 自動建立測試驅動和樁函數
C++Test自動建立一個測試驅動程序,其設計目標是極大化類的測試覆蓋性和錯誤檢測。為類建立測試驅動,你只要簡單地打開這個類,然后按Build Test鍵。C++Test將自動建立測試驅動程序。
另外,如果被測的方法需要調用當時還不存在或無法訪問的函數,C++Test能夠自動生成樁函數;這樣能夠測試與外部資源操作的交互作用和不包含任何隱藏的弱點。C++Test不是實際調用這些函數,而是調用樁函數並返回樁函數提供的值。如果你需要控制使用的返回值,你可以建立一個樁調用表,生命輸入/輸出的關系。
你還能加入用戶定義的樁函數。例如,如果你要使用原始的函數,且該函數定義在不同的文件中;或者你想要仿真原始函數的行為,而用一個簡單的函數替代它
自動生成C/C++類的測試驅動程序和樁函數的能力是C++Test所獨有的;只有C++Test能夠自動測試C/C++類(一當它能夠編譯時),而不需要用戶的任何干預。使得你能夠盡快地自動檢測代碼錯誤,以最容易、最省錢和最快速的方法找到和修正它們。如果沒有這樣的自動化工具,大量的時間和資源消耗將失去單元測試的潛在好處和現實意義。
2. 靜態測試
C++Test內嵌了業界最出名的Effective C++(epcc)、More Effective C++(mepcc)、meyer-klaus(mk)以及Universal Code Standard(ucs)等超過700條的C/C++規范,用戶自己還能自定義規范。同時,它也集成了由parasoft累積出來的一些規范。靜態測試中,C++Test會對代碼進行詳盡的掃描,驗證代碼中是否存在和這些規范相沖突的地方,盡快的發現一些簡單或低級錯誤,避免由它們帶來的集成擴散。
3. 白盒測試
C++Test提供了一種有效並且高效的方法執行白盒測試。C++Test完全自動執行所有的白盒測試過程,自動生成和執行精心設計的測試用例。自動標記任何運行失敗,並以一種簡單的圖示化結構顯示。然后自動保存這些測試用例,能夠方便地用於以后的回歸測試。
由於C++Test能夠自動生成樁函數,或允許你加入自己的樁函數,因此它能夠測試引用外部對象的類。換句話說,C++Test能夠運行任何一個或一組類,並自動生成和執行一組測試用例,它們被設計成能夠發現盡可能多的錯誤。
C++Test允許你定制白盒測試用例的生成,和在什么層次上(項目、文件、類或方法)執行測試。
4. 黑盒測試
C++Test通過自動化黑盒測試的大部分操作,減輕了這類測試的負擔。特別是以兩種方法自動化黑盒測試的第一階段--建立測試用例:
· 幫助你設置每個測試用例的結果
你可以簡單地輸入測試用例輸入,然后讓C++Test運行測試用例並自動確定實際的輸出結果。如果結果正確,不需要其它動作。如果結果不正確,你可以輸入預期的輸出結果。這樣比手工輸入每個測試用例的結果更快更容易。
· 自動生成測試用例的核心集合
C++Test自動設計了一組廣譜的白盒測試用例。當使用這些測試用例在黑盒測試時,你只需簡單地觀察實際的輸出結果,然后對任何不正確的結果輸入預期的值。
當你需要輸入或修改測試用例時,你可以在C++Test自動生成的測試用例框架種簡單地鍵入相應的值。這將顯著地加快建立測試用例的過程。
在自動化建立黑盒測試用例的大多數步驟之外,C++Test完全自動化余下的黑盒測試步驟。按一個鍵,你能夠對項目、文件、類或方法運行一個或一組。C++Test然后自動執行所有的測試用例,報告所有的輸入/輸出關系,並標記任何實際輸出與預期不一致或導致程序崩潰的測試用例。
5. 回歸測試
C++Test完全自動化與回歸測試有關的所有步驟。C++Test首次測試某個類時,自動保存其測試和測試參數。當需要執行回歸測試時,你可以打開合適的項目和文件,運行所有原來的白盒和黑盒測試用例;C++Test會自動運行完全相同的測試用例和測試參數,並告之發現的任何問題。這意味着你能夠立即知道修改是否引入了任何錯誤。
6. 監視測試覆蓋性
為了幫助你測量當前使用的測試用例集合的有效性,並且給你提供達到盡可能高的覆蓋性的信息,C++Test自動監視測試覆蓋性。
C++Test實時跟試覆蓋性,然后建立一個綜合測試覆蓋性報告。覆蓋性窗口圖示化地說明了當前正在被執行的代碼行,已執行過的行和每行的執行次數。因此,它不僅指出了一個代碼行是否被測試過,而且說明了被測試的有多徹底。這些信息對於確定那些代碼需要追加測試是非常有幫助的。
產品版本與系統要求說明
目前C++test有三個版本:C++test專業版,C++test架構師版和C++test服務器版,點擊這里察看詳細說明。
系統要求:
- Windows
- Windows NT, Windows 2000, or Windows XP
- One of the following compilers: Microsoft? Visual C++? 6.0, .NET?, .NET ? 2003, or 2005; GCC 2.95.x, 3.2.x, 3.3.x, or 3.4.x; Green Hills MULTI for Windows x86 Native v4.0.1
- Pentium class processor 800MHz
- 512 MB RAM (1 G recommended)
- 150 MB free disk space for C++test installation
- Additional disk space for C++test projects data
- UNIX
- Linux Red Hat kernel 2.4 (with System V IPC) or higher with glibc 2.2 or higher and an x86-compatible processor OR Solaris 7, 8, 9 and an UltraSPARC processor
- One of the following compilers:
- Linux: GCC 2.95x, 3.2.x, 3.3.x, 3.4.x , or 4.0.x
- Solaris: GCC 2.95x, 3.2.x, 3.3.x, 3.4.x, or 4.0.x; Sun? C++ 5.3? (Sun Forte C++ 6 Update 2), Sun? C++ 5.5? (Sun ONE Studio 8), Sun? C++ 5.6? (Sun ONE Studio 9), Sun? C++ 5.7? (Sun ONE Studio 10), or Sun? C++ 5.8? (Sun ONE Studio 11); Green Hills MULTI for SPARC Solaris Native v4.0.1
- 512 MB RAM (1 G recommended)
- 150 MB free disk space for C++test installation
- Additional disk space for C++test projects data