邵晨影
(上海找油信息科技有限公司,上海,510000)
典型的軟件工程項(xiàng)目利用持續(xù)集成過(guò)程作為自動(dòng)調(diào)整某些任務(wù)的方法,以提高軟件質(zhì)量,如自動(dòng)化測(cè)試。然而自動(dòng)化測(cè)試主要側(cè)重于根據(jù)項(xiàng)目需求實(shí)現(xiàn)的代碼構(gòu)建,不考慮在組織或工程領(lǐng)域之外開發(fā)的其他項(xiàng)目,因此項(xiàng)目的代碼構(gòu)建在一種獨(dú)立的環(huán)境中進(jìn)行自動(dòng)化測(cè)試,因?yàn)樗鼈儧](méi)有充分考慮到不同項(xiàng)目之間的復(fù)雜依賴關(guān)系,所以自動(dòng)化測(cè)試也不是很準(zhǔn)確,雖然項(xiàng)目依賴關(guān)系可以通過(guò)構(gòu)建管理機(jī)制隱式處理,但項(xiàng)目依賴關(guān)系在大部分場(chǎng)合下根本不被考慮,這樣就導(dǎo)致了自動(dòng)化測(cè)試潛在的失敗。積極考慮和處理依賴關(guān)系,發(fā)現(xiàn)問(wèn)題及時(shí)向開發(fā)者反饋,這個(gè)過(guò)程是手動(dòng)完成的,并且是一項(xiàng)耗時(shí)的任務(wù)。通常情況下,問(wèn)題只有在變更完成并集成到系統(tǒng)后才能被發(fā)現(xiàn),這對(duì)開發(fā)人員和用戶都是一個(gè)問(wèn)題。本文中將持續(xù)集成過(guò)程作為一種方法,充分考慮了各種軟件工程項(xiàng)目的代碼構(gòu)建之間依賴關(guān)系,以提高自動(dòng)化測(cè)試的有效性,完善自動(dòng)化體系的建設(shè)。
軟件測(cè)試是一項(xiàng)耗資較大并且耗費(fèi)大量勞動(dòng)力的活動(dòng),因此自動(dòng)化測(cè)試成為測(cè)試更加高效的一種方法,自動(dòng)化測(cè)試體系的建設(shè)也更加重要,持續(xù)集成也是它成功實(shí)現(xiàn)的關(guān)鍵,進(jìn)行頻繁執(zhí)行自動(dòng)化測(cè)試用例,能夠盡早的發(fā)現(xiàn)系統(tǒng)問(wèn)題并給予解決,確保系統(tǒng)的正確性。在開發(fā)系統(tǒng)時(shí),自動(dòng)化測(cè)試方法包括代碼分析和檢查,代碼驅(qū)動(dòng)自動(dòng)化測(cè)試和圖形用戶界面的自動(dòng)化測(cè)試[1]。
持續(xù)集成起源于極限編程,它是開發(fā)技術(shù)的最佳實(shí)踐之一。它要求每個(gè)開發(fā)人員在幾個(gè)小時(shí)內(nèi)完成一項(xiàng)任務(wù),并定期將代碼提交到版本控制存儲(chǔ)庫(kù),然后持續(xù)集成服務(wù)器通過(guò)檢測(cè)代碼更改自動(dòng)啟動(dòng)集成構(gòu)建,運(yùn)行代碼靜態(tài)檢查和自動(dòng)測(cè)試,試圖發(fā)現(xiàn)新更改的代碼帶來(lái)的新的潛在缺陷,并確保其他功能不受影響,然后持續(xù)集成服務(wù)器生成最終的結(jié)果報(bào)告,并將報(bào)告發(fā)送給相應(yīng)的開發(fā)人員和管理人員(如圖1),并自動(dòng)生成最終結(jié)果。最終結(jié)果報(bào)告包括構(gòu)建狀態(tài)、重復(fù)邏輯檢查、代碼復(fù)雜度報(bào)告、符合編碼標(biāo)準(zhǔn)、單元測(cè)試結(jié)果、功能測(cè)試結(jié)果等[2]。
圖1 持續(xù)集成構(gòu)成
開發(fā)人員必須根據(jù)最終結(jié)果報(bào)告修復(fù)新引入的缺陷,如果不能立即執(zhí)行修復(fù),應(yīng)該撤回提交的代碼以確保其他開發(fā)人員能夠正常工作,同時(shí)也隨時(shí)了解每次集成的狀態(tài)構(gòu)建過(guò)程和測(cè)試必須足夠快地完成,以便持續(xù)集成服務(wù)器能夠跟上這些變化并向軟件工程師及時(shí)反饋,同時(shí)他們對(duì)變化的記憶仍然是最新的,據(jù)說(shuō)一個(gè)軟件項(xiàng)目中有50人的開發(fā)團(tuán)隊(duì)開發(fā)了200,000行代碼,通常每天發(fā)布大約20次基于持續(xù)集成的自動(dòng)化測(cè)試。目前,越來(lái)越多的公司在軟件系統(tǒng)開發(fā)中采用這種方式,如Google,F(xiàn)acebook,百度,阿里巴巴等。
降低風(fēng)險(xiǎn)。當(dāng)服務(wù)器檢測(cè)到程序員提交源代碼更改時(shí),它會(huì)自動(dòng)重新編譯,運(yùn)行單元測(cè)試、功能測(cè)試與集成測(cè)試,并在短時(shí)間內(nèi)反饋結(jié)果。服務(wù)器自動(dòng)發(fā)送電子郵件或短信通知給引入缺陷的開發(fā)人員,讓開發(fā)人員可以輕松找出構(gòu)建失敗或測(cè)試失敗的根本原因,并在早期解決問(wèn)題。因此避免了傳統(tǒng)軟件開發(fā)中廣泛存在的風(fēng)險(xiǎn)。
節(jié)省成本。在軟件開發(fā)過(guò)程中,發(fā)現(xiàn)缺陷越早,解決的成本就越低。根據(jù)國(guó)外軟件質(zhì)量部門的統(tǒng)計(jì)數(shù)據(jù),發(fā)現(xiàn)和解決軟件缺陷需要花費(fèi)大約 100美元在單元測(cè)試階段,而在市場(chǎng)上發(fā)布的產(chǎn)品中解決軟件bug需要約10,000美元。持續(xù)集成可以使缺陷得到及時(shí)檢測(cè)和解決,從而大幅度節(jié)省成本。
提高效率。軟件開發(fā)集成過(guò)程中,人工集成最新代碼,手工代碼復(fù)審,手工測(cè)試等操作的反復(fù)手工勞動(dòng)會(huì)隨機(jī)引入一些不確定因素,使得缺陷檢測(cè)和修復(fù)極其困難。每次在干凈的環(huán)境中運(yùn)行(重新編譯構(gòu)建模塊,而不是重新使用上次編譯的結(jié)果),使用相同的過(guò)程和腳本來(lái)構(gòu)建和測(cè)試軟件,從而降低系統(tǒng)級(jí)的不確定性,提高整個(gè)開發(fā)團(tuán)隊(duì)的工作效率。例如一個(gè)項(xiàng)目開發(fā)過(guò)程中,有許多重復(fù)性的活動(dòng),其包括代碼編譯,數(shù)據(jù)庫(kù)集成,部署,測(cè)試,問(wèn)題反饋等等,通過(guò)自動(dòng)化集成在構(gòu)建腳本時(shí),將依次執(zhí)行編譯,自動(dòng)測(cè)試等動(dòng)作,減少提交重復(fù)代碼沖突的排查時(shí)間,從而減少了重復(fù)性勞動(dòng)。
傳統(tǒng)的軟件開發(fā)方法通常包括以下幾個(gè)階段:需求收集和分析,模塊化設(shè)計(jì),實(shí)施,集成測(cè)試和系統(tǒng)測(cè)試。最常見(jiàn)的問(wèn)題是每個(gè)模塊都可以單獨(dú)開發(fā)和測(cè)試,一切都很正常,但是當(dāng)它們集成在一起時(shí)會(huì)出現(xiàn)很多意想不到的問(wèn)題。例如:開發(fā)人員在進(jìn)行某些更改時(shí)會(huì)影響其他人的代碼,但他不知道該代碼,因此會(huì)出現(xiàn)軟件缺陷。由于上述兩人之間的交叉模塊化,這類軟件缺陷很難調(diào)查。隨著時(shí)間的推移,問(wèn)題會(huì)逐漸惡化,缺陷通常發(fā)生在整合階段,但實(shí)際上已經(jīng)存在了幾周甚至幾個(gè)月,所以開發(fā)人員需要花費(fèi)大量的時(shí)間和精力來(lái)找出這些缺陷的根本原因,這又會(huì)影響項(xiàng)目發(fā)布的成功。另一方面,項(xiàng)目的日常工作中有許多重復(fù)的工作,如代碼審查,單元測(cè)試,代碼覆蓋率檢查,靜態(tài)代碼分析,動(dòng)態(tài)代碼分析,重復(fù)構(gòu)建,發(fā)布版本變更等,他們消耗開發(fā)人員大量的重復(fù)性工作時(shí)間,如果持續(xù)集成在項(xiàng)目開發(fā)中引入,不僅可以大大提高項(xiàng)目團(tuán)隊(duì)的響應(yīng)時(shí)間,而且還可以讓開發(fā)人員免于重復(fù)工作。此外,還有足夠的時(shí)間用于產(chǎn)品創(chuàng)新和高質(zhì)量軟件的開發(fā)。
在設(shè)計(jì)和建立自動(dòng)化測(cè)試體系之前首先要確定測(cè)試的需求,自動(dòng)化測(cè)試架構(gòu)師完成全面的軟件結(jié)構(gòu),需要進(jìn)一步的考慮工程師的測(cè)試需求,優(yōu)先確定軟件測(cè)試的各種限制因素,其中測(cè)試需求又可分為多種,如測(cè)試范圍的確定,同時(shí)除了現(xiàn)在的測(cè)試需求以外,還需要評(píng)估未來(lái)的需求,其次預(yù)算與時(shí)間、測(cè)試系統(tǒng)的期望壽命、錯(cuò)誤診斷功能等其他測(cè)試需求、操作員的技術(shù)水平、產(chǎn)量等等均應(yīng)考慮在內(nèi)[3]。
硬件的選擇以及測(cè)試系統(tǒng)的設(shè)計(jì)是一件棘手的任務(wù),必須做出正確的選擇,以避免在被測(cè)試系統(tǒng)的使用壽命中花額外的費(fèi)用。例如,沒(méi)有在機(jī)柜預(yù)留足夠的閑置空間會(huì)導(dǎo)致整個(gè)測(cè)試系統(tǒng)的重新設(shè)計(jì),這樣會(huì)花費(fèi)數(shù)千美元造成數(shù)月的停工。當(dāng)設(shè)計(jì)安裝機(jī)柜系統(tǒng)時(shí),一些關(guān)鍵的因素是必須考慮的,包括用于機(jī)殼,固定裝置,互連系統(tǒng)及開關(guān)的機(jī)柜類型、機(jī)柜尺寸、及配電系統(tǒng)[4]。
在測(cè)試系統(tǒng)設(shè)計(jì)和開發(fā)過(guò)程中,軟件扮演了非常重要的角色,一般架構(gòu)工程師推薦采用的測(cè)試系統(tǒng)架構(gòu)前三層都是面向軟件的,而軟件設(shè)計(jì)的最佳實(shí)踐主要是測(cè)試執(zhí)行的最佳實(shí)踐,測(cè)試執(zhí)行利用它按預(yù)定義流程來(lái)快速持續(xù)地執(zhí)行一系列的測(cè)試(比如各功能模塊)。對(duì)所有設(shè)備都相同的操作(例如生成報(bào)告、序列號(hào)輸入)應(yīng)當(dāng)利用測(cè)試執(zhí)行程序來(lái)處理針對(duì)特定待測(cè)設(shè)備的操作則應(yīng)該在代碼模塊內(nèi)開發(fā)。由于測(cè)試執(zhí)行程序可以處理通用的操作,因此無(wú)需再為多個(gè)設(shè)備編寫相同的代碼,然而可以幫助開發(fā)人員節(jié)省時(shí)間[5]。
持續(xù)集成在自動(dòng)化測(cè)試體系中至少有六點(diǎn)要做到自動(dòng)化,它們分別是自動(dòng)化的運(yùn)行測(cè)試、自動(dòng)生成可部署的二進(jìn)制成品、自動(dòng)將代碼部署到預(yù)發(fā)布環(huán)境、自動(dòng)為CodeBase打上標(biāo)簽、自動(dòng)運(yùn)行回歸測(cè)試、自動(dòng)生成報(bào)告等[6]。
持續(xù)集成的自動(dòng)化測(cè)試部署可提高開發(fā)團(tuán)隊(duì)的生產(chǎn)力,改善代碼質(zhì)量并降低項(xiàng)目執(zhí)行風(fēng)險(xiǎn)。而且它為開發(fā)團(tuán)隊(duì)帶來(lái)了一個(gè)新的發(fā)展機(jī)會(huì),當(dāng)開發(fā)人員開發(fā)新功能時(shí),他們開始考慮如何將它們構(gòu)建為幾個(gè)小任務(wù)并定期進(jìn)行工作,而不是在長(zhǎng)期開發(fā)分支上開發(fā)新的項(xiàng)目,最終提交大量的代碼,鼓勵(lì)開發(fā)人員在提交源代碼時(shí)提交相應(yīng)的自動(dòng)化測(cè)試用例。在未來(lái)的工作中,首先對(duì)部署持續(xù)集成的自動(dòng)化測(cè)試做準(zhǔn)備;其次考慮通過(guò)增加測(cè)試來(lái)增加自動(dòng)測(cè)試覆蓋率,并通過(guò)計(jì)算性能瓶頸來(lái)減少持續(xù)集成構(gòu)建中的持續(xù)時(shí)間。持續(xù)集成系統(tǒng)能夠?yàn)轫?xiàng)目構(gòu)建和質(zhì)量指標(biāo)給予及時(shí)的反饋,有些集成可以反饋功能完成度和產(chǎn)品缺陷率。通過(guò)持續(xù)集成開發(fā)人員能夠清楚的知道自己對(duì)軟件修改之后與其它功能造成的影響程度,并及時(shí)給予最優(yōu)解決方案,從而可以提高開發(fā)團(tuán)隊(duì)對(duì)產(chǎn)品的信心度??梢?jiàn)持續(xù)集成在自動(dòng)化測(cè)試體系建設(shè)中是非常重要的。
[1]Daniel J.Mosley.軟件測(cè)試自動(dòng)化[M].機(jī)械工業(yè)出版社, 2003.10.
[2]馬雪英, 姚礪, 葉澄清.回歸測(cè)試自動(dòng)化工具研究[J].計(jì)算機(jī)科學(xué),2005.
[3]李念強(qiáng), 孫傳偉, 王玉泰.分布式測(cè)試平臺(tái)的應(yīng)用研究[J].計(jì)算機(jī)測(cè)量與控制, 2003, 11(12): 931-933.
[4]杜慶峰.高級(jí)軟件測(cè)試技術(shù)[M].北京: 清華大學(xué)出版社, 2011.
[5]溫素劍.零成本實(shí)現(xiàn) Web自動(dòng)化測(cè)試--基于Selenium和 Bromine[M]..北京: 電子工業(yè)出版社, 2011.