国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

融合加權(quán)代碼異味強度因子軟件缺陷預測模型

2022-12-30 08:15陳鏡如黃子杰高建華
計算機工程與設(shè)計 2022年12期
關(guān)鍵詞:異味度量增益

陳鏡如,黃子杰,高建華

(1.上海師范大學 計算機科學與技術(shù)系,上海 200234;2.華東理工大學 計算機科學與工程系,上海 200237)

0 引 言

研究表明[1],分析與源代碼質(zhì)量相關(guān)的結(jié)構(gòu)度量來預測缺陷及其發(fā)生傾向,但使用單一的結(jié)構(gòu)度量作為特征沒有取得良好的預測效果。缺陷預測是一種有監(jiān)督學習的任務(wù),它將特征因子作為一組獨立變量,將類的缺陷傾向性作為因變量,訓練機器學習分類器,并給出預測結(jié)果。文獻[2]指出在添加代碼異味強度作為軟件缺陷的預測因子時,可以為模型帶來信息增益,并提高缺陷模型的預測能力。

代碼異味已經(jīng)成為軟件系統(tǒng)在維護軟件質(zhì)量方面造成復雜性的一個標志[3]。代碼異味用于識別要重構(gòu)的代碼部分,以提高軟件的整體可維護性[4]。代碼異味與軟件缺陷成正相關(guān),并能對缺陷檢測模型的性能產(chǎn)生積極影響[5]。使用文獻[6]中提及的方法,將使用改進代碼異味強度檢測方法作為預測因子添加到預測模型中,分析預測模型性能。

機器學習技術(shù)在預測代碼異味方面有很大的潛力,有助于檢測這些異味并提高軟件質(zhì)量[7]。當進行特征選擇和應(yīng)用分類模型時,具有隨機森林分類器的BFS森林分類器給出了最好的性能[8]。

Palomba等[9]認為與復雜/長源代碼相關(guān)的異味通常被開發(fā)者視為重要威脅。代碼異味一旦被引入,就難以被移除,因此應(yīng)盡快將其重構(gòu)[10],否則將會在代碼實現(xiàn)和軟件架構(gòu)的粒度上引發(fā)更嚴重的問題[11],提升系統(tǒng)的易錯性,進而導致軟件缺陷[12,13]。研究表明,可以通過組合結(jié)構(gòu)度量和閾值來檢測代碼異味[14],并進一步衡量代碼異味強度表示其嚴重程度。

1 相關(guān)術(shù)語

1.1 本文涉及的代碼異味

本文主要考慮以下6種代碼異味:God Class、Data Class、Brain Method、Shotgun Surgery、Dispersed Coupling和Message Chain,因為這6種代碼異味不僅是最常見的異味[15],而且與軟件缺陷的相關(guān)性最強[5]。6種代碼異味具體介紹如下。

God Class:類承擔太多不同的職責,使得代碼耦合性增強,內(nèi)聚性降低。

Data Class:類的函數(shù)沒有行為,僅用于存取類的屬性。

Brain Method:集中實現(xiàn)多個函數(shù)功能的過大方法。

Shotgun Surgery:每一次子方法發(fā)生變化,都會觸發(fā)其它幾個類許多的變化的一個類。

Dispersed Coupling:與其它的類發(fā)生太多耦合的類。

Message Chains:過度耦合的函數(shù)調(diào)用鏈,在執(zhí)行某個功能時,需要調(diào)用連續(xù)的多個方法。

上述代碼異味的檢測策略將在2.1節(jié)詳述。

1.2 隨機森林

隨機森林是一種基于Bagging的集成學習方法,其核心思想是將Bootstrap方法應(yīng)用到Cart算法中。

Gini指數(shù)的計算如式(1)所示

(1)

式中:K表示K個類別,pmk表示節(jié)點m中類別k所占的比例。

特征Xj在節(jié)點m的重要性,即節(jié)點m分枝前后的Gini指數(shù)變化量如式(2)所示

