![基于監(jiān)控的相似方法檢測_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/8/8ff96e14-2fbd-47ac-894d-472c989ef51d/8ff96e14-2fbd-47ac-894d-472c989ef51d1.gif)
![基于監(jiān)控的相似方法檢測_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/8/8ff96e14-2fbd-47ac-894d-472c989ef51d/8ff96e14-2fbd-47ac-894d-472c989ef51d2.gif)
![基于監(jiān)控的相似方法檢測_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/8/8ff96e14-2fbd-47ac-894d-472c989ef51d/8ff96e14-2fbd-47ac-894d-472c989ef51d3.gif)
![基于監(jiān)控的相似方法檢測_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/8/8ff96e14-2fbd-47ac-894d-472c989ef51d/8ff96e14-2fbd-47ac-894d-472c989ef51d4.gif)
![基于監(jiān)控的相似方法檢測_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/8/8ff96e14-2fbd-47ac-894d-472c989ef51d/8ff96e14-2fbd-47ac-894d-472c989ef51d5.gif)
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、基于監(jiān)控的相似方法檢測 基于監(jiān)控的相似方法檢測#郭雪,劉輝*基金項目:高等學(xué)校博士學(xué)科點專項科研基金 (No.20101101120027);國家自然科學(xué)基金(No.61003065);北京理工大學(xué)優(yōu)秀青年教師資助計劃(No.2010Y0711)作者簡介:郭雪,(1987-),女,碩士生,軟件重構(gòu)。通信聯(lián)系人:劉輝,(1978-),男,福建長汀人,博士,副教授,主要研究領(lǐng)域為軟件重構(gòu),軟件維護與軟件測試。E-mail: 獲知代碼中的壞味并及時重構(gòu),降低了軟件完成之后繁瑣的重構(gòu)工作量,有效提高重構(gòu)的效率和效果?!跋嗨品椒ā笔谴?/p>
2、碼壞味中的一種,也就是同樣功能的方法重復(fù)出現(xiàn)在代碼的不同位置45 上,導(dǎo)致代碼量的增加。目前的。我們需要將相似的方法找出,并標記出其出現(xiàn)的位置,以供重構(gòu)時使用?;诒O(jiān)控的相似方法檢測,就是在實時監(jiān)控的框架內(nèi)檢測出代碼中存在的相似方法。我們將監(jiān)控與壞味檢測技術(shù)相融合,具體包括:實時監(jiān)控的方法與機制、相似方法的實時增量式檢測方法、檢測結(jié)果顯示與引導(dǎo)等。最終目標是提高重構(gòu)的效率和效果,具有較強的實用價值。50 1 檢測算法所在的系統(tǒng)環(huán)境1.1 系統(tǒng)結(jié)構(gòu)系統(tǒng)主要分為三大模塊:監(jiān)聽、相似方法檢測、視圖顯示。各模塊的主要功能如圖所示圖1 系統(tǒng)結(jié)構(gòu)圖55 Fig. 1 The system structur
3、e.監(jiān)聽模塊:一旦程序員完成某段代碼,即可進行代碼壞味檢測。當系統(tǒng)關(guān)閉時存儲檢測結(jié)果,以便再次開啟時使用。相似方法檢測模塊:負責檢測相似方法。60 輸出檢測結(jié)果:利用Smell 視圖將檢測結(jié)果輸出。利用eclipse 插件開發(fā)環(huán)境的API 可以將相似方法所處的具體位置標記出來,幫助進行軟件重構(gòu)。1.2 檢測算法1.2.1 方法檢測框架某一類(程序員剛寫好的類)中的所有方法,逐一與其它類中的方法進行比較,檢測是65 否存在相似的代碼。先將需要將被比較的類type 中所有的方法放入數(shù)組methods中。Method methods = type.getMethods();這時,我們需要遍歷整個pr
4、oject 文件。經(jīng)過幾個for 循環(huán)之后,就可以逐個對其進行檢測。Void find(type) 70 Method methods = type.getMethods(); Project A= getProject();JS=A.gettype; /得到project 中的所有類for(MethodDeclaration y : methods) / 被檢測的方法 for (IPackageFragment J : JS) ICompilationUnit r 75 = J.getCompilationUnits();for (ICompilationUnit m : r) i
5、f(m.getPath().toString().trim().equalsIgnoreCase(punit.getJavaElement().getPath().toString().trim() continue; /除去被比較的類本身IType types = m.getAllTypes();80 遍歷其他類中的所有方法,并進行檢測;將檢測結(jié)果顯示出;85 例如: 在一個project 中有兩個類student(待檢測)、teacher(已存在). 要求比較這兩個類中是否存在相似的方法。圖2 例圖Fig2The picture of example90先將student 類、teache
6、r 類中的方法分別放入兩個數(shù)組中,然后將數(shù)組1 中的每個與素與數(shù)組2 中的所有元素逐一進行比較圖3 遍歷過程圖95 Fig3 The ergodic process. 當項目中存在兩個以上的類時:圖4 例圖Fig4 The picture of example.100方法的比較過程:圖5 遍歷過程圖Fig5 The ergodic process.105先將被檢測的類student 中的所有方法放入數(shù)組1,再將其余的類放入數(shù)組2(數(shù)組2 中的元素是由類組成的)。然后,將數(shù)組2 的第一個元素teacher(類)中的方法裝入另外一個數(shù)組3.從數(shù)組1 中第一個元素(方法)f1 開始依次與數(shù)
7、組3 中的所有元素進行比較。類worker 的比較方法與teacher 類相似。從圖中可以看出,經(jīng)過幾次循環(huán)后就可以將所有方法110 覆蓋。 1.2.2 檢測算法在方法檢測框架下,很容易找到需要進行比較的方法。那么,怎樣來比較兩個方法的相似度呢?如果兩個方法相似,其結(jié)構(gòu)就會相近,其字符的相似度也會很高。所以,當比較兩個方法的形似度時,可以看成對兩個方法的字符相似度的比較。假設(shè)有兩個方法n1()、n2():void n1()print(“a=0”);,void n2()115 print(“b=3”);.可以看出這兩個函數(shù)基本是一致,現(xiàn)在對字符進行遍歷。字符匹配也可以通過數(shù)組來實現(xiàn)。首
8、先,創(chuàng)建數(shù)組charArrayA。將方法n1()以字符形式存入數(shù)組charArrayA 中:String code1=n1.getSource();ArrayList charArrayA=new ArrayList();120 for (int i=0;i<code1.length();i+)charArrayA.add(code1.charAt(i); 與n1()類似,將方法n2()也以字符形式存入另外新創(chuàng)建的數(shù)組charArrayB 中。通過比較數(shù)組中的元素來實現(xiàn)目的。125 圖6 形式轉(zhuǎn)換圖Fig6 The picture of conversion.比較兩個數(shù)組內(nèi)容,可以借助已
9、有的diff 函數(shù),該函數(shù)用來找出兩個文件(原文件和目標文件)中內(nèi)容的不同點。將數(shù)組charArrayA 與數(shù)組charArrayB 看成是兩個文件,調(diào)用diff130 函數(shù)來檢測。 diff 中的AmoutofDiffernce()函數(shù)輸出的是已經(jīng)找出的文件不同點的個數(shù),是個整數(shù)。Diff diff=new Diff(charArrayA,charArrayB);diff.diff();int totalDiff= diff.AmoutofDiffernce();1 3 5 double ratio=totalDiff/(n1.length+n2.length)將AmoutofDiffern
10、ce()的輸出值傳給整型totalDiff,再用totalDiff 的值除以兩個函數(shù)的長度和,得到的是一個相對的差異分數(shù)。利用這個分數(shù)來判定這兩個方法是否屬于相似方法。判定時可以人為設(shè)定參考值COMMONRatio,如果totalDiff 的值小于COMMONRatio 則這兩個方法被認為是相似方法。140 假設(shè)COMMONRatio 的值是0.5,上面給出的方法n1、n2 經(jīng)檢測后其ratio 的值是0.2(ratio<COMMONRatio),所以n1、n2 屬于相似方法。2 相關(guān)工作2.1 已有的重構(gòu)工具重構(gòu)工具將全部或部分重構(gòu)活動自動化,不僅降低了軟件重構(gòu)的成本,也減少引入認為1
11、45 錯誤的可能性。對重構(gòu)工具的研究發(fā)展迅速,已經(jīng)有許多的重構(gòu)工具可以被人們所使用。例如:Refactoring Browser、JRefactory、IntelliJ IDEA、Eclipse、Visual Studio 等。 2.2 針對代碼壞味檢測算法的研究要執(zhí)行重構(gòu)以提高軟件質(zhì)量,必須先找到代碼的壞味(Bad Smells)。在代碼的壞味檢測中,手工檢測具有一定的難度,所以人們一直致力于研究自動或半自動的代碼壞味檢測,150 這些檢測方式高效、方便。代碼壞味檢測技術(shù)的發(fā)展直接提高了重構(gòu)的效率。所以代碼的壞味檢測一直是了人們研究的重點。Travassos et al. 2 給出
12、了一些閱讀技術(shù)來檢測smell.這種技術(shù)針對軟件設(shè)計的各個方面都分別設(shè)有相應(yīng)的檢測,從而可以將軟件設(shè)計缺陷高效覆蓋?!败浖喿x技術(shù)”還可以通過給出指導(dǎo)性的建議進而提高效率。有實踐表明,該技術(shù)在提高軟件質(zhì)量方面前景廣闊,因為155 該技術(shù)可以在不同的環(huán)及文件類型中被運用,甚至在文件被寫時就可以予以應(yīng)用。Tourwe 和Mens 3 通過soul 語言的邏輯規(guī)則來設(shè)計smell 檢測算法。Soul 是一種項目邏輯語言,當檢測算法被編譯成功時,可以利用邏輯規(guī)則檢測bad smells。Moha et al.45利用DSL 語言(Domain Specific Language)來說明bad smel
13、l 而不是邏輯語言。DSL 是建立在對smells 的深入分析之上的,所以它被認為是強大和方便使用的。160 Munro6提出了一種在java 源代碼中基于度量值來監(jiān)測Bad Smell 的方法:通過使用一系列的軟件度量值來識別某種bad smell 的特征。然后,通過使用事先定義好的翻譯規(guī)則來對java 源代碼中的度量結(jié)果進行分析,從而為軟件引擎對bad smell 定位提供重要的指導(dǎo)。Van Rompaey et al. 7 也做了類似的工作。他提出了基于度量的方法來檢測測試中的smell,它們分別是 General Fixture 和Eager Test.165 除了適用于所有類型的通用型smells 檢測算法和框架外,為了使檢測更有效率,人們又提出來一些針對某種特殊smell 的特定的檢測算法。T.Kamiya8提出來一種用來檢測代碼是否已被克隆的新技術(shù)。它包含兩部分:輸入文本的轉(zhuǎn)換和進行token 的比較。Tsantalis 和Chatzigeorgiou9還提出了一種檢測過長函數(shù)的算法,并且通過Extract170 Method 來分解這些函數(shù)。我們可以在Men
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司行政年度工作計劃2025(13篇)
- 2025新聞記者個人工作總結(jié)(8篇)
- 2024年6月教師工作總結(jié)范文(7篇)
- 關(guān)于愛情演講2024(31篇)
- 2024-2025學(xué)年重慶市巴渝學(xué)校高一上學(xué)期期中考試歷史試卷
- 2024-2025學(xué)年內(nèi)蒙古自治區(qū)赤峰市高三上學(xué)期期中考試歷史試卷
- 2025年合伙企業(yè)員工餐飲合同
- 2025年環(huán)氧大豆油項目規(guī)劃申請報告
- 2025年制造業(yè)薪資談判集體協(xié)商協(xié)議指導(dǎo)范本
- 2025年共有債權(quán)缺失的離婚協(xié)議書規(guī)范文本
- 《機械制圖》課程教案-任務(wù)四 滾動軸承的視圖的繪制
- 2024年中考語文試題分類匯編:非連續(xù)性文本閱讀(學(xué)生版)
- 門店禮儀培訓(xùn)
- 2024年北京市平谷區(qū)中考英語二模試卷
- AQ 6111-2023個體防護裝備安全管理規(guī)范知識培訓(xùn)
- 第一屆山東省職業(yè)能力大賽濟南市選拔賽制造團隊挑戰(zhàn)賽項目技術(shù)工作文件(含樣題)
- 尿毒癥替代治療
- 家族族譜模板
- 2022年公務(wù)員多省聯(lián)考《申論》真題(黑龍江省市卷)及答案解析
- 【課件】2025屆高考英語一輪復(fù)習小作文講解課件
- “國家示范性高等職業(yè)院校建設(shè)計劃”骨干高職院校項目建設(shè)方案
評論
0/150
提交評論