一種基于層次主題模型的程序特征樹的生成方法
【專利摘要】本發(fā)明公開了軟件工程領(lǐng)域內(nèi)的一種基于層次主題模型的程序特征樹的生成方法,程序特征樹以樹的形式將系統(tǒng)的特征按層次展示出來,在該樹中,父節(jié)點(diǎn)是各種特征的混合,孩子節(jié)點(diǎn)都是父節(jié)點(diǎn)的子特征,葉子節(jié)點(diǎn)則為劃分最細(xì)的特征,我們還將葉子節(jié)點(diǎn)的特征與相應(yīng)的類文件進(jìn)行匹配識(shí)別,該方法可有效地輔助軟件維護(hù)過程中的程序理解。本發(fā)明涉及到的關(guān)鍵操作包括:(1)對(duì)整個(gè)軟件系統(tǒng)進(jìn)行預(yù)處理,提取其中的用戶自定義標(biāo)識(shí)符和注釋(2)對(duì)預(yù)處理后的整個(gè)軟件系統(tǒng)采用層次主題模型,為軟件系統(tǒng)構(gòu)建程序特征樹。(3)將葉子節(jié)點(diǎn)的特征與相應(yīng)的代碼進(jìn)行匹配識(shí)別。
【專利說明】一種基于層次主題模型的程序特征樹的生成方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種程序理解方法,特別涉及一種建立程序特征樹的方法。
【背景技術(shù)】
[0002]軟件產(chǎn)品一般在滿足用戶不斷更改的需求中需要不斷地升級(jí)和維護(hù)。為了實(shí)現(xiàn)某個(gè)維護(hù)請(qǐng)求,開發(fā)人員首先需要理解整個(gè)軟件系統(tǒng),特別是對(duì)程序的理解。程序理解是軟件維護(hù)過程中最頻繁的工作。通常情況下,在軟件維護(hù)過程中程序理解要占到60%以上的時(shí)間。隨著軟件系統(tǒng)的不斷發(fā)展,整個(gè)系統(tǒng)的規(guī)模越來越大,復(fù)雜度也越來越高。為了輔助這項(xiàng)工作,一些程序理解技術(shù)采用聚類方法將系統(tǒng)劃分為一些更小、更集中和更易于理解的子系統(tǒng),或者采用程序依賴圖來輔助開發(fā)人員理解軟件系統(tǒng)的結(jié)構(gòu)。這些方法主要的依據(jù)是程序元素之間的靜態(tài)結(jié)構(gòu)依賴關(guān)系。由于程序理解的目標(biāo)是理解系統(tǒng)的一些功能點(diǎn)和不同的源代碼是如何對(duì)應(yīng)那些相關(guān)的功能特征的。因此,這些程序理解技術(shù)會(huì)忽視系統(tǒng)的功能特征。此前幾乎沒有技術(shù)可以快速直觀的提供系統(tǒng)的特征或者主題。然而特征或者主題可以有效的幫助開發(fā)人員得到一個(gè)軟件系統(tǒng)總體功能方面的特征信息。此外,在不同的特征層次尤其是從總體到部分會(huì)為開發(fā)人員建立一個(gè)更加易于理解的系統(tǒng)結(jié)構(gòu)。在這個(gè)多層特征結(jié)果輔助下,開發(fā)人員會(huì)對(duì)整個(gè)系統(tǒng)有一個(gè)更加簡(jiǎn)單、逐步和快速的理解。
[0003]層次主題模型是指主要建立在隱含狄利克雷分布的主題模型。隱含狄利克雷分布(Latent Dirichlet Allocation簡(jiǎn)稱LDA)是一種分析非結(jié)構(gòu)化文本語(yǔ)料庫(kù)的概率模型。隱含狄利克雷分布的主題模型可以提取概括整個(gè)文檔的主題。層次主題模型不僅可以提取整個(gè)文檔的主題而且可以將所提取出來的主題進(jìn)行分層。我們利用層次主題模型為經(jīng)過預(yù)處理的軟件系統(tǒng)進(jìn)行建模,為軟件系統(tǒng)建立有層次的主題模型,最終生成軟件系統(tǒng)的程序特征樹,程序特征樹以樹的形式將系統(tǒng)的特征按層次展示出來,在該樹中,父節(jié)點(diǎn)是特征的混合,孩子節(jié)點(diǎn)都是父節(jié)點(diǎn)的子特征,葉子節(jié)點(diǎn)則為劃分最細(xì)的特征,最后,對(duì)葉子節(jié)點(diǎn)的特征與相應(yīng)的代碼進(jìn)行匹配識(shí)別。軟件系統(tǒng)的特征以樹的形式展示出來,并且在最細(xì)的特征層次的節(jié)點(diǎn)識(shí)別匹配到相應(yīng)的類文件,便于開發(fā)人員快速、準(zhǔn)確、形象地理解軟件系統(tǒng)。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的目的是提供一種基于層次主題模型的程序特征樹的生成方法,使得開發(fā)人員可對(duì)整個(gè)系統(tǒng)有一個(gè)更加簡(jiǎn)單、逐步和快速的理解。
[0005]本發(fā)明的目的是這樣實(shí)現(xiàn)的:一種基于層次主題模型的程序特征樹的生成方法,其特征在于,步驟如下:
步驟I)導(dǎo)入需要理解的軟件系統(tǒng)的源代碼;
步驟2)提取用戶自定義標(biāo)識(shí)符以及注釋作為研究對(duì)象,并對(duì)其進(jìn)行預(yù)處理;
步驟3)利用層次主題模型為經(jīng)過預(yù)處理的對(duì)象進(jìn)行建模,生成該系統(tǒng)的程序特征樹,該程序特征樹中的程序特征即為主題模型中提取的主題;
步驟4)將葉子節(jié)點(diǎn)的特征與軟件系統(tǒng)內(nèi)的所有類文件進(jìn)行匹配; 步驟5)判斷程序特征樹是否有利于理解軟件系統(tǒng)的大部分代碼,是則輸出程序特征樹。
[0006]作為本發(fā)明的進(jìn)一步限定,步驟2)的預(yù)處理過程包括以下步驟:
a)刪除語(yǔ)義上和編程語(yǔ)言相關(guān)的關(guān)鍵字;
b)對(duì)一些按照駝峰規(guī)則和有下劃短線相連的組合詞進(jìn)行分詞;
c)去除英語(yǔ)停用詞;
d)將詞語(yǔ)的不同形式進(jìn)行歸一化。
[0007]作為本發(fā)明的進(jìn)一步限定,步驟3)在建模時(shí),先設(shè)定層次主題模型的層次L以及給定主題的數(shù)目K。
[0008]作為本發(fā)明的進(jìn)一步限定,步驟4)的具體方法為,將所有類文件逐一與葉子節(jié)點(diǎn)的每個(gè)特征進(jìn)行匹配,若某個(gè)類文件包含某個(gè)特征,則該類文件被分配到與該特征相關(guān)的集合中,并且,該類文件還需與其他特征進(jìn)行匹配,即一個(gè)類文件可具有多個(gè)特征,同樣一個(gè)特征下可具有多個(gè)類文件。
[0009]作為本發(fā)明的進(jìn)一步限定,步驟5)的具體方法為,當(dāng)軟件系統(tǒng)中匹配成功的類文件數(shù)量占總類文件數(shù)量百分比大于等于80%時(shí),判定程序特征樹有利于理解軟件系統(tǒng)的大部分代碼,則輸出程序特征樹,否則回到步驟7)調(diào)節(jié)層次主題模型的層次和主題數(shù)目重新建模,重新將葉子節(jié)點(diǎn)的主題與相關(guān)類文件進(jìn)行匹配。
[0010]與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果在于,本發(fā)明從整體到部分對(duì)系統(tǒng)特征分層會(huì)為開發(fā)人員建立一個(gè)更加易于理解的系統(tǒng)結(jié)構(gòu)。在這個(gè)層次特征結(jié)果輔助下,開發(fā)人員會(huì)對(duì)整個(gè)系統(tǒng)有一個(gè)更加簡(jiǎn)單、逐步和快速的理解,可用于軟件開發(fā)維護(hù)中。主要有如下一些優(yōu)點(diǎn):
(1)本發(fā)明提出利用層次LDA主題模型進(jìn)行軟件主題的提取,可以分析軟件的功能方面的特征,從而更有助于軟件開發(fā)人員對(duì)程序的直接理解和分析,找到他們感興趣的功能代碼;
(2)該發(fā)明對(duì)軟件的各個(gè)特征層次進(jìn)行理解,而不限于某一單一特征進(jìn)行軟件理解,它給出一種逐步求精的從整體到部分軟件理解過程,更符合開發(fā)人員的實(shí)際軟件理解過程;
(3)該發(fā)明所提出的各個(gè)特征層次的軟件理解都是基于層次主題模型,目前,層次主題模型已有很多現(xiàn)成的工具可用。因此,該方法實(shí)施比較容易。
[0011](4)之前程序理解方法主要的依據(jù)是程序元素之間的靜態(tài)結(jié)構(gòu)依賴關(guān)系。這些程序理解技術(shù)會(huì)忽視系統(tǒng)的功能特征而且過程復(fù)雜。特征或者主題可以有效的幫助開發(fā)人員得到一個(gè)軟件系統(tǒng)總體功能方面的特征信息。此外,在不同的特征層次尤其是從總體到部分會(huì)為開發(fā)人員建立一個(gè)更加易于理解的系統(tǒng)結(jié)構(gòu)。在多層特征結(jié)果輔助下,開發(fā)人員會(huì)對(duì)整個(gè)系統(tǒng)有一個(gè)更加簡(jiǎn)單、逐步和快速的理解。
【專利附圖】
【附圖說明】
[0012]圖1是生成程序特征樹的流程圖。
[0013]圖2是預(yù)處理的流程圖。
[0014]圖3是為JHotDraw軟件系統(tǒng)的一段源代碼。
[0015]圖4是本發(fā)明程序特征樹示意圖?!揪唧w實(shí)施方式】
[0016]下面結(jié)合具體實(shí)施例對(duì)本發(fā)明做進(jìn)一步說明。
[0017]如圖1-2所示,一種基于層次主題模型的程序特征樹的生成方法,包括如下步驟: 步驟I)導(dǎo)入需要理解的軟件系統(tǒng)的源代碼,此處例舉出JHotDraw軟件系統(tǒng)源代碼的
一部分進(jìn)行說明,源代碼如圖3所示。
[0018]步驟2)提取用戶自定義標(biāo)識(shí)符以及注釋作為研究對(duì)象,并對(duì)其進(jìn)行預(yù)處理;研究對(duì)象如下表1所示。
[0019]表 I。
【權(quán)利要求】
1.一種基于層次主題模型的程序特征樹的生成方法,其特征在于,步驟如下: 步驟I)導(dǎo)入需要理解的軟件系統(tǒng)的源代碼; 步驟2)提取用戶自定義標(biāo)識(shí)符以及注釋作為研究對(duì)象,并對(duì)其進(jìn)行預(yù)處理; 步驟3)利用層次主題模型為經(jīng)過預(yù)處理的對(duì)象進(jìn)行建模,生成該系統(tǒng)的程序特征樹,該程序特征樹中的程序特征即為主題模型中提取的主題; 步驟4)將葉子節(jié)點(diǎn)的特征與軟件系統(tǒng)內(nèi)的所有類文件進(jìn)行匹配; 步驟5)判斷程序特征樹是否有利于理解軟件系統(tǒng)的大部分代碼,是則輸出程序特征樹。
2.根據(jù)權(quán)利要求1所述的一種基于層次主題模型的程序特征樹的生成方法,其特征在于,步驟2)的預(yù)處理過程包括以下步驟: a)刪除語(yǔ)義上和編程語(yǔ)言相關(guān)的關(guān)鍵字; b)對(duì)一些按照駝峰規(guī)則和有下劃短線相連的組合詞進(jìn)行分詞; c)去除英語(yǔ)停用詞; d)將詞語(yǔ)的不同形式進(jìn)行歸一化。
3.根據(jù)權(quán)利要求2所述的一種基于層次主題模型的程序特征樹的生成方法,其特征在于,步驟3)在建模時(shí),先設(shè)定層次主題模型的層次L以及給定主題的數(shù)目K。
4.根據(jù)權(quán)利要求3所述的一種基于層次主題模型的程序特征樹的生成方法,其特征在于,步驟4)的具體方法為,將所有類文件逐一與葉子節(jié)點(diǎn)的每個(gè)特征進(jìn)行匹配,若某個(gè)類文件包含某個(gè)特征,則該類文件被分配到與該特征相關(guān)的集合中,并且,該類文件還需與其他特征進(jìn)行匹配,即一個(gè)類文件可具有多個(gè)特征,同樣一個(gè)特征下可具有多個(gè)類文件。
5.根據(jù)權(quán)利要求4所述的一種基于層次主題模型的程序特征樹的生成方法,其特征在于,步驟5)的具體方法為,當(dāng)軟件系統(tǒng)中匹配成功的類文件數(shù)量占總類文件數(shù)量百分比大于等于80%時(shí),判定程序特征樹有利于理解軟件系統(tǒng)的大部分代碼,則輸出程序特征樹,否則回到步驟7)調(diào)節(jié)層次主題模型的層次和主題數(shù)目重新建模,重新將葉子節(jié)點(diǎn)的主題與相關(guān)類文件進(jìn)行匹配,可用于軟件開發(fā)維護(hù)中。
【文檔編號(hào)】G06F9/44GK103927176SQ201410156738
【公開日】2014年7月16日 申請(qǐng)日期:2014年4月18日 優(yōu)先權(quán)日:2014年4月18日
【發(fā)明者】孫小兵, 劉湘月, 李斌, 朱俊武 申請(qǐng)人:揚(yáng)州大學(xué)