姜 文,劉立康
(西安電子科技大學(xué) 通信工程學(xué)院,西安 710071)
基于持續(xù)集成的軟件度量
姜 文,劉立康
(西安電子科技大學(xué) 通信工程學(xué)院,西安 710071)
軟件度量是針對(duì)軟件開(kāi)發(fā)項(xiàng)目、過(guò)程及產(chǎn)品進(jìn)行數(shù)據(jù)定義、收集和分析的持續(xù)度量化過(guò)程;持續(xù)集成工具上的的構(gòu)建工程每天自動(dòng)完成從版本庫(kù)更新代碼、靜態(tài)檢查、編譯、出包、自動(dòng)化用例測(cè)試等任務(wù),在進(jìn)行集成構(gòu)建的過(guò)程中可以為軟件度量提供多種相關(guān)的度量數(shù)據(jù);結(jié)合工作實(shí)踐,敘述了基于持續(xù)集成的軟件度量的原理;軟件度量管理涉及到的角色;軟件度量實(shí)現(xiàn)過(guò)程;敘述了基于持續(xù)集成的兩種類(lèi)型的軟件度量指標(biāo)的定義以及提取方法;最后詳細(xì)敘述了在軟件度量過(guò)程中遇到的幾個(gè)典型案例;工作實(shí)踐表明在軟件的開(kāi)發(fā)過(guò)程中做好軟件度量工作有助于軟件開(kāi)發(fā)部門(mén)控制、預(yù)測(cè)、和改進(jìn)軟件產(chǎn)品的質(zhì)量與軟件開(kāi)發(fā)過(guò)程;從而提高軟件質(zhì)量和軟件開(kāi)發(fā)效率,降低軟件開(kāi)發(fā)成本。
軟件度量;持續(xù)集成;靜態(tài)檢查;軟件版本;集成構(gòu)建
軟件度量(software metrics)是對(duì)軟件在開(kāi)發(fā)過(guò)程中進(jìn)行的數(shù)據(jù)持續(xù)性采集、分析量化的過(guò)程。在軟件版本進(jìn)行開(kāi)發(fā)的過(guò)程中進(jìn)行軟件度量有助于盡早發(fā)現(xiàn)軟件存在的問(wèn)題,進(jìn)行軟件缺陷預(yù)測(cè),從而保證軟件產(chǎn)品的質(zhì)量。
隨著軟件行業(yè)開(kāi)發(fā)技術(shù)不斷發(fā)展,軟件持續(xù)集成與配置管理技術(shù)也不斷深入發(fā)展,已經(jīng)成為軟件開(kāi)發(fā)過(guò)程中非常重要的組成部分。通過(guò)運(yùn)行持續(xù)集成的構(gòu)建工程可以比較方便的來(lái)獲取某些軟件度量數(shù)據(jù)。將這些質(zhì)量數(shù)據(jù)進(jìn)行加工、分析之后匯總到由公司質(zhì)量部門(mén)的網(wǎng)站上,方便產(chǎn)品的質(zhì)量工程師與產(chǎn)品經(jīng)理隨時(shí)查看本產(chǎn)品的各項(xiàng)度量數(shù)據(jù),從而提高產(chǎn)品軟件源代碼的質(zhì)量和安全性。
本文以持續(xù)集成工具ICP-CI為例,敘述基于持續(xù)集成的軟件度量的原理;軟件度量管理和涉及到的角色;基于持續(xù)集成的軟件度量實(shí)現(xiàn)過(guò)程;敘述了基于持續(xù)集成的兩種類(lèi)型的軟件度量指標(biāo)的定義以及提取方法;最后詳細(xì)敘述了軟件度量過(guò)程中的幾個(gè)典型案例。
持續(xù)集成工具搭建的構(gòu)建工程可以每天通過(guò)制定定時(shí)任務(wù)來(lái)自動(dòng)完成從版本庫(kù)更新代碼、靜態(tài)檢查、編譯、出包、自動(dòng)化用例測(cè)試等任務(wù)。在進(jìn)行集成構(gòu)建的過(guò)程中ICP-CI的主控服務(wù)器的MySQL數(shù)據(jù)庫(kù)會(huì)將許多數(shù)據(jù)記錄在數(shù)據(jù)庫(kù)中,主要包括在ICP-CI上進(jìn)行集成構(gòu)建成功與失敗的結(jié)果、靜態(tài)檢查的結(jié)果、編譯的結(jié)果;以及靜態(tài)檢查步驟、編譯步驟、出包步驟、自動(dòng)化測(cè)試步驟的時(shí)間;自動(dòng)化測(cè)試用例數(shù)目、成功的用例數(shù)、運(yùn)行阻塞的用例數(shù)、運(yùn)行失敗的用例數(shù);失敗的步驟所在的位置以及各類(lèi)代碼質(zhì)量檢查工具的運(yùn)行結(jié)果等。在集成構(gòu)建的過(guò)程中可能發(fā)生大量的各種問(wèn)題,這就為軟件度量數(shù)據(jù)采集提供了大量的數(shù)據(jù)資料。
1.1 軟件度量類(lèi)型
1.1.1 軟件源代碼質(zhì)量度量
軟件源代碼在靜態(tài)測(cè)試和編譯過(guò)程中出現(xiàn)問(wèn)題的各種數(shù)據(jù),可以用來(lái)度量軟件代碼質(zhì)量,檢查并反饋軟件源代碼的各種缺陷。
1.1.2 軟件版本包的質(zhì)量度量
集成構(gòu)建中的出包步驟充分反映了各個(gè)軟件模塊在集成過(guò)程中的問(wèn)題,出包的相關(guān)數(shù)據(jù)可以作為重要的模塊集成度量指標(biāo)。
1.1.3 功能點(diǎn)測(cè)試的度量
通過(guò)調(diào)用自動(dòng)化測(cè)試用例包,可以初步測(cè)試大量的軟件功能點(diǎn),這些數(shù)據(jù)可以提取有關(guān)功能點(diǎn)度量數(shù)據(jù),出包的相關(guān)數(shù)據(jù)也反映了功能點(diǎn)開(kāi)發(fā)的進(jìn)展情況,可以作為軟件功能開(kāi)發(fā)進(jìn)度的度量指標(biāo)。
1.2 軟件度量的數(shù)據(jù)采集
在ICP-CI工具的頁(yè)面上搭建度量數(shù)據(jù)工程,將其他構(gòu)建工程在集成構(gòu)建過(guò)程中的各階段所需要的時(shí)間以及構(gòu)建結(jié)果數(shù)據(jù)分別記錄到ICP-CI工具自帶的MySQL數(shù)據(jù)庫(kù)中。持續(xù)集成工程師可以登錄MySQL數(shù)據(jù)庫(kù)查看對(duì)已經(jīng)完成構(gòu)建工程的各種數(shù)據(jù)。
集成構(gòu)建過(guò)程中采集度量數(shù)據(jù)需要根據(jù)構(gòu)建類(lèi)型標(biāo)志位篩選出定時(shí)完整構(gòu)建的數(shù)據(jù),將這些數(shù)據(jù)上報(bào)到質(zhì)量部門(mén)的匯總數(shù)據(jù)庫(kù)中。產(chǎn)品版本持續(xù)集成工程執(zhí)行定時(shí)完整構(gòu)建,需要在“管理”頁(yè)面上選擇定時(shí)構(gòu)建的具體時(shí)間,構(gòu)建任務(wù),構(gòu)建類(lèi)型一定要選擇完整構(gòu)建。完整構(gòu)建是指包含構(gòu)建工程的所有步驟,對(duì)于持續(xù)集成工程,包括代碼更新、基本靜態(tài)檢查、編譯、出包與自動(dòng)化用例測(cè)試;對(duì)于源代碼靜態(tài)測(cè)試,包括代碼更新與所有靜態(tài)檢查步驟。
通過(guò)持續(xù)集成可以大大提高軟件度量數(shù)據(jù)的采集效率。獲得軟件開(kāi)發(fā)過(guò)程中每一天的軟件度量數(shù)據(jù),通過(guò)針對(duì)這些度量數(shù)據(jù)進(jìn)行質(zhì)量監(jiān)控,可以盡早發(fā)現(xiàn)軟件的各種缺陷。
在基于持續(xù)集成的軟件度量活動(dòng)中,涉及到的角色有產(chǎn)品經(jīng)理、公司質(zhì)量部、軟件開(kāi)發(fā)組、軟件測(cè)試組、持續(xù)集成工程師、產(chǎn)品質(zhì)量工程師。軟件度量管理如圖1所示。
圖1 軟件度量管理用例圖
2.1 產(chǎn)品經(jīng)理
制定軟件產(chǎn)品度量計(jì)劃,確定度量指標(biāo)中的統(tǒng)計(jì)承諾值。度量計(jì)劃提交給公司質(zhì)量部門(mén)審查。關(guān)注度量數(shù)據(jù)的變化,指導(dǎo)和參與度量數(shù)據(jù)異常處理。
2.2 公司質(zhì)量部
負(fù)責(zé)搭建與維護(hù)公司的質(zhì)量網(wǎng)站,審查軟件項(xiàng)目組的度量計(jì)劃,對(duì)度量數(shù)據(jù)進(jìn)行統(tǒng)計(jì)分析,指導(dǎo)項(xiàng)目組處理各種度量數(shù)據(jù)異常問(wèn)題。
2.3 軟件開(kāi)發(fā)組
在產(chǎn)品的整個(gè)度量周期中關(guān)注開(kāi)發(fā)組負(fù)責(zé)的軟件模塊的相關(guān)度量數(shù)據(jù),當(dāng)出現(xiàn)度量數(shù)據(jù)異常時(shí),參與分析異常的度量數(shù)據(jù)并實(shí)施改進(jìn)。
2.4 軟件測(cè)試組
在產(chǎn)品啟動(dòng)度量采集之前,進(jìn)行相關(guān)的自動(dòng)化環(huán)境搭建,并配合持續(xù)集成工程提供相關(guān)的測(cè)試用例腳本。參與度量數(shù)據(jù)異常的分析和處理。
2.5 持續(xù)集成工程師
在產(chǎn)品啟動(dòng)度量采集之前,將軟件產(chǎn)品版本信息提供給公司質(zhì)量部門(mén)接口人,安排該版本在公司質(zhì)量部進(jìn)行數(shù)據(jù)呈現(xiàn)時(shí)的導(dǎo)航樹(shù)配置。
負(fù)責(zé)持續(xù)集成度量數(shù)據(jù)與源代碼質(zhì)量度量數(shù)據(jù)的采集,采集的度量數(shù)據(jù)上報(bào)公司質(zhì)量部;當(dāng)出現(xiàn)產(chǎn)品度量數(shù)據(jù)異常時(shí),參與度量數(shù)據(jù)異常情況的定位和處理;確保從ICP-CI主控服務(wù)器上采集的度量數(shù)據(jù)在度量周期內(nèi)全部達(dá)標(biāo)。
2.6 產(chǎn)品質(zhì)量工程師
審計(jì)產(chǎn)品版本的質(zhì)量計(jì)劃,定期針對(duì)產(chǎn)品的度量數(shù)據(jù)進(jìn)行審計(jì),督促軟件項(xiàng)目組及時(shí)處理度量數(shù)據(jù)異常問(wèn)題,參與不達(dá)標(biāo)度量數(shù)據(jù)的定位與解決,保證在度量周期內(nèi)所有的度量數(shù)據(jù)達(dá)標(biāo)。
3.1 度量數(shù)據(jù)采集環(huán)境的部署
度量采集工具的功能是從產(chǎn)品ICP-CI主控服務(wù)器的MySQL數(shù)據(jù)庫(kù)中定時(shí)完整構(gòu)建條件的度量數(shù)據(jù),然后將數(shù)據(jù)上報(bào)到公司質(zhì)量部的數(shù)據(jù)庫(kù)中。
主控服務(wù)器(Master)安裝ICP-CI-Windows-Master之后,為了采集度量數(shù)據(jù)需要將公司自研的度量采集工具部署到主控服務(wù)器上,具體部署過(guò)程如下:
1)登入ICP-CI的主控服務(wù)器,關(guān)閉ICP-CI相關(guān)與MySQL服務(wù)的相關(guān)進(jìn)程;
2)度量數(shù)據(jù)采集工具解壓之后為ICP-CI.jar,將該文件部署到Master的master/bin目錄下;
3)在啟動(dòng)ICP-CI工具的腳本startup.bat中加入啟動(dòng)度量數(shù)據(jù)采集工具的語(yǔ)句:CALL ICP_CI.jar;
4)啟動(dòng)MySQL數(shù)據(jù)庫(kù)后,再執(zhí)行startup.bat啟動(dòng)ICP-CI工具的網(wǎng)頁(yè)版頁(yè)面。
3.2 基于持續(xù)集成的軟件度量的分類(lèi)
基于持續(xù)集成的軟件度量可以分為兩種類(lèi)型:軟件版本可用性度量與軟件源代碼靜態(tài)測(cè)試度量。
3.2.1 軟件版本可用性度量
軟件版本可用性度量需要在產(chǎn)品迭代開(kāi)發(fā)開(kāi)始階段進(jìn)行軟件度量,測(cè)試經(jīng)理安排自動(dòng)化測(cè)試工程師完成產(chǎn)品版本的自動(dòng)化測(cè)試用例腳本的編寫(xiě)與自動(dòng)化測(cè)試環(huán)境的搭建。持續(xù)集成工程師在ICP-CI工具上搭建產(chǎn)品版本的持續(xù)集成工程,在完成出包步驟后執(zhí)行測(cè)試組提供的自動(dòng)化測(cè)試用例腳本。
持續(xù)集成工程師在ICP-CI工具上搭建產(chǎn)品版本的代碼質(zhì)量工程。通過(guò)部署檢查工具來(lái)提取版本可用性度量數(shù)據(jù)。軟件版本可用性度量指標(biāo)如表1所示:
(1)CI構(gòu)建成功率:(一個(gè)度量周期內(nèi)CI構(gòu)建成功次數(shù))/(一個(gè)度量周期內(nèi)CI構(gòu)建總次數(shù));
(2)每日版本可用率:(一個(gè)度量周期內(nèi)CI構(gòu)建成功的天數(shù))/(一個(gè)度量周期內(nèi)進(jìn)行CI構(gòu)建總天數(shù)),工作日有一次CI構(gòu)建成功可以確認(rèn)該日為CI構(gòu)建成功日;
表1 版本可用性度量指標(biāo)
(3)構(gòu)建恢復(fù)時(shí)長(zhǎng):一次CI構(gòu)建失敗到下一次CI構(gòu)建成功的時(shí)間間隔;
(4)有效構(gòu)建天數(shù)比:(一個(gè)度量周期內(nèi)有效CI構(gòu)建成功的天數(shù))/(一個(gè)度量周期內(nèi)工作日數(shù)),有效CI構(gòu)建是指可以作為度量數(shù)據(jù)的構(gòu)建。
度量周期通常可以選擇七天、十五天、一個(gè)月。
軟件產(chǎn)品版本可用性度量大多選擇以月為單位,在度量周期中的度量指標(biāo)達(dá)不到要求時(shí),就會(huì)發(fā)郵件知會(huì)產(chǎn)品經(jīng)理、質(zhì)量工程師與持續(xù)集成工程師,需要分析定位產(chǎn)品版本可用性指標(biāo)數(shù)據(jù)不達(dá)標(biāo)的原因。通常有兩類(lèi)問(wèn)題導(dǎo)致的版本可用性度量指標(biāo)異常:1)軟件產(chǎn)品自身缺陷,2)持續(xù)集成運(yùn)行環(huán)境問(wèn)題。
3.2.2 軟件產(chǎn)品源代碼靜態(tài)測(cè)試度量
對(duì)于軟件產(chǎn)品源代碼靜態(tài)測(cè)試數(shù)據(jù)的度量,由于各產(chǎn)品的情況不同,質(zhì)量部門(mén)無(wú)法給出統(tǒng)一的度量指標(biāo)來(lái)判定產(chǎn)品的源代碼是否符合公司的標(biāo)準(zhǔn),需要在產(chǎn)品迭代開(kāi)發(fā)開(kāi)始階段,由產(chǎn)品經(jīng)理根據(jù)產(chǎn)品特點(diǎn),對(duì)于某些度量項(xiàng)的度量指標(biāo)分別給出指標(biāo)承諾值,并將這些承諾值提交到質(zhì)量部門(mén)進(jìn)行審核,質(zhì)量部門(mén)審核通過(guò)之后,這些度量項(xiàng)的指標(biāo)承諾值和度量數(shù)據(jù)一起上報(bào)質(zhì)量部門(mén)。
持續(xù)集成工程師在ICP-CI工具上搭建產(chǎn)品版本的代碼質(zhì)量工程。通過(guò)集成各種檢查工具來(lái)提取軟件產(chǎn)品源代碼靜態(tài)測(cè)試數(shù)據(jù)度量。軟件源代碼靜態(tài)測(cè)試數(shù)據(jù)的度量指標(biāo)如表2中所示:
表2 軟件源代碼靜態(tài)測(cè)試度量指標(biāo)
1) 代碼質(zhì)量缺陷指數(shù)(Qualiti Deficit Index):是通過(guò)質(zhì)量缺陷模型計(jì)算出來(lái)的,展示系統(tǒng)歸一化和總的質(zhì)量缺陷指數(shù)。QDI取值的計(jì)算方法:
總的QDI是設(shè)計(jì)缺陷×權(quán)重的累加值,總的QDI和系統(tǒng)的規(guī)模大小有關(guān)。
歸一化QDI=1000*(總的QDI/有效代碼行數(shù))。
通過(guò)將Infusion工具集成到ICP-CI工具中,完成對(duì)代碼質(zhì)量缺陷指數(shù)(QDI)的數(shù)據(jù)采集任務(wù)。
2) 代碼重復(fù)度:重復(fù)的代碼行數(shù)和總代碼行數(shù)之比。通過(guò)將Simian工具集成到ICP-CI工具中,完成對(duì)代碼重復(fù)度數(shù)據(jù)采集任務(wù)。
3)代碼圈復(fù)雜度(全量代碼):,需要將SourceMonitor工具集成到ICP-CI工具中,完成對(duì)代碼中所有的函數(shù)進(jìn)行圈復(fù)雜度數(shù)據(jù)采集。
4)代碼圈復(fù)雜度(新增代碼):統(tǒng)計(jì)新增代碼的圈復(fù)雜度時(shí),需要將SourceMonitor工具集成到ICP-CI工具中,完成對(duì)當(dāng)前現(xiàn)有的代碼與基線(xiàn)的代碼進(jìn)行比對(duì),篩選出新增的函數(shù),并完成針對(duì)新增函數(shù)的圈復(fù)雜度數(shù)據(jù)采集。
5)PC-Lint檢查:針對(duì)C/C++語(yǔ)言源代碼的經(jīng)典靜態(tài)檢查工具,可以通過(guò)將PC-Lint工具集成到ICP-CI工具中,完成對(duì)軟件代碼進(jìn)行PC-Lint檢查,被檢查出來(lái)的缺陷可以分為錯(cuò)誤、告警以及提示這三個(gè)級(jí)別。
6)FindBugs檢查:針對(duì)Java語(yǔ)言源代碼的經(jīng)典靜態(tài)檢查工具,可以通過(guò)將FindBugs工具集成到ICP-CI工具中,完成對(duì)軟件代碼進(jìn)行FindBug檢查,被檢查出來(lái)的缺陷可以分為錯(cuò)誤、告警以及提示這三個(gè)級(jí)別。
7)Coverity/Fortify檢查:重量型的軟件源代碼缺陷靜態(tài)測(cè)試工具,需要通過(guò)插樁編譯的方式在檢查過(guò)程中編譯生成中間文件,將中間文件上傳到專(zhuān)門(mén)的分析平臺(tái)上分析之后得到缺陷報(bào)告,缺陷根據(jù)問(wèn)題級(jí)別可以分為高、中、低三個(gè)級(jí)別。Coverity與Fortify工具可以對(duì)C/C++代碼進(jìn)行靜態(tài)檢查,也可以對(duì)Java進(jìn)行靜態(tài)檢查。
8)危險(xiǎn)函數(shù)檢查:針對(duì)C/C++語(yǔ)言源代碼執(zhí)行的安全測(cè)試,需要將源代碼中的危險(xiǎn)函數(shù)全部統(tǒng)計(jì)出來(lái),可以通過(guò)將Csec_Check工具集成到ICP-CI工具中,完成對(duì)軟件代碼進(jìn)行危險(xiǎn)函數(shù)統(tǒng)計(jì)。
3.3 軟件產(chǎn)品版本交付使用后終止度量處理
軟件產(chǎn)品版本的迭代開(kāi)發(fā)與測(cè)試活動(dòng)結(jié)束后,版本交付使用轉(zhuǎn)為維護(hù)版本,產(chǎn)品版本研發(fā)階段結(jié)束。產(chǎn)品經(jīng)理知會(huì)公司質(zhì)量部,該產(chǎn)品版本轉(zhuǎn)為維護(hù)版本,該產(chǎn)品版本度量下線(xiàn)。由質(zhì)量部門(mén)將目前處于度量中的產(chǎn)品版本轉(zhuǎn)到度量下線(xiàn)的版本中。這個(gè)版本不會(huì)在度量頁(yè)面上呈現(xiàn)新的度量數(shù)據(jù),僅能從度量下線(xiàn)版本中查看該版本的歷史數(shù)據(jù)。
某大型軟件公司有一個(gè)軟、硬件結(jié)合的大型軟件新項(xiàng)目,軟件代碼量為2000多萬(wàn)行,在該產(chǎn)品開(kāi)發(fā)階段,產(chǎn)品經(jīng)理向公司質(zhì)量部門(mén)提供該產(chǎn)品的產(chǎn)品名稱(chēng)與產(chǎn)品版本號(hào),公司質(zhì)量部門(mén)為該產(chǎn)品添加相關(guān)的度量頁(yè)面,打開(kāi)公司的軟件度量數(shù)據(jù)網(wǎng)站可以看到該產(chǎn)品的信息。在開(kāi)展軟件度量的過(guò)程中處理了大量的各種問(wèn)題,下面介紹幾個(gè)典型的工作案例。
4.1 自動(dòng)化測(cè)試用例執(zhí)行失敗的案例
持續(xù)集成工程師進(jìn)行版本可用性度量時(shí)發(fā)現(xiàn),在執(zhí)行自動(dòng)化測(cè)試用例腳本時(shí)部分用例會(huì)失敗,排查持續(xù)集成環(huán)境沒(méi)發(fā)現(xiàn)任何環(huán)境問(wèn)題,聯(lián)系自動(dòng)化測(cè)試工程師定位發(fā)現(xiàn),由于新的版本包中l(wèi)ny進(jìn)程會(huì)發(fā)生異常復(fù)位的情況導(dǎo)致自動(dòng)化測(cè)試用例腳本執(zhí)行失敗。聯(lián)系軟件開(kāi)發(fā)工程師定位問(wèn)題,發(fā)現(xiàn)是產(chǎn)品代碼缺陷導(dǎo)致的,軟件開(kāi)發(fā)工程師修改源代碼之后合入版本庫(kù),重新進(jìn)行版本可用性度量,取得成功。
當(dāng)月20個(gè)工作日,19天共進(jìn)行CI構(gòu)建19次,其中CI構(gòu)建成功18次,有效構(gòu)建天數(shù)18天。該月的版本可用性度量數(shù)據(jù)如表3所示。
表3 版本可用性度量數(shù)據(jù)實(shí)例
4.2 構(gòu)建環(huán)境出現(xiàn)異常狀況的案例
持續(xù)集成工程師度量工程在執(zhí)行編譯時(shí),會(huì)出現(xiàn)超時(shí)失敗的情況,排查持續(xù)集成環(huán)境之后發(fā)現(xiàn)有一個(gè)編譯環(huán)境的ICP-CI進(jìn)程啟動(dòng)異常。重啟這個(gè)編譯環(huán)境之后,然后再啟動(dòng)ICP-CI相關(guān)進(jìn)程,重新進(jìn)行版本可用性度量,終于執(zhí)行成功。
當(dāng)月22個(gè)工作日,共進(jìn)行CI構(gòu)建27次,其中CI構(gòu)建成功22次,有效構(gòu)建天數(shù)22天。該月的版本可用性度量數(shù)據(jù)如表4中所示。
表4 版本可用性度量數(shù)據(jù)實(shí)例
4.3 軟件源代碼問(wèn)題導(dǎo)致度量數(shù)據(jù)異常的案例
進(jìn)行源代碼靜態(tài)測(cè)試度量時(shí),收到版本圈復(fù)雜度檢查未達(dá)標(biāo)的提示,發(fā)現(xiàn)圈復(fù)雜度(新增代碼)的檢查結(jié)果數(shù)據(jù)為11.3大于承諾值10,數(shù)據(jù)不達(dá)標(biāo)。持續(xù)集成工程師定位問(wèn)題代碼的模塊之后聯(lián)系軟件開(kāi)發(fā)組組長(zhǎng),最后確認(rèn)是該模塊源代碼的函數(shù)圈復(fù)雜度超標(biāo)。軟件開(kāi)發(fā)工程師修改源代碼之后合入版本庫(kù),重新進(jìn)行源代碼靜態(tài)測(cè)試數(shù)據(jù)度量,次日和度量周期內(nèi)后續(xù)的圈復(fù)雜度(新增代碼)度量數(shù)據(jù)為9.8。其他的源代碼靜態(tài)測(cè)試度量數(shù)據(jù)沒(méi)有出現(xiàn)任何異常。圈復(fù)雜度(新增代碼)度量數(shù)據(jù)如表5中所示。
表5 代碼圈復(fù)雜度(新增代碼)度量數(shù)據(jù)實(shí)例
長(zhǎng)期的工作實(shí)踐表明基于持續(xù)集成的軟件度量在軟件開(kāi)發(fā)過(guò)程中發(fā)揮了重要的作用。在集成構(gòu)建過(guò)程中自動(dòng)完成軟件產(chǎn)品的度量數(shù)據(jù)提取,可以快速地向質(zhì)量部門(mén)提交度量數(shù)據(jù)。對(duì)于采集到的數(shù)據(jù)質(zhì)量部門(mén)進(jìn)行相關(guān)的分析和處理,可以以表格形式顯示到度量網(wǎng)站上,同時(shí)也給出相關(guān)度量數(shù)據(jù)的柱狀圖、折線(xiàn)圖和餅圖,以非常直觀(guān)的形式顯示度量數(shù)據(jù)的各種狀態(tài)和發(fā)展趨勢(shì)。工作實(shí)踐表明在軟件的開(kāi)發(fā)過(guò)程中做好軟件度量工作有助于軟件開(kāi)發(fā)部門(mén)控制、預(yù)測(cè)、和改進(jìn)軟件產(chǎn)品的質(zhì)量或軟件開(kāi)發(fā)過(guò)程。軟件度量為軟件項(xiàng)目的質(zhì)量管理提供了很好的保證。在很大程度上提高軟件產(chǎn)品的質(zhì)量和開(kāi)發(fā)效率,降低軟件開(kāi)發(fā)的的成本。
[1] (英)Norman E.Fenton,(美)Shari Lawrence Pfleeger,楊海燕等譯,軟件度量(原書(shū)第二版)[M].北京:機(jī)械工業(yè)出版社,2004.
[2] 朱少民.軟件質(zhì)量保證和管理[M].北京:清華大學(xué)出版社,2007.
[3] 于 波,姜 艷.軟件質(zhì)量管理實(shí)踐—軟件缺陷預(yù)防、清除、管理實(shí)用方法[M].北京:電子工業(yè)出版社,2008.
[4] 趙宏遠(yuǎn).軟件度量、過(guò)程度量與歷史缺陷度量:工作量感知的缺陷預(yù)測(cè)能力比較[D].南京:南京大學(xué),2013.
[5] Tibor Gyimothy,Rudolf Ferenc,Istvan Siket. Empirical validation of object-oriented metrics on open source software for fault prediction[J].IEEE Transactions on Software Engineering,2005,31(10):897-910.
[6] 計(jì)春雷.全功能點(diǎn)方法和功能規(guī)模度量統(tǒng)一模型的研究與應(yīng)用[D].上海:華東理工大學(xué),2011.
[7] 姜 文,劉立康.基于SVN的應(yīng)用軟件持續(xù)集成[J].計(jì)算機(jī)測(cè)量與控制,2016,24(3):109-113.
[8] 姜 文,劉立康.軟件配置管理中的基線(xiàn)問(wèn)題研究[J].計(jì)算機(jī)技術(shù)與發(fā)展,2016,26(6):6-10.
[9] 姜 文,劉立康.基于持續(xù)集成的PC-Lint 靜態(tài)檢查[J].計(jì)算機(jī)技術(shù)與發(fā)展,2016,26(11):31-36.
[10] 姜 文,劉立康.C++ 與Java 軟件重量級(jí)靜態(tài)檢查[J].計(jì)算機(jī)技術(shù)與發(fā)展,2016,26(8):17-23.
[11] N Fenton,P Krause,M Neil.Software Measurement: Uncertainty and Causal Modeling[J]. IEEE Software,2002,19(4):116-122.
[12] Taek Lee,Jaechang Nam,Dongyun Han,et al. Developer Micro Interaction Metrics for Software Defect Prediction[J]. IEEE Transactions on Software Engineering,2016,42(11):1015-1035.
[13] Lakshmi P,Latha Maheswari T. An Effective rank approach to software defect prediction using software metrics[A]. 2016 10th International Conference on Intelligent Systems and Control (ISCO)[C].2016:1-5.
[14] Wang Shuo,Yao Xin.Using Class Imbalance Learning for Software Defect Prediction[J]. IEEE Transactions on Reliability,2013,62(2):434-443.
[15] Yang Xiaoxing,Tang Ke,Yao Xin. A Learning-to-Rank Approach to Software Defect Prediction[J]. IEEE Transactions on Reliability,2015,64(1):234-246.
Software Metrics Based on Continuous Integration
Jiang Wen,Liu Likang
(School of Telecommunication Engineering, Xidian University, Xi’an 710071,China)
The software metrics involved software development project, process and prodution data definition, collection, and analysis, it is a continuous quantitative process. Tasks as updating the code from the repository, static checking, compile, package, test automation cases are automatically running by building project in continuous integration tool, during the process of building a variety of related metrics data for software metrics are provided. In combination with working practice, the principle of software metrics based on continuous integration are described; the roles involved in the management of the software metrics; the process of software metrics implemented. Described two types definition of software metrics and extraction methods based on the continuous integration. At last, several typical cases encountered in the process of software metrics is described in detail. Practice shows that in the software development process, to do a good job of software metrics helps to control, prediction, and improve the quality of the software product and software development process in software development department. Improves the efficiency of software development and software quality, reduces the cost of software development.
software metrics; continuous integration; static checking; software version; integration building
2016-12-03;
2017-01-05。
國(guó)家部委基礎(chǔ)科研計(jì)劃:國(guó)防預(yù)研基金項(xiàng)目 (A1120110007)。
姜 文(1986-),女,陜西西安人,工程師,碩士研究生,CCF會(huì)員(E200032324M),主要從事圖像處理與分析,數(shù)據(jù)庫(kù)應(yīng)用和軟件工程方向的研究。
1671-4598(2017)05-0136-04
10.16526/j.cnki.11-4762/tp.2017.05.038
TP311.56
A