(2)

式中:GIl和GIr分別表示分枝后兩個新節(jié)點的Gini指數(shù)。

特征Xj在決策樹i中出現(xiàn)的節(jié)點在集合M中,那么Xj在第i棵樹的重要性,如式(3)所示

(3)

(4)

為了能夠更方便的對特征重要性評分作比較,對其進行歸一化處理,如式(5)所示

(5)

2 基于隨機森林加權(quán)的代碼異味強度

本文提出了一種基于隨機森林的代碼異味強度檢測方法,對Fontana等[15]提出的代碼異味強度計算公式進行了改進,給每個度量賦予相應(yīng)的權(quán)值。本文提出的算法整體框架流程如圖1所示:

圖1 加權(quán)強度因子總體流程

(1)獲取軟件系統(tǒng)源文件。

(2)使用JCodeOdor進行代碼異味強度檢測,導出數(shù)據(jù)。

(3)不同的檢測策略對度量的選擇各有側(cè)重,且度量的區(qū)分度不同,依照JCodeOdor中檢測策略中的度量整理數(shù)據(jù),無需進行特征提取。

(4)將檢測策略中的各個度量作為特征,代碼異味強度作為標簽,使用隨機森林評估特征重要度。

(5)將特征重要度作為各個特征的權(quán)值,計算加權(quán)代碼異味強度。本文在計算代碼異味強度時使用檢測策略中的度量。

本文提出的加權(quán)代碼異味強度,體現(xiàn)了各個度量對異味強度的不同影響,求得的代碼異味強度更為精確。

2.1 驗證代碼異味檢測策略

JCodeOdor是一個代碼異味檢測器,它依賴于度量和閾值組成的檢測策略來檢測代碼異味強度。其度量詳情見文獻[15],檢測策略見表1。

表1 代碼異味檢測策略

不同的檢測策略對度量的選擇各有側(cè)重,且度量的區(qū)分度不同,所以不同的檢測規(guī)則結(jié)果存在一定的差異[16]。不僅如此,度量指標之間存在的相關(guān)性[17]可能會影響規(guī)則的檢測效果。

為了驗證規(guī)則中的度量對本文數(shù)據(jù)集的適切程度,本文衡量其相關(guān)性。若規(guī)則中存在高度相關(guān)的度量,說明規(guī)則可能會部分失效,且這些度量會造成多重共線性問題(multicollinearity)。通過因變量R,即Pearson系數(shù)的高低,可以計算自變量x1,x2,……xn,n∈[1,20] 之間的相關(guān)性。兩個變量之間的Pearson相關(guān)系數(shù),用兩個變量之間的協(xié)方差和標準差的商來定義。

樣本Pearson相關(guān)系數(shù)如式(6)所示

(6)

r的相關(guān)程度判斷標準如下:[0.00,0.20)極低相關(guān),[0.02,0.40)低相關(guān),[0.40,0.60)中等相關(guān),[0.60,0.80)高度相關(guān),[0.80,1.0)極高相關(guān)。

2.2 數(shù)據(jù)預處理

JCodeOdor在檢測代碼異味強度時,對檢測到的值進行標準化處理,將數(shù)值縮放到1到10之間便于比較,如式(7)所示

(7)

式中:min和max是在數(shù)據(jù)集[18]中包含的指標的統(tǒng)計分布中的最小值和最大值。JCodeOdor利用1到10范圍內(nèi)的數(shù)值和提供強度語義描述的標簽來呈現(xiàn)代碼異味強度,如圖2所示。

圖2 異味強度標簽和范圍

本文選用JCodeOdor作為檢測工具來衡量代碼異味強度因子,該工具基于度量進行檢測。6種異味的閾值見表2[15]。

表2 6種異味的度量及其默認閾值

JCodeOdor在檢測異味時使用檢測策略中所有的度量并且對這些度量賦予相同的權(quán)重,如式(8)所示

