模组生成装置、模组生成方法、模组生成程序以及记录有该程序的记录介质的制作方法

文档序号:6457059阅读:217来源:国知局
专利名称:模组生成装置、模组生成方法、模组生成程序以及记录有该程序的记录介质的制作方法
技术领域
本发明涉及能够从已有的资源中生成可再利用的模组的模组生成装 置、模组生成方法、模组生成程序以及记录有该程序的记录介质。
背景技术
图18是示出以往的软件开发处理流程的图。如图18所示,当开发新 的软件时,首先利用设计辅助工具,从用自然语言描述的新开发计划书1 制作设计计划书2 (步骤S1901)。在此,对新开发计划书1以及已经登 记的工具和部件(已登记部件工具)3进行对比,组合己登记部件工具3 以使其适合新开发计划书l。
接下来,基于设计计划书2进行编码处理(步骤S1902)。然后对编 码而得的代码进行调试处理(步骤S1903)。在调试处理中,进行分析源 代码4的句法的句法分析(parser)处理(步骤S1911)、分析源代码4的 结构的结构分析处理(步骤S1912)、以及删除冗余代码等的代码级别的 最优化处理(步骤S1913),从而生成执行代码5。
在最优化处理中,执行常数传播或函数内嵌(inlining)、或者循环展 开(loop unrolling)等公知的处理。程序的结构本身不被改变。编码处理 和调试处理的一部分由软件开发人员人工进行。这里,人工进行是指不是 由设计辅助工具等计算机执行的自动处理,而是由开发人员逐一经过试运 行错误和确认来进行处理的意思。
在调试处理之后,利用执行代码5进行测试(步骤S1904),生成开 发成果物6。该开发成果物6作为已有资源7来再利用。当再利用该已有 资源7以及别处使用过并取得了实际成效的资源8时,如果这些资源7、 8 的规格发生了变更,就需要软件开发人员人工制作改造计划书9。已公知有一种面向对象的框架系统,该系统使用创新的框架体系结构 来提供第一面向对象操作系统。提供该面向对象框架系统的装置包括进 行面向对象应用程序处理的操作系统装置、常驻于操作系统装置中的对面 向对象应用程序进行标准化的框架处理装置(例如,参考专利文献l)。
专利文件1:日本专利文件特表平8-505721号公报。

发明内容
发明要解决的问题
然而,在上述传统的软件开发处理中,当再利用在别处使用并取得了 实际成效的资源来改造已有资源时,需要开发人员人工分析所提供的源代 码或文档类来制作改造计划书。因此会产生如下的问题。首先,人工进行 的分析结果中可能含有错误。并且,当对于在已有的资源以及在别处使用 并取得了实绩成效的资源中通用的部分进行模组化时,开发人员可能无法 充分地提取通用部分。如果通用部分的提取不充分,在别处取得了实际成 效的资源中新的部分就会变多,对该新部分进行调试处理和测试所消耗的 时间和精力就会增加。另外,上述专利文件1所公开的面向对象的框架系 统并不是从已有资源自动生成可再利用的模组的系统。
本发明就是鉴于上述问题而完成的,其目的在于,提供一种不通过开 发人员的人工操作而从已有资源自动生成可再利用的模组的模组生成装 置、模组生成方法、模组生成程序以及记录有该程序的记录介质。
用于解决问题的手段
为了解决上述问题,达到上述目的,本发明的特征在于,使计算机起 到句法分析部、宏块分析部、接合节点重构部、同一部分融合重构部、近 似部分融合重构部、以及中间语言重构部的功能。句法分析部对程序的源 代码进行句法分析,输出该分析信息。
宏块分析部基于从句法分析部输出的句法分析信息,通过程序的结构 分析将该程序分割成多个块。并且,宏块分析部在各块中的用于识别语句 的变量的编号上,附加表示在该语句中唯一的编号的虚拟部分,并输出该 附加信息和块的结构信息。用于识别各语句的变量的编号由表示在整个源代码中唯一的编号的低位部分以及包含在该语句中唯一的编号的虚拟部分 的高位部分的组合表示。通过如此表示用于识别各语句的变量的编号,能 够对各块的运算模式进行虚拟化。
接合节点重构部基于从宏块分析部输出的结构信息以及附加信息,关 注被定义为子程序的一个块。并且,接合节点重构部对于父辈块内的节 点,以与处理顺序相反的方向(下面称作反向)进行搜索,并且,对于继 承块内的节点,按照处理顺序的方向(下面称作正向)进行搜索,由此提 取与该关注块直接相关的节点。其中,父辈块是指处理顺序在该关注块之 前并且通过被依次处理而到达该关注块的块。继承块是指处理顺序在该关 注块之后并且从该关注块被依次处理的块。
在整个程序中,接合节点重构部所关注的块(子程序)有时在多个部 分被调用。同一部分融合重构部对于这样的使用同一关注块的多个部分, 进行父辈块内的节点之间的比较,并将该父辈块相融合。同样地,同一部 分融合重构部对于这样的多个部分,进行继承块内的节点之间的比较,并 将该继承块相融合。然后,同一部分融合重构部输出作为其结果而获得的 融合块信息。
另外,在整个程序中有时存在结构相似的块(子程序)。近似部分融 合重构部对于这样的不同的每个关注块,进行融合块信息之间的比较,将 具有相同或相似的融合块信息的多个关注块定义为同类的子程序。并且, 近似部分融合重构部将相同或相似的融合块信息相融合,输出作为其结果 而获得的抽象化代码信息。中间语言重构部基于从近似部分融合重构部输 出的抽象化代码信息以及从句法分析部输出的分析信息,输出被通用化了 的部件的信息。
根据本发明,当由同一部分融合重构部以及近似部分融合重构部判断 节点的相同性时,通过在用于识别语句的变量的编号中掩蔽低位部分而只 比较高位部分(虚拟部分),能够容易地判断相同性。因此,能够由计算 机自动提取相同或相似的块。另外,在进行通常的句法分析或结构分析 时,或者由接合节点重构部提取对于关注块的依存节点时,掩蔽高位部分 (虚拟部分)而只参考低位部分来作为用于识别语句的变量的编号,由此能够进行与以往同样的处理。
本发明的模组生成装置、模组生成方法、模组生成程序以及记录有该 程序的记录介质可获得不通过开发人员的人工操作就能够从己有资源自动 生成可再利用的模组的效果。


