基本介紹
- 中文名:Visual Unit 2
- 簡稱:VU
為什麼要進行單元測試?
測試是保證軟體產品質量的基本手段,單元測試就是將代碼單元與其他代碼隔離進行測試,相當於電視機工廠對元器件的測試。軟體單元測試可能比電視機的元器件測試有更高必要性和價值,因為代碼單元是人工編寫的,"故障率"更高,軟體複雜度通常也更高,導致在集成後查找代碼錯誤的單位成本也高得多。
單元測試為什麼難於實施?
工廠在組裝電視機前都會對元器件進行測試,這是保證質量減少後續測試成本的最好選擇,但很多軟體開發企業都沒有實施單元測試,為什麼?成本太高或耗時太多工期不允許,成本高或耗時多的原因之一,是缺少測試效果好測試效率高的單元測試工具。
傳統的單元測試工具大致分為兩類:手工類和自動類,自動類使用自動靜態分析和自動生成測試用例進行動態測試,只能發現有特徵錯誤,而有特徵錯誤一般不會超過20%,大多數代碼錯誤都是自動系列無法發現的;手工類理論上可能發現所有錯誤,但要人工編寫測試代碼,耗費時間一般是編碼時間的一倍到幾倍。有些自動單元測試工具也提供手工方法,當然也要面對手工方法耗時多的問題。即使不考慮價格,由於自動類的測試效果遠不能滿足需要,更多企業還是選擇手工類,投入編碼時間的一至幾倍來進行單元測試,不但成本高昂,而且常常難於實施。
Visual Unit介紹
經過五年的研發,我們創新了單元測試理論,找出了一套既保證測試效果又具有很高效率的方法,並完整地實現了這套方法,開發出新一代單元測試工具Visual Unit。
Visual Unit 1.0於2005年8月底公開測試,10月初發布1.0正式版。V2.0是在V1.0大量套用的基礎上,完全重新設計的版本。
評價單元測試工具的套用價值,主要有幾個指標:可用性、測試效果、測試效率,開發效率。
可用性:高度耦合的代碼難於分割測試一直是單元測試的主要難點,VU2具有完善的樁功能,包括:補齊(自動生成未定義符號)、隔離(自動生成樁代碼替換底層代碼)、控制(在用例中隨意控制底層代碼的行為),從開始編碼到升級維護的各個階段,均可對任意層次、範圍的代碼實施分割測試,對被測試代碼完全沒有可測性要求。
測試效果:測試效果通常用白盒覆蓋率來衡量,Visual Unit獨有的"基於現有用例找出遺漏用例"的技術,可以輕鬆實現100%的語句、條件、分支、路徑覆蓋。這裡說的是"實現"這些覆蓋,而不僅僅是"統計"出覆蓋率,僅僅統計出覆蓋率意義並不太大,剩餘的往往是最難的,沒有自動工具的支持,找出遺漏用例是很困難的。
測試效率:自動生成測試代碼和用例框架;功能強大的用例編輯器可快速建立用例集;無需編寫代碼即可隨意控制底層代碼行為;使用用例設計器高效找出遺漏用例;自動生成邊界測試用例。能自動化的都已自動化,人的工作量已壓縮到最低限度,保證了測試效率。
開發效率:VU還為高效開發調試提供支持。編碼過程中,自動同步更新,隨時可以執行測試;自動顯示輸入輸出數據,可用簡單語法輸出任意中間變數、表達式的值,自動顯示代碼執行狀況,使程式行為一目了然,幫助整理和驗證編程思維,並能快速排除錯誤;增強調試器功能,包括:可視化選擇調試輸入、自動中斷、無限制重複或後退、調試過程中切換除入。無需增加工作時間和勞動強度,在原來用於編碼的時間內可以同時完成編碼和基本單元測試。
從"樁控制"功能看VU2的技術領先地位
VU的多數功能皆為獨有,難於與其他工具一對一比較,但"樁控制"在VU之前就具有成熟的技術,很多單元測試工具都已實現此功能,還有專門產品,因此可以作為判斷VU技術地位的一個參考點。"樁控制",或者Stub、Mock,目的都差不多,都是在用例中控制底層代碼的行為,即在底層代碼未實現、被隔離、或不符合測試要求時,通過一定的技術手段模擬底層代碼的行為。對於VU來說,"樁控制"是一個重要功能,但只是一個三級功能(用例編輯器下的用例助手下的一個功能),僅僅這一個功能,就具有多項重要的技術進步:
不需要編寫代碼;
多次調用同一子函式可以分別設定不同的行為,例如,指定返回1,2,3,4,那么子函式第一次執行返回1,第二次執行返回2…;
自動判斷子函式是否被調用和調用次數(在自動控制等領域具有重要價值);
可以禁止樁控制,改為調用實際代碼(只需重設一下選項)。
VU2部分功能清單
具有完善的樁功能,包括:補齊、隔離、控制,從開始編碼到升級維護的各個階段,均可對任意層次、範圍的代碼實施分割測試;
自動生成測試代碼和用例框架;
可視化編輯測試用例,用簡單語法判斷各種輸出,還可自動判斷中間變數;
自動統計語句、條件、分支、路徑覆蓋;
顯示參數、成員變數、返回值等輸入輸出數據;
顯示每個用例所執行的代碼;
自動畫出邏輯結構圖,顯示每個用例的執行路徑;
顯示邏輯結構圖中任一語句塊、分支、分支結構、路徑的代碼;
邏輯結構圖可自由裁剪,語句塊、分支、分支結構、路徑均可刪除/恢復;
用例設計器可輕鬆找出遺漏用例,實現100%的語句、條件、分支、路徑覆蓋;
自動描述程式行為,幫助整理、驗證編程思路,提高編程效率,快速排除程式錯誤;
增強調試器功能,自動支持後退、重複、可視化選擇輸入、調試中切換輸入;
自動生成HTML格式的測試報告。