陳 曉,孫英昊,趙 攀,劉 倩
(中匯信息技術(shù)(上海)有限公司,上海 201203)
基于構(gòu)件的軟件開發(fā)是解決軟件危機的一種重要手段。通過構(gòu)件的不斷復(fù)用和開發(fā),軟件生產(chǎn)過程由傳統(tǒng)的代碼組合轉(zhuǎn)變?yōu)闃?gòu)件的模塊化組合,將大大提高軟件開發(fā)的效率和質(zhì)量。構(gòu)件作為這種開發(fā)模式的核心內(nèi)容,其質(zhì)量直接影響構(gòu)件庫和軟件開發(fā)的質(zhì)量。因此,構(gòu)件度量是基于構(gòu)件的軟件開發(fā)實踐的重要工作。
目前,學(xué)者們已廣泛開展了構(gòu)件質(zhì)量度量方法的研究,并取得了諸多成果。文獻[1-2]主要研究構(gòu)件的復(fù)用性,文獻[3-6]主要研究構(gòu)件的可信性。這些研究主要側(cè)重構(gòu)件的外部質(zhì)量,缺少考慮構(gòu)件內(nèi)部質(zhì)量的度量,然而,構(gòu)件內(nèi)部質(zhì)量往往直接影響構(gòu)件的外部質(zhì)量。文獻[7-8]研究了構(gòu)件的內(nèi)部質(zhì)量,但主要研究構(gòu)件的內(nèi)聚性,缺少對內(nèi)部質(zhì)量的多維度量。文獻[9-10]通過靜態(tài)度量構(gòu)件的代碼,從多個維度度量構(gòu)件的內(nèi)部質(zhì)量,但是沒有綜合處理量化結(jié)果,這導(dǎo)致在軟件開發(fā)實踐過程中,仍需要專家根據(jù)各維度的度量結(jié)果,人工判斷構(gòu)件內(nèi)部質(zhì)量是否達到加入構(gòu)件庫的標準,構(gòu)件度量效率低。
為解決目前構(gòu)件度量效率低,并且缺少綜合評價構(gòu)件內(nèi)部質(zhì)量的方法等問題,本文提出一種基于模糊推理的構(gòu)件內(nèi)部質(zhì)量度量方法。該方法首先對各個維度的度量結(jié)果進行模糊化處理,然后結(jié)合由多個專家意見形成的規(guī)則庫進行規(guī)則匹配和結(jié)論推理,最后通過逆模糊化輸出明確的綜合度量的數(shù)值結(jié)果,從而實現(xiàn)構(gòu)件內(nèi)部質(zhì)量綜合度量的自動化。該方法能夠匯總多個專家意見,允許使用模糊的不確定信息建立模型,如簡單、一般和復(fù)雜,使規(guī)則庫中的規(guī)則更接近專家的真實表達,提高規(guī)則的準確度。同時,該方法能夠模擬專家的推理過程,自動化輸出綜合考慮多個度量維度的度量結(jié)果,節(jié)約評審構(gòu)件內(nèi)部質(zhì)量的時間和勞動力,提高工作效率,有利于構(gòu)件的自動化管理。
目前,學(xué)者們主要針對構(gòu)件的可信性和可復(fù)用性等外部質(zhì)量展開研究。文獻[11]根據(jù)不同的領(lǐng)域需求選擇不同的構(gòu)件度量模型。文獻[12]先通過特征自動機從構(gòu)件中獲得構(gòu)件的特征點,然后使用加權(quán)平均的方法量化了構(gòu)件的外部質(zhì)量?;贗SO/IEC 25010[13]軟件質(zhì)量模型,文獻[14]使用模糊物元評價法對構(gòu)件的外部質(zhì)量進行綜合評估,文獻[4]針對特定領(lǐng)域的構(gòu)件,根據(jù)構(gòu)件特點和領(lǐng)域特點來度量構(gòu)件的可信性。文獻[1]基于構(gòu)件庫管理系統(tǒng),使用構(gòu)件的復(fù)用和檢索次數(shù)的比值來評價構(gòu)件的復(fù)用性。文獻[2]主要通過用戶手冊、測試報告、運行報告和評價報告等對構(gòu)件進行外部度量來評價構(gòu)件的復(fù)用性。文獻[3]提出了一種基于置信度模型對構(gòu)件的可信度進行評價。文獻[5]考慮不同用戶對構(gòu)件差異性的需求,先對構(gòu)件度量的各個維度進行主觀賦值和權(quán)重分配,然后通過執(zhí)行模糊變換操作對構(gòu)件的可信質(zhì)量進行評判。文獻[15]指出,構(gòu)件庫中構(gòu)件之間的依賴關(guān)系,可以被用來度量構(gòu)件的可信程度。構(gòu)件被使用的次數(shù)越多,越值得被信賴。文獻[6]基于這種構(gòu)件之間的依賴關(guān)系,對構(gòu)件進行可信性度量。上述研究工作主要針對構(gòu)件的外部質(zhì)量,如復(fù)用性和可信性,沒有涉及構(gòu)件內(nèi)部質(zhì)量的研究。然而,構(gòu)件的內(nèi)部質(zhì)量往往直接影響構(gòu)件的外部質(zhì)量,是決定構(gòu)件質(zhì)量的重要組成部分。
文獻[7]通過提取實現(xiàn)類的依賴圖,使用信息熵的計算方法對構(gòu)件的內(nèi)聚耦合性進行評價。文獻[8]基于程序切片的依賴圖方法對構(gòu)件內(nèi)聚性進行度量,根據(jù)程序的語義衡量構(gòu)件的內(nèi)聚性。上述研究工作只對構(gòu)件的內(nèi)聚性進行了研究,缺乏對構(gòu)件內(nèi)部質(zhì)量的綜合分析。文獻[9-10]使用代碼靜態(tài)度量方法來衡量構(gòu)件的內(nèi)部質(zhì)量,如面向過程的Halstead軟件科學(xué)的度量方法、McCabe圈計數(shù)方法等,面向?qū)ο蟮腃&K度量集和MOOD度量集等,但是這些代碼靜態(tài)度量方法僅對代碼的多個維度進行獨立的量化度量,沒有根據(jù)多個維度的度量結(jié)果綜合評定構(gòu)件的內(nèi)部質(zhì)量。
在構(gòu)件快速迭代演化過程中,往往需要避免片面地根據(jù)某個維度的度量結(jié)果而拒絕構(gòu)件進入后續(xù)的評審工作,從而對構(gòu)件的內(nèi)部質(zhì)量進行綜合評定,這將有利于公司循序漸進地提高構(gòu)件開發(fā)水平。同時,上述這些研究雖然能夠?qū)?gòu)件內(nèi)部質(zhì)量進行多維度的量化度量,但是技術(shù)開發(fā)人員對度量結(jié)果的理解卻往往具有不確定性,從而導(dǎo)致構(gòu)件內(nèi)部質(zhì)量的度量工作依然需要多位專家參與,這增加了評審構(gòu)件質(zhì)量的時間和勞動力,降低了工作效率。
構(gòu)件的缺陷是構(gòu)件內(nèi)部質(zhì)量的直接反映,內(nèi)部質(zhì)量高的構(gòu)件,缺陷相對較少,修復(fù)缺陷所需花費的成本也較低,反之亦然。在團隊能力差不多的情況下,可以使用缺陷修復(fù)成本綜合反映構(gòu)件的內(nèi)部質(zhì)量。
首先,結(jié)合圈復(fù)雜性度量和C&K度量集指標,將相關(guān)度量指標分為復(fù)雜性、耦合性和代碼風(fēng)格這3類,然后對每個類別進行細化,涉及的度量維度如表1所示。
表1 度量維度介紹
序號類別度量維度備注12復(fù)雜性方法平均圈復(fù)雜度類平均圈復(fù)雜度圈復(fù)雜度用來衡量一個模塊的判定結(jié)構(gòu)的復(fù)雜程度,數(shù)量上表現(xiàn)為獨立線性路徑數(shù)34耦合性平均對象間耦合度平均對象間耦合度是構(gòu)件內(nèi)部所有類的對象間耦合度平均數(shù)類平均響應(yīng)集類平均響應(yīng)集是構(gòu)件內(nèi)部所有類的響應(yīng)集的平均數(shù)56代碼風(fēng)格注釋率(%)注釋率等于注釋的行數(shù)與總代碼行數(shù)相比的比值重復(fù)行占總行數(shù)的百分比(%)重復(fù)代碼行數(shù)與總行數(shù)的百分比
其次,采用Pearson相關(guān)系數(shù)d對各度量維度與缺陷修復(fù)成本進行相關(guān)性計算,其計算公式如式(1):
(1)
其中,a表示各維度通過靜態(tài)代碼分析軟件獲得的評測值,b表示缺陷修復(fù)成本,b可以通過統(tǒng)計缺陷修復(fù)的時間來計算。為避免不同規(guī)模的構(gòu)件對相關(guān)系數(shù)的影響,本文采用每千行代碼的構(gòu)件缺陷修復(fù)成本來計算。
然后,采用t分布對d對應(yīng)的構(gòu)件樣本總體的相關(guān)系數(shù)ρ進行假設(shè)檢驗。本文假設(shè),H0∶ρ=0,H1∶ρ≠0,檢驗統(tǒng)計量t的計算公式如式(2):
(2)
本文選取19個構(gòu)件樣本進行統(tǒng)計,相關(guān)性計算結(jié)果以及t分布檢驗結(jié)果如表2所示。
表2 度量維度與缺陷修復(fù)成本的相關(guān)性統(tǒng)計結(jié)果
序號dt10.4562.1120.7214.2930.3781.6840.6423.455-0.1450.6060.4892.31
最后,根據(jù)上述統(tǒng)計結(jié)果,選擇最重要的幾個維度進行綜合度量。根據(jù)查表獲得的t0.025(17)=2.1098可知,表1中的類平均圈復(fù)雜度、類平均響應(yīng)集和重復(fù)行占總行數(shù)的百分比這3個指標與缺陷修復(fù)成本顯著線性相關(guān)。因此,選擇這3個參數(shù)作為構(gòu)件內(nèi)部質(zhì)量的考察維度,即作為模糊推理系統(tǒng)的輸入?yún)?shù)。
雖然類平均圈復(fù)雜度、類平均響應(yīng)集和重復(fù)行占總行數(shù)的百分比這3個指標對軟構(gòu)件質(zhì)量有重要影響,但它們間的關(guān)系復(fù)雜,難以直接建立內(nèi)部質(zhì)量的度量模型。因此,本文采用模糊推理的方法,建立質(zhì)量屬性與內(nèi)部質(zhì)量的關(guān)系模型。
模糊推理是以模糊集合論為基礎(chǔ)的描述工具,擴展了以一般集合論為基礎(chǔ)的描述工具的數(shù)理邏輯。它可根據(jù)輸入的初始不確定性信息,利用模糊知識中的不確定性知識,按一定的模糊推理策略,較理想地處理待解決的問題,給出恰當(dāng)?shù)慕Y(jié)論[16]。
模糊推理系統(tǒng)包含模糊器、規(guī)則庫、模糊推理機和逆模糊器4個模塊,其結(jié)構(gòu)如圖1所示,下面逐一介紹每個模塊。
圖1 模糊推理系統(tǒng)架構(gòu)
模糊器將精確輸入的數(shù)值映射為一個模糊集合,這個過程也稱為模糊化處理。輸入變量根據(jù)其相應(yīng)的隸屬度函數(shù),歸到恰當(dāng)?shù)哪:稀?/p>
本文分別針對上述3個度量維度,以及內(nèi)部質(zhì)量進行模糊化處理??紤]到方法步驟的相似性以及篇幅限制,本節(jié)以類平均圈復(fù)雜度為例詳細說明建立輸入變量、模糊集及隸屬度函數(shù)的過程。
本文假設(shè)變量x表示類平均圈復(fù)雜度,X={S,N,C,VC}表示類平均圈復(fù)雜度的模糊集合。其中,子集S表示方法的平均復(fù)雜度是簡單的集合,N表示一般復(fù)雜的集合,C表示較復(fù)雜的集合,VC表示非常復(fù)雜的集合。根據(jù)歷史構(gòu)件統(tǒng)計數(shù)據(jù)和專家經(jīng)驗,x的取值范圍如表3所示。
表3 類的圈平均復(fù)雜度變量
語言值符號值范圍簡單S[0,6]一般N[4,12]復(fù)雜C[10,20]非常復(fù)雜VC[18,+∞]
然后,通過專家經(jīng)驗定義類的圈平均復(fù)雜度隸屬度函數(shù)fX(x),如圖2所示。
圖2 類的圈平均復(fù)雜度隸屬度函數(shù)
使用相同的方法,分別建立類平均響應(yīng)集的變量y、模糊集合Y和隸屬度函數(shù)fY(y),如表4和圖3所示,以及重復(fù)行占總行數(shù)的百分比的變量z、模糊集合Z和隸屬度函數(shù)fZ(z),如表5和圖4所示。
表4 類平均響應(yīng)集變量
語言值符號值范圍簡單S[0,11]一般N[8,18]復(fù)雜C[13,29]非常復(fù)雜VC[23,+∞]
圖3 類平均響應(yīng)集隸屬度函數(shù)
表5 重復(fù)行占總行數(shù)的百分比變量
語言值符號值范圍很低VL[0,3]低L[2,9]中M[5,15]高H[12,30]非常高VH[20,100]
圖4 重復(fù)行占總行數(shù)的百分比的隸屬度函數(shù)
最后,定義輸出變量為構(gòu)件內(nèi)部質(zhì)量w、模糊集合W及其隸屬度函數(shù)fW(w)。
表6 內(nèi)部質(zhì)量程度變量
語言值符號值范圍(標準化)好A[0,0.5]一般B[0.2,0.8]差C[0.7,1]
圖5 構(gòu)件內(nèi)部質(zhì)量隸屬度函數(shù)
規(guī)則庫是模糊推理系統(tǒng)的核心部分,它是由一系列產(chǎn)生式規(guī)則構(gòu)成。產(chǎn)生式規(guī)則的一般形式為:If x is S then w is B。其中,If對應(yīng)的部分稱為規(guī)則的前項,then對應(yīng)的部分稱為規(guī)則的后項,x表示輸入的考察維度,w表示輸出的指標,S和B分別表示相應(yīng)的模糊集合。對于多輸入變量單輸出變量的情況,對于由邏輯與組成的規(guī)則前項,使用AND相連,如If x is S and y is N then w is B,對于由邏輯或組成的規(guī)則前項,使用OR相連,如If x is S or y is N then w is B,其中x和y表示輸入維度,S和N表示相應(yīng)的模糊集合,w表示內(nèi)部質(zhì)量,B表示相應(yīng)的模糊集合[17]。
通過專家經(jīng)驗,建立規(guī)則表,如表7所示。其中,規(guī)則前項均使用邏輯與(即AND)進行連接。
表7 模糊規(guī)則
規(guī)則規(guī)則前項規(guī)則后項類平均復(fù)雜度類平均響應(yīng)集重復(fù)行占總行數(shù)的百分比內(nèi)部質(zhì)量xyzw1SSVLA2SSLA3SSMB4SSHB5VHC6SNVLA7SNLA8SNMB9SNHB10SCVLB11SCLB12SCMC13SCHC14VCC15NSVLA16NSLA17NSMA18NSHB19NNVLA20NNLB21NNMB22NNHC23NCVLB24NCLB25NCMC26NCHC27CSVLB28CSLB29CSMC30CSHC31CNVLB32CNLB33CNMB34CNHC35CCVLB36CCLC37CCMC38CCHC39VCC
模糊推理機是根據(jù)已有的知識規(guī)則分析實際情況,再通過邏輯推理,給出結(jié)論的過程。本文采用Mamdani模糊推理機模型,在接收模糊化處理的輸入結(jié)果后,通過規(guī)則評估和聚合規(guī)則這2個步驟進行模糊推理。
在規(guī)則評估中,本文的規(guī)則前項均使用邏輯AND進行關(guān)聯(lián),本文使用min方法進行相應(yīng)的推理計算,其計算表達式如式(3):
fW(w)=min(fX(x),fY(y),fZ(z))
(3)
該公式表示規(guī)則后項的隸屬度函數(shù)可以通過對規(guī)則前項的模糊操作而得到。
聚合規(guī)則是整合規(guī)則評估中所有激活的規(guī)則所獲得的規(guī)則后項的隸屬函數(shù),將它們合并到一個模糊集合中。本文采用最大隸屬度原則,使用max方法進行聚合,其計算公式如式(4):
fW(w)=max(fW1(w),fW2(w),…,fWn(w))
(4)
其中,fWn(w)表示第n條規(guī)則計算的規(guī)則后項隸屬度函數(shù)。
為獲得一個明確的數(shù)值作為綜合考慮后的度量結(jié)果,需要對聚合規(guī)則獲得的模糊集合進行逆模糊化處理。本文采用質(zhì)心法進行逆模糊化操作,即尋找一個點,使這個點所在的垂直線能夠?qū)⒕酆霞指畛?個相等的部分。計算公式如式(5):
(5)
其中,w*表示內(nèi)部質(zhì)量的綜合度量結(jié)果。
首先,對一個構(gòu)件進行代碼靜態(tài)分析,得到類平均圈復(fù)雜度為11.5,類平均響應(yīng)集為15,重復(fù)行占總行數(shù)的百分比為10.5。
然后,對各維度的度量結(jié)果進行模糊推理,關(guān)鍵步驟的結(jié)果如下:
1)由模糊器進行輸入值的模糊化處理,得到如下結(jié)果,其中括號中的數(shù)值表示隸屬度函數(shù):
①類平均圈復(fù)雜度。
x is N (0.16)
x is C (0.30)
②類平均響應(yīng)集。
y is N (0.60)
y is C (0.25)
③重復(fù)行占總行數(shù)的百分比。
z is M (0.90)
z is H (0.05)
2)通過規(guī)則引擎,激活規(guī)則21、22、24、25、33、34、37、38條規(guī)則,經(jīng)過規(guī)則評估分別得到如下結(jié)果:
Rule 21:w is B (0.16)
Rule 22:w is C (0.05)
Rule 24:w is C (0.16)
Rule 25:w is C (0.05)
Rule 33:w is B (0.30)
Rule 34:w is C (0.05)
Rule 37:w is C (0.25)
Rule 38:w is C (0.05)
3)聚合如上推理結(jié)果,再對模糊集進行逆模糊化處理,得到如圖6所示的結(jié)果,并輸出逆模糊化結(jié)果w*=0.63作為內(nèi)部質(zhì)量的度量結(jié)果。
圖6 逆模糊化結(jié)果
在實際工作中,軟件開發(fā)過程隨著應(yīng)用技術(shù)的發(fā)展逐步演化,演化過程如圖7所示。從最初的只包含需求分析、構(gòu)件開發(fā)、應(yīng)用集成和應(yīng)用測試的無構(gòu)件質(zhì)量評估的開發(fā)過程,逐步過度到需要人工專家評估構(gòu)件質(zhì)量的開發(fā)過程,和基于模糊推理評估構(gòu)件質(zhì)量的開發(fā)過程。
圖7 軟件開發(fā)過程演化
在需要構(gòu)件質(zhì)量評估的軟件開發(fā)過程中,構(gòu)件需要達到一定標準才能進入應(yīng)用集成階段,否則需要進行構(gòu)件重構(gòu),直至滿足標準要求?;谀:评淼臉?gòu)件度量系統(tǒng)能夠直接自動化地評估構(gòu)件質(zhì)量,從而可在代碼的集成過程中完成構(gòu)件質(zhì)量評估,方便質(zhì)量管理人員每天知曉并把控代碼質(zhì)量,及時指導(dǎo)開發(fā)人員提高代碼質(zhì)量,進行構(gòu)件重構(gòu)。
本文與人工專家評估構(gòu)件質(zhì)量的開發(fā)過程進行實驗對比,對比的指標是平均開發(fā)成本,其計算方法是構(gòu)件完成開發(fā)過程的總時長除以千行代碼數(shù)的平均數(shù)值。針對各開發(fā)過程中,本文分別隨機選取19個構(gòu)件樣本數(shù)據(jù),進行平均開發(fā)成本的統(tǒng)計計算。本文將人工專家評估質(zhì)量的開發(fā)過程的開發(fā)成本作為基數(shù)1,實驗結(jié)果如表8所示。
從表8可以看出,基于模糊推理的構(gòu)件度量開發(fā)模式能夠有效降低開發(fā)成本。由于本文提出的方法能夠自動化地執(zhí)行,節(jié)省了人工審核的時間,因此相較于人工專家評估構(gòu)件質(zhì)量的開發(fā)模式,本文的方法能夠降低開發(fā)成本。
表8 構(gòu)件度量結(jié)果對比
平均開發(fā)成本/(小時·每千行代碼-1)人工專家評估構(gòu)件質(zhì)量1基于模糊推理評估構(gòu)件質(zhì)量0.83
本文提出了一種基于模糊推理的構(gòu)件度量方法,能夠自動化地綜合評價構(gòu)件的內(nèi)部質(zhì)量,為構(gòu)件入庫提供明確的參考依據(jù),減少了人工參與的精力和時間,降低了開發(fā)成本,大大提高了構(gòu)件度量效率。不過,目前還有一些問題需要進一步研究:1)增加內(nèi)部度量構(gòu)件質(zhì)量的考察維度和模糊規(guī)則,以提高構(gòu)件度量的全面性;2)在推理機中引入人工神經(jīng)網(wǎng)絡(luò),實現(xiàn)自動化地產(chǎn)生新的模糊規(guī)則,以提高推理機的適應(yīng)性。
參考文獻:
[1] 薛云皎,王淵峰,余枝強,等. 基于構(gòu)件庫管理系統(tǒng)的構(gòu)件復(fù)用度度量模型[J]. 計算機工程與應(yīng)用, 2002,38(13):81-84.
[2] 李曉麗,劉超,金茂忠,等. 軟件構(gòu)件的可復(fù)用性質(zhì)量度量[J]. 計算機應(yīng)用研究, 2007,24(6):280-283.
[3] 趙森嚴,夏琦. 一種基于置信度的軟件構(gòu)件可信性度量模型[J]. 井岡山大學(xué)學(xué)報(自然科學(xué)版), 2013(4):64-66.
[4] 唐瑩,張育平,陳海燕. 一種基于特定領(lǐng)域的可信構(gòu)件度量模型[J]. 計算機與現(xiàn)代化, 2014(10):12-15.
[5] 汪永好,曾廣平. 基于模糊集合的構(gòu)件資源信任評估模型研究[J]. 計算機應(yīng)用研究, 2014,31(5):1467-1469.
[6] 王燕玲,曾國蓀. 基于構(gòu)件使用依賴關(guān)系的構(gòu)件復(fù)用可信度計算方法[J]. 計算機應(yīng)用, 2015,35(12):3524-3529.
[7] 齊晶晶,郭跟成. 基于信息熵的軟件構(gòu)件度量方法[J]. 計算機應(yīng)用, 2006,26(5):1183-1185.
[8] 上官盼利,雷航. 構(gòu)件內(nèi)聚性度量方法研究[J]. 微計算機信息, 2009(18):190-192.
[9] 梅宏,謝濤. 青鳥構(gòu)件庫的構(gòu)件度量[J]. 軟件學(xué)報, 2000,11(5):634-641.
[10] 毛國蓓,李雪靜,葛孝堃,等. 基于軟件構(gòu)件質(zhì)量模型的度量及應(yīng)用[J]. 計算機應(yīng)用與軟件, 2005,22(5):1-4.
[11] Andreou A S, Tziakouris M. A quality framework for developing and evaluating original software components[J]. Information & Software Technology, 2007,49(2):122-141.
[12] 祁華成,張廣泉. 基于特征點的構(gòu)件度量方法[J]. 蘇州大學(xué)學(xué)報(自然科學(xué)版), 2008,24(2):47-51.
[13] ISO/IEC 25010, Systems and Software Engineering Systems and Software Quality Requirements and Evaluation(SQuaRE) —System and Software Quality Models[S].
[14] 汪海濤,劉帥,姜瑛,等. 一種基于模糊物元評價法的構(gòu)件質(zhì)量度量模型研究[J]. 云南大學(xué)學(xué)報(自然科學(xué)版), 2015,37(1):31-42.
[15] Ishihara T, Hotta K, Higo Y, et al. Reusing reused code[C]// Proceedings of the 20th Working Conference on Reverse Engineering. 2013:457-461.
[16] 吳釗,尹朝慶. 模糊專家系統(tǒng)推理機設(shè)計[J]. 武漢工程大學(xué)學(xué)報, 2003,25(1):80-82.
[17] Michael N. 人工智能·智能系統(tǒng)指南[M]. 陳薇譯.3ed. 北京:機械工業(yè)出版社, 2012:56-82.