图l是示出本发明实施方式的模组生成装置的硬件构成的图2是示出本发明实施方式的模组生成装置的功能性构成的图3是示出本发明实施方式的模组生成处理的流程的图4是示出在宏块分析过程中被分类的项目的图5是示意性地示出基于图4的分类表来分割程序的示例的图6是示出宏块分析处理的流程的图7是示出接合节点重构处理的流程的图8是用于说明接合节点重构处理的图9是用于说明接合节点重构处理的图IO是示出同一部分融合重构处理的流程的图ll是用于说明同一部分融合重构处理的图12是用于说明同一部分融合重构处理的图13是用于说明同一部分融合重构处理的图14是示出近似部分融合重构处理的流程的图15是用于说明近似部分融合重构处理的图16是用于说明近似部分融合重构处理的图17是示出应用了本发明实施方式的模组生成处理的软件开发处理 的流程的图18是示出传统的软件开发处理的流程的图。
标号说明 ll句法分析部
12宏块分析部
13接合节点重构部14同一部分融合重构部 15近似部分融合重构部 16中间语言重构部
具体实施例方式
下面,基于附图,对本发明涉及的模组生成装置、模组生成方法、模 组生成程序以及记录有该程序的记录介质的实施例进行详细的说明。但本 发明并不通过该实施例来限定。 (模组生成装置的硬件构成)
图1是示出本发明实施方式的模组生成装置的硬件构成的图。如图1 所示,模组生成装置包括CPU 101、 ROM 102、 RAM 103、 HDD (硬盘 驱动器)104、 HD (硬盘)105、 FDD (软盘驱动器)106、作为可装卸记 录介质的一个示例的FD (软盘)107、显示器108、 I/F (接口) 109、键 盘110、鼠标lll、扫描仪112、打印机113。另外,各构成部通过数据总 线100分别连接。
这里,CPU 101负责对模组生成装置整体进行控制。ROM102中记录 有引导程序(boot program)等程序。RAM 103被用作CPU 101的工作 区。HDD 104依照CPU 101的控制来控制对于HD 105的数据的读/写。 HD 105记录在HDD 104的控制下写入的数据。
FDD 106依照CPU 101的控制来控制对于FD 107的数据的读/写。FD 107记录在FDD 106的控制下写入的数据,或者将记录在FD 107中的数据 读取到模组生成装置中。
可装卸记录介质除了 FD 107之外,也可以是CD-ROM (CD-R、 CD-RW) 、MO、 DVD (Digital Versatile Disk,多功能数码光盘)、存储卡 等。显示器108显示光标(cursor)、图标(icon)、工具箱、文件、图 像、功能信息等数据。该显示器108可以采用CRT、 TFT液晶显示器、等 离子显示器等。
I/F 109通过通信线路连接在因特网等网络114上,并经由该网络114 而与其他装置连接。并且,I/F 109担任网络114与内部间的接口,控制从外部装置的数据输入或者向外部装置的数据输出。I/F 109例如可以釆用调 制解调器或LAN适配器等。
键盘110具有用于输入文字、数字以及各种指示等的键,进行数据的 输入。另外,也可以是触摸屏式的输入板或小键盘等。鼠标111进行光标 的移动或范围选择、或者窗口的移动或尺寸变更等。只要是具有同样功能 的定点设备,也可以是轨迹球(trackball)或控制杆(joystick)。
扫描仪112光学地读取图像,将图像数据读入模组生成装置内。扫描 仪112也可以具有OCR功能。另外,打印机113对图像数据或文件数据 进行打印。打印机113可以采用激光打印机或喷墨式打印机。 (模组生成装置的功能性构成)
图2是示出本发明实施方式的模组生成装置的功能性构成的图。如图 2所示,模组生成装置包括句法分析(parsing)部11、宏块(macro blocking)分析部12、接合节点重构部13、同一部分融合重构部14、近似 部分融合重构部15以及中间语言重构部16。
句法分析部ll对程序的源代码进行句法分析。宏块分析部12进行程 序的结构分析,并将该程序分割成多个块。另外,宏块分析部12在分割 后的各块中的用于识别语句的变量的编号上,附加用于表示该语句中的唯 一的编号的虚拟部分,从而扩展用于识别语句的变量的编号。
例如,宏块分析部12将传统的在整个源代码中唯一的编号作为低位 比特部,并对其附加上述虚拟部分作为高位比特部。通过如此扩展编号, 用于识别语句的变量的编号以高位部分和低位部分的组合来表示,能够对 各块的运算模式进行虚拟化。
接合节点重构部13关注被定义为子程序(sub routing)的一个块。并 且,接合节点重构部13对该关注块的父辈块内的节点进行反向搜索,提 取从关注块能够反向不间断地追溯的节点,作为与关注块直接相关的节 点。
接合节点重构部13对该关注块的继承块中的节点进行正向搜索。并 且,接合节点重构部13提取从关注块正向连接的节点,作为与关注块直 接相关的节点,其中所述连接的节点是指将关注块的处理接过来的节点,如果存在进一步接过上述节点的处理的节点,则为该节点,以此类 推。
当提取节点时,接合节点重构部13掩蔽高位部分(虚拟部分)而只 参考低位部分以作为用于识别语句的变量的编号。同一部分融合重构部14 关于整个程序中调用接合节点重构部13所关注的子程序的块的多个部 分,对父辈块内的节点进行比较,将相同或相似的父辈块相融合。
另外,同一部分融合重构部M关于继承块,也同样地对继承块内的 节点进行比较,并将相同或相似的继承块相融合。同一部分融合重构部14 在判断节点的相同性时,掩蔽低位部分而只参考高位部分(虚拟部分)以 作为用于识别语句的变量的编号。
近似部分融合重构部15将存在于整个程序中的结构相似的多个子程 序的块定义为同类的子程序。并且,近似部分融合重构部15关于所述被 定义为同类子程序的多个子程序的块,与同一部分融合重构部14同样地 对各父辈块进行融合并对各继承块进行融合。
近似部分融合重构部15在关于同类的子程序判断节点的相同性时, 掩蔽低位部分而只参考高位部分(虚拟部分)以作为用于识别语句的变量 的编号。中间语言重构部16基于近似部分融合重构部15的输出信息,输 出部件化了的源代码或通用化了的部件的信息。
图2所示的例子被构成为设有多组接合节点重构部13和同一部分 融合重构部14的组,并且各组的输出信息被综合后传递给近似部分融合 重构部15。也就是说,根据输入到句法分析部11的源代码的结构来进行 多个处理。
上述的句法分析部11、宏块分析部12、接合节点重构部13、同一部 分融合重构部14、近似部分融合重构部15以及中间语言重构部16的功能 具体来说,例如通过由CPU 101执行记录在图1所示的ROM 102、 RAM 103、 HD105等记录介质中的程序、或者由I/F109来实现。 (模组生成处理顺序)
图3是示出本发明实施方式的模组生成处理的流程的图。如图3所 示,当源代码21被输入到句法分析部11中从而开始了模组生成处理时,首先,句法分析部11执行作为一般编译器的结构中的初始阶段的句法分
析过程(步骤S301)。通过该句法分析步骤,获得作为中间生成信息的句 法分析信息22。
接下来,宏块分析部12基于句法分析信息22,执行宏块分析(结构 分析)过程(步骤S302)。通过宏块分析过程,获得作为中间生成信息的 结构信息和附加信息23。接下来,接合节点重构部13基于结构信息和附 加信息23进行接合节点重构过程(步骤S303)。
接下来,同一部分融合重构部14基于结构信息和附加信息23执行同 一部分融合重构过程(步骤S304)。通过该同一部分融合重构过程,获得 作为中间生成信息的融合块信息24。接下来,近似部分融合重构部15基 于融合块信息24,执行近似部分融合重构过程(步骤S305)。通过该近 似部分融合重构过程,获得中间生成信息的抽象化代码信息25。对于宏块 分析过程、接合节点重构过程、同一部分融合重构过程以及近似部分融合 重构过程,将在后面进行详细说明。
接下来,中间语言重构部16基于抽象化代码信息25以及句法分析信 息22,执行中间语言重构过程(步骤S306)。在该中间语言重构过程 中,对于通过步骤S301 S305的各步骤中的处理而生成的中间语言,进 行综合的重构和信息整理。另外,在中间语言重构过程中,还能够与预处 理器功能协作基于重构后的中间语言来输出源代码。因此,通过该过程, 作为部件化了的源代码或通用化了的部件的信息,能够获得作为源代码21 的分析结果的模组信息26、通过被通用化而可再利用的通用部分模组 27。
(宏块分析过程中的处理) 在宏块分析过程中,宏块分析部12进行用于一般的并列处理的编译 器所进行的块分割。图4示出了在宏块分析过程中被分类的项目。如图4 所示,通常,程序被分类为运算代入处理(A)、循环(B)、条件分支 (C)以及无条件跳转(D)。运算代入处理(A)在源代码中以通常的数 学式来表述。另外,无条件跳转(D)在源代码中以子程序调用(sub routing call)来表述。图5是示意性地示出基于图4的分类表而分割程序的示例的图。分割 后的各块内的字母(A、 B、 C以及D)相当于图4的分类表的左栏的字 母。图5为一个示例,运算代入处理(A)、循环(B)、条件分支(C) 以及无条件跳转(D)的出现顺序和出现次数等并不被限定。
图6是示出宏块分析处理的流程的图。如图6所示,当宏块分析部12 开始了宏块分析处理时,首先,准备作为句法分析信息22而获得的中间 语言程序(E)(步骤S601)。并且,逐行读取中间语言程序(E)。当 语句的种类为代入句或者运算句时(步骤S602: A),进行下面的步骤 S603 S606的处理。
在记述有代入或运算的语句的期间(步骤S603:是),逐行执行。一 旦一系列的代入或运算语句的块结束(步骤S603:否),则将该块定义为 代入块(步骤S604)。接下来,制作表,执行语句的变量的虚拟化处理 (步骤S605)。对于该虚拟化处理,将在后面进行详细说明。并且,制作 语句流图(flow graph)(步骤S606)、返回步骤S602。
当中间语言程序(E)的语句类型为循环时(步骤S602: B),执行 下面的步骤S607 S610的处理。当语句的类型为循环时,该行中记述有 循环的头代码。将程序的终端定义为循环终端(步骤S607),再次调用中 间语言程序(E)(步骤S608),定义为循环块(步骤S609)。
在步骤S608中再次调用中间语言程序(E)是因为循环块中有可能还 存在循环块的缘故。然后,制作输入输出变量表(步骤S610)、返回步骤 S602。当中间语言程序(E)的语句类型为条件分支时(步骤S602-C),制作控制结构表(步骤S611),返回步骤S602。
当中间语言程序(E)的语句类型为跳转命令时(步骤S602: D), 执行以下步骤S612 S615的处理。将程序的终端定义为返回代码(步骤 S612),再次调用中间语言程序(E)(步骤S613),定义为子块(步骤 S614)。在步骤S613中再次调用中间语言程序(E)是因为子块中有可能 还存在子块的缘故。然后,制作输入输出变量表(步骤S615),返回步骤 S602。
在步骤S602中,当中间语言程序(E)的语句表示程序的终端时,结束处理(步骤S616)。由此,可获得由按任务分割和分类的处理块、输入 输出变量表以及控制结构等构成的流图,作为结构信息和附加信息23。 (语句变量的虚拟化处理) 进行变量的虚拟化处理的目的在于通过将通常的结构分析中的语句 的中间语言表述如下进行扩展而使得在后面的处理中容易进行结构比较。 例如,当在源代码中存在如下式1所示的表述时,在通常的中间语言表述 中,如式2 4所示,为变量分配固定的编号。
A=b+c+l ...(式1)
V0—Vl+V2 ...(式2)
V3—V0+C1 …(式3)
V4—V3 …(式4)
此时,当存在如下式5所示那样的同样的运算 代入表述时,生成如 式6 式8所示的中间语言。其中,X、 m以及n在源代码中己出现过,并 在中间语言表述中已被取号。此时,难以简单地比较下面的式6 式8和 上面的式2 式4。
X=m+n+l …(式5)
VII—V5+V6 ...(式6)
V12—V11+C1 …(式7)
V8—V12 …(式8)
因此,在本实施例中,通过表示在整个源代码中唯一的编号的低位部 分(与传统表述相同)以及由表示在该语句中唯一的编号的虛拟部分组成 的高位部分的组合来表示作为表述变量的V (Variable)的后缀的编号, 低位部分虛拟部分高位部分,由此进行虚拟化。例如,当变量表使用16 比特进行表述时,将其扩展为32位。并且,将低位的16比特定义为在中 间语言表述中唯一的编号(传统表述),将高位的16比特定义为在该语 句中唯一的编号。
由此,上述的式2 式4可以用下式9 式ll来表示。另外,上述的 式6 式8可以用下式12 式14来表示。其中,在式9 式14中,用{} 表示的值是保存在高位16比特中的虚拟化的相对编号。V{00}00—V{01}01+V{02}02...(式9)
V {03} 03 —V {00} 00+C {01} 01...(式IO)
V{04}04—V{03}03...(式11)
V{00} 11 —V{01 }05+V{02}06...(式ll)
V{03}12—V{00}ll+C{01}01(式12)
V{04}08—V{03}12...(式13)
在上式9 式14中,当掩蔽V或C的后缀的低位16比特而只参考高位16比特时,可知式9 式11和式12 式14相同。通过上述的宏块分析 处理,结构信息和附加信息23是通过宏任务(macro-tasking)划分的块结 构、以通过上述虚拟化处理而扩展定义的语句图(statement graph)表示的 中间语言。当进行传统的一般的句法分析或者依存关系分析时,掩蔽V或 C的后缀的高位16比特,只参考低位16比特。 (接合节点重构过程中的处理)
图7是示出接合节点重构处理的流程的图。如图7所示,当接合节点 重构部13开始进行接合节点重构处理时,首先,基于获得的作为结构信 息和附加信息23的流图,关注子程序块MTn (步骤S701)。
并且,判断该子程序块MTn和与该子程序块MTn处于依存关系的其 他块MTm之间的依存关系(步骤S702)。子程序块MTn的父辈块和继 承块已在上述的宏块分析过程中生成。
当块MTm为父辈块时(步骤S702:父辈块),关注块MTm的所有 的终端语句Sx (步骤S703)。然后,判断在终端语句Sx中被定义的变量 的集合和在子块MTn中使用的变量的集合的交集(Sx门In(MTn))(步骤 S704)。
当该交集为空集①时(步骤S704: O),对于块MTm内的节点,从 在步骤S701中所关注的子块MTn反向进行语句图的搜索(节点搜索), 并制作列表(步骤S705)。然后,将在步骤S705中搜索到的节点作为进 行与子程序块MTn无关的处理的节点而从块MTm中分割出去(步骤 S706)。
另一方面,当上述交集(Sxnin(MTn))不是空集时(步骤S704: #①),对于块MTm内的节点,从在步骤S701中所关注的子程序块MTn 反向进行节点搜索,制作直接逐渐依存至子程序块MTn的节点的列表 (步骤S707)。另外,在步骤S702中,当块MTm为继承块时(步骤 S702:继承块),关注块MTm的所有的开始语句Sx (步骤S708)。
然后,判断在开始语句Sx中使用的变量的集合和在子程序块MTn中 被定义的变量的集合的交集(SxnOut(MTn))(步骤S709)。当该交集 (SxnOut(MTn))不是空集时(步骤S709:乒O),对于块MTm内的节 点,从在步骤S701中所关注的子程序块MTn正向进行节点搜索,并制作 从子程序块MTn直接逐渐依存而来的节点的列表(步骤S710)。
另一方面,当在步骤S709中上述交集(SxnOut(MTn))为空集O)时 (步骤S709:①),对于块MTm内的节点,从在步骤S701中所关注的 子程序块MTn正向进行语句图的搜索(节点搜索),并制作列表(步骤 S711)。然后,将在步骤S711中搜索到的节点作为进行与子块MTn无关 的处理的节点而从块MTm中分割出去(步骤S712)。
对所有子程序块MTn进行上述步骤S701 S712的处理。由此可以获 得将子块MTn、父辈块内的通过步骤S707所提取的节点群、继承块内的 通过步骤S710所提取的节点群作为子程序块MTn的抽象化块而融合了的 块(以下,称作融合块)28。 MT表示宏任务(macro task)。
图8和图9是用于说明接合节点重构处理的图。在图8中,标号31为 子程序块,标号32为父辈块,标号33为继承块。在父辈块32中,用虚线 包围的节点群34,直接逐渐依存到子程序块31。逐渐依存到别的块的节 点群35作为进行与子块31无关的处理的节点而从父辈块32分割出去。
另外,在继承块33中,用虚线包围的节点群36从子程序块31直接逐 渐依存而来。从别的块逐渐依存而来的节点群37作为进行与子块31无关 的处理的节点而从继承块33分割出去。因此,在如图8所示的结构中, 如图9所示,融合块38为用粗实线包围的部分。 (同一部分融合重构过程中的处理)
在一般的程序中,子程序可能在多个位置被调用。因此,在同一部分 融合重构过程中,同一部分融合重构部14基于通过上述接合节点重构处理而获得的融合块28的信息,对于在程序的多个位置被调用的同一个子
程序块,进行接合节点的比较,进一步将相同或相似的融合块相融合。 此时,只参考通过语句变量的虚拟化处理而扩展的变量的后缀中的例
如高位16比特(虚拟部分)。在一般的程序表述的情况下,难以对与子 程序块接合的节点的相同性进行比较。但是,像本实施例这样,通过对比 较对象的后缀的虚拟部分进行比较,即使在程序中表述不同也能够容易地 提取相同部分。
图IO是示出同一部分融合重构处理的流程的图。如图IO所示,当同 一部分融合重构部14开始了同一部分融合重构处理时,首先准备所有的 处理块(步骤S1001)。然后,逐个读取处理块,判断该处理块是否为子 程序块(步骤S1002)。当不是子程序块时(步骤S1002:否),转入下 一步的处理。
当是子程序块时(步骤S1002:是),进行紧跟其后的块的属性检索 (步骤S1003)。然后,判断所读入的处理块是否为在同一个应用程序的 其他位置被调用的相同的子程序(步骤S1004)。当是相同的子程序时 (步骤S1004:是),对融合块进行再融合(步骤S1005),返回步骤 S1002。否则(步骤S1004:否),返回步骤S1003。
图11 图13是用于说明同一部分融合重构处理的图。在图11中,标 号41为子程序A的块,标号42为其融合块。在该融合块42中,父辈块 侧包括向反方向由节点Nl、节点N2和节点N3按此顺序连接的节点 群、以及节点N4。在融合块42中,继承块侧包括向正方向,由节点N5 和节点N6按此顺序连接的节点群、由节点N7和节点N8按此顺序连接的 节点群、由节点N7和节点N9按此顺序连接的节点群。节点N8和节点 N9是节点N7的分支。
另外,在图12中,标号43是在同一个应用程序的其他位置被调用的 子程序A的块,标号44为其融合块。在该融合块44中,父辈块侧包括 向反方向,由节点N1、节点N2和节点N3按此顺序连接的节点群、由节 点N10和节点Nil按此顺序连接的节点群。在融合块44中,继承块侧包 括向正方向,由节点N5和节点N6按此顺序连接的节点群、节点N12、由节点13和节点N14按此顺序连接的节点群。
此时,如果对子程序A的块41的融合块42和在同一个应用程序的其 他位置被调用的子程序A的块43的融合块44进行融合,则如图13所 示,能够获得以节点N3、节点N4以及节点Nil为参数、并且以节点 N6、节点N8、节点N9、节点N12以及节点N14为返回值的子程序A抽 象化代码API (Application Program Interface,应用程序接口) 45。如上所 述,通过融合最终与同一个子块接合的节点,能够更加简单地表述程序。
通常,当某一个子程序块在程序中的多个位置被调用时,有时在文档 中没有清楚地记载对于子程序块的前处理(父辈块处理)和后处理(继 承块处理)在各个位置为同样的处理。此时,开发人员难以提取作为在多 个位置中同样的处理的前处理(父辈块处理)和后处理(继承块处理)。
但是,在本实施例中,通过扩展语句变量的后缀,能够容易地生成对 于所关注的子程序通用的前处理和后处理的包装代码(wrapping code)
(抽象化代码)。并且,由于能够收集源代码中的同一节点,因此能够縮 小代码本身。
(近似部分融合重构过程中的处理)
图14和图15是用于说明近似部分融合重构处理的图。在图14中,标 号46为子程序B的块,标号47为该子程序B的抽象化代码API。在对于 子程序B的前处理和后处理中,与图13所示的对于子程序A的块41的前 处理和后处理不同点在于以下两点。
第一点是,以在图14中用虚线包围的由节点N15以及节点N16组成 的节点群48来代替节点N4。第二点是,在图14中用虚线包围的节点群 49中,不存在从节点N7分出的节点N9。如此,在不同的子程序中有时也 进行近似的前处理或后处理。
作为具体事例,例如有在运动图像处理的子程序中,对于MPEG (Moving Picture Experts Group) -1、 MPEG-2、以及MPEG-4等运动图像 处理子程序进行运动图像处理的前处理和后处理等。此时,用于输出的图 像帧缓冲器的前处理、图像输出后的滤波处理等后处理是通用的。
近似部分融合重构部15自动提取这样的程序间的相似性。此时,近似部分融合重构部15通过对比较对象的后缀的虚拟部分进行比较,即使 在源代码中表述不同,只要运算结构相同,就认为是相同的。
另外,近似部分融合重构部15将编成组的各块的包装代码(抽象化 块)相融合。此时,近似部分融合重构部15将节点的连续关系相同的节 点群看作同一个节点群融合为一个。对于节点的连续关系相同至中间的节 点群,通过插入分支处理来实现进一步的融合。
例如,在图13和图14所示例子的情况下,如图15所示,近似部分融 合重构部15将子程序A的块41和子程序B的块46统合为同族子程序 51。并且,近似部分融合重构部15插入分支处理52,当使用子程序A时 经由节点N4,当使用子程序B时经由节点N15和节点N16。
另外,近似部分融合重构部15插入分支处理53,当使用子程序A时 经由节点N7以及从其分支出的节点N8或节点N9,当使用子程序B时经 由节点N7和节点N8。由此获得子程序(AB群)的抽象化代码AIP54, 作为对于同族子程序51的抽象化代码API。
图16是示出近似部分融合重构处理的流程的图。如图16所示,当近 似部分融合重构部15开始近似部分融合重构处理时,首先准备所有子块 (步骤S1601)。这里,根据获得的作为抽象化代码信息25的融合块的语 句节点结构,关注某个子程序块MTn的抽象化块,将包含在其中的语句 节点的集合设为Nn。
同样地,作为用于与子程序块MTn进行比较的子程序块,关注其他 子程序块MTm的抽象化块,将包含在其中的语句节点的集合设为Nm。 然后,判断集合Nn和集合Nm的交集(NnHNm)(步骤S1602)。当集 合Nn和集合Nm的交集不是空集①时(步骤S1602: ,逐个增加
得分s (步骤S1603)。
在对子程序块MTn和子程序块MTm的所有组合进行了比较后,获得 了总得分29。在步骤S1602中,当所述交集(NnnNm)为空集①时(步 骤S1602:①),在子程序块MTn和另一个不同的子程序块MTm之间进 行同样的操作。在所有的子程序块之间进行以上的处理。
根据对嵌入的开发环境的要求,预先设定对总得分的阈值。然后,将总得分大于等于阈值的组合的子程序块编成组并作为同族子程序。按照经 验,通过将总得分大于等于1、即至少具有一个相同的相当于前处理或后 处理的代入及运算节点的子程序编成组,可以得到期望的效果。
这样,通过将不同子程序的块的同一节点相融合,能够縮小源代码本 身。另外,通过该近似部分融合重构处理,能够从被分类为近似块的子程 序中提取依赖于硬件规格的子程序。
例如,当被分类的子程序为设备驱动器时,对于设备驱动器的代码来 说,相当于其前处理和后处理的包装代码(抽象化代码)对于从更上层调 用包装代码的块隐藏硬件的差异。也就是说,通过近似部分融合重构处理 而融合的包装代码起到与通常的设备驱动器的包装代码相同的作用。
根据实施例,通过扩展语句变量的后缀,在同一部分融合重构过程和 近似部分融合重构过程中判断节点的相同性时,能够容易地判断相同性, 因此能够由计算机自动地提取相同或相似的块。从而。不通过开发人员的 人工操作,由计算机就能够从已有资源中自动生成可再利用的模组。
另外,作为源代码21能够输入多个源代码。此时,在同一部分融合 重构过程和近似部分融合重构过程中,可以横跨多个源代码判断节点的相 同性。通过输入多个源代码,能够获得可在多个代码中通用的部件,因此 能够获得更大的效果。
图17是示出应用了上述模组生成处理的软件开发处理的流程的图。 如图17所示,最终通过模组生成处理(步骤S1701)从已有资源61或在 别处已取得实际成效的资源62中获得模组信息26和通用部分模组27,这 些信息作为已登记部件工具63被嵌入在已有的开发环境中。开发人员不 用开发无用的代码而是再利用从已有代码中机械地提取的部件,并通过设 计辅助工具基于新的改造开发计划书64制作设计计划书65 (步骤 S1702)、进行编码处理(步骤S1703)。
然后,经过调试处理(步骤S1704)以及测试(步骤S1705),获得 开发成果物66。从而,能够节约在后工序中的调试处理或测试中耗费的时 间和精力。开发成果物66再次成为模组生成处理的对象。当这样做时, 需要由开发人员人工进行的只有编码处理,因此能够縮短软件开发所需的周期。
为了调查根据上述实施例所获得的效果的程度,本发明的发明人进行 了监视摄像系统、电视电话系统以及多媒体重放系统的各应用程序的开 发。首先,按照传统的开发过程开发了监视摄像系统。此时,在调试过程
和测试过程中,在约每100行的源代码中检测出了一个错误(bug)。
通过上述的模组生成处理对上述监视摄像系统的开发成果物进行了源 代码分析,提取出了约100种的块。当使用提取出的块开发了电视电话系
统时,在约每600行的源代码中检测出了一个错误,监视摄像系统的开发 成果物与电视电话系统的开发成果物之间约有80%的代码是通用的。
进一步,通过上述的模组生成处理对监视摄像系统的开发成果物和电 视电话系统的开发成果物进行了源代码分析,并利用该分析结果开发了多 媒体重放系统,结果,在约每1000行的源代码中检测出了一个错误。并 且,三个系统的开发成果物之间约有60%的代码是通用的。
之后,通过上述的模组生成处理对三个系统的开发成果物进行源代码 分析,并利用该分析结果开发了对多媒体重放系统增加了功能的新系统, 结果,错误发生次数为约每5000行的源代码中出现一个。并且,该新系 统的开发成果物中约有90%的代码是通用的。
产业上的实用性
如上所述,本发明的模组生成装置、模组生成方法、模组生成程序以 及记录有该程序的记录介质是对软件的幵发设计有用的,特别是适于通过 嵌入在用于生成已嵌入的库(library)等的链接规则的开发辅助环境、框 架、或lint等的源代码检查程序等中来再利用已有资源开发新软件。
权利要求
1.一种模组生成装置,其特征在于,包括句法分析部,对程序的源代码进行句法分析,输出该分析信息;宏块分析部,基于从所述句法分析部输出的句法分析信息,通过所述程序的结构分析将所述程序分割成多个块,并输出作为其结果而获得的块的结构信息以及用于对各块的运算模式进行虚拟化的附加信息;接合节点重构部,基于从所述宏块分析部输出的结构信息以及附加信息,关注被定义为子程序的一个块,对于处理顺序在该关注块之前并且通过被依次处理而到达该关注块的父辈块内的节点,以与处理顺序相反的方向进行搜索,并且,对于处理顺序在该关注块之后并且从该关注块被依次处理的继承块内的节点,按照处理顺序的方向进行搜索,由此提取与该关注块直接相关的节点;同一部分融合重构部,对于由所述接合节点重构部从整个程序中提取的使用所述关注块的多个部分,进行所述关注块的父辈块内的节点之间的比较,将该父辈块相融合,并且,进行所述关注块的继承块内的节点之间的比较,将该继承块相融合,并输出作为其结果而获得的融合块信息;近似部分融合重构部,对于由所述接合节点重构部从整个程序中提取的不同的每个关注块,进行从所述同一部分融合重构部输出的融合块信息之间的比较,将具有相同或相似的融合块信息的多个所述关注块定义为同类的子程序,并且,进一步将相同或相似的融合块信息相融合,输出作为其结果而获得的抽象化代码信息;中间语言重构部,输出基于从所述近似部分融合重构部输出的抽象化代码信息以及从所述句法分析部输出的分析信息而被通用化了的部件的信息。
2. 如权利要求1所述的模组生成装置,其特征在于, 所述宏块分析部通过在各块中的用于识别语句的变量的编号上附加表示在该语句中唯一的编号的虚拟部分,来以表示在所述整个源代码中唯一 的编号的低位部分和包含所述虚拟部分的高位部分的组合表示用于识别各语句的变量的编号,以作为用于虚拟化各块的运算模式的所述附加信息。
3. 如权利要求2所述的模组生成装置,其特征在于, 所述同一部分融合重构部基于所述虚拟部分来识别变量,由此进行所述父辈块内的节点间的比较以及所述继承块内的节点间的比较。
4. 如权利要求2所述的模组生成装置,其特征在于, 所述近似部分融合重构部基于所述虚拟部分来识别变量,由此进行所述融合块信息之间的比较。
5. —种模组生成方法,其特征在于,包括句法分析过程,对程序的源代码进行句法分析,获得该分析信息; 宏块分析过程,基于通过所述句法分析过程获得的句法分析信息,通 过所述程序的结构分析将所述程序分割成多个块,并作为其结果而获得块 的结构信息以及用于对各块的运算模式进行虚拟化的附加信息;通用化过程,基于通过所述宏块分析过程获得的结构信息以及利用附 加信息而虚拟化了的运算模式,进行部件的通用化。
6. 如权利要求5所述的模组生成方法,其特征在于, 所述通用化过程包括接合节点重构过程,所述接合节点重构过程基于通过所述宏块分析过程获得的结构信息以及附加信息,关注被定义为子程 序的一个块,对于处理顺序在该关注块之前并且通过被依次处理而到达该 关注块的父辈块内的节点,以与处理顺序相反的方向进行搜索,并且,对 于处理顺序在该关注块之后并且从该关注块被依次处理的继承块内的节 点,按照处理顺序的方向进行搜索,由此提取与该关注块直接相关的节 点。
7. 如权利要求6所述的模组生成方法,其特征在于,所述通用化过程还包括同一部分融合重构过程,所述同一部分融合重 构过程对于通过所述接合节点重构过程从整个程序中提取的使用所述关注 块的多个部分,进行所述关注块的父辈块内的节点之间的比较,将该父辈 块相融合,并且,进行所述关注块的继承块内的节点之间的比较,将该继 承块相融合,并作为其结果而获得融合块信息。
8. 如权利要求7所述的模组生成方法,其特征在于,所述通用化过程还包括近似部分融合重构过程,所述近似部分融合重 构过程对于通过所述接合节点重构过程从整个程序中提取的不同的每个关 注块,进行通过所述同一部分融合重构过程而获得的融合块信息之间的比 较,将具有相同或相似的融合块信息的多个所述关注块定义为同类的子程 序,并且,进一步将相同或相似的融合块信息相融合,并作为其结果而获 得抽象化代码信息。
9. 如权利要求8所述的模组生成方法,其特征在于, 所述通用化过程还包括中间语言重构过程,所述中间语言重构过程基于通过所述近似部分融合重构过程获得的抽象化代码信息以及通过所述句 法分析过程获得的分析信息,获得被通用化了的部件的信息。
10. 如权利要求9所述的模组生成方法,其特征在于, 在所述宏块分析过程中,通过在各块中的用于识别语句的变量的编号上附加表示在该语句中唯一的编号的虚拟部分,来以在表示所述整个源代 码中唯一的编号的低位部分以及包含所述虚拟部分的高位部分的组合表示 用于识别各语句的变量的编号,以作为用于虚拟化各块的运算模式的所述 附加信息。
11. 如权利要求10所述的模组生成方法,其特征在于, 在所述同一部分融合重构过程中,基于所述虚拟部分来识别变量,由此进行所述父辈块内的节点间的比较以及所述继承块内的节点间的比较。
12. 如权利要求IO所述的模组生成方法,其特征在于, 在所述近似部分融合重构过程中,基于所述虚拟部分来识别变量,由此进行所述融合块信息之间的比较。
13. —种模组生成程序,用于使计算机执行以下过程 句法分析过程,对程序的源代码进行句法分析,获得该分析信息; 宏块分析过程,基于通过所述句法分析过程获得的句法分析信息,通过所述程序的结构分析将所述程序分割成多个块,并作为其结果而获得块 的结构信息以及用于对各块的运算模式进行虚拟化的附加信息;接合节点重构过程,基于通过所述宏块分析过程获得的结构信息以及 附加信息,关注被定义为子程序的一个块,对于处理顺序在该关注块之前并且通过被依次处理而到达该关注块的父辈块内的节点,以与处理顺序相 反的方向进行搜索,并且,对于处理顺序在该关注块之后并且从该关注块 被依次处理的继承块内的节点,按照处理顺序的方向进行搜索,由此提取 与该关注块直接相关的节点;同一部分融合重构过程,对于通过所述接合节点重构过程从整个程序 中提取的使用所述关注块的多个部分,进行所述关注块的父辈块内的节点 之间的比较,将该父辈块相融合,并且,进行所述关注块的继承块内的节 点之间的比较,将该继承块相融合,并作为其结果而获得融合块信息;近似部分融合重构过程,对于通过所述接合节点重构过程从整个程序 中提取的不同的每个关注块,进行通过所述同一部分融合重构过程而获得 的融合块信息之间的比较,将具有相同或相似的融合块信息的多个所述关 注块定义为同类的子程序,并且,进一步将相同或相似的融合块信息相融 合,并作为其结果而获得抽象化代码信息;中间语言重构过程,基于通过所述近似部分融合重构过程获得的抽象 化代码信息以及通过所述句法分析过程获得的分析信息,获得被通用化了 的部件的信息。
14. 如权利要求13所述的模组生成程序,其特征在于, 在所述宏块分析过程中,通过在各块中的用于识别语句的变量的编号上附加表示在该语句中唯一的编号的虚拟部分,来以表示在所述整个源代 码中唯一的编号的低位部分以及包含所述虚拟部分的高位部分的组合来表 示用于识别各语句的变量的编号,以作为用于虚拟化各块的运算模式的所 述附加信息。
15. 如权利要求14所述的模组生成程序,其特征在于, 在所述同一部分融合重构过程中,基于所述虚拟部分来识别变量,由此进行所述父辈块内的节点间的比较以及所述继承块内的节点间的比较。
16. 如权利要求14所述的模组生成程序,其特征在于, 在所述近似部分融合重构过程中,基于所述虚拟部分来识别变量,由此进行所述融合块信息之间的比较。
17. —种计算机可读的记录介质,其中记录有用于使计算机执行以下过程的模组生成程序句法分析过程,对程序的源代码进行句法分析,获得该分析信息;宏块分析过程,基于通过所述句法分析过程获得的句法分析信息,通 过所述程序的结构分析将所述程序分割成多个块,并作为其结果而获得块的结构信息以及用于对各块的运算模式进行虚拟化的附加信息;接合节点重构过程,基于通过所述宏块分析过程获得的结构信息以及 附加信息,关注被定义为子程序的一个块,对于处理顺序在该关注块之前 并且通过被依次处理而到达该关注块的父辈块内的节点,以与处理顺序相 反的方向进行搜索,并且,对于处理顺序在该关注块之后并且从该关注块 被依次处理的继承块内的节点,按照处理顺序的方向进行搜索,由此提取 与该关注块直接相关的节点;同一部分融合重构过程,对于通过所述接合节点重构过程从整个程序 中提取的使用所述关注块的多个部分,进行所述关注块的父辈块内的节点 之间的比较,将该父辈块相融合,并且,进行所述关注块的继承块内的节 点之间的比较,将该继承块相融合,并作为其结果而获得融合块信息;近似部分融合重构过程,对于通过所述接合节点重构过程从整个程序 中提取的不同的每个关注块,进行通过所述同一部分融合重构过程而获得 的融合块信息之间的比较,将具有相同或相似的融合块信息的多个所述关 注块定义为同类的子程序,并且,进一步将相同或相似的融合块信息相融 合,并作为其结果而获得抽象化代码信息;中间语言重构过程,基于通过所述近似部分融合重构过程获得的抽象 化代码信息以及通过所述句法分析过程获得的分析信息,获得被通用化了 的部件的信息。
18.如权利要求17所述的计算机可读的记录介质,其特征在于, 在所述宏块分析过程中,通过在各块中的用于识别语句的变量的编号 上附加表示在该语句中唯一的编号的虚拟部分,来以表示在所述整个源代 码中唯一的编号的低位部分以及包含所述虚拟部分的高位部分的组合来表 示用于识别各语句的变量的编号,以作为用于虚拟化各块的运算模式的所 述附加信息。
19. 如权利要求18所述的计算机可读的记录介质,其特征在于, 在所述同一部分融合重构过程中,基于所述虚拟部分来识别变量,由此进行所述父辈块内的节点间的比较以及所述继承块内的节点间的比较。
20. 如权利要求18所述的计算机可读的记录介质,其特征在于, 在所述近似部分融合重构过程中,基于所述虚拟部分来识别变量,由此进行所述融合块信息之间的比较。
全文摘要
使计算机作为句法分析部、宏块分析部、接合节点重构部、同一部分融合重构部、近似部分融合重构部、中间语言重构部发挥功能。句法分析部对源代码进行句法分析。宏块分析部将该程序分割成多个块,在各块中的用于识别语句的变量的编号上附加表示在该语句中唯一的编号的虚拟部分,对运算模式进行虚拟化。接合节点重构部提取与子程序块直接相关的节点。同一部分融合重构部对于在程序的多个部分被调用的子程序,进行前处理之间以及后处理之间的融合。近似部分融合重构部将构造相似的多个子程序统合为同族的子程序。
文档编号G06F9/44GK101617293SQ200780050850
公开日2009年12月30日 申请日期2007年2月27日 优先权日2007年2月27日
发明者山下浩一郎 申请人:富士通株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1