楊文遠(yuǎn),黃 衛(wèi),趙 鑫
(南昌航空大學(xué) 科技學(xué)院,江西 共青城 332020)
軟件開發(fā)實(shí)踐中由于單組件設(shè)計(jì)不科學(xué)、組件間交互機(jī)制不完善、機(jī)器運(yùn)行環(huán)境存在差異等原因,導(dǎo)致集成、部署無法取得成功,致使軟件開發(fā)項(xiàng)目難以按時(shí)完成。為此,軟件開發(fā)時(shí)可采取持續(xù)集成機(jī)制,在多集成、常集成的基礎(chǔ)上,實(shí)施自動集成及回歸測試,以便及時(shí)發(fā)現(xiàn)與修正集成部署問題,得到質(zhì)量更佳的代碼,做到項(xiàng)目完成狀態(tài)的準(zhǔn)確標(biāo)記,從而開發(fā)出更加穩(wěn)定、優(yōu)質(zhì)的軟件產(chǎn)品。
持續(xù)集成系統(tǒng)應(yīng)用時(shí),系統(tǒng)開發(fā)人員要在持續(xù)集成活動最終報(bào)告中體現(xiàn)溝通結(jié)果,在滿足溝通要求的基礎(chǔ)上合理設(shè)計(jì)持續(xù)集成系統(tǒng)(見圖1)。本設(shè)計(jì)方案由5個(gè)關(guān)鍵系統(tǒng)構(gòu)成:(1)源碼管理系統(tǒng);(2)持續(xù)集成服務(wù)器系統(tǒng);(3)自動化構(gòu)建腳本系統(tǒng);(4)報(bào)告生成與處理中心系統(tǒng);(5)靜態(tài)代碼檢測服務(wù)系統(tǒng)[1]。系統(tǒng)開發(fā)時(shí),開發(fā)人員應(yīng)先展開本地測試,代碼自測通過后,再向源碼管理系統(tǒng)提交源碼。之后,源碼管理系統(tǒng)會自動檢測代碼變化,而后創(chuàng)建項(xiàng)目,系統(tǒng)會自主構(gòu)建腳本執(zhí)行調(diào)用項(xiàng)目清理、編譯、單元測試、測試用例覆蓋率檢測、靜態(tài)代碼檢測、性能測試以及軟件部署7個(gè)任務(wù)。
1.1.1 選擇源碼管理系統(tǒng)
(1)SVN系統(tǒng)。
此系統(tǒng)主要用于開源軟件的開發(fā),能夠跨時(shí)空管理文件及目錄,可在中心版本庫存儲文件,且能詳細(xì)記錄各次文件及目錄的修改,可為數(shù)據(jù)恢復(fù)提供支持,并能實(shí)時(shí)了解數(shù)據(jù)修改情況。選擇源碼管理系統(tǒng)支持多個(gè)用戶同時(shí)修改與管理同一數(shù)據(jù),具備團(tuán)隊(duì)協(xié)作管理功能,因此軟件開速度相對較快,且?guī)缀醪粫蚋某鲥e(cuò)而導(dǎo)致軟件質(zhì)量受影響。SVN系統(tǒng)屬于通用系統(tǒng),可管理所有類型的文件,具備目標(biāo)版本化、混合追蹤、文件鎖、獨(dú)立進(jìn)程模式、只讀存儲鏡像、可執(zhí)行標(biāo)簽、復(fù)制刪除及重命名等多項(xiàng)功能。SVN系統(tǒng)管理流程如圖2所示。
圖2 SVN系統(tǒng)管理流程
(2)Git系統(tǒng)。
此源碼管理系統(tǒng)屬于開源分布式版本控制系統(tǒng),能處理各種規(guī)模的項(xiàng)目,能將代碼、版本數(shù)據(jù)克隆到本地,并能夠在本地創(chuàng)建分支,還具備完成代碼提交、分支合并、沖突快捷快解等功能[2]。此系統(tǒng)與分布式開發(fā)模式之間的契合度更高,并將個(gè)體開發(fā)作為重點(diǎn),能削減公共服務(wù)器壓力、降低數(shù)據(jù)體量,且Git運(yùn)行速度極快,可實(shí)現(xiàn)代碼的離線提交。然而開發(fā)者可通過項(xiàng)目克隆獲取整個(gè)代碼及版本信息,因而源碼存在一定的安全隱患。實(shí)踐應(yīng)用時(shí),系統(tǒng)開發(fā)人員需要結(jié)合具體需求確定是否選用Git系統(tǒng)。Git系統(tǒng)管理流程如圖3所示。
圖3 Git系統(tǒng)管理流程
1.1.2 自動化構(gòu)建
面向移動平臺軟件開發(fā)的持續(xù)集成系統(tǒng)構(gòu)建時(shí),系統(tǒng)開發(fā)人員需要完成5個(gè)方面的自動化設(shè)計(jì)。一是自動化編碼鏈接,可采用的鏈接編譯工具有2種,分別是Ant與Maven。二是自動化測試,開發(fā)人員要實(shí)施白盒與黑盒兩類測試排查代碼運(yùn)行邏輯錯(cuò)誤,測試工具為UXnit,并需利用JMeter工具測試軟件性能完整性。三是靜態(tài)代碼檢查,系統(tǒng)開發(fā)人員要進(jìn)行桌面檢查或代碼審查,檢測工具為SonarQube以及Clang Ttatic Analyze。四是自動化部署,開發(fā)人員需要分別向各個(gè)平臺上傳軟件。五是報(bào)告反饋,系統(tǒng)能夠自動采用傳送郵件、文件或發(fā)送短信等方式向項(xiàng)目相關(guān)人傳送反饋報(bào)告。
1.1.3 持續(xù)集成服務(wù)器
持續(xù)集成服務(wù)器具有多種類別,對比分析各個(gè)服務(wù)器的平臺支持方式、構(gòu)建工具支持模式以及各自特點(diǎn)發(fā)現(xiàn)(見表1),基于移動平臺軟件開發(fā)的持續(xù)集成系統(tǒng)設(shè)計(jì)最好選用Jenkin服務(wù)器。此服務(wù)器由JVM進(jìn)程、Web管理界面2部分構(gòu)成,前者屬于命令調(diào)用模塊及構(gòu)建過程監(jiān)視模塊,后者則是項(xiàng)目構(gòu)建狀態(tài)的動態(tài)反饋模塊。系統(tǒng)開發(fā)人員完成代碼提交后,hook函數(shù)自動觸發(fā)集成活動,Jenkin服務(wù)器會自動從源碼管理系統(tǒng)中提取新代碼,再依次進(jìn)行垃圾清理、鏈接編譯、結(jié)果報(bào)告測試及結(jié)果傳送。Jenkins服務(wù)器的系統(tǒng)控制權(quán)高、系統(tǒng)兼容性強(qiáng)、功能更新速度快、反饋功能佳,項(xiàng)目構(gòu)建過程、構(gòu)建結(jié)果均可利用Web頁面實(shí)時(shí)展示。
表1 幾種常見的持續(xù)集成服務(wù)器對比
插件設(shè)計(jì)時(shí),系統(tǒng)開發(fā)人員可選用基于Jenkins的插件系統(tǒng),此插件系統(tǒng)具有插件種類多、更新速度快的特征,具備兼容性強(qiáng)、用戶界面友好、業(yè)務(wù)流程自動化程度高、報(bào)告反饋及時(shí)等優(yōu)勢,與持續(xù)集成系統(tǒng)插件的設(shè)計(jì)要求相符。此插件系統(tǒng)適用于SVN、Git 2個(gè)源碼管理系統(tǒng),只要為Jenkins提供一個(gè)的統(tǒng)一接口,插件系統(tǒng)便可完成源碼數(shù)據(jù)的獲取。Jenkins應(yīng)用的是Web管理的用戶界面,插件開發(fā)難度不大,對用戶的吸引力較強(qiáng)。利用此插件系統(tǒng)還可以降低業(yè)務(wù)流程的用戶交互頻次和出錯(cuò)率,且利于提升用戶的體驗(yàn)感受。此外,基于Jenkins的插件系統(tǒng)能夠?qū)崟r(shí)反饋報(bào)告,并具備HTML格式、XML多格式文件展示以及多元化通知服務(wù)功能。
2.1.1 自動觸發(fā)集成的實(shí)現(xiàn)方法
持續(xù)集成活動具有2個(gè)觸發(fā)條件,一是版本管理系統(tǒng)提交更新后需要對變化后的系統(tǒng)進(jìn)行影響需求分析。二是項(xiàng)目版本未發(fā)生變化但需定期進(jìn)行自動化構(gòu)建[3]。2種觸發(fā)條件下,持續(xù)集成系統(tǒng)均可采用hook函數(shù)自動觸發(fā)集成活動。應(yīng)先安裝hook程序,將之存儲在代碼庫中的hooks子目錄之下,系統(tǒng)開發(fā)人員要以事件名作為hook命令名,而后再創(chuàng)建代碼庫,由SVN系統(tǒng)構(gòu)建事件hook模板并修改名稱及內(nèi)容,而后hook程序便可運(yùn)行。編寫hook程序時(shí),持續(xù)集成系統(tǒng)的腳本及相關(guān)語言應(yīng)分別選用Windows與C語言,利用perl作為腳本語言,系統(tǒng)開發(fā)人員提交更新此版本管理系統(tǒng)的申請后,持續(xù)集成系統(tǒng)會通過自動調(diào)用觸發(fā)集成活動。之后系統(tǒng)會再利用相關(guān)語言、采取相同調(diào)用方式再次觸發(fā)集成活動。hook編寫實(shí)例如表2所示。
表2 基于Windows的pre-commit hook編寫實(shí)例
2.1.2 自動化集成的實(shí)現(xiàn)方法
以安卓軟件平臺為例,持續(xù)集成系統(tǒng)自動化集成時(shí),應(yīng)在源碼修改之后先觸發(fā)hook程序,程序會將集成啟動命令傳送給Jenkins中REST風(fēng)格的API,此系統(tǒng)會利用Ant工具執(zhí)行工程清理、鏈接編譯、自動化單元與性能測試以及自動化部署等各項(xiàng)任務(wù)[4]。自動化集成時(shí),Ant工具應(yīng)先讀取項(xiàng)目中的build、xml配置文件,再構(gòu)建涵蓋所有目標(biāo)及任務(wù)的安卓項(xiàng)目,定義配置文件列表,確定各文件自定義屬性值。靜態(tài)檢查涵蓋編譯、鏈接、測試3個(gè)環(huán)節(jié),以Sonar Qube作為檢查工具,此工具完成部署后會在build、xml中定義代碼檢查任務(wù)。至此項(xiàng)目靜態(tài)代碼檢查任務(wù)便已完成,之后持續(xù)集成系統(tǒng)還需利用JMeter工具測試軟件產(chǎn)品的性能。
基于Jenkins的插件系統(tǒng)實(shí)現(xiàn)時(shí),系統(tǒng)開發(fā)人員需要先利用框架生成器新建插件,在了解maven的前提下,輸入新建命令,在完成項(xiàng)目maven中包名以及項(xiàng)目名交互后,再輸入插件框架創(chuàng)建命令,便可完成框架開發(fā)。然后,開發(fā)人員還要輸入運(yùn)行命令,在Jenkins上部署命令運(yùn)行后所生成的文件。插件開發(fā)時(shí),開發(fā)人員應(yīng)以Eclipse進(jìn)行軟件生產(chǎn)環(huán)境配置,輸入環(huán)境配置命令后此軟件會生成Eclipse項(xiàng)目文件,之后再導(dǎo)入工程。該軟件以PluginImpl類作為插件入口,插件類檢測后,針對性構(gòu)建插件實(shí)例并選用適合的插件構(gòu)建方法。代碼開發(fā)后,系統(tǒng)開發(fā)人員可針對插件創(chuàng)建具備發(fā)布功能的虛擬鏡像文件,以便生成target/*.hpi文件,其他用戶可利用Jenkins系統(tǒng)中的Web界面向Jenkins傳送插件。之后,開發(fā)人員需要通過@Extension注解完成Build Step Descriptor 擴(kuò)展點(diǎn)的選擇,再利用Command Interpreter接口開發(fā)業(yè)務(wù)邏輯[5]。
根據(jù)敏捷開發(fā)與持續(xù)集成理論以及持續(xù)集成構(gòu)建自動化及系統(tǒng)測試的實(shí)現(xiàn)原理,本文提出了面向移動平臺軟件開發(fā)的持續(xù)集成系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)方案,從整體方案設(shè)計(jì)、插件系統(tǒng)設(shè)計(jì)2方面闡述了持續(xù)集成系統(tǒng)的設(shè)計(jì)思路,并分析了持續(xù)集成系統(tǒng)自動觸發(fā)集成實(shí)現(xiàn)、自動化集成實(shí)現(xiàn)以及系統(tǒng)插件實(shí)現(xiàn)的具體方法,旨在為持續(xù)集成系統(tǒng)的科學(xué)開發(fā)應(yīng)用提供指導(dǎo),并結(jié)合實(shí)際業(yè)務(wù)流程針對性地進(jìn)行持續(xù)集成系統(tǒng)的更新優(yōu)化,從而使之更加契合移動平臺軟件的開發(fā)要求。