首页> 中国专利> 源代码类似度评价方法以及源代码类似度评价装置

源代码类似度评价方法以及源代码类似度评价装置

摘要

一种源代码类似度评价方法以及源代码类似度评价装置。代码克隆的分析随着软件的大规模化而计算量增大。本发明的源代码类似度评价装置具备:开发成果分析单元(21),其提取构成软件的源代码列表;对应关系分析单元(22),其比较比较基准源代码列表(44a)和比较目标源代码列表(44b),分析两者的对应关系;比较对象确定单元(23),其根据对应关系,从上述比较目标源代码列表(44b)中确定包含在比较基准源代码列表(44a)中的比较基准的比较目标源代码(41b)的比较对象;类似度计算单元(24),其求出比较基准源代码(41a)和由比较对象确定单元(23)确定的源代码之间的类似度;输出单元(15),其输出比较基准源代码(41a)和类似度的组合。

著录项

  • 公开/公告号CN103678111A

    专利类型发明专利

  • 公开/公告日2014-03-26

    原文格式PDF

  • 申请/专利权人 株式会社日立制作所;

    申请/专利号CN201310337262.2

  • 发明设计人 吉村健太郎;桥本康范;三部良太;

    申请日2013-08-05

  • 分类号G06F11/36;

  • 代理机构北京银龙知识产权代理有限公司;

  • 代理人曾贤伟

  • 地址 日本东京都

  • 入库时间 2023-12-17 01:00:24

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-08-28

    未缴年费专利权终止 IPC(主分类):G06F11/36 授权公告日:20160629 终止日期:20170805 申请日:20130805

    专利权的终止

  • 2016-06-29

    授权

    授权

  • 2014-04-23

    实质审查的生效 IPC(主分类):G06F11/36 申请日:20130805

    实质审查的生效

  • 2014-03-26

    公开

    公开

说明书

技术领域

本发明涉及对构成软件的源代码群的类似度进行评价的源代码类似度评 价方法以及实施该方法的源代码类似度评价装置。

背景技术

近年来,伴随着软件的应用范围的扩大,被称为遗产软件(legacy software) 的软件正在扩大。所谓遗产软件,是指对应于对系统的新的要求来重复地进行 功能追加、修正,结果导致软件的规模、复杂度增大,难以进行维护,维护成 本增大的软件。

作为遗产软件的维护成本增大的原因之一,是被称为所谓的代码克隆的类 似代码列的存在。代码克隆是包含在源代码中的相同或类似的多个代码列,主 要由于进行源代码的沿用而生成。在包含许多代码克隆的软件中,除了系统整 体的代码大小增大以外,在对相同或类似的多个代码列的一个施加变更时,大 多必须还要对其他全部地方进行同样的变更,成为增大维护成本的原因。

代码克隆大多在对遗产软件进行功能追加的维护开发中发生。这是因为代 码克隆大多是将实现与所追加的功能类似的功能的软件作为基础软件,在复制 构成基础软件的源代码群的基础上进行改造而作成的。按道理,基础软件的类 似的功能部分应该作为软件部件而通用。但是,由于在软件开发中强烈要求缩 短开发期间、开发成本,所以在大多的软件开发现场作成了代码克隆。

为了削减软件的维护成本,从软件的维护现场要求了检测出该代码克隆并 作为软件部件而通用。但是,对于大规模软件,通过目视的代码评审来发现代 码克隆是低效的。

近年来,基于上述问题,针对构成软件的源代码,公开了检测代码克隆的 技术。

在专利文献1的课题中记载了“提供一种能够高速地提取类似的软件片段 的类似源代码提取程序、类似源代码提取装置和类似源代码提取方法”,在“解 决手段”中记载了“比较基准源代码片段指定部210接受成为比较的基准的源 代码片段的指定,从通过比较目标源代码指定部220接受了指定的源代码群中 提取与该源代码片段类似的源代码片段,从结果输出部290输出。参照根据比 较基准的源代码片段作成的句法树、根据源代码群作成的句法树,由比较目标 源代码片段提取部270进行从源代码群中提取与比较基准的源代码片段进行 类似比较的源代码的处理”。

在非专利文献1中记载了作为进行2个文件的比较的程序的diff的算法的 细节。

在非专利文献2中记载了与软件的克隆检测有关的研究内容。

在非专利文献1、2所记载的技术中存在以下问题,即如果应用于由大量 的源代码(例如数千文件)构成的大规模软件,则分析结果按照文件数的平方 而增加,因此理解类似关系需要极大的时间。

在专利文献2所记载的技术中,由用户指定比较基准源代码,因此对于由 大量的源代码构成的大规模软件,对进行高效的分析的目的来说并不充分。例 如,在软件由数万个源代码文件构成时,由用户指定全部的该比较基准源代码 (文件)是不现实的。

专利文献1:日本特开2006-18693号公报

非专利文献1:J.W.Hunt and M.D.Mcllroy,“An Algorithm for Differential  File Comparison”,BellTelephone Laboratories Computing Science Technical  Report#41,July1976.

非专利文献2:Rainer Koschke,“Survey of Research on Software Clones”, Dagstuhl Seminar Proceedings06301,19.04.2007

发明内容

本发明的目的在于提供一种对由多个源代码文件构成的2个软件的类似 度进行评价的源代码类似度评价方法、以及实施该方法的源代码类似度评价装 置。

