欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種基于加權(quán)q2指數(shù)的軟件類重要性度量方法

文檔序號:9631422閱讀:485來源:國知局
一種基于加權(quán)q2指數(shù)的軟件類重要性度量方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及一種軟件類重要性度量方法,尤其是涉及一種基于加權(quán)q2指數(shù)的軟 件類重要性度量方法。
【背景技術(shù)】
[0002] 計算機軟件已經(jīng)滲透到我們工作和日常生活的各個方面,正在改變并且還將繼續(xù) 改變我們的生活。隨著軟件技術(shù)的發(fā)展和互聯(lián)網(wǎng)的普及,人們對軟件的依賴與日倶增,對軟 件質(zhì)量的要求越來越高。這導(dǎo)致了系統(tǒng)規(guī)模的激增和軟件應(yīng)用環(huán)境的日益復(fù)雜,使得軟件 開發(fā)的風(fēng)險增加、軟件質(zhì)量很難得到有效的控制。
[0003] 同時演化性是軟件的本質(zhì)屬性之一。軟件系統(tǒng)同生物一樣,在其生命周期內(nèi),也 必須不斷的演化,否則就有可能提前被淘汰。軟件演化的重要內(nèi)容之一是對軟件源代碼的 修改。然而要修改代碼,我們必須對軟件系統(tǒng)有一定的了解。在維護資源有限的情況下, 對于一個新加入的開發(fā)者,加快其對系統(tǒng)的了解具有比較重要的意義。可以通過為新開發(fā) 者推薦重要的軟件元素(如類、包等)從而加快其對系統(tǒng)的了解。盡管目前已經(jīng)有不少軟 件度量方面的研究工作,如L0C(LinesofCode)代碼行、McCabe圈復(fù)雜度(Cyclomatic Complexity)、Halstead度量法、CK度量組、MOOD度量集等,能夠為認(rèn)識軟件的復(fù)雜性提供 一定的幫助,但是仍有如下不足:
[0004] (1)現(xiàn)有的工作主要集中于度量代碼元素本身的復(fù)雜性,缺少對代碼元素重要性 的度量。
[0005] (2)現(xiàn)有工作主要是針對元素級的度量,度量的往往是軟件的局部特征,如度量一 個方法、一個類,缺少從整體角度進(jìn)行軟件度量的工作,更缺少從整體角度度量軟件元素重 要性的工作。
[0006] 類是目前主流的面向?qū)ο筌浖闹饕獦?gòu)成元素之一。因此,提供一種有效的類重 要性度量方法,從整體角度度量類的重要性,對于理解軟件,提高代碼維護效率具有重要意 義。

【發(fā)明內(nèi)容】