(8)

式中:Int表示該代碼異味的代碼異味的強度,Metrici表示應(yīng)用JCodeOdor測得的第i個度量的值,n為代碼異味檢測策略中所用到的度量的個數(shù)。

經(jīng)對比各種分析計算方法,發(fā)現(xiàn)因子分析和主成分分析利用了數(shù)據(jù)信息的濃縮原理,利用方差解釋率進行權(quán)值運算,可能會忽略部分因子,而隨機森林計算權(quán)值可以解決這一問題。根據(jù)隨機森林評估特征重要性來改進代碼異味強度公式,加權(quán)代碼異味強度的計算公式,如式(9)所示

(9)

式中:WInt表示該代碼異味的加權(quán)代碼異味的強度,ai為應(yīng)用隨機森林計算得出的特征重要度,Metrici表示應(yīng)用JCodeOdor測得的第i個度量的值。

以Heritrix1.14.4為例,本文首先利用JCodeOdor對其系統(tǒng)進行檢測,測得該系統(tǒng)中只有4種代碼異味,即Brain Method、Disperse Coupling、Message Chain、Shotgun Surgery。部分代碼異味度量值和代碼異味強度的值(Intensity)的結(jié)果見表3。

2.3 權(quán)值計算

根據(jù)上文中檢測出的數(shù)據(jù),以Heritrix v1.14.4中的setAttribute(CrawlerSettings,Attribute)方法為例,它檢測出具有Shotgun Surgery異味,其具有以下度量值:CC:8;CM:10;FANOUT:6。這些度量值滿足Shotgun Surgery檢測策略中定義的約束條件: CC≥HIGH(5)∧CM≥HIGH(6)∧FANOUT≥LOW(3)。

將得到的實際度量值與表2中這5個點的閾值進行比較,來定義檢測規(guī)則中每個度量的強度標簽,具體規(guī)則見式(10)

(10)

由上文的強度閾值和劃分出的強度標簽和范圍,如表2和圖2所示,可知,在Shotgun Surgery代碼異味檢測策略中的度量與強度標簽相對應(yīng)如下:CC=高,CM=高,F(xiàn)ANOUT=非常高。

原代碼異味強度計算公式為代碼異味強度為其檢測策略中各個度量強度的加和平均值,且每個強度標簽與相應(yīng)值范圍的下限相關(guān)。

在本例中,CC和CM度量取標簽高即7.75,F(xiàn)ANOUT度量取標簽非常高即10。將上述值帶入式(8)求代碼異味強度值,即式(11)所示

(11)

根據(jù)圖2中的強度標簽,代碼異味強度因子值8.5與“高”強度標簽相關(guān),即在范圍[7.75,10]內(nèi)。

根據(jù)表3中的數(shù)據(jù),應(yīng)用隨機森林評估特征重要度,并將得到的基尼系數(shù)作為度量的權(quán)值,故加權(quán)代碼異味強度因子計算帶入式(9),如式(12)所示

表3 Code Smell度量及其異味值

0.329×7.75+0.321×7.75+0.35×10=8.5

(12)

由圖2中的強度標簽來看,加權(quán)代碼異味強度因子值8.5與“高”強度標簽相關(guān),即在范圍[7.75,10]內(nèi)。

3 實 驗

將加權(quán)代碼異味強度作為預測因子加入到現(xiàn)有的缺陷預測模型構(gòu)建新模型,并將新模型與原本模型進行對比,評估代碼異味強度的貢獻。

本文提出的預測模型框架流程如圖3所示:

圖3 缺陷預測流程

(1)確定基本預測因子,構(gòu)建基本軟件缺陷預測模型;

(2)確定代碼異味檢測過程;

1)JCodeOdor檢測軟件系統(tǒng)源文件;

2)隨機森林特征重要度評估;

3)加權(quán)代碼異味強度計算;

