虛擬化技術在軟件測試中之利弊解析
也許正是VMware公司的工作站(Workstation)產品,讓虛擬化技術走上了迅速成名的道路。該產品允許各個用戶可以運行多個操作系統(tǒng)、操作系統(tǒng)版本或實例(類似多個應用程序窗口),而不是只有每次運行一個操作系統(tǒng)的多重啟動環(huán)境。但在許多公司,虛擬化技術卻是這樣出現(xiàn)的:開發(fā)人員首先悄悄使用這項技術來進行測試和開發(fā),然后再把虛擬化工具介紹給IT主管。
盡管如今虛擬化在推動許多生產環(huán)境,比如服務器和桌面基礎架構,并充當一種資源提供工具,虛擬化也被越來越多的軟件開發(fā)人員所使用。首先,他們使用虛擬化工具,便于提供用于開發(fā)和測試的一系列目標環(huán)境(比如不同的操作系統(tǒng)、操作系統(tǒng)版本和瀏覽器),并且便于迅速而輕松地提供/重新提供配置實例。
下面介紹如今的一些開發(fā)人員在如何使用虛擬化、為什么使用虛擬化,以及他們對目前的虛擬化技術存著什么樣的問題。
提供多種測試環(huán)境
高級軟件架構師Mark Friedman效力于微軟的開發(fā)部門,該部門有3000多名員工在開發(fā)Visual Studio和.NET框架。Friedman本人主要開發(fā)隨微軟Visual Studio Team System這套開發(fā)工具交付的性能工具。Friedman還是計算機測量組織(Computer Measurement Group)的董事,他說:"我所在部門大約三分之二的人從事開發(fā)和測試工作――這些開發(fā)和測試人員大多數(shù)在使用系統(tǒng)虛擬化(通過微軟的Hyper-V技術),作為他們主要的生產力工具之一。"
虛擬化技術的一個主要優(yōu)勢在于,它能夠分離不穩(wěn)定的環(huán)境,這是任何開發(fā)人員都希望在應用程序設計的早期階段所具備的功能。Friedman表示,隨著微軟工具的不斷開發(fā),測試早期版本可能會使開發(fā)人員的整個計算環(huán)境不穩(wěn)定。
他說:"這是無法改變的本質。除了最簡單的桌面應用程序外,幾乎任何應用程序都會導致系統(tǒng)崩潰。我經常告訴我的開發(fā)人員,如果他們沒有經常導致系統(tǒng)崩潰,說明他們的嘗試還不夠積極。我們喜歡虛擬化技術,因為它能節(jié)省時間,讓我們的開發(fā)人員可以花更多時間用在有挑戰(zhàn)性的工作上,而不是用在準備測試環(huán)境那些單調而極其耗費時間的方面上。"
與其他虛擬化工具一樣,微軟的Hyper-V可以讓用戶對系統(tǒng)"拍取快照",保留"最近一個已知的完好版本"。Friedman說:"我們創(chuàng)建了回滾機制(rollback),那樣我們在幾分鐘之內就能把系統(tǒng)恢復到之前的那個完好狀態(tài)。另一種方法就是,不得不重新創(chuàng)建系統(tǒng)鏡像或者重新構建環(huán)境,但這需要好幾個小時。而虛擬化技術大大節(jié)省了時間。"
Friedman的小組還在質量保證(QA)測試當中全面利用了虛擬化技術和虛擬機鏡像。他說:"一旦通過了開發(fā)人員的單元測試,我們就會談論測試矩陣――比如在什么版本的操作系統(tǒng)上運行測試矩陣。然后,我們需要針對32位版本或64位版本進行測試。使用虛擬機鏡像是維持一系列測試環(huán)境的最快速、最省錢、最靈活的一種方法。在我們的質量保證實驗室,我們一直在這么做;我們進行了許多自動化測試,以便把這些鏡像作為虛擬機來保存,并且用測試套件對它們進行測試。這種方法很實用;我們節(jié)省了許多時間,多得讓人難以置信。"
拍取快照、然后在幾分鐘之內恢復工作鏡像的功能特別重要,不必為重建系統(tǒng)等上數(shù)小時。Friedman說:"你在查找軟件錯誤時,僅僅為了重現(xiàn)軟件錯誤,常常得花上一兩天時間來建立環(huán)境,所以你一次又一次地花時間來重建系統(tǒng)――這浪費了時間;從而導致工作效率降低。"
比方說,某個軟件錯誤導致系統(tǒng)崩潰時,開發(fā)人員就得回過頭去,找出系統(tǒng)崩潰的那個地方。Friedman說:"人們最初設置的斷點常常離進程太遠,于是系統(tǒng)再次崩潰。因為開發(fā)人員在一天內很容易導致系統(tǒng)崩潰好幾次,趁開發(fā)人員對問題很清楚的時候,能夠迅速恢復,然后重新運行調試過程,這大有幫助。如果你在調試一個復雜的軟件錯誤,能保持在這種狀態(tài)下再好不過了。"
開發(fā)人員表示,虛擬化技術非常有助于迭代測試。Adam Moskowitz是生產及銷售一系列節(jié)能型計算機的SiCortex公司的高級軟件工程師,他說:"我們有許多測試系統(tǒng)供我們的開發(fā)人員使用――每個測試系統(tǒng)都需要各自的x86控制系統(tǒng)。我們使用虛擬化技術來創(chuàng)建虛擬機,然后虛擬機'連接到'外部集群板,而不是購置許多PC,哪怕是最便宜的PC。"
SiCortex的開發(fā)部門使用免費版本的VMware Server,運行在功能較強大的機架服務器上(配備雙核或四核x86處理器、4GB內存和300GB硬盤),這些服務器可以運行四至八個充當控制系統(tǒng)的虛擬機。Moskowitz說:"因為控制系統(tǒng)上的負載非常小,這種辦法的效果非常好,資本開支也比較低。我們大約25名工程師中有一半以上的人在使用這些虛擬化系統(tǒng)。"
Moskowitz表示,控制系統(tǒng)虛擬化的一個主要好處就是易于測試。他說:"想要一個實驗系統(tǒng)?你只要克隆一個標準的虛擬機,就可以使用了。虛擬化工具有價值的另一個原因就是易于配置;開發(fā)人員只要用最新軟件構建一個虛擬機――只要構建一次;以后你想要多少個虛擬機,就可以克隆多少個。"
Mike Brescia在一家記錄及恢復實時環(huán)境數(shù)據的公司工作;他說:"除了把系統(tǒng)作為虛擬設備來提供外,我們公司的開發(fā)人員還使用虛擬化技術,在比較少的硬件設備上搭建不同的測試環(huán)境,比如Windows和Linux環(huán)境。"Brescia表示,克隆一個干凈的計算機系統(tǒng)用于測試要比拷貝磁盤鏡像、使用Clonezilla克隆工具簡單得多。他補充說:"運行虛擬機不需要拆掉、清除整個系統(tǒng);我們只需要小心,別往主機機器上裝入過多的資源。"
設計和營銷公司Eli Kirk的高級Web開發(fā)人員Connor Boyack表示,該公司的15名Web開發(fā)人員必須兼顧許多Web瀏覽器和操作系統(tǒng)的需要。Boyack在Mac OS X Leopard操作系統(tǒng)上使用Parallels版本4,并且運行各自安裝了Windows XP、OpenSUSE 11和Windows 7測試版等操作系統(tǒng)的虛擬機。Boyack說:"創(chuàng)建實用、而且外觀一致的網站需要進行大量的瀏覽器測試;這樣一來,虛擬化技術必不可少。虛擬化技術讓我可以使用多個操作系統(tǒng)和多個瀏覽器,讓它們可以無縫合作(前提是Windows XP運行要順暢)。"
SmartLogic Solutions公司的開發(fā)人員Nick Gauthier也認為,能夠同時測試許多不同場景、確保有一致的用戶體驗,這是一大優(yōu)勢。"另一個優(yōu)勢就是,如果用戶有抱怨,可以啟動某個特定的版本和瀏覽器。我們再沒有必要說'哦,我不運行這個瀏覽器,我用的是Linux操作系統(tǒng);'現(xiàn)在我們可以說'稍等片刻;我發(fā)現(xiàn)問題了,我馬上解決。'"
Eric Floer是開發(fā)及銷售遠程備份設備的新興公司3X Systems的首席技術官,他說:"我們使用虛擬化技術測試平臺上的軟件以及我們支持的應用程序(以便保證質量);如果客戶出現(xiàn)了問題需要支持,還可以用來重現(xiàn)客戶環(huán)境。虛擬化讓我們可以迅速構建及拆掉環(huán)境,而且只要使用數(shù)量極少的物理硬件就可以做到。"對一家小規(guī)模的新興公司而言,這種使用極少資本開支就能測試許多平臺和環(huán)境的能力非常重要。另外,"虛擬化技術大大提高了我們產品的質量和可靠性,"Floehr補充說。
Aamoggemon軟件公司致力于為手持計算機開發(fā)程序,原先為Palm OS開發(fā)程序,現(xiàn)在還為Symbian OS Series 60和PocketPC開發(fā)程序。開發(fā)人員Tam Hanna說:"現(xiàn)在我使用虛擬化有好多原因;主要原因是,基于Cygwin/Elipse的開發(fā)系統(tǒng)很流行(針對J2ME的Eclipse、Palm的PODS和諾基亞的Carbide)。把這些開發(fā)系統(tǒng)全部安裝在一臺機器上會導致它們都出問題。所以,我需要使用虛擬化技術,以便能夠完成我的工作。此外,我想使用虛擬機,確保所有機器上都有同樣的配置設置。"
MarkMail是一家搜索公共郵件列表歸檔的免費服務機構。MarkMail的開發(fā)人員John D. Mitchell(其正式頭銜是"狂熱的科學家")聲稱:"我們的團隊在許多方面使用虛擬化技術。關鍵在于,對系統(tǒng)中的每一項服務進行虛擬化處理給了我們很大的靈活性。在開發(fā)時,我們對物理資源沒有太多的要求,那樣我們在少數(shù)幾個硬件節(jié)點上就能運行許多虛擬實例,包括數(shù)據庫。"
MarkMail用的是OpenVz,那樣開發(fā)人員沙盒中的鏡像與部署環(huán)境的完全一樣。Mitchell說:"有了虛擬化技術,測試不同的環(huán)境和版本等方面就非常容易;我們總是可以拆掉一個實例,然后從干凈的檢查點重新創(chuàng)建一個實例。"據Mitchell聲稱,使用虛擬化技術可以減少所要購買、租用及管理的硬件數(shù)量。"總的來說,我們使用的虛擬實例與硬件節(jié)點之比大約是3:1。"
#p#
虛擬化的局限
開發(fā)人員承認,開發(fā)過程中有許多方面是虛擬化技術無能為力的。
3X公司的Floehr強調:"虛擬化無能為力的一個方面就是對我們的產品(基于網絡的備份設備)進行壓力測試(stress testing)。盡管我們可以在虛擬化環(huán)境同時測試10個客戶機,但那不是真正的壓力測試,因為10個客戶機只使用4個物理CPU和兩塊網卡來測試;如果在實際環(huán)境有10個物理客戶機,這些約束條件就不會存在。"
MarkMail的Mitchell補充說:"虛擬化確實會增加一些復雜性。它總是會增加一些延遲。但是更糟的是,如果改變底層的執(zhí)行環(huán)境――比如從開發(fā)環(huán)境到測試環(huán)境再到生產環(huán)境,就無法依賴虛擬機清楚地了解性能方面的特點。"
最后,Mirtchell強調"當前一代的桌面虛擬化產品仍有太多令人頭疼的問題、缺陷以及缺失的功能,"至少開發(fā)人員在用于軟件開發(fā)方面就遇到了這種情況。
微軟的Mark Friedman說:"如果進行負載測試或規(guī)模擴展,就得運行在原始硬件和物理機器上。除非你準備部署在虛擬機上,否則性能方面的特點完全不一樣。性能測量方面的情況也是這樣。"Friedman強調,但隨著時間的推移,這個問題有望得到解決。
Friedman表示,另外,虛擬化行業(yè)采用的半虛擬化方法改變了操作系統(tǒng)的一些底層方面,尤其是操作系統(tǒng)的驅動程序。"所以,如果你依賴特定的驅動程序或硬件環(huán)境,那就會受到影響。比方說,有一個虛擬網卡,有一個特定的驅動程序。該驅動程序'可識別虛擬化技術'。你就得明白,如果你需要針對一組本地驅動程序進行測試,在虛擬機里看不到驅動程序。所以,這影響了從事驅動程序開發(fā)的人員,但對Web開發(fā)人員沒有影響。"
Friedman還指出:"如果你有一個多層應用程序需要幾臺機器,把這些機器整合成共享硬件意味著'你可以進行的是功能測試,而不是性能測試。'"
盡管有這樣那樣的問題,虛擬化技術已經為開發(fā)人員帶來了切實的好處。微軟的Friedman說:"一旦我們的開發(fā)人員學會使用虛擬化技術,這項技術就能提高他們的工作效率。虛擬化技術讓他們可以花更多的時間用在編碼、測試和調試上。它消除了用在構建及準備環(huán)境方面的大量時間和延遲,我們并不希望他們把大部分時間用在這方面上。"