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

?

基于鯨魚優(yōu)化算法的類圖重構研究

2021-11-04 09:40胡志剛楊娜劉偉
湖南大學學報(自然科學版) 2021年10期
關鍵詞:度量鯨魚重構

胡志剛,楊娜,劉偉,2?

(1.中南大學 計算機學院,湖南 長沙 410083;2.湖南中醫(yī)藥大學 信息科學與工程學院,湖南 長沙 410208)

軟件產(chǎn)品經(jīng)常隨著需求的變更演變?yōu)橥瓿刹煌墓δ?,這些演變可能使軟件設計變得更加復雜,致使軟件質(zhì)量降低.重構被定義為優(yōu)化現(xiàn)有系統(tǒng)的內(nèi)部結構而不改變其功能,主要通過改進抽象、耦合、繼承等質(zhì)量屬性來提高軟件質(zhì)量.重構最初是在面向?qū)ο筌浖沫h(huán)境中提出的[1],軟件重構已經(jīng)被應用于面向方面的軟件、軟件產(chǎn)品線等不同的環(huán)境,以及應用在代碼、模型、文檔等不同的層次中.

軟件重構階段可以分為代碼層重構和模型層重構,模型層的類圖重構通過找到最佳重構序列來提高軟件質(zhì)量,而尋找最佳重構是一個優(yōu)化問題,可通過進化算法來實現(xiàn),進化算法包括爬山算法[2]、模擬退火算法、群體智能算法和生物地理算法等.群體智能算法主要是模擬動物的群體行為,依靠相互合作來捕獲食物,通過自身學習及向他人學習來不斷改變自身的搜索方向來提高捕食的效率.群體智能優(yōu)化算法的優(yōu)勢在于利用群體能力進行協(xié)同搜索,從而在解空間內(nèi)找到最優(yōu)解.其中鯨魚優(yōu)化算法是根據(jù)鯨魚圍捕獵物的行為而提出的算法.

很多人都對軟件重構進行了相關研究.Kebir 等人[3]提出了一種基于遺傳算法的軟件構件自動重構方法,首先檢測出代碼壞味道,然后從基于組件的源代碼中構建源代碼模型,最后用遺傳算法搜索重構的最佳序列來減少源代碼模型中存在的代碼壞味道.Mohan 等人[4]介紹了許多優(yōu)化算法用于自動化重構,實現(xiàn)了一個Java 重構工具MultiRefactor,該工具著眼于軟件質(zhì)量、代碼優(yōu)先級及重構覆蓋率.Khatchadourian 等人[5]提出了一種自動重構方法,并設計了一個Eclipse IDE 的插件,幫助開發(fā)人員以一種保持語義的方式編寫高效的流代碼.該方法基于一種新的數(shù)據(jù)排序和類型狀態(tài)分析,由前置條件和轉(zhuǎn)換組成,用于自動確定將順序流轉(zhuǎn)換為并行流、將已經(jīng)并行的流進行無序或去并行化.與這些針對局部代碼的重構相比,本文側(cè)重于全局的類圖重構及模型優(yōu)化.

軟件質(zhì)量模型被廣泛應用于軟件重構以識別重構對象、引導重構策略的選擇以及評估重構后軟件質(zhì)量的變化.本研究重點考慮抽象、耦合和繼承屬性,它們在軟件質(zhì)量中占很大因素,對于單個質(zhì)量指標可以表示軟件度量的不同方面.繼承可以指導類是否是正確關聯(lián)和擴展的[6],以及類的層級結構,該度量結合了實現(xiàn)接口和抽象類的使用.耦合可用來指導軟件系統(tǒng)中對象之間相互依賴的程度[7],期望盡可能的低耦合.抽象是指導系統(tǒng)的穩(wěn)定,系統(tǒng)的變化是體現(xiàn)在具體類上的,使用抽象可以提升設計的簡單性,改善軟件開發(fā)的質(zhì)量[8].因此我們采用繼承、耦合和抽象來構建質(zhì)量模型.

