王鳳琴
(湖北師范學(xué)院 物理與電子科學(xué)學(xué)院, 湖北 黃石 435002)
基于調(diào)用環(huán)境樹(shù)的軟件度量研究
王鳳琴
(湖北師范學(xué)院 物理與電子科學(xué)學(xué)院, 湖北 黃石 435002)
通過(guò)對(duì)調(diào)用環(huán)境樹(shù)的擴(kuò)展,并針對(duì)方法的類內(nèi)和類間度量,在提出新的度量公式的基礎(chǔ)上,證明了相關(guān)的度量可行性需滿足的性質(zhì)。
調(diào)用環(huán)境樹(shù);方法度量;軟件度量
軟件度量是一個(gè)研究非?;钴S的領(lǐng)域。Stevens提出了面向過(guò)程開(kāi)發(fā)領(lǐng)域中的聚合,指出聚合為一個(gè)模塊的元素屬于另外一個(gè)模塊的度量值。Eder[1]提供了一個(gè)以高聚合為目標(biāo)的框架,并提出了可理解的面向?qū)ο笙到y(tǒng)的聚合標(biāo)準(zhǔn)。他們采用已有的基于過(guò)程的和基于對(duì)象的度量框架,區(qū)分了面向?qū)ο蟮娜N類型聚合:方法,類和繼承聚合。Chidamber和Kemerer[2,3]定義相似為共同的屬性集合,并以此來(lái)定義類的聚合為它的方法的相似度。方法集合M的相似度是所有屬性中的共同被使用的屬性的數(shù)量。
Atanas Rountev[4]認(rèn)為調(diào)用環(huán)境樹(shù)是方法體中方法互相調(diào)用的上下文。本文在此基礎(chǔ)上進(jìn)行了擴(kuò)展:1)增加“方法的所屬類”關(guān)系進(jìn)而對(duì)類進(jìn)行相關(guān)度量;2)擴(kuò)展注釋信息以加強(qiáng)程序理解;3)增加方法調(diào)用線性鏈以進(jìn)行更精確的度量。擴(kuò)展調(diào)用環(huán)境樹(shù)考慮系統(tǒng)中類的方法之間的消息傳遞關(guān)系,是一種可以加強(qiáng)程序理解的可視化圖形。它既顯現(xiàn)出同一個(gè)類中方法之間的調(diào)用關(guān)系,也顯現(xiàn)出不同類的方法之間的調(diào)用。擴(kuò)展調(diào)用環(huán)境樹(shù)的形式定義:
定義1 擴(kuò)展調(diào)用環(huán)境樹(shù)是一個(gè)帶根星型總線圖G=(root,V,E,Order).其中:root是系統(tǒng)的入口方法。V表示結(jié)點(diǎn)集合。V=(header,comment),結(jié)點(diǎn)包括頭信息header和注釋comment.頭信息中定義了消息傳遞格式style.E表示邊的集合,可以看作調(diào)用方和被調(diào)用方的偏序關(guān)系,E=
定義2 header=style1∨style2∨style3∨style4。 “∨ ”表示析取關(guān)系。style1=方法名M(參數(shù)列表) in 類對(duì)象名C,表示類C中的結(jié)點(diǎn)所表示的方法/模塊M.style2=方法名M(參數(shù)列表) in style1.Style3=方法名M(參數(shù)列表) in 類對(duì)象名C:對(duì)象名V;表示賦值語(yǔ)句。sytle4=style3 of[返回類型],返回類型是style3中的對(duì)象名V的返回類型。
定義3 總線結(jié)構(gòu),有兩種情況采用總線結(jié)構(gòu),第一種情況是共享數(shù)據(jù)依賴,兩個(gè)方法中引用相同的參數(shù)或者全局變量。第二種情況是方法調(diào)用依賴。記為:DirectlylineStructure(V)表示直接相連方法鏈,結(jié)點(diǎn)在整個(gè)系統(tǒng)中引出的線性結(jié)構(gòu)記為lineStructure(V).顯然DirectlylineStructure(V) ?lineStructure(V).
定義4 星型結(jié)構(gòu):星型和總線是圖的拓?fù)浣Y(jié)構(gòu),是方法的無(wú)相關(guān)調(diào)用關(guān)系。記為:starStructure(V).
定義5 類內(nèi)鏈出度數(shù):?vi∈V,vi∈linStructure.V記number(ei|vi→vi+1)(inClass)表示在結(jié)點(diǎn)vi所引出的鏈中直接關(guān)聯(lián)并在同一個(gè)類中的結(jié)點(diǎn)連接的邊的個(gè)數(shù)。
定義6 類內(nèi)出度數(shù):?vi∈V,記number( ei|vi→vi+1)(DirectlyinClass)表示結(jié)點(diǎn)vi所引出的邊中兩個(gè)在同一個(gè)類中的結(jié)點(diǎn)直接連接的邊的個(gè)數(shù)。
定義7 類外出度數(shù):?vi∈V,記number(ei|vi→vi+1)(DirectlyoutClass)表示結(jié)點(diǎn)vi所引出的邊中兩個(gè)不在同一個(gè)類中的結(jié)點(diǎn)直接連接的邊的個(gè)數(shù)。
定義8 結(jié)點(diǎn)鏈層數(shù):
|lineStructure|(layer)=number(ei|vi→vi+1)(inClass)+number(ei|vi→vi+1)(outClass)
定義9 相關(guān)節(jié)點(diǎn)個(gè)數(shù):鏈上所有節(jié)點(diǎn)之和|M|,在圖中顯示為從特定節(jié)點(diǎn)所能到達(dá)的所有節(jié)點(diǎn)之和。為|M|=number(ei:callout):(vi)+|lineStructure|(layer)
定義10 度量公式:
類內(nèi)直接連接方法的相對(duì)數(shù)(類內(nèi)緊密類內(nèi)聚度):
類內(nèi)直接或者間接連接方法的相對(duì)數(shù)(類內(nèi)松散類內(nèi)聚度):
類間直接連接方法的相對(duì)數(shù)(類間緊密類內(nèi)聚度):
類間直接或者間接連接方法的相對(duì)數(shù)(類間松散類內(nèi)聚度):
本節(jié)中給出在文獻(xiàn)[5]中所描述的聚合度量應(yīng)該滿足的性質(zhì)(非負(fù)和正規(guī)性,空值和最大值,單調(diào)性,無(wú)關(guān)結(jié)點(diǎn)聯(lián)合)的證明。
性質(zhì)1 非負(fù)和正規(guī)性:度量值都在[0.0..1.0]區(qū)間范圍之內(nèi)。
證明 從度量公式中可以看出,公式的分子小于分母,因此,此結(jié)論成立。
性質(zhì)2 空值和最大值:如果關(guān)聯(lián)為空,聚合值為0,最大關(guān)聯(lián)時(shí)聚合值為最大。
證明 沒(méi)有關(guān)聯(lián),度量值為0(根據(jù)聚合公式)。當(dāng)所有的關(guān)聯(lián)都表示要度量的聚合時(shí),聚合值為最大,值為1.
下面的x表示對(duì)應(yīng)公式分子,y表示對(duì)應(yīng)公式的分母,z表示引出的線性個(gè)數(shù)。
性質(zhì)3 單調(diào)性:從一個(gè)類中,移除關(guān)聯(lián)應(yīng)該比沒(méi)有移去之前更少類內(nèi)聚合。
性質(zhì)4 單調(diào)性:增加關(guān)聯(lián)后比沒(méi)有增加關(guān)聯(lián)之前更多的聚合。
性質(zhì)5 無(wú)關(guān)結(jié)點(diǎn)聯(lián)合:合并無(wú)關(guān)結(jié)點(diǎn)后,得到的聚合度量值不會(huì)增加。
證明 采用數(shù)學(xué)歸納法,只需證明合并兩個(gè)結(jié)點(diǎn)的情況。再使用窮舉法,分為下列幾種情況:第一是當(dāng)合并的結(jié)點(diǎn)都為葉子結(jié)點(diǎn)時(shí),由于合并前后的度量值都為0,也就是說(shuō)合并后的聚合度量值沒(méi)有增加;第二種情況時(shí)合并的結(jié)點(diǎn)都為孤立結(jié)點(diǎn),合并前后的度量值也為0;第三種情況是合并的結(jié)點(diǎn)之一為葉子結(jié)點(diǎn)或者為孤立結(jié)點(diǎn),由于葉子結(jié)點(diǎn)和孤立結(jié)點(diǎn)沒(méi)有分支,度量的結(jié)果為非葉子結(jié)點(diǎn)的度量值;第四種情況是合并的結(jié)點(diǎn)都是非葉子結(jié)點(diǎn),此時(shí)也就證明如下不等式:
注意:上面的不等式同時(shí)取等號(hào)的情況是:y1≥1∧y2≥1 ∧(z1=0∨z2=0)這是由于分母不為0,因此就不能取等號(hào)。取等號(hào)的情況是上面討論的三種情況。
性質(zhì)6 兩個(gè)類或者方法除非完全相同,采用相同的度量產(chǎn)生的度量值可能相同。
證明 有兩種情況:第一種情況是:由于本文的度量是基于方法間的消息傳遞而產(chǎn)生的調(diào)用環(huán)境圖,如果由兩個(gè)結(jié)點(diǎn)產(chǎn)生的圖形是同態(tài)的,也就是說(shuō),這兩個(gè)結(jié)點(diǎn)的消息傳遞關(guān)系在數(shù)值上會(huì)產(chǎn)生相同的值。從而會(huì)產(chǎn)生相同的值,但是這也可以說(shuō):它們之間有相同的聚合/耦合度量。第二種情況是:考察的兩個(gè)結(jié)點(diǎn)的度量公式的分子分母的比值相同,此時(shí)應(yīng)該借助經(jīng)驗(yàn)系統(tǒng)來(lái)判斷。
性質(zhì)7 對(duì)于關(guān)聯(lián)的重新排列,緊密類聚合不變。
證明 邊的計(jì)數(shù)是決定什么測(cè)量,邊的數(shù)值沒(méi)有變化,由度量公式可以看出,此結(jié)論是正確的。
性質(zhì)8LCC對(duì)應(yīng)的關(guān)系是相應(yīng)于TCC對(duì)應(yīng)的關(guān)系的傳遞閉包(LCCic和LCCoc相應(yīng),TCCoc和TCCic相應(yīng))。
證明 設(shè)(mi,mj) 和(mj,mk) 是類內(nèi)直接調(diào)用關(guān)系,由圖的出度和入度可以看出(mi,mk) 也存在于類內(nèi)間接調(diào)用關(guān)系的集合中。因此,由傳遞閉包的定義,LCCic是相應(yīng)于TCCic的傳遞閉包;同理可以證明:LCCoc是相應(yīng)于TCCoc的傳遞閉包。
圖1是一個(gè)簡(jiǎn)單的程序產(chǎn)生的調(diào)用環(huán)境圖和相應(yīng)的度量值,限于篇幅關(guān)系,本節(jié)略去了相應(yīng)的程序。從表1中可以看出:h1()的TCCic>TCCoc,且LCCic>LCCoc,h1()中很好的滿足面向?qū)ο蟮母呔酆咸匦裕驗(yàn)閔1()中調(diào)用的方法基本上和h1()同屬相同的類里。但是對(duì)于g2()方法,其TCCic
本文分析了當(dāng)前在逆向工程領(lǐng)域和聚合度量領(lǐng)域的研究現(xiàn)狀,對(duì)方法度量提出了新的度量公式,但是存在如下問(wèn)題未解決1)沒(méi)有進(jìn)行方法交互的分類;2)方法交互的潛在線性相關(guān)關(guān)系,這將作為本文的后期工作。
圖1 產(chǎn)生的調(diào)用環(huán)境圖
表1 方法的類間和類內(nèi)度量值
[1]Eder J,Kappel G,Schrefl M.Coupleing and Cohesion in Object-Oriented Systems[R]. Technical Report,University of Klagenfurt,1994.
[2]Chidamber S R,Kemerer C F. Towards a Metrics Suit for Object Oriented design[C]. In Proc.Conference on Object Oriented Programming:System,Languages and Applications(OOPSLA'91), SIGPLAN Notices,1991, 26(11),197~211.
[3]Chidamber S R,Kemerer C F.A Metric Suit for Object-Oriented design[J]. IEEE Transactions on Software Engineering,1994, 20(6):476~493.
[4]Atanas Rountev, Scott Kagan, Michael Gibas.Static and Dynamic Analysis of Call Chains in Java[C].ISSTA'04, July 11~14, 2004, Boston, Massachusetts, USA ACM.
[5]Lieberherr K J,Xiao C.Formal Foundation for Object-Oriented Data Modeling[J].in IEEE Transactions on knowledge and Data Engineering,1993,5:462~478.
Softwaremetricsbasedoncall-contexttree
WANG Feng-qin
(College of Physics and Electronic Science,Hubei Normal University,Huangshi 435002,China)
To extend the Call Context Tree, and to measure the coherency between the in classes and outer classes, based on the new measure formulas, this paper prove the properties which need to satisfy the feasibility of software measure.
call context tree; method measure; software measure
2013—12—10
湖北師范學(xué)院青年項(xiàng)目
王鳳琴(1979— ),女,甘肅渭源人,碩士,講師,研究方向?yàn)閿?shù)字圖像處理、軟件度量、分布式程序設(shè)計(jì)、大數(shù)據(jù)算法分析.
TP311.5
A
1009-2714(2014)02- 0001- 04
10.3969/j.issn.1009-2714.2014.02.001