为了解决上述问题,在第一方式的源代码类似度评价装置的发明中,具备: 源代码列表提取单元,其提取表示比较基准软件的结构的比较基准源代码列表 和表示比较目标软件的结构的比较目标源代码列表;对应关系分析单元,其比 较上述比较基准源代码列表和上述比较目标源代码列表,分析两者的对应关 系;比较对象确定单元,其根据上述对应关系,从上述比较目标源代码列表中 确定成为包含在上述比较基准源代码列表中的各比较基准源代码的比较对象 的比较目标源代码;类似度计算单元,其计算上述比较基准源代码和通过上述 比较对象确定单元确定的上述比较目标源代码之间的类似度;类似度评价单 元,其判定通过上述比较对象确定单元确定的上述比较目标源代码中的具有最 高类似度的类似源代码;输出单元,其将上述比较基准源代码、以及上述比较 基准源代码和上述类似源代码之间的类似度对应起来输出。

在用于实施发明的方式中,说明其他手段。

根据本发明,能够提供一种对由多个源代码文件构成的2个软件的类似度 进行评价的源代码类似度评价方法、以及实施该方法的源代码类似度评价装 置。

附图说明

图1是表示第一实施方式的源代码类似度评价装置的概要的结构图。

图2是表示第一实施方式的源代码类似度评价单元的动作的图。

图3是表示第一实施方式的开发成果分析单元的处理的流程图。

图4是表示第一实施方式的比较基准源代码列表和比较目标源代码列表 的图。

图5是表示第一实施方式的对应关系分析单元的处理的流程图。

图6是表示第一实施方式的对应关系列表的图。

图7是表示第一实施方式的比较对象确定单元的处理的流程图。

图8是表示第一实施方式的逻辑行定义DB的图。

图9是表示第一实施方式的类似度计算单元的差分分析处理的图。

图10是表示第一实施方式的类似度计算单元的处理的图。

图11是表示第一实施方式和比较例的类似度评价结果的图。

图12是表示第一实施方式的类似度评价单元的处理的流程图。

图13是表示第一实施方式的源代码的类似关系信息的图。

图14是第一实施方式的类似关系图。

图15是表示第一实施方式的类似说明书分析单元的处理的流程图。

图16是表示第一实施方式的类似说明书信息的图。

符号说明

10:源代码类似度评价装置;11:存储器;12:文件数据库;13:处理器; 14:输入单元;15:输出单元;16:存储单元;17:源代码类似度评价程序; 18:总线;19:用户接口;20:源代码类似度评价单元;21:开发成果分析单 元(源代码列表提取单元);22:对应关系分析单元;23:比较对象确定单元; 24:类似度计算单元;25:类似度评价单元;26:逻辑行定义DB;30:类似 说明书分析单元;40a:比较基准软件存储部;40b:比较目标软件存储部;41: 源代码;41a:比较基准源代码;41b:比较目标源代码;42、42a、42b:详细 设计说明书;43、43a、43b:测试说明书;44a:比较基准源代码列表;44b: 比较目标源代码列表;45:对应关系列表(对应关系);46:源代码间差分; 47:类似度评价结果;48:类似关系信息;49:类似说明书信息;60:类似关 系图;61:根;62:文件夹;63:文件;64:横条形图;100:外部网络;110: 外部文件数据库;200:用户;S50:逻辑行提取处理;S52:差分行数测量处 理;S53:共通行数计算处理;S54:独立行数计算处理;S55:文件间类似度 计算处理。

具体实施方式

以下,参照各图详细说明用于实施本发明的方式。

(第一实施方式的结构)

图1是表示第一实施方式的源代码类似度评价装置的概要的结构图。

源代码类似度评价装置10具备:保存执行用程序、计算结果的存储器11; 以电磁方式存储文件的文件数据库12;执行计算处理的处理器13;接受来自 用户的输入的输入单元14;向用户输出信息的输出单元15;存储源代码类似 度评价程序17的存储单元16;将上述的存储器11、文件数据库12、处理器 13、输入单元14、输出单元15、存储单元16连接起来而能够相互进行通信的 总线18。

存储器11例如由RAM(随机存取存储器)等构成,具有:对构成2个软 件的源代码群之间的类似度进行评价的源代码类似度评价单元20、提取与类 似的比较目标源代码关联的详细设计说明书42b(图2、图4(b))和测试说 明书43b(图2)的类似说明书分析单元30。

进而,源代码类似度评价单元20具备:开发成果分析单元21(源代码列 表提取单元),其提取表示各软件的结构的源代码列表;对应关系分析单元 22,其对比较基准源代码列表和比较目标源代码列表进行比较,分析两者的对 应关系来进行判定;比较对象确定单元23,其根据该对应关系,从比较目标 源代码列表中确定包含在比较基准源代码列表中的比较基准源代码的比较对 象、即比较目标源代码;类似度计算单元24,其计算比较基准源代码与由比 较对象确定单元23确定的源代码之间的类似度;类似度评价单元25,其判定 在比较基准源代码中具有最高类似度的类似源代码。

将存储在存储单元16中的源代码类似度评价程序17读入到该存储器11 中,由上述处理器13执行,由此实现源代码类似度评价单元20和类似说明书 分析单元30。

文件数据库12例如是以HDD(硬盘驱动器)为代表的存储装置,以电磁 方式存储文件。

存储器13例如是CPU(中央处理单元),通过执行读入到存储器11的 程序文件而实现源代码类似度评价单元20、类似说明书分析单元30,控制该 源代码类似度评价装置10。