鯨魚優(yōu)化算法搜索能力強、結構簡單、參數(shù)少并且易于實現(xiàn)[9],所以選擇鯨魚優(yōu)化算法尋找最優(yōu)的類圖重構序列來進行類圖重構,最后通過構建質(zhì)量模型來評價類圖重構的質(zhì)量.

1 質(zhì)量模型構建

重點選取耦合、繼承、抽象這三個質(zhì)量屬性.表1、表2 分別列出了每個屬性的簡要描述以及針對每個度量的指標描述,表3 中給出了每個屬性的計算方法,即三個適應度函數(shù),度量耦合采用類相互依賴的數(shù)量、不同類間的相互引用數(shù)量兩者權重平均分配.類間的相互引用表示為類中屬性使用了另一個類或接口的數(shù)量、其他類將本類作為屬性的數(shù)量、類中方法參數(shù)使用其他類或接口的數(shù)量、本類作為其他類或接口中方法參數(shù)的數(shù)量.實現(xiàn)接口數(shù)量、每個類的被繼承數(shù)量、子類和父類的數(shù)量四個度量指標共同決定繼承性,這四個度量指標的權重平均分配.抽象體現(xiàn)在類和接口的比例和數(shù)量上,抽象類和類的比例、包中接口數(shù)及類中接口數(shù)三者占同等比例.權重規(guī)范化為1,按度量標準和權重根據(jù)經(jīng)驗值、實驗及軟件因素進行相應設定.對不同的屬性進行歸一化處理,通過采用加權聚合方法來對不同的度量因子進行歸一化,,其中wi為權重為重構后的質(zhì)量屬性值,qi為重構前的質(zhì)量屬性值,通過比較質(zhì)量增益來看重構后的質(zhì)量變化.

表1 度量屬性的簡要描述Tab.1 A brief description of each attribute

表2 度量指標的描述Tab.2 Software metrics used in experiment

表3 度量屬性的計算方法Tab.3 Metric details for each fitness function

為了簡化UML 類圖在RAM 中的表示,以便用鯨魚優(yōu)化算法處理類圖,用抽象數(shù)據(jù)結構UML 映射復雜度更低一些.考慮15 種常規(guī)的類圖重構重命名類、用委托關系代替繼承關系、用繼承關系代替委托關系、提取到子類、提取到父類、折疊繼承關系、內(nèi)聯(lián)類、提取類、函數(shù)下移、方法提到基類中、方法重命名、字段下移、字段上移、字段重命名、封裝字段.通過一系列的轉(zhuǎn)化來找到最優(yōu)的重構序列,然而在一些場景中,如果多個類都繼承自某一父類或者父接口,會具有接口上的一致性.但是如果將其中的某些類單獨提取出來,可能會破壞這種一致性.因此,為了提高類圖的整體質(zhì)量,有時候需要綜合考慮多個因素,而不僅僅只是考慮接口的一致性,進而獲得更好的解決方案.

2 基于鯨魚優(yōu)化算法的類圖重構

鯨魚優(yōu)化算法是一種元啟發(fā)式優(yōu)化算法,該算法模擬了座頭鯨的捕獵行為,座頭鯨喜歡捕食一群靠近水面的小魚和小蝦,遇到獵物后會先向下俯沖大約12 m,然后開始在獵物周圍制造螺旋形氣泡,最后游向水面捕食獵物[10].這個過程提取出三個數(shù)學模型即圍捕獵物、螺旋氣泡網(wǎng)捕食和尋找獵物.用鯨魚算法解決類圖優(yōu)化的基本思想如圖1 所示.

圖1 類圖優(yōu)化架構圖Fig.1 Class diagram optimization basic idea

根據(jù)類圖可能的重構序列及質(zhì)量模型作為優(yōu)化的參數(shù),鯨魚群中的每一個個體的位置均包含一組重構序列.利用鯨魚尋找獵物的方式不斷更新類圖的重構序列,直到找到最好的位置,即找到最佳重構序列.針對質(zhì)量度量,首先采用耦合、繼承和抽象這三個適應度函數(shù)來進行指導,并獲得鯨魚優(yōu)化算法針對單個度量的改進程度.

