前言:想要寫出一篇引人入勝的文章?我們特意為您整理了軟件工程中代碼異味檢測(cè)方法分析范文,希望能給你帶來(lái)靈感和參考,敬請(qǐng)閱讀。
摘要:在軟件工程中,軟件重構(gòu)具有重要意義,它可以提高軟件的可維護(hù)性、可擴(kuò)展性、可重用性,進(jìn)而改善軟件質(zhì)量。在軟件重構(gòu)中,代碼異味檢測(cè)是其中的重要組成部分。目前,代碼異味檢測(cè)的相關(guān)研究劃分為幾個(gè)類別。在對(duì)基于搜索的代碼異味檢測(cè)方法進(jìn)行研究后,選擇決策樹(shù)算法來(lái)對(duì)四個(gè)代碼異味進(jìn)行檢測(cè),并取得不錯(cuò)的效果。
關(guān)鍵詞:軟件工程;軟件重構(gòu);代碼異味;決策樹(shù)
0引言
隨著計(jì)算機(jī)科學(xué)的進(jìn)步和發(fā)展,越來(lái)越多的行業(yè)和領(lǐng)域中需要使用計(jì)算機(jī)技術(shù),各個(gè)行業(yè)的相關(guān)軟件也相繼被開(kāi)發(fā)出來(lái)。蘋果商店的應(yīng)用超過(guò)了百萬(wàn),桌面軟件和專業(yè)軟件數(shù)量更多。在軟件開(kāi)發(fā)中維護(hù)費(fèi)用是開(kāi)發(fā)成本的2-100倍[1]。因此,為了降低軟件開(kāi)發(fā)中維護(hù)費(fèi)用,改善軟件的結(jié)構(gòu),提高軟件的可擴(kuò)展性和可重用性,有必要進(jìn)行軟件重構(gòu)[2]。在軟件工程中,軟件重構(gòu)用于調(diào)整面向?qū)ο筌浖膬?nèi)部結(jié)構(gòu),提高軟件的可維護(hù)性、可擴(kuò)展性、可重用性,進(jìn)而改善軟件質(zhì)量,同時(shí)軟件的外部行為保持不變[3-4]。軟件經(jīng)過(guò)重構(gòu),可以提高代碼的可讀性,改善內(nèi)部結(jié)構(gòu)并且延長(zhǎng)代碼的生命周期。對(duì)于大型軟件項(xiàng)目的開(kāi)發(fā),軟件重構(gòu)具有重要意義。在軟件重構(gòu)中,需要先進(jìn)行代碼異味檢測(cè),代碼異味會(huì)暴露出一些軟件中的問(wèn)題,根據(jù)這些問(wèn)題,工程師會(huì)做進(jìn)一步檢查和重構(gòu)。在重構(gòu)過(guò)程中,代碼異味檢測(cè)是重要步驟。
1相關(guān)工作
代碼異味檢測(cè)的相關(guān)研究從1999年開(kāi)始,至今有將近20年研究歷史。隨著計(jì)算機(jī)學(xué)科的發(fā)展,對(duì)于代碼異味檢測(cè)的研究出現(xiàn)了不同的分支,主要分為以下幾個(gè)類別?;谑止さ拇a異味檢測(cè)方法,這個(gè)方法在代碼異味研究早期使用。Travassos等人創(chuàng)建了一個(gè)“閱讀技術(shù)”的集合,通過(guò)在紙上列舉清單,使用觀察方法幫助人們找到相關(guān)信息,并識(shí)別軟件構(gòu)件中的缺點(diǎn),通過(guò)這種方式來(lái)改善軟件質(zhì)量[5]。但這類方法具有一定缺點(diǎn),對(duì)于大型系統(tǒng)來(lái)說(shuō),手工進(jìn)行代碼異味檢測(cè)的效率低下?;诙攘康拇a異味檢測(cè)方法,通過(guò)使用如代碼行數(shù)、參數(shù)個(gè)數(shù)、代碼字符數(shù)等數(shù)據(jù)作為度量來(lái)檢測(cè)代碼異味。Marinescu等人開(kāi)發(fā)了一個(gè)Eclipse插件,插件將設(shè)計(jì)問(wèn)題量化,根據(jù)問(wèn)題設(shè)置相應(yīng)的度量值,并用于檢測(cè)4種代碼異味。通過(guò)使用插件能夠持續(xù)評(píng)估系統(tǒng)質(zhì)量,并幫助開(kāi)發(fā)者進(jìn)行軟件重構(gòu)[6]。基于度量的方法,準(zhǔn)確性依賴于閾值的選擇,但對(duì)于標(biāo)準(zhǔn)閾值,現(xiàn)在沒(méi)有一致的定論。并且該方法受限于檢測(cè)比較簡(jiǎn)單的代碼異味,對(duì)于較復(fù)雜的代碼異味不能直接用度量檢測(cè)?;诎Y狀的代碼異味檢測(cè)方法,通過(guò)對(duì)代碼異味定義和描述進(jìn)行分析,提取特征和標(biāo)記,利用檢測(cè)算法進(jìn)行檢測(cè),判斷是否具有代碼異味。Moha等人通過(guò)分析獲取代碼異味關(guān)鍵詞列表,然后使用領(lǐng)域特殊語(yǔ)言形成規(guī)則卡片,最后根據(jù)建模生成檢測(cè)算法,對(duì)15個(gè)代碼異味進(jìn)行檢測(cè)[7]?;诎Y狀的方法和代碼異味癥狀有關(guān),但是目前對(duì)于異味癥狀沒(méi)有一致的標(biāo)準(zhǔn)定義,因此該方法受到一定的限制?;诟怕实拇a異味檢測(cè)方法,統(tǒng)計(jì)代碼中類之間的屬性和關(guān)系的數(shù)據(jù),結(jié)合模糊邏輯規(guī)則和數(shù)學(xué)分析來(lái)檢測(cè)代碼異味。Ananda等人提出一種量化方法,結(jié)合直接關(guān)聯(lián)和間接關(guān)聯(lián)的數(shù)量關(guān)系,利用傳播概率矩陣來(lái)檢測(cè)2種重要代碼異味[8]。這類方法使用概率統(tǒng)計(jì)來(lái)分析檢測(cè)代碼異味,對(duì)于不方便量化的代碼異味檢測(cè)效果有限。基于可視化的代碼異味檢測(cè)方法,結(jié)合自動(dòng)檢測(cè)工具和人的手動(dòng)檢測(cè)來(lái)識(shí)別代碼異味。Emerson等人使用一個(gè)可交互的代碼異味檢測(cè)工具來(lái)快速觀察和認(rèn)識(shí)代碼異味,通過(guò)不同的角度來(lái)理解和可視化代碼異味[9]。由于在方法中結(jié)合人的手動(dòng)檢測(cè),因此該類方法受限于人的效率,可擴(kuò)展性不強(qiáng)?;谒阉鞯拇a異味檢測(cè)方法,使用不同的算法直接從源代碼中識(shí)別和檢測(cè)代碼異味,其中大部分檢測(cè)使用機(jī)器學(xué)習(xí)相關(guān)算法。對(duì)于機(jī)器學(xué)習(xí)方法,需要對(duì)輸入進(jìn)行處理,根據(jù)標(biāo)準(zhǔn)輸入來(lái)得到最后的分類輸出結(jié)果。Fontana等人使用機(jī)器學(xué)習(xí)技術(shù)進(jìn)行代碼異味檢測(cè),利用機(jī)器學(xué)習(xí)方法對(duì)代碼異味進(jìn)行分類,自動(dòng)檢測(cè)代碼異味。他們使用了16種機(jī)器學(xué)習(xí)算法,對(duì)4種代碼異味DataClass,LargeClass,FeatureEnvy,LongMethod進(jìn)行檢測(cè),并在軟件系統(tǒng)中進(jìn)行實(shí)驗(yàn),并通過(guò)人工確認(rèn)來(lái)構(gòu)造代碼異味樣本,把這些樣本作為機(jī)器學(xué)習(xí)的標(biāo)準(zhǔn)輸入,最后通過(guò)交叉驗(yàn)證對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行評(píng)價(jià)[10]。基于搜索的方法的算法成功依賴于數(shù)據(jù)集和訓(xùn)練集的質(zhì)量,在處理未知和變化的代碼異味時(shí)受到一定限制?;趨f(xié)作的代碼異味檢測(cè)方法,以合作的方式執(zhí)行不同的活動(dòng)來(lái)改善方法效果,提高檢測(cè)方法的準(zhǔn)確性和性能。目前相關(guān)文獻(xiàn)較少,Abdelmoez等人使用兩個(gè)并行算法加速搜索過(guò)程,減少搜索空間,使用風(fēng)險(xiǎn)評(píng)估來(lái)檢測(cè)代碼異味[11]。但這個(gè)方法用于檢測(cè)其他代碼異味時(shí),存在一些泛化問(wèn)題。
2異味檢測(cè)方法
本文選擇基于搜索的代碼異味檢測(cè)方法,采用機(jī)器學(xué)習(xí)算法來(lái)對(duì)所選擇的幾種代碼異味進(jìn)行識(shí)別。在選擇代碼異味時(shí),主要考慮幾個(gè)方面,代碼異味有較高出現(xiàn)頻率,代碼異味對(duì)于軟件質(zhì)量有較大負(fù)面影響,代碼異味已經(jīng)有相關(guān)研究文獻(xiàn)和應(yīng)用實(shí)現(xiàn)[10]。根據(jù)要求,最后本文選擇了DataClass,DuplicatedCode,Inappro-priateIntimacy,LongMethod四個(gè)代碼異味進(jìn)行檢測(cè)。通過(guò)對(duì)相關(guān)機(jī)器學(xué)習(xí)算法的研究和比較,發(fā)現(xiàn)在代碼異味檢測(cè)中,決策樹(shù)算法具有較好的分類效果[10]。在本文中,使用J48決策樹(shù)算法作為檢測(cè)算法,對(duì)所選擇的四個(gè)代碼異味進(jìn)行識(shí)別。本文使用k重交叉驗(yàn)證來(lái)對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行驗(yàn)證,通過(guò)算法的精確率,召回率以及定義的到目標(biāo)精確率平均距離來(lái)比較算法效果[12],其中,P表示精確率,R表示召回率,TP表示正確正類,F(xiàn)P表示錯(cuò)誤正類,F(xiàn)N表示錯(cuò)誤負(fù)類,D表示到目標(biāo)精確率平均距離,TAPi表示某個(gè)實(shí)驗(yàn)中精確率,TAP表示目標(biāo)精確率。通過(guò)比較實(shí)驗(yàn),可以知道,本文使用的異味檢測(cè)方法,在選擇的四種代碼異味上具有較好的識(shí)別效果。
3結(jié)語(yǔ)
現(xiàn)有的代碼異味檢測(cè)方法劃分為幾個(gè)類別,在對(duì)基于搜索的代碼異味檢測(cè)方法進(jìn)行研究后,本文選擇決策樹(shù)算法來(lái)對(duì)代碼異味進(jìn)行檢測(cè),并在選擇的四種代碼異味上取得了不錯(cuò)的識(shí)別效果。
作者:李炎武 單位:四川大學(xué)計(jì)算機(jī)學(xué)院