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