国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      基于多目標(biāo)社團(tuán)發(fā)現(xiàn)的軟件系統(tǒng)可維護(hù)性評(píng)估與提升方法

      文檔序號(hào):6619880閱讀:258來(lái)源:國(guó)知局
      基于多目標(biāo)社團(tuán)發(fā)現(xiàn)的軟件系統(tǒng)可維護(hù)性評(píng)估與提升方法
      【專(zhuān)利摘要】本發(fā)明提出了一種基于多目標(biāo)社團(tuán)發(fā)現(xiàn)的軟件系統(tǒng)可維護(hù)性評(píng)估與提升方法,包括:1)構(gòu)建最大弱連通子圖;2)劃分方法調(diào)用最大弱連通子圖并計(jì)算每個(gè)類(lèi)的不同方法社團(tuán)內(nèi)聚度;3)計(jì)算不同方法社團(tuán)內(nèi)聚度的斯皮爾曼相關(guān)系數(shù),選取相關(guān)系數(shù)最大的兩個(gè)社團(tuán)劃分算法來(lái)計(jì)算軟件系統(tǒng)的模塊度,評(píng)估軟件系統(tǒng)的可維護(hù)性;4)基于每個(gè)類(lèi)的方法社團(tuán)內(nèi)聚度,使用自適應(yīng)的閾值過(guò)濾算法,過(guò)濾出一些內(nèi)聚度較低的類(lèi),這些類(lèi)中某些方法與其它類(lèi)有緊密聯(lián)系,遷移這些方法,從而提高類(lèi)的內(nèi)聚度和軟件系統(tǒng)的模塊度,提升軟件系統(tǒng)的可維護(hù)性。本發(fā)明不僅提升了軟件系統(tǒng)中類(lèi)的內(nèi)聚度,而且提升了整個(gè)軟件系統(tǒng)的模塊度,從而提升了軟件系統(tǒng)的可維護(hù)性。
      【專(zhuān)利說(shuō)明】基于多目標(biāo)社團(tuán)發(fā)現(xiàn)的軟件系統(tǒng)可維護(hù)性評(píng)估與提升方法

      【技術(shù)領(lǐng)域】
      :
      [0001]本發(fā)明屬于可信軟件和軟件測(cè)試交叉領(lǐng)域,特別涉及一種軟件系統(tǒng)可維護(hù)性評(píng)估與提升方法。

      【背景技術(shù)】
      :
      [0002]軟件系統(tǒng)由眾多模塊組成,依靠模塊間的相互調(diào)用完成各種復(fù)雜的功能,軟件模塊性的好壞將直接影響軟件功能的實(shí)現(xiàn)、系統(tǒng)的運(yùn)行效率以及整體穩(wěn)定性。軟件工程的目標(biāo)是運(yùn)用新技術(shù)和正確的管理方法來(lái)提高軟件的質(zhì)量和生存率,使軟件系統(tǒng)具有更高的可維護(hù)性、可靠性和可重用性。
      [0003]面向?qū)ο蠹夹g(shù)采用數(shù)據(jù)抽象、封裝、多態(tài)性、信息隱藏、重用等機(jī)制,增強(qiáng)了軟件的可維護(hù)性,提高了生產(chǎn)效率。為了評(píng)估和提升面向?qū)ο筌浖O(shè)計(jì)的質(zhì)量,研究人員提出了一些指標(biāo),這些指標(biāo)從不同角度評(píng)估軟件系統(tǒng),比如內(nèi)聚度、耦合度和復(fù)雜度。隨著軟件功能需求的日益增加,開(kāi)發(fā)條件的不斷改進(jìn),軟件系統(tǒng)變得越來(lái)越復(fù)雜,軟件系統(tǒng)已經(jīng)被研究人員驗(yàn)證符合復(fù)雜網(wǎng)絡(luò)的特征,在復(fù)雜網(wǎng)路中,一些節(jié)點(diǎn)內(nèi)部的連接密度大于他們和網(wǎng)絡(luò)中其他節(jié)點(diǎn)的連接密度,這樣的結(jié)構(gòu)被稱(chēng)為社團(tuán)結(jié)構(gòu),軟件系統(tǒng)的社團(tuán)結(jié)構(gòu)和軟件的可維護(hù)性密切相關(guān),社團(tuán)發(fā)現(xiàn)算法能夠很好的檢測(cè)出復(fù)雜網(wǎng)絡(luò)中的社團(tuán)結(jié)構(gòu),社團(tuán)結(jié)構(gòu)可以用來(lái)計(jì)算軟件系統(tǒng)模塊度并評(píng)估軟件系統(tǒng)可維護(hù)性。
      [0004]開(kāi)發(fā)出高內(nèi)聚和低耦合的軟件系統(tǒng)被廣泛認(rèn)為是模塊性比較好的軟件結(jié)構(gòu),內(nèi)聚就是模塊之間的相互關(guān)系,高內(nèi)聚意味著軟件的各個(gè)模塊內(nèi)聚緊密聯(lián)系,為此研究人員提出了一系列的類(lèi)內(nèi)聚度度量方法,比如:LC0Ml,Coh,TCC, LCC, SCOM, CCM等等,這些方法基本上都建立在類(lèi)中方法對(duì)類(lèi)中實(shí)例變量使用和共享的基礎(chǔ)上,只考慮了類(lèi)中方法與變量之間、方法與方法之間的關(guān)系,然而這些度量方法并不能有效的對(duì)軟件系統(tǒng)可維護(hù)性進(jìn)行評(píng)估和提升。


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

      :
      [0005]本發(fā)明的目的在于提出一種基于多目標(biāo)社團(tuán)發(fā)現(xiàn)的軟件系統(tǒng)可維護(hù)性評(píng)估與提升方法,評(píng)價(jià)并提升軟件系統(tǒng)的可維護(hù)性。本發(fā)明方法通過(guò)分析軟件調(diào)用網(wǎng)絡(luò)的社團(tuán)結(jié)構(gòu)及對(duì)應(yīng)的模塊度指標(biāo)來(lái)評(píng)價(jià)并提升軟件的模塊性;對(duì)不同文件的代碼進(jìn)行重組,提高軟件系統(tǒng)中類(lèi)的內(nèi)聚度,從而提升軟件的模塊性。
      [0006]為了實(shí)現(xiàn)上述目的,本發(fā)明采用如下技術(shù)方案:
      [0007]基于多目標(biāo)社團(tuán)發(fā)現(xiàn)的軟件系統(tǒng)可維護(hù)性評(píng)估與提升方法,包括以下步驟:步驟SlOl:使用靜態(tài)代碼分析工具Understand和復(fù)雜網(wǎng)絡(luò)分析包igraph,實(shí)現(xiàn)對(duì)Java軟件系統(tǒng)方法調(diào)用的最大弱連通子圖的生成;步驟S102:運(yùn)用四種基于不同目標(biāo)的社團(tuán)劃分算法劃分步驟SlOl所生成的最大弱連通子圖,并計(jì)算每個(gè)類(lèi)的方法社團(tuán)內(nèi)聚度;步驟S103:計(jì)算四種社團(tuán)劃分算法結(jié)果的斯皮爾曼相關(guān)系數(shù),最后挑選出最大斯皮爾曼相關(guān)系數(shù)的兩個(gè)算法來(lái)計(jì)算類(lèi)內(nèi)聚度和模塊度;步驟S104:使用閾值過(guò)濾算法,找出一些內(nèi)聚度較低類(lèi)中可以遷移的方法,輸出這些遷入\遷出的方法,提高這些類(lèi)的內(nèi)聚度,提升了整體的模塊度,從而提升了 JAVA軟件系統(tǒng)的可維護(hù)性。
      [0008]優(yōu)選的,步驟S101具體包括以下步驟:步驟S201:對(duì)待分析的Java軟件系統(tǒng)解析.Java文件,獲取項(xiàng)目中定義的方法列表;步驟S202:利用靜態(tài)代碼分析軟件Understand分析Java軟件系統(tǒng)源代碼,獲取所有方法調(diào)用對(duì);步驟S203:根據(jù)步驟S201中獲取到的Java軟件系統(tǒng)中的方法列表以后,對(duì)比步驟S202獲取到的所有方法調(diào)用對(duì),去掉冗余方法,最終獲得軟件自身方法調(diào)用對(duì);步驟S204:根據(jù)軟件自身方法調(diào)用對(duì)生成軟件方法調(diào)用網(wǎng)絡(luò)圖;步驟S205:利用復(fù)雜網(wǎng)絡(luò)分析包igraph過(guò)濾掉軟件方法調(diào)用網(wǎng)絡(luò)圖的孤立的節(jié)點(diǎn),生成軟件系統(tǒng)方法調(diào)用的最大弱連通子圖。
      [0009]優(yōu)選的,步驟S102具體包括以下步驟:步驟S301:運(yùn)用開(kāi)源的復(fù)雜網(wǎng)絡(luò)分析包iGraph中的四種社團(tuán)劃分算法對(duì)得到的方法調(diào)用的最大弱連通子圖進(jìn)行劃分;所述四種社團(tuán)劃分算法為基于模塊度優(yōu)化(fg)、知識(shí)地圖(im)、多級(jí)分層(ml)和標(biāo)簽傳播(Ip)的社團(tuán)劃分算法;步驟S302:根據(jù)步驟S301的劃分結(jié)果統(tǒng)計(jì)出Java軟件系統(tǒng)中每個(gè)類(lèi)的所屬社團(tuán)編號(hào);步驟S303:獲取每個(gè)類(lèi)所屬各個(gè)社團(tuán)的方法數(shù);步驟S304:計(jì)算出每個(gè)類(lèi)的四種社團(tuán)劃分算法對(duì)應(yīng)的方法社團(tuán)內(nèi)聚度;方法社團(tuán)內(nèi)聚度的定義為:令某個(gè)類(lèi)C共有m個(gè)方法,經(jīng)過(guò)某個(gè)社團(tuán)劃分算法后,m個(gè)方法分布在N個(gè)社團(tuán)中,第k個(gè)社團(tuán)中分布有nk個(gè)方法,k= 1,...,Ν,令I(lǐng)i1Snk中的最大值,那么可以得到類(lèi)C基于該社團(tuán)劃分算法的方法社團(tuán)內(nèi)聚度為r^/m。
      [0010]優(yōu)選的,步驟S103具體包括以下步驟:步驟S401:計(jì)算每?jī)蓚€(gè)社團(tuán)劃分算法之間的斯皮爾曼相關(guān)系數(shù);步驟S402:挑選6組斯皮爾曼相關(guān)系數(shù)中的最大值,記錄這這個(gè)最大值所對(duì)應(yīng)的兩種社團(tuán)劃分算法;步驟S403:運(yùn)用步驟S402中的兩種社團(tuán)劃分算法計(jì)算JAVA軟件系統(tǒng)的平均模塊度(和每個(gè)類(lèi)的平均社團(tuán)內(nèi)聚度;步驟S404:輸出JAVA軟件系統(tǒng)的平均模塊度和其中每個(gè)類(lèi)的平均社團(tuán)內(nèi)聚度。
      [0011]優(yōu)選的,步驟S104具體包括以下步驟:步驟S501:判斷社團(tuán)內(nèi)聚度的過(guò)濾閾值是否大于1,如果是則轉(zhuǎn)入步驟S508,否則轉(zhuǎn)入步驟S502 ;步驟S502:在步驟S404輸出的每個(gè)類(lèi)的平均社團(tuán)內(nèi)聚度中查找一個(gè)社團(tuán)內(nèi)聚度大于過(guò)濾閾值的類(lèi)C1 ;步驟S503:判斷類(lèi)C1中是否存在方法在其他社團(tuán)中,如果是則轉(zhuǎn)入步驟S504,否則轉(zhuǎn)入步驟S502查找符合條件的另一個(gè)類(lèi);步驟S504:在其他社團(tuán)中查找社團(tuán)內(nèi)聚度大于過(guò)濾閾值的類(lèi)C2 ;步驟S505:判斷步驟S503中的方法是否與類(lèi)C2具有調(diào)用關(guān)系,如果是則轉(zhuǎn)入步驟S506,否則轉(zhuǎn)入步驟S502 ;步驟S506:保存所有滿足條件的類(lèi)Cp C2及步驟S503中的方法和方法數(shù)量;步驟S507:過(guò)濾閾值遞增0.05 ;步驟S508:根據(jù)步驟S506中保存的記錄中的方法數(shù)量列表,計(jì)算并保存每?jī)蓚€(gè)相鄰閾值間方法數(shù)量差值,找出方法數(shù)量差值最大的兩個(gè)相鄰閾值,最后得到從兩個(gè)閾值中較大的那個(gè)閾值處開(kāi)始,滿足要求的方法數(shù)量顯著降低;步驟S509:輸出方法數(shù)量顯著降低時(shí)所對(duì)應(yīng)的過(guò)濾閾值下的所有類(lèi)CpC2以及相應(yīng)的方法。
      [0012]優(yōu)選的,步驟S501中第一次設(shè)置的初始過(guò)濾閾值為0.5或0.6。
      [0013]優(yōu)選的,將步驟S509輸出的類(lèi)C1中相應(yīng)的方法遷入類(lèi)C2中,以提升整個(gè)JAVA軟件系統(tǒng)的可維護(hù)性。
      [0014]本發(fā)明一種基于多目標(biāo)社團(tuán)發(fā)現(xiàn)的軟件系統(tǒng)可維護(hù)性評(píng)估與提升方法,包括如下步驟:
      [0015]S101)基于詞法語(yǔ)法、控制流分析技術(shù),對(duì)待分析的目標(biāo)代碼進(jìn)行掃描,獲取軟件系統(tǒng)的方法列表,構(gòu)建方法間的調(diào)用網(wǎng)絡(luò)圖,圖的節(jié)點(diǎn)為方法,邊為方法間的調(diào)用關(guān)系,然后對(duì)方法調(diào)用網(wǎng)絡(luò)圖進(jìn)行預(yù)處理,去掉軟件外部方法調(diào)用、所有的孤立節(jié)點(diǎn),最后得到一個(gè)最大弱連通子圖;
      [0016]S102)分別運(yùn)用基于模塊度優(yōu)化、知識(shí)地圖、多級(jí)分層和標(biāo)簽傳播的社團(tuán)劃分算法劃分出最大弱連通子圖的社團(tuán)結(jié)構(gòu),基于不同算法劃分出的社團(tuán)結(jié)果計(jì)算出每個(gè)類(lèi)的方法社團(tuán)內(nèi)聚度;
      [0017]S103)分別計(jì)算不同方法社團(tuán)內(nèi)聚度的斯皮爾曼相關(guān)系數(shù)驗(yàn)證這些社團(tuán)劃分算法是否獲得類(lèi)似的結(jié)果或者各自獨(dú)立于對(duì)方,然后選擇相關(guān)系數(shù)最大的兩個(gè)算法,基于這兩個(gè)算法計(jì)算每個(gè)類(lèi)方法社團(tuán)內(nèi)聚度平均值和每個(gè)軟件系統(tǒng)的模塊度,用模塊度的值來(lái)評(píng)估軟件系統(tǒng)的可維護(hù)性;
      [0018]S104)基于每個(gè)類(lèi)的方法社團(tuán)內(nèi)聚度,使用自適應(yīng)的閾值過(guò)濾算法,過(guò)濾出一些內(nèi)聚度較低的類(lèi),如若這些類(lèi)中某些方法與其它類(lèi)有緊密聯(lián)系,遷移這些方法,從而提高類(lèi)的內(nèi)聚度和軟件系統(tǒng)的模塊度,提升軟件系統(tǒng)的可維護(hù)性;
      [0019]S105)輸出方法遷移后內(nèi)聚度提升的類(lèi)。
      [0020]本發(fā)明進(jìn)一步的改進(jìn)在于:所述步驟S101)中軟件系統(tǒng)的方法列表獲取方法為:利用詞法分析技術(shù)掃描Java軟件源代碼,將軟件源代碼轉(zhuǎn)換為字符流,并通過(guò)詞法分析技術(shù)得到的字符流,構(gòu)建程序語(yǔ)法樹(shù),最后對(duì)該語(yǔ)法樹(shù)進(jìn)行分析,獲取軟件系統(tǒng)中方法的定義,包括方法名,方法傳遞參數(shù),返回值,將相關(guān)方法信息保存入數(shù)據(jù)庫(kù)。
      [0021]本發(fā)明進(jìn)一步的改進(jìn)在于:所述步驟S101)中軟件系統(tǒng)的方法調(diào)用對(duì)獲取方法為:利用控制流分析技術(shù),獲取目標(biāo)代碼所有方法調(diào)用對(duì)。對(duì)比數(shù)據(jù)庫(kù)中的方法定義表對(duì)方法調(diào)用對(duì)進(jìn)行分析與抽取,去除軟件外部的方法調(diào)用對(duì),最后根據(jù)分析結(jié)果,對(duì)軟件方法調(diào)用對(duì)進(jìn)行記錄,記錄格式為:類(lèi)中方法的包名和方法名;被調(diào)用者的包名和方法名_>調(diào)用者的包名和方法名。
      [0022]本發(fā)明進(jìn)一步的改進(jìn)在于:所述步驟S101)中軟性系統(tǒng)的方法調(diào)用的最大弱連通子圖生成方法為:依次讀取軟件方法調(diào)用對(duì)記錄,對(duì)類(lèi)中新方法名標(biāo)記為方法調(diào)用網(wǎng)絡(luò)圖的新節(jié)點(diǎn),對(duì)新的方法調(diào)用對(duì)標(biāo)記為方法調(diào)用網(wǎng)絡(luò)圖的邊,循環(huán)迭代這個(gè)過(guò)程生成方法調(diào)用網(wǎng)絡(luò)圖,最后去除孤立的節(jié)點(diǎn),生成軟件系統(tǒng)方法調(diào)用的最大弱連通子圖。
      [0023]本發(fā)明進(jìn)一步的改進(jìn)在于:所述步驟102)中分別實(shí)現(xiàn)基于模塊度的、知識(shí)地圖的、多級(jí)分層和標(biāo)簽傳播的社團(tuán)劃分算法,得到方法社團(tuán)劃分結(jié)果,記錄格式為:包名和方法名,所屬社團(tuán)編號(hào)。根據(jù)劃分結(jié)果計(jì)算每個(gè)類(lèi)的方法社團(tuán)內(nèi)聚度(MCC):
      [0024]令某個(gè)類(lèi)C共有m個(gè)方法,經(jīng)過(guò)某個(gè)社團(tuán)劃分算法后,m個(gè)方法分布在N個(gè)社團(tuán)中,第k個(gè)社團(tuán)中分布有nk個(gè)方法(k = I,…,N),令I(lǐng)i1為nk中的最大值,那么可以得到類(lèi)C基于該社團(tuán)劃分算法的方法社團(tuán)內(nèi)聚度為h/m。
      [0025]本發(fā)明進(jìn)一步的改進(jìn)在于:所述步驟103)中分別計(jì)算不同方法社團(tuán)內(nèi)聚度的斯皮爾曼相關(guān)系數(shù)驗(yàn)證這些社團(tuán)劃分算法是否獲得類(lèi)似的結(jié)果或者各自獨(dú)立于對(duì)方,然后選擇相關(guān)系數(shù)最大的兩個(gè)算法,基于這兩個(gè)算法計(jì)算每個(gè)類(lèi)方法社團(tuán)內(nèi)聚度平均值和每個(gè)軟件系統(tǒng)的模塊度,用模塊度的值來(lái)評(píng)估軟件系統(tǒng)的可維護(hù)性。
      [0026]本發(fā)明進(jìn)一步的改進(jìn)在于:所述步驟104)基于每個(gè)類(lèi)的方法社團(tuán)內(nèi)聚度,使用自適應(yīng)的閾值過(guò)濾算法,過(guò)濾出一些內(nèi)聚度較低的類(lèi),如若這些類(lèi)中某些方法與其它類(lèi)有緊密聯(lián)系,遷移這些方法,從而提高類(lèi)的內(nèi)聚度和軟件系統(tǒng)的模塊度,提升軟件系統(tǒng)的可維護(hù)性。
      [0027]本發(fā)明進(jìn)一步的改進(jìn)在于:所訴步驟4)中自適應(yīng)的閾值過(guò)濾算法為:
      [0028]令某個(gè)類(lèi)C1 一共有N1個(gè)方法,其中有nn個(gè)方法在同一社團(tuán)Com1中,并且滿足:
      類(lèi)^!的方法社團(tuán)內(nèi)聚度=f > Threshold,在剩余的N1- nil個(gè)方法中,如果存在一個(gè)或者多個(gè)方法,其所在的社團(tuán)Com2中,有n21個(gè)方法屬于另一個(gè)類(lèi)C2,C2 一共有N2個(gè)方法,并且滿足:1)類(lèi)^2的方法社團(tuán)內(nèi)聚度=l> 77ires/1M,2)這一個(gè)或者多個(gè)方法與類(lèi)C2有調(diào)用關(guān)系。記錄下滿足此要求的類(lèi)Cp C2及相應(yīng)的方法和方法數(shù)量。閾值以0.05依次遞增,保存每個(gè)閾值下的類(lèi)Cp C2及相應(yīng)的方法和方法數(shù)量,最后分析閾值從哪個(gè)值處開(kāi)始滿足要求的方法數(shù)量顯著降低,記錄此閾值下的類(lèi)Cp C2及相應(yīng)的方法。
      [0029]本發(fā)明進(jìn)一步的改進(jìn)在于:所述步驟105)中,記錄的類(lèi)CpC2及相應(yīng)的方法,把這些方法從類(lèi)C1遷移到類(lèi)C2中去,從而提升類(lèi)Cp C2的內(nèi)聚度,輸出這些類(lèi)和需要遷移的方法。
      [0030]相對(duì)于現(xiàn)有技術(shù),本發(fā)明具有以下優(yōu)點(diǎn):
      [0031](I)本發(fā)明利用軟件系統(tǒng)具有復(fù)雜網(wǎng)絡(luò)特性,構(gòu)建了軟件系統(tǒng)方法間的調(diào)用網(wǎng)絡(luò)圖,圖的節(jié)點(diǎn)為方法,邊為方法間的調(diào)用關(guān)系。運(yùn)用這個(gè)方法調(diào)用網(wǎng)絡(luò)圖不僅考慮了類(lèi)中方法的調(diào)用關(guān)系,而且考慮了類(lèi)與類(lèi)之間的方法調(diào)用關(guān)系。
      [0032](2)本發(fā)明利用復(fù)雜網(wǎng)絡(luò)中的社團(tuán)結(jié)構(gòu)理論,運(yùn)用了不同目標(biāo)對(duì)象的社團(tuán)發(fā)現(xiàn)算法,提出了一種基于社團(tuán)發(fā)現(xiàn)算法來(lái)計(jì)算面向?qū)ο筌浖到y(tǒng)的類(lèi)的方法社團(tuán)內(nèi)聚度,從軟件系統(tǒng)模塊性的角度評(píng)估軟件系統(tǒng)的可維護(hù)性。
      [0033](3)本發(fā)明提升了軟件系統(tǒng)各模塊內(nèi)部一些類(lèi)的內(nèi)聚度,不僅提升了軟件系統(tǒng)中類(lèi)的內(nèi)聚度,而且提升了整個(gè)軟件系統(tǒng)的模塊度,從而提升了軟件系統(tǒng)的可維護(hù)性。

      【專(zhuān)利附圖】

      【附圖說(shuō)明】
      [0034]圖1為基于多目標(biāo)社團(tuán)發(fā)現(xiàn)的軟件可維護(hù)性評(píng)估與提升方法整體流程圖;
      [0035]圖2為生成方法調(diào)用網(wǎng)絡(luò)最大弱連通圖的流程圖;
      [0036]圖3為計(jì)算類(lèi)的方法社團(tuán)內(nèi)聚度流程圖;
      [0037]圖4為過(guò)濾較低內(nèi)聚度的類(lèi)和其中方法流程圖;
      [0038]圖5為過(guò)濾算法的流程圖。

      【具體實(shí)施方式】
      [0039]以下結(jié)果附圖詳細(xì)說(shuō)明本發(fā)明基于多目標(biāo)社團(tuán)發(fā)現(xiàn)的軟件系統(tǒng)可維護(hù)性與提升方法的【具體實(shí)施方式】。
      [0040]請(qǐng)參閱圖1所示,本發(fā)明提出一種基于多目標(biāo)社團(tuán)發(fā)現(xiàn)的軟件系統(tǒng)可維護(hù)性評(píng)估與提升方法,包括以下步驟:
      [0041]步驟SlOl:使用靜態(tài)代碼分析工具Understand和復(fù)雜網(wǎng)絡(luò)分析包igraph,實(shí)現(xiàn)對(duì)Java軟件系統(tǒng)方法調(diào)用的最大弱連通子圖的生成;
      [0042]結(jié)合圖2,具體而言,在輸入待分析的Java軟件系統(tǒng)后,實(shí)現(xiàn)生成該Java軟件系統(tǒng)調(diào)用網(wǎng)絡(luò)的最大弱連通子圖。
      [0043]步驟S201:對(duì)待分析的Java軟件系統(tǒng)解析.Java文件,獲取項(xiàng)目中定義的方法列表;
      [0044]步驟S202:利用靜態(tài)代碼分析軟件Understand分析Java軟件系統(tǒng)源代碼,獲取所有方法調(diào)用對(duì);
      [0045]步驟S203:根據(jù)步驟S201中獲取到的Java軟件系統(tǒng)中的方法列表以后,對(duì)比步驟S202獲取到的所有方法調(diào)用對(duì),去掉冗余方法,最終獲得軟件自身方法調(diào)用對(duì);
      [0046]步驟S204:根據(jù)軟件自身方法調(diào)用對(duì)生成軟件方法調(diào)用網(wǎng)絡(luò)圖;
      [0047]步驟S205:利用復(fù)雜網(wǎng)絡(luò)分析包igraph過(guò)濾掉軟件方法調(diào)用網(wǎng)絡(luò)圖的孤立的節(jié)點(diǎn),生成軟件系統(tǒng)方法調(diào)用的最大弱連通子圖。
      [0048]例如輸入一個(gè)開(kāi)源的Java語(yǔ)言開(kāi)發(fā)的文本編輯器jEdit,利用靜態(tài)代碼分析工具Understand分析獲取方法調(diào)用圖,利用詞法語(yǔ)法分析方法掃描源代碼,過(guò)濾掉屬于JDK中的方法,最后得到一個(gè)軟件系統(tǒng)內(nèi)部的方法調(diào)用對(duì),例如:
      [0049]"EditPane.java: EditPane.properties Changed O JEditText Area.java:JEditTextArea.setRightClickPopup(JPopupMenupopup)〃[label = 〃EditPane.java:485〃];保存在callgraph.dot中,運(yùn)用復(fù)雜網(wǎng)絡(luò)分析包igraph,生成最大弱連通子圖。
      [0050]步驟S102:運(yùn)用四種基于不同目標(biāo)的社團(tuán)劃分算法劃分步驟SlOl所生成的最大弱連通子圖,并計(jì)算每個(gè)類(lèi)的方法社團(tuán)內(nèi)聚度。具體流程如圖3所示:
      [0051]步驟S301:運(yùn)用開(kāi)源的復(fù)雜網(wǎng)絡(luò)分析包iGraph中的四種社團(tuán)劃分算法(基于模塊度優(yōu)化(fg)、知識(shí)地圖(im)、多級(jí)分層(ml)和標(biāo)簽傳播(Ip)的社團(tuán)劃分算法)對(duì)得到的方法調(diào)用的最大弱連通子圖進(jìn)行劃分;
      [0052]步驟S302:根據(jù)步驟S301的劃分結(jié)果統(tǒng)計(jì)出Java軟件系統(tǒng)中每個(gè)類(lèi)的所屬社團(tuán)編號(hào);
      [0053]步驟S303:獲取每個(gè)類(lèi)所屬各個(gè)社團(tuán)的方法數(shù);
      [0054]步驟S304:根據(jù)方法社團(tuán)內(nèi)聚度的定義(令某個(gè)類(lèi)C共有m個(gè)方法,經(jīng)過(guò)某個(gè)社團(tuán)劃分算法后,m個(gè)方法分布在N個(gè)社團(tuán)中,第k個(gè)社團(tuán)中分布有nk個(gè)方法(k = I,…,N),令I(lǐng)i1為nk中的最大值,那么可以得到類(lèi)C基于該社團(tuán)劃分算法的方法社團(tuán)內(nèi)聚度為n/m),計(jì)算出每個(gè)類(lèi)的四種社團(tuán)劃分算法對(duì)應(yīng)的方法社團(tuán)內(nèi)聚度。
      [0055]針對(duì)上一步得到的方法調(diào)用最大弱連通子圖,分別運(yùn)用iGraph中的基于模塊度優(yōu)化(fg)、知識(shí)地圖(im)、多級(jí)分層(ml)和標(biāo)簽傳播(Ip)的社團(tuán)劃分算法包,得到每個(gè)類(lèi)中每個(gè)方法所屬的社團(tuán)結(jié)構(gòu),如下表格運(yùn)用Ip社團(tuán)劃分算法得到部分結(jié)果,左邊為上一步方法調(diào)用對(duì)中的方法,右邊為所屬的社團(tuán)編號(hào),
      [0056]表1:社團(tuán)劃分后的結(jié)果
      [0057]
      EditPane.java:EditPane.handleMessage(EB!Viessagemsg)74
      EditPaneJava:EditPane.getTextArea()74
      EditPane.java:EditPane.nextBuffer()74
      EditPaneJava:EditPane.propertiesChanged()34
      JEditTextArea.java:J EditTextArea.setRightClickPopup(J PopupMenu34
      popup)__
      JEditTextArea.java:J EditTextArea.getText()34
      JEditTextAreaJavaJ EditTextArea.getSelect1nEnd()34
      [0058]接著分析得到每個(gè)類(lèi)所屬的社團(tuán),例如分析EditPane類(lèi)得到結(jié)果為EditPane:74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,34 可以得到 EditPane 這個(gè)類(lèi)有 16個(gè)方法在社團(tuán)74中,只有I個(gè)方法在社團(tuán)34中,那么運(yùn)用Ip社團(tuán)劃分算法得到的這個(gè)類(lèi)的方法社團(tuán)內(nèi)聚度

      16
      [0059]MCClp(EditPane) = p = 0.94
      [0060]類(lèi)似的可以得到其他三個(gè)社團(tuán)劃分算法的社團(tuán)內(nèi)聚度MCCim = 0.29,MCCfg =0.53, MCCml = 0.35。
      [0061]步驟S103:計(jì)算四種社團(tuán)劃分算法結(jié)果的斯皮爾曼相關(guān)系數(shù),最后挑選出最大斯皮爾曼相關(guān)系數(shù)的兩個(gè)算法來(lái)計(jì)算類(lèi)內(nèi)聚度和模塊度,具體流程如圖4所示:
      [0062]步驟S401:計(jì)算每?jī)蓚€(gè)社團(tuán)劃分算法之間的斯皮爾曼相關(guān)系數(shù);
      [0063]步驟S402:挑選6組斯皮爾曼相關(guān)系數(shù)中的最大值,記錄這這個(gè)最大值所對(duì)應(yīng)的兩種社團(tuán)劃分算法;
      [0064]步驟S403:運(yùn)用步驟S402中的兩種社團(tuán)劃分算法計(jì)算JAVA軟件系統(tǒng)的平均模塊度(兩種社團(tuán)劃分算法所計(jì)算模塊度的均值)和每個(gè)類(lèi)的平均社團(tuán)內(nèi)聚度(兩種社團(tuán)劃分算法所計(jì)算社團(tuán)內(nèi)聚度的均值);
      [0065]步驟S404:輸出JAVA軟件系統(tǒng)的平均模塊度和其中每個(gè)類(lèi)的平均社團(tuán)內(nèi)聚度。
      [0066]根據(jù)上一步得到的結(jié)果計(jì)算,計(jì)算每?jī)蓚€(gè)算法結(jié)果的斯皮爾曼相關(guān)性,例如im和fg這兩個(gè)算法得到的部分社團(tuán)內(nèi)聚度結(jié)果為:
      [0067]表2:模塊度計(jì)算
      [0068]

      Ifg模塊度~ im模塊度 Ip模塊度|ml模塊度
      jEdit 0.7200.626 0.726 0.747
      [0069]表3:相關(guān)性計(jì)算
      [0070]

      【權(quán)利要求】
      1.基于多目標(biāo)社團(tuán)發(fā)現(xiàn)的軟件系統(tǒng)可維護(hù)性評(píng)估與提升方法,其特征在于,包括以下步驟: 步驟SlOl:使用靜態(tài)代碼分析工具Understand和復(fù)雜網(wǎng)絡(luò)分析包igraph,實(shí)現(xiàn)對(duì)Java軟件系統(tǒng)方法調(diào)用的最大弱連通子圖的生成; 步驟S102:運(yùn)用四種基于不同目標(biāo)的社團(tuán)劃分算法劃分步驟SlOl所生成的最大弱連通子圖,并計(jì)算每個(gè)類(lèi)的方法社團(tuán)內(nèi)聚度; 步驟S103:計(jì)算四種社團(tuán)劃分算法結(jié)果的斯皮爾曼相關(guān)系數(shù),最后挑選出最大斯皮爾曼相關(guān)系數(shù)的兩個(gè)算法來(lái)計(jì)算類(lèi)內(nèi)聚度和模塊度; 步驟S104:使用閾值過(guò)濾算法,找出一些內(nèi)聚度較低類(lèi)中可以遷移的方法,輸出這些遷入\遷出的方法,提高這些類(lèi)的內(nèi)聚度,提升了整體的模塊度,從而提升了 JAVA軟件系統(tǒng)的可維護(hù)性。
      2.根據(jù)權(quán)利要求1所述的基于多目標(biāo)社團(tuán)發(fā)現(xiàn)的軟件系統(tǒng)可維護(hù)性評(píng)估與提升方法,其特征在于,步驟SlOl具體包括以下步驟: 步驟S201:對(duì)待分析的Java軟件系統(tǒng)解析.Java文件,獲取項(xiàng)目中定義的方法列表;步驟S202:利用靜態(tài)代碼分析軟件Understand分析Java軟件系統(tǒng)源代碼,獲取所有方法調(diào)用對(duì); 步驟S203:根據(jù)步驟S201中獲取到的Java軟件系統(tǒng)中的方法列表以后,對(duì)比步驟S202獲取到的所有方法調(diào)用對(duì),去掉冗余方法,最終獲得軟件自身方法調(diào)用對(duì); 步驟S204:根據(jù)軟件自身方法調(diào)用對(duì)生成軟件方法調(diào)用網(wǎng)絡(luò)圖; 步驟S205:利用復(fù)雜網(wǎng)絡(luò)分析包igraph過(guò)濾掉軟件方法調(diào)用網(wǎng)絡(luò)圖的孤立的節(jié)點(diǎn),生成軟件系統(tǒng)方法調(diào)用的最大弱連通子圖。
      3.根據(jù)權(quán)利要求1所述的基于多目標(biāo)社團(tuán)發(fā)現(xiàn)的軟件系統(tǒng)可維護(hù)性評(píng)估與提升方法,其特征在于,步驟S102具體包括以下步驟: 步驟S301:運(yùn)用開(kāi)源的復(fù)雜網(wǎng)絡(luò)分析包iGraph中的四種社團(tuán)劃分算法對(duì)得到的方法調(diào)用的最大弱連通子圖進(jìn)行劃分;所述四種社團(tuán)劃分算法為基于模塊度優(yōu)化(fg)、知識(shí)地圖(im)、多級(jí)分層(ml)和標(biāo)簽傳播(Ip)的社團(tuán)劃分算法; 步驟S302:根據(jù)步驟S301的劃分結(jié)果統(tǒng)計(jì)出Java軟件系統(tǒng)中每個(gè)類(lèi)的所屬社團(tuán)編號(hào); 步驟S303:獲取每個(gè)類(lèi)所屬各個(gè)社團(tuán)的方法數(shù); 步驟S304:計(jì)算出每個(gè)類(lèi)的四種社團(tuán)劃分算法對(duì)應(yīng)的方法社團(tuán)內(nèi)聚度; 方法社團(tuán)內(nèi)聚度的定義為:令某個(gè)類(lèi)C共有m個(gè)方法,經(jīng)過(guò)某個(gè)社團(tuán)劃分算法后,m個(gè)方法分布在N個(gè)社團(tuán)中,第k個(gè)社團(tuán)中分布有nk個(gè)方法,k = I,…,化令!^為nk中的最大值,那么可以得到類(lèi)C基于該社團(tuán)劃分算法的方法社團(tuán)內(nèi)聚度為n/m。
      4.根據(jù)權(quán)利要求1所述的基于多目標(biāo)社團(tuán)發(fā)現(xiàn)的軟件系統(tǒng)可維護(hù)性評(píng)估與提升方法,其特征在于,步驟S103具體包括以下步驟: 步驟S401:計(jì)算每?jī)蓚€(gè)社團(tuán)劃分算法之間的斯皮爾曼相關(guān)系數(shù); 步驟S402:挑選6組斯皮爾曼相關(guān)系數(shù)中的最大值,記錄這這個(gè)最大值所對(duì)應(yīng)的兩種社團(tuán)劃分算法; 步驟S403:運(yùn)用步驟S402中的兩種社團(tuán)劃分算法計(jì)算JAVA軟件系統(tǒng)的平均模塊度(和每個(gè)類(lèi)的平均社團(tuán)內(nèi)聚度; 步驟S404:輸出JAVA軟件系統(tǒng)的平均模塊度和其中每個(gè)類(lèi)的平均社團(tuán)內(nèi)聚度。
      5.根據(jù)權(quán)利要求1所述的基于多目標(biāo)社團(tuán)發(fā)現(xiàn)的軟件系統(tǒng)可維護(hù)性評(píng)估與提升方法,其特征在于,步驟S104具體包括以下步驟: 步驟S501:判斷社團(tuán)內(nèi)聚度的過(guò)濾閾值是否大于1,如果是則轉(zhuǎn)入步驟S508,否則轉(zhuǎn)入步驟S502 ; 步驟S502:在步驟S404輸出的每個(gè)類(lèi)的平均社團(tuán)內(nèi)聚度中查找一個(gè)社團(tuán)內(nèi)聚度大于過(guò)濾閾值的類(lèi)C1 ; 步驟S503:判斷類(lèi)C1中是否存在方法在其他社團(tuán)中,如果是則轉(zhuǎn)入步驟S504,否則轉(zhuǎn)入步驟S502查找符合條件的另一個(gè)類(lèi); 步驟S504:在其他社團(tuán)中查找社團(tuán)內(nèi)聚度大于過(guò)濾閾值的類(lèi)C2 ; 步驟S505:判斷步驟S503中的方法是否與類(lèi)C2具有調(diào)用關(guān)系,如果是則轉(zhuǎn)入步驟S506,否則轉(zhuǎn)入步驟S502 ; 步驟S506:保存所有滿足條件的類(lèi)Cp C2及步驟S503中的方法和方法數(shù)量; 步驟S507:過(guò)濾閾值遞增0.05 ; 步驟S508:根據(jù)步驟S506中保存的記錄中的方法數(shù)量列表,計(jì)算并保存每?jī)蓚€(gè)相鄰閾值間方法數(shù)量差值,找出方法數(shù)量差值最大的兩個(gè)相鄰閾值,最后得到從兩個(gè)閾值中較大的那個(gè)閾值處開(kāi)始,滿足要求的方法數(shù)量顯著降低; 步驟S509:輸出方法數(shù)量顯著降低時(shí)所對(duì)應(yīng)的過(guò)濾閾值下的所有類(lèi)Cp C2以及相應(yīng)的方法。
      6.根據(jù)權(quán)利要求5所述的基于多目標(biāo)社團(tuán)發(fā)現(xiàn)的軟件系統(tǒng)可維護(hù)性評(píng)估與提升方法,其特征在于,步驟S501中第一次設(shè)置的初始過(guò)濾閾值為0.5或0.6。
      7.根據(jù)權(quán)利要求5所述的基于多目標(biāo)社團(tuán)發(fā)現(xiàn)的軟件系統(tǒng)可維護(hù)性評(píng)估與提升方法,其特征在于,將步驟S509輸出的類(lèi)C1中相應(yīng)的方法遷入類(lèi)C2中,以提升整個(gè)JAVA軟件系統(tǒng)的可維護(hù)性。
      【文檔編號(hào)】G06F11/36GK104133766SQ201410330742
      【公開(kāi)日】2014年11月5日 申請(qǐng)日期:2014年7月11日 優(yōu)先權(quán)日:2014年7月11日
      【發(fā)明者】鄭慶華, 李劍, 王志文, 屈宇, 劉烴 申請(qǐng)人:西安交通大學(xué)
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1