2.1 提取重構序列

假設當前最優(yōu)重構序列是目標序列或接近最優(yōu)目標序列.定義了最優(yōu)搜索代理后,其他搜索代理將試圖更新它們的位置,以尋找最優(yōu),此行為可以表示為公式(1)和公式(2):

2.2 螺旋氣泡網(wǎng)尋找

2.2.1 收縮包圍機制

2.2.2 螺旋更新位置

如圖2 所示計算出位于(X,Y)處的鯨魚和(X*,Y*)的獵物之間的距離,然后在鯨魚和獵物之間建立一個螺旋方程來模擬座頭鯨的螺旋運動,螺旋方程如公式(5)所示:

圖2 螺旋氣泡網(wǎng)搜索機制Fig.2 Bubble-net search mechanism

座頭鯨會在縮小包圍圈的同時沿一個螺旋形路徑不斷的逼近獵物.為了模擬這種同時發(fā)生的行為,假設在收縮包圍機制和螺旋更新位置之間有50%的可能性進行選擇,以便在優(yōu)化過程中更新重構序列,此行為表示為公式(6):

式中:p 為[0,1]中的隨機數(shù).

2.3 搜索最優(yōu)重構序列

鯨魚優(yōu)化算法從一組隨機解開始,在迭代過程中,搜索會更新它們的位置(要么隨機代理,要么最優(yōu)代理).將參數(shù)a 從2 降到0,分別用于開發(fā)和探索.來決定是選擇一個隨機搜索代理還是選擇最優(yōu)代理來更新搜索代理的位置.根據(jù)p 的值,鯨魚優(yōu)化算法可以同時滿足螺旋更新位置和收縮包圍機制.算法1 為鯨魚優(yōu)化算法(Whale Optimization Algorithm,WOA)的偽代碼.

鯨魚優(yōu)化算法從理論上可以被認為是一個全局優(yōu)化,因為它包含了探索和開發(fā)能力,并且只需要調(diào)整兩個主要內(nèi)部參數(shù)(A 和C).此外,基于群體的算法在隨后的迭代中會保留搜索空間的信息,而基于進化的算法在新種群形成時就丟棄了所有信息;基于群體的算法與進化算法相比有較少的操作符更易實現(xiàn).

3 實驗環(huán)境與結果分析

3.1 數(shù)據(jù)來源

將鯨魚優(yōu)化算法用于類圖的優(yōu)化,將抽象、耦合和繼承這三個適應度函數(shù)來進行衡量優(yōu)化的結果.實驗的輸入程序包括6 個開源Java 項目:JSON,一個用于數(shù)據(jù)交換格式的Java 庫;詞法分析器生成器JFlex;基于xml 的遠程過程調(diào)用庫Apache-XmlRpc;Mango 及解析器生成器和基于GUI 框架開發(fā)的圖形編輯器JHotDraw.上述6 個開源項目針對不同的軟件結構,有關實驗的Java 項目的詳細信息見表4.實驗的總運行次數(shù)為10*3(搜索)*3(函數(shù))*6(基準),總共運行540 次.實驗在一臺3.40GHz Intel Core i7-3770 處理器和8gb RAM 的PC 上進行.

表4 實驗的Java 項目Tab.4 Java programs used in experiment

3.2 實驗結果分析

圖3 展示了運用鯨魚優(yōu)化算法的結果,顯示了6個基準程序中每個適應度函數(shù)的平均質(zhì)量增益(通過最終的總體度量分數(shù)減去初始分數(shù),10 次運行的平均值).

圖3 每個適應度函數(shù)的平均質(zhì)量增益Fig.3 Average quality gain of each fitness function

在三個適應度函數(shù)中,耦合是唯一一個顯示出顯著改善的因子.抽象的改進很小,繼承完全沒有變化.事實上,繼承函數(shù)唯一有變化的情況是在模擬退火中.對于耦合函數(shù)在改進方面更有效,在抽象和繼承函數(shù)中改進很小表明用于組合這些函數(shù)的度量缺乏波動性.在Mango 項目中耦合函數(shù)的增益明顯高于其他,這說明Mango 項目耦合程度較高,易于改進.XmlRpc 在耦合方面改進很小,可能是因為它類之間的耦合很小.