输入单元14例如是鼠标、键盘、输入板等,在用户向源代码类似度评价 装置10进行指示时使用。

输出单元15例如是液晶显示装置、打印机等,向用户输出显示该源代码 类似度评价装置10的操作指导、处理结果等。本实施方式的输出单元15输出 比较基准源代码及其类似度。

存储单元16例如是以HDD为代表的存储装置,以电磁方式存储文件。

源代码类似度评价装置10经由未图示的网络接口与外部网络100连接, 也能够对外部文件数据库110进行存取。以下,在本实施方式中,将源代码类 似度评价装置10记载为对存在于文件数据库12中的软件(项目)进行分析。

(第一实施方式的动作)

图2是表示第一实施方式的源代码类似度评价单元的动作的图。

源代码类似度评价单元20如果经由用户接口19接受了用户200的指示, 则进行存储在比较基准软件存储部40a中的软件和存储在比较目标软件存储 部40b中的软件之间的类似度的评价。源代码类似度评价单元20经由用户接 口19向用户200显示类似关系信息48。

比较基准软件存储部40a和比较目标软件存储部40b存储在文件数据库 12、外部文件数据库110(图1)中。比较基准软件存储部40a例如是对现有 的软件进行改造所得的,在文件数据库12的预定的路径下的文件夹阶层中, 具备包含用预定的程序语言记述的代码的文件即比较基准源代码41a、记载了 该比较基准源代码41a的设计规格的详细设计说明书42a、记载了该比较基准 源代码41a的测试规格的测试说明书43a。另外,比较基准源代码41a大多是 多个,例如有时达到数千~数万的数量级。

比较目标软件存储部40b例如是成为比较基准软件的改造源的现有的软 件,在文件数据库12的预定的路径下的文件夹阶层中,具备包含用与记述比 较基准源代码41a的程序语言相同的程序语言记述的代码的文件即比较目标 源代码41b、记载了该比较目标源代码41b的设计规格的详细设计说明书42b、 记载了该比较目标源代码41b的测试规格的测试说明书43b。

以下,在不特别区别比较基准源代码41a和比较目标源代码41b时,简单 地记载为“源代码41”。在不特别区别详细设计说明书42a、42b时,简单地 记载为“详细设计说明书42”。在不特别区别测试说明书43a、43b时,简单 地记载为“测试说明书43”。另外,将现有的软件记载为“基础软件”,将 对该现有的软件进行变更或改造所得的软件记载为“改造软件”。

逻辑行定义DB(数据库)26是针对每个扩展名定义构成软件的源代码的 逻辑行的数据库。

源代码类似度评价单元20根据源代码的扩展名而参照逻辑行定义DB26, 从而取得源代码的逻辑行的定义,根据该逻辑行定义,提取比较基准源代码 41a、比较目标源代码41b等的逻辑行。逻辑行定义DB26被存储在存储单元 16(图1)中,由源代码类似度评价单元20参照。

开发成果分析单元21分析比较基准软件存储部40a,提取表示比较基准 软件的结构的比较基准源代码列表44a,分析比较目标软件存储部40b,提取 表示比较目标软件的结构的比较目标源代码列表44b。比较基准源代码列表 44a是构成比较基准软件的比较基准源代码41a的一览。比较目标源代码列表 44b是构成比较目标软件的比较目标源代码41b的一览。

对应关系分析单元22对比较基准源代码列表44a和比较目标源代码列表 44b进行比较,分析判定两者的对应关系。对应关系分析单元22根据比较基 准源代码列表44a和比较目标源代码列表44b,分析判定与构成比较基准源代 码列表44a的比较基准源代码41a具有对应关系的比较目标源代码41b,输出 对应关系列表45。

对应关系列表45是比较基准源代码41a和与该比较基准源代码41a具有 对应关系的比较目标源代码41b的组合的一览。

比较对象确定单元23根据对应关系列表45,从比较目标源代码列表44b 中确定包含在比较基准源代码列表44a中的各比较基准源代码41a的比较对 象,输出由类似度计算单元24计算出的类似度评价结果47。

类似度计算单元24计算比较基准源代码41a和由比较对象确定单元23确 定的比较目标源代码41b之间的类似度。

类似度评价结果47是分别计算包含在比较目标源代码列表44b中的比较 基准源代码41a和包含在比较基准源代码列表44a中的比较目标源代码41b之 间的类似度所得的结果。

类似度评价单元25判定由比较对象确定单元23确定的比较目标源代码 41b中的具备最高类似度的类似源代码,输出类似关系信息48。

类似关系信息48存储有包含在比较目标源代码列表44b中的比较基准源 代码41a、类似源代码、该比较基准源代码41a和类似源代码之间的类似度。

用户接口19通过输入单元14接受用户200的输入,并且通过输出单元 15输出信息来向用户200提供信息。输出单元15对应地输出比较基准源代码 41a、该比较基准源代码41a和类似源代码之间的类似度。

类似说明书分析单元30在说明书与在比较基准源代码列表44a中记载的 比较基准源代码41a不关联的情况下,将与类似源代码相关的说明书作为类似 说明书而提示。类似说明书分析单元30根据作为沿用源的比较目标源代码 41b,确定成为沿用候选的详细设计说明书42b和测试说明书43b,输出类似 说明书信息49。

图3(a)、(b)是表示第一实施方式的开发成果分析单元的处理的流程 图。

图3(a)是表示开发成果分析单元21的整体处理的流程图。