(3)在基本缺陷預測模型的基礎(chǔ)上加入加權(quán)代碼異味強度作為預測因子,構(gòu)建新模型;

(4)確定用于分類的機器學習技術(shù);

本文在一個由Jureczko等[19]定義的20個軟件度量組成的缺陷預測模型中測試代碼異味強度作為預測因子的貢獻。

3.1 實驗環(huán)境

本文的實驗在Intel(R) Core(TM)i7-5500U、4 GB內(nèi)存的Windows 10環(huán)境下進行,實驗的計算和分析使用Python完成。本文選取PROMISE數(shù)據(jù)集中的缺陷數(shù)據(jù)作為實驗對象,本文用到的數(shù)據(jù)集見表4。

表4 實驗項目

本文對這5個軟件系統(tǒng)進行實驗,并回答以下問題:

Q1:本文使用的檢測策略規(guī)則是否適用于數(shù)據(jù)集?

Q2:本文所建構(gòu)的模型是否能提升缺陷預測的性能?

Q3:與Fontana等提出的代碼異味強度因子相比,加權(quán)代碼異味強度作為預測因子是否能為缺陷預測模型帶來增益?可帶來多少增益?

3.2 實驗過程

本文使用以下3種預測因子組合構(gòu)建新模型,分析預測因子對模型貢獻的模型,以直觀地顯示預測因子帶來的模型性能提升,這些組合包括:

(1)基本模型:

基于Jureczko等[19]定義的20個軟件度量的軟件缺陷預測模型;

(2)基本模型+代碼異味強度因子:

1)將20個軟件度量和Fontana等提出的代碼異味強度作為預測因子,對于沒有異味的類,將其代碼異味強度因子設(shè)為0,構(gòu)建軟件缺陷預測模型;

2)將20個軟件度量和本文提出的加權(quán)代碼異味強度作為預測因子,對于沒有異味的類,將其代碼異味強度因子設(shè)為0構(gòu)建軟件缺陷預測模型。

本文對比了文獻[2]中使用的常見分類器,包括決策樹、邏輯回歸和簡單邏輯回歸等,發(fā)現(xiàn)簡單邏輯回歸的效果最好。這一實驗結(jié)果和文獻[2]的結(jié)果相吻合。

3.3 實驗結(jié)果與分析

為了回答Q1,本文驗證規(guī)則中的度量對數(shù)據(jù)集的適切程度,包括以下幾個方面:①度量間是否存在高相關(guān)性;②度量是否包含多種衡量代碼異味的角度。如代碼異味常表現(xiàn)出的低內(nèi)聚和高耦合,高復雜性等。因此,應(yīng)考慮度量中是否包含內(nèi)聚、耦合、復雜性和數(shù)據(jù)訪問。

相關(guān)性分析是指對兩個或多個具備相關(guān)性的變量元素進行分析,從而衡量兩個變量因素的相關(guān)密切程度。若存在相關(guān)性較過高的度量意味著多重共線性,機器學習模型和信息增益算法可能無法有效區(qū)分共線的特征,因此它們需要被移除。本文使用python檢測到的度量之間的相關(guān)性(Heritrix1.14.4)如圖4所示,線條上的數(shù)字為它們之間的相關(guān)性。本文發(fā)現(xiàn),檢測策略中的度量無顯著的相關(guān)性,不會造成多重共線問題。

圖4 度量相關(guān)性網(wǎng)絡(luò)

由相關(guān)性圖可知,各個度量之間有著復雜且多元的關(guān)系。具有極高相關(guān)性的有{FANOUT,CINT},{CINT,CFNAMM},{FANOUT,CFNAMM},{CC,CM};具有高度相關(guān)性的有:{ATLD,NOVA},{NOVA,NOLV},{CYCLO,LOC},{FDP,ATFD};具有極低相關(guān)性的有:{FANOUT,CM},{FANOUT,CC}。在同一異味下,檢測策略之間的相關(guān)性多處于高度相關(guān)以下。本文發(fā)現(xiàn),檢測策略中的度量無顯著的相關(guān)性,不會造成多重共線問題。

