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

?

面向?qū)ο筌浖攘恳蜃拥膬缏煞植佳芯?/h1>
2018-02-27 03:09冼偉成劉宏韜胡志剛
關(guān)鍵詞:面向?qū)ο?/a>度量代碼

冼偉成 劉 偉,2 劉宏韜 胡志剛

1(中南大學(xué)軟件學(xué)院 湖南 長(zhǎng)沙 410075) 2(湖南中醫(yī)藥大學(xué)管理與信息工程學(xué)院 湖南 長(zhǎng)沙 410208)

0 引 言

冪律分布相關(guān)理論研究在自然語(yǔ)言處理和各種自然數(shù)據(jù)分析中已經(jīng)取得較豐碩的成果。眾所周知的8020法則就是冪律分布的一種典型表現(xiàn)形式。在一次軟件工程會(huì)議上,人們通過(guò)研究發(fā)現(xiàn)“軟件工程研究中,80%的貢獻(xiàn)來(lái)自于20%的科研人員”[1],這就是冪律分布存在于軟件工程領(lǐng)域中的一種宏觀表現(xiàn)。如今,在軟件質(zhì)量領(lǐng)域的經(jīng)驗(yàn)研究中,研究度量結(jié)果中出現(xiàn)的冪律分布特征是其中的一個(gè)重要方向。

研究軟件中冪律分布的存在形式,并分析其產(chǎn)生原因,可以從經(jīng)驗(yàn)研究的角度為軟件質(zhì)量研究提供依據(jù),有助于軟件工程研究人員深入理解影響代碼質(zhì)量的原因。在軟件開(kāi)發(fā)過(guò)程中結(jié)合冪律分布規(guī)律指導(dǎo)開(kāi)發(fā),有利于提高軟件的可靠性、可維護(hù)性,在提升代碼質(zhì)量的同時(shí)提高開(kāi)發(fā)效率。

本文主要對(duì)4個(gè)大型Java開(kāi)源項(xiàng)目進(jìn)行研究,分別對(duì)影響軟件質(zhì)量的3個(gè)主要度量因子進(jìn)行度量。利用冪律分布的研究方法對(duì)3個(gè)度量因子的分布規(guī)律進(jìn)行研究。本文采用極大似然估計(jì)法MLE(Maximum Likelihood Estimate)分別求得各個(gè)項(xiàng)目度量因子統(tǒng)計(jì)結(jié)果的擬合形狀參數(shù),并使用假設(shè)檢驗(yàn)對(duì)冪律分布的擬合效果進(jìn)行評(píng)價(jià)。利用度量因子統(tǒng)計(jì)結(jié)果擬合的冪律分布函數(shù),在4個(gè)大型Java開(kāi)源項(xiàng)目中發(fā)現(xiàn)潛在軟件質(zhì)量問(wèn)題。

1 冪律分布在軟件系統(tǒng)中的研究背景

1.1 冪律分布概述

在大多數(shù)關(guān)于冪律分布的研究中,將冪律分布分為兩類(lèi)進(jìn)行單獨(dú)研究:離散型和連續(xù)型。

連續(xù)型冪律分布的概率密度函數(shù)PDF(Probability Density Function):

(1)

當(dāng)α>1和xmin>0時(shí),離散型冪律分布的概率質(zhì)量函數(shù)PMF(Probability Mass Function):

(2)

(3)

式(3)是推廣的zeta函數(shù)。且當(dāng)xmin=1時(shí),ζ(α,1)是標(biāo)準(zhǔn)的zeta函數(shù)。

冪律分布的累積分布函數(shù)有非常簡(jiǎn)單的形式,對(duì)于連續(xù)型冪律分布的累積分布函數(shù)為:

(4)

(5)

1.2 基于極大似然估計(jì)的冪律分布擬合法

在已有關(guān)于面向?qū)ο筌浖攘恐袃缏煞植佳芯康奈墨I(xiàn)中,絕大部分使用在雙對(duì)數(shù)坐標(biāo)系中采用線(xiàn)性擬合來(lái)獲得冪律分布的形狀參數(shù)。這種方法是擬合冪律分布函數(shù)最常用的方法,但這種方法存在較大的主觀性且容易出錯(cuò)。Clauset在文獻(xiàn)[2]中對(duì)比了三種冪律分布函數(shù)的擬合方式,文中發(fā)現(xiàn)擬合效果最差的方法是采用雙對(duì)數(shù)坐標(biāo)系中線(xiàn)性擬合的方式,而采用極大似然估計(jì)法獲得冪律分布函數(shù)的形狀參數(shù)是最可靠的方法。

