基于高層設(shè)計(jì)的交互式軟件自動(dòng)化重構(gòu)方法
【專利摘要】本發(fā)明屬于軟件工程【技術(shù)領(lǐng)域】,具體公開了一種基于高層設(shè)計(jì)的交互式軟件自動(dòng)化重構(gòu)方法。本發(fā)明提出交互式軟件自動(dòng)化重構(gòu)方法,以開發(fā)人員給定的目標(biāo)軟件系統(tǒng)高層模塊結(jié)構(gòu)以及系統(tǒng)當(dāng)前的實(shí)現(xiàn)代碼為輸入,通過基于搜索的算法自動(dòng)生成包含一系列重構(gòu)步驟建議方案,并允許開發(fā)人員查看以及接受/拒絕重構(gòu)建議。本發(fā)明將開發(fā)人員接受或拒絕重構(gòu)建議的選擇作為用戶反饋記錄下來并在下一輪基于搜索的重構(gòu)建議生成過程中加以考慮,從而以一種迭代化的方式指導(dǎo)開發(fā)人員逐步完成重構(gòu)任務(wù)。采用本發(fā)明可以使開發(fā)人員在重構(gòu)建議的引導(dǎo)下逐步完成基于高層設(shè)計(jì)的軟件自動(dòng)化重構(gòu),從而提高軟件重構(gòu)工作的效率和質(zhì)量。
【專利說明】基于高層設(shè)計(jì)的交互式軟件自動(dòng)化重構(gòu)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于軟件工程【技術(shù)領(lǐng)域】,具體涉及一種交互式軟件自動(dòng)化重構(gòu)方法。
【背景技術(shù)】
[0002]軟件系統(tǒng)在演化過程中常常會(huì)發(fā)生設(shè)計(jì)退化。開發(fā)人員為了提高系統(tǒng)的可維護(hù)性和可擴(kuò)展性經(jīng)常需要對(duì)代碼進(jìn)行重構(gòu)。許多軟件集成開發(fā)環(huán)境(IDE)都提供了方法和變量重命名等基本的代碼自動(dòng)化重構(gòu)功能,而一些重構(gòu)工具還提供了基于代碼壞味道(BadSmell)識(shí)別的重構(gòu)機(jī)會(huì)偵測(cè)功能,能夠發(fā)現(xiàn)并推薦方法提升、消除重復(fù)代碼、提取方法、拆分上帝類(God Class)等重構(gòu)機(jī)會(huì),并支持自動(dòng)化的重構(gòu)執(zhí)行。這些自動(dòng)化重構(gòu)中的重構(gòu)機(jī)會(huì)識(shí)別都是基于度量值等局部代碼特征實(shí)現(xiàn)的,無法反映更高層的設(shè)計(jì)重構(gòu)要求。
[0003]然而,現(xiàn)實(shí)的軟件維護(hù)中,開發(fā)人員可能會(huì)希望在一個(gè)高層設(shè)計(jì)模型的指導(dǎo)下進(jìn)行代碼重構(gòu),通過重構(gòu)使得實(shí)現(xiàn)代碼與高層設(shè)計(jì)相一致。這種設(shè)計(jì)模型往往是設(shè)計(jì)人員將某些設(shè)計(jì)原則和設(shè)計(jì)模式實(shí)例化并與軟件系統(tǒng)的特定需求相結(jié)合的產(chǎn)物。在已有的軟件維護(hù)技術(shù)中,反射模型(Reflex1n Model)可以被用于驗(yàn)證高層設(shè)計(jì)與實(shí)現(xiàn)代碼的一致性。反射模型由高層設(shè)計(jì)、底層代碼模型以及兩者之間的映射關(guān)系組成。高層設(shè)計(jì)可以由模塊與模塊之間的依賴關(guān)系表示;底層模型由代碼元素(如,類、接口等)與它們之間的依賴關(guān)系表示。確定了模塊與代碼元素之間的映射關(guān)系之后,就可以確定高層模型中的模塊結(jié)構(gòu)以及模塊之間的依賴關(guān)系是否與底層模型中實(shí)際實(shí)現(xiàn)的依賴關(guān)系相一致。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的目的在于提出一種基于高層設(shè)計(jì)的交互式軟件自動(dòng)化重構(gòu)方法,以一種交互和迭代化的方式為開發(fā)人員提供自動(dòng)化重構(gòu)導(dǎo)航支持,從而提高基于高層設(shè)計(jì)的軟件重構(gòu)效率和質(zhì)量。
[0005]本發(fā)明的核心思想是:通過映射算法建立高層設(shè)計(jì)模型中的模塊與底層實(shí)現(xiàn)模型中的代碼元素之間的映射關(guān)系,計(jì)算二者的差異并通過一種搜索算法自動(dòng)生成包含一系列重構(gòu)操作的重構(gòu)方案;在此基礎(chǔ)上通過一種迭代化的過程允許開發(fā)人員確認(rèn)、拒絕或忽略所建議的重構(gòu)操作并在考慮用戶反饋的基礎(chǔ)上不斷生成新的重構(gòu)方案。
[0006]本發(fā)明提供的基于高層設(shè)計(jì)的交互式軟件自動(dòng)化重構(gòu)方法,其基本過程如圖1所示。其中,白色的矩形框表示自動(dòng)執(zhí)行的活動(dòng),包括:底層模型抽取、反射模型生成、重構(gòu)方案推薦和應(yīng)用重構(gòu)建議;灰色的矩形框表示需要開發(fā)人員參與的活動(dòng),包括:設(shè)計(jì)建模和用戶檢查;橢圓表示數(shù)據(jù)或信息,包括:源代碼、高層設(shè)計(jì)、底層模型、反射模型、重構(gòu)方案、用戶反饋和接受的重構(gòu)建議。利用本發(fā)明的方法,軟件開發(fā)人員可以得到自動(dòng)推薦的重構(gòu)方案,同時(shí)還可以接受、拒絕或忽略重構(gòu)方案中所建議的重構(gòu)操作,使得后續(xù)生成的重構(gòu)建議可以將用戶反饋考慮進(jìn)來。整個(gè)方法過程包含如下步驟:
(1)開發(fā)人員確定軟件系統(tǒng)中的重構(gòu)范圍,并通過建模工具描述與重構(gòu)范圍內(nèi)代碼相對(duì)應(yīng)的期望高層設(shè)計(jì)模型,包含模塊及模塊間的各種依賴關(guān)系(例如繼承、對(duì)象創(chuàng)建和其他依賴關(guān)系);
(2)自動(dòng)對(duì)重構(gòu)范圍內(nèi)的源代碼進(jìn)行逆向分析得到底層模型,包含代碼元素(如類、接口、方法、屬性等)以及它們之間的各種依賴關(guān)系(包括類之間的創(chuàng)建關(guān)系、類與接口之間的繼承關(guān)系、類與方法之間的包含關(guān)系等);
(3)基于高層設(shè)計(jì)模型中的模塊以及底層模型中的代碼元素之間的文本相似度和結(jié)構(gòu)相似度,建立它們之間的映射關(guān)系,從而生成反映高層設(shè)計(jì)與實(shí)現(xiàn)代碼之間符合性情況的反射模型;
(4)使用基于搜索的重構(gòu)方案推薦算法生成一個(gè)包含一系列重構(gòu)操作的建議重構(gòu)方案;
(5)開發(fā)人員檢查建議重構(gòu)方案中的各個(gè)重構(gòu)操作,接受、拒絕或忽略各個(gè)重構(gòu)操作;所有被接受的重構(gòu)操作都將被自動(dòng)執(zhí)行,此時(shí)源代碼和底層模型將同時(shí)被相應(yīng)修改;同時(shí),被開發(fā)人員接受或拒絕的重構(gòu)建議將被記錄下作為用戶反饋用于后續(xù)的建議重構(gòu)方案生成;
(6)如果重構(gòu)目標(biāo)實(shí)現(xiàn)或方法無法生成新的重構(gòu)建議則整個(gè)過程結(jié)束,否則返回步驟4繼續(xù)執(zhí)行。
[0007]由上文所述,本方法是一個(gè)不斷迭代的過程,開發(fā)人員可以不斷使用推薦技術(shù)得到重構(gòu)建議,直到底層代碼完全符合高層設(shè)計(jì)或者該方法不再能推薦出新的重構(gòu)建議。對(duì)于后一種情況,開發(fā)人員可以手動(dòng)完成剩余的重構(gòu)工作或修改高層設(shè)計(jì)后再用本發(fā)明的方法來推薦出新的重構(gòu)建議。
[0008]下面對(duì)本發(fā)明技術(shù)方案中的兩個(gè)部分作進(jìn)一步介紹:反射模型的自動(dòng)生成以及結(jié)合開發(fā)人員反饋的重構(gòu)推薦算法。
[0009]反射模型的自動(dòng)生成
反射模型生成技術(shù)旨在找到一個(gè)從底層模塊代碼元素(類或接口)到高層設(shè)計(jì)模塊之間的映射關(guān)系。本發(fā)明采用遺傳算法來找到諸多映射方案中最優(yōu)的映射關(guān)系來生成最為合理的反射模型,該遺傳算法包含以下步驟:
(1)將底層模型代碼元素(類或接口)到高層設(shè)計(jì)模塊的一個(gè)映射關(guān)系編碼為一個(gè)個(gè)體。一個(gè)個(gè)體用一個(gè)向量表示,向量的長(zhǎng)度為底層模型中類(或接口)的數(shù)量,向量的每一個(gè)維度(也稱為一個(gè)基因)的值表示該類(或接口)所對(duì)應(yīng)的模塊;
(2)隨機(jī)生成一組個(gè)體作為種群,種群中個(gè)體的數(shù)量#為偶數(shù);
(3)計(jì)算種群中最優(yōu)的個(gè)體/7。最優(yōu)個(gè)體的計(jì)算考慮了個(gè)體所代表的反射模型的文本相似度和結(jié)構(gòu)相似度。如果反射模型中類(或接口)與其映射的模塊的描述越相近,那么反射模型的文本相似度越大;如果反射模型中依賴符合的情況越多(換言之,依賴缺失和依賴分歧的情況越少),那么反射模型的結(jié)構(gòu)相似度越大。本發(fā)明的遺傳算法綜合上述兩個(gè)相似度來挑選出最優(yōu)的個(gè)體;
(4)將種群中的個(gè)體隨機(jī)兩兩配對(duì),對(duì)每對(duì)個(gè)體進(jìn)行交叉產(chǎn)生下一代個(gè)體,此時(shí)種群中個(gè)體的數(shù)量變?yōu)閕W;
(5)對(duì)新產(chǎn)生的Λ/個(gè)個(gè)體進(jìn)行變異;
(6)在種群中挑選Ν個(gè)最優(yōu)的個(gè)體作為下一代種群,并保證#個(gè)個(gè)體中盡可能無重復(fù);
(7)如果當(dāng)前種群中存在比/7更優(yōu)的個(gè)體,那么將/7更換為該個(gè)體; (8)如果到達(dá)了用戶指定的迭代次數(shù)則算法結(jié)束,反之則返回到步驟4,繼續(xù)執(zhí)行。
[0010]當(dāng)算法結(jié)束后,最優(yōu)個(gè)體/7即代表了最優(yōu)的映射關(guān)系,本發(fā)明將其作為自動(dòng)生成的反射模型。
[0011]重構(gòu)方案推薦算法
結(jié)合反饋的重構(gòu)方案推薦算法是一個(gè)多次上升的爬山算法。算法的輸入為一個(gè)輸出的反射模型》00^7,用戶的反饋/eet&ad以及用戶設(shè)定的上升次數(shù);算法的輸出是包含連續(xù)可執(zhí)行步驟的重構(gòu)方案。在算法的執(zhí)行過程中,算法會(huì)不斷模擬反射模型的變化情況來計(jì)算出一系列重構(gòu)步驟。該算法主要包含如下步驟:
(1)設(shè)全局評(píng)估值知為反射模型的綜合評(píng)估值,綜合評(píng)估值包含了反射模型的文本相似度、結(jié)構(gòu)相似度和底層模型的內(nèi)聚耦合度量值,評(píng)估值越大表示反射模型的符合度越好;
(2)設(shè)全局重構(gòu)方案為空,設(shè)局部重構(gòu)方案7oca75b7wi1/?為空;
(3 )設(shè)局部評(píng)估值localBestFi ?為當(dāng)前反射模型model的綜合評(píng)估值;
(4)對(duì)反射模型》oofe/檢測(cè)重構(gòu)機(jī)會(huì),得到檢測(cè)到的重構(gòu)機(jī)會(huì)空間refCands,如果重構(gòu)機(jī)會(huì)空間reiTaflife為空,則算法結(jié)束;
(5)結(jié)合反饋信息,在重構(gòu)機(jī)會(huì)空間re/Taflife中找到最好的重構(gòu)機(jī)會(huì)re/;
(6)將重構(gòu)機(jī)會(huì)re/加入局部重構(gòu)方案之中,并將反射模型更新為應(yīng)用重構(gòu)機(jī)會(huì)ref之后的反射模型;其做法為:
a)如果重構(gòu)機(jī)會(huì)re/的評(píng)估值呈上升趨勢(shì):設(shè)局部評(píng)估值7oca7及?為重構(gòu)機(jī)會(huì)ref的評(píng)估值,回到步驟3繼續(xù)執(zhí)行算法;
b)反之,如果重構(gòu)機(jī)會(huì)re/的評(píng)估值不呈上升趨勢(shì):如果此時(shí)局部評(píng)估值localBes tFi t的值高于全局評(píng)估值知的值,那么設(shè)全局評(píng)估值知的值為局部評(píng)估值的值,并將全局重構(gòu)方案6--5.?5.ο7--Υο/7設(shè)為局部重構(gòu)方案localSolut1n,descNum自減一次;如果上升次數(shù)descNum不為0,則回到步驟3繼續(xù)執(zhí)行算法,反之則算法結(jié)束;
最終將全局重構(gòu)方案bestSolut1n推薦給開發(fā)人員。
[0012]在步驟5中,本發(fā)明采用以下方式來結(jié)合反饋信息在重構(gòu)機(jī)會(huì)空間中找到最好的重構(gòu)機(jī)會(huì)。首先,為每一個(gè)重構(gòu)機(jī)會(huì)計(jì)算其綜合評(píng)估值,然后,對(duì)每一個(gè)重構(gòu)機(jī)會(huì)re/,在用戶的反饋中(即,已經(jīng)被用戶拒絕/接受的重構(gòu)建議)查找與該重構(gòu)機(jī)會(huì)相似的重構(gòu)建議。如果反饋中有》條被拒絕的建議與重構(gòu)機(jī)會(huì)re/相似,有/?條被接受的建議與重構(gòu)機(jī)會(huì)re/相似,且應(yīng)用重構(gòu)機(jī)會(huì)ref后產(chǎn)生的反射模型綜合評(píng)估度量值為Fref,則ref的評(píng)估值調(diào)整為:
Evaref= FrefX {Ι+αΥΧ {1+β) η
其中,〃和盧分別為用戶設(shè)定的獎(jiǎng)勵(lì)和懲罰系數(shù)。在本發(fā)明中,通過在重構(gòu)機(jī)會(huì)空間中挑選出具有最大的Evaref值的重構(gòu)機(jī)會(huì)作為最好的重構(gòu)機(jī)會(huì)。
[0013]本發(fā)明提出交互式軟件自動(dòng)化重構(gòu)方法,以開發(fā)人員給定的目標(biāo)軟件系統(tǒng)高層模塊結(jié)構(gòu)以及系統(tǒng)當(dāng)前的實(shí)現(xiàn)代碼為輸入,通過基于搜索的算法自動(dòng)生成包含一系列重構(gòu)步驟建議方案,并允許開發(fā)人員查看以及接受/拒絕重構(gòu)建議。本發(fā)明將開發(fā)人員接受或拒絕重構(gòu)建議的選擇作為用戶反饋記錄下來并在下一輪基于搜索的重構(gòu)建議生成過程中加以考慮,從而以一種迭代化的方式指導(dǎo)開發(fā)人員逐步完成重構(gòu)任務(wù)。采用本發(fā)明可以使開發(fā)人員在重構(gòu)建議的引導(dǎo)下逐步完成基于高層設(shè)計(jì)的軟件自動(dòng)化重構(gòu),從而提高軟件重構(gòu)工作的效率和質(zhì)量。
【專利附圖】
【附圖說明】
[0014]圖1為基于高層設(shè)計(jì)的交互式軟件自動(dòng)化重構(gòu)方法的總體流程圖。
[0015]圖2是方法的原型工具Refactoring Navigator的工具截圖。
【具體實(shí)施方式】
[0016]圖2為基于本發(fā)明的方法開發(fā)的原型工具。開發(fā)人員可以利用該工具刻畫預(yù)期的高層設(shè)計(jì)、得到具有連續(xù)步驟的重構(gòu)方案、交互式地給予反饋以及自動(dòng)化地執(zhí)行重構(gòu)建議?!揪唧w實(shí)施方式】如下:
(1)開發(fā)人員在工具中畫出預(yù)期的高層設(shè)計(jì),并對(duì)每個(gè)模塊做描述。在圖2中,空心三角箭頭的連線代表繼承、分叉箭頭的連線代表創(chuàng)建以及實(shí)心箭頭的連線代表其他依賴。根據(jù)圖2的設(shè)計(jì),開發(fā)人員希望10模塊能夠依賴于抽象而不依賴于具體實(shí)現(xiàn)。因此,除了創(chuàng)建關(guān)系,10模塊不允許以其他方式依賴Concrete Quest1n和Concrete Answer模塊。
[0017](2)開發(fā)人員選擇重構(gòu)范圍,重構(gòu)范圍可以是整個(gè)系統(tǒng),也可以是若干包或若干類(或接口)。在圖2中,開發(fā)人員選擇了 16個(gè)類(或接口)作為重構(gòu)范圍。
[0018](3)工具自動(dòng)將重構(gòu)范圍內(nèi)的類(或接口)映射到高層設(shè)計(jì)的模塊中。
[0019](4)開發(fā)人員根據(jù)自己的領(lǐng)域知識(shí)手動(dòng)微調(diào)映射關(guān)系,并再次生成反射模型。如圖2所示。此時(shí)有兩條斷線表示的分歧依賴,意味著底層代碼與高層設(shè)計(jì)并不一致。
[0020](5)工具根據(jù)開發(fā)人員要求推薦出重構(gòu)方案。推薦的重構(gòu)方案中包含了諸如將10模塊中的某些read*Quest1n方法移動(dòng)到對(duì)應(yīng)的Quest1n類中的重構(gòu)建議,比如,將10模塊中10類的readRankQuest1n方法移動(dòng)到RankQuest1n類中,以及將10類的readMapQuest1n 方法移動(dòng)到 MapQuest1n 類中。
[0021](6)開發(fā)人員在推薦出的重構(gòu)方案中應(yīng)用若干認(rèn)可的重構(gòu)步驟,拒絕若干不認(rèn)可的重構(gòu)步驟。比如,用戶認(rèn)可并應(yīng)用了一個(gè)移動(dòng)readRankQuest1n到RankQuest1n類的建議。
[0022](7)工具記錄下用戶反饋,并自動(dòng)重構(gòu)被認(rèn)可的重構(gòu)建議。
[0023](8)用戶再次要求工具推薦重構(gòu)方案,在新的重構(gòu)方案中更多的read*Quest1n方法移動(dòng)到對(duì)應(yīng)的Quest1n類中,并推薦將各Quest1n類中的read*Quest1n方法提升到父類Quest1n中。
[0024](9)開發(fā)人員按照工具提示應(yīng)用了方案中的一些建議,再經(jīng)過幾次類似的反饋迭代,最終消除了高層設(shè)計(jì)與底層代碼中的不一致情況。
【權(quán)利要求】
1.基于高層設(shè)計(jì)的交互式軟件自動(dòng)化重構(gòu)方法,其特征在于具體步驟為: (1)開發(fā)人員確定軟件系統(tǒng)中的重構(gòu)范圍,并通過建模工具描述與重構(gòu)范圍內(nèi)代碼相對(duì)應(yīng)的期望高層設(shè)計(jì)模型,包含模塊及模塊間的各種依賴關(guān)系; (2)對(duì)重構(gòu)范圍內(nèi)的源代碼進(jìn)行逆向分析得到底層模型,包含代碼元素以及它們之間的各種依賴關(guān)系;所述代碼元素包括如類、接口、方法、屬性,所述依賴關(guān)系包括類之間的創(chuàng)建關(guān)系、類與接口之間的繼承關(guān)系、類與方法之間的包含關(guān)系; (3)基于高層設(shè)計(jì)模型中的模塊以及底層模型中的代碼元素之間的文本相似度和結(jié)構(gòu)相似度,建立它們之間的映射關(guān)系,從而生成反映高層設(shè)計(jì)與實(shí)現(xiàn)代碼之間符合性情況的反射模型; (4)使用基于搜索的重構(gòu)方案推薦算法生成一個(gè)包含一系列重構(gòu)操作的建議重構(gòu)方案; (5)開發(fā)人員檢查建議重構(gòu)方案中的各個(gè)重構(gòu)操作,接受、拒絕或忽略各個(gè)重構(gòu)操作;所有被接受的重構(gòu)操作都將被自動(dòng)執(zhí)行,此時(shí)源代碼和底層模型將同時(shí)被相應(yīng)修改;同時(shí),被開發(fā)人員接受或拒絕的重構(gòu)建議被記錄下作為用戶反饋用于后續(xù)的建議重構(gòu)方案生成; (6)如果重構(gòu)目標(biāo)實(shí)現(xiàn)或方法無法生成新的重構(gòu)建議,則整個(gè)過程結(jié)束,否則返回步驟4繼續(xù)執(zhí)行。
2.如權(quán)利要求1所述的基于高層設(shè)計(jì)的交互式軟件自動(dòng)化重構(gòu)方法,其特征在于,步驟(3)采用遺傳算法來找到諸多映射方案中最優(yōu)的映射關(guān)系來生成最為合理的反射模型,該遺傳算法包含以下步驟: (1)將底層模型代碼元素到高層設(shè)計(jì)模塊的一個(gè)映射關(guān)系編碼為一個(gè)個(gè)體;一個(gè)個(gè)體用一個(gè)向量表示,向量的長(zhǎng)度為底層模型中類或接口的數(shù)量,向量的每一個(gè)維度的值表示該類或接口所對(duì)應(yīng)的模塊; (2)隨機(jī)生成一組個(gè)體作為種群,種群中個(gè)體的數(shù)量#為偶數(shù); (3)計(jì)算種群中最優(yōu)的個(gè)體/7,最優(yōu)個(gè)體的計(jì)算考慮了個(gè)體所代表的反射模型的文本相似度和結(jié)構(gòu)相似度;如果反射模型中類或接口與其映射的模塊的描述越相近,那么反射模型的文本相似度越大;如果反射模型中依賴符合的情況越多,那么反射模型的結(jié)構(gòu)相似度越大,遺傳算法綜合上述兩個(gè)相似度來挑選出最優(yōu)的個(gè)體; (4)將種群中的個(gè)體隨機(jī)兩兩配對(duì),對(duì)每對(duì)個(gè)體進(jìn)行交叉產(chǎn)生下一代個(gè)體,此時(shí)種群中個(gè)體的數(shù)量變?yōu)? (5)對(duì)新產(chǎn)生的#個(gè)個(gè)體進(jìn)行變異; (6)在種群中挑選N個(gè)最優(yōu)的個(gè)體作為下一代種群,并保證#個(gè)個(gè)體中盡可能無重復(fù); (7)如果當(dāng)前種群中存在比/7更優(yōu)的個(gè)體,那么將/7更換為該個(gè)體; (8)如果到達(dá)了用戶指定的迭代次數(shù)則算法結(jié)束,反之則返回到步驟4,繼續(xù)執(zhí)行; 當(dāng)算法結(jié)束后,最優(yōu)個(gè)體/7即代表了最優(yōu)的映射關(guān)系,將其作為自動(dòng)生成的反射模型。
3.如權(quán)利要求1所述的基于高層設(shè)計(jì)的交互式軟件自動(dòng)化重構(gòu)方法,其特征在于,步驟(4)所述使用基于搜索的重構(gòu)方案推薦算法,是采用結(jié)合反饋的重構(gòu)方案推薦算法,該算法的輸入為一個(gè)輸出的反射模型麗?而7,用戶的反饋辦漢/如d以及用戶設(shè)定的上升次數(shù)descNum ;算法的輸出是包含連續(xù)可執(zhí)行步驟的重構(gòu)方案,具體步驟為: (1)設(shè)全局評(píng)估值知SiZ7Yi為反射模型的綜合評(píng)估值,綜合評(píng)估值包含了反射模型的文本相似度、結(jié)構(gòu)相似度和底層模型的內(nèi)聚耦合度量值,評(píng)估值越大表示反射模型的符合度越好; (2)設(shè)全局重構(gòu)方案為空,設(shè)局部重構(gòu)方案7oca75b7wi1/?為空; (3 )設(shè)局部評(píng)估值1calBestFi ?為當(dāng)前反射模型model的綜合評(píng)估值; (4)對(duì)反射模型》oofe/檢測(cè)重構(gòu)機(jī)會(huì),得到檢測(cè)到的重構(gòu)機(jī)會(huì)空間refCands,如果重構(gòu)機(jī)會(huì)空間reiTafltfe為空,則算法結(jié)束; (5)結(jié)合反饋信息,在重構(gòu)機(jī)會(huì)空間re/Taflife中找到最好的重構(gòu)機(jī)會(huì)re/; (6)將重構(gòu)機(jī)會(huì)re/加入局部重構(gòu)方案之中,并將反射模型更新為應(yīng)用重構(gòu)機(jī)會(huì)ref之后的反射模型;其做法為: a)如果重構(gòu)機(jī)會(huì)re/的評(píng)估值呈上升趨勢(shì):設(shè)局部評(píng)估值JocaJSe1SiZ7Zi為重構(gòu)機(jī)會(huì)ref的評(píng)估值,回到步驟3繼續(xù)執(zhí)行算法; b)反之,如果重構(gòu)機(jī)會(huì)re/的評(píng)估值不呈上升趨勢(shì):如果此時(shí)局部評(píng)估值1calBestFit的值高于全局評(píng)估值知SiZ7Zi的值,那么設(shè)全局評(píng)估值知SiZ7Zi的值為局部評(píng)估值的值,并將全局重構(gòu)方案設(shè)為局部重構(gòu)方案localSolut1n,descNum自減一次;如果上升次數(shù)descNum不為O,則回到步驟3繼續(xù)執(zhí)行算法,反之則算法結(jié)束; 最終將全局重構(gòu)方案bestSolut1n推薦給開發(fā)人員。
4.如權(quán)利要求3所述的基于高層設(shè)計(jì)的交互式軟件自動(dòng)化重構(gòu)方法,其特征在于在步驟(5)中所述結(jié)合反饋信息,在重構(gòu)機(jī)會(huì)空間refCands中找到最好的重構(gòu)機(jī)會(huì)re/,采用以下方式:首先,為每一個(gè)重構(gòu)機(jī)會(huì)計(jì)算其綜合評(píng)估值Α#,然后,對(duì)每一個(gè)重構(gòu)機(jī)會(huì)re/,在用戶的反饋即已經(jīng)被用戶拒絕/接受的重構(gòu)建議中查找與該重構(gòu)機(jī)會(huì)相似的重構(gòu)建議;如果反饋中有》條被拒絕的建議與重構(gòu)機(jī)會(huì)re/相似,有/?條被接受的建議與重構(gòu)機(jī)會(huì)re/相似,且應(yīng)用重構(gòu)機(jī)會(huì)ref后產(chǎn)生的反射模型綜合評(píng)估度量值為Fref,則ref的評(píng)估值調(diào)整為:
Evaref = Fref 乂 (1+0.Y X (l+β ) 11 其中,〃和盧分別為用戶設(shè)定的獎(jiǎng)勵(lì)和懲罰系數(shù);通過在重構(gòu)機(jī)會(huì)空間中挑選出具有最大的Evaref值的重構(gòu)機(jī)會(huì)作為最好的重構(gòu)機(jī)會(huì)。
【文檔編號(hào)】G06F9/44GK104375827SQ201410540361
【公開日】2015年2月25日 申請(qǐng)日期:2014年10月14日 優(yōu)先權(quán)日:2014年10月14日
【發(fā)明者】彭鑫, 林云, 趙文耘 申請(qǐng)人:復(fù)旦大學(xué)