為了回答Q2,需要評估模型的性能。本文采用10次10折交叉驗證。實驗結(jié)果見表5、表6,表5是原始缺陷預測模型測得有關(guān)模型各項數(shù)據(jù),表6是添加代碼異味強度作為預測因子和添加加權(quán)代碼異味強度作為預測因子時模型的各項數(shù)據(jù)。

表5 原始模型結(jié)果

由表6可知,在基本預測模型中添加代碼異味強度和加權(quán)代碼異味強度作為預測因子后,能夠?qū)崿F(xiàn)高精度預測。對于Apache Velocity,在分別添加代碼異味強度和改進計算公式后求得的加權(quán)代碼異味強度作為模型的預測因子后,其模型精確度較原始模型分別提高25%和28%。這一結(jié)果意味著模型僅錯誤的分類了少部分數(shù)據(jù)。添加代碼異味強度作為預測模型的預測因子時,可提高模型的精確度。圖5描述了原軟件缺陷預測模型與添加代碼異味強度作為預測因子后的模型,模型的各項性能數(shù)據(jù)。值得注意的是,在基本模型運行良好的情況下,獲得性能增量是相當困難的。盡管如此,在這種情況下,使用代碼異味強度和加權(quán)代碼異味強度作為預測因子時,依然能夠提升模型的準確性。

表6 改進模型結(jié)果

圖5 Apache Velocity結(jié)果

在所有分析的項目中,增加代碼異味強度和加權(quán)代碼異味強度作為缺陷預測模型的預測因子時通常會提高基礎(chǔ)缺陷預測模型的性能。

對于Q2,在基本模型中分別添加代碼異味強度作為預測因子和加權(quán)代碼異味強度作為預測因子后,均能夠提高原預測模型的分類精確度。添加代碼異味強度作為預測因子模型的分類精確度可提高25%,添加加權(quán)代碼異味強度作為預測因子時比添加代碼異味強度作為預測因子時,缺陷預測模型分類精確度可提升約3%。添加加權(quán)代碼異味強度作為預測因子的缺陷預測模型的F-Measure比添加代碼強度作為預測因子的缺陷預測模型提升約2%。

為了驗證代碼異味強度在預測模型中所做的貢獻Q3,本文采用信息增益算法來量化代碼異味強度作為預測因子時為預測模型提供的增益。信息增益見式(13)

InfoGain(M,pi)=H(M)-H(M|pi)

(13)

式中:M為預測模型, P={p1,p2……pn} 為模型的預測因子。函數(shù)H(M)表示包含預測因子pi的模型的熵,而函數(shù)H(M|pi) 表示不包括預測因子pi的熵,見式(14)

(14)

圖6、圖7展示了系統(tǒng)Apache Xerces和系統(tǒng)Apache Lucene排名前十的度量的信息增益。

圖6 Apache Xerces結(jié)果

圖7 Apache Lucene 結(jié)果

代碼異味強度和改進公式后得到的加權(quán)代碼異味強度在Apache Xerces系統(tǒng)中提供的信息增益最少,分別是0.1和0.15。在系統(tǒng)Apache Lucene系統(tǒng)中,與其它度量相比,代碼異味強度因子和加權(quán)代碼異味強度因子帶來的信息增益最多,分別是0.50和0.47。在Apache Xerces項目中,基本模型的預測性能很高,獲得增益較為困難,但當使用代碼異味強度作為預測因子時可帶來0.1的性能提升,而使用加權(quán)代碼異味強度作為預測因子時可帶來0.11的性能提升。在Apache Lucene項目中,代碼異味強度作為預測因子時可帶來0.47的性能提升,但用于計算代碼異味強度的單個度量帶來的性能提升卻比它低。使用代碼異味強度和加權(quán)代碼異味強度作為預測因子相對比其衍生的單個度量具有更高的預測能力。