形狀參數(shù)可以通過(guò)極大似然估計(jì)法直接求得,對(duì)于連續(xù)型冪律分布:

(7)

(8)

離散型冪律分布函數(shù)形狀參數(shù)α值的極大似然估計(jì)與連續(xù)型冪律函數(shù)形狀參數(shù)α值近似。

在使用極大似然估計(jì)法計(jì)算形狀參數(shù)α的時(shí)候,需要以一個(gè)特定的xmin值作為參數(shù)。因此需要事先求出xmin值才能確定形狀參數(shù)α。文獻(xiàn)研究表明,大部分實(shí)際數(shù)據(jù)中只有數(shù)據(jù)的尾部才符合冪律分布情況,隨著xmin值的增長(zhǎng),實(shí)驗(yàn)中被拋棄的數(shù)據(jù)也越來(lái)越多。為了使擬合函數(shù)能覆蓋大部分?jǐn)?shù)據(jù),選擇xmin值時(shí)需要慎重考慮。

為了精確找到xmin值,本文沒(méi)有采用操作方式簡(jiǎn)單但容易出現(xiàn)誤差的雙對(duì)數(shù)坐標(biāo)圖法。而采用了Clauset提出的一種基于柯?tīng)柲缏宸?斯米爾諾夫檢驗(yàn)(Kolmogorov-Smirnov test,K-S檢驗(yàn))的xmin值預(yù)測(cè)方法[2]。這種方式將所有x的取值進(jìn)行遍歷,將每次所取的x值作為xmin,然后找到大于或等于xmin值時(shí)實(shí)際數(shù)據(jù)和擬合分布函數(shù)的累計(jì)分布函數(shù)CDF(Cumulative Distribution Function)值間差的絕對(duì)值最大的情況,并將最大值作為此次遍歷的D值。遍歷結(jié)束后找到使D值最小的x作為xmin值。

(9)

S(x)和P(x)分別為實(shí)際數(shù)據(jù)和擬合函數(shù)的CDF值(x≥xmin)。這種方法同時(shí)適用于對(duì)數(shù)正態(tài)分布和冪律分布的xmin值預(yù)測(cè)。

1.3 分布函數(shù)擬合優(yōu)度檢驗(yàn)方法

在目前的冪律分布相關(guān)研究中,有關(guān)形狀參數(shù)估計(jì)的研究沒(méi)有考慮檢驗(yàn)假設(shè)與實(shí)際數(shù)據(jù)的擬合程度。因此,其估計(jì)結(jié)果并不嚴(yán)格。為了驗(yàn)證通過(guò)極大似然估計(jì)方式獲取的形狀參數(shù)是否適用于實(shí)際數(shù)據(jù),需要采用假設(shè)檢驗(yàn)來(lái)對(duì)分布函數(shù)進(jìn)行檢驗(yàn)。有兩種常用的分布函數(shù)擬合優(yōu)度檢驗(yàn),一種是Pearson卡方檢驗(yàn),另一種是K-S檢驗(yàn)。雖然Pearson卡方檢驗(yàn)比較容易實(shí)現(xiàn),但是檢驗(yàn)的可靠性比較差。最終選擇K-S檢驗(yàn)來(lái)對(duì)實(shí)驗(yàn)結(jié)果是否滿(mǎn)足冪率分布的情況進(jìn)行檢驗(yàn)。

K-S檢驗(yàn)是建立在以下公式:

K=supx|F*(x)-S(x)|

(10)

式中:F*(x)代表預(yù)先假設(shè)的理論分布函數(shù),S(x)代表樣本的累計(jì)概率分布函數(shù)。K-S檢驗(yàn)統(tǒng)計(jì)量的大小反映了假設(shè)分布與經(jīng)驗(yàn)分布的擬合程度。

本文對(duì)冪律分布和對(duì)數(shù)正態(tài)分布的擬合優(yōu)度檢驗(yàn),引入K-S檢驗(yàn)統(tǒng)計(jì)量,結(jié)合Clauset等提出了一種基于拔靴法的適用于冪律分布函數(shù)和其他擬合函數(shù)的擬合優(yōu)度檢驗(yàn)方法[2],來(lái)驗(yàn)證上文擬合方法獲得的形狀參數(shù)的估計(jì)效果。該方法使用P值來(lái)量化假設(shè)的合理性,從而在一定程度上提供對(duì)估計(jì)結(jié)果可信度的判斷。如果P值大于0.1,則實(shí)際數(shù)據(jù)與理論模型產(chǎn)生數(shù)據(jù)之間的差值可以被解釋為統(tǒng)計(jì)波動(dòng)。如果P值接近0,則說(shuō)明理論模型不能較好地?cái)M合實(shí)際數(shù)據(jù),需要使用其他模型來(lái)描述實(shí)際數(shù)據(jù)。當(dāng)對(duì)冪律分布函數(shù)進(jìn)行假設(shè)檢驗(yàn)時(shí)的假設(shè)為:

H0:實(shí)際數(shù)據(jù)產(chǎn)生于冪律分布函數(shù)

H1:實(shí)際數(shù)據(jù)并非產(chǎn)生于冪律分布函數(shù)

基于拔靴法的冪律分布假設(shè)檢驗(yàn)算法如下所示:

冪律分布假設(shè)檢驗(yàn)算法

1 Calculate point estimates forxminand the scaling parameterα

2 Calculate the Kolmogorov-Smirnov statistic,KSd, for the original data set.

3 Setn1equal to the number of values belowxmin.

4 Setn2=n-n1andP=0.

5 for i in 1:B:

6 Simulaten1values from a uniform distribution: U(1,xmin) andn2values from a power law distribution (with parameterα).

7 Calculate the associated Kolmogorov-Smirnov statistic,KSsim.

8 IfKSd>KSsim,thenP+P+1.

9 end for

10P=P/B.

1.4 冪律分布在軟件系統(tǒng)中的研究

軟件工程領(lǐng)域的研究者也將冪律分布運(yùn)用于面向?qū)ο筌浖嚓P(guān)復(fù)雜網(wǎng)絡(luò)的研究中。隨著面向?qū)ο筌浖笮〉脑黾?,研究人員發(fā)現(xiàn),在某些層次中實(shí)體間的關(guān)系可以用無(wú)標(biāo)度網(wǎng)絡(luò)來(lái)進(jìn)行研究,例如代碼行數(shù)、方法調(diào)用數(shù)和圈復(fù)雜度等。已經(jīng)有研究者在軟件系統(tǒng)中發(fā)現(xiàn)了冪律分布的存在。

馬皖王瑩等將復(fù)雜網(wǎng)絡(luò)的特征度量用于缺陷的預(yù)測(cè)研究中,發(fā)現(xiàn)JEdit軟件的源代碼網(wǎng)絡(luò)特征度量符合冪律分布[3]。韓明暢等將復(fù)雜網(wǎng)絡(luò)理論引入人工設(shè)計(jì)和實(shí)現(xiàn)的軟件中, 把其中的實(shí)體和關(guān)系轉(zhuǎn)換成為網(wǎng)絡(luò)拓?fù)涞男问?發(fā)現(xiàn)Java類(lèi)庫(kù)中存在的無(wú)尺度特征、小世界現(xiàn)象和脆弱性魯棒性并存的特點(diǎn)[4]。Valverde的研究,使用無(wú)標(biāo)度網(wǎng)絡(luò)圖和冪律分布來(lái)研究Java和C/C++開(kāi)源項(xiàng)目中軟件的架構(gòu)情況[5-6],將類(lèi)作為節(jié)點(diǎn),類(lèi)間關(guān)系作為連線(xiàn),發(fā)現(xiàn)節(jié)點(diǎn)的入度和出度分布情況符合冪律分布。Louridas等[7]將之前的工作進(jìn)行總結(jié),發(fā)現(xiàn)長(zhǎng)尾分布廣泛存在于面向?qū)ο筌浖母鱾€(gè)層次結(jié)構(gòu)中,并指出了冪律分布和其他長(zhǎng)尾分布在軟件工程中的研究方向。需要指出的是,以上的研究主要使用在雙對(duì)數(shù)坐標(biāo)系中采用線(xiàn)性擬合來(lái)獲得冪律分布的形狀參數(shù),有可能會(huì)造成較大誤差。

2 冪律分布在面向?qū)ο筌浖攘恐械膽?yīng)用

將冪律分布在自然語(yǔ)言處理和各種復(fù)雜網(wǎng)絡(luò)分析中的研究方法適當(dāng)改進(jìn),運(yùn)用于在不同層次軟件結(jié)構(gòu)中的面向?qū)ο筌浖攘?。?yàn)證冪律分布在面向?qū)ο筌浖攘恐械拇嬖冢⒔忉寖缏煞植汲霈F(xiàn)的原因,利用擬合的冪律函數(shù)對(duì)軟件質(zhì)量改進(jìn)提供指導(dǎo)。為了減小擬合誤差,本文采用極大似然估計(jì)方法獲得冪律分布形狀參數(shù)α,并使用基于K-S檢驗(yàn)的擬合優(yōu)度檢驗(yàn)法檢驗(yàn)擬合效果。

2.1 實(shí)驗(yàn)準(zhǔn)備

