Visual Studio 2010 Ultimate ─ 軟體品質與團隊效率(3)
文/胡百敬
軟體是許多「個人」長期構思,協同作業下的成果,很難不出錯。若沒有配置相當的人力、物力資源,分階段把關測試,將隨著系統規模漸大而逐漸失去控制,最好早期測試與修正錯誤或偏差,驗證功能與概念,確保細項品質,再深化程式開發。
軟體生命週期中,大分有分析、設計、開發、測試、上線、維護、更版等階段,任何階段的工作與產出皆有可能出錯。越晚發現問題,修正錯誤所付出的代價越大,甚至變成無法解決的錯誤。因此,「以測試驅動開發(Test-Driven Development TDD)」方法論提倡:在分析的初始,應該就同時撰寫測試案例(Test Case)。
亦即以測試來驗證對需求的了解程度,同時驗證程式碼的正確性。在如何開發與如何驗證的雙向思辯下,會更了解問題,並規範接下去的設計與開發不至於偏離。也就是在分析時期,要撰寫如何測試,以確認是否符合使用者需求的文件。
軟體測試概念
在設計時期,要提出模組與架構間整合測試的方式,以確認架構與介面定義的正確性。而在開發時期,同時撰寫單元測試(Unit Test),以驗證個別程式碼的正確性。稍有功能後,便能展開手動測試,以及其後一連串用途不同的測試。
同時,說明文件的正確性也要一並測試。讓V&V(Verification and Validation)的精神貫穿整個開發過程,時時驗證(Verification)是在做使用者需要的產品,並確認(Validation)事情做對了。
而測試目的,除了上述開發流程中的配套作業外,尚有整合、安全、壓力、容錯等測試。廣義而言,你還需要測試使用者的專業能力(或許使用者的無知,是系統損毀、安全疑慮的最大來源),系統災難復原的能力、隨著軟硬體迭代更新的相容性等。
當軟體系統架構越來越大,尤其邁向雲端後,每行程式碼、每個函數、模組、功能更形渺小,但組合成龐大應用程式,7天24小時地提供服務。這意味者每段程式碼需更正確、穩固,換句話說,前述在開發系統的各個環節中,配合各種不同類型的測試,以確保品質且符合需求將更形重要。
然而,現今開發團隊中,常常是開發工程師兼做測試,根本未有專業的測試工程師,這會有盲點。測試者和開發者完成工作的方式不同,測試者測情境,開發者測程式碼;測試者愛找蟲,開發者痛恨找到蟲;測試者想使用者如何工作,開發者想程式碼如何工作。
測試工程師需要站在使用者的立場,選擇適合的軟體工具,建構獨立的測試環境,並能寫作腳本語言、整合軟硬體平台,協調開發人員,同時在人格特質上喜歡找問題,挑毛病。這其實與軟體開發工程師喜歡堆積木、循規蹈矩、依需求無中生有創造系統的特質不同。易言之,若注重軟體品質,就需要有獨立的測試工程師與團隊。
在定出軟體測試的流程後,若沒有強悍、整合、易上手且自動化的工具程式,則推廣的結果可能流於空談,畢竟測試是一再重複的流程,還需填寫大部分內容近似的報告或電子郵件。一再做相同的事會變得枯燥、輕忽。
然而,測試者應專注於找蟲,而非耗在重複執行與撰寫測試報告。測試者應有技巧、富創意、高效率地找潛在的蟲,讓「獵蟲」的悸動令測試者有源源不絕的動力。
另外,需強調一點,當今大量的測試皆以手動完成。這不代表測試者沒有好的自動化測試工具。而是手動測試的過程可以讓測試者察覺以往未考慮到的測試案例或情境。若僅以完成測試案例自動化為實做測試重點,測試者將很少時間使用待測產品,而把時間花在製作與維護自動化測試。
自動化測試不可或缺的工具
自動化應該用在重複性工作,而非替代手動測試。自動化測試可能導致虛假的安全感,尤其是當測試結果和涵蓋範圍不對稱,因此,測試的涵蓋面要高,又要易於維護,還要不停地找出新的測試方式,這需要有好的工具輔助。
在今年(2010)微軟最新推出的Visual Studio 2010 Ultimate企業旗艦版,相當強調應用程式的全生命週期管理,也就是ALM(Application Lifecycle Management),它將啟動測試的時程大幅拉前到分析設計時期,一直到系統完成上線,都要進行測試,涵蓋整個開發過程。
藉由專為測試設計的平台架構、管理介面、測試項目,並搭配可提供強大的協同作業能力,期待能解決測試團隊與其他團隊合作間的問題,例如:
●開發人員和測試人員各搞各的,很難溝通,各說各話。
●需求一再改變,應變都來不及,難以做好測試。
●雖測出問題,但開發者不在乎這個缺失。
●關鍵時刻開發人員補正錯失,要能立刻及時完成相關的普遍測試。
●測試人員在相同的測試上花費太長的時間。
●安裝工具太昂貴(時間、授權、人力)。
●在測試環境找到的錯誤,於開發環境無法重製。
接下來將簡述Visual Studio 2010 Ultimate企業旗艦版/TFS 2010版針對測試方面的應用,由於Visual Studio有不同的版本,例如專業版、企業版、Visual Studio Test Professional 2010品管人員版、企業旗艦版等,在此以最完整功能的企業旗艦版為介紹基礎。至於哪些版本才涵蓋哪項功能,請參考微軟網頁:http://www.microsoft.com/visualstudio/zh-tw/products/2010/default.mspx。
測試應用平台的建立
若從設計測試案例到開發測試程式與執行測試,一般依使用的技術,可如圖1分為不同的區間。我們日常70%的測試都發生在手動測試與撰寫腳本語言,而大部分的測試工具則著重在配合豐富地腳本與程式開發技巧,完成完整的自動化測試流程。Visual Studio 2010 Ultimate企業旗艦版已涵蓋圖1中所有的區塊。讓開發者和測試者可以在同一平台環境中,分工合作完成不同階段的測試。
圖 1:不同技術與範圍的測試。
再就其測試的種類而言,Visual Studio Team System自2005年推出第一版以來,持續加強其測試功能,至2010版,其測試功能整體架構如圖2所示。
圖 2:Visual Studio 2010 Ultimate 企業旗艦版所提供的各項測試功能。
圖2中,深色且字體反白的部分即是Visual Studio 2010 Ultimate企業旗艦版所新增的功能,它們分別增強了如下的能力:
●診斷資料收集器:手動測試時,透過各種收集器,例如:錄製執行時期的畫面、程式介面所接收的資料、觸發的事件等,讓測試者容易整理豐富而可處理的bug資訊,開發者則利用這些資訊除錯。
●虛擬實驗室管理:透過管理Hyper-V虛擬機器,容易建置多層次的測試環境,並為測試環境產生快照,讓開發者和測試者可以在相同的環境中驗證。
●測試案例管理:整合的測試案例(Test Case)撰寫與管理環境,連結專案中的其他工作和成果。
●自動程式碼UI測試(Coded UI Test):透過錄製使用者操作應用程式的方式,產生執行測試的 VB.NET/C# 程式碼,以自動與使用者操作介面互動。
●測試執行器(Test Runner):新的執行測試介面,整合測試步驟說明、資料繫結、虛擬機器管理、診斷資料收集器、製做bug report等功能,讓測試者可以較為正確地完成測試,並製作資訊豐富的測試報告。
●自動化build-deploy-test流程:更能控制從開發、程式碼版控(Source Control)到測試的自動化流程。
此外,與測試相關的新增功能還有:
●測試衝擊分析:每次編譯方案(Solution)後,呈現修改的原始碼會影響到哪些測試。
●IntelliTrace:在Visual Studio開發環境的Debug時期,可以呈現執行階段各程式碼的執行狀況,利於追蹤各種例外(Exception)。若是透過「測試執行器(Test Runner)」開的Bug工作項目,會帶 .iTrace檔,透過Visual Studio開啟後,可以直接點選Test Data項目,除了瀏覽相關資訊外,選擇步驟,再選 Start Debugging 按鈕,便可以自動找到對應的程式碼。
測試管理員統一控管
Visual Studio 2010 Ultimate企業旗艦版為測試人員新增了一個管理介面,稱為「測試管理員(Test Manager)」,它以Windows Presentation Foundation寫成。其功能要點如下:
●測試案例管理。
●組織測試計畫、套件(suite)和測試案例。
●整合TFS。
●可追蹤到需求。
從「開始」目錄選取「所有程式」→「Microsoft Visual Studio 2010」→「Microsoft Test Manager 2010」後,可以看到「測試管理員」結合TFS內的Team專案,管理與執行測試相關事宜,如圖3的畫面。
圖3:「測試管理員」結合TFS內的Team專案,管理與執行測試相關事宜。
「測試管理員」有兩個不同的用途「測試中心(Testing Center)」和「實驗室中心(Lab Center)」,如圖4所示。簡而言之,「測試中心」負責管理、設定、設計、執行測試案例和檢視執行結果;「實驗室中心」則負責管理執行測試的實體或虛擬環境。透過圖4上工具列的下拉選單,可在兩種功能模式中切換。
圖4:透過測試管理員工具程式來管理測試案例與測試環境。
測試中心
於測試中心的「計劃」頁籤可以分門別類管理測試專案,並編寫測試專案的步驟,提供執行測試的環境設定後,最後透過新增的「測試執行器(Test Runner)」來執行手動測試。其設計測試案例的方式如圖5所示。
圖5:整合工作項目編寫測試案例內容。
在圖5的下方可以編寫測試步驟,描述手動測試逐步的動作以及期待的結果,若動作描述中帶有「@」符號開頭的變數,則最下方會自動提供賦予變數值的格子,在此填入測試時所需要的變數值。
測試執行器
Visual Studio 2010 Ultimate 企業旗艦版提供單一工具來輔助執行測試的過程,提供執行手動測試當下的步驟導覽,並可藉由錄製的內容和預先賦予的測試資料自動執行重覆測試,同時記載整個測試範圍內系統的各種資訊,提供開發人員所需要的資料以重現錯誤。其功能特色有以下幾點:
●獨立執行的工具。
●執行測試案例。
●蒐集系統資料和事件紀錄。
●擷取靜態畫面或錄製video。
●彙整測試資料,裝訂成新的bug工作項目。
透過測試中心的「測試」頁籤以執行某個測試案例時,「測試管理員」會自動切入「測試執行器」工具,以便於測試者執行手動測試,如圖6所示。
圖6:透過「測試管理員」啟動「測試執行器」工具,以導覽測試者執行手動測試。
經由圖6最上方「測試中心」的「測試」頁籤,於左方樹狀結構點選某個測試套件,右方選擇某個測試案例工作項目後,點選上方工具列的「執行」按鈕,就會叫起「測試管理員」。執行完成每一個步驟後,可以透過圖6下左方的「測試管理員」中檢視。
各步驟最右方的下拉選單選擇「成功」或「失敗」,經由「測試管理員」上方工具列也可建立虛擬環境的快照、擷取當下系統的執行畫面,或是直接建立Bug工作項目。
收集豐富Bug資訊的系統
當測試人員要和開發人員溝通描述系統的誤動作時,最麻煩的是交待清楚測試環境、操作步驟、系統反應等,「測試執行器」在測試人員執行手動測試時,自行透過各種機制儘量收集,並儲存當下環境的所有資訊。如圖7所示。
圖7:「測試執行器」在執行的當下會記載系統的各種資訊,以及使用者的操作細節,事後可以透過「測試管理員」檢視內容。
在測試中心點選某個執行過的測試時,可以在圖7下方所呈現的細節中看到「測試執行器」在執行當下所記載的各種資訊,若發現執行結果不符預期,測試人員可以透過TFS的工作項目與其他團隊成員溝通,例如新增「Bug工作項目」,「測試執行器」會將所蒐集到的資訊自動帶入到新增的Bug工作項目中,如圖8。
圖8:從「測試執行器」直接為錯誤建立「Bug工作項目」,開發人員透過「Team Explorer」檢視工作項目時,可以看到詳細的測試資訊。
除了管理和執行測試案例,「測試管理員」還可以整合用於測試的機器和平台,稱為「實驗室管理」,讓執行測試時,可以快速準備需要的平台和軟體。
實驗室管理機制
以往如何快速建立測試環境是個麻煩的課題,因為該環境可能涵蓋多種作業系統、伺服器程式、前端程式、測試工具程式、測試資料、資料蒐集工具程式、獨立的環境等,但測試過後即拋棄,因為環境已經弄髒弄亂,執行時還需隔絕於獨立網段,安全、不受干擾也不干擾其他系統。
最麻煩的是,當測出缺失後,開發者要能重建缺失。但若開發者和測試者所在機器不同,軟硬體建置與設定殊異,不了解測試者的操作流程,測試資料以及待測程式的建置版本等,不一定能重新產生相同的錯誤。最好可以有測試環境的快照,讓開發人員直接重建錯誤。
為解決這個問題,Visual Studio 2010 Ultimate企業旗艦版/TFS 2010提供了豐富的測試實驗室管理功能,包括從範本配置測試環境,虛擬環境安裝和移除,啟動、停止虛擬環境的執行、建立環境的快照等。
Visual Studio 2010 Ultimate企業旗艦版/TFS 2010搭配Hyper-V的管理服務SCVMM(System Center Virtual Machine Manager),以添加測試的整合能力,例如選擇一組虛擬機範本庫(Template Library)建置虛擬環境。
或著,團隊也可使用自己已經建置的虛擬機器,只需安裝Visual Studio 2010 Ultimate 企業旗艦版/TFS提供的測試代理程式即可。
在多個虛擬環境中,可以各自指定不同的功能,並部署不同的應用程式和自動化測試。其特徵簡而言之有以下幾點:
●管理測試用的一組實體或虛擬機器,稱為「環境」,歸屬於團隊專案。
●定義測試的環境設置,快速建置與準備虛擬機器。
●可以在多個主機間複製、共享。
●快照虛擬環境或恢復到現有的快照。
●開發者可以存取到測試者的環境。
●網路柵欄(Network fencing)提供獨立的測試環境。
●經由環境檢視器(Environment Viewer),可以與虛擬環境互動。
●在測試管理員可以定義測試計劃,測試套件(Suit)和測試案例,以及執行它們的實驗室環境。
實驗室管理服務執行在伺服器端,是Team Foundation Server(TFS)提供的眾多服務之一,用以管理測試環境的資源,諸如主機、虛擬機、儲存團隊專案集合(Team Project Collection)和團隊專案。整的環境架構如圖9所示。
圖 9:測試管理員透過TFS可以搭配SCVMM動態管理與配置測試環境。
TFS利用SCVMM管理實驗室基礎設施並供應多種虛擬化平台的虛擬機器(Virtual Machine)。圖9中的主機(Host)代表實體機器,其上可執行一個以上的虛擬機器。虛擬機器是執行在實體電腦內的虛擬機器,它模擬完整的硬體系統,形成獨立的環境。
虛擬機器提供快照功能(Virtual Machine Snapshot),記錄在特定時間點下,虛擬機器的完整狀態。一個虛擬機器可以建立多個快照,而你可以回復到任何虛擬機器先前建立的快照,並從那裡繼續執行。這讓測試者可以完成特定的測試方案,例如,回復到乾淨的虛擬機基礎狀態,然後再安裝一個新的版本。
透過SCVMM可以建置與管理主機群組(host group),也就是定義一組的實體主機,以便於管理、監測與分配資源。另一功能是建置共享程式庫(Library Share),虛擬機器的特色之一是不需要依存特定主機。
它可以將虛擬機器的定義儲存在磁碟上,並在短時間內恢復成執行中的虛擬環境。SCVMM提供的共享程式庫之概念是將虛擬機器的定義存放在網路共享的資料夾,需要時才將其複製到某個實體主機後啟動。而Visual Studio 2010 Ultimate企業旗艦版/TFS 2010提供的實驗室管理則是倚靠SCVMM來提供彈性的測試環境。
現今多層次的應用系統往往由多個角色組成,例如,資料庫伺服器、應用程式伺服器、Web伺服器,客戶端等,每個角色可能執行在一台以上的電腦內。也可以有多個角色在同一台電腦內運行。在實驗室中心可以建立「環境」,代表執行特定的應用系統和實驗室設備需要的一組角色。如圖10。
圖10:透過實驗室中心建立測試環境所需的虛擬機器。
圖10顯示了在實驗室環境中包括四台虛擬機器,這代表一整組的運作,也就是當你對環境做一個動作,如啟動、暫停、關閉、建立快照…等,這動作會應用在環境中所有的虛擬機器上。執行測試時,還可以記錄虛擬環境中的資訊與動作。在「實驗室中心」滑鼠雙擊任一台環境中的虛擬機器時,會叫起「環境檢視器」介面以統一操控一組虛擬機器,如圖11。
圖11:透過「環境檢視器」執行測試時,可同時操控多台虛擬機器。
Visual Studio 2010 Ultimate企業旗艦版/TFS 2010除了替測試人員新增前述專有的工具程式外,也在Visual Studio的測試專案中,強化了既有的測試類型,同時新增了「自動程式碼 UI 測試(Coded UI Test) 」類型。最後再稍微介紹此種測試。
自動程式碼 UI 測試
「自動程式碼 UI 測試」提供錄製和要求驗證的輔助工具,測試者憑其工具錄製操作待測程式的過程,就會在 Visual Studio 2010 專案內產生可重複執行的程式碼。這更進一步提升軟體測試的自動化能力。
自動程式碼 UI 測試的特徵如下:
●可自動化測試使用者介面操作。
●支援數種平台自動化,例如IE和Firefox瀏覽器、Windows Forms、Windows Presentation Foundation等介面。
●錄製操作步驟的結果可轉成VB.NET/C#程式碼,供測試人員編修。
●針對待測程式,操作了某些步驟,輸入了某些內容後,可驗證該程式的回應結果是否符合期待。
●可以整合到開發/測試、建置/測試,部署/測試的週期中。
若要使用自動程式碼 UI 測試,可以在Visual Studio 2010 Ultimate企業旗艦版新增測試專案後,再加入自動程式碼 UI 測試,如圖12。專案中加入「自動程式碼 UI 測試」的程式碼檔案後,會自動彈出「產生自動程式碼UI 測試的程式碼」對話窗,詢問你要如何產生程式碼,如圖13。
圖12:建立測試專案,並在專案中新增「自動程式碼 UI 測試」。
圖13:新增自動程式碼 UI 測試後,選擇產生程式碼的方式。
在「產生自動程式碼UI 測試的程式碼」對話窗選擇上方的「錄製動作、編輯UI對應或加入判斷提示」選項,Visual Studio 2010 Ultimate企業旗艦版會叫起如圖14所示的「自動程式碼 UI 測試產生器」工具。
圖14:自動程式碼 UI 測試產生器。
可以利用這個「自動程式碼 UI 測試產生器」記錄測試人員的動作,隨後轉換成VB.NET/C#程式碼。點選最左方的「開始錄製」按鈕後,接著以滑鼠/鍵盤操作待測程式。在此,筆者開啟瀏覽器,故意不改IE啟動時叫起的預設首頁,所以會錄製到不需要的步驟,例如滑鼠停留在網頁的某些位置,如圖15。
圖15:錄製操作步驟後,可以透過「顯示錄製的步驟」按鈕刪除已錄製的步驟。
透過「顯示錄製的步驟」按鈕叫出如圖15的「自動程式碼UI測試產生器 - 錄製的動作」對話窗,複選不需要的步驟後,以滑鼠右鍵刪除。對於各個動作單元可以分別產生程式碼,點選圖15最左方的「暫停錄製」和最右方的「產生程式碼」按鈕,「自動程式碼UI測試產生器 – 產生程式碼」對話窗,如圖16。
圖16:透過「產生程式碼」按鈕可依照你所指定的函數名,在測試專案內加入對應各步驟的程式碼。
回到程式內,可再在程式碼內利用「自動程式碼 UI 測試產生器」加入不同的錄製內容,以組織測試流程。如圖17。在「自動程式碼 UI 測試產生器」工具可以利用「交叉線(crosshair)」設定判斷提示(Assertion),以驗證待測程式的執行結果是否正確。例如:瀏覽到網站首頁時,希望看到某些字樣,就可以滑鼠拖曳「交叉線」到瀏覽器,這時畫面會自動以框線標示可能的目標物件,若框線標的是你想判斷的內容,可鬆開滑鼠回到「自動程式碼 UI 測試產生器」,如圖18。
圖17:在程式碼中以滑鼠右鍵呼叫「自動程式碼 UI 測試產生器」,以產生新的步驟或加入判斷提示。
圖18:加入對執行自動程式碼 UI 測試正確與否的判斷。
在圖18中,筆者判斷的網頁上某個Id為WelcomeMsg之Span標籤的InnerTest內容值,在「自動程式碼 UI 測試產生器 – 加入判斷提示」對話窗選定後,依然透過「產生程式碼」按鈕,這將會產生判斷的程式碼。
最後,「自動程式碼 UI 測試」不僅僅支援某種應用程式操作,其針對各種應用程式的規畫如圖19所示,也可發現自動程式碼UI測試可以針對一般的使用者介面提供自動化測試。
圖19:自動程式碼UI 測試對不同應用程式的支援。
結語
綜合以上所述,Visual Studio 2010 Ultimate企業旗艦版/TFS 2010版所提供之測試功能的目標如下:
●整合手動和自動化測試,確保建立正確的應用程式。
●QA與整個軟體生命週期結合。
●開發/測試緊密地整合。
●讓QA團隊高度地發揮。
期待不同的小組團隊成員能整合測試功能,讓整個團隊建立正確的應用程式。加上各種報告、小組網站的儀表板、計畫工作表等主動式專案管理工具,透過TFS以最大地發揮測試團隊之功效,完成最佳品質的專案。
留言列表