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