本實(shí)驗(yàn)采用的數(shù)據(jù)集來(lái)自Qualitas Corpus項(xiàng)目[8],它是由奧克蘭大學(xué)的Ewan Tempero教授收集整理的軟件系統(tǒng)代碼集。項(xiàng)目的目的是為軟件工程經(jīng)驗(yàn)研究提供一個(gè)可重復(fù)研究的資源。截至到2013年9月,Qualitas Corpus已經(jīng)收集了112個(gè)具有代表性的Java軟件系統(tǒng),其中包括著名的Eclipse和NetBeans等。我們選取了其中最具有代表性的4個(gè)大型開(kāi)源項(xiàng)目進(jìn)行研究,包括Java集成開(kāi)發(fā)環(huán)境Eclipse、NetBeans,Java運(yùn)行時(shí)環(huán)境JRE(Java Runtime Environment),還有分布式系統(tǒng)基礎(chǔ)架構(gòu)Hadoop。項(xiàng)目說(shuō)明如表1所示。

表1 實(shí)驗(yàn)項(xiàng)目簡(jiǎn)要說(shuō)明

本文使用研究小組開(kāi)發(fā)的開(kāi)源代碼度量工具Perfume[9]對(duì)已收集的4個(gè)Java開(kāi)源項(xiàng)目進(jìn)行度量。Perfume是一款基于抽象語(yǔ)法樹(shù)AST(Abstract Syntax Tree)的代碼度量工具。利用AST將源代碼對(duì)應(yīng)結(jié)構(gòu)處理成樹(shù)狀結(jié)構(gòu),極大提高代碼度量效率。在AST的處理中,將每個(gè)Java文件定義為一個(gè)編譯單元(Compilation Unit),一個(gè)編譯單元中可以存在多個(gè)類(lèi)定義。為了精確獲得每個(gè)類(lèi)的度量值,使用AST中定義的類(lèi)聲明節(jié)點(diǎn)(TypeDeclaration)作為類(lèi)的區(qū)分標(biāo)準(zhǔn)。所有針對(duì)類(lèi)的度量值都是針對(duì)類(lèi)申明節(jié)點(diǎn)的度量。Perfume工具支持對(duì)28種常見(jiàn)的代碼度量項(xiàng)目進(jìn)行度量,其中包括經(jīng)典CK度量集等。實(shí)驗(yàn)選取了3個(gè)經(jīng)典度量因子,如表2所示。

表2 度量因子簡(jiǎn)要說(shuō)明

本文中度量結(jié)果的統(tǒng)計(jì)分析和冪律函數(shù)的擬合與假設(shè)檢驗(yàn),使用Gillespie等編寫(xiě)的 R語(yǔ)言函數(shù)包——PoweRlaw包[10]進(jìn)行相關(guān)處理。

2.2 實(shí)驗(yàn)方案

本文在面向?qū)ο筌浖攘恐械膬缏煞植佳芯窟^(guò)程如下,流程圖如圖1所示。

圖1 冪律分布在面向?qū)ο筌浖攘恐械膶?shí)驗(yàn)流程圖

第一步在Qualitas Corpus官方網(wǎng)站上下載需要研究的Java開(kāi)源項(xiàng)目的源代碼。并對(duì)源代碼文件進(jìn)行預(yù)處理,將測(cè)試用例文件中會(huì)對(duì)度量產(chǎn)生影響的源代碼文件刪除。

第二步確定需要研究的面向?qū)ο蠖攘恳蜃?,使用軟件度量工具Perfume對(duì)4個(gè)開(kāi)源項(xiàng)目進(jìn)行度量。將獲得的度量值進(jìn)行預(yù)處理。對(duì)于LOC、NOA和NOM3個(gè)度量因子,將度量結(jié)果值為0的類(lèi)剔除,僅保留度量值大于0的類(lèi)。

第三步使用基于K-S檢驗(yàn)的xmin值預(yù)測(cè)方法獲得xmin值,利用極大似然估計(jì)法求得在xmin值下的冪律函數(shù)形狀參數(shù)α。使用Clauset等提出的擬合優(yōu)度檢驗(yàn)方法對(duì)獲得的冪律函數(shù)的擬合效果進(jìn)行檢驗(yàn)。

第四步對(duì)于擬合效果較好的度量值進(jìn)行研究,研究?jī)缏煞植荚谙鄳?yīng)度量因子中產(chǎn)生的原因。并利用擬合后的冪律函數(shù)找到不符合分布規(guī)律的類(lèi),研究其對(duì)軟件質(zhì)量的影響。

3 度量因子的冪律分布研究結(jié)果與分析

