【第158期 November 5, 2010】
 

研發新視界

Visual Studio 2010 測試新視野

作者/林哲正

[發表日期:2010/10/22]



Visual Studio簡介

Visual Studio是微軟於2010年4月開始販售的一套工具軟體,繁體中文版於2010年7月在台灣正式上架。主要訴求對象為進行.NET軟體開發工作的軟體開發人員,以及針對.NET程式進行各種測試工作的測試人員。與Visual Studio同時上市的還有讓專案管理者使用的新版軟體流程管理工具Team Foundation Server(TFS) 2010、適合前端介面設計人員使用的Expression Blend 4。

在台灣,網路應用程式或單機應用程式,甚至到現在的Web Service、Rich Client Application、雲端應用程式,Java與.NET的軟體開發以儼然成為兩大主流。兩大主流的開發工具也不斷演進,all-in-one哲學的Visual Studio更將觸角從程式開發人員慢慢伸到了各種不同的專案角色,讓使用.NET Framework開發的專案,所有成員均可使用同一套工具,完成各自的專案任務。

本文旨在探討Visual Studio 2010 Ultimate版本所提供的測試新功能,以及與TFS軟體流程管理工具的整合,是否可以減輕測試人員(或軟體工程師)的負擔、保證軟體產物的品質、降低軟體開發的成本以及改善軟體流程的時程。

測試 - 軟體開發流程中不可或缺的環節

任何軟體專案,如果沒有進行任何測試,是不會有任何客戶願意驗收的。軟體在開發的過程中,可能發生的問題包含規格設計錯誤、軟體元件撰寫時發生的錯誤、各軟體元件協同運作時出現預期之外的結果、軟體效能不如預期、使用者介面不友善、不容易維護、擴充性與重用能力不佳等情況。因此,軟體在交付以前,必須保證軟體功能的正確性、有良好的容錯能力以及合乎規格的效能。

Roger S. Pressmen於Software Engineering一書 (註1)中所描述,軟體修正的效率可由此公式進行試算:

假設DRE是軟體修正的效率、Ei是在軟體開發階段i發現的錯誤數量,則:



由此公式我們可以得知,如果一個錯誤在同一個階段被發現並修正的話,可以得到最佳的修正效率。但如果錯誤並不是在同一個階段被發現且修正的話,該錯誤修正的效率將會漸進式的降低,修正錯誤的成本將會更高。一個設計錯誤的修正期望值在軟體開發各階段的修正成本比例是:1(程式開發前): 6.5(程式開發中): 15(系統測試時): 60(軟體交付後) (註2),因此一個錯誤如果沒有在當下被發現且解決的話,付出的成本最糟糕的話,會是當下發現的60倍之多!

因此讓在軟體專案開發的每個過程中都進行測試是相當重要的。下圖是一個廣為人知的W model,說明了軟體設計與軟體測試的時機 (註3)


《圖一》W model


在程式撰寫階段前的各階段,除了提出需求分析文件、系統設計文件之外,還必須提交審核並撰寫驗收測試計畫書、系統測試計畫書與整合測試計畫書,未來測試人員根據此計畫書進行測試。測試內容部分會含括:

一、單元測試:

以Class為單位,這種測試是軟體專案測試的最小單位,檢查Class在各狀態下的參數值是否正確、方法執行結果是否正確。單元測試是否有效的標竿為測試程式碼涵蓋率是否達到組織所規定的標準。

二、功能性測試:

以功能為單位,測試軟體是否可以正確提供規格書所定義的功能,並確保前端內容是否經過檢核、輸入正確值是否會出現系統異常等。此類測試會包含整合測試與前端UI功能測試。

三、非功能性測試:

包含了檢查軟體本身的安全強度、容錯能力、日誌完整性、延展性、可維護性、可讀性、錯誤回復能力等。此類測試會包含程式碼分析與程式碼度量。

四、回歸測試:

當軟體進行改版、增加新功能或解決Bug後,測試人員除針對新功能進行測試外,還需將可能會受影響的功能模組重新進行測試。這種重新測試的過程稱之為回歸測試。

五、壓力測試:

軟體完成後,正式釋出前必須先測試軟體的最大負載量,在系統穩定的前提下,最多可同時乘載的使用者數量或程序數,並檢查是否在軟體規格書所規定的標準範圍內。

六、效能測試:

軟體完成後,正式釋出前必須先測試軟體於尖峰狀況時的反應時間,是否在軟體規格書所規定的標準範圍內。

Visual Studio提供的測試能力

Visual Studio基本上提供了單元測試、UI測試、負載測試、程式碼度量等主要測試功能。輔以程式碼涵蓋率分析測試程式的涵蓋範圍。下文將分別說明這幾項功能。

