李勁華,賈冬雪,趙 毅
(青島大學(xué) 信息工程學(xué)院,山東 青島 266071)
軟件測試是軟件工程學(xué)科的一個(gè)核心知識域,它是保證和控制軟件質(zhì)量的有效手段。為落實(shí)我國教育的發(fā)展戰(zhàn)略,強(qiáng)化培養(yǎng)學(xué)生在軟件開發(fā)領(lǐng)域的工程實(shí)踐能力、工程設(shè)計(jì)能力和工程創(chuàng)新能力,必須加強(qiáng)軟件測試的實(shí)驗(yàn)教學(xué)。目前已有一些高校在加強(qiáng)軟件測試的實(shí)驗(yàn)教學(xué)建設(shè),包括采用云技術(shù)搭建軟件工程試驗(yàn)環(huán)境[1-3]。
青島大學(xué)與某國際著名軟件教育機(jī)構(gòu)共建了軟件工程(服務(wù)外包)專業(yè),軟件測試技術(shù)是該專業(yè)必修的專業(yè)基礎(chǔ)課程之一。由于該專業(yè)2015年計(jì)劃招收人數(shù)已達(dá)1 000人,解決大規(guī)模的實(shí)踐教學(xué)問題迫在眉睫,但實(shí)驗(yàn)指導(dǎo)教師、擴(kuò)展傳統(tǒng)的軟件測試實(shí)驗(yàn)平臺、采用大規(guī)模開源在線課程的“慕課”教學(xué)方法[4]都不能很好地解決大規(guī)模的軟件測試實(shí)驗(yàn)教學(xué)問題。
在線判題系統(tǒng)(online judge,OJ)實(shí)現(xiàn)了對程序代碼的自動檢查,可以應(yīng)用在解決大規(guī)模程序設(shè)計(jì)的實(shí)驗(yàn)教學(xué)中,例如浙江大學(xué)用于程序設(shè)計(jì)訓(xùn)練的OJ。也有人嘗試運(yùn)用OJ原理,實(shí)現(xiàn)了一個(gè)編譯程序在線評測系統(tǒng)[5]。
與其他軟件類實(shí)驗(yàn)課程相比,軟件測試實(shí)驗(yàn)有如下特點(diǎn):(1)實(shí)驗(yàn)者需要編寫軟件測試腳本,由平臺提供測試數(shù)據(jù),執(zhí)行測試代碼,給出實(shí)驗(yàn)結(jié)果,功能同OJ;(2)實(shí)驗(yàn)者根據(jù)平臺提供的軟件測試工具編寫自動化軟件測試代碼;(3)實(shí)驗(yàn)者提供測試數(shù)據(jù),平臺運(yùn)行給定的待測程序,查找待測程序的錯(cuò)誤,驗(yàn)證程序的功能/性能,計(jì)算測試數(shù)據(jù)的覆蓋率;(4)實(shí)驗(yàn)者根據(jù)平臺提供的軟件測試工具編寫測試代碼或者測試數(shù)據(jù);平臺利用工具運(yùn)行待測程序,實(shí)現(xiàn)壓力、容量、性能等非功能測試及其評判;(5)實(shí)驗(yàn)者交互使用測試工具完成相應(yīng)的軟件測試實(shí)驗(yàn)。
各種開源的云計(jì)算平臺、軟件測試工具和自動化測試框架[6-8]為大規(guī)模軟件測試實(shí)驗(yàn)教學(xué)提供了可行的解決方案。
云計(jì)算[9]是一種計(jì)算和部署模型,用戶可以隨時(shí)隨地訪問網(wǎng)絡(luò)上的可配置的共享資源,如計(jì)算資源、存儲空間、網(wǎng)絡(luò)通信、應(yīng)用程序等服務(wù)。云計(jì)算具有按需自助式服務(wù)、訪問途徑多種多樣、共享資源池、可擴(kuò)展性和高可靠性等特點(diǎn)。
云計(jì)算可以提供以下3個(gè)層次的服務(wù):(1)底層基礎(chǔ)設(shè)施即服務(wù)(IaaS),是將云計(jì)算平臺所依賴的計(jì)算、存儲、網(wǎng)絡(luò)設(shè)備以及操作系統(tǒng)等基礎(chǔ)硬件設(shè)施以服務(wù)的形式提供給用戶,使其部署和運(yùn)行自己開發(fā)的應(yīng)用程序;(2)平臺即是服務(wù)(PaaS),是將應(yīng)用軟件的開發(fā)和運(yùn)行環(huán)境作為一種服務(wù),允許用戶通過互聯(lián)網(wǎng)開發(fā)自己的業(yè)務(wù)應(yīng)用,開發(fā)完成之后還可以在云平臺環(huán)境中運(yùn)行和維護(hù);(3)軟件即服務(wù)(SaaS),是利用互聯(lián)網(wǎng)、通過客戶端向用戶提供應(yīng)用程序功能的服務(wù),應(yīng)用程序可以是軟件供應(yīng)商提供的商用SaaS,也可以是企業(yè)自身定制的SaaS。
云計(jì)算的部署模式有3種:(1)私有云——部署的云資源只供某個(gè)特定的企業(yè)使用,是企業(yè)內(nèi)部構(gòu)建云平臺是最為常見的部署方式;(2)公有云——為所有的云端個(gè)人用戶或者組織提供服務(wù)的云平臺,通常由第三方廠商提供;(3)混合云——以上兩種云部署模式的組合模式。出于信息安全的考慮,企業(yè)不會將所有的企業(yè)數(shù)據(jù)信息放到公有云上,混合云使得企業(yè)既可以對外提供服務(wù),又可以保障內(nèi)部數(shù)據(jù)的安全性。
Eucalyptus云平臺[10](桉樹云)是用于搭建私有云和混合云的軟件,它和Amazon的 Web服務(wù)(AWS)兼容,基本上是AWS的開源實(shí)現(xiàn)。它運(yùn)用虛擬化框架技術(shù)向用戶提供云資源來滿足用戶計(jì)算、網(wǎng)絡(luò)和存儲方面的需求。桉樹云可以分成3層,分別是硬件層、開發(fā)管理層和應(yīng)用層,恰與云計(jì)算的3種服務(wù)模型IaaS、PaaS和SaaS相對應(yīng)。
桉樹云硬件層對應(yīng)的服務(wù)是IaaS,由IaaS提供商將硬件資源和虛擬化技術(shù)相結(jié)合,向用戶提供各種類型的虛擬機(jī)器;開發(fā)管理層對應(yīng)的服務(wù)是PaaS,其中經(jīng)過認(rèn)證的管理者通過管理界面管理硬件層虛擬出的虛擬資源,開發(fā)者則在這些虛擬資源的基礎(chǔ)上開發(fā)出可以通用的、符合AWS標(biāo)準(zhǔn)并與AWS兼容的API以供應(yīng)用層用戶使用;應(yīng)用層的用戶通過用戶界面和桉樹云進(jìn)行交互。
云測試是一種基于云計(jì)算技術(shù)的新型測試方案[11],它將軟件測試或者自動化軟件測試工具作為一種服務(wù)[12]提供給使用者。云測試平臺可以提供多種瀏覽器作為用戶交互的客戶端,通過網(wǎng)絡(luò)接收用戶編寫的測試腳本,在測試環(huán)境中運(yùn)行用戶的軟件進(jìn)行測試,最后,再通過網(wǎng)絡(luò)將測試結(jié)果傳輸給用戶。與很多軟件測試方案相比,云測試具有獨(dú)特的優(yōu)點(diǎn),它能有效地解決本文提到的測試方案中亟待解決的問題,特別是包括:相對便宜的價(jià)格、提供大規(guī)模服務(wù)、整合多個(gè)測試工具和測試案例等。
筆者基于桉樹云設(shè)計(jì)了用于軟件測試實(shí)驗(yàn)的私有云平臺的解決方案。平臺以開源的自動化軟件測試框架為基礎(chǔ),整合穩(wěn)定的、開源的軟件測試工具,運(yùn)用軟件測試服務(wù)技術(shù),實(shí)現(xiàn)軟件測試的自動化。該方案借鑒了OJ原理自動評判軟件測試實(shí)驗(yàn)的結(jié)果。作為開放平臺,使用者可以為軟件測試題庫提供類似于編程題目的軟件測試題目和結(jié)果、評分標(biāo)準(zhǔn)等。同時(shí),該方案也允許實(shí)驗(yàn)教師在軟件測試工具庫中添加(開源的)軟件測試工具。為了處理大量的軟件測試教學(xué)任務(wù),減少各類測試工具安裝部署造成的問題,實(shí)驗(yàn)平臺采用了桉樹云來實(shí)現(xiàn)軟件測試實(shí)驗(yàn)的基本活動,主要是測試實(shí)驗(yàn)作業(yè)的提交、軟件測試實(shí)驗(yàn)的自動執(zhí)行、結(jié)果記錄和評判。有關(guān)云計(jì)算軟件測試的關(guān)鍵技術(shù)參閱文獻(xiàn)[13]。
圖1給出了基于開源軟件的軟件測試云實(shí)驗(yàn)平臺的邏輯結(jié)構(gòu),分為4個(gè)層次。
(1)訪問管理層。它是云測試服務(wù)的使用者和云測試服務(wù)進(jìn)行交互的接口。用戶通過Web瀏覽器提交測試請求到測試云平臺。用戶請求服務(wù)時(shí)提交的信息包括測試環(huán)境(測試工具、操作系統(tǒng)等)需求、測試用例、測試腳本和控制文件,系統(tǒng)返回給用戶軟件測試結(jié)果。
(2)測試管理層。該層對用戶測試環(huán)境進(jìn)行格式轉(zhuǎn)換,轉(zhuǎn)換完成后得到XML格式的統(tǒng)一輸出,然后將XML文件存儲到云端數(shù)據(jù)庫中。云端資源管理層讀取數(shù)據(jù)庫中的內(nèi)容并根據(jù)請求生成虛擬機(jī)。該模塊要解決的主要問題是將各種格式的請求轉(zhuǎn)換成統(tǒng)一的XML格式,然后和云端虛擬機(jī)資源進(jìn)行匹配。
(3)任務(wù)管理層。該層負(fù)責(zé)測試任務(wù)的調(diào)度、分配和測試執(zhí)行的監(jiān)控,包括實(shí)現(xiàn)測試框架和用戶間的交互、測試任務(wù)的自動安裝和運(yùn)行、監(jiān)控測試執(zhí)行、存儲測試數(shù)據(jù)和測試結(jié)果。主要功能由一個(gè)自動化軟件自動化測試框架Autotest[8]實(shí)現(xiàn)。
(4)云資源管理層。主要功能是提供IaaS服務(wù)。底層框架用的是開源私有桉樹云框架Eucalyptus,用于給上層測試用例的執(zhí)行提供計(jì)算資源。另外,虛擬機(jī)監(jiān)控模塊和結(jié)點(diǎn)監(jiān)控模塊幫助收集虛擬機(jī)資源和實(shí)體機(jī)資源的使用狀況。系統(tǒng)監(jiān)測器用于監(jiān)測整個(gè)云系統(tǒng)的運(yùn)行狀態(tài)。
圖1中沒有顯示測試實(shí)驗(yàn)云平臺的網(wǎng)絡(luò)、計(jì)算和存儲的硬件資源,它們要由桉樹云提供管理和服務(wù)。
圖1 軟件測試云實(shí)驗(yàn)平臺的邏輯結(jié)構(gòu)
實(shí)驗(yàn)平臺提供的服務(wù)是軟件測試的自動化執(zhí)行——云測試。SaaS應(yīng)用軟件通常包含數(shù)據(jù)(庫)和完成業(yè)務(wù)邏輯的程序代碼。依據(jù)對代碼及數(shù)據(jù)的更改程度,把傳統(tǒng)的單租賃軟件測試工具(包括測試框架)改造成多租賃的軟件,即SaaS應(yīng)用。主要有下列3種策略[14]。
(1)單數(shù)據(jù)庫、單代碼:在一個(gè)單一數(shù)據(jù)庫中存儲所有租賃客戶的數(shù)據(jù),需要對數(shù)據(jù)庫中的表添加租賃客戶字段、大量改動代碼。
(2)多數(shù)據(jù)庫、單代碼:為每一個(gè)租賃客戶創(chuàng)建一個(gè)獨(dú)立的數(shù)據(jù)庫,只需更改為每個(gè)客戶選擇數(shù)據(jù)庫的配置文件,無需改動代碼。不足的是,一旦數(shù)據(jù)模式發(fā)生變化,就要更新每一個(gè)數(shù)據(jù)庫。
(3)多數(shù)據(jù)庫、多代碼:為每一個(gè)租賃客戶創(chuàng)建一個(gè)獨(dú)立的數(shù)據(jù)庫、拷貝全部代碼,無需修改代碼,客戶的數(shù)據(jù)不易混淆。顯然,一旦數(shù)據(jù)模式、數(shù)據(jù)處理發(fā)生變化,就要人工為每個(gè)客戶更新數(shù)據(jù)庫及代碼。
軟件測試云實(shí)驗(yàn)平臺的一個(gè)設(shè)計(jì)原則,是盡量快速地為實(shí)驗(yàn)者提供多樣的軟件測試工具,大量地更改軟件代碼或數(shù)據(jù)庫的方式都不可取。多數(shù)據(jù)庫、單代碼策略僅僅更改配置文件就可以迅速復(fù)用現(xiàn)有的測試軟件,因而是首選策略。
接下來的主要工作是云測試平臺的配置和編寫測試工具的調(diào)用腳本,包括按照桉樹云的結(jié)構(gòu),把軟件測試工具、自動化測試框架、數(shù)據(jù)庫、測試庫等云測試服務(wù)資源安裝配置到桉樹云不同的節(jié)點(diǎn)服務(wù)器,建立主從服務(wù)器的關(guān)聯(lián)關(guān)系,為待測軟件、測試工具、測試作業(yè)、測試用例及測試結(jié)果等配置不同的目錄。對每個(gè)不同的軟件測試工具都需要編寫腳本,包括處理工具的調(diào)用、測試用例的讀入、如何記錄并存儲測試結(jié)果等工作;然后確定配置參數(shù)、調(diào)用腳本的邏輯順序,并進(jìn)行檢測和驗(yàn)證。最后將每個(gè)測試工具的自動化執(zhí)行腳本部署到桉樹云。
首先,用戶輸入測試環(huán)境請求和測試任務(wù)。系統(tǒng)按照用戶是否指定所需云計(jì)算環(huán)境來為用戶選取特定的云計(jì)算資源:如果用戶指定了特定的云計(jì)算資源,則按照用戶的指定來調(diào)用相應(yīng)的功能模塊;如果用戶沒有指定,則系統(tǒng)依據(jù)當(dāng)前用戶環(huán)境請求和云計(jì)算資源的匹配程度來替用戶選取特定的云計(jì)算資源。
然后,根據(jù)測試任務(wù)匹配和調(diào)度云測試資源(如測試代碼、測試用例、測試工具和待測程序),執(zhí)行云測試并分析測試結(jié)果,最后系統(tǒng)返回測試判定。
云測試環(huán)境請求參數(shù)如下:
MACS——機(jī)器數(shù)量(正整數(shù));
OS——操作系統(tǒng);
CPU——CPU要求;
MEM——內(nèi)存大?。?/p>
HD——硬盤大?。?/p>
Software——所需安裝的測試軟件;
DL——截止日期;
SerLevel——服務(wù)等級(由高到低劃分為5個(gè)等級);
Pri——優(yōu)先級(由高到低劃分為5個(gè)等級)。
筆者設(shè)計(jì)了基于XML格式的測試環(huán)境請求參數(shù)格式及其轉(zhuǎn)換程序。平臺首先將用戶的云測試環(huán)境請求轉(zhuǎn)換為XML格式的數(shù)據(jù),然后再由桉樹云將這些XML數(shù)據(jù)和云端現(xiàn)有資源進(jìn)行匹配,以滿足用戶的環(huán)境請求。
用戶在獨(dú)立的測試開發(fā)環(huán)境或者云平臺上完成測試任務(wù),提交到云實(shí)驗(yàn)平臺進(jìn)行測試實(shí)驗(yàn)。根據(jù)實(shí)驗(yàn)者是否使用特定的測試工具、編寫測試腳本、提供獨(dú)立的測試用例,實(shí)驗(yàn)平臺提供了7種云測試實(shí)驗(yàn)?zāi)J剑ㄒ姳?)。
表1 云測試實(shí)驗(yàn)?zāi)J?/p>
模式1:軟件測試云實(shí)驗(yàn)平臺運(yùn)用虛擬技術(shù)為用戶提供統(tǒng)一的軟件測試工具交互式使用環(huán)境。用戶像使用本地機(jī)一樣使用測試工具對給定的待測程序進(jìn)行測試實(shí)驗(yàn),過程和結(jié)果存儲在云平臺上。該模式將軟件測試工具虛擬化,實(shí)現(xiàn)了軟件工具的軟件測試即服務(wù)(SaaS)。
模式2:實(shí)驗(yàn)者對給定的待測程序編寫測試腳本進(jìn)行測試實(shí)驗(yàn),測試腳本包括測試案例,輸出按照平臺要求的格式給出。平臺運(yùn)行測試腳本,完成測試結(jié)果的分析與評定。該模式類似于OJ。測試腳本的編寫可以在本地機(jī)上完成、也可以在平臺上運(yùn)用虛擬環(huán)境完成。該模式使用的是云平臺服務(wù)(IaaS)。
模式3:實(shí)驗(yàn)者對給定待測程序的測試任務(wù),設(shè)計(jì)測試用例,并按照平臺要求的格式提交給云測試平臺,云測試平臺啟動待測程序調(diào)用提交的測試用例,完成測試結(jié)果分析與評定。
模式4:與模式1和2類似,實(shí)驗(yàn)者用指定的測試工具編寫測試腳本,平臺完成測試、結(jié)果分析與評定。測試腳本的編寫可以在本地機(jī)上完成,也可以使用平臺(簡單的PaaS模式)。但是并非所有軟件測試工具提供了腳本語言及其運(yùn)行。
模式5:實(shí)驗(yàn)者根據(jù)測試任務(wù)選定的測試工具,設(shè)計(jì)測試用例。平臺完成測試工具的調(diào)用,使用用戶提供的測試用例運(yùn)行待測程序。與模式3的區(qū)別在于指定了測試工具,要求實(shí)驗(yàn)者學(xué)習(xí)某種特定的軟件測試工具,如Web應(yīng)用的性能測試工具Jmeter[7]。
模式6:與模式2類似,要求實(shí)驗(yàn)者將測試腳本和測試用例分離,實(shí)現(xiàn)測試復(fù)用。實(shí)驗(yàn)者可以不同時(shí)完成腳本編寫和測試數(shù)據(jù)設(shè)計(jì)這兩項(xiàng)任務(wù),多次、反復(fù)地運(yùn)用各種測試技術(shù)生成測試數(shù)據(jù),使用同一個(gè)腳本測試同一個(gè)待測程序。該模式的實(shí)驗(yàn)難度大于模式2和模式3。
模式7:綜合模式。運(yùn)用了云計(jì)算的一種、兩種或三種服務(wù)模型的組合。
軟件測試實(shí)驗(yàn)云平臺對教師和學(xué)生都提出了新的挑戰(zhàn)。對實(shí)驗(yàn)教師,除了要完成傳統(tǒng)測試實(shí)驗(yàn)的任務(wù),如編寫測試任務(wù)、測試案例等,還要學(xué)習(xí)云計(jì)算技術(shù)、熟悉仍在不斷改進(jìn)的軟件測試實(shí)驗(yàn)云平臺,不斷地?cái)U(kuò)充、編寫、優(yōu)化測試資源(編寫測試數(shù)據(jù)、測試代碼、測試結(jié)果等),解決軟件測試實(shí)驗(yàn)類型多樣性的需求與測試實(shí)驗(yàn)任務(wù)完成規(guī)范化的矛盾。學(xué)生也要花費(fèi)額外的時(shí)間去熟悉軟件測試實(shí)驗(yàn)云平臺,包括有些工作不屬于實(shí)驗(yàn)本身的任務(wù),比如測試實(shí)驗(yàn)的提交格式、平臺的使用以及完成實(shí)驗(yàn)的方式和流程。教師與學(xué)生初期的工作量都較大。
目前,實(shí)驗(yàn)教學(xué)使用的軟件測試云實(shí)驗(yàn)平臺只是完成了初步搭建,提供了簡單的軟件測試類型,包括黑盒測試(類似于OJ)的測試設(shè)計(jì)、冒煙測試、簡單的壓力/性能測試、基本的Web測試,實(shí)現(xiàn)了部分白盒測試(如語句和路徑的覆蓋率),但尚不能提供條件、邏輯和判定等小于語句單元的白盒測試。
今后需要做的工作主要是:(1)提高軟件測試云實(shí)驗(yàn)平臺的穩(wěn)定性和可用性;(2)與現(xiàn)有的通用實(shí)驗(yàn)教學(xué)平臺集成,完成軟件測試實(shí)驗(yàn)周期的所有任務(wù),包括任務(wù)布置、進(jìn)度安排、題目分配、實(shí)驗(yàn)評判、結(jié)果統(tǒng)計(jì)等;(3)把更多的軟件測試工具虛擬化并集成到軟件測試云實(shí)驗(yàn)平臺上;(4)通過校企合作等形式,開發(fā)更多、更貼近實(shí)際的測試案例。
(
)
[1]王志英,蔣宗禮,楊波,等.計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)實(shí)踐教學(xué)體系與規(guī)范研究[J].中國大學(xué)教育,2009(2):42-44.
[2]趙翀,高鵬.軟件測試課程工程實(shí)踐教學(xué)模式的探索與實(shí)施[J].計(jì)算機(jī)工程與科學(xué),2014,36(增刊1):51-55.
[3]曾明星,王曉波,周清平,等.基于云計(jì)算的軟件工程專業(yè)校企合作實(shí)訓(xùn)平臺構(gòu)建研究[J].現(xiàn)代教育技術(shù),2013,23(1):107-112.
[4]周麗濤,劉越,彭立宏,等.探索MOOC在計(jì)算機(jī)實(shí)踐教學(xué)中的應(yīng)用[J].計(jì)算機(jī)工程與科學(xué),2014,36(增刊1):118-121.
[5]尤楓,史晟輝,趙瑞蓮.編譯程序在線評測系統(tǒng)的實(shí)現(xiàn)[J].實(shí)驗(yàn)室研究與探索,2010,29(12):69-72.
[6]Junit[EB/OL].http://junit.org.
[7]Apache JMeter[EB/OL].http://jmeter.apache.org.
[8]Autotest[EB/OL].http://autotest.github.io.
[9]陳康,鄭緯民.云計(jì)算:系統(tǒng)實(shí)例與研究現(xiàn)狀[J].軟件學(xué)報(bào),2009,20(5):1337-1348.
[10]李喬,柯棟梁,王小林.云測試研究現(xiàn)狀綜述[J].計(jì)算機(jī)應(yīng)用研究,2012,29(12):4401-4406.
[11]Eucalyptus[EB/OL].http://github.com/eucalyptus/eucalyptus/wiki.
[12]Ciortea L,Zamfir C,Bucur S,et al.Cloud9:a software testing service[J].IEEE Transactions on Operating Systems Review,2009,43(4):5-10.
[13]賈冬雪.基于云計(jì)算平臺的軟件測試關(guān)鍵技術(shù)研究[D].青島:青島大學(xué),2013.
[14]孟小華,陳傳凱.傳統(tǒng)軟件向SaaS軟件轉(zhuǎn)型方案的研究[J].微型機(jī)與應(yīng)用,2012,31(4):7-10.