本節(jié)中,主要對(duì)4個(gè)具有代表性的大型Java開(kāi)源項(xiàng)目的面向?qū)ο筌浖攘恐颠M(jìn)行統(tǒng)計(jì)與分析。我們對(duì)以上開(kāi)源項(xiàng)目的3個(gè)經(jīng)典度量因子進(jìn)行度量統(tǒng)計(jì),從統(tǒng)計(jì)值中找到一些統(tǒng)計(jì)學(xué)規(guī)律。表3展示了一些對(duì)于以上開(kāi)源項(xiàng)目的描述統(tǒng)計(jì)結(jié)果。

表3 實(shí)驗(yàn)項(xiàng)目描述統(tǒng)計(jì)

3.1 類(lèi)代碼行數(shù)

代碼行數(shù)是評(píng)價(jià)軟件質(zhì)量的基礎(chǔ)性度量因子,用于度量軟件的大小。本文中度量的代碼行數(shù)為類(lèi)代碼行數(shù),但不包括注釋語(yǔ)句和空白行。從描述統(tǒng)計(jì)結(jié)果表3中可以發(fā)現(xiàn),4個(gè)項(xiàng)目的LOC平均值比較接近,均在130左右。而JRE項(xiàng)目的中位數(shù)為36,其他3個(gè)項(xiàng)目均在50以上。而且JRE項(xiàng)目中LOC的最大值6 787也遠(yuǎn)小于其他項(xiàng)目。這可能與項(xiàng)目的類(lèi)型有關(guān)。從偏度值看出,均存在長(zhǎng)尾情況。為了更加清晰地觀察4個(gè)項(xiàng)目LOC統(tǒng)計(jì)結(jié)果的分布情況,使用互補(bǔ)累計(jì)分布函數(shù)CCDF(Complementary Cumulative Distribution Function)圖來(lái)描述實(shí)際數(shù)據(jù)和擬合情況,如圖2所示。由于冪律分布主要出現(xiàn)在數(shù)據(jù)的尾部,可以發(fā)現(xiàn)擬合的冪律分布的xmin值都比較大,這意味著有大量的數(shù)據(jù)被拋棄,會(huì)在一定程度上影響擬合結(jié)果的可靠性,故使用K-S檢驗(yàn)來(lái)驗(yàn)證。詳細(xì)擬合結(jié)果和假設(shè)檢驗(yàn)結(jié)果如表4所示??梢詮谋碇锌闯觯薐RE項(xiàng)目以外,其余項(xiàng)目可以較好地?cái)M合對(duì)數(shù)正態(tài)分布情況。這與Concas等的研究一致[11]。在數(shù)據(jù)尾部的擬合中,發(fā)現(xiàn)其中3個(gè)項(xiàng)目均有冪律分布情況存在。Eclipse和Hadoop項(xiàng)目尾部擬合冪律分布函數(shù)的形狀參數(shù)α值在3.0左右。而在JRE項(xiàng)目中,尾部擬合冪律分布函數(shù)的形狀參數(shù)α為4.5,遠(yuǎn)高于其他項(xiàng)目。在Netbeans項(xiàng)目中沒(méi)有在尾部發(fā)現(xiàn)明顯的冪律分布情況。但可以從圖中發(fā)現(xiàn),其尾部數(shù)據(jù)呈現(xiàn)明顯不規(guī)則情況,意味著存在較多代碼行數(shù)偏高的類(lèi)。

圖2 LOC度量值互補(bǔ)累計(jì)分布函數(shù)圖

圖2中,虛線(xiàn)代表使用對(duì)數(shù)正態(tài)分布函數(shù)擬合的結(jié)果,實(shí)線(xiàn)代表冪律分布函數(shù)擬合的結(jié)果,Xmin_in代表擬合對(duì)數(shù)正態(tài)分布的xmin值,Xmin_pl代表擬合冪律分布的xmin值。

表4 LOC度量值擬合結(jié)果

將偏離擬合函數(shù)較多的類(lèi)單獨(dú)進(jìn)行分析,發(fā)現(xiàn)這些類(lèi)均在擬合函數(shù)右側(cè),意味著代碼行數(shù)過(guò)多。對(duì)于NetBeans項(xiàng)目來(lái)說(shuō),偏離擬合函數(shù)最多的類(lèi)的全限定名為org.netbeans.modules.css.lib.Css3Parser,總共代碼行數(shù)為36 731行。該類(lèi)的主要功能是解析Css3文件內(nèi)容,包含有大量的條件語(yǔ)句,類(lèi)圈復(fù)雜度更是達(dá)到了7 712。這個(gè)類(lèi)職責(zé)過(guò)重,將導(dǎo)致系統(tǒng)后期可維護(hù)性降低。