一、單元測試:

在.NET中,可透過Visual Studio 2010針對所開發的.NET專案產生一個測試專案。測試專案透過剖析現有專案的程式碼,自動產生單元測試程式碼框架。框架會包含呼叫類別的建構式、呼叫類別的每個函式、取得及設定類別的成員。單元測試人員再針對自動產生的程式碼進行編修,包含建構式的參數、物件初始值、方法的傳入參數以及期望的結果。下列各圖為單元測試程式編寫範例。


《圖二》單元測試案例1:檢查物件生成是否成功



《圖三》單元測試案例2:檢查類別的方法是否傳回正確值



《圖四》 單元測試案例3:檢查物件成員的內容是否正確


執行測試後,Visual Studio會產生測試結果。若測試失敗,測試人員可從Visual Studio所產生的失敗原因進行分析,確認是測試程式碼寫錯或是專案程式產出了錯誤的結果。

為確保單元測試的程式碼是可信任的,Visual Studio可以進行程式碼涵蓋範圍分析。分析完成後會將未涵蓋的程式碼標注出來,以便測試人員進行單元測試程式碼進行補強。

二、自動化UI功能測試:

Visual Studio 2010中包含了Test Manager功能。透過此功能,測試人員可以錄製使用者操作,進行快速地反覆測試。測試人員透過Test Manager建立測試步驟,並進行錄製。步驟可以設定為共用,比方說「開啟應用程式」、「關閉應用程式」步驟是所有UI功能測試的第一步,只要設定為共用就不必在每個測試內容中都錄製此步驟。測試的過程全程都可以錄製成影片檔,當測試人員發現程式的Bug時,程式設計人員可以透過影片檔檢視測試人員的詳細執行步驟。

三、負載測試:

測試人員在Visual Studio測試專案中新增負載測試後可以選擇負載測試的情節以及模擬使用者的考慮時間、設定負載模式為常數分布或是自訂模式為同時多少使用者使用、使用時間、逐步增加使用者以及加入使用者的上限。接著選擇測試混合模式,是否要讓所有模擬使用者都執行完同一動作後在同時進行下個步驟或是其他模式。Visual Studio整合Windows的效能計數器,在測試完成後,測試人員可以透過效能計數器的結果觀看處理器、記憶體、硬碟的使用量,並且查出哪一個步驟最耗主機資源,專案人員就可以針對此測試內容進行效能改進。

四、軟體品質管理:

測試主要的目的是讓軟體的品質變得更好、問題變得更少。測試工具的使用主要的目的是為了減輕測試成員的負擔。除了上一章所述的測試功能外,不得不提的是程式碼分析與程式碼度量兩項功能。程式碼分析主要是用來檢測程式人員在撰寫程式的時候不容易注意到的問題,專案經理可以自行從程式碼分析規則集中評估適用於專案的規則,並讓程式人員在撰寫完程式後進行程式碼分析。程式碼度量是讓測試人員針對純C#、VB的程式內容進行度量,度量的結果包含可維護性指數、循環複雜度、繼承深度、類別結合程度以及程式碼行數。除了可維護性指數外,其餘數值都是越小越好。專案經理可以在專案中定義門檻值,要求程式人員撰寫程式的度量結果必須在專案經理所定義的門檻值之上。

結語

總括前述,Visual Studio在這一版針對測試提供了相當多的功能,包含單元測試、UI測試、負載測試等,並且可以與Visual Studio Team Foundation Server結合,進行程式碼版本控管以及軟體專案控管。

以台灣的軟體生態來看,專案成員的編制很少特別有單獨測試目的的測試人員,通常都由專案經理與系統分析師進行需求確認、進行軟體規格定製、系統分析師與系統設計師進行軟體測試、由系統設計師設計系統與程式開發,可以說是一人分飾多角。在每種角色都需要包山包海的情況下,工具的輔助可以減少專案成員的負擔。在專案範圍廣、軟體品質要求高、專案成員人數又少、每個成員的負擔都不輕的時候,使用Visual Studio是個不錯的選擇。

參考資料

註1.Pressman, Roger S. Software Engineering: a practitioner's approach. -5th ed. p.98. s.l. : McGraw-Hill, 2001. ISBN 0073655783.

註2.RothmanJohanna. What Does It Cost You To Fix A Defect? And Why Should You Care? Rothman Consulting Group. Inc. [線上] Rothman Consulting Group. Inc. http://www.jrothman.com/Papers/Costtofixdefect.html#1.

註3.The W-Model. [線上] http://www.gerrardconsulting.com/?q=node/531.