qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問(wèn) http://qaseven.github.io/

          淺談持續(xù)集成構(gòu)建在互聯(lián)網(wǎng)軟件測(cè)試項(xiàng)目中應(yīng)用與分析

          摘要:本文將介紹持續(xù)集成互聯(lián)網(wǎng)軟件項(xiàng)目中的應(yīng)用及案例分析,主要針對(duì)互聯(lián)網(wǎng)行業(yè)軟件項(xiàng)目過(guò)程中的軟件測(cè)試效率和質(zhì)量的研究與實(shí)踐;在當(dāng)前Web2.0時(shí)代,筆者抓住互聯(lián)網(wǎng)行業(yè)的軟件測(cè)試特性,在軟件項(xiàng)目的開發(fā)過(guò)程中運(yùn)用持續(xù)集成構(gòu)建的思想來(lái)統(tǒng)一規(guī)范、流程和管理,不僅提升項(xiàng)目在提測(cè)之前的軟件版本質(zhì)量,也有利于軟件項(xiàng)目過(guò)程的效率和質(zhì)量風(fēng)險(xiǎn)控制。在淺談持續(xù)集成及工具在項(xiàng)目中的應(yīng)用同時(shí),也結(jié)合筆者從事互聯(lián)網(wǎng)軟件測(cè)試的工作經(jīng)驗(yàn),進(jìn)一步闡述與總結(jié)在軟件測(cè)試過(guò)程的持續(xù)集成帶來(lái)的益處與不足。

            筆者會(huì)先介紹當(dāng)前互聯(lián)網(wǎng)的軟件測(cè)試與傳統(tǒng)的軟件測(cè)試區(qū)別與聯(lián)系,然后針對(duì)互聯(lián)網(wǎng)軟件測(cè)試的特性再結(jié)合持續(xù)集成工具思想的運(yùn)用,最后將比較詳細(xì)的介紹Hudson持續(xù)集成構(gòu)建平臺(tái)在項(xiàng)目中的實(shí)踐與分析,從而解決了在多個(gè)項(xiàng)目并行開發(fā)的軟件項(xiàng)目中應(yīng)該如何應(yīng)用持續(xù)集成以保持項(xiàng)目整理開發(fā)過(guò)程的高質(zhì)量和高效率問(wèn)題。

            關(guān)鍵詞:軟件測(cè)試;持續(xù)集成;自動(dòng)化測(cè)試

            一、引言

            在互聯(lián)網(wǎng)信息時(shí)代,隨著Internet的快速增長(zhǎng)及Web應(yīng)用的不斷發(fā)展,使其快速滲透到商業(yè)、電子商務(wù)、軍事、工業(yè)、教育等領(lǐng)域和個(gè)人生活的各個(gè)方面,對(duì)我們的生活及工作產(chǎn)生了深遠(yuǎn)的影響。在當(dāng)今市場(chǎng)需求和Internet技術(shù)進(jìn)步的不斷推動(dòng)下,Web應(yīng)用日益增加,互聯(lián)網(wǎng)的軟件規(guī)模不斷擴(kuò)大,復(fù)雜性增加,操作易用性降低,面對(duì)互聯(lián)網(wǎng)的用戶也越來(lái)越多,因此軟件的質(zhì)量越來(lái)越成為人們共同關(guān)注的問(wèn)題,作為保證軟件質(zhì)量和可靠性的重要手段,軟件測(cè)試已成為互聯(lián)網(wǎng)軟件項(xiàng)目開發(fā)過(guò)程的重要環(huán)節(jié)。

            在整個(gè)軟件生命周期中每個(gè)環(huán)節(jié)都存在軟件測(cè)試的活動(dòng),軟件測(cè)試伴隨著軟件開發(fā),以檢驗(yàn)每一個(gè)階段性的成果是否符合質(zhì)量要求和達(dá)到預(yù)先定義的目標(biāo),盡可能早的發(fā)現(xiàn)問(wèn)題并修復(fù)問(wèn)題已成為當(dāng)前互聯(lián)網(wǎng)時(shí)代軟件開發(fā)與測(cè)試過(guò)程的目的,也就孕育了要提高上游軟件質(zhì)量,發(fā)揮測(cè)試工程師在軟件項(xiàng)目需求、設(shè)計(jì)階段參與的重要性。互聯(lián)網(wǎng)的信息和產(chǎn)品更新速度較傳統(tǒng)軟件產(chǎn)品是非常之快的,保證好軟件系統(tǒng)的質(zhì)量和穩(wěn)定性,運(yùn)用敏捷的測(cè)試思維、測(cè)試工具來(lái)改變傳統(tǒng)的測(cè)試方法和測(cè)試觀念,正是在互聯(lián)網(wǎng)軟件實(shí)施過(guò)程中必須面對(duì)的。針對(duì)互聯(lián)網(wǎng)軟件開發(fā)的特點(diǎn),筆者結(jié)合多年的軟件測(cè)試經(jīng)驗(yàn)與測(cè)試策略、工具,總結(jié)一些比較適用的方法、流程和工具綜合運(yùn)用到互聯(lián)網(wǎng)軟件開發(fā)與測(cè)試過(guò)程中,綜合運(yùn)用持續(xù)集成構(gòu)建的思想進(jìn)一步保證軟件質(zhì)量和提升開發(fā)效率。

            二、 現(xiàn)狀分析

            目前在互聯(lián)網(wǎng)軟件開發(fā)測(cè)試過(guò)程中,存在效率低下、質(zhì)量不高的情況,具體可以總結(jié)成以下幾個(gè)方面:

            第一、RD編寫的代碼質(zhì)量不高

            開發(fā)工程師在編碼階段,經(jīng)常犯一些比較低級(jí)的錯(cuò)誤,致使提測(cè)版本的代碼質(zhì)量較低,如空指針異常、重復(fù)犯錯(cuò)及違背編碼規(guī)范等,常常會(huì)被在冒煙測(cè)試階段退回而重新開發(fā),增加提測(cè)版本質(zhì)量和效率的風(fēng)險(xiǎn),也影響到項(xiàng)目整體開發(fā)進(jìn)度。

            第二、單元測(cè)試流程不規(guī)范,質(zhì)量和覆蓋率較低

            為了提高上游代碼質(zhì)量,在開發(fā)過(guò)程增加了單元測(cè)試流程和規(guī)范,各部門產(chǎn)品線統(tǒng)一推廣與執(zhí)行,實(shí)施一段時(shí)間后發(fā)現(xiàn)流程在各產(chǎn)品線執(zhí)行執(zhí)行的比較混亂,存在一些流程和規(guī)范細(xì)節(jié)問(wèn)題,執(zhí)行出現(xiàn)脫節(jié),導(dǎo)致單元測(cè)試的代碼質(zhì)量與代碼覆蓋率下降,在某些項(xiàng)目過(guò)程中暴露的非常明顯,較嚴(yán)重地影響了項(xiàng)目進(jìn)度和質(zhì)量。

            第三、測(cè)試方法單一,測(cè)試策略陳舊,測(cè)試過(guò)程的效率和質(zhì)量低下

            項(xiàng)目過(guò)程,測(cè)試工程師從立項(xiàng)前的需求討論到立項(xiàng)后的需求、DEMO、設(shè)計(jì)評(píng)審和TC編寫幾乎全程參與,一定程度提升測(cè)試工程師在項(xiàng)目研發(fā)過(guò)程的地方和影響力,另外也帶來(lái)了測(cè)試方法單一和測(cè)試策略陳舊的問(wèn)題,全靠手工測(cè)試已成為項(xiàng)目測(cè)試過(guò)程的瓶頸,往往就導(dǎo)致項(xiàng)目、需求排隊(duì)現(xiàn)象,進(jìn)一步分析說(shuō)明了我們的測(cè)試產(chǎn)出比低下,效率不高。

            必須改變整個(gè)項(xiàng)目過(guò)程的測(cè)試方法,引入新的測(cè)試工具和測(cè)試策略,必須發(fā)揮自動(dòng)化的力量緩解手工測(cè)試的瓶頸和解決效率低下的問(wèn)題。

            第四、上線后出現(xiàn)故障頻繁,bugfix需求增多

            項(xiàng)目和小需求在互聯(lián)網(wǎng)行業(yè)中更新非常快,如果過(guò)程沒(méi)有更好的控制軟件風(fēng)險(xiǎn)的話,上線后的需求就會(huì)出現(xiàn)很多故障,導(dǎo)致用戶大量投訴,后續(xù)修復(fù)的工作量將投入很多資源去支持,一定程度上浪費(fèi)了精力和物力,降低了生成率。

            尤其是在大項(xiàng)目和新增需求發(fā)布上線后,故障的頻繁讓開發(fā)、測(cè)試心驚膽戰(zhàn),不僅要處理手中新的需求,還要跟進(jìn)線上故障的bugfix需求,使工程師的精力分散,增加了質(zhì)量的風(fēng)險(xiǎn)。如何把故障減少下來(lái),如何提升測(cè)試階段和開發(fā)前期的質(zhì)量,已擺在工程師及主管們面前。

            第五、無(wú)數(shù)據(jù)支撐來(lái)度量和評(píng)估開發(fā)和測(cè)試人員的質(zhì)量和效率

            軟件過(guò)程度量目前實(shí)施的還不規(guī)范,無(wú)基本度量的數(shù)據(jù)來(lái)支撐說(shuō)明存在的問(wèn)題,只能通過(guò)某階段某現(xiàn)象說(shuō)明有問(wèn)題存在,但無(wú)法給一個(gè)標(biāo)準(zhǔn)去度量和評(píng)估,這樣給軟件開發(fā)和測(cè)試過(guò)程的質(zhì)量和效率評(píng)估帶來(lái)很多不便,如何收集過(guò)程數(shù)據(jù),如何制定度量標(biāo)準(zhǔn),還需要進(jìn)一步在軟件開發(fā)過(guò)程進(jìn)行分析與梳理。軟件過(guò)程度量也是為保證軟件質(zhì)量的紐帶,其實(shí)這個(gè)專題研究的內(nèi)容也是比較廣的,從軟件工程上來(lái)講,測(cè)試過(guò)程改進(jìn)有很多模型參考,這里不展開說(shuō)明。

            三、互聯(lián)網(wǎng)軟件測(cè)試特性

            在基于互聯(lián)網(wǎng)軟件系統(tǒng)開發(fā)過(guò)程中,通常就是以Web系統(tǒng)為基礎(chǔ),按照B/S的訪問(wèn)方式為主,包含客戶端瀏覽器、Web應(yīng)用服務(wù)器、數(shù)據(jù)庫(kù)服務(wù)器的軟件系統(tǒng),首先從技術(shù)實(shí)現(xiàn)上來(lái)說(shuō),一般的Web系統(tǒng)結(jié)構(gòu),不論是.NET還是J2EE框架,都是多層框架設(shè)計(jì),有用戶操作界面層、業(yè)務(wù)邏輯層、數(shù)據(jù)驅(qū)動(dòng)層;其次從結(jié)構(gòu)上來(lái)講,都是有客戶端部分、傳輸網(wǎng)絡(luò)部分和服務(wù)端部分。

            1、系統(tǒng)架構(gòu)

            一個(gè)比較典型的互聯(lián)網(wǎng)軟件系統(tǒng)的結(jié)構(gòu)示意圖如圖-1,前端的用戶瀏覽器,通過(guò)網(wǎng)絡(luò)訪問(wèn)應(yīng)用服務(wù)器及數(shù)據(jù)庫(kù)服務(wù)器傳回的數(shù)據(jù)。

          圖-1

           2、互聯(lián)網(wǎng)軟件測(cè)試特點(diǎn)

            1)不斷創(chuàng)新,改變易用性,留住用戶

            在互聯(lián)網(wǎng)軟件開發(fā)過(guò)程中,我們往往關(guān)注點(diǎn)會(huì)集中在用戶體驗(yàn)、軟件的創(chuàng)新及能為用戶帶來(lái)的價(jià)值,所以必須建立在用戶體驗(yàn)基礎(chǔ)上進(jìn)行創(chuàng)新,留住用戶,改變易用性,是互聯(lián)網(wǎng)軟件開發(fā)與測(cè)試的首要特點(diǎn)。

            2)采用敏捷的開發(fā)測(cè)試思維,快速實(shí)現(xiàn)新功能,快速修復(fù)線上bug

            基于創(chuàng)新的思維決定了我們?cè)诨ヂ?lián)網(wǎng)行業(yè)的軟件開發(fā)過(guò)程中,必須采取小步快走、版本微創(chuàng)新和快速獲取用戶反饋,只有這樣才能體驗(yàn)客戶第一,改變軟件服務(wù)的對(duì)象觀念。第二個(gè)互聯(lián)網(wǎng)軟件開發(fā)測(cè)試的特點(diǎn)就是快,行業(yè)覺(jué)得要快速實(shí)現(xiàn)新功能并快速發(fā)布,快速修復(fù)線上存在的問(wèn)題。

            在很多互聯(lián)網(wǎng)公司,開發(fā)和測(cè)試團(tuán)隊(duì)往往是技術(shù)團(tuán)隊(duì)的主力軍,信息更新快捷和項(xiàng)目需求發(fā)布的頻繁,很多程度上與傳統(tǒng)軟件開發(fā)和測(cè)試過(guò)程分離開來(lái),組成比較小的團(tuán)隊(duì)進(jìn)行軟件開發(fā)與測(cè)試,這樣有利于處理需求的響應(yīng)速度的提升,也有利軟件開發(fā)過(guò)程的風(fēng)險(xiǎn)和資源管理。

            3)采用的工具協(xié)助敏捷開發(fā)測(cè)試過(guò)程,提出了自動(dòng)化測(cè)試

            大家知道,如果縮短軟件開發(fā)和測(cè)試過(guò)程的時(shí)間,在保證需求質(zhì)量的前提下,我們必須提供我們的過(guò)程效率,那么如何提高呢?這里就引起在互聯(lián)網(wǎng)軟件項(xiàng)目中的自動(dòng)化測(cè)試,尤其在軟件測(cè)試過(guò)程,自動(dòng)化測(cè)試不僅僅是測(cè)試技能的提升,更是能給測(cè)試工程師乃至整個(gè)研發(fā)團(tuán)隊(duì)帶來(lái)質(zhì)的價(jià)值和創(chuàng)新,是真正提高了整個(gè)研發(fā)過(guò)程的效率。自提出自動(dòng)化測(cè)試以后,工程師不斷研究與實(shí)踐,發(fā)現(xiàn)自動(dòng)化腳本與更新維護(hù)成本非常大,久而久之維護(hù)的工作量已超出預(yù)期評(píng)估時(shí)間,這樣導(dǎo)致要花大量的資源投入自動(dòng)化維護(hù),增加成本,經(jīng)過(guò)大量項(xiàng)目實(shí)踐與分析,在互聯(lián)網(wǎng)行業(yè)的自動(dòng)化不能是單純的基于頁(yè)面UI功能自動(dòng)化,必須基于架構(gòu)進(jìn)行分層設(shè)計(jì)自動(dòng)化,深化自動(dòng)化技術(shù)和平臺(tái)化的服務(wù),做到持續(xù)集成才更有效。

            3、敏捷測(cè)試思維

            通過(guò)了解互聯(lián)網(wǎng)系統(tǒng)架構(gòu)和軟件開發(fā)測(cè)試過(guò)程,我們必須改變以往的測(cè)試思維和測(cè)試策略,抓住Web軟件測(cè)試的特點(diǎn)綜合選取更適合的方法去運(yùn)用,直到提出持續(xù)集成構(gòu)建,才在項(xiàng)目中慢慢推廣應(yīng)用起來(lái),其實(shí)就是采用敏捷的開發(fā)過(guò)程和測(cè)試思維相結(jié)合,把軟件開發(fā)整個(gè)過(guò)程質(zhì)量控制提到上游。

            四、持續(xù)集成介紹

            1、持續(xù)集成是什么

            大師Martin Fowler對(duì)持續(xù)集成是這樣定義的: 持續(xù)集成是一種軟件開發(fā)實(shí)踐,即團(tuán)隊(duì)開發(fā)成員經(jīng)常集成它們的工作,通常每個(gè)成員每天至少集成一次,也就意味著每天可能會(huì)發(fā)生多次集成。每次集成都通過(guò)自動(dòng)化的構(gòu)建(包括編譯,發(fā)布,自動(dòng)化測(cè)試)來(lái)驗(yàn)證,從而盡快地發(fā)現(xiàn)集成錯(cuò)誤。許多團(tuán)隊(duì)發(fā)現(xiàn)這個(gè)過(guò)程可以大大減少集成的問(wèn)題,讓團(tuán)隊(duì)能夠更快的開發(fā)內(nèi)聚的軟件。

            在敏捷開發(fā)與測(cè)試中,持續(xù)集成是極限編程十二實(shí)踐之一(1999年Kent Beck編寫的《解析極限編程》),最初被使用極限編程方法的開發(fā)人員所推捧,并在過(guò)去的幾年中得到廣泛應(yīng)用,成為業(yè)界廣為人知的軟件開發(fā)實(shí)踐。該實(shí)踐用于解決軟件開發(fā)過(guò)程中一個(gè)具體且重要的問(wèn)題,即“確保當(dāng)某個(gè)開發(fā)人員完成新的功能或修改代碼后,整個(gè)軟件仍舊能正常工作。”

            簡(jiǎn)單來(lái)說(shuō),持續(xù)集成是頻繁、持續(xù)的在多個(gè)團(tuán)隊(duì)成員的日常工作中進(jìn)行集成、驗(yàn)證并反饋。一個(gè)典型的持續(xù)集成周期基本包含如下幾個(gè)步驟:

            1)持續(xù)集成服務(wù)器不斷從版本代碼庫(kù)的服務(wù)器上檢查代碼狀態(tài),看代碼是否有更新;

            2)若發(fā)現(xiàn)代碼有最新的提交,集成服務(wù)器就會(huì)從版本代碼庫(kù)服務(wù)器下載最新的代碼;

            3)等代碼完成更新結(jié)束后,持續(xù)集成服務(wù)器調(diào)用自動(dòng)化編譯腳本進(jìn)行代碼編譯;

            4)運(yùn)行所有的自動(dòng)化測(cè)試;

            5)進(jìn)行代碼分析

            6)輸出可執(zhí)行的軟件,提高給測(cè)試人員進(jìn)行最后的測(cè)試與驗(yàn)證

            7)通過(guò)測(cè)試工程師的測(cè)試與驗(yàn)證,最后發(fā)布集成到發(fā)布

            通過(guò)上面的持續(xù)集成構(gòu)建步驟我們不難知道,其實(shí)持續(xù)集成就是一個(gè)循環(huán)、多次運(yùn)用、統(tǒng)一檢查的過(guò)程,如圖-2所示描述




          圖-2

          2、持續(xù)集成模式

            根據(jù)持續(xù)集成在項(xiàng)目中的運(yùn)用與分析,從基礎(chǔ)搭建模式到企業(yè)級(jí)的解決方案模式,基本可以分成下面三種模式,它們分別是遞增的關(guān)系,在軟件開發(fā)中隨著系統(tǒng)的復(fù)雜度和測(cè)試件的可測(cè)性不斷改進(jìn)的過(guò)程,最理想的持續(xù)集成達(dá)到是統(tǒng)一化、流程化和服務(wù)化的過(guò)程。

            1)基礎(chǔ)模式

            目前,有很多種持續(xù)集成工具,其中不乏開源產(chǎn)品,如Maven、Hudson平臺(tái)。項(xiàng)目伊始,我們可以建立自己的持續(xù)集成服務(wù)器,整個(gè)項(xiàng)目的持續(xù)集成基礎(chǔ)結(jié)構(gòu)如圖-3所示:

          圖-3

            并發(fā)多個(gè)工程師進(jìn)行代碼開發(fā),每個(gè)工程師有獨(dú)立的開發(fā)環(huán)境和開發(fā)分支,然后統(tǒng)一提交到中央代碼庫(kù),最后進(jìn)行統(tǒng)一集成編譯。

            2)階段式模式

            在基礎(chǔ)模式的框架基礎(chǔ)上,我們?cè)黾榆浖_發(fā)過(guò)程單元測(cè)試、靜態(tài)代碼檢查、UI功能自動(dòng)化檢查,如圖-4

            階段模式的持續(xù)集成較集成提升了很多,在集成server中增加了很多構(gòu)建套件,綜合利用持續(xù)集成的特點(diǎn)進(jìn)行統(tǒng)一管理。

          圖-4

            3)管道模式

            階段式持續(xù)集成重復(fù)任務(wù)多,而過(guò)程化集成的管理復(fù)雜性太高了,任何過(guò)程化上的變化都要修改已經(jīng)寫好的腳本,而這些腳本維護(hù)比較困難。既然以上兩種模式都不靈了,所以就引出了高級(jí)模式就是管道式的持續(xù)集成模式。

            管道式持續(xù)集成形式上與過(guò)程化持續(xù)集成相類似,但卻在概念上有顯著不同。在管道式持續(xù)集成中,所有的過(guò)程單元都運(yùn)行在同一管道的上下文中,即各單元所使用的原材料都是完成相同的,即代碼基線相同。當(dāng)持續(xù)集成服務(wù)器發(fā)現(xiàn)有新的代碼時(shí),會(huì)創(chuàng)建新的一個(gè)管道,所有的過(guò)程單元都在這一個(gè)管道中運(yùn)行,包含編譯打包、單元測(cè)試、功能測(cè)試、性能測(cè)試和自動(dòng)化測(cè)試。而每個(gè)單元產(chǎn)生的產(chǎn)物也在該管道中有效。如圖-5所示:

          圖-5

            不難看出管道模式的持續(xù)集成綜合了基礎(chǔ)模式和階段模式的優(yōu)點(diǎn),在管道式中,每次構(gòu)建都會(huì)試圖從管道的一端走到另一端。因此,你不會(huì)遺漏任何一個(gè)版本的成功產(chǎn)品代碼,基本上可以使項(xiàng)目研發(fā)過(guò)程全部自動(dòng)化了。




           3、持續(xù)集成流程

            一般在互聯(lián)網(wǎng)軟件開發(fā)和測(cè)試過(guò)程中,增加了持續(xù)集成構(gòu)建,在開發(fā)和測(cè)試環(huán)節(jié)會(huì)進(jìn)行多次集成與構(gòu)建,做的比較好的公司,如google,微軟等,可以集單元測(cè)試、功能自動(dòng)化測(cè)試等集成在一起構(gòu)建,做到分支代碼變更腳本通知一條龍智能流程化和服務(wù)化,可見(jiàn)下圖-6流程所示。

          圖-6

            4、持續(xù)集成優(yōu)點(diǎn)

            通過(guò)上述概念和模式的闡述,讓讀者很容易發(fā)現(xiàn)持續(xù)集成最大的優(yōu)點(diǎn)就是降低風(fēng)險(xiǎn),提高項(xiàng)目研發(fā)過(guò)程的效率和質(zhì)量,迎合在互聯(lián)網(wǎng)時(shí)代信息快速更新的現(xiàn)象。持續(xù)集成本身并不能幫助開發(fā)工程師找到bug,它是通過(guò)不斷的測(cè)試和反饋來(lái)盡早的發(fā)現(xiàn)缺陷,問(wèn)題發(fā)現(xiàn)的越早處理問(wèn)題的成本就越小越容易解決,由于無(wú)法證明通過(guò)了測(cè)試的代碼是無(wú)bug存在的,所以持續(xù)集成中的測(cè)試非常重要,好的測(cè)試能夠更多更快的發(fā)現(xiàn)當(dāng)前版本中的錯(cuò)誤。

            往往在開發(fā)和測(cè)試過(guò)程中,軟件的缺陷是累積性的,當(dāng)缺陷很多時(shí),就很難發(fā)現(xiàn)它們,利用持續(xù)集成構(gòu)建的思想,在項(xiàng)目過(guò)程中可以盡早的發(fā)現(xiàn)缺陷,最大限度的降低了我們?cè)陧?xiàng)目后期發(fā)現(xiàn)缺陷的可能性和偶然性。

            每成功構(gòu)建運(yùn)行一次就意味著之前做的代碼提交可以成功集成,沒(méi)有與他人提交的分支代碼發(fā)生沖突,沒(méi)有帶來(lái)新的缺陷,有利于開發(fā)人員對(duì)項(xiàng)目保持自信心和提高工程師的工作激情。

            持續(xù)集成在項(xiàng)目中的頻繁部署將會(huì)使最終部署的難度降到最小,用戶能夠看到頻繁上線的軟件,并做及時(shí)的溝通反饋,有助于增強(qiáng)互聯(lián)網(wǎng)模式下用戶的信心和動(dòng)力,也有助于Web產(chǎn)品化和服務(wù)化朝著正確的方向快速發(fā)展。

            5、持續(xù)集成構(gòu)建分析及工具

            在敏捷的軟件開發(fā)和測(cè)試團(tuán)隊(duì)中,我們所要做的只不過(guò)是:不斷的回顧、找出問(wèn)題與瓶頸、不斷地重構(gòu)。通過(guò)不斷重構(gòu)持續(xù)集成基礎(chǔ)結(jié)構(gòu)以及自動(dòng)化構(gòu)建腳本,使其達(dá)到我們對(duì)“反饋時(shí)間”和“判斷質(zhì)量準(zhǔn)確性”的要求。另外,我們已將“持續(xù)集成”擴(kuò)展到整個(gè)軟件開發(fā)周期,涵蓋了持續(xù)部署及發(fā)布。在上面的配置文件中,不難看出在管道模式中的兩個(gè)Stage分別名為 “UAT”測(cè)試和交付的“Production”,它們一個(gè)用于部署新版本到我們自己的持續(xù)集成服務(wù)器,另一個(gè)用于部署新版本到一個(gè)公用的持續(xù)集成服務(wù)器。部署 ‘UAT’的頻率為兩天到一周之間,‘Production’的頻率基本都是一周。這樣,我們可以得到快速反饋,改進(jìn)自己的產(chǎn)品,同時(shí)其它團(tuán)隊(duì)可以盡早地使用我們開發(fā)的新功能。

            目前業(yè)界主流的持續(xù)集成工具主要有:Apache Continuum,CruiseControl,Hudson,Maven,LuntBuild等等,開源工具使用的比較多是Hudson框架。

            五、Hudson介紹

            1、Hudson簡(jiǎn)介

            是一個(gè)功能強(qiáng)大的持續(xù)集成框架,可以持續(xù)構(gòu)建和測(cè)試軟件項(xiàng)目,并監(jiān)控持續(xù)集成中生成的報(bào)告,屬于開源框架,可以進(jìn)行多元化插件開發(fā)與集成。

            框架的優(yōu)點(diǎn)是基于WAR包,安裝部署非常簡(jiǎn)單,提供了功能完善的Web管理界面和強(qiáng)大的報(bào)告輸出功能,另外就是有豐富的插件支持,并支持自動(dòng)化安裝,便于維護(hù)。

            2、核心應(yīng)用

            由于是開源框架,在項(xiàng)目實(shí)踐中可以不斷完善我們持續(xù)集成過(guò)程存在的問(wèn)題,可以集成更多的插件解決我們想要自助的集成模式。

            目前在筆者參與的項(xiàng)目中的核心應(yīng)用主要有幾個(gè)部分:

            1)靜態(tài)代碼檢查(Findbugs工具)

            2)單元測(cè)試(Junit)

            3)代碼覆蓋率檢查(Cov)

            3、安裝與配置

            開源框架,有便利的安裝指南,安裝起來(lái)非常快捷,主要步驟有:

            ● 下載Hudson WAR包

            ● 部署到Jboss服務(wù)中

            ● 安裝Html Report Plugin插件

            ● 安裝Cobertura Plugin插件

            ● 安裝Findbugs Plugin插件

            ● 創(chuàng)建分組視圖和用戶權(quán)限

            配置也比較簡(jiǎn)單,主要配置插件和SVN代碼及環(huán)境相關(guān)的條件,我們先看下配置插件,見(jiàn)下圖所示:

            Cobertura配置(圖-7)

          圖-7




          Findbugs的配置(圖-8)

          圖-8

            在Hudson持續(xù)集成平臺(tái)中創(chuàng)建一個(gè)Job(圖-9)

          圖-9

            下面是配置代碼庫(kù),以Svn代碼庫(kù)代碼管理為例(圖-10)

          圖-10

            后續(xù)進(jìn)行配置定制執(zhí)行任務(wù)和執(zhí)行shell腳本,然后完成生成單元測(cè)試報(bào)告和生成代碼覆蓋率報(bào)告的配置,最后完成生產(chǎn)bug掃描報(bào)告和自動(dòng)發(fā)生郵件提醒的配置,當(dāng)然也開源插件集成到自動(dòng)發(fā)到手機(jī)提醒。都配置完成后就可以進(jìn)行build 運(yùn)行查看配置信息的報(bào)告,如果都通過(guò)自己在項(xiàng)目中需求的話,基本配置就完成了,后續(xù)在項(xiàng)目中就能發(fā)揮Hudson平臺(tái)進(jìn)行持續(xù)集成帶給我們價(jià)值。

            六、 Hudson在項(xiàng)目中的應(yīng)用

            可以看出,持續(xù)集成的關(guān)鍵在于完成的自動(dòng)化、完成的流程化,需要借助相關(guān)工具和平臺(tái)才能完成,所以持續(xù)集成環(huán)境的搭建需要花費(fèi)比較大的精力,但是環(huán)境一旦搞定后,只需要花費(fèi)很短的時(shí)間去維護(hù),而且可以給我們項(xiàng)目開發(fā)和測(cè)試的效率帶來(lái)很大的回報(bào)。根據(jù)持續(xù)集成的重要實(shí)踐,下面以筆者工作中的實(shí)例,主要是在Hudson平臺(tái)進(jìn)行持續(xù)集成進(jìn)行應(yīng)用和分析,在項(xiàng)目中的持續(xù)集成流程,詳見(jiàn)下圖-11說(shuō)明

          圖-11

            下面以當(dāng)前正在開發(fā)的一個(gè)項(xiàng)目(項(xiàng)目名稱為Campaign)為例說(shuō)明Hudson在項(xiàng)目中的應(yīng)用及分析,如圖-12所示:

          圖-12

            從Hudson持續(xù)平臺(tái)上截圖中可以看到,目前這個(gè)項(xiàng)目并行有5條分支(應(yīng)用)在開發(fā),平臺(tái)上很清晰的記錄了每個(gè)應(yīng)用開發(fā)過(guò)程構(gòu)建集成的記錄信息,如成功、失敗和持續(xù)的Time,圖中s列顏色分別代表了:藍(lán)色-集成構(gòu)建通過(guò),黃色-集成構(gòu)建(冒煙失敗)不通過(guò),還有一種紅色-集成構(gòu)建過(guò)程編譯失敗或發(fā)生錯(cuò)誤。

          下面分別拿不通過(guò)和通過(guò)的兩個(gè)應(yīng)用分支來(lái)看(Campaign-Bss和Campaign-Settle)

            (一)先看Campaign-Bss(圖-13)分支集成情況:

          圖-13

            圖-13中標(biāo)紅圈起來(lái)的我們一一說(shuō)明和分析下:

            ● 左側(cè)表示:持續(xù)集成的歷史記錄,可以看出有紅色編譯失敗或錯(cuò)誤階段到黃色冒煙失敗的build history記錄

            ● 右側(cè)表示:插件集成后檢查,如Findbugs(靜態(tài)代碼)檢查、靜態(tài)代碼檢查,單元測(cè)試和UI自動(dòng)化覆蓋率檢查。圖-13中覆蓋率的圖很明顯隨著Build次數(shù)覆蓋率是提高的,也就是說(shuō)最后的Build覆蓋率肯定比前一次要好,質(zhì)量要高,直到達(dá)到約定的提測(cè)條件時(shí)且主干無(wú)failed的情況下才通過(guò)(主干無(wú)failed是只單元測(cè)試腳本在研發(fā)過(guò)程中可能有變更,如添加、修改和刪除,有運(yùn)行失敗的風(fēng)險(xiǎn),所以要求研發(fā)工程師要保證單元測(cè)試腳本每次Build后必須是100%Pass)

          圖-14

            ● 進(jìn)一步查看Coverage Report 我們不難發(fā)現(xiàn)更詳細(xì)的信息展現(xiàn)在我們眼前,如圖-14所示,比較詳細(xì)的輸出了工程包摘要,如Lines(代碼行覆蓋)這里統(tǒng)計(jì)代碼行共計(jì)525行,完成覆蓋245行,所以結(jié)果統(tǒng)計(jì)是Lines為47%

            ● 分析下下面圈起的信息是顯示代碼框架中(接口)實(shí)現(xiàn)類、方法的名稱(如dao層和bo業(yè)務(wù)的接口實(shí)現(xiàn)類等信息),其中com.ali.bp.bss.activity.dao.impl 在Conditionals為N/A(說(shuō)明開發(fā)還未提交代碼集成),可以通過(guò)下面名稱詳細(xì)查看代碼覆蓋率覆蓋的情況

            (二)再看Campaign-Settle(圖-15)分支集成情況:

          圖-15

          圖-16

            Campaign-Settle分支集成通過(guò)后,總體無(wú)Findbugs增加,Lines覆蓋率為63%,從圖-15和圖-16中不難看出比Campaign-Bss分支集成后的質(zhì)量要好。

            通過(guò)這個(gè)項(xiàng)目的案例我們來(lái)做個(gè)小結(jié)與分析,從上面(一)和(二)持續(xù)集成分析報(bào)告來(lái)看,(二)的結(jié)果最終是集成成功且冒煙通過(guò),而(一)被測(cè)試退回重新修復(fù)問(wèn)題再等待集成驗(yàn)證。我們通過(guò)Hudson這樣的一個(gè)持續(xù)集成平臺(tái),規(guī)范了研發(fā)過(guò)程的集成測(cè)試流程,讓測(cè)試協(xié)助開發(fā)一起提升整個(gè)研發(fā)過(guò)程的質(zhì)量和效率,提高軟件系統(tǒng)的上游質(zhì)量。

            很明顯目前我們?cè)陧?xiàng)目中運(yùn)用的持續(xù)集成還沒(méi)有到達(dá)管道模式的一體化平臺(tái),像UI功能自動(dòng)化當(dāng)前是在另外一個(gè)系統(tǒng)上運(yùn)行,如果沒(méi)有通過(guò)在Hudson平臺(tái)配置的話,在持續(xù)集成平臺(tái)中是看不到運(yùn)行結(jié)果報(bào)告的,另外還有一些插件有待后續(xù)進(jìn)一步研究與實(shí)踐,像在C++框架模式如何實(shí)現(xiàn)Hudson持續(xù)集成目前還是調(diào)試實(shí)踐中,當(dāng)然業(yè)績(jī)也有很多好的關(guān)于持續(xù)集成的平臺(tái)與案例學(xué)習(xí)與借鑒,還是希望能通過(guò)項(xiàng)目實(shí)踐證明持續(xù)集成能真正解決當(dāng)前互聯(lián)網(wǎng)行業(yè)軟件開發(fā)模式存在的一些問(wèn)題。

            七、結(jié)束語(yǔ)

            結(jié)合筆者在互聯(lián)網(wǎng)行業(yè)工作經(jīng)驗(yàn),淺談了在前端基于java應(yīng)用的軟件測(cè)試過(guò)程中,我們運(yùn)用敏捷的開發(fā)和測(cè)試思想,采用Hudson持續(xù)集成構(gòu)建平臺(tái),整體打破了傳統(tǒng)測(cè)試思維,經(jīng)過(guò)多個(gè)項(xiàng)目的實(shí)踐證明,采用持續(xù)集成提升了軟件開發(fā)和測(cè)試過(guò)程的質(zhì)量和效率,提高了互聯(lián)網(wǎng)軟件生產(chǎn)效能。

            我們說(shuō)持續(xù)集成并不是一蹴而就的工作,要想真正做到管道的持續(xù)集成構(gòu)建模式,需要在項(xiàng)目過(guò)程中不斷積累經(jīng)驗(yàn)來(lái)提升與改進(jìn),當(dāng)然實(shí)施持續(xù)集成也是需要根據(jù)團(tuán)隊(duì)的實(shí)際情況來(lái)實(shí)施,但這并不能成會(huì)“偷賴”的另一個(gè)說(shuō)法。俗語(yǔ)道“沒(méi)有做不到,只有想不到”,只要不斷反思、重構(gòu)與實(shí)踐總結(jié),在互聯(lián)網(wǎng)軟件測(cè)試過(guò)程中創(chuàng)新每天都會(huì)出現(xiàn)。




          posted on 2013-06-17 10:25 順其自然EVO 閱讀(2519) 評(píng)論(0)  編輯  收藏 所屬分類: 測(cè)試學(xué)習(xí)專欄管理方向

          <2013年6月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 鄄城县| 天水市| 怀集县| 西峡县| 香格里拉县| 南漳县| 金山区| 吉林省| 房山区| 翁源县| 股票| 肇庆市| 青海省| 稷山县| 邵东县| 宜川县| 海城市| 原阳县| 隆安县| 玉山县| 潮州市| 鲁甸县| 青河县| 称多县| 三都| 凉山| 荆州市| 于都县| 依安县| 屯留县| 银川市| 塔河县| 赤峰市| 九寨沟县| 五莲县| 塘沽区| 泌阳县| 星座| 北票市| 长葛市| 慈利县|