源代码形成和提供装置、以及源代码形成和提供方法

文档序号:10699111阅读:542来源:国知局
源代码形成和提供装置、以及源代码形成和提供方法
【专利摘要】本发明的课题在于针对源代码,扩大可公共化处理的范围,使用方便性·维护性良好,具有通用性,可以良好的效率而公共化处理。针对各源代码,形成嵌入代码信息,该嵌入代码信息由已形成的公共代码和已检测的差分构成,针对各源代码,从已获得的位置信息中,删除部分代码,在已删除的位置,嵌入已形成的嵌入代码,不实质上改变源代码的结构上的形态,形成嵌入好的源代码。
【专利说明】
源代码形成和提供装置、以及源代码形成和提供方法
技术领域
[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
【发明人】城代佳範
【申请人】日立公共系统有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1