如果开始处理,则在步骤S10中,开发成果分析单元21指定比较基准软 件存储部40a的根文件夹,进行开发成果分析处理(图3(b))。

在步骤S11中,开发成果分析单元21指定比较目标软件存储部40b的根 文件夹,进行开发成果分析处理(图3(b))。如果步骤S11的处理结束, 则图3(a)的整体处理结束。

图3(b)是表示开发成果分析单元21对每个源代码存储部的处理的流程 图。

如果开始处理,则在步骤S20中,开发成果分析单元21搜索被指定为源 代码存储部的该文件夹的项目文件(例如makefile等)。在此,项目文件是该 软件的管理文件,记载了从该软件的源文件生成执行文件的规则等。

在步骤S21~S25中,开发成果分析单元21对全部项目文件重复进行处理。

在步骤S22中,开发成果分析单元21提取与该项目文件相关的源代码41 (文件名和相对路径名)。

在步骤S23中,开发成果分析单元21提取与该项目文件相关的各源代码 41的详细设计说明书42。开发成果分析单元21搜索源代码41的相对路径, 提取具备与源代码41的文件名具有预定的关联性的文件名的详细设计说明书 42。

在步骤S24中,开发成果分析单元21提取与该项目文件相关的各源代码 41的测试说明书43。开发成果分析单元21搜索源代码41的相对路径,提取 具备与源代码41的文件名具有预定的关联性的文件名的测试说明书43。

在步骤S25中,开发成果分析单元21判断是否对全部的项目文件重复进 行了处理。开发成果分析单元21如果该判断条件不成立,则返回到步骤S21 的处理。

在步骤S26中,开发成果分析单元21搜索该预定文件夹的子文件夹。

在步骤S27~S29中,开发成果分析单元21对全部子文件夹重复进行处理。

在步骤S28中,开发成果分析单元21对该子文件夹递归地进行开发成果 分析处理(图3(b))。

在步骤S29中,开发成果分析单元21对全部子文件夹判断是否重复进行 了处理。开发成果分析单元21如果该判断条件不成立,则返回到步骤S27的 处理,如果该判断条件成立,则结束图3(b)的处理。

图4(a)、(b)是表示第一实施方式的比较基准源代码列表和比较目标 源代码列表的图。

图4(a)是表示比较基准源代码列表44a的图。

比较基准源代码列表44a具有识别各比较基准源代码41a的ID栏44-1、 存储各比较基准源代码41a的文件名信息的文件名栏44-2、对存储了各比较基 准源代码41a的相对路径名信息进行存储的相对路径名栏44-3、存储各比较基 准源代码41a的逻辑行数即SLOC(source lines of code:源代码行)的逻辑行 数栏44-4、存储各比较基准源代码41a的详细设计说明书42a的文件名的详细 设计说明书栏44-5、存储各比较基准源代码41a的测试说明书43a的文件名的 测试说明书栏44-6。

例如ID是1的比较基准源代码41a的文件“F01.c”存储在相对路径“/D01”, 逻辑行数是300行,详细设计说明书42a的文件名是“F01_spec.doc”,测试 说明书43a的文件名是“F01_test.doc”。

例如ID是4的比较基准源代码41a的文件“F06.c”存储在相对路径“/D02”, 逻辑行数是500行,不存在详细设计说明书42b和测试说明书43b,因此在详 细设计说明书44-5和测试说明书栏44-6中存储有表示不存在相应的文件的 N/A(Not Available:不可用)。

图4(b)是表示比较目标源代码列表44b的图。

比较目标源代码列表44b具有与比较基准源代码列表44a相同的结构。

图5是表示第一实施方式的对应关系分析单元的处理的流程图。

如果开始处理,则在步骤S30中,对应关系分析单元22用1初始化变量 i。变量i表示包含在比较基准源代码列表44a中的比较基准源代码41a的ID。 在此,变量i=1,因此比较基准源代码Fi(41a)的文件名是“F01.c”。

在步骤S31中,对应关系分析单元22用1初始化变量j。变量j表示包含 在比较目标源代码列表44b中的比较目标源代码41b的ID。

在步骤S32中,对应关系分析单元22判断比较基准源代码Fi(41a)的相 对路径名和比较目标源代码Fj(41b)的相对路径名是否相同。对应关系分析 单元22如果该判断条件成立(是),则进行步骤S33的处理,如果该判断条 件不成立(否),则进行步骤S35的处理。

在步骤S33中,对应关系分析单元22判断比较基准源代码Fi(41a)的文 件名和比较目标源代码Fj(41b)的文件名是否相同。对应关系分析单元22 如果该判断条件成立(是),则进行步骤S34的处理,如果该判断条件不成立 (否),则进行步骤S35的处理。

在步骤S34中,对应关系分析单元22将比较基准源代码Fi(41a)和比较 目标源代码Fj(41b)判定为对应关系,记录在对应关系列表45中。

在步骤S35中,对应关系分析单元22判断变量j是否是比较目标源代码 列表44b的ID的最大值jmax(在本实施方式中是5)以上。对应关系分析单 元22,如果该判断条件成立(是),则进行步骤S37的处理,如果该判断条 件不成立(否),则进行步骤S36的处理。

在步骤S36中,对应关系分析单元22将变量j加1,返回到步骤S32的 处理。由此,对应关系分析单元22能够对全部的比较目标源代码列表44b的 各比较目标源代码41b进行步骤S32~S34的处理。

