源代碼形成和提供裝置、以及源代碼形成和提供方法
【專利摘要】本發(fā)明的課題在于針對(duì)源代碼,擴(kuò)大可公共化處理的范圍,使用方便性·維護(hù)性良好,具有通用性,可以良好的效率而公共化處理。針對(duì)各源代碼,形成嵌入代碼信息,該嵌入代碼信息由已形成的公共代碼和已檢測(cè)的差分構(gòu)成,針對(duì)各源代碼,從已獲得的位置信息中,刪除部分代碼,在已刪除的位置,嵌入已形成的嵌入代碼,不實(shí)質(zhì)上改變?cè)创a的結(jié)構(gòu)上的形態(tài),形成嵌入好的源代碼。
【專利說(shuō)明】
源代碼形成和提供裝置、以及源代碼形成和提供方法
技術(shù)領(lǐng)域
[0001 ]本發(fā)明涉及源代碼形成和提供裝置,以及源代碼形成和提供方法。
【背景技術(shù)】
[0002]在系統(tǒng)的維護(hù)作業(yè)中,具有因長(zhǎng)年的源代碼的修正,因設(shè)計(jì)書的不完備,或因數(shù)據(jù)項(xiàng)目,邏輯的樣式變更,產(chǎn)生代碼(邏輯,數(shù)據(jù)項(xiàng)目定義等的代碼)的重復(fù),源代碼的可讀性降低的問(wèn)題,維護(hù)作業(yè)的效率降低。為此,通過(guò)手工作業(yè),進(jìn)行重構(gòu)(重復(fù)代碼的公共化處理的源代碼規(guī)模的縮小)作業(yè),進(jìn)行維護(hù)性的恢復(fù)。
[0003]在專利文獻(xiàn)I中提出腳本(script)的源代碼自動(dòng)形成的方法,在專利文獻(xiàn)I中記載至IJ:在具有作為形成結(jié)果的相同代碼的場(chǎng)合,對(duì)重復(fù)部分進(jìn)行公共化處理。
[0004]在專利文獻(xiàn)2中記載到:作為重復(fù)作為代碼的檢測(cè)方法,利用已有的代碼克隆檢測(cè)工具,從源文件,檢測(cè)代碼克隆,進(jìn)行重復(fù)部分公共化處理。
[0005]已有技術(shù)文獻(xiàn)專利文獻(xiàn)
專利文獻(xiàn)1: JP特開2007—304998號(hào)文獻(xiàn)專利文獻(xiàn)2: JP特開2009—176064號(hào)文獻(xiàn)。
【發(fā)明內(nèi)容】
[0006]發(fā)明要解決的課題
在作為謀求手工作業(yè)的重復(fù)代碼的公共化處理的方法中,具有質(zhì)量低,作業(yè)成本高的問(wèn)題。此外,在手工作業(yè)中,具有下述問(wèn)題,即,變量名不同等的,不完全一致,難以檢測(cè)類似的源代碼,重復(fù)代碼的公共化處理無(wú)法有效地進(jìn)行。
[0007]另外,在專利文獻(xiàn)I的技術(shù)中,如果形成于源代碼形成過(guò)程中,對(duì)重復(fù)代碼進(jìn)行公共化處理的機(jī)構(gòu),則雖然可對(duì)僅僅影響形成中的源代碼的重復(fù)代碼進(jìn)行公共化處理,但是,由于無(wú)法對(duì)跨過(guò)在代碼的公共化處理時(shí)已形成好的源代碼的重復(fù)代碼進(jìn)行公共化處理,故具有無(wú)法對(duì)跨于多個(gè)程序之間而存在的重復(fù)代碼進(jìn)行公共化處理的問(wèn)題。
[0008]另外,在專利文獻(xiàn)2的技術(shù)中,在形成相對(duì)變量的范圍可局部化的結(jié)構(gòu)化語(yǔ)言,有效的技術(shù),C0B0L85那樣的變量為全局變量(涉及變量的影響范圍經(jīng)常進(jìn)行變量宣言的程序整體)的,初始的結(jié)構(gòu)化程序語(yǔ)言的場(chǎng)合,具有在重復(fù)代碼中包含的變量作為函數(shù)的參數(shù)而形成時(shí),源代碼冗長(zhǎng),源代碼的可讀性降低的問(wèn)題。此外,在專利文獻(xiàn)2的技術(shù)中,由變量宣言構(gòu)成的數(shù)據(jù)結(jié)構(gòu)的定義不是重構(gòu)(代碼公共化處理)的對(duì)象。
[0009]還有,在代碼的公共化處理后,修正或維護(hù)源代碼的場(chǎng)合,由于必須考慮代碼公共化處理的源代碼的變更,故具有代碼公共化處理后的維護(hù)性難以提高的問(wèn)題。
[0010]本發(fā)明的目的在于相對(duì)通過(guò)初始的結(jié)構(gòu)化程序語(yǔ)言而形成的源代碼,可以良好的效率形成經(jīng)過(guò)重構(gòu)的源代碼。
[0011]另外,本發(fā)明的目的在于形成,提供使重構(gòu)后的維護(hù)作業(yè)容易用的維護(hù)用信息。
[0012]用于解決課題的技術(shù)方案
本發(fā)明提供一種源代碼形成裝置,其特征在于該源代碼形成裝置包括:
類似代碼檢測(cè)機(jī)構(gòu),該類似代碼檢測(cè)機(jī)構(gòu)解析源代碼,檢測(cè)源代碼中包含的相互類似的部分代碼,獲得該源代碼上的位置信息;
公共代碼形成機(jī)構(gòu),該公共代碼形成機(jī)構(gòu)根據(jù)上述已檢測(cè)的相互類似的多個(gè)部分代碼,形成公共代碼,并且形成該公共代碼和上述類似的相應(yīng)的各部分代碼的差分信息;
部分代碼替換機(jī)構(gòu),該部分代碼替換機(jī)構(gòu)根據(jù)上述位置信息,將上述源代碼內(nèi)的上述類似的各部分代碼,替換為插入上述公共代碼和上述部分代碼的差分信息的插入代碼。
[0013]本發(fā)明提供源代碼形成裝置,其涉及上述的源代碼形成裝置,其特征在于上述類似的部分代碼為在程序文法上視為等同的代碼克隆;
上述差分信息為用于將上述部分代碼內(nèi)的描述替換為其它的描述的信息。
[0014]本發(fā)明提供源代碼形成裝置,其涉及上述的源代碼形成裝置,其特征在于上述類似代碼檢測(cè)機(jī)構(gòu)根據(jù)程序文法,抽取作為上述代碼克隆的類似的部分代碼,通過(guò)已抽取的多個(gè)部分代碼的比較或基準(zhǔn)的比較,進(jìn)行作為該部分代碼的替換對(duì)象的一部分除外或分割的粒度調(diào)整。
[0015]本發(fā)明提供源代碼形成裝置,其涉及上述的源代碼形成裝置,其特征在于其包括維護(hù)用信息形成機(jī)構(gòu),該維護(hù)用信息形成機(jī)構(gòu)形成具有上述已替換的類似的部分代碼,與上述位置信息,上述公共代碼,與上述差分信息的維護(hù)用信息。
[0016]本發(fā)明提供一種源代碼形成方法,其特征在于該方法包括:
類似代碼檢測(cè)步驟,在該步驟中,類似代碼檢測(cè)機(jī)構(gòu)解析源代碼,檢測(cè)源代碼中包含的相互類似的部分代碼,獲得該源代碼上的位置信息;
公共代碼形成步驟,在該步驟中,公共代碼形成機(jī)構(gòu)根據(jù)上述已檢測(cè)的相互類似的多個(gè)部分代碼,形成公共代碼,并且形成該公共代碼和上述類似的相應(yīng)的各部分代碼的差分信息
部分代碼替換步驟,在該步驟中,部分代碼替換機(jī)構(gòu)根據(jù)上述位置信息,將上述源代碼內(nèi)的上述類似的各部分代碼,替換為插入上述公共代碼和上述部分代碼的差分信息的插入代碼。
[0017]本發(fā)明提供源代碼形成方法,其涉及上述的源代碼形成方法,其特征在于上述類似的部分代碼為在程序文法上視為等同的代碼克??;
上述差分信息為用于將上述部分代碼內(nèi)的描述替換為其它的描述的信息。
[0018]本發(fā)明提供源代碼形成方法,其涉及上述源代碼形成方法,其特征在于在上述類似代碼檢測(cè)步驟中,根據(jù)程序文法,抽取作為上述代碼克隆的類似的部分代碼,通過(guò)已抽取的多個(gè)部分代碼的比較或基準(zhǔn)的比較,進(jìn)行作為該部分代碼的替換對(duì)象的一部分除外或分割的粒度調(diào)整。
[0019]本發(fā)明提供一種源代碼提供方法,其特征在于該方法不但提供在上述的源代碼形成方法中形成的源代碼;
而且該方法包括維護(hù)用信息形成步驟,在該步驟中,提供具有上述已替換的類似的部分代碼,與上述位置信息,上述公共代碼,與上述差分信息的維護(hù)用信息。
[0020]發(fā)明的效果在本發(fā)明中,由于不同于過(guò)去的重構(gòu)裝置,將重構(gòu)對(duì)象不僅僅擴(kuò)大到函數(shù)單位,而擴(kuò)大到變量宣言,故可對(duì)更多的重復(fù)代碼進(jìn)行公共化處理,另外可進(jìn)一步提高維護(hù)性。
[0021]另外,本發(fā)明涉及適合于通過(guò)初始的結(jié)構(gòu)化語(yǔ)言而制作的源代碼的重構(gòu)裝置,可在適用于初始的結(jié)構(gòu)化語(yǔ)言的利用多的維護(hù)期間長(zhǎng)的系統(tǒng)的方面發(fā)揮很大的效果。
【附圖說(shuō)明】
[0022]圖1為通過(guò)方框而表示本發(fā)明的實(shí)施例的形態(tài)的圖;
圖2為表示進(jìn)行2個(gè)類似部分代碼的公共化處理的方法,與進(jìn)行其自動(dòng)化的步驟的圖; 圖3為表不方法的實(shí)施例的圖;
圖4為表示類似代碼的抽取的內(nèi)容的具體細(xì)節(jié)的圖;
圖5為表示公共代碼的形成的內(nèi)容的具體細(xì)節(jié)的圖;
圖6為表示公共代碼嵌入命令的替換的內(nèi)容的具體細(xì)節(jié)和維護(hù)用資料的形成的內(nèi)容的圖;
圖7為表示文件I,文件2,文件3的例子的圖;
圖8為表示類似代碼的抽取例子的圖;
圖9為表示類似代碼的抽取例子的圖;
圖10為表示類似部分代碼信息的圖;
圖11為表示公共代碼的形成的圖;
圖12為表示共同代碼嵌入命令的替換的圖;
圖13為表示針對(duì)文件I,文件2,插入埋入命令的圖;
圖14為表示重構(gòu)判斷基準(zhǔn)信息例子的圖;
圖15為表示重構(gòu)判斷例子的圖。
[0023]標(biāo)號(hào)的說(shuō)明:
標(biāo)號(hào)I表示代碼克隆檢測(cè)機(jī)構(gòu);
標(biāo)號(hào)2表示代碼克隆信息獲得機(jī)構(gòu);
標(biāo)號(hào)3表示代碼克隆信息獲得調(diào)整機(jī)構(gòu);
標(biāo)號(hào)4表示代碼克隆信息獲得機(jī)構(gòu);
標(biāo)號(hào)6表示部分克隆間差分信息形成機(jī)構(gòu);
標(biāo)號(hào)7表示公共代碼形成機(jī)構(gòu);
標(biāo)號(hào)8表示嵌入代碼信息獲得機(jī)構(gòu);
標(biāo)號(hào)9表示調(diào)整源代碼形成機(jī)構(gòu);
標(biāo)號(hào)10表不數(shù)據(jù)庫(kù);
標(biāo)號(hào)100表示源代碼形成機(jī)構(gòu);
標(biāo)號(hào)101表不處理器;
標(biāo)號(hào)102表示源代碼;
標(biāo)號(hào)103表示嵌入好的源代碼;
標(biāo)號(hào)104表示維護(hù)用信息;
標(biāo)號(hào)105表示維護(hù)用信息形成機(jī)構(gòu);
標(biāo)號(hào)110表示源代碼提供裝置。
【具體實(shí)施方式】
[0024]下面通過(guò)附圖,對(duì)本發(fā)明的形態(tài)進(jìn)行說(shuō)明。
實(shí)施例
[0025]圖1為通過(guò)方框而表示本發(fā)明的實(shí)施例的源代碼形成裝置100。
[0026]在圖1中,源代碼形成裝置100參考處理器101所具有的源代碼102。該源代碼102是通過(guò)變量為全局變量的初期的結(jié)構(gòu)化程序語(yǔ)言而描述的。
[0027]源代碼形成裝置100由代碼克隆檢測(cè)機(jī)構(gòu)I,代碼克隆信息獲得機(jī)構(gòu)2,公共化單位設(shè)定和代碼克隆信息調(diào)整機(jī)構(gòu)3,代碼克隆信息獲得機(jī)構(gòu)4,部分代碼間差分信息形成機(jī)構(gòu)6,公共代碼形成機(jī)構(gòu)7,嵌入代碼信息獲得機(jī)構(gòu)8,調(diào)整源代碼形成機(jī)構(gòu)9,與數(shù)據(jù)庫(kù)10構(gòu)成。這些機(jī)構(gòu)通過(guò)通信線路11而相互鏈接,可進(jìn)行信息的授受。源代碼提供裝置110由源代碼形成裝置100和維護(hù)用信息形成機(jī)構(gòu)105構(gòu)成。維護(hù)用信息形成機(jī)構(gòu)105通過(guò)通信線路13,與源代碼形成裝置100相互鏈接,可進(jìn)行信息的授受。外部的處理器101和源代碼提供裝置110通過(guò)普通的通信線路12而鏈接。還可通過(guò)其它的機(jī)構(gòu)而連接。進(jìn)行通過(guò)通信線路12而形成的信息的相互授受。
[0028]在關(guān)于源代碼的使用的場(chǎng)合,具有類似部分代碼構(gòu)成包含于代碼克隆中的下位概念的情況,但是在這里,指定代碼克隆(或克隆)處于2個(gè)部分代碼類似的類似部分代碼的關(guān)系的場(chǎng)合,而使用該代碼克隆(或克隆)。在部分代碼相同的場(chǎng)合,作為同一部分代碼而給出。
[0029]代碼克隆檢測(cè)機(jī)構(gòu)I進(jìn)行源代碼解析,與構(gòu)成作為代碼克隆而把握的部分代碼的類似部分代碼與同一部分代碼的檢測(cè)。部分代碼通常由相互相同的同一部分代碼,相互類似的類似部分代碼構(gòu)成,進(jìn)行部分代碼的識(shí)別。在通過(guò)同一部分代碼而指定的公共化處理中,在公共化范圍中具有界限,在本實(shí)施例中,還針對(duì)類似部分代碼,進(jìn)行公共化處理。像這樣,主要對(duì)類似部分代碼進(jìn)行說(shuō)明,但是,沒有排除同一部分代碼的公共化處理。關(guān)于代碼克隆的檢測(cè)法,報(bào)告有各種的檢測(cè)方法,可采用各種的檢測(cè)方法。
[0030]代碼克隆檢測(cè)機(jī)構(gòu)I解析單一或多個(gè)源代碼,以針對(duì)在該源代碼中包含的至少2個(gè)部分代碼,構(gòu)成部分代碼的標(biāo)記(token)類別的行等同的情況為條件,將類似部分代碼作為代碼克隆而檢測(cè)。克隆為在編程語(yǔ)言的文法上,構(gòu)成源代碼的最小單位的字符串。
[0031]代碼克隆信息獲得機(jī)構(gòu)2獲得通過(guò)代碼克隆檢測(cè)機(jī)構(gòu)I而檢測(cè)的部分代碼的源代碼上的位置信息。位置信息指區(qū)域信息。
[0032]代碼克隆信息調(diào)整機(jī)構(gòu)3進(jìn)行公共化單位設(shè)定,讀入通過(guò)代碼克隆信息獲得機(jī)構(gòu)2而獲得的部分代碼的位置信息,抽取具有任意的粒度(結(jié)構(gòu)一致)的部分代碼。粒度作為進(jìn)行代碼的公共化的單位而設(shè)定。粒度可根據(jù)源代碼形成裝置100產(chǎn)生的源代碼的理解容易性,維護(hù)性而確定。
[0033]代碼克隆信息獲得機(jī)構(gòu)4通過(guò)代碼克隆信息調(diào)整機(jī)構(gòu)3,設(shè)定公共化單位,獲得已抽取的部分代碼的源代碼上的位置信息。通過(guò)代碼克隆信息獲得機(jī)構(gòu)2而獲得的部分代碼的位置信息破壞。
[0034]部分代碼間差分信息形成機(jī)構(gòu)6檢測(cè)部分代碼間的差分。對(duì)于差分,在具有類似代碼的關(guān)系的部分代碼間進(jìn)行檢測(cè)。根據(jù)已檢測(cè)的差分,獲得部分代碼間差分信息。
[0035]公共代碼形成機(jī)構(gòu)7按照預(yù)定的規(guī)則,根據(jù)針對(duì)代碼克隆而預(yù)定的單位,作為典型方式根據(jù)粒度,形成公共代碼。也可在公共代碼的形成中,確定不采用部分代碼間差分信息的規(guī)則。檢測(cè)已形成的公共代碼,與處于類似代碼的關(guān)系的部分代碼的差分。將已檢測(cè)的差分信息作為部分代碼間差分信息而獲得。
[0036]通過(guò)公共代碼形成機(jī)構(gòu)7而獲得的部分代碼間差分信息破壞。
[0037]嵌入代碼信息獲得機(jī)構(gòu)8根據(jù)部分代碼間差分信息,形成帶有差分信息的類似代碼?目息O
[0038]調(diào)整源代碼形成機(jī)構(gòu)9根據(jù)上述處理結(jié)果,形成從各源代碼中刪除該部分代碼的命令,形成嵌入好的源代碼的公共代碼插入指示命令。
[0039]所刪除的命令為與已獲得的部分代碼的位置信息關(guān)聯(lián),而刪除該部分代碼的命令,形成嵌入好的源代碼的公共代碼插入指示命令為于已刪除的位置,嵌入由嵌入代碼信息而形成的公共代碼和已形成的差分信息,不實(shí)質(zhì)上改變?cè)创a的結(jié)構(gòu)上的形態(tài),形成嵌入好的源代碼的命令。嵌入好的源代碼為源代碼。
[0040]通過(guò)像這樣形成,形成提供給,用于外部的處理器101的嵌入好的源代碼。像這樣,已形成的規(guī)模減小的源代碼103用于處理器101中的處理。
[0041]源代碼提供裝置110將規(guī)模減小的源代碼103,與已形成的通過(guò)源代碼維護(hù)用信息形成機(jī)構(gòu)105而形成的維護(hù)用信息104提供到處理器101中。通過(guò)這2者的提供,顧客容易使用源代碼。
[0042]圖2表示進(jìn)行2個(gè)類似部分代碼的公共處理的方法,與包括進(jìn)行其自動(dòng)化的方法的圖。
[0043]在圖2中,步驟是大致劃分的,其方法由:
I.類似代碼的抽取步驟(即,代碼克隆抽取步驟);
2.公共代碼的形成步驟;
3.公共代碼嵌入命令的替換步驟;
4.維護(hù)用資料的形成步驟;
5.形成信息提供步驟
構(gòu)成,通過(guò)這些步驟,將源代碼和關(guān)聯(lián)的維護(hù)用信息提供給作為使用者的顧客的終端。
[0044]在1.類似代碼的抽取步驟中,
I一I在下述的條件下,抽取類似部分代碼。
[0045]I)進(jìn)行公共化的單位。作為公共化的單位,抽取單位為預(yù)定的任意的粒度;
2)形成在程序文法上視為等同的句子結(jié)構(gòu)(代碼克隆);
I 一2獲得作為類似部分代碼的信息的,下述的信息。
[0046].類似部分代碼中的占據(jù)于源代碼上的位置信息。
[0047]在2.公共代碼的形成步驟中,根據(jù)已抽取的類似部分代碼,形成公共代碼文件。
[0048]2—I形成公共代碼。對(duì)于公共代碼,如果按照相對(duì)關(guān)聯(lián)的類似部分代碼的差分少的方式形成公共代碼,則源代碼文件整體的維護(hù)性提高。
[0049]2—2計(jì)算已形成的公共代碼,與關(guān)聯(lián)的類似部分代碼的差分。
[0050]2—3將已形成的公共代碼作為公共代碼文件而形成。
[0051]在3.公共代碼嵌入命令的替換步驟中,進(jìn)行公共代碼嵌入命令的替換。進(jìn)行公共代碼嵌入命令的替換。刪除源代碼內(nèi)的各類似部分代碼,在已刪除的位置(I一2a)中,插入“在補(bǔ)充公共代碼和類似部分代碼的差分的同時(shí),插入公共代碼文件的內(nèi)容”的命令。即,插入公共代碼插入指示命令。像這樣,形成具有刪除命令和公共代碼插入指示命令的規(guī)模減小的源代碼。
[0052]在4.維護(hù)用資料的形成步驟中,將已制作的公共代碼,已修正的源代碼的關(guān)聯(lián),針對(duì)類似代碼而匯集,將由此得到的列表作為文件而輸出。將維護(hù)用信息與規(guī)模減小的源代碼一起地,提供給顧客。
[0053]圖3表示源代碼提供方法的實(shí)施例。
[0054]在圖3中,方法像上述那樣,由1.類似部分代碼的抽取和代碼調(diào)整;2.公共代碼的形成;3.公共代碼插入的替換;4.維護(hù)用資料的形成;5形成信息的提供構(gòu)成。
[0055]在圖3中,在類似部分代碼的抽取中,配備源代碼31(在圖1中,為源代碼102),參照已準(zhǔn)備的源代碼31,進(jìn)行靜態(tài)解析(靜態(tài)解析在過(guò)去是已知的),進(jìn)行包括類似部分代碼的類似部分代碼的代碼克隆的檢測(cè)。獲得包括像這樣而切出,檢測(cè)的類似部分代碼的代碼克隆信息33。參照代碼克隆信息33,進(jìn)行針對(duì)代碼克隆的調(diào)整,比如,粒度調(diào)整34。參照重構(gòu)粒度信息39,針對(duì)進(jìn)行了代碼克隆粒度調(diào)整34的代碼克隆,獲得代碼克隆信息35。
[0056]按照重構(gòu)調(diào)整基準(zhǔn),代碼克隆構(gòu)成代碼克隆候補(bǔ),制作文件。
[0057]針對(duì)重構(gòu)候補(bǔ)代碼,參照重構(gòu)判斷基準(zhǔn)信息36,進(jìn)行重構(gòu)判斷37,形成重構(gòu)對(duì)象代碼克隆信息38。
[0058]轉(zhuǎn)到2.公共代碼的形成。
[0059]在該步驟,進(jìn)行重構(gòu)對(duì)象代碼克隆之間差分的檢測(cè)40。根據(jù)已檢測(cè)的差分,形成差分信息。參照差分信息,獲得帶有差分信息的代碼克隆信息41。參照帶有差分信息的代碼克隆信息41,進(jìn)行公共代碼形成42。根據(jù)已形成的公共代碼和差分信息,獲得公共代碼43和公共化處理用的公共代碼信息44。
[0060]轉(zhuǎn)到3.公共代碼嵌入命令的替換。
[0061 ]為了該轉(zhuǎn)換,形成刪除命令,公共代碼插入指示命令,進(jìn)行插入,即,嵌入45 ο形成,獲得具有該嵌入命令的嵌入源代碼46。由此,對(duì)于嵌入源代碼,實(shí)質(zhì)上沒有改變維護(hù)前的源代碼的結(jié)構(gòu)上的形態(tài),與維護(hù)前的源代碼的規(guī)模相比較,尺寸縮小。
[0062]轉(zhuǎn)到4.維護(hù)用資料用的形成和5.形成信息的提供。
[0063]在該步驟,形成包括源代碼處理方法信息的維護(hù)用信息,提供已形成的,源代碼信息和維護(hù)用信息。
[0064]像這樣,解析在處理器中進(jìn)行的單一或多個(gè)源程序的多個(gè)源代碼,以下述情況為條件,檢測(cè)類似部分代碼,該下述情況指形成針對(duì)在該源代碼中包含的至少2個(gè)部分代碼而進(jìn)行公共化處理的預(yù)定的單位,并且形成在程序文法上視為等同的句子結(jié)構(gòu);
檢測(cè)多個(gè)源代碼的代碼克隆之間的差分,針對(duì)各源代碼,形成差分信息;
針對(duì)各源代碼,形成由已形成的公共代碼和已形成的差分信息構(gòu)成的嵌入代碼信息;形成與已獲得的位置信息關(guān)聯(lián),而刪除該部分代碼的命令,以及嵌入好的源代碼,在已刪除的位置,嵌入由嵌入代碼信息而形成的公共代碼和已形成的差分信息,形成不實(shí)質(zhì)上改變?cè)创a的結(jié)構(gòu)上的形態(tài),而形成嵌入好的源代碼的命令; 形成嵌入代碼信息的關(guān)系的維護(hù)用信息,其由多個(gè)程序的各調(diào)整部分代碼,與已形成的公共代碼和已檢測(cè)的差分構(gòu)成;
提供源代碼的結(jié)構(gòu)上的形態(tài)實(shí)質(zhì)上沒有改變,與參照的源代碼相比較,各規(guī)??s小的源代碼和該嵌入代碼信息的關(guān)系的維護(hù)用信息。由此,顧客可進(jìn)行采用像上述那樣而形成的公共代碼的源代碼的各種處理。
[0065 ]圖4?圖6表示圖3所示的內(nèi)容的具體細(xì)節(jié)。通過(guò)圖3而說(shuō)明的事項(xiàng)不按照必要程度以上的程度而反復(fù)。
[0066]圖4表示1.類似代碼的抽取的內(nèi)容的具體細(xì)節(jié)。在圖4中,通過(guò)類似部分代碼抽取,抽取代碼克隆。從源代碼A中,將源代碼A內(nèi)的一個(gè)代碼作為部分代碼(I)32A而抽取,構(gòu)成一個(gè)部分代碼(1)32B。另外,從源代碼B,抽取源代碼B內(nèi)的類似代碼(1)32C,構(gòu)成類似部分代碼(1)32D。一個(gè)部分代碼(1)32B和類似部分代碼(1)32D的2個(gè)部分代碼處于類似的關(guān)系,處于代碼克隆的關(guān)系。
[0067]像這樣,進(jìn)行靜態(tài)解析,進(jìn)行針對(duì)多個(gè)源代碼31的代碼克隆檢測(cè)32。
[0068]對(duì)于判斷代碼的類似性的方法,人們知道有各種方法,可采用公知的方法的代碼類似判斷方法。
[0069]根據(jù)一個(gè)部分代碼(1)32B和類似部分代碼(1)32D,獲得類似部分代碼信息33。作為類似部分代碼信息的,類似代碼中的占據(jù)于源代碼上的位置作為位置信息而獲得。
[0070]在下一步驟,參照重構(gòu)粒度信息39,進(jìn)行將類似部分代碼調(diào)整到公共化處理的公共代碼的單位的代碼克隆粒度調(diào)整34。獲得按照代碼公共化實(shí)施單位而調(diào)整公共代碼的單位的代碼克隆信息35。將代碼克隆調(diào)整到公共代碼的粒度。即,調(diào)整到重構(gòu)粒度。
[0071]調(diào)整指削減類似部分代碼的一部分的代碼的一部分,或分割類似部分代碼,對(duì)應(yīng)代碼公共化實(shí)施單位,比如,實(shí)施粒度。在公共代碼以下的粒度的場(chǎng)合,不需要公共化,從公共化處理的對(duì)象中排除。通過(guò)該調(diào)整,代碼公共化后的源代碼文件的維護(hù)性相對(duì)沒有進(jìn)行調(diào)整的場(chǎng)合,是提尚的。
[0072]對(duì)于調(diào)整單位,粒度單位,函數(shù),數(shù)據(jù)結(jié)構(gòu)等的(I)公共化處理后的程序維護(hù)性沒有受到損害,(2)適當(dāng)設(shè)定大于后述的公共代碼插入命令的,程序語(yǔ)言上的粒度。即,對(duì)于粒度,從程序的運(yùn)算處理或數(shù)據(jù)結(jié)構(gòu)中的任意者或兩者的觀點(diǎn),利用將程序語(yǔ)言結(jié)構(gòu)上的粒度作為重構(gòu)的對(duì)象,預(yù)先設(shè)定于重構(gòu)粒度信息中的粒度。
[0073]?給出削減到公共化的粒度單位的例子。將代碼克隆I34A削減到實(shí)施單位的公共化處理的粒度單位,構(gòu)成代碼克隆I34B。于是,代碼克隆I指按照公共化處理的粒度單位而設(shè)定調(diào)整,設(shè)定的代碼克隆。
[0074]?給出分割成公共化的粒度單位的例子。將代碼克隆II34C分割為實(shí)施單位的公共化處理的粒度單位,形成代碼克隆II34D和代碼克隆II34E。于是,代碼克隆1134 C和代碼克隆II34E構(gòu)成以多個(gè)公共化處理的粒度單位而設(shè)定調(diào)整,設(shè)定的重構(gòu)候補(bǔ)代碼。代碼克隆作為重構(gòu)候補(bǔ)代碼,制成重構(gòu)代碼克隆信息的文件。
[0075]對(duì)于重構(gòu)候補(bǔ)代碼,通過(guò)參考重構(gòu)判斷基準(zhǔn)信息36,進(jìn)行重構(gòu)判斷37(重構(gòu)判斷部的判斷),形成重構(gòu)對(duì)象代碼克隆,獲得代碼克隆信息38。在下面稱為代碼克隆。
[0076]進(jìn)行重構(gòu)判斷37的重構(gòu)部根據(jù)已提供的判斷信息(構(gòu)成重構(gòu)對(duì)象的源代碼的結(jié)構(gòu)等),已計(jì)算的維護(hù)容易性的傾向(已有的尺度,比如,所削減的源代碼的規(guī)模,維護(hù)容易性指數(shù)等),設(shè)定從對(duì)象的代碼克隆信息文件中而進(jìn)行重構(gòu)的重構(gòu)候補(bǔ)代碼。
[0077]針對(duì)重構(gòu)對(duì)象的“數(shù)據(jù)結(jié)構(gòu)的描述”和“運(yùn)算描述”的每個(gè)而進(jìn)行判斷。接著,以調(diào)整單位,比如,程序語(yǔ)言的標(biāo)記等級(jí)的粒度而收集像在下面所示的那樣選擇的代碼克隆之間的差分信息,將該結(jié)果與在先已選擇的代碼克隆關(guān)聯(lián),獲得重構(gòu)對(duì)象代碼克隆,將其存儲(chǔ)于重構(gòu)代碼克隆信息文件中。
[0078]像這樣,重構(gòu)用于下述的步驟,S卩,不僅針對(duì)類似代碼,作為代碼克隆而檢測(cè),而且按照形成公共化代碼,收集差分信息,可利用公共化代碼的方式進(jìn)行置換,直至用于源代碼形成的公共代碼的適用。
[0079]圖5表示2.公共代碼的形成的內(nèi)容的具體細(xì)節(jié)。
[0080]在代碼克隆之間差分抽取40中,檢測(cè)類似的代碼克隆之間的公共部分以外的差分。如果為完全相同的代碼,則沒有差分,但是,在類似的場(chǎng)合,具有差分。形成由公共代碼和與該公共代碼關(guān)聯(lián)的差分構(gòu)成的嵌入用的代碼。
[0081]在類似的代碼克隆中,具有公共部分在雙方中是公共的,在僅僅于一者中具有構(gòu)成差分的代碼的情況,公共部分在雙方中是公共的,存在相互具有差異的代碼的情況。公共代碼形成在具有這些差異的場(chǎng)合,不具有差異的場(chǎng)合進(jìn)行,在具有差異的場(chǎng)合,以差分添加于公共代碼中的方式形成。
[0082]形成下述形態(tài),其中,針對(duì)源代碼A的代碼克隆(1)40A和針對(duì)源代碼B的代碼克隆(I ’)40B為代碼克隆,在它們中,分別附加差分。代碼克隆(I )40A和代碼克隆(I ’)40B在代碼克隆之間,為同一部分。在類似部分代碼中,于其同一部分,附加各差分。根據(jù)代碼克隆(I)40A和其差分,代碼克隆(I’)40A和其差分,獲得帶有差分信息的代碼克隆41,重構(gòu)對(duì)象代碼克隆信息41。該帶有差分信息的代碼克隆41用作嵌入用的代碼。
[0083]由代碼克隆信息41,形成公共代碼43,針對(duì)公共代碼,存儲(chǔ)公共代碼文件。像這樣,存儲(chǔ)已形成于公共代碼文件中的公共代碼。
[0084]在公共代碼形成42中,從各代碼克隆中,抽取公共部分,形成公共代碼文件。
[0085]在源代碼A和其它的源代碼的代碼克隆(I,(1’)的代碼克隆之間,針對(duì)同一代碼部分,形成公共代碼。因此,像公共代碼43所示的那樣,對(duì)應(yīng)于對(duì)象的源代碼,形成一個(gè)或多個(gè)公共代碼。通過(guò)形成公共代碼,形成公共代碼信息44,該公共代碼信息44由已獲得的代碼克隆位置信息和已形成的公共代碼以及檢測(cè)對(duì)象代碼克隆之間的差分構(gòu)成。
[0086]圖6表示3.公共代碼嵌入命令的替換的內(nèi)容的具體細(xì)節(jié)和4.維護(hù)用資料的形成,
5.形成信息的提供的內(nèi)容。
[0087]形成公共代碼插入指示命令,進(jìn)行命令的嵌入45。
[0088]從程序代碼中,刪除相當(dāng)于重構(gòu)代碼克隆的部分代碼,并且插入各公共代碼的插入代碼的插入命令。
[0089]另外,在公共代碼插入指示命令中,附加所插入的公共代碼和公共代碼的差分信息。
[0090]從源代碼中,刪除相當(dāng)于重構(gòu)對(duì)象代碼克隆的部分代碼,并且形成各公共代碼的所插入的插入命令,指示插入。附加與公共代碼的差分信息。形成嵌入好的源代碼46。
[0091]在圖6中,從源代碼中,由該部分的位置起而進(jìn)行相當(dāng)于調(diào)整代碼克隆的部分代碼的刪除46A,并且插入已形成的各公共代碼的公共代碼插入指示命令46B。進(jìn)行公共代碼插入指示命令嵌入46。另外,在公共代碼插入指示命令中,于所插入的公共代碼處附加與公共代碼的差分信息。
[0092]作為同一部分和類似部分代碼的公共化處理的結(jié)果,嵌入好的源代碼46形成已形成的源代碼。針對(duì)同一部分代碼,通過(guò)上述步驟,可進(jìn)行處理。
[0093]4.形成維護(hù)用資料,5.提供形成信息。
[0094]在該維護(hù)用資料的形成步驟,與公共化處理一起地,形成公共代碼列表.公共代碼調(diào)處源程序列表.刪除程序列表等的維護(hù)用資料。
[0095]可提供已形成的信息。
[0096].規(guī)模(代碼行數(shù))列表資料:每個(gè)程序源代碼文件的,修正行數(shù).刪除行數(shù).追加行數(shù)等的規(guī)模的列表
?公共代碼列表:公共代碼的列表
?刪除代碼關(guān)聯(lián)列表:表示將公共代碼置換為哪個(gè)類似代碼的關(guān)聯(lián)的列表;
?修正代碼列表:因?qū)㈩愃拼a置換為公共代碼的影響而修正的部位的列表;
在提供信息時(shí),將已形成的源代碼的命令的嵌入信息作為原始的源代碼的維護(hù)用信息而形成,存儲(chǔ);
在外部的處理器中,不實(shí)質(zhì)上改變?cè)创a的結(jié)構(gòu)上的形態(tài),與已參照的源代碼相比較,提供規(guī)??s小的源代碼,將在該提供時(shí)存儲(chǔ)的維護(hù)用信息作為電子信息而提供。
[0097]像這樣,構(gòu)成源代碼提供裝置110,其中:
形成嵌入代碼信息的關(guān)系的維護(hù)用信息,其由多個(gè)程序的各調(diào)整部分代碼,已形成的公共代碼和與公共代碼關(guān)聯(lián)而檢測(cè)的差分構(gòu)成;
不實(shí)質(zhì)上改變?cè)创a的結(jié)構(gòu)上的形態(tài),提供與已參照的源代碼相比較,各規(guī)??s小的源代碼和該嵌入代碼信息的關(guān)系的維護(hù)用信息。
[0098]圖7?圖14表不公共化處理例子。
[0099]圖7為COBDL記錄的例子,表示文件I,文件2,文件3的例子。
[0100]圖8,圖9表示類似代碼的抽取例子。
[0101]圖8表示克隆I的例子,圖9表示克隆2的例子。示出文件I的N0.2?5,文件2的N0.2?5,文件3的N0.13?16為代碼克隆的情況。
[0102]圖9表示文件3,表示N0.15,16與N0.19,20為代碼克隆。
[0103]圖10表示類似部分代碼。
[0104]圖11表示共同代碼的形成。示出形成N0.2?5的公共代碼。
[0105]圖12為表示共同代碼插入指示命令的替換。
[0106]修正帶有背景色(網(wǎng)格)的部分。以邏輯方式刪除或以物理方式刪除文件I的N0.2?5,文件2的N0.2?5,文件3的N0.13?16。示出在文件3中的N0.17中插入公共代碼插入指示命令的情況。
[0107]通過(guò)不實(shí)質(zhì)上改變?cè)创a的結(jié)構(gòu)上的形態(tài),形成嵌入好的源代碼的命令而執(zhí)行。
[0108]圖13表示針對(duì)文件I,文件2,插入公共代碼插入指示命令的情況。
[0109]圖14表示重構(gòu)判斷基準(zhǔn)信息例子。
[0110]圖15表示重構(gòu)判斷例子。例I為2個(gè)數(shù)據(jù)描述作為代碼克隆候補(bǔ)而存在,但是沒有構(gòu)成重構(gòu)對(duì)象的場(chǎng)合。例2為2個(gè)數(shù)據(jù)描述作為代碼克隆候補(bǔ)而存在,但是構(gòu)成重構(gòu)對(duì)象的場(chǎng)合。
[0111]源代碼形成裝置100包括:
代碼克隆檢測(cè)機(jī)構(gòu),該代碼克隆檢測(cè)機(jī)構(gòu)解析于處理器中執(zhí)行的單一或多個(gè)源程序的多個(gè)源代碼,以形成針對(duì)該源代碼中包含的至少2個(gè)部分代碼,進(jìn)行公共化處理的預(yù)定單位,形成在程序文法上視為相同的句子結(jié)構(gòu)為條件,檢測(cè)形成類似部分代碼克隆的情況;代碼克隆信息獲得機(jī)構(gòu),該代碼克隆信息獲得機(jī)構(gòu)針對(duì)多個(gè)源代碼,已檢測(cè)的2個(gè)部分代碼處于代碼克隆關(guān)系,獲得該部分代碼的源代碼上的位置信息;
公共代碼形成機(jī)構(gòu),該公共代碼形成機(jī)構(gòu)針對(duì)多個(gè)程序的各代碼克隆,形成公共代碼;調(diào)整源代碼差分信息獲得機(jī)構(gòu),該調(diào)整源代碼差分信息獲得機(jī)構(gòu)檢測(cè)多各源代碼的代碼克隆之間的差分,針對(duì)各源代碼,形成差分信息;
嵌入代碼信息獲得機(jī)構(gòu),該嵌入代碼信息獲得機(jī)構(gòu)針對(duì)各源代碼,形成由已形成的公共代碼和已形成的差分信息構(gòu)成的嵌入代碼信息;
調(diào)整源代碼形成機(jī)構(gòu),該調(diào)整源代碼形成機(jī)構(gòu)包括從各源代碼中,刪除該部分代碼的命令,以及形成嵌入好的源代碼的命令;
在這里,所刪除的命令為與已獲得的位置信息關(guān)聯(lián)而刪除該部分代碼的命令,形成嵌額好的源代碼的命令為下述的命令,其于已刪除的位置,嵌入由嵌入代碼信息形成的公共代碼和已形成的差分信息,不實(shí)質(zhì)上改變?cè)创a的結(jié)構(gòu)上的形態(tài),形成嵌入好的源代碼。
[0112]源代碼形成裝置100包括:
粒度調(diào)整設(shè)定機(jī)構(gòu),該粒度調(diào)整設(shè)定機(jī)構(gòu)針對(duì)多個(gè)源代碼的各代碼克隆,從已識(shí)別的粒度單位,按照預(yù)定的rule,調(diào)整,設(shè)定作為構(gòu)成公共化實(shí)施單位的公共化代碼的單位的粒度;
代碼克隆信息獲得機(jī)構(gòu),該代碼克隆信息獲得機(jī)構(gòu)針對(duì)多個(gè)源代碼的各代碼克隆,獲得作為公共化實(shí)施單位的,經(jīng)過(guò)調(diào)整,設(shè)定的公共化代碼粒度的信息;
公共代碼形成機(jī)構(gòu)針對(duì)多個(gè)程序的各代碼克隆,形成公共代碼;
代碼克隆之間差分信息獲得機(jī)構(gòu)檢測(cè)多個(gè)源代碼的代碼克隆之間的差分,針對(duì)各源代碼,形成差分信息;
嵌入代碼信息獲得機(jī)構(gòu)針對(duì)各源代碼,形成由該公共代碼和已形成的差分信息構(gòu)成的嵌入代碼信息。
[0113]形成嵌入好的源代碼的命令為下述命令,其根據(jù)嵌入代碼信息,嵌入該公共化代碼和與代碼克隆有關(guān)而形成的差分,不實(shí)質(zhì)上改變?cè)创a的結(jié)構(gòu)上的形態(tài),形成嵌入好的源代碼。
[0114]代碼克隆檢測(cè)機(jī)構(gòu)檢測(cè)同一和類似部分代碼關(guān)系的情況,代碼克隆信息獲得機(jī)構(gòu)獲得同一和類似部分代碼的信息。形成嵌入好的源代碼的命令為形成還嵌入了具有表示沒有差分的信息的嵌入代碼信息的源代碼的命令。
[0115]像這樣,可對(duì)程序代碼的同一部分代碼和/或類似部分代碼進(jìn)行公共化處理,由于形成插入上述刪除和嵌入命令的源代碼,故可有效地削減源代碼的規(guī)模。
[0116]另外,源代碼的結(jié)構(gòu)上的形態(tài)實(shí)質(zhì)上沒有改變,在維護(hù)時(shí),使用方便性,維護(hù)性良好,于是具有通用性,以良好的效率而進(jìn)行公共化處理,將可公共化處理的范圍放大,以良好的效率而進(jìn)行公共化,另外與參照的源代碼相比較,可提供規(guī)??s小的源代碼。
[0117]此外,可提供規(guī)??s小而制作的源代碼。另外,按照本實(shí)施例,由于在像上述那樣而設(shè)定的公共代碼粒度下,獲得公共代碼信息,該公共代碼信息由代碼克隆關(guān)系的類似部分代碼和已形成的公共代碼以及已檢測(cè)的各公共代碼粒度代碼克隆類似部分代碼之間的差分構(gòu)成,故針對(duì)各源代碼,從源代碼中刪除已獲得的代碼克隆關(guān)系的類似部分代碼,可分別插入已形成的公共代碼和已檢測(cè)的各公共代碼粒度代碼克隆類似部分代碼之間的差分,可形成代碼克隆嵌入好的源代碼。另外,由于可根據(jù)已設(shè)定的公共代碼粒度,對(duì)源代碼的同一部分和/或類似部分代碼進(jìn)行公共化處理,故可有效地削減源代碼的規(guī)模。
【主權(quán)項(xiàng)】
1.一種源代碼形成裝置,其特征在于該源代碼形成裝置包括: 類似代碼檢測(cè)機(jī)構(gòu),該類似代碼檢測(cè)機(jī)構(gòu)解析源代碼,檢測(cè)源代碼中包含的相互類似的部分代碼,獲得該源代碼上的位置信息; 公共代碼形成機(jī)構(gòu),該公共代碼形成機(jī)構(gòu)根據(jù)上述已檢測(cè)的相互類似的多個(gè)部分代碼,形成公共代碼,并且形成該公共代碼和上述類似的相應(yīng)的各部分代碼的差分信息; 部分代碼替換機(jī)構(gòu),該部分代碼替換機(jī)構(gòu)根據(jù)上述位置信息,將上述源代碼內(nèi)的上述類似的各部分代碼,替換為插入上述公共代碼和上述部分代碼的差分信息的插入代碼。2.根據(jù)權(quán)利要求1所述的源代碼形成裝置,其特征在于上述類似的部分代碼為在程序文法上視為等同的代碼克隆; 上述差分信息為用于將上述部分代碼內(nèi)的描述替換為其它的描述的信息。3.根據(jù)權(quán)利要求2所述的源代碼形成裝置,其特征在于上述類似代碼檢測(cè)機(jī)構(gòu)根據(jù)程序文法,抽取作為上述代碼克隆的類似的部分代碼,通過(guò)已抽取的多個(gè)部分代碼的比較或基準(zhǔn)的比較,進(jìn)行作為該部分代碼的替換對(duì)象的一部分除外或分割的粒度調(diào)整。4.根據(jù)權(quán)利要求1?3中的任何一項(xiàng)所述的源代碼形成裝置,其特征在于其包括維護(hù)用信息形成機(jī)構(gòu),該維護(hù)用信息形成機(jī)構(gòu)形成具有上述已替換的類似的部分代碼,與上述位置信息,上述公共代碼,與上述差分信息的維護(hù)用信息。5.一種源代碼形成方法,其特征在于該方法包括: 類似代碼檢測(cè)步驟,在該步驟中,類似代碼檢測(cè)機(jī)構(gòu)解析源代碼,檢測(cè)源代碼中包含的相互類似的部分代碼,獲得該源代碼上的位置信息; 公共代碼形成步驟,在該步驟中,公共代碼形成機(jī)構(gòu)根據(jù)上述已檢測(cè)的相互類似的多個(gè)部分代碼,形成公共代碼,并且形成該公共代碼和上述類似的相應(yīng)的各部分代碼的差分信息; 部分代碼替換步驟,在該步驟中,部分代碼替換機(jī)構(gòu)根據(jù)上述位置信息,將上述源代碼內(nèi)的上述類似的各部分代碼,替換為插入上述公共代碼和上述部分代碼的差分信息的插入代碼。6.根據(jù)權(quán)利要求5所述的源代碼形成方法,其特征在于上述類似的部分代碼為在程序文法上視為等同的代碼克隆; 上述差分信息為用于將上述部分代碼內(nèi)的描述替換為其它的描述的信息。7.根據(jù)權(quán)利要求6所述的源代碼形成方法,其特征在于在上述類似代碼檢測(cè)步驟中,根據(jù)程序文法,抽取作為上述代碼克隆的類似的部分代碼,通過(guò)已抽取的多個(gè)部分代碼的比較或基準(zhǔn)的比較,進(jìn)行作為該部分代碼的替換對(duì)象的一部分除外或分割的粒度調(diào)整。8.一種源代碼提供方法,其特征在于該方法不但提供在權(quán)利要求5?7中的任何一項(xiàng)所述的源代碼形成方法中形成的源代碼; 而且該方法包括維護(hù)用信息形成步驟,在該步驟中,提供具有上述已替換的類似的部分代碼,與上述位置信息,上述公共代碼,與上述差分信息的維護(hù)用信息。
【文檔編號(hào)】G06F9/44GK106068496SQ201580014888
【公開日】2016年11月2日
【申請(qǐng)日】2015年3月18日 公開號(hào)201580014888.7, CN 106068496 A, CN 106068496A, CN 201580014888, CN-A-106068496, CN106068496 A, CN106068496A, CN201580014888, CN201580014888.7, PCT/2015/58050, PCT/JP/15/058050, PCT/JP/15/58050, PCT/JP/2015/058050, PCT/JP/2015/58050, PCT/JP15/058050, PCT/JP15/58050, PCT/JP15058050, PCT/JP1558050, PCT/JP2015/058050, PCT/JP2015/58050, PCT/JP2015058050, PCT/JP201558050
【發(fā)明人】城代佳範(fàn)
【申請(qǐng)人】日立公共系統(tǒng)有限公司