從累計(jì)分布中可以發(fā)現(xiàn),在Eclipse、JRE和Hadoop項(xiàng)目中80%的類(lèi)代碼均小于160行,而NetBeans項(xiàng)目明顯高于其他3個(gè)項(xiàng)目,達(dá)到了200行。在一個(gè)優(yōu)秀的面向?qū)ο筌浖O(shè)計(jì)中,設(shè)計(jì)人員會(huì)使用大量的繼承和關(guān)聯(lián)特性,從而達(dá)到復(fù)用的目的。合理的復(fù)用代碼可以降低系統(tǒng)復(fù)雜程度,并減少代碼行數(shù)。

3.2 類(lèi)方法屬性個(gè)數(shù)

類(lèi)方法屬性個(gè)數(shù),代表每個(gè)類(lèi)中屬性值的個(gè)數(shù)。從表3中可以發(fā)現(xiàn),4個(gè)項(xiàng)目方法屬性個(gè)數(shù)中位數(shù)均為3,且存在較明顯的長(zhǎng)尾分布情況。在最大值方面,Eclipse和NetBeans兩個(gè)編譯器的最大值均在2 000以上,遠(yuǎn)高于JRE和Hadoop項(xiàng)目的最大值。在Eclipse項(xiàng)目中,最高值2 042存在于一個(gè)核心功能類(lèi)中,全限定名為org.eclipse.swt.internal.win32.OS,用于兼容各種版本W(wǎng)indows操作系統(tǒng)外觀。而在NetBeans項(xiàng)目中,最高值2 021在全限定名為org.netbeans.modules.css.lib. Css3Parser的類(lèi)中,這個(gè)類(lèi)在LOC的度量中也是最高的。從表5中可以發(fā)現(xiàn),4個(gè)項(xiàng)目均比較好地?cái)M合冪律分布函數(shù)。在對(duì)數(shù)正態(tài)分布函數(shù)的擬合中,除了Eclipse項(xiàng)目外其他3個(gè)項(xiàng)目均得到很好的效果。在Eclipse和JRE兩個(gè)項(xiàng)目中,尾部擬合的冪律分布函數(shù)形狀參數(shù)α在2.25到2.46之間,而在NetBeans和Hadoop項(xiàng)目中,尾部擬合冪律分部函數(shù)的形狀參數(shù)α在3.37到3.40之間。觀察圖3可以發(fā)現(xiàn),在4個(gè)項(xiàng)目中均有偏離擬合函數(shù)較大的點(diǎn)存在,這些點(diǎn)的值往往大大高于平均值。在Hadoop項(xiàng)目中,偏離擬合函數(shù)最多的3個(gè)類(lèi)為DFSConfigKeys、YarnConfiguration、CommonConfigurationKeysPublic,3個(gè)類(lèi)中類(lèi)屬性個(gè)數(shù)為586、423和116。這些類(lèi)均是用于保存Hadoop中的配置常量的。可以很明顯地發(fā)現(xiàn),這些用于存儲(chǔ)配置常量的類(lèi)均不是我們面向?qū)ο笾袀鹘y(tǒng)意義的類(lèi),可以使用其他方式將屬性值單獨(dú)存儲(chǔ)。

圖3 NOA度量值互補(bǔ)累計(jì)分布函數(shù)圖

項(xiàng)目名稱(chēng)擬合分布參數(shù)參數(shù)值xmin覆蓋類(lèi)數(shù)P值Eclispepowerlawlog-normalαμσ2.4554320.6054261.4011551122150119650.170.00Hadooppowerlawlog-normalαμσ3.3944230.4824171.2730203135621210.810.61JREpowerlawlog-normalαμσ2.2576331.3484051.47515520143645330.260.47NetBeanspowerlawlog-normalαμσ3.3774600.9520821.075416281631309130.690.13

3.3 類(lèi)方法個(gè)數(shù)

類(lèi)方法個(gè)數(shù)是指一個(gè)類(lèi)中所包含的全部方法的個(gè)數(shù),但不包含內(nèi)部類(lèi)和匿名類(lèi)中的方法。這是一種CK度量集中的因子,可用于對(duì)大型軟件的質(zhì)量和缺陷進(jìn)行預(yù)測(cè)。在表3中可以發(fā)現(xiàn),被統(tǒng)計(jì)項(xiàng)目的偏度值明顯偏高,說(shuō)明存在長(zhǎng)尾分布的特點(diǎn)。為了研究類(lèi)方法個(gè)數(shù)的分布情況,使用對(duì)數(shù)正態(tài)分布和冪律分布對(duì)數(shù)據(jù)進(jìn)行了函數(shù)擬合。擬合結(jié)果如表6所示,這4個(gè)Java大型開(kāi)源項(xiàng)目的類(lèi)方法個(gè)數(shù)統(tǒng)計(jì)值在尾部均呈現(xiàn)冪律分布,其中Hadoop項(xiàng)目符合冪律分布的數(shù)據(jù)量最多,共有占全部統(tǒng)計(jì)值的42.7%。而其余3個(gè)項(xiàng)目只有4%左右的數(shù)據(jù)符合。在尾部?jī)缏煞植贾?,形狀參?shù)α在3.28到3.48之間。

