一種基于WordNet的程序可讀性分析方法
【專利摘要】本發(fā)明公開了軟件工程領(lǐng)域內(nèi)的一種基于WordNet的程序可讀性分析方法,包括如下步驟:1)按照包名-類名-方法名的項目結(jié)構(gòu)遍歷出每個方法體,并且以包名_類名_方法名的形式標(biāo)注;2)去除警示注釋(通常出現(xiàn)在測試用例中,用于警告程序員會出現(xiàn)某種嚴(yán)重后果),TODO注釋(是一種程序員認(rèn)為應(yīng)該做,而由于某些原因目前還沒有做的工作);3)將注釋分為短注釋和長注釋;4)對長注釋進(jìn)行預(yù)處理,并且用WordNet提取出注釋的主題詞;5)對注釋映射的代碼段用WordNet提取代碼的主題詞;6)對整個項目生成程序可讀性分析樹,并形成最終的分析數(shù)據(jù),本發(fā)明有利于后期維護(hù)人員對陌生項目的理解,可用于軟件的維護(hù)開發(fā)中。
【專利說明】—種基于WordNet的程序可讀性分析方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種程序分析方法,特別涉及一種程序可讀性分析方法,屬于軟件工程領(lǐng)域。
【背景技術(shù)】
[0002]程序可讀性分析是軟件開發(fā)和維護(hù)中用于評估軟件易維護(hù)性和易修改性的一個重要指標(biāo),方便開發(fā)人員修改代碼和注釋必不可少的環(huán)節(jié)。現(xiàn)有的程序可讀性分析一般利用開發(fā)語言所提供的開發(fā)文檔和API對項目中不理解的代碼段進(jìn)行脫離實際情景的解釋,或者是在開發(fā)前由開發(fā)團(tuán)隊擬定的代碼編寫規(guī)范性進(jìn)行編碼的代碼書寫規(guī)范方面的可讀性分析。而在實際編程實踐中,注釋和開發(fā)文檔才是程序員理解項目的主要突破口。真正難以理解的是不同人員對同一段代碼的注釋和分析。整個項目不同模塊的轉(zhuǎn)移和改變,小段代碼的修改和變更,開發(fā)人員變動都會造成開發(fā)人員難以理解原有代碼。這也就使得程序的可讀性分析成為了一個項目是否有利于開發(fā)人員開發(fā)維護(hù)和理解的重要環(huán)節(jié)。所以本發(fā)明從注釋能否描述代碼的真正意圖進(jìn)行程序的可讀性分析。
[0003]隨著軟件的不斷演化,代碼的不斷修改和遷移,原有的注釋是否能幫助開發(fā)人員準(zhǔn)確理解一個項目是一個項目能否進(jìn)行順利修改的關(guān)鍵因素。傳統(tǒng)的主題模型方法很難對細(xì)小的方法體和類文件進(jìn)行局部的準(zhǔn)確性分析,而WordNet所提供的本體庫和優(yōu)秀的同義詞匹配和主題詞提取技術(shù)則為研究程序的可讀性分析帶來的巨大的好處。WordNet是一種傳統(tǒng)的詞典信息與現(xiàn)代計算機(jī)技術(shù)以及心理語言學(xué)研究成果有效結(jié)合的一個產(chǎn)物。它是由Princeton大學(xué)的Miller等心理學(xué)家,語言學(xué)家和計算機(jī)工程師聯(lián)合于1985年開始設(shè)計的一種基于認(rèn)知語言學(xué)的英語詞典。它不同于一般的語言詞典,而是由25個獨立起始概念,其它名詞通過上下位關(guān)系與這25個獨立起始概念構(gòu)成的25個獨立的層次結(jié)構(gòu),具有強(qiáng)大的根據(jù)人類語義進(jìn)行同義詞匹配的能力。本發(fā)明就是充分利用WordNet根據(jù)同義詞語義匹配能力找出程序中語義描述不正確以及推薦不應(yīng)該加注釋的地方,并對整個程序進(jìn)行分析,生成程序可讀性分析樹。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的目的是提供一種基于WordNet的程序可讀性分析方法,以解決程序可讀性分析問題,有利于后期維護(hù)人員對陌生項目的理解。
[0005]本發(fā)明的目的是這樣實現(xiàn)的:一種基于WordNet的程序可讀性分析方法,包括以下步驟:
步驟I)按項目結(jié)構(gòu)遍歷出每個方法體,以包名_類名_方法名的形式標(biāo)注,標(biāo)注分為對注釋的標(biāo)注和對代碼的標(biāo)注;
步驟2)去除警示注釋和TODO注釋;
步驟3)將注釋分為短注釋和長注釋;
步驟4)對長注釋進(jìn)行預(yù)處理,并且用WordNet提取出注釋的主題詞;步驟5)對長注釋映射的代碼段用WordNet提取代碼的主題詞;
步驟6)對整個項目生成程序可讀性分析樹,并形成最終的分析數(shù)據(jù)。
[0006]作為本發(fā)明的進(jìn)一步限定,步驟3)中的分類方法如下:短注釋提取條件為:無”結(jié)尾的短語或者詞數(shù)少于8個words的短句,并且代碼長度控制在I到6行;除此之外的注釋則為長注釋;標(biāo)記符合短注釋條件的代碼段及其注釋,作為找出的不推薦加注釋部分,對于不符合短注釋條件的,放入步驟4和長注釋一起分析。
[0007]作為本發(fā)明的進(jìn)一步限定,步驟4)的具體方法如下:
a)分類:按照方法函數(shù)是否有返回值對長注釋進(jìn)行分類,有返回值的稱為描述代碼意圖的注釋(vn類),無返回值的稱為提供描述信息的注釋(V類);
b)預(yù)處理:對vn類和V類注釋進(jìn)行預(yù)處理,分為三個步驟:
注釋語句處理(Tokenization),去除if條件句,過去時態(tài)的語句,vn類注釋用WordNet分析時要添加方法體中return的注釋段;
去除停用詞(Stop-word Removal),去除注釋關(guān)鍵字,如常用的定冠詞the、an等;
分詞(Stemming),將注釋語句拆分成單詞塊,利用WordNet接口將單詞轉(zhuǎn)換形態(tài);
c)提詞:用WordNet對兩種類型的注釋提取主題詞,Vn類注釋提取動詞和名詞,v類注釋提取動詞。
[0008]作為本發(fā)明的進(jìn)一步限定,步驟5)的具體方法如下:
a)Vn類注釋映射的代碼段抽取方法函數(shù)名,參數(shù)名,變量名,常數(shù)名和返回值名字,利用WordNet和代碼書寫的駝峰寫法進(jìn)行分詞,去除常用定冠詞,最后利用wordNet提取出動詞和名詞;
b)V類注釋映射的代碼段抽取方法的函數(shù)名,參數(shù)名,變量名,常數(shù)名和返回值名字,利用WordNet和代碼書寫的駝峰寫法進(jìn)行分詞,去除常用定冠詞,最后利用wordNet提取出動
ο
[0009]作為本發(fā)明的進(jìn)一步限定,步驟6)的具體方法如下:按照項目目錄,用WordNet對所有的注釋-代碼進(jìn)行主題詞匹配,匹配成功則為-1型,不成功則為I型或者2型,缺少匹配項的為O型;其中I型注釋是針對于V類生成的必須修改的注釋,2型注釋是針對于vn類生成的必須修改的注釋,O型注釋歸納為需要注意的注釋,并且生成程序可讀性分析樹,標(biāo)注包,類下的注釋準(zhǔn)確率。
[0010]與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果在于:本方法是基于WordNet的程序可讀性分析,可以對整個項目的局部注釋-代碼可讀性以及全局注釋-代碼可讀性進(jìn)行分析,列舉出無法有效描述程序功能的注釋-代碼段,并且可以以程序可讀性分析樹的形式,對包、類下的可讀性進(jìn)行數(shù)值描述分析,可以有效幫助開發(fā)人員了解代碼編寫中有哪些意圖不準(zhǔn)確的模塊和注釋不清的地方;而且該方法不受編程語言,開發(fā)架構(gòu)和開發(fā)平臺的限制,并且有利于后期維護(hù)人員對于陌生項目的理解。
【專利附圖】
【附圖說明】
[0011]圖1是本發(fā)明總體流程圖。
[0012]圖2是分析項目轉(zhuǎn)換類型流程圖。
[0013]圖3是方法遍歷和注釋分類提取流程圖。[0014]圖4是長注釋分析前預(yù)處理和分類流程圖。
[0015]圖5是圖4流程中注釋語句處理過程的流程圖。
[0016]圖6是圖4流程中去除停用詞過程的流程圖。
[0017]圖7是圖4流程中分詞過程的流程圖。
[0018]圖8是利用WordNet生成最終的程序可讀性分析樹流程。
[0019]圖9是代碼預(yù)處理流程圖。
[0020]圖10是處理的jEdit項目生成的部分程序可讀性分析樹。
【具體實施方式】
[0021]下面結(jié)合附圖對發(fā)明的技術(shù)方案進(jìn)行詳細(xì)說明:
本發(fā)明的方法是利用WordNet來支持主題詞匹配技術(shù)的實現(xiàn),采用詳細(xì)的文本預(yù)處理和項目整體分析計算分析程序的可讀性,如圖1所示。
[0022]方法流程
利用基于WordNet的程序可讀性分析主要分為三個步驟:注釋內(nèi)容提取主題詞,代碼內(nèi)容提取主題詞,WordNet匹配技術(shù)生成最終的項目分析樹。
[0023]步驟一)注釋內(nèi)容中提取主題詞
(1)注釋中提取出主題詞會有多方面的影響,所以要先去除沒有意義的注釋段,這些注釋通常是編譯工具自動生成的javadoc注釋或者是作為提醒作用的注釋,如圖3前兩個流程所示,這里將javadoc注釋關(guān)鍵詞(如Oparam等)封裝到DocBean類中,逐行匹配注釋中出現(xiàn)的javadoc注釋關(guān)鍵詞,遇到就刪除注釋;
(2)在實際編寫過程中,并不是所有的代碼都要寫注釋,有時候明明可以用方法名表示的代碼語義卻要用冗余的沒有用的注釋來解釋實在是畫蛇添足,這里主要是針對短注釋和長注釋分析中結(jié)果為O的注釋_代碼進(jìn)行分析;對此,需要將注釋進(jìn)行長注釋和短注釋的分類,短注釋提取條件為:無”結(jié)尾的短語或者詞數(shù)少于8個words的短句,并且代碼長度控制在I到6行;具體為根據(jù)每個目錄節(jié)點下的注釋進(jìn)行逐一匹配,標(biāo)注出符合條件的短注釋到ShortMap集合中,其映射的代碼段中的方法名放入CodeShortMap集合中;將ShortMap和CodeShortMap集合中的內(nèi)容分別做分詞處理,按照映射關(guān)系依次比對,如果發(fā)現(xiàn)相同單詞,則列為情況0,列舉出沒有必要寫注釋的一些方法,如圖3后半段所示;
(3)將經(jīng)過第(2)步后剩下的短注釋和長注釋放入LongMap集合,用于分析出結(jié)果為1,2型的注釋_代碼的注釋預(yù)料集合;需要對其更加細(xì)分,因為有返回值和沒有返回值的方法往往表示著與之相對應(yīng)的上下文關(guān)系,所以可以將其分類為提供描述信息的注釋(V類)和描述代碼意圖的注釋(vn類);這就要遍歷LongMap中標(biāo)注節(jié)點是否有return返回值,有返回值則將注釋內(nèi)容封裝到vn類,沒有則封裝到V類,如圖4中前半段兩個處理路徑;
(4)注釋作為文本信息要對其進(jìn)行文本預(yù)處理,具體流程有3個,分別是Tokenization, Stop-word Removal, Stemming,如圖4中段所不。具體方法如下所不:
(a)Tokenization時要做的工作有3個部分,分別是:遍歷v類,vn類的if條件分句(逗號前);去除V類,vh類的過去時態(tài)從句和五大定語從句;將過去時態(tài)詞庫封裝為OldWords類,在OldWords類中創(chuàng)建OldSearch (String sen)方法用于過濾過去時態(tài)語句,創(chuàng)建FiveOdd (String sen)方法用于過濾where, when等五大定語從句;vn類用WordNet分析時要添加方法內(nèi)部return的注釋段;具體工作如圖5所示;
(b)Stop-word時要做的工作有兩個部分,分別是:1)去除注釋關(guān)鍵字以及常用的定冠詞the,an等,2)提供擴(kuò)展停用詞庫,為后續(xù)研究做準(zhǔn)備;具體工作如圖6所示;
(c)Stemming要做的工作也有兩個部分,分別是:I)將注釋語句拆分成單詞塊,2)利用WordNet接口將單詞轉(zhuǎn)換形態(tài);比如將帶有ing的詞語變?yōu)樵蜁r態(tài);具體工作如圖7所示;
(5)做完上述的步驟,就可以將注釋的數(shù)據(jù)暫存在數(shù)據(jù)庫中,這些數(shù)據(jù)元素在數(shù)據(jù)庫中的主鍵為一開始封裝到DocBean中的項目節(jié)點目錄信息,即項目組織結(jié)構(gòu)包名_類名_方法名。
[0024]步驟二)代碼內(nèi)容中提取主題詞
(1)原有的方法名不一定能準(zhǔn)確分析代碼的意圖,所以要對代碼語料庫進(jìn)行擴(kuò)充,這里要做的就是根據(jù)V類和vn類,添加不同的語料,V類主要添加變量名和參數(shù)名,把根據(jù)注釋數(shù)據(jù)庫中的主鍵信息去匹配注釋相對應(yīng)的方法;vn類在V類的基礎(chǔ)上還要添加返回參數(shù)名,即對于有return方法的注釋要把return返回的值去除停用詞之后補(bǔ)充到數(shù)據(jù)庫中;如圖9前段所示;
(2)程序的命名一般都是采取拼接原則和駝峰原則,所以要先對步驟二)-(I)中提取的代碼語料進(jìn)行分詞;主要按照的是駝峰原則進(jìn)行分詞;具體地,根據(jù)單詞大寫分詞,將分離的詞語封裝回各自V類和vn類目錄下的以目錄名命名的相關(guān)內(nèi)部類中,以便步驟三)處理;如圖9中段所示;
(3)分詞之后還需去除干擾詞,除了預(yù)先設(shè)定的定冠詞,常用詞組,還預(yù)留了接口,便于擴(kuò)充干擾詞的語料庫;這里采用的是和注釋信息處理一樣的方法,去除定冠詞the,a,an以及常用詞;如圖9后段所示;
(4)完成上述內(nèi)容之后,提取出的代碼就可以放入代碼數(shù)據(jù)庫中備用,為了尋求與注釋的映射關(guān)系,目錄名作為主鍵。
[0025]步驟三)WordNet匹配技術(shù)生成最終的程序可讀性分析樹
(1)數(shù)據(jù)庫中存放的注釋-代碼的映射內(nèi)容分別通過WordNet進(jìn)行分析,對于vn類,所要匹配的是動詞和名詞的詞庫;對于V類只需要匹配動詞詞庫即可。根據(jù)匹配的成功與否,將匹配程度按照如上定義分為-1,0,1,2,分別表示:_1,有效注釋;0,此處不推薦寫注釋,最好用方法名正確描述代碼意圖即可;1,此段注釋無法正確描述代碼意圖;2,此段代碼無法正確描述代碼的行為;
(2)將生成的四種結(jié)果用不同顏色表示出來,生成一個XML文檔的程序可讀性分析樹,不同顏色的標(biāo)注代表嚴(yán)重等級。如圖10所示,這是根據(jù)jEdit初步分析出的一個局部結(jié)果;
(3)如圖10所示,XML樹中還標(biāo)注出了類,包,總體程序的可讀性比例。即<P_math>〈/P_math> 和 <C_math>〈/C_math>。
[0026]本發(fā)明并不局限于上述實施例,在本發(fā)明公開的技術(shù)方案的基礎(chǔ)上,本領(lǐng)域的技術(shù)人員根據(jù)所公開的技術(shù)內(nèi)容,不需要創(chuàng)造性的勞動就可以對其中的一些技術(shù)特征作出一些替換和變形,這些替換和變形均在本發(fā)明的保護(hù)范圍內(nèi)。
【權(quán)利要求】
1.一種基于WordNet的程序可讀性分析方法,其特征在于,包括以下步驟: 步驟I)按項目結(jié)構(gòu)遍歷出每個方法體,以包名_類名_方法名的形式標(biāo)注,標(biāo)注分為對注釋的標(biāo)注和對代碼的標(biāo)注; 步驟2)去除警示注釋和TODO注釋; 步驟3)將注釋分為短注釋和長注釋; 步驟4)對長注釋進(jìn)行預(yù)處理,并且用WordNet提取出注釋的主題詞; 步驟5)對長注釋映射的代碼段用WordNet提取代碼的主題詞; 步驟6)對整個項目生成程序可讀性分析樹,并形成最終的分析數(shù)據(jù)。
2.根據(jù)權(quán)利要求1所述的一種基于WordNet的程序可讀性分析方法,其特征在于,步驟3)中的分類方法如下:短注釋提取條件為:無”結(jié)尾的短語或者詞數(shù)少于8個words的短句,并且代碼長度控制 在I到6行;除此之外的注釋則為長注釋;標(biāo)記符合短注釋條件的代碼段及其注釋,作為找出的不推薦加注釋部分,對于不符合短注釋條件的,放入步驟4和長注釋一起分析。
3.根據(jù)權(quán)利要求1所述的一種基于WordNet的程序可讀性分析方法,其特征在于,步驟4)的具體方法如下: a)分類:按照方法函數(shù)是否有返回值對長注釋進(jìn)行分類,有返回值的稱為描述代碼意圖的注釋(vn類),無返回值的稱為提供描述信息的注釋(V類); b)預(yù)處理:對vn類和V類注釋進(jìn)行預(yù)處理,分為三個步驟: 注釋語句處理(Tokenization),去除if條件句,過去時態(tài)的語句,vn類注釋用WordNet分析時要添加方法體中return的注釋段; 去除停用詞(Stop-word Removal),去除注釋關(guān)鍵字,如常用的定冠詞the、an等; 分詞(Stemming),將注釋語句拆分成單詞塊,利用WordNet接口將單詞轉(zhuǎn)換形態(tài); c)提詞:用WordNet對兩種類型的注釋提取主題詞,Vn類注釋提取動詞和名詞,v類注釋提取動詞。
4.根據(jù)權(quán)利要求1所述的一種基于WordNet的程序可讀性分析方法,其特征在于,步驟5)的具體方法如下: a)Vn類注釋映射的代碼段抽取方法函數(shù)名,參數(shù)名,變量名,常數(shù)名和返回值名字,利用WordNet和代碼書寫的駝峰寫法進(jìn)行分詞,去除常用定冠詞,最后利用wordNet提取出動詞和名詞; b)V類注釋映射的代碼段抽取方法的函數(shù)名,參數(shù)名,變量名,常數(shù)名和返回值名字,利用WordNet和代碼書寫的駝峰寫法進(jìn)行分詞,去除常用定冠詞,最后利用wordNet提取出動
ο
5.根據(jù)權(quán)利要求1所述的一種基于WordNet的程序可讀性分析方法,其特征在于,步驟6)的具體方法如下:按照項目目錄,用WordNet對所有的注釋-代碼進(jìn)行主題詞匹配,匹配成功則為-1型,不成功則為I型或者2型,缺少匹配項的為O型;其中I型注釋是針對于V類生成的必須修改的注釋,2型注釋是針對于vn類生成的必須修改的注釋,O型注釋歸納為需要注意的注釋,并且生成程序可讀性分析樹,標(biāo)注包,類下的注釋準(zhǔn)確率。
【文檔編號】G06F9/44GK103927179SQ201410157340
【公開日】2014年7月16日 申請日期:2014年4月18日 優(yōu)先權(quán)日:2014年4月18日
【發(fā)明者】孫小兵, 劉楊超, 朱俊武, 李云 申請人:揚州大學(xué)