在所有研究項目中,代碼異味強度和加權(quán)代碼異味強度是模型最重要的預測因子之一。

對于Q3,改進公式得到的加權(quán)代碼異味強度提供的增益要大于代碼異味強度。Fontana等[14]提出的代碼異味強度因子將影響代碼異味的度量視為同等重要,不能精確地反映各個度量對代碼異味強度的影響程度。本文提出的加權(quán)代碼強度因子能夠區(qū)分各個度量對代碼異味強度的不同影響程度,測得的代碼異味強度的值相對更為準確。綜上所述,本文提出的加權(quán)代碼異味強度在模型中作為預測因子時,相較于代碼異味強度在模型中作為預測因子時,能夠帶來更多的增益。

4 結(jié)束語

代碼異味強度可以評估代碼異味的嚴重程度。Fontana等[14]提出了一種計算代碼異味強度的方法,它作為缺陷預測模型的預測因子時可提高模型的性能。然而,這種代碼異味強度的計算方法沒有區(qū)分各個度量對代碼異味強度的不同影響,測得的代碼異味強度的精確度有待提高。本文通過對各個度量賦予相應(yīng)的權(quán)值來改善這一問題。研究發(fā)現(xiàn),改進公式后測得的加權(quán)代碼異味強度更為精確。將加權(quán)代碼異味強度作為預測因子添加到缺陷預測模型中,與原始模型和使用未加權(quán)代碼異味的強度作為預測因子的模型相比,可提高缺陷預測模型的準確性。加權(quán)代碼異味強度作為預測因子比代碼異味強度作為預測因子時,能夠為模型帶來更高的信息增益。

本文為驗證規(guī)則中的度量對本文數(shù)據(jù)集的適切程度,檢驗了各個度量之間的相關(guān)性,發(fā)現(xiàn)了{CC,CM}、{FANOUT,CINT}這兩組度量呈高度相關(guān)關(guān)系,為對原始數(shù)據(jù)集進行處理時提供了依據(jù)。JCodeOdor中所提供的檢測策略中各個度量之間并無顯著相關(guān)性,不會造成多重共線問題,符合從各個角度考慮代碼異味的思想。今后的工作包括:進一步研究其它代碼異味的強度,提高加權(quán)代碼異味強度作為預測因子的普適性;選用開源軟件以外的軟件種類,驗證本文模型的普適性;進一步研究其它檢測策略中的度量之間的相關(guān)性,并將其結(jié)合到代碼異味強度中;研究代碼異味之間的相關(guān)性與軟件缺陷傾向性之間的關(guān)系。

猜你喜歡
異味度量增益
鮑文慧《度量空間之一》
基于增益調(diào)度與光滑切換的傾轉(zhuǎn)旋翼機最優(yōu)控制
基于單片機的程控增益放大器設(shè)計
代數(shù)群上由模糊(擬)偽度量誘導的拓撲
突出知識本質(zhì) 關(guān)注知識結(jié)構(gòu)提升思維能力
度 量
基于Multisim10和AD603的程控增益放大器仿真研究
用這些告別異味吧!夏天就要清清爽爽過!
紡織品異味檢測方法差異分析
程控增益射頻寬帶放大器
渭南市| 涞水县| 西乡县| 米脂县| 莒南县| 长春市| 永春县| 湄潭县| 昌黎县| 临沭县| 江津市| 若尔盖县| 海安县| 郸城县| 宁明县| 理塘县| 左贡县| 叙永县| 洪湖市| 武宁县| 新干县| 三门县| 玉田县| 元谋县| 鄢陵县| 盱眙县| 台南县| 巫溪县| 吉安市| 普兰县| 浮梁县| 定西市| 余干县| 剑阁县| 乡宁县| 丰都县| 阿克陶县| 嫩江县| 高平市| 卢龙县| 贺兰县|