本發(fā)明涉及一種基于代碼圈復(fù)雜度度量的軟件演化評估方法,屬于軟件演化與維護(hù)領(lǐng)域問題。
背景技術(shù):
:代碼復(fù)雜度是對代碼復(fù)雜程度的一種度量,是理解和維護(hù)代碼所需工作量的一種指征。代碼復(fù)雜度會直接影響到諸如可讀性、可維護(hù)性、可理解性等軟件質(zhì)量屬性。通過評估代碼復(fù)雜度,可以幫助開發(fā)人員及時了解、控制和調(diào)整代碼的復(fù)雜程度。圈復(fù)雜度是代碼復(fù)雜度的一種,是用來衡量程序中判定結(jié)構(gòu)的復(fù)雜程度的一種質(zhì)量指標(biāo)。通常,人們通過圈復(fù)雜度的度量與評估衡量軟件模塊判定結(jié)構(gòu)的復(fù)雜程度,了解預(yù)防錯誤所需測試的最少路徑條數(shù),為測試人員設(shè)計測試案例提供指導(dǎo)。經(jīng)驗表明,程序的可能錯誤數(shù)和圈復(fù)雜度值的高低有很大關(guān)系:圈復(fù)雜度偏大的程序代碼往往質(zhì)量低,且難于測試和維護(hù)。隨著軟件的演化,其源代碼會產(chǎn)生一定的變更,會對軟件的圈復(fù)雜度、軟件質(zhì)量及其后繼演化產(chǎn)生影響。有些演化操作能降低代碼的圈復(fù)雜度,提高代碼的質(zhì)量;而有些演化操作則會提高軟件的圈復(fù)雜度。很多軟件項目或者由于最初設(shè)計結(jié)構(gòu)的不合理,或者由于版本演化過程中累積問題的增多,最終在軟件復(fù)雜性得不到有效控制的情況下崩潰,導(dǎo)致軟件生命的結(jié)束。因此,在現(xiàn)有軟件開發(fā)環(huán)境下,自動化地對軟件的代碼圈復(fù)雜度進(jìn)行演化分析對于軟件的迭代開發(fā)與重構(gòu)、提高軟件質(zhì)量、延長軟件的生命周期具有重要意義,并能為軟件的演化提供評價依據(jù)。技術(shù)實現(xiàn)要素:技術(shù)問題:本發(fā)明的目的是提供一種自動化地對軟件代碼圈復(fù)雜度的演化進(jìn)行評估和分析的方法,以解決軟件演化過程中復(fù)雜度得不到有效控制的問題。較之其他軟件演化度量和評估方法,該方法注重演化過程中軟件圈復(fù)雜度的變化,實現(xiàn)對軟件復(fù)雜度的控制。技術(shù)方案:本發(fā)明方法,強調(diào)軟件演化中的質(zhì)量控制,引入代碼圈復(fù)雜度度量方法、圈復(fù)雜度閾值等,從不同層次對演化前后的軟件圈復(fù)雜度進(jìn)行度量和評估,進(jìn)而對代碼圈復(fù)雜度變化的原因進(jìn)行分析,為軟件維護(hù)方案提供參考。本發(fā)明的基于代碼圈復(fù)雜度度量的軟件演化評估方法,步驟如下:步驟1)分別為待評估軟件的當(dāng)前待測目標(biāo)版本v_current和歷史版本v_last的程序源碼構(gòu)造抽象語法樹;步驟2)根據(jù)所述步驟1)獲取的抽象語法樹,分別從系統(tǒng)層、類層和方法層三個層次對待測軟件版本的代碼進(jìn)行圈復(fù)雜度度量,所述待測軟件版本包括當(dāng)前待測目標(biāo)版本v_current和歷史版本v_last;步驟3)從類層和方法層分別評估待測軟件版本的圈復(fù)雜度度量結(jié)果,找出軟件中圈復(fù)雜度度量結(jié)果超出閾值范圍的類和方法;步驟4)對待測軟件的當(dāng)前待測目標(biāo)版本v_current和歷史版本v_last的圈復(fù)雜度度量結(jié)果按層次進(jìn)行分析比較,以確定變更發(fā)生的位置,具體為:先進(jìn)行兩個版本系統(tǒng)層圈復(fù)雜度的比較,確定兩個版本間類的增刪改;然后再進(jìn)行類層次的分析,對前后版本中圈復(fù)雜度發(fā)生變化的類,確定其方法的增刪改;最后進(jìn)行方法層次的分析,考察同名方法的圈復(fù)雜度變化;步驟5)對當(dāng)前待測目標(biāo)版本v_current和歷史版本v_last的項目源碼本身進(jìn)行分析比較,找出兩者在所述步驟4)確定的變更發(fā)生的位置的代碼差異,輸出到格式文件中;步驟6)針對當(dāng)前待測目標(biāo)版本v_current和歷史版本v_last,通過所述步驟4)得到的兩個版本中圈復(fù)雜度發(fā)生增刪改的類和方法,以及所述步驟5)得到的兩個版本的代碼差異,進(jìn)行差異定位,即根據(jù)代碼差異確定導(dǎo)致度量結(jié)果發(fā)生變化的原因,形成軟件演化評估。進(jìn)一步的,本發(fā)明的方法中,步驟2)中通過統(tǒng)計代碼解析所得的抽象語法樹中判定節(jié)點的數(shù)量來進(jìn)行代碼圈復(fù)雜度度量,規(guī)則為:判定節(jié)點是程序設(shè)計語言中表示條件判定的語句,通過條件判定來確定程序的控制流走向。進(jìn)一步的,本發(fā)明的方法中,對于java語言,所述步驟2)中代碼圈復(fù)雜度度量規(guī)則的判定節(jié)點存在于以下關(guān)鍵字所引導(dǎo)的語句中:if,for,while,do,case,catch,&&,||,:?,這些判定節(jié)點在抽象語法樹ast中對應(yīng)的節(jié)點如下表:表1.圈復(fù)雜度中判定節(jié)點和astnode對應(yīng)表進(jìn)一步的,本發(fā)明的方法中,步驟2)中分三個層次進(jìn)行代碼圈復(fù)雜度度量的具體方法是:方法層:通過掃描方法的抽象語法樹,統(tǒng)計方法中的判定節(jié)點個數(shù),將該判定節(jié)點數(shù)加1即為方法層的圈復(fù)雜度;類層次:通過掃描類的抽象語法樹,統(tǒng)計類中的判定節(jié)點個數(shù),將該判定節(jié)點數(shù)加1即為類層次的圈復(fù)雜度;同時類層次的圈復(fù)雜度應(yīng)與該類中所有方法的圈復(fù)雜度之和相等,并據(jù)此對類層次圈復(fù)雜度結(jié)果進(jìn)行校驗;系統(tǒng)層:通過掃描整個系統(tǒng)的抽象語法樹,統(tǒng)計系統(tǒng)中的判定節(jié)點個數(shù),將該判定節(jié)點數(shù)加1即為系統(tǒng)層次的圈復(fù)雜度;同時系統(tǒng)層次的圈復(fù)雜度應(yīng)與該系統(tǒng)中所有類和方法的圈復(fù)雜度之和相等,并據(jù)此對系統(tǒng)層圈復(fù)雜度進(jìn)行校驗。進(jìn)一步的,本發(fā)明的方法中,步驟3)中對當(dāng)前待測版本v_current代碼圈復(fù)雜度的評估是通過將類層次和方法層次的度量結(jié)果與相關(guān)閾值進(jìn)行比較分析完成的;方法層的圈復(fù)雜度的閾值劃分如下:圈復(fù)雜度在1-10之間,程序簡單,風(fēng)險低;復(fù)雜度在11-20之間,程序有點復(fù)雜,有點風(fēng)險;復(fù)雜度在21-50之間,程序很復(fù)雜,高風(fēng)險;復(fù)雜度>50,程序無法看懂;類層的復(fù)雜度的閾值設(shè)定為50,一個項目中復(fù)雜度超過50的類所占比例應(yīng)不大于5%。進(jìn)一步的,本發(fā)明的方法中,步驟5)的具體流程為:分別獲取軟件當(dāng)前版本v_current和前一版本v_last的.java文件的路徑;將兩個版本的源碼進(jìn)行對比,確定發(fā)生變更的所有文件路徑,并存入變更文件路徑集合fileset;遍歷所述變更文件路徑集合fileset中的路徑,并分別在v_current版本和v_last版本中去匹配相應(yīng)的路徑;將兩個版本中匹配成功的路徑文件分別輸入到源碼差異分析器changedistiller中進(jìn)行代碼差異分析;提取分析結(jié)果,提取與圈復(fù)雜變化相關(guān)的代碼變更類型,將結(jié)果輸入到.csv格式文件中。進(jìn)一步的,本發(fā)明的方法中步驟1)和步驟2)先將所導(dǎo)入的java文件轉(zhuǎn)化為抽象語法樹ast,再對該語法樹進(jìn)行遍歷,統(tǒng)計其中“判定節(jié)點”的數(shù)量,以度量該java文件的圈復(fù)雜度。其計算公式為:java文件的圈復(fù)雜度=判定節(jié)點數(shù)+1............................公式1其中,判定節(jié)點確定為java語言中以下關(guān)鍵字所引導(dǎo)的語句:if,for,while,do,case,catch,&&,||,:?(三目運算符)。這些判定節(jié)點在抽象語法樹ast中對應(yīng)的節(jié)點(astnode)如上述表1。在此基礎(chǔ)之上,我們從系統(tǒng)層、類層次以及方法層三個層次對v_current的軟件代碼圈復(fù)雜度進(jìn)行度量。系統(tǒng)層圈復(fù)雜度度量將對項目目錄中每一個.java文件中的判定結(jié)點進(jìn)行統(tǒng)計。統(tǒng)計計數(shù)器初值為0,每訪問到一個判定結(jié)點,統(tǒng)計計數(shù)器加1;由于方法的圈復(fù)雜度的值最小為1,所以每訪問到一個方法聲明的時候,也會對統(tǒng)計計數(shù)器加1。即,系統(tǒng)層的圈復(fù)雜度值為所有類中的所有方法的圈復(fù)雜度之和。類層圈復(fù)雜度度量統(tǒng)計并記錄項目目錄中各個類的全名及其圈復(fù)雜度;類的圈復(fù)雜度計算為類中每個方法的圈復(fù)雜度之和。方法層圈復(fù)雜度度量統(tǒng)計并記錄項目中各個方法的全名及其圈復(fù)雜度,如公式1所示,圈復(fù)雜度值為判定節(jié)點數(shù)加1。獲取了v_current的圈復(fù)雜度數(shù)據(jù)之后,可以按層次對其進(jìn)行復(fù)雜度評估,考察其類層次和方法層次的復(fù)雜度是否超出閾值范圍。系統(tǒng)層圈復(fù)雜度與系統(tǒng)的規(guī)模密切相關(guān),因此沒有閾值定義。根據(jù)業(yè)界常用的標(biāo)準(zhǔn),本發(fā)明對方法層圈復(fù)雜度的閾值劃分如下:圈復(fù)雜度在1-10之間,程序簡單,風(fēng)險低;復(fù)雜度在11-20之間,程序有點復(fù)雜,有點風(fēng)險;復(fù)雜度在21-50之間,程序很復(fù)雜,高風(fēng)險;復(fù)雜度>50,程序無法看懂。由于沒有找到一個大家普遍認(rèn)可的類層圈復(fù)雜度閾值規(guī)范,本發(fā)明進(jìn)行了類層圈復(fù)雜度閾值分析實驗以獲取經(jīng)驗數(shù)據(jù):通過對github開源代碼庫(https://github.com)中排名在前157的基于java語言的開源項目的圈復(fù)雜度的分析獲取類層圈復(fù)雜度的閾值。由于這157個開源項目都是被公認(rèn)為開發(fā)和維護(hù)比較好的開源項目,藉此可以確定類層圈復(fù)雜度閾值的合理性。閾值是在對上述157個項目進(jìn)行類層次復(fù)雜度度量的基礎(chǔ)上得到的,具體方法如下:(1)對這157個項目分別進(jìn)行類層圈復(fù)雜度的度量。通過度量,我們共得到了132540個類的圈復(fù)雜度信息。(2)分析這些數(shù)據(jù)得到其平均值u和標(biāo)準(zhǔn)差s。通過處理這132540個類的圈復(fù)雜度數(shù)據(jù),我們得到其平均值u為13.4,標(biāo)準(zhǔn)差為36.7。(3)將閾值設(shè)置為u+s。通過對u和s的計算,得到的類層圈復(fù)雜度閾值取整后為50。在這157個項目的132540個類中,類層圈復(fù)雜度超過50的類個數(shù)為6432,占比僅為5%,剩下95%的類的圈復(fù)雜度都是在50以下。據(jù)此,本發(fā)明對類層圈復(fù)雜度的閾值劃分在50以內(nèi);一個項目中應(yīng)將絕大多數(shù)(95%)類的復(fù)雜度控制在50以內(nèi)。如果一個類的圈復(fù)雜度超過50,則視為復(fù)雜類,在后續(xù)演化中可以考慮拆分。如果一個項目中超過5%的類都出現(xiàn)了圈復(fù)雜度超過50的情況,則該項目的類層圈復(fù)雜度過高,后續(xù)演化中應(yīng)考慮架構(gòu)上的優(yōu)化。進(jìn)一步的,本發(fā)明的方法中步驟4)通過分析相鄰版本的源碼找出兩版本之間的代碼差異,將結(jié)果輸出到格式文件(.csv文件)中。具體算法描述如下:(1)分別獲取軟件當(dāng)前版本v_current和前一版本v_last的.java文件的路徑;(2)根據(jù)步驟4)的結(jié)果,確定發(fā)生變更的所有文件路徑,并存入變更文件路徑集合fileset;(3)遍歷fileset中的路徑,并分別在v_current版本和v_last版本中去匹配相應(yīng)的路徑;(4)將兩個版本中匹配成功的路徑文件分別輸入到源碼差異分析器(changedistiller)中進(jìn)行分析;(5)提取分析結(jié)果,提取與圈復(fù)雜變化相關(guān)的代碼變更類型,將結(jié)果輸入到.csv格式文件中。本發(fā)明方法可以在對軟件的代碼圈復(fù)雜度進(jìn)行度量評估的基礎(chǔ)上,對演化過程中軟件各版本的代碼復(fù)雜度進(jìn)行對比,對版本間代碼復(fù)雜度的變化進(jìn)行定位和分析。本發(fā)明利用代碼圈復(fù)雜度度量與評估,分析軟件演化過程中代碼復(fù)雜度變化的問題。在軟件演化過程中,利用上述方法對軟件各個演化版本進(jìn)行代碼圈復(fù)雜度的度量和評估,其評估結(jié)果可以展現(xiàn)演化過程中軟件代碼的質(zhì)量變化。對于演化過程中復(fù)雜度發(fā)生了較大變化的版本,可進(jìn)行相鄰版本之間的代碼差異分析,確定變更發(fā)生的位置,形成分析報告。相關(guān)人員可以根據(jù)分析報告了解當(dāng)前版本軟件與前一版本相比發(fā)生了哪些演化,分析演化過程中軟件代碼復(fù)雜度變化的原因,演化操作對代碼復(fù)雜度的影響。有益效果:本發(fā)明與現(xiàn)有技術(shù)相比,具有以下優(yōu)點:本發(fā)明方法通過對eclipsejdt生成的抽象語法樹進(jìn)行判定節(jié)點的分析和統(tǒng)計,從方法層、類層和系統(tǒng)層度量軟件代碼的圈復(fù)雜度,主要用于發(fā)現(xiàn)軟件演化中代碼復(fù)雜度的變化并對其進(jìn)行原因分析,與現(xiàn)有技術(shù)相比,具有以下優(yōu)點:(1)本方法利用eclipsejdt將待測java軟件轉(zhuǎn)化為抽象語法樹,通過對抽象語法樹的遍歷統(tǒng)計規(guī)定范圍內(nèi)代碼的判定節(jié)點個數(shù)來計算圈復(fù)雜度,能夠從不同層面分別計算代碼的圈復(fù)雜度。傳統(tǒng)的圈復(fù)雜度度量通常用于面向過程程序中的單個函數(shù),或者用于面向?qū)ο蟪绦蛑械姆椒▽用?;本方法從系統(tǒng)層、類層次以及方法層次三個層面對軟件的圈復(fù)雜度演化進(jìn)行全面的度量和評估。(2)本方法通過對軟件演化過程中各版本各層面的圈復(fù)雜度度量和評估,能夠展現(xiàn)演化過程中軟件代碼各個層面上的復(fù)雜度變化;及時對復(fù)雜度超標(biāo)的方法和類提出預(yù)警;及時發(fā)現(xiàn)演化過程中程序變復(fù)雜的趨勢,并對軟件開發(fā)人員提出預(yù)警。目前,有一些方法通過對軟件復(fù)雜度的度量和評估做到了對其中復(fù)雜度偏高的方法進(jìn)行預(yù)警,但目前尚未發(fā)現(xiàn)有方法針對演化過程中的復(fù)雜度變化趨勢做出預(yù)警。(3)本方法支持對軟件演化過程中圈復(fù)雜度發(fā)生明顯變化的版本進(jìn)行原因分析。現(xiàn)有的代碼復(fù)雜度度量方法和工具僅提供對代碼復(fù)雜度的度量,而代碼變更分析方法則只提供了對代碼整體變更的分析,并不針對復(fù)雜度變化,因而得出的變更信息種類繁雜,難以評判。本方法在獲取各個軟件版本類層次的圈復(fù)雜度數(shù)據(jù)的基礎(chǔ)上,通過對比分析獲取相鄰版本中各類的復(fù)雜度變化情況,再通過相鄰版本軟件源碼比對檢測代碼圈復(fù)雜度發(fā)生了變化的類和方法,對其變更類型、變更細(xì)節(jié)進(jìn)行詳盡分析,從而可以定位出圈復(fù)雜度演化的原因。附圖說明圖1是基于代碼圈復(fù)雜度度量的軟件演化評估方法流程圖,表示典型的通過圈復(fù)雜度度量、評估和原因分析促進(jìn)軟件演化的整個流程。具體實施方式下面結(jié)合實施例和說明書附圖對本發(fā)明作進(jìn)一步的說明。圖1給出了基于代碼圈復(fù)雜度度量的軟件演化評估方法的流程。實施例中所使用項目為java開源軟件項目jeditor。jeditor是一個基于java的開源文本編輯器,截止目前發(fā)布了7個版本,代碼行數(shù)在13098-13635之間,下載地址是http://sourceforge.net/projects/jeditor/files/。進(jìn)行圈復(fù)雜度度量評估的的實施例為jeditor0.2版本;在對jeditor各個版本分別進(jìn)行了度量的基礎(chǔ)上,我們選擇了復(fù)雜度變化最大的jeditor0.4和jeditor0.4.1進(jìn)行圈復(fù)雜度演化原因分析的實施例。具體實施方式為:步驟1)使用jdt對jeditor0.2的程序源代碼進(jìn)行代碼解析,生成抽象語法樹。抽象語法樹(abstractsyntaxtree,ast)作為程序的一種中間表示形式,在代碼解析、程序分析等諸多領(lǐng)域有廣泛的應(yīng)用。它將java源代碼映射為樹的形式,每個java語法結(jié)構(gòu)被表示成ast節(jié)點。java源碼中的判定節(jié)點(如if,for等)均被解析為相應(yīng)的ast節(jié)點(astnode),如ifstatement、forstatement等。具體映射規(guī)則請見表1。步驟2)根據(jù)解析后的ast樹對jeditor0.2進(jìn)行方法層次、類層次和系統(tǒng)層次的圈復(fù)雜度度量和評估。系統(tǒng)層度量掃描整個版本的所有.java文件的ast樹,對每個.java文件中的判定節(jié)點個數(shù)進(jìn)行統(tǒng)計,每訪問到一個判定節(jié)點,圈復(fù)雜度就加1;同時由于方法的圈復(fù)雜度的最小值為1,所以每訪問到一個方法聲明時,系統(tǒng)層的圈復(fù)雜度也會加1。以此方式度量出整個系統(tǒng)的圈復(fù)雜度。類層次度量做相似的操作,對版本中各個類的判定節(jié)點個數(shù)進(jìn)行統(tǒng)計,并存入類層圈復(fù)雜度信息數(shù)據(jù)庫表(classmccabeinfo)中。該信息表中存放了項目的名稱、版本號、類名、所屬包名、文件名以及類的圈復(fù)雜度信息。方法層度量針對每一個方法進(jìn)行判定節(jié)點的統(tǒng)計,并將度量結(jié)果存入方法層圈復(fù)雜度信息數(shù)據(jù)庫表(methodmccabeinfo)中。該信息表中存放了項目的名稱、版本號、方法所屬包名、方法所屬類名、文件名、方法名以及方法的圈復(fù)雜度信息。度量完成后,可根據(jù)閾值對jeditor0.2版本中的類和方法進(jìn)行評估分析。根據(jù)系統(tǒng)層圈復(fù)雜度度量,可得:jeditor0.2的系統(tǒng)圈復(fù)雜度值為1983。因為系統(tǒng)層圈復(fù)雜度度量結(jié)果與系統(tǒng)規(guī)模息息相關(guān),無法以普通評估標(biāo)準(zhǔn)對其進(jìn)行評估,將在演化評估中對其進(jìn)行分析。根據(jù)類層圈復(fù)雜度度量,可得:jedtor0.2類總數(shù)為96個,其中圈復(fù)雜度小于50的有85個,占總類數(shù)目的88.54%;復(fù)雜度大于等于50的類有11個,占比11.46%。根據(jù)我們對類層圈復(fù)雜度的閾值定義,目前超過閾值的類占比11.46%,超過5%,建議予以調(diào)整。類層度量還可得到所有復(fù)雜度大于閾值50的類的全名,并按照復(fù)雜度由大到小的順序排列。jeditor0.2中圈復(fù)雜度最高的類為jeditor,圈復(fù)雜度260。通過人工查看源碼,發(fā)現(xiàn)這個類的代碼行達(dá)到了2746行,屬性有44個,方法有60個,明顯類中包含功能太多。根據(jù)方法層圈復(fù)雜度度量,可得:jeditor0.2項目版本的方法總數(shù)為550個,圈復(fù)雜度小于10的方法有522個,占總方法個數(shù)的94.91%;圈復(fù)雜度在10到20之間的有14個,占比為2.55%;圈復(fù)雜度在20到50之間的方法有8個,占比為1.45%;圈復(fù)雜度大于50的方法為6個,占比為1.09%。具體數(shù)據(jù)如表2所示:表2.方法的圈復(fù)雜度分布表方法圈復(fù)雜度(cc)范圍方法個數(shù)所占比例cc<=1052294.91%10<cc<=20142.55%20<cc<=5081.45%cc>5061.09%方法層度量也可得到所有復(fù)雜度大于閾值的方法的全名,并按照復(fù)雜度由大到小的順序排列。jeditor0.2項目版本中圈復(fù)雜度最高的方法值為130,是org.jeditor.scripts.perltokenmarker類中的marktokensimpl(byte,segment,int)方法。從軟件代碼庫中獲取jeditor項目的其它6個版本的源碼,分別按照步驟1)和步驟2)進(jìn)行代碼解析和各層次的圈復(fù)雜度度量。jeditor項目各版本系統(tǒng)層圈復(fù)雜度度量結(jié)果如下:表3.jeditor各版本的系統(tǒng)層圈復(fù)雜度jeditor版本號0.20.30.40.4.10.4.20.4.30.4.4系統(tǒng)層圈復(fù)雜度cc1983198520002032204720472049jeditor項目各版本類層圈復(fù)雜度度量結(jié)果如下:表4.jeditor各版本的類層圈復(fù)雜度jeditor項目各版本方法層圈復(fù)雜度度量結(jié)果如下:表5.jeditor各版本的方法層圈復(fù)雜度從表3可以看到:各版本中系統(tǒng)圈復(fù)雜度最低的是0.2版本,為1983;最高的是0.4.4版本,為2049。從整體趨勢上看,jeditor項目的圈復(fù)雜度逐漸提高,在0.4.2版本后趨于穩(wěn)定。變化幅度最大的是0.4到0.4.1版本,但復(fù)雜度增加的數(shù)值較小,所以可以看出jeditor項目的整體邏輯結(jié)構(gòu)很穩(wěn)定,項目版本間的變化較小。因此,以下的對比分析將針對變化幅度最大的0.4到0.4.1版本進(jìn)行。步驟3)對jeditor0.4和0.4.1版本的類層復(fù)雜度信息表(classmccabeinfo)中調(diào)取兩個版本中類信息進(jìn)行分析和比較,定位發(fā)生變化的類;然后從相應(yīng)版本方法層復(fù)雜度信息表(methodmccabeinfo)中調(diào)取類信息所有度量結(jié)果進(jìn)行分析比較,找出其中質(zhì)量指標(biāo)變化之處。通過對兩個版本類層次度量值的比對發(fā)現(xiàn)有3個類發(fā)生了變化,其中有一個是新增類。由系統(tǒng)分析得:兩個變更類是jappeditor類和filepane類,0.4.1版的新增類是settingsdialog,它們都屬于org.jeditor.app包。步驟5)對jeditor0.4和0.4.1版本的項目源碼本身進(jìn)行分析比較,找出兩者的代碼差異;進(jìn)行差異原因分析,對導(dǎo)致度量結(jié)果各項變化的原因進(jìn)行定位,并將結(jié)果輸出到csv文件中。通過對兩個版本的項目源碼進(jìn)行去重比對,發(fā)現(xiàn):jappeditor類中新增3個方法,刪除2個方法,同時其中的actionperformed方法復(fù)雜度由2降為1;filepane類中新增1個方法;0.4.1版本的新增類settingsdialog中有19個方法。方法名在此不再贅述。上述實施例僅是本發(fā)明的優(yōu)選實施方式,應(yīng)當(dāng)指出:對于本
技術(shù)領(lǐng)域:
的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和等同替換,這些對本發(fā)明權(quán)利要求進(jìn)行改進(jìn)和等同替換后的技術(shù)方案,均落入本發(fā)明的保護(hù)范圍。當(dāng)前第1頁12