在步骤S37中,对应关系分析单元22判断变量i是否是比较基准源代码 列表44a的ID的最大值imax(在本实施方式中是5)以上。对应关系分析单 元22如果该判断条件成立(是),则结束图5的处理,如果该判断条件不成 立(否),则进行步骤S38的处理。

在步骤S38中,对应关系分析单元22将变量i加1,返回到步骤S31的 处理。由此,对应关系分析单元22能够对全部的比较基准源代码列表44a的 各比较基准源代码41a进行步骤S31~S35的处理。

图6是表示第一实施方式的对应关系列表的图。

在对应关系列表45中记载了比较基准源代码41a的ID和比较目标源代码 41b的ID的对应关系。比较基准源代码41a的ID=1和比较目标源代码41b的 ID=1具有对应关系。比较基准源代码41a的ID=2和比较目标源代码41b的 ID=2具有对应关系。比较基准源代码41a的ID=3和比较目标源代码41b的 ID=4具有对应关系。

图7是表示第一实施方式的比较对象确定单元的处理的流程图。

如果开始处理,则在步骤S40中,比较对象确定单元23用1初始化变量 i。变量i表示包含在比较基准源代码列表44a中的比较基准源代码Fi(41a) 的ID。

在步骤S41中,比较对象确定单元23判断是否存在与比较基准源代码Fi (41a)具有对应关系的比较目标源代码Fj(41b)。比较对象确定单元23如 果该判断条件成立(是),则进行步骤S42的处理,如果该判断条件不成立(否), 则进行步骤S44的处理。

在步骤S42中,比较对象确定单元23根据对应关系列表45,将与比较基 准源代码Fi(41a)对应的比较目标源代码Fj(41b)的ID设置为变量j。

在步骤S43中,比较对象确定单元23在进行了比较基准源代码Fi(41a) 和比较目标源代码Fj(41b)的类似度计算处理后,进行步骤S48的处理。在 后述的图10中详细说明类似度计算处理。

在步骤S44中,比较对象确定单元23用1初始化变量j。变量j表示包含 在比较目标源代码列表44b中的比较目标源代码41b的ID。

在步骤S45中,比较对象确定单元23进行比较基准源代码Fi(41a)和比 较目标源代码Fj(41b)的类似度计算处理。在后述的图10中详细说明类似度 计算处理。

在步骤S46中,比较对象确定单元23判断变量j是否为比较目标源代码 列表44b的ID的最大值jmax(在本实施方式中是5)以上。比较对象确定单 元23如果该判断条件成立(是),则进行步骤S48的处理,如果该判断条件 不成立(否),则进行步骤S47的处理。

在步骤S47中,比较对象确定单元23将变量j加1,返回到步骤S45的 处理。

在步骤S48中,比较对象确定单元23判断变量i是否为比较基准源代码 列表44a的ID的最大值jmax(在本实施方式中是5)以上。比较对象确定单 元23如果该判断条件成立(是),则结束图7的处理,如果该判断条件不成 立(否),则进行步骤S49的处理。

在步骤S49中,比较对象确定单元23将变量i加1,返回到步骤S41的 处理。

图8是表示第一实施方式的逻辑行定义DB的图。

逻辑行定义DB26具有扩展名栏26-1、逻辑行的划分栏26-2、注释开始栏 26-3、注释结束栏26-4。

扩展名栏26-1表示文件名的扩展名部分的信息。在此,扩展名是指文件 名的末尾的句号以后的部分。源代码通过文件名的扩展名部分表示记述了该源 代码的计算机语言。

逻辑行的划分栏26-2表示与该扩展名相关的计算机语言的逻辑行的划分 规则。源代码类似度评价单元20根据该逻辑行的划分规则,对源代码的逻辑 行数进行计数。

注释开始栏26-3表示与该扩展名相关的计算机语言的注释的开始规则。

注释结束栏26-4表示与该扩展名相关的计算机语言的注释的结束规则。 源代码类似度评价单元20在对源代码的逻辑行数进行计数时,根据注释开始 栏26-3和注释结束栏26-4,完全无视注释。

图9是表示第一实施方式的类似度计算单元的差分分析处理的图。

在此,以任意2个比较基准源代码Fi(41a)和比较目标源代码Fj(41b) 之间的类似关系为例。

比较基准源代码Fi(41a)用逻辑行表示比较基准源代码41a。用L(Fi) 表示比较基准源代码Fi(41a)的逻辑行数。

比较目标源代码Fj(41b)用逻辑行表示比较目标源代码41b。用L(Fj) 表示比较目标源代码Fj(41b)的逻辑行数。

比较基准源代码Fi(41a)的共通行41c和比较目标源代码Fj(41b)的共 通行41d记载了相同的内容。共通行41c、41d的行数用共通行数L(Fi∧Fj) 表示。

在差分分析处理S51中,对比较基准源代码Fi(41a)和比较目标源代码 Fj(41b)的差分进行分析。在非专利文献1中记载了该差分分析处理S51的 细节。

差分分析处理S51的结果是输出源代码间差分Dij(46)。源代码间差分 Dij(46)的各行的第一位表示差分的内容。如果行的第一位是“<”,则该行 表示只包含在比较基准源代码Fi(41a)中。如果行的第一位是“>”,则该行 表示只包含在比较目标源代码Fj(41b)中。在此,将源代码间差分Dij(46) 的全体行数设为L(Dij)。

式1表示比较基准源代码Fi(41a)和比较目标源代码Fj(41b)之间的 源代码间类似度Sij的计算式。