表6 NOM度量值擬合結(jié)果

圖4展示了實(shí)際數(shù)據(jù)的累積分布函數(shù)。在累計(jì)分布函數(shù)圖上,4個(gè)大型Java開(kāi)源項(xiàng)目在圖像上可獲得看似較好的擬合結(jié)果。為了驗(yàn)證兩種擬合函數(shù)的擬合效果,使用K-S檢驗(yàn)分別對(duì)擬合函數(shù)進(jìn)行檢驗(yàn)。從K-S檢驗(yàn)結(jié)果可以看出,這4個(gè)Java開(kāi)源項(xiàng)目的類(lèi)方法個(gè)數(shù)統(tǒng)計(jì)結(jié)果均在尾部均發(fā)現(xiàn)了冪律分布。雖然在圖形上看起來(lái)對(duì)數(shù)正態(tài)分布的擬合曲線(xiàn)擬合的情況較好,但通過(guò)K-S檢驗(yàn)我們可以發(fā)現(xiàn),只有在Hadoop項(xiàng)目中發(fā)現(xiàn)了較明顯的對(duì)數(shù)正態(tài)分布情況,其他3個(gè)項(xiàng)目均未通過(guò)檢驗(yàn)。

圖4 NOM度量值互補(bǔ)累計(jì)分布函數(shù)圖

對(duì)于一個(gè)面向?qū)ο蟪绦騺?lái)說(shuō),類(lèi)方法數(shù)量越多代表類(lèi)的職責(zé)越重,會(huì)導(dǎo)致該類(lèi)與其他類(lèi)間過(guò)高的耦合度,從而影響代碼質(zhì)量??梢詮睦塾?jì)分布圖中發(fā)現(xiàn),4個(gè)項(xiàng)目中80%的類(lèi)中均少于12個(gè)方法。Eclipse、Hadoop和NetBeans項(xiàng)目中99%的類(lèi)方法個(gè)數(shù)小于60,

而JRE項(xiàng)目中這個(gè)值達(dá)到了74。這可能和軟件類(lèi)型有關(guān)系,JRE比起一般應(yīng)用程序來(lái)說(shuō),它作為Java語(yǔ)言的API需要向外部提供了更多的入口,也就是公共方法。通過(guò)觀察圖4可以發(fā)現(xiàn),JRE項(xiàng)目中存在較多方法數(shù)量過(guò)高的類(lèi)。查看具體類(lèi)發(fā)現(xiàn),JRE中方法數(shù)排名前5的類(lèi)中,有3個(gè)是用于封裝異常處理方法的類(lèi),且都來(lái)自包c(diǎn)om.sun.corba.se.impl.logging。值最高的類(lèi)ORBUtilSystemException中方法數(shù)達(dá)到1 259個(gè)。而在NetBeans項(xiàng)目中,值最高的類(lèi)含有406個(gè)方法,類(lèi)全限定名為org.netbeans.lib.ddl.adaptors.DefaultAdaptor,類(lèi)的功能是數(shù)據(jù)庫(kù)適配器。過(guò)多的方法會(huì)導(dǎo)致代碼味道的產(chǎn)生,也會(huì)影響軟件的復(fù)用和可維護(hù)性。

4 結(jié) 語(yǔ)