圖4 展示了使用三種不同優(yōu)化算法得出的6 個程序的平均質(zhì)量增益.

圖4 不同優(yōu)化算法的總體平均質(zhì)量增益Fig.4 Average quality gain by different optimization algorithms

結果表明鯨魚優(yōu)化算法相對質(zhì)量提升更優(yōu),但也表明,模擬退火算法優(yōu)于爬山算法,這是因為爬山算法更容易陷入局部最優(yōu),提前找到的最優(yōu)重構序列并不是全局最優(yōu),鯨魚優(yōu)化算法相比較而言不容易陷入局部最優(yōu).同樣的抽象和繼承缺乏應用的重構操作,這些函數(shù)的質(zhì)量增益差的原因是由于缺少可用的操作,而其他指標更不穩(wěn)定,并且有更多的重構操作可用來改進他們.

為了進一步驗證鯨魚優(yōu)化算法的求解性能,將鯨魚優(yōu)化算法與爬山算法和模擬退火算法這三種不同的優(yōu)化算法進行了60 次求解.圖5 表明了鯨魚優(yōu)化算法用于類圖重構的收斂性更好,因為爬山算法是選擇鄰近點,容易陷入局部最優(yōu),達到快速收斂,模擬退火算法的特點是隨機選擇,相比較而言沒那么容易陷入局部最優(yōu),收斂速度相對慢一些,而鯨魚優(yōu)化收斂是取決于a,固定住a,來弱化算法,從而減弱其收斂性,實驗結果表明,鯨魚優(yōu)化算法的全局優(yōu)化能力最強,且算法相對穩(wěn)定,而模擬退火算法優(yōu)化能力和穩(wěn)定性居中,且優(yōu)于爬山算法,所以鯨魚優(yōu)化算法在收斂性和搜索空間上都要更優(yōu)一些.對函數(shù)的初始和最終度量分數(shù)進行統(tǒng)計分析,使用具有95%置信水平的Wilcoxon 符號秩檢驗,所獲得的結果在比較函數(shù)的每次運行時具有統(tǒng)計學意義.

圖5 三種算法的收斂性比較Fig.5 Convergence comparison of the three algorithms

4 總結

近年來,有很多關于軟件重構的研究,但現(xiàn)有的重構研究多側(cè)重于在代碼編寫階段為開發(fā)人員提供局部代碼的重構及代碼推薦,很少考慮在分析設計階段為開發(fā)設計人員提供全局性的重構.本文采用鯨魚優(yōu)化算法來調(diào)整類成員與類之間的映射關系,得到一組最優(yōu)重構序列.同時,實驗對比證明了本文提出的鯨魚優(yōu)化算法可以有效應用于軟件重構進而提高軟件質(zhì)量.后續(xù)工作將對穩(wěn)定性、可靠性等屬性做進一步研究.

猜你喜歡
度量鯨魚重構
小鯨魚
鮑文慧《度量空間之一》
視頻壓縮感知采樣率自適應的幀間片匹配重構
長城敘事的重構
高鹽肥胖心肌重構防治有新策略
迷途鯨魚
鯨魚
代數(shù)群上由模糊(擬)偽度量誘導的拓撲
突出知識本質(zhì) 關注知識結構提升思維能力
度 量
黑河市| 南溪县| 和顺县| 呼玛县| 涞水县| 织金县| 运城市| 石泉县| 宿松县| 茂名市| 岐山县| 吴忠市| 岢岚县| 平潭县| 南平市| 洪湖市| 秭归县| 仁寿县| 威信县| 会泽县| 柯坪县| 板桥市| 米林县| 阿巴嘎旗| 辛集市| 湟源县| 溆浦县| 溧阳市| 清涧县| 荆门市| 天气| 寻乌县| 南华县| 林西县| 瑞金市| 广安市| 神池县| 原平市| 景宁| 镇巴县| 淳化县|