[0007] 本發(fā)明的目的在于針對現(xiàn)有技術(shù)的不足,提供了 一種基于加權(quán)q2指數(shù)的軟件類 重要性度量方法。
[0008] 本發(fā)明的上述技術(shù)問題主要是通過下述技術(shù)方案得以解決的:一種基于加權(quán)q2 指數(shù)的軟件類重要性度量方法,該方法包括以下步驟:
[0009] (1)將Java語言編寫的軟件源代碼在特征粒度抽象為特征依賴網(wǎng)FDN= (Nf,Df)。 其中,Nf為源代碼中特征節(jié)點的集合;Df={(fufj)}(AeNpfjeNf)是無向邊的集合,表 示特征間的依賴關(guān)系。特征包括了Java源代碼中的屬性和方法。特征間的依賴關(guān)系包括 了方法間的調(diào)用關(guān)系和方法對屬性的使用關(guān)系。
[0010] (2)基于步驟⑴完成的FDN構(gòu)建類依賴網(wǎng)⑶N= (N。,D。,P)。其中,N。為源代碼 中類節(jié)點的集合;Dc(CieD。,CjeDJ是一個無向邊的集合,表示類之間的依賴關(guān)系;P是一 個|N」X|凡| (|凡|返回N。中的節(jié)點數(shù))的矩陣,代表類之間依賴關(guān)系的強度矩陣。類包含 了Java中的類、內(nèi)部類、抽象類和接口。類之間的依賴關(guān)系是根據(jù)類包含的特征間的依賴 關(guān)系得到的,即類包含的特征間具有依賴關(guān)系,則相應(yīng)的類之間也存在依賴關(guān)系。
[0011] (3)基于步驟⑵完成的⑶N計算節(jié)點i的加權(quán)h指數(shù)h⑴。
[0012] (4)基于步驟⑵完成的⑶N計算節(jié)點i的加權(quán)m指數(shù)m⑴。
[0013] (5)基于步驟(3)和步驟(4)計算節(jié)點i的加權(quán)g2指數(shù)
[0014] (6)基于步驟(3)、(4)和(5)計算CDN中所有節(jié)點的加權(quán)g2指數(shù),作為節(jié)點相應(yīng) 類的重要性值。
[0015] 進(jìn)一步地,上述步驟(2)中⑶N的構(gòu)建具體包括以下子步驟:
[0016] (2. 1)提取Java語言編寫的源代碼中的所有類,構(gòu)建一個只有節(jié)點沒有邊的⑶N, 即⑶N= (Ν。,Φ,P)。Φ代表邊集為空,同時P是一個零矩陣。
[0017] (2.2)取步驟(l)Df中的一條邊eDf,根據(jù)源代碼得到fjPf,所定義的 類,若fi在類k中定義,f在類p中定義,若k辛p,則將(k,p)加入D。,同時步驟(2. 1)中 P相應(yīng)位置的P(k,p)自加1 ;若k與p相等,則不做任何處理。
[0018] (2. 3)重復(fù)步驟(2. 2),直到遍歷完FDN中的所有邊。
[0019] 進(jìn)一步地,上述步驟(3)中節(jié)點i的加權(quán)h指數(shù)h(i)的計算具體包括以下子步 驟:
[0020] (3. 1)求步驟⑵所得⑶N中所有節(jié)點的節(jié)點權(quán)。節(jié)點j的節(jié)點權(quán)4定義為⑶N 中與該節(jié)點相連的所有邊的權(quán)重和,即:
[0021]
[0022] 其中,v.j是節(jié)點j的鄰居節(jié)點集合。
[0023](3. 2)求步驟⑵所得⑶N中節(jié)點i的鄰居節(jié)點集合Vl。
[0024] (3. 3)將\中的節(jié)點按其節(jié)點權(quán)降序排列(若存在節(jié)點權(quán)相等的情況,則相等的 幾個值隨機選擇一種可能的排序),得到排序后的數(shù)組list,list[1]位置存放的是節(jié)點權(quán) 最大的那個節(jié)點。
[0025] (3. 4)從list[1]開始,依次遍歷list列表中的每個節(jié)點list[q],找到第一個滿 足節(jié)點權(quán)小于(n+1)的節(jié)點list[n+l],則節(jié)點i的加權(quán)h指數(shù)h(i)為η。
[0026] 進(jìn)一步地,上述步驟(4)中節(jié)點i的加權(quán)m指數(shù)m(i)的計算具體包括以下子步 驟:
[0027] (4. 1)求步驟⑵所得⑶N中所有節(jié)點的節(jié)點權(quán)。節(jié)點j的節(jié)點權(quán)4定義為⑶N 中與該節(jié)點相連的所有邊的權(quán)重和,即:
[0028]
[0029]其中,v.j是節(jié)點j的鄰居節(jié)點集合。
[0030](4. 2)求步驟⑵所得⑶N中節(jié)點i的鄰居節(jié)點集合Vl。
[0031] (4. 3)將\中的節(jié)點按其節(jié)點權(quán)降序排列(若存在節(jié)點權(quán)相等的情況,則相等的 幾個值隨機選擇一種可能的排序),得到排序后的數(shù)組list,list[l]位置存放的是節(jié)點 權(quán)最大的那個節(jié)點,list[|Vl|]位置存放的是節(jié)點權(quán)最小的那個節(jié)點(|Vl|為'中節(jié)點個 數(shù))。
[0032] (4. 4)根據(jù)=L〇,5(1+W)」計算節(jié)點i的加權(quán)m指數(shù)m(i)。
[0033] 與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點和積極效果:
[0034] (1)本發(fā)明中加權(quán)q2指數(shù)的構(gòu)建都考慮了軟件作為一個整體的影響,因為構(gòu)建q2 指數(shù)所使用的加權(quán)h指數(shù)和加權(quán)m指數(shù)都考慮了網(wǎng)絡(luò)中其它節(jié)點的節(jié)點權(quán),是一種整體視 角,在一定程度上克服了現(xiàn)有方法只關(guān)注局部特征忽略整體特征的問題。
[0035] (2)本發(fā)明提出用加權(quán)q2指數(shù)度量軟件中類的重要性,在一定程度上克服了現(xiàn)有 方法只關(guān)注軟件元素復(fù)雜性的度量,忽略軟件元素重要性度量的問題,可以為理解軟件、提 高代碼維護效率提供支持。
【附圖說明】
[0036] 圖1本發(fā)明的Java語言編寫的源代碼片段;
[0037] 圖2本發(fā)明的實施例構(gòu)建的FDN;
[0038] 圖3本發(fā)明的實施例構(gòu)建的無邊⑶N;
[0039] 圖4本發(fā)明的實施例構(gòu)建的無邊⑶N相應(yīng)的P;
[0040] 圖5本發(fā)明的實施例構(gòu)建的無邊⑶N加入一條邊后的⑶N;
[0041] 圖6本發(fā)明的實施例構(gòu)建的無邊⑶N加入一條邊后的⑶N相應(yīng)的P;
[0042] 圖7本發(fā)明的實施例構(gòu)建的最終⑶N;
[0043] 圖8本發(fā)明的實施例構(gòu)建的最終⑶N相應(yīng)的P。
【具體實施方式】
[0044] 下面通過實施例并結(jié)合附圖對本發(fā)明的技術(shù)方案作進(jìn)一步的說明:
[0045] 本發(fā)明提出的一種基于加權(quán)q2指數(shù)的軟件類重要性度量方法,具體步驟如下:
[0046](1)將Java語言編寫的軟件源代碼在特征粒度抽象為特征依賴網(wǎng)FDN=(Nf,Df)。 圖1所示的是一個Java源代碼片段。按照圖1所給的Java源代碼片段,可以構(gòu)建相應(yīng)的 FDN(如圖2所示),節(jié)點邊的文字為節(jié)點相應(yīng)特征的名字(名字由包名,類名,特征名以" 相連構(gòu)成)。其中,隊={卩1.(31&88)(.&〇,卩1.。1&88}(.¥,卩1.。1&88}(.。〇,卩1.。1&88}(.13〇,口2· classY. d(),p2. classZ. e(),p2. classZ. f()}為特征節(jié)點的集合辦={(卩1.。1&88)(· b(),pi.classX.a()), (pi.classX.a(),pi.classX.b()), (pi.classX.a(),pi.classX.v), (pi.classX.v,pi.classX.a()), (pi.classX.v,pi.classX.c()), (pi.classX.c(),pi. classX.v), (pi.classX.a(),p2.classY.d()), (p2.classY.d(),pi.classX.a()), (p2. classY.d(),p2.classZ.e()), (p2.classZ.e(),p2.classY.d()), (pi.classX.a(),p2. classZ.f()), (p2.classZ.f(),pi.classX.a()) ? (pi.classX.c(),p2.classZ.f()), (p2. classZ.f(),pi.classX.c())}是無向邊的集合,表示特征間的依賴關(guān)系。
[0047] (2)基于步驟⑴完成的FDN構(gòu)建類依賴網(wǎng)CDN=(N。,D。,P)。CDN的構(gòu)建具體包 括以下子步驟:
[0048] (2. 1)提取Java語言編寫的源代碼中的所有類,構(gòu)建一個只有節(jié)點沒有邊的⑶N, 即⑶N=(N。,Φ,P)。Φ代表邊集為空,同時P是一個零矩陣。按照圖l所給的Java源 代碼片段,可以構(gòu)建相應(yīng)的⑶Ν= (Ν。,Φ,Ρ)(如圖3所示),其中,{pl.claSSX,p2.ClassY,p2.classZ}為源代碼中類節(jié)點的集合,節(jié)點邊的文字為節(jié)點相應(yīng)類的名字(名字 由包名和類名以"相連構(gòu)成)。P是一個零矩陣,如圖4所示。
[0049] (2.2)取步驟(l)Df中的一條邊("以eDf,根據(jù)源代碼得到fjPf,所定義的 類,若fi在類k中定義,f在類p中定義,若k辛p,則將(k,p)加入D。,同時步驟(2. 1)中 P相應(yīng)位置的P(k,p)自加1 ;若k與p相等,則不做任何處理。如圖2所示,若取邊(pi. classX.a(),ρ2·classZ.f()),因pi.classX.a()在pi.classX類中定義,ρ2·classZ.f() 在類p2.classZ中
當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
简阳市| 凤台县| 将乐县| 泰安市| 寻乌县| 宜城市| 女性| 永善县| 博湖县| 津南区| 巩留县| 乌拉特中旗| 庄河市| 吴江市| 营口市| 南开区| 鹤庆县| 平乐县| 喜德县| 砀山县| 孟州市| 平遥县| 阿尔山市| 晋宁县| 宿迁市| 四川省| 韩城市| 个旧市| 凌海市| 昌都县| 慈溪市| 邳州市| 镇雄县| 公主岭市| 佳木斯市| 卓尼县| 安龙县| 定陶县| 兴国县| 大荔县| 吉安市|