...(式1)

式2表示共通行数L(Fi∧Fj)的计算式。

...(式2)

式3表示独立行数L(Fi∨Fj)的计算式。

L(Fi∨Fj)=L(Fi)+L(Fj)-L(Fi∧Fj)···(式3)

图10是表示第一实施方式的类似度计算单元的处理的图。

类似度计算单元24将比较基准源代码Fi(41a)和比较目标源代码Fj(41b) 这2个作为输入。

在逻辑行提取处理S50中,类似度计算单元24参照逻辑行定义DB26, 分别提取比较基准源代码Fi(41a)、比较目标源代码Fj(41b)的逻辑行。

在差分分析处理S51中,类似度计算单元24对比较基准源代码Fi(41a) 和比较目标源代码Fj(41b)的源代码间差分Dij进行分析。

在差分行数测量处理S52中,类似度计算单元24计算源代码间差分Dij 的逻辑行数L(Dij)。

在共通行数计算处理S53中,类似度计算单元24根据(式2)计算源代 码之间的共通行数L(Fi∧Fj)。

在独立行数计算处理S54中,类似度计算单元24根据(式3)计算源代 码之间的独立行数L(Fi∨Fj)。

在源代码间类似度计算处理S55中,类似度计算单元24根据(式1)将 共通行数L(Fi∧Fj)除以独立行数L(Fi∨Fj),计算源代码间类似度Sij。

图11(a)、(b)是表示第一实施方式与比较例的类似度评价结果的图。

图11(a)是第一实施方式的类似度评价结果47。

类似度评价结果47的行方向表示比较基准源代码列表44a的各文件。类 似度评价结果47的列方向表示比较目标源代码列表44b的各文件。在各矩阵 的要素中存储有源代码间类似度Sij的计算结果。

在此,比较基准源代码列表44a的F01.c、F02.c、F04.c存在与比较目标 源代码列表44b具有对应关系的比较目标源代码41b,因此计算与具有该对应 关系的比较目标源代码41b的类似度,不计算与不具有该对应关系的其他源代 码41的类似度。

如果在与比较基准源代码列表44a相关的比较基准源代码41a中不存在与 比较目标源代码列表44b具有对应关系的源代码,则计算与比较目标源代码列 表44b的全部比较目标源代码41b的类似度。

图11(b)是比较例的类似度评价结果47c。

在此,比较例的源代码类似度评价装置构成为计算比较基准源代码列表 44a的全部的比较基准源代码Fi(41a)和比较目标源代码列表44b的全部比 较目标源代码Fj(41b)之间的类似度。

本实施方式的源代码类似度评价装置10预先调查源代码之间的对应关 系,只计算具有对应关系的源代码的类似度,得到类似度评价结果47。由此, 本实施方式的源代码类似度评价装置10与比较例相比能够降低计算量,由此 能够短时间地得到类似度评价结果47。

图12是表示第一实施方式的类似度评价单元的处理的流程图。

如果开始处理,则在步骤S60中,类似度评价单元25用1初始化变量i。 变量i表示包含在比较基准源代码列表44a中的比较基准源代码Fi(41a)的 ID。

在步骤S61中,类似度评价单元25根据对应关系列表45判断是否存在与 比较基准源代码Fi(41a)对应的目标。类似度评价单元25如果该判断条件成 立(是),则进行步骤S62的处理,如果该判断条件不成立(否),则进行步 骤S63的处理。

在步骤S62中,类似度评价单元25将与比较基准源代码Fi(41a)具有对 应关系的比较目标源代码Fj(41b)的ID设定为变量j,进行步骤S64的处理。 在此,变量j所示的比较目标源代码Fj(41b)是计算变量i所示的比较基准 源代码Fi(41a)的类似度的类似源代码。

在步骤S63中,类似度评价单元25将与比较基准源代码Fi(41a)的类似 度最大的比较目标源代码Fj(41b)的ID设定为变量j,进行步骤S64的处理。 在此,变量j所示的比较目标源代码Fj(41b)是计算与变量i所示的比较基 准源代码Fi(41a)的类似度的“类似源代码”。

在步骤S64中,类似度评价单元25将比较目标源代码Fj(41b)的文件 名设定为比较基准源代码Fi(41a)的类似文件名。

在步骤S65中,类似度评价单元25将比较目标源代码Fj(41b)的相对 路径名设定为比较基准源代码Fi(41a)的类似相对路径名。

在步骤S66中,类似度评价单元25将比较基准源代码Fi(41a)和比较目 标源代码Fj(41b)之间的类似度设定为比较基准源代码Fi(41a)的类似度。

在步骤S67中,类似度评价单元25判断变量i是否是比较基准源代码列 表44a的ID的最大值(在实施方式中是5)以上。类似度评价单元25如果该 判断条件成立(是),则结束图12的处理,如果该判断条件不成立(否), 则进行步骤S68的处理。

在步骤S68中,类似度评价单元25将变量i加1,返回到步骤S61的处 理。

图13是表示第一实施方式的源代码的类似关系信息的图。

类似关系信息48具有识别各比较基准源代码41a的ID栏48-1、存储各比 较基准源代码41a的文件名信息的文件名栏48-2、对存储了各比较基准源代码 41a的相对路径名信息进行存储的相对路径名栏48-3、存储各比较基准源代码 41a的逻辑行数(SLOC)的逻辑行数栏48-4、存储与比较基准源代码41a对 应的比较目标源代码41b的文件名信息的类似文件名栏48-5、存储与比较基准 源代码41a对应的比较目标源代码41b的相对路径名信息的类似相对路径名栏 48-6、存储比较基准源代码41a和比较目标源代码41b之间的类似度信息的类 似度栏48-7。