以上研究中發(fā)現(xiàn),在4個(gè)大型Java開(kāi)源項(xiàng)目的面向?qū)ο筌浖攘恐校^大多數(shù)類(lèi)度量因子的值處在一個(gè)較低的水平,而只有極少數(shù)類(lèi)的度量因子的值相當(dāng)大,屬于典型的長(zhǎng)尾分布特征。經(jīng)過(guò)相關(guān)擬合與假設(shè)檢驗(yàn),發(fā)現(xiàn)在4個(gè)項(xiàng)目中,冪律分布是產(chǎn)生長(zhǎng)尾現(xiàn)象的原因之一。軟件開(kāi)發(fā)作為一種智慧密集型工作,存在大量人為因素從而影響軟件開(kāi)發(fā)過(guò)程,所以不能用一個(gè)統(tǒng)一的模型來(lái)描述不同軟件的度量因子統(tǒng)計(jì)結(jié)果。甚至有些項(xiàng)目無(wú)法找到一個(gè)合理的模型來(lái)描述。但是在同一個(gè)軟件開(kāi)發(fā)過(guò)程中,開(kāi)發(fā)人員總是按照相同的設(shè)計(jì)框架進(jìn)行開(kāi)發(fā),這在一定程度上確定了各種代碼度量因子的增長(zhǎng)模型。在對(duì)度量統(tǒng)計(jì)結(jié)果擬合冪律分布函數(shù)后,如發(fā)現(xiàn)有偏離擬合函數(shù)較大的度量結(jié)果出現(xiàn),基本可以判斷是存在不符合本項(xiàng)目設(shè)計(jì)框架的代碼出現(xiàn)。例如在NetBeans項(xiàng)目中的Css3Parser類(lèi),LOC和NOA的度量值都極大偏離擬合的冪律函數(shù),這說(shuō)明Css3Parser類(lèi)的設(shè)計(jì)不符合面向?qū)ο筌浖O(shè)計(jì)要求。

長(zhǎng)尾現(xiàn)象不管是由冪律分布產(chǎn)生,還是由對(duì)數(shù)正態(tài)分布產(chǎn)生,或是其他的分布函數(shù)產(chǎn)生。長(zhǎng)尾現(xiàn)象對(duì)軟件工程來(lái)說(shuō),都是一個(gè)值得進(jìn)行研究的課題。因?yàn)殚L(zhǎng)尾現(xiàn)象的存在說(shuō)明少數(shù)的類(lèi)在軟件開(kāi)發(fā)中起到重要作用,而這些類(lèi)的代碼質(zhì)量直接決定了軟件的可靠性和可維護(hù)性。在開(kāi)發(fā)中提高這些類(lèi)質(zhì)量,有利于軟件整體質(zhì)量的提高。

[1] Boehm B.Industrial Software Metrics Top 10 List[J].IEEE Software,1987,4:84-85.

[2] Clauset A,Shalizi C R,Newman M E J.Power-Law Distributions in Empirical Data[J].Siam Review,2014,51(4):661-703.

[3] 馬皖王瑩,陳林,陳芝菲,等.基于復(fù)雜網(wǎng)絡(luò)分析的軟件高危缺陷評(píng)估方法[J].計(jì)算機(jī)科學(xué)與探索,2014,8(8):956-965.

[4] 韓明暢,李德毅,劉常昱,等.軟件中的網(wǎng)絡(luò)化特征及其對(duì)軟件質(zhì)量的貢獻(xiàn)[J].計(jì)算機(jī)工程與應(yīng)用,2006,42(20):29-31.

[5] Valverde S,Sole R V.Hierarchical Small Worlds in Software Architecture[J].Dynamics of Continuous Discrete & Impulsive Systems,2007,14.

[6] Valverde S,Cancho R F I,Sole R V.Scale-free Networks from Optimal Design[J].Epl,2002,60(4):512-517.

[7] Louridas P,Spinellis D,Vlachos V.Power Laws in Software[J].ACM Transactions on Software Engineering & Methodology,2008,18(1):617-632.

[8] Tempero E,Anslow C,Dietrich J,et al.The Qualitas Corpus:A Curated Collection of Java Code for Empirical Studies[C]//Asia Pacific Software Engineering Conference.IEEE Computer Society,2010:336-345.

[9] Liu Hongtao.Perfume:A code quality assessment platform based on machine learning[EB/OL].https://github.com/LiuHongtao/Perfume.

[10] Gillespie C S.Fitting Heavy Tailed Distributions:The poweRlaw Package[J].Journal of Statistical Software,2015,64(2).

[11] Concas G,Marchesi M,Pinna S,et al.Power-Laws in a Large Object-Oriented Software System[J].IEEE Transactions on Software Engineering,2007,33(10):687-708.

猜你喜歡
面向?qū)ο?/a>度量代碼
GEE平臺(tái)下利用物候特征進(jìn)行面向?qū)ο蟮乃痉N植分布提取
鮑文慧《度量空間之一》
五邑大學(xué)學(xué)報(bào)(自然科學(xué)版)(2019年3期)2019-09-06
面向?qū)ο蠓椒ㄔ谒罾銹LC編程中應(yīng)用分析
突出知識(shí)本質(zhì) 關(guān)注知識(shí)結(jié)構(gòu)提升思維能力
面向?qū)ο蟮慕M合軟件工程研究
度 量
創(chuàng)世代碼
創(chuàng)世代碼
創(chuàng)世代碼