摘要:軟件量化對軟件項目管理有著至關(guān)重要的作用,便于進行開發(fā)成本和開發(fā)時間的估算,合理規(guī)劃軟件生命周期。目前應用比較廣泛的方法大多是以歷史經(jīng)驗為基礎(chǔ)進行量化管理,由于在過程中存在很多不確定性因素,量化的結(jié)果不能準確反映實際情況?紤]到實際開發(fā)需求,本文提出一種依據(jù)變更數(shù)據(jù)對軟件開發(fā)過程進行量化管理的方法,通過對日常變更內(nèi)容的分析,獲取基礎(chǔ)數(shù)據(jù),進一步建立量化指標,對團隊或個人的工作量、效率、活躍度等進行衡量;贘avaEE技術(shù),設(shè)計了一個量化管理系統(tǒng)對該方法集中展開研發(fā)實現(xiàn)。最后,以Tomcat版本庫為例,闡述了具體的實現(xiàn)過程及結(jié)果。
關(guān)鍵詞:軟件量化;變更分析;過程管理
引言
軟件度量研究是一個在過去30多年中始終處于發(fā)展活躍期的軟件工程領(lǐng)域,研究主流是關(guān)心軟件的品質(zhì)和軟件的定量化度量。
目前行業(yè)對軟件度量和項目管理的研究,主要集中于對已有度量模型和方法的優(yōu)化上。如基于IFPUG功能點分析法的改進方法[1]、基于CMMI的量化方法[2-3]、基于Delphi技術(shù)對軟件規(guī)模和進度進行估算的方法[4]、基于偏最小二乘回歸的方法校準度量因子,并結(jié)合COCOMO模型[5]進行量化的方法[6]、基于GQM模型[7],利用PUGH矩陣的決策機制進行過程控制和軟件量化的方法[8]等。這些方法多以軟件的結(jié)構(gòu)為主體提供度量,將軟件按照功能點、方法、模塊等元素進行拆分后,設(shè)置加權(quán)參數(shù),實現(xiàn)整體的度量。缺點是只能在軟件項目設(shè)計階段進行估算或者在軟件開發(fā)完成后,對整個項目進行回顧,無法應用到軟件開發(fā)過程中創(chuàng)建實時的管理,缺乏靈活性。
現(xiàn)有的軟件度量方法,可以做到對代碼復雜度、每日版本可用率、代碼質(zhì)量缺陷指數(shù)[9]等進行度量,但無法做到對變更內(nèi)容生成定量化分析。為對開發(fā)過程定制有效的量化管理,本文提出基于軟件開發(fā)過程中的變更數(shù)據(jù)進行量化管理的方法。結(jié)合項目開發(fā)過程中的具體變更數(shù)據(jù),對變更內(nèi)容進行分析,包括變更的代碼行、文檔行,變更文件的個數(shù)、類型、內(nèi)容,所屬的模塊名等統(tǒng)計代碼、文檔的增、刪、改等的操作,建立研究對象的模型。可以根據(jù)這些基礎(chǔ)數(shù)據(jù),對指定時間段內(nèi)團隊效率、活躍度、工作量,成員效率、修改內(nèi)容、產(chǎn)出量以及文件修改的內(nèi)容、類型、個數(shù)等展開分析,從而調(diào)整開發(fā)計劃,對軟件開發(fā)過程進行實時調(diào)控,實現(xiàn)軟件開發(fā)過程量化管理。
1基于變更分析的量化管理方法
1.1方法概要
現(xiàn)代軟件的開發(fā),大多基于版本控制系統(tǒng)。版本控制系統(tǒng)可以支持完備的版本管理功能,用于存儲、追蹤目錄和文件的修改歷史。本系統(tǒng)對使用了SVN版本管理系統(tǒng)(Subversion)的軟件項目進行分析,首先需要確定軟件項目,即SVN倉庫,然后對軟件開發(fā)過程中的變更數(shù)據(jù)進行獲取、分類整理并輔以數(shù)據(jù)處理后,形成本系統(tǒng)的數(shù)據(jù)源,由此將有效確保后續(xù)數(shù)據(jù)量化管理系統(tǒng)的設(shè)計與實現(xiàn)。研究中,系統(tǒng)設(shè)計如圖1所示。
其中,數(shù)據(jù)提取是指從軟件版本倉庫獲取版本變更數(shù)據(jù)并存儲到本地數(shù)據(jù)庫;數(shù)據(jù)處理是指對抓取到的數(shù)據(jù)進行過濾優(yōu)化和分類;軟件開發(fā)過程量化管理是指對變更數(shù)據(jù)進行分析、統(tǒng)計、量化,并續(xù)接此后的數(shù)據(jù)可視化和開發(fā)過程量化。
1.2量化管理系統(tǒng)設(shè)計
本系統(tǒng)基于SVNKit研發(fā)設(shè)計。SVNKit是一個Java工具包,用于訪問和操作SVN版本庫。SVNKit不僅是一個純Java的SVN類庫,而且還適用于主流的絕大多數(shù)操作系統(tǒng),基于SVNKit開發(fā)軟件,可以實現(xiàn)版本庫的管理和信息的獲取。
1.2.1變更數(shù)據(jù)的獲取
基于SVNKit提供的API,使用Java語言開發(fā)一套數(shù)據(jù)獲取和管理工具,對變更數(shù)據(jù)進行獲取。獲取內(nèi)容包括:
(1)該軟件項目的所有已提交版本。包括版本號、提交者、提交日期、影響的文件名或目錄以及注釋信息;
(2)所有已提交的版本包含的信息。包括指定版本包含的文件、變更的文件名、變更時間、變更類型等;
(3)所有文件內(nèi)容。包括文件被增加時的初始內(nèi)容、變更后的內(nèi)容,以及文件變更時所對應的版本信息等;
(4)所有文件變更內(nèi)容。包括文件變更前后對應的版本信息、變更類型、變更內(nèi)容等;
5)其它項目信息的獲取。包括開發(fā)團隊、項目相關(guān)信息等。
1.2.2數(shù)據(jù)分析與處理對獲取到的源數(shù)據(jù)進行過濾優(yōu)化和分類。分類方法主要包括:
(1)按文件類型分類。主要區(qū)分軟件代碼和說明文檔;
(2)按修改類型分類。主要區(qū)分文件的增、刪、改操作;
(3)按修改內(nèi)容分類。主要區(qū)分是否為修復bug、執(zhí)行代碼重構(gòu)、添加測試、添加注釋等。由于獲取到的原始數(shù)據(jù)包含大量冗余數(shù)據(jù),并且會產(chǎn)生由于文件名相同、文件內(nèi)容無法識別、文件編碼方式不同等導致的數(shù)據(jù)異常,所以需要對數(shù)據(jù)進行優(yōu)化處理。經(jīng)數(shù)據(jù)優(yōu)化處理后,形成本系統(tǒng)的數(shù)據(jù)源,用于后期的數(shù)據(jù)分析和展示,統(tǒng)計變更內(nèi)容研究。
1.2.3量化管理
以得到的數(shù)據(jù)為基礎(chǔ),應用B/S架構(gòu)、MVC設(shè)計模式、MySQL數(shù)據(jù)庫,使用SpringMVC、MyBatis等JavaEE后端技術(shù),Ajax、Echarts等前端技術(shù),設(shè)計實現(xiàn)量化管理系統(tǒng),對軟件開發(fā)過程進行量化管理。
2系統(tǒng)實現(xiàn)-以Tomcat為例
2.1選取版本庫
本文選取流行的Web應用服務器軟件Tomcat的版本庫作為數(shù)據(jù)源。Tomcat是Apache軟件基金會(ApacheSoftwareFoundation)的Jakarta系統(tǒng)中的一個核心項目,由Apache、Sun和其它一些公司及個人共同開發(fā)而成。由于有了Sun公司的參與和支持,使得最新的Servlet和JSP規(guī)范總是能在Tomcat中得到體現(xiàn),在現(xiàn)代軟件開發(fā)中提供了業(yè)界范本的作用。
Tomcat版本庫創(chuàng)建時間為2007年11月10日,截止2017年12月20日,該項目共有26位開發(fā)者,5123個文件,約18000個提交版本、56000次文件變更記錄,具體可見表1。
2.2獲取變更數(shù)據(jù)
2.2.1獲取原始數(shù)據(jù)
基于SVNKit開發(fā)版本庫數(shù)據(jù)獲取工具,對Tomcat版本庫獲取版本數(shù)據(jù),形成原始數(shù)據(jù)庫。該數(shù)據(jù)獲取工具提供的主要功能如下:
(1)showlogs:獲取版本庫所有提交版本記錄和文件變動記錄,記錄到數(shù)據(jù)庫的actions表中;
(2)displayFile:獲取文件首次提交時的初始內(nèi)容,用于后續(xù)比較變更內(nèi)容,記錄到數(shù)據(jù)庫的contents表中;
(3)showDiff:獲取所有內(nèi)容發(fā)生變動的文件列表,記錄到數(shù)據(jù)庫的diffs表中;
(4)getHunks:獲取所有文件變更內(nèi)容的具體變更片段,記錄到數(shù)據(jù)庫的hunks表中。
2.2.2數(shù)據(jù)處理
獲取原始數(shù)據(jù)后,由于對變更分析的需要,需要對數(shù)據(jù)進行進一步加工處理。內(nèi)容闡釋如下:
(1)根據(jù)版本信息,提取版本對應的提交者,存儲到user表;
(2)根據(jù)版本信息,提取所有版本的版本號相關(guān)信息,存儲到revisions表;
(3)根據(jù)文件首次提交的信息,提取項目中所有的文件信息,存儲到files表;
(4)按照文件類型、修改類型、變更類型對數(shù)據(jù)進行標記;
(5)對文件的MIME類型、編碼、字符集等進行識別與優(yōu)化處理;
(6)異常數(shù)據(jù)處理。如不同目錄下的同名文件,系統(tǒng)會默認為是同一個文件,這會導致后續(xù)對變更代碼的分析混亂。處理方法是:為每個文件添加時間戳進行區(qū)分。
2.2.3形成數(shù)據(jù)源
經(jīng)原始數(shù)據(jù)獲取和數(shù)據(jù)處理后,形成本次量化管理系統(tǒng)的數(shù)據(jù)源,數(shù)據(jù)庫結(jié)構(gòu)設(shè)計可見表2。
2.3變更數(shù)據(jù)量化管理
以獲取到的變更數(shù)據(jù)為數(shù)據(jù)源,使用JavaEE相關(guān)技術(shù),開發(fā)變更數(shù)據(jù)量化管理系統(tǒng)。
2.3.1數(shù)據(jù)更新
數(shù)據(jù)更新模塊提供版本庫信息展示與更新功能。對此可展開研究分述如下:
(1)設(shè)置版本庫。設(shè)置要進行量化管理的SVN版本庫地址,支持http、https、svn、file協(xié)議;
(2)數(shù)據(jù)更新。設(shè)置對版本庫的數(shù)據(jù)更新方式,可選手動更新或自動定時更新。用于實時跟蹤開發(fā)進度;
(3)信息展示。默認展示版本庫中最新信息,包括版本庫地址、最新版本號、最新提交日期和提交者。進行數(shù)據(jù)更新時,實時顯示系統(tǒng)狀態(tài)。
2.3.2代碼統(tǒng)計
設(shè)置擬研究的開發(fā)者和時間段進行統(tǒng)計。首先指定開發(fā)者,可選全部或單一開發(fā)者;然后指定時間,可選某天、某月、某年或任意時間段。研究可得,該項技術(shù)主題的分析闡釋可見如下。
(1)代碼修改量。對指定的開發(fā)者在指定時間段內(nèi),針對代碼的增加和刪除行數(shù)進行統(tǒng)計,方便用于一些指標,諸如活躍度、開發(fā)效率的分析。為此,可給出某成員的統(tǒng)計運行效果如圖2所示;
2)影響文件類型。對指定的開發(fā)者在指定時間段內(nèi),提交的所有版本影響的文件類型進行統(tǒng)計,區(qū)分代碼文件、配置文件或非文本文件;
3)修改文件個數(shù)。對指定的開發(fā)者在指定時間段內(nèi),提交的所有版本影響到的文件進行統(tǒng)計;
(4)變更類型分析。對指定的開發(fā)者在指定時間段內(nèi),發(fā)生的代碼修改進行歸類分析?煞譃樾薷姆椒w、增加方法、代碼重構(gòu)、修復bug等。
2.3.3量化指標
(1)團隊
、賵F隊效率。該團隊在指定時間段內(nèi),對代碼的增、刪行數(shù)的平均值;
②團隊活躍度。該團隊在指定時間段內(nèi)的活躍情況;
、蹐F隊成員貢獻量。團隊所有成員在指定時間段內(nèi)的工作量查看和比較,呈現(xiàn)效果如圖3所示。
(2)成員
①開發(fā)效率。該成員在指定的時間段內(nèi),對代碼的修改量,以及與團隊平均水平的比較;
、谛薷奈募愋汀T摮蓡T在指定的時間段內(nèi),所有對軟件項目的修改所影響到的文件類型;
、刍钴S度。顯示該成員在指定時間段內(nèi)的活躍時間與活躍度;
、蹷ug修復量。指定時間段內(nèi)修復的Bug數(shù)量,以及修改指定Bug所耗時間;
、莓a(chǎn)出量。指定時間段內(nèi)的代碼產(chǎn)出量和功能產(chǎn)出量,可以查看月產(chǎn)出、季度產(chǎn)出等。
2.3.4內(nèi)容查看
對指定文件的任意版本內(nèi)容進行查看,并可以比較任意版本之間的變更內(nèi)容。研究重點可概述如下。
(1)文件內(nèi)容查看。指定文件名(文件路徑)、版本號,展示文件的增加時間、修改時間、文件類型及文件內(nèi)容;
(2)變更內(nèi)容查看。指定文件名、變更前后的版本號,展示該文件在這2個指定版本間的變更內(nèi)容。
3結(jié)束語
本軟件開發(fā)過程量化系統(tǒng),通過獲取軟件開發(fā)過程中的變更數(shù)據(jù)并協(xié)同數(shù)據(jù)處理,實現(xiàn)了對軟件開發(fā)過程的量化管理。后續(xù)根據(jù)量化結(jié)果,可以對工作量、缺陷數(shù)、熟練度、開發(fā)能力等具體數(shù)據(jù)進行度量,確定開發(fā)者的開發(fā)能力等級,進而獲得對人員、團隊、公司的生產(chǎn)率的度量、項目進度管理和進度預警;并可以結(jié)合COCOMOⅡ模型,形成適用于該機構(gòu)的工作量估算模型和軟件成本估算模型。
參考文獻
[1]侯成功,譚裴,葉敏.IFPUG功能點分析方法在電信行業(yè)軟件中的應用[J].軟件導刊,2017,16(9):142-144,147.
[2]張旭,劉浩馳.基于CMMI的量化管理在項目中的應用與研究[J].電腦與電信,2016(4):62-65.
[3]羅娟,陸東暉,徐霞.基于CMMI4的軟件項目量化質(zhì)量管理研究[J].軟件導刊,2016,15(6):8-10.
[4]楊培培,趙海生,張金棟.Wideband_Delphi技術(shù)在軟件估算中的應用[J].電子質(zhì)量,2017(10):39-42.
[5]BOEHMBW,CLARK,HOROWITZ,etal.SoftwarecostestimationwithCocomoIIwithCdrom[M].UpperSaddleRiver,NJ,USA:PrenticeHallPTR,2000.
[6]魏來,劉海濤,付祎.基于偏最小二乘回歸的COCOMO模型校準方法[J].統(tǒng)計與決策,2016(8):73-76.
[7]李亞紅,郝克剛,葛瑋.基于GQM模型的軟件項目進度的度量過程[J].計算機應用,2005,25(6):1448-1450.
[8]戴炳榮,王凌,李超,等.一種在GQM度量方法中的決策機制研究[J].計算機應用與軟件,2017,34(5):19-23.
[9]姜文,劉立康.基于持續(xù)集成的軟件度量[J].計算機測量與控制,2017,25(5):136-139.
[3]羅娟,陸東暉,徐霞.基于CMMI4的軟件項目量化質(zhì)量管理研究[J].軟件導刊,2016,15(6):8-10.
[4]楊培培,趙海生,張金棟.Wideband_Delphi技術(shù)在軟件估算中的應用[J].電子質(zhì)量,2017(10):39-42.
[5]BOEHMBW,CLARK,HOROWITZ,etal.SoftwarecostestimationwithCocomoIIwithCdrom[M].UpperSaddleRiver,NJ,USA:PrenticeHallPTR,2000.
[6]魏來,劉海濤,付祎.基于偏最小二乘回歸的COCOMO模型校準方法[J].統(tǒng)計與決策,2016(8):73-76.
[7]李亞紅,郝克剛,葛瑋.基于GQM模型的軟件項目進度的度量過程[J].計算機應用,2005,25(6):1448-1450.
[8]戴炳榮,王凌,李超,等.一種在GQM度量方法中的決策機制研究[J].計算機應用與軟件,2017,34(5):19-23.
[9]姜文,劉立康.基于持續(xù)集成的軟件度量[J].計算機測量與控制,2017,25(5):136-139.
轉(zhuǎn)載請注明來自:http://www.jinnzone.com/ruanjiankaifalw/67536.html