图14是第一实施方式的类似关系图。

类似关系图60在用户接口19的输出单元15上表示类似关系信息48。类 似关系图60用将根目录作为根节点、将目录作为中间节点、将文件作为叶节 点的树构造来显示。

在类似关系图60中被表示为“根(root)”的根61被显示为根节点。作 为根节点的根61将“D01”所示的文件夹62-1、“D02”所示的文件夹62-2 作为中间节点而向右方向分支。

作为中间节点的文件夹62-1将“F01.c”所示的文件63-1、“F02.c”所示 的文件63-2作为叶节点向右方向分支。

作为中间节点的文件夹62-2将“F04.c”所示的文件63-3、“F06.c”所示 的文件63-4、“F07.c”所示的文件63-5作为叶节点向右方向分支。以下,在 不特别区别文件63-1~63-5时,简单地记载为文件63。

在作为叶节点的文件63-1~63-5的右侧,显示出表示作为各个源代码的逻 辑行数和类似度的横条形图64-1~64-5。以下,在不特别区别横条形图 64-1~64-5时,简单地记载为横条形图64。

在类似关系图60的下侧显示凡例65。在凡例65中显示用白色表示的“克 隆部”和用灰色表示的“原始部”。

横条形图64的长度是对应的文件63的作为源代码的逻辑行数。横条形图 64都用白色和灰色这2种颜色上色划分。但是,并不限于此,横条形图64也 可以用任意的2种颜色以上的组合上色划分。

用横条形图64的“克隆部”相对于全体面积的面积比例来表示文件63 和与该文件63最类似的比较目标源代码41b之间的类似度。例如在文件63-1 的类似度为95%的情况下,横条形图64-1的“克隆部”相对于全体面积的面 积比例是95%。

由此,用户能够容易地全方位掌握由多个源代码群构成的2个软件的类似 性,因此能够容易地发现作为代码克隆的软件。用户进而还能够容易地发现代 码克隆的软件中的改造地方多的源代码,应对伴随着改造地方的不良状况。

图15是表示第一实施方式的类似说明书分析单元的处理的流程图。

如果开始处理,则在步骤S70中,类似说明书分析单元30用1初始化变 量i。变量i表示包含在比较基准源代码列表44a中的比较基准源代码Fi(41a) 的ID。

在步骤S71中,类似说明书分析单元30判断在比较基准源代码Fi(41a) 中是否存在说明书。在本实施方式中,类似说明书分析单元30根据在比较基 准源代码Fi(41a)的相对路径中是否存在与比较基准源代码Fi(41a)的文件 名具有预定的关联性的文件名的说明书,来判断说明书的存在。类似说明书分 析单元30如果该判断条件成立(是),则进行步骤S78的处理,如果该判断 条件不成立(否),则进行步骤S72的处理。

在步骤S72中,类似说明书分析单元30根据对应关系列表45,判断是否 存在与比较基准源代码Fi(41a)对应的目标。类似说明书分析单元30如果该 判断条件成立(是),则进行步骤S73的处理,如果该判断条件不成立(否), 则进行步骤S74的处理。

在步骤S73中,类似说明书分析单元30将与比较基准源代码Fi(41a)具 有对应关系的比较目标源代码Fj(41b)的ID设定为变量j,进行步骤S75的 处理。

在步骤S74中,类似说明书分析单元30将与比较基准源代码Fi(41a)的 类似度最大的比较目标源代码Fj(41b)的ID设定为变量j,进行步骤S75的 处理。

在步骤S75中,类似说明书分析单元30将比较目标源代码Fj(41b)的 文件名和类似度登记为比较基准源代码Fi(41a)的类似文件名和类似度。

在步骤S76中,类似说明书分析单元30将比较目标源代码Fj(41b)的 详细设计说明书42b登记为比较基准源代码Fi(41a)的类似设计说明书。

在步骤S77中,类似说明书分析单元30将比较目标源代码Fj(41b)的 测试说明书43b登记为比较基准源代码Fi(41a)的类似测试说明书。

在步骤S78中,类似说明书分析单元30判断变量i是否为比较基准源代 码列表44a的ID的最大值imax(在实施方式中是5)以上。类似说明书分析 单元30如果该判断条件成立(是),则结束图15的处理,如果该判断条件不 成立(否),进行步骤S79的处理。

在步骤S79中,类似说明书分析单元30将变量i加1,返回到步骤S71 的处理。

图16是表示第一实施方式的类似说明书信息的图。

类似说明书信息49具有识别比较基准源代码Fi(41a)的ID栏49-1、存 储比较基准源代码Fi(41a)的文件名信息的文件名栏49-2、存储比较基准源 代码Fi(41a)的详细设计说明书42a的文件名的详细设计说明书栏49-3、存 储比较基准源代码Fi(41a)的测试说明书43a的文件名的测试说明书栏49-4、 存储最类似的比较目标源代码Fj(41b)的文件名信息的类似文件名栏49-5。

在详细设计说明书42a不与该比较基准源代码Fi(41a)关联时,在详细 设计说明书栏49-3的括弧中记载与该比较基准源代码Fi(41a)最类似的比较 目标源代码Fj(41b)的详细设计说明书42b的文件名信息。

