一種生成包圖的Java程序包概要化方法
【專利摘要】本發(fā)明提出了一種生成包圖的Java程序包概要化方法,主要用于解決在軟件開發(fā)和維護(hù)過(guò)程中,因?yàn)槿鄙傥臋n而影響軟件理解的問(wèn)題,本發(fā)明涉及到的關(guān)鍵操作包括:(1)包標(biāo)簽確定,通過(guò)統(tǒng)計(jì)包中類的模式的分布情況,分析出包的標(biāo)簽;(2)內(nèi)容描述,在已有包標(biāo)簽的基礎(chǔ)上,對(duì)包中的重要的類進(jìn)行提取,提取出類后對(duì)類中的方法進(jìn)行過(guò)濾,針對(duì)方法簽名生成描述性語(yǔ)言,并繪制在表格中;(3)包圖的生成。根據(jù)包中類與外部包的調(diào)用關(guān)系,建立包與包之間的關(guān)系,生成包圖,本發(fā)明能夠更好地從系統(tǒng)中的代碼文件的關(guān)系來(lái)理解整個(gè)系統(tǒng)程序,更便于人們從宏觀上對(duì)系統(tǒng)有整體的理解,本發(fā)明可用于軟件的開發(fā)和維護(hù)中。
【專利說(shuō)明】一種生成包圖的Java程序包概要化方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種軟件概要化方法,特別涉及一種Java程序包概要化方法,屬于軟件工程領(lǐng)域。
【背景技術(shù)】
[0002]通常情況下,在軟件開發(fā)和維護(hù)過(guò)程中,因?yàn)槿鄙傥臋n和注釋等原因,開發(fā)人員和維護(hù)人員不得不需要去閱讀、瀏覽大量的源代碼,這無(wú)疑會(huì)降低人們的工作效率。研究者們針對(duì)軟件系統(tǒng)的程序理解投入了大量的精力,其中有很多有效的程序理解方法。比如程序依賴關(guān)系的分析,程序的聚類等,而這些方法通常缺乏對(duì)程序功能特征方面的理解。另外,目前出現(xiàn)了一種比較流行的程序概要化技術(shù),它是通過(guò)對(duì)一個(gè)軟件系統(tǒng)方法的種類和分布進(jìn)行分析,自動(dòng)對(duì)一段代碼生成簡(jiǎn)單的摘要,這樣可輔助人員對(duì)程序進(jìn)行理解。當(dāng)前,程序概要化技術(shù)基本都是在較小的程序中的方法粒度層次進(jìn)行,但是程序中某個(gè)方法通常是軟件功能的某個(gè)很小的部分,開發(fā)人員需要對(duì)每個(gè)方法的摘要進(jìn)行分析才能去分析類層次或者更大的包層次的程序的功能,從而不利于開發(fā)人員很快地對(duì)整個(gè)軟件進(jìn)行理解。因此,方法層次的概要化技術(shù)還沒(méi)有在實(shí)際開發(fā)中得到很廣的應(yīng)用。
【發(fā)明內(nèi)容】
[0003]本發(fā)明的目的是提供一種生成包圖的Java程序包概要化方法,用于解決在軟件開發(fā)和維護(hù)過(guò)程中,因?yàn)槿鄙傥臋n而影響工作效率的問(wèn)題,從而提高在無(wú)開發(fā)文檔的情況下的軟件系統(tǒng)理解,本發(fā)明能夠更好地從系統(tǒng)中的代碼文件的關(guān)系來(lái)理解整個(gè)系統(tǒng)程序,更便于人們從宏觀上對(duì)系統(tǒng)有整體的理解。
[0004]本發(fā)明的目的是這樣實(shí)現(xiàn)的:一種生成包圖的Java程序包概要化方法,其特征在于,包括以下步驟:
步驟I):根據(jù)確定的類的功能分類,建立包的類別分析表格;
步驟2):分析包中內(nèi)容確定標(biāo)簽:
a)如果包中含有接口;使用公式I implement I / I classes I >= Θ , implement表示包中實(shí)現(xiàn)接口功能的類的數(shù)量,classes表示包中所有的類的數(shù)量,Θ表示一個(gè)預(yù)定值,所述Θ界于30%至100%之間,接口類標(biāo)簽即為包的最終標(biāo)簽,并且直接跳轉(zhuǎn)至步驟3);
b)如果包中不含有接口,或者接口數(shù)量不滿足公式,達(dá)不到預(yù)定值;根據(jù)步驟I)中的表格,分析包中不同類別的類所占包中所有類的比例,并對(duì)分析結(jié)果降序排列,通過(guò)比較占最大比例的類與所有其他類之間的比例差值來(lái)確定最終包的主標(biāo)簽及子標(biāo)簽,主標(biāo)簽是占最大比例的類,子標(biāo)簽為類的類別名稱,同時(shí)根據(jù)標(biāo)簽篩選內(nèi)容;
b_l)根據(jù)包標(biāo)簽中的子標(biāo)簽,選擇包中的與該標(biāo)簽相符合的類,并進(jìn)行降序排列,設(shè)定閾值k=30%,對(duì)排序結(jié)果進(jìn)行提??;
b-2)再將上述提取的結(jié)果再一次進(jìn)行關(guān)鍵內(nèi)容提取。對(duì)各個(gè)類所對(duì)應(yīng)的不同類別的方法進(jìn)行提取,同時(shí)限定每個(gè)類中選出的方法的數(shù)量小于等于30% ; b-3)再將選出的方法的簽名提取出來(lái)與類別名稱結(jié)合生成包的內(nèi)容描述表格;
步驟3):分析包與包之間的關(guān)系;
3-1)先對(duì)每個(gè)包中的成員根據(jù)訪問(wèn)權(quán)限進(jìn)行過(guò)濾,即去除掉private權(quán)限和protected權(quán)限的成員,再根據(jù)已確定的包的標(biāo)簽進(jìn)行排序,排序的規(guī)則是根據(jù)包與包之間關(guān)系的復(fù)雜程度降序排列;
3-2)分析包與包之間的依賴關(guān)系,建立依賴關(guān)系分析表;如果目標(biāo)包中使用了外部包的類中的成員,就會(huì)對(duì)表格中相應(yīng)的數(shù)據(jù)進(jìn)行增加,在對(duì)目標(biāo)包分析結(jié)束后,一個(gè)完整的包間調(diào)用關(guān)系表就會(huì)生成;
3-3)分析包與包之間的泛化關(guān)系,建立泛化關(guān)系分析表;如果存在目標(biāo)包中類繼承于外部包中的類,就會(huì)對(duì)表格中相應(yīng)的數(shù)據(jù)進(jìn)行增加。在對(duì)目標(biāo)包分析結(jié)束后,一個(gè)完整的包間泛化關(guān)系表就會(huì)生成;
3-4)利用公式p=|classselected|/I total I來(lái)確定包與包之間的關(guān)系,classselected表示在分析關(guān)系時(shí)滿足相應(yīng)關(guān)系的類的數(shù)量,total表示為所述外部包中所有類的數(shù)量,按比例關(guān)系降序原則進(jìn)行排列,選取滿足條件區(qū)間的包間建立關(guān)系,其余的就不建立關(guān)系;
設(shè)定P>=50%為第一條件區(qū)間,如果P滿足p>=50%,將包與包建立關(guān)系;
設(shè)定30%〈=p〈50%為第二條件區(qū)間,如果P不滿足第一條件區(qū)間,則使用第二條件區(qū)間判定,將滿足第二條件區(qū)間的將所有包按從高到底排序后,選擇一半數(shù)量的包建立聯(lián)系,如果數(shù)量為奇數(shù),則對(duì)數(shù)量一半取整作為結(jié)果;
步驟4):選取確定的關(guān)系生成最后的關(guān)系圖,將關(guān)系圖與包的內(nèi)容描述表格綜合起來(lái),作為最后的包圖。
[0005]本發(fā)明使用時(shí),主要是利用粗粒度的Java包層次上的概要化對(duì)程序進(jìn)行理解,在對(duì)包進(jìn)行概要化分析時(shí),本發(fā)明不僅關(guān)注于對(duì)單一代碼段的程序理解,還會(huì)從整個(gè)軟件系統(tǒng)層面來(lái)分析該代碼段與系統(tǒng)中其他代碼段的聯(lián)系,最后生成包圖來(lái)描述這個(gè)系統(tǒng)。該方法可以讓開發(fā)者更快地理解整個(gè)系統(tǒng),尤其是在沒(méi)有文檔的情況下,不用再去為了某個(gè)功能模塊去逐個(gè)瀏覽、查找單個(gè)可能相關(guān)的代碼文件。
[0006]與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果在于,本發(fā)明不需要開發(fā)人員閱讀太多代碼就能對(duì)整個(gè)軟件系統(tǒng)有一個(gè)宏觀的理解,并能幫助他們快速定位到需要的代碼模塊;本發(fā)明提出結(jié)合文字、表等,利用包圖的可視化表示更能有效、直接地幫助開發(fā)人員建立系統(tǒng)的功能方面的依賴關(guān)系圖;該發(fā)明的概要化方法不僅依賴于包層次的元素進(jìn)行摘要的生成,還結(jié)合包類的類內(nèi)和類外的一些關(guān)系分析,利用包圖生成更加準(zhǔn)確的包的摘要(即包名和包圖)。本發(fā)明可用于軟件的開發(fā)和維護(hù)中。
【專利附圖】
【附圖說(shuō)明】
[0007]圖1為最后生成不例包關(guān)系圖。
[0008]圖2為本發(fā)明的工作流程圖。
【具體實(shí)施方式】
[0009]下面結(jié)合具體實(shí)施例對(duì)本發(fā)明作進(jìn)一步說(shuō)明。[0010]本發(fā)明的工作流程如圖2所示。
[0011]步驟1):根據(jù)確定的類的功能分類,建立包的類別分析表格。
[0012]建立表1,開始對(duì)軟件系統(tǒng)中的逐個(gè)包進(jìn)行分析。
[0013]表1
【權(quán)利要求】
1.一種生成包圖的Java程序包概要化方法,其特征在于,包括以下步驟: 步驟I):根據(jù)確定的類的功能分類,建立包的類別分析表格; 步驟2):分析包中內(nèi)容確定標(biāo)簽: a)如果包中含有接口;使用公式I implement I / I classes I >= Θ , implement表示包中實(shí)現(xiàn)接口功能的類的數(shù)量,classes表示包中所有的類的數(shù)量,Θ表示一個(gè)預(yù)定值,所述Θ界于30%至100%之間,接口類標(biāo)簽即為包的最終標(biāo)簽,并且直接跳轉(zhuǎn)至步驟3); b)如果包中不含有接口,或者接口數(shù)量不滿足公式,達(dá)不到預(yù)定值;根據(jù)步驟I)中的表格,分析包中不同類別的類所占包中所有類的比例,并對(duì)分析結(jié)果降序排列,通過(guò)比較占最大比例的類與所有其他類之間的比例差值來(lái)確定最終包的主標(biāo)簽及子標(biāo)簽,主標(biāo)簽是占最大比例的類,子標(biāo)簽為類的類別名稱,同時(shí)根據(jù)標(biāo)簽篩選內(nèi)容; b_l)根據(jù)包標(biāo)簽中的子標(biāo)簽,選擇包中的與該標(biāo)簽相符合的類,并進(jìn)行降序排列,設(shè)定閾值k=30%,對(duì)排序結(jié)果進(jìn)行提??; b-2)再將上述提取的結(jié)果再一次進(jìn)行關(guān)鍵內(nèi)容提??; 對(duì)各個(gè)類所對(duì)應(yīng)的不同類別的方法進(jìn)行提取,同時(shí)限定每個(gè)類中選出的方法的數(shù)量小于等于30% ; b-3)再將選出的方法的簽名提取出來(lái)與類別名稱結(jié)合生成包的內(nèi)容描述表格; 步驟3):分析包與包之間的關(guān)系; 3-1)先對(duì)每個(gè)包中的成員根據(jù)訪問(wèn)權(quán)限進(jìn)行過(guò)濾,即去除掉private權(quán)限和protected權(quán)限的成員,再根據(jù)已確定的包的標(biāo)簽進(jìn)行排序,排序的規(guī)則是根據(jù)包與包之間關(guān)系的復(fù)雜程度降序排列; 3-2)分析包與包之間的依賴關(guān)系,建立依賴關(guān)系分析表;如果目標(biāo)包中使用了外部包的類中的成員,就會(huì)對(duì)表格中相應(yīng)的數(shù)據(jù)進(jìn)行增加,在對(duì)目標(biāo)包分析結(jié)束后,一個(gè)完整的包間調(diào)用關(guān)系表就會(huì)生成; 3-3)分析包與包之間的泛化關(guān)系,建立泛化關(guān)系分析表;如果存在目標(biāo)包中類繼承于外部包中的類,就會(huì)對(duì)表格中相應(yīng)的數(shù)據(jù)進(jìn)行增加,在對(duì)目標(biāo)包分析結(jié)束后,一個(gè)完整的包間泛化關(guān)系表就會(huì)生成; 3-4)利用公式p=|classselected|/I total I來(lái)確定包與包之間的關(guān)系,classselected表示在分析關(guān)系時(shí)滿足相應(yīng)關(guān)系的類的數(shù)量,total表示為所述外部包中所有類的數(shù)量,按比例關(guān)系降序原則進(jìn)行排列,選取滿足條件區(qū)間的包間建立關(guān)系,其余的就不建立關(guān)系; 設(shè)定P>=50%為第一條件區(qū)間,如果P滿足p>=50%,將包與包建立關(guān)系; 設(shè)定30%〈=p〈50%為第二條件區(qū)間,如果P不滿足第一條件區(qū)間,則使用第二條件區(qū)間判定,將滿足第二條件區(qū)間的將所有包按從高到底排序后,選擇一半數(shù)量的包建立聯(lián)系,如果數(shù)量為奇數(shù),則對(duì)數(shù)量一半取整作為結(jié)果; 步驟4):選取確定的關(guān)系生成最后的關(guān)系圖,將關(guān)系圖與包的內(nèi)容描述表格綜合起來(lái),作為最后的包圖。
【文檔編號(hào)】G06F9/44GK103713909SQ201410028973
【公開日】2014年4月9日 申請(qǐng)日期:2014年1月22日 優(yōu)先權(quán)日:2014年1月22日
【發(fā)明者】孫小兵, 姜力, 李斌, 文萬(wàn)志 申請(qǐng)人:揚(yáng)州大學(xué)