在测试说明书43a不与该比较基准源代码Fi(41a)关联时,在测试说明 书栏49-4的括弧中记载与该比较基准源代码Fi(41a)最类似的比较目标源代 码Fj(41b)的测试说明书43b的文件名信息。

在测试说明书栏49-4中,还在括弧中记载有类似测试说明书的文件名信 息。在类似文件名栏49-5中,还在括弧中记载有类似度的信息。

根据该类似说明书信息49,用户200能够容易地一起取得包含在比较目 标源代码列表44b中的比较目标源代码41b的详细设计说明书42b和测试说明 书43b以及该比较目标源代码41b的类似度。

(第一实施方式的效果)

在以上说明的第一实施方式中,具有以下的(A)~(G)的效果。

(A)源代码类似度评价单元20不指示各个软件的对应关系,而评价2 个软件的关系,作成类似关系图60。由此,用户200能够容易地全方位掌握 由多个源代码群构成的2个软件的类似性,因此能够容易地发现作为代码克隆 的软件。

(B)比较对象确定单元23如果判定为比较基准源代码41a与比较目标 源代码列表44b的任意一个比较目标源代码41b具有对应关系,则将具有对应 关系的比较目标源代码41b确定为比较基准源代码41a的比较对象,评价类似 度。由此,只对具有对应关系的比较基准源代码41a的类似度进行一次评价即 可,因此减少计算量,由此能够在短时间内结束大规模软件之间的类似度评价。

(C)对应关系分析单元22如果比较基准源代码41a的相对路径名和文 件名与比较目标源代码列表44b的任意一个比较目标源代码41b的相对路径名 和文件名一致,则判定为一致的比较目标源代码41b与比较基准源代码41a具 有对应关系。这样,只根据搜索相应文件夹而得到的信息来判定比较基准源代 码41a和比较目标源代码41b之间的对应关系,因此减少计算量,由此能够短 时间内结束大规模软件之间的类似度评价。

(D)输出单元15在比较基准源代码41a与比较目标源代码列表44b的 任意一个比较目标源代码41b都不具有对应关系的情况下,显示与比较目标源 代码列表44b的全部比较目标源代码41b的类似度中最高的类似度。由此,即 使作为改造软件的比较基准源代码41a的文件名被变更,也能够选择最适合的 比较目标源代码41b来显示类似度。

(E)输出单元15用将存储了比较基准源代码41a的比较基准软件存储部 40a的根文件夹作为根节点、将构成比较基准源代码41a的相对路径的各文件 夹作为内部节点、将比较基准源代码41a的各类似度作为叶节点的树形图来显 示。由此,能够向用户200容易理解地显示比较基准软件存储部40a的文件夹 结构、与包含在各文件夹中的源代码文件的比较目标的类似度。

(F)源代码类似度评价单元20在类似关系图60中,用横条形图64的面 积显示比较基准源代码41a的逻辑行数,并且用上色划分的横条形图64的任 意一种颜色的面积比来显示比较基准源代码41a和类似度最高的比较目标源 代码41b之间的类似度。由此,用户200能够容易地发现代码克隆的软件中的 改造地方多的比较基准源代码41a,能够应对伴随着改造地方的不良状况。

(G)类似说明书分析单元30自动作成类似说明书信息49。由此,用户 200能够容易地与比较目标源代码41b的类似度一起,取得包含在比较目标源 代码列表44b中的该比较目标源代码41b的详细设计说明书42b和测试说明书 43b。用户200还能够根据比较目标源代码41b的类似度,判断能够到哪种程 度沿用详细设计说明书42b和测试说明书43b。

(变形例)

本发明并不限于上述实施方式,在不脱离本发明的主旨的范围内,能够进 行变更实施,例如有以下的(a)~(e)的情况。

(a)本实施方式的源代码类似度评价装置10对存在于文件数据库12中 的软件(项目)进行分析。但是,并不限于此,源代码类似度评价装置10也 可以对存在于外部文件数据库110中的软件(项目)进行分析,还可以对存在 于文件数据库12中的软件和存在于外部文件数据库110中的软件进行比较而 分析。

(b)本实施方式的源代码类似度评价装置10通过指定2个文件夹来对分 别存在于指定的2个文件夹中的2个软件(项目)进行分析。但是,并不限于 此,源代码类似度评价装置10也可以通过指定2个项目文件,来分析与指定 的2个项目文件相关的2个软件(项目)。

(c)本实施方式的源代码类似度评价装置10根据在比较基准源代码Fi (41a)的相对路径中是否存在与比较基准源代码Fi(41a)的文件名具有预定 的关联性的文件名的说明书,来判断说明书的存在。但是,并不限于此,源代 码类似度评价装置10也可以根据在项目文件中是否存在与比较基准源代码Fi (41a)关联的说明书,来判断说明书的存在。

(d)源代码类似度评价装置10的输出单元15用上色划分的横条形图64 的任意一种颜色的面积比来表示比较基准源代码41a和类似源代码之间的类 似度。但是,并不限于此,输出单元15也可以通过横条形图64的色彩、黑白 的浓淡、图案来表示比较基准源代码41a和类似源代码之间的类似度,进而还 可以通过横条形图64以外的任意的图表形式(圆图表、分布图、雷达图、气 泡图等)来表示。

(e)也可以将本发明的源代码类似度评价单元20作为计算机的应用程序 来实现,将该应用程序记录到计算机可读取的存储介质中,向用户提供。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号