首页> 中国专利> 一种程序代码编程模式著作权归属检测模型及著作权归属检测方法

一种程序代码编程模式著作权归属检测模型及著作权归属检测方法

摘要

一种程序代码编程模式著作权归属检测模型及著作权归属检测方法,它涉及一种编程模式及程序代码著作权归属检测方法。本发明的目的是要解决现在的程序代码雷同检测方法和工具存在不能有效提取大规模程序集合中的编程模式,以及不考虑每个作者的历史数据,无法判定程序代码的著作权归属的问题。一种程序代码编程模式著作权归属检测模型由已知著作权归属的程序代码库、查询程序代码、编程模式及其索引文件、编程模式挖掘器、著作权归属分析器和著作权归属度列表组成。著作权归属检测方法:以待确认著作权归属的程序代码作为程序代码的编程模式的查询程序代码输入,即可得到著作权归属度列表。本发明主要提供一种程序代码的编程模式及著作权归属检测方法。

著录项

  • 公开/公告号CN103020494A

    专利类型发明专利

  • 公开/公告日2013-04-03

    原文格式PDF

  • 申请/专利权人 哈尔滨工业大学;

    申请/专利号CN201210508663.5

  • 发明设计人 王甜甜;王克朝;苏小红;马培军;

    申请日2012-12-03

  • 分类号G06F21/12(20130101);

  • 代理机构23109 哈尔滨市松花江专利商标事务所;

  • 代理人高会会

  • 地址 150001 黑龙江省哈尔滨市南岗区西大直街92号

  • 入库时间 2024-02-19 18:48:14

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2015-06-24

    授权

    授权

  • 2013-05-01

    实质审查的生效 IPC(主分类):G06F21/12 申请日:20121203

    实质审查的生效

  • 2013-04-03

    公开

    公开

说明书

技术领域

本发明涉及一种编程模式及程序代码著作权归属检测方法。

背景技术

程序代码编程模式及著作权归属检测方法在教育领域和软件开发领域,如程序代码抄袭 检测,软件版权侵犯、著作权纠纷的判定,以及软件维护,都有着重要的应用。

现今在计算机教学中,尤其是在程序类课程设计中,大量存在着抄袭他人作业或者作品 的行为。在完成上机编程任务或者在编程训练考核中,被考核者抄袭他人程序代码后,稍作 修改甚至不做任何修改便拿来作为自主设计作品提交;或者在网络上搜索他人已有的算法代 码,“复制-粘贴”到自己的程序中,这些学生程序设计中存在的抄袭现象是产生雷同代码的 一个重要原因。

除了学生程序设计中存在的抄袭现象产生的雷同代码之外,软件企业中的未经授权的代 码重用也受到密切关注。由于一些软件功能之间存在的共通性,使得某些软件企业也存在程 序代码的非授权使用的现象,因此大型软件系统中时有发生的抄袭、雷同现象,导致了软件 侵权案的不断发生,给正当软件公司造成了严重的影响和危害。

无论是针对学生程序还是企业开发的软件,采用人工的方法去查找雷同代码,采用很费 时,特别是程序非常多、或程序规模很大时,很难度量抄袭行为性质以及程度。判定程序代 码的著作权归属,即判定程序代码的真正作者,就更加困难了。因此,提供自动的程序代码 代码的雷同检测及著作权归属判定具有重要的意义。

同一个作者,或同一个企业的软件开发人员,由于编程习惯或软件开发实践(如重用通 用的框架、遵循特定的编程模式、以及拷贝-粘贴代码),在解决同一类问题时,通常在编程 过程中遵循特定的编程模式(如关键字、程序结构、处理思路等),因此,在同一种编程语言 解决类似问题时,会产生类似的程序代码。软件维护中,开发人员修改了一段代码,同样需 要对与该代码有相同编程模式的程序代码片段进行相似的修改,而开发人员很可能忽略了这 些代码片段。自动查找相似编程模式则可以有效缓解上述问题。

雷同代码由于存在抄袭现象,因此也具有相似的编程模式,挖掘两个代码集合中的相似 的编程模式,则可以检测出这两个代码集合中的雷同代码。此外,如果能够自动挖掘已知作 者来源的程序代码集合中的编程模式,则可以为著作权归属判定提供有效依据。如果给定代 码与某个作者的编程模式一致,则可能是该作者的代码。

综上所述,如果能够自动提取程序代码中的编程模式,则可为程序代码的雷同检测、软 件维护、以及程序代码的著作权归属判定奠定基础。

目前已有很多关于自然语言雷同文本的方法和工具,如Turnitin,但是这些方法和工具因 忽视了程序代码的编程语法,而不适合于分析程序代码。

目前也有一些检测程序代码中的雷同代码的方法和工具。主要方法有属性计数法和结构 度量方法。

属性计数法计算每一个程序的n个不同的软件度量指标(如控制流、结构、数据依赖、 嵌套深度、控制结构等),以便于将程序映射到一个n维的笛卡尔空间,然后考虑彼此邻近的 程序组可能为雷同程序。该方法存在的不足之处是:抛弃了太多的程序结构信息,导致错误 率太高,难于分析大规模程序;也无法有效检测增加或删除了部分语句的相似代码。

结构度量方法,如SIM,JPlag和MOSS等系统,在检测雷同代码时考虑了程序的结构 信息。但存在以下不足之处:通常检测每一对程序的相似度来发现剽窃行为的,而不能有效 定位出大规模程序集合中雷同的程序代码片段;SIM,JPlag具有较高的计算复杂度无法分析 大规模程序代码。

无论是属性计数法还是结构度量(structure metrics)方法,均无法自动提取程序中的编 程模式,均不考虑每个作者(程序开发人员或软件公司)的历史数据(已知作者来源的程序 代码),即使检测出雷同代码,也无法进一步判断雷同代码的著作权归属,即代码的真正作者。 因此现在的程序代码雷同检测方法和工具存在不能有效提取大规模程序集合中的编程模式, 以及不考虑每个作者的历史数据,无法判定程序代码的著作权归属的问题。

发明内容

本发明的目的是要解决现在的程序代码雷同检测方法和工具存在不能有效提取大规模程 序集合中的编程模式,以及不考虑每个作者的历史数据,无法判定程序代码的著作权归属的 问题,从而提出一种程序代码编程模式著作权归属检测模型及著作权归属检测方法。

一种程序代码编程模式著作权归属检测模型由已知著作权归属的程序代码库、查询程序 代码、编程模式及其索引文件、编程模式挖掘器、著作权归属分析器和著作权归属度列表组 成;所述的编程模式挖掘器对所述的已知著作权归属的程序代码库进行分析和转换生成所述 的编程模式及其索引文件,所述的著作权归属分析器对所述的查询程序代码进行分析,并在 所述的编程模式及其索引文件中进行索引生成所述的著作权归属度列表。

一种利用程序代码编程模式著作权归属检测模型的著作权归属检测方法,具体是按以下 步骤完成的:一、首先利用编程模式挖掘器中词法解析器对已知著作权归属的程序代码库中 的程序代码进行解析,生成标准化的token串;二、采用编程模式挖掘器中数字序列转换器 对标准化的token串执行字符串散列,计算所对应的hash值,将标准化的token串转换为一 个数字序列,然后划分数字序列,将其转换为序列数据库;三、利用编程模式挖掘器中频繁 编程模式挖掘器对序列数据库执行闭合频繁子序列挖掘,频繁编程模式挖掘器应用改进的 BIDE数据挖掘算法,挖掘支持度大于2的频繁子序列,所述的频繁子序列对应于至少出现两 次的编程模式;四、利用编程模式挖掘器中编程模式索引分析器分析挖掘出的支持度大于2 的频繁编程模式,建立倒排索引文件,并将编程模式和倒排索引文件信息存入数据库中,生 成编程模式及其索引文件;五、以待确认著作权归属的程序代码作为查询程序代码,利用查 询代码编程模式解析器根据查询程序代码提供的信息进行分析和数字序列转换,生成标准化 的token串,再对标准化的token串执行字符串散列,计算所对应的hash值,将标准化的token 串转换为一个数字序列,得到的数字序列即为编程模式,划分数字序列,将其转换为数字序 列集合,对生成的数字序列集合进一步分析,判定该数字序列集合中是否含有相同的数字序 列,如果存在含有相同的数字序列,则去除重复的数字序列,进而得到无重复的编程模式集 合,如果不存在含有相同的数字序列,则直接得到无重复的编程模式集合;六、利用著作权 归属度计算器根据无重复的编程模式集合在编程模式及其索引文件进行检索,得出无重复的 编程模式集合在编程模式及其索引文件中出现的频度,然后按公式计算著 作权归属度,计算出著作权归属度后即输出所述的著作权归属度列表;步骤六中所述的 中Aj是查询代码对第j个作者代码集合的著作权归属度,Fi,j是查询代码 中第i个模式在第j个作者代码集合中出现的频度,Locj是第j个作者程序代码集合中源代码 行数,N为查询模式块的个数,M为作者个数。

本发明优点:一、本发明所述的程序代码编程模式著作权归属检测模型可以自动挖掘程 序代码集合中的相似编程模式,减少人工参与的程度,可应用于检测雷同代码,还可以应用 于辅助软件维护;二、本发明利用程序代码编程模式著作权归属检测模型的著作权归属检测 方法,可以根据编程模式,有效分析给定查询程序代码的著作权归属,可以有效应用于程序 代码抄袭检测,软件版权侵犯、著作权纠纷的判定、和软件维护中,因此本发明具有很好的 推广应用前景。

附图说明

图1是具体实施方式一所述程序代码编程模式著作权归属检测模型的总体构建及工作流 程示意图;图2是具体实施方式二所述编程模式挖掘器的流程图;图3是具体实施方式三所 述著作权归属分析器的流程图。

具体实施方式

具体实施方式一:结合图1,本实施方式是一种程序代码编程模式著作权归属检测模型, 由已知著作权归属的程序代码库、查询程序代码、编程模式及其索引文件、编程模式挖掘器、 著作权归属分析器和著作权归属度列表组成;所述的编程模式挖掘器对所述的已知著作权归 属的程序代码库进行分析和转换生成所述的编程模式及其索引文件,所述的著作权归属分析 器对所述的查询程序代码进行分析,并在所述的编程模式及其索引文件中进行索引生成所述 的著作权归属度列表。

本实施方式所述的查询程序代码为待确认著作权归属的程序代码。

本实施方式所述的程序代码的编程模式可以自动挖掘程序代码集合中的相似编程模式, 减少人工参与的程度,可应用于检测雷同代码,还可以应用于辅助软件维护。

具体实施方式二:本实施方式与具体实施方式一的不同点是:所述的已知著作权归属的 程序代码库由程序代码的著作权归属集合构成。其他与具体实施方式一相同。

本实施方式所述的程序代码的著作权归属为程序代码属于哪个作者、程序代码属于哪个 软件开发人员或程序代码属于哪个企业。

具体实施方式三:结合图1和图2,本实施方式与具体实施方式一或二之一不同点是: 所述的编程模式挖掘器由词法解析器、数字序列转换器、数字序列转换器、频繁编程模式挖 掘器和编程模式索引分析器组成,利用词法解析器对所述的已知著作权归属的程序代码库中 的程序代码进行解析,生成标准化的token串,采用数字序列转换器对标准化的token串执行 字符串散列,计算所对应的hash值,将标准化的token串转换为一个数字序列,得到的数字 序列即为编程模式,划分数字序列,将其转换为序列数据库,利用频繁编程模式挖掘器对序 列数据库执行闭合频繁子序列挖掘,频繁编程模式挖掘器应用改进的BIDE数据挖掘算法, 挖掘支持度大于2的频繁子序列,所述的频繁子序列对应于至少出现两次的编程模式,编程 模式索引分析器分析挖掘出的支持度大于2的频繁编程模式,建立倒排索引文件,并将编程 模式和倒排索引文件信息存入数据库中,生成所述的编程模式及其索引文件。其他与具体实 施方式一或二相同。

本实施方式所述的词法解析器改进了传统的词法分析器,使之能够适用于编程模式检测, 增加对token字的标准化操作,在词法分析基础上仅保留空格、运算符、关键字,将某些类 型相似的标识符映射为相同的token字,将函数名、变量名、变量的值都映射为相同的token 字。

本实施方式所述的数字序列转换器根据源程序中的语法规则,以满足指定代码块规模的 基本的程序块为单位将数字序列划分为若干段,生成一个序列数据库,以基本块为单位生成 序列数据库,一方面可以应用于后续的挖掘算法,另一方面避免了规模过小的模式碎片的产 生。

本实施方式所述的编程模式索引分析器采用倒排索引的方式组织索引信息,每个倒排索 引条目由编程模式、该模式出现的频度、以及该模式在各个作者程序代码集合中出现的次数 构成。

BIDE是一种高效的用于查找序列数据库中的频繁闭合序列模式的方法。它是Jianyong Wang等人在IEEE Transactions on Knowledge ad Data Engineering(2007,19(8):1042-1056)中 发表的Frequent Closed Sequence Mining without Candidate Maintenance中提出的。

具体实施方式四:本实施方式与具体实施方式一至三之一不同点是:所述的改进的BIDE 数据挖掘算法是对BIDE算法进行了如下改进:一、设置gap阈值和密度阈值,序列挖掘中 允许序列中插入gap,使得算法可以检测插入或删除了部分语句的编程模式;二、研究将频 繁序列挖掘得到的数字序列结果与程序代码相映射的方法,使得算法可以准确定位程序代码。 其他与具体实施方式一至三相同。

具体实施方式五:结合图1和图3,本实施方式与具体实施方式一至四之一不同点是: 所述的著作权归属分析器由查询代码编程模式解析器和著作权归属度计算器组成,查询代码 编程模式解析器根据所述的查询程序代码提供的信息进行分析和数字序列转换,生成标准化 的token串,再对标准化的token串执行字符串散列,计算所对应的hash值,将标准化的token 串转换为一个数字序列,然后划分数字序列,将其转换为数字序列集合,对生成的数字序列 集合进一步分析,判定该数字序列集合中是否含有相同的数字序列,如果存在含有相同的数 字序列,则去除重复的数字序列,进而得到无重复的编程模式集合,如果不存在含有相同的 数字序列,则直接得到无重复的编程模式集合;利用著作权归属度计算器根据无重复的编程 模式集合在编程模式及其索引文件进行检索,得出无重复的编程模式集合在编程模式及其索 引文件中出现的频度,然后按公式计算著作权归属度,计算出著作权归属 度后即输出所述的著作权归属度列表;所述的中Aj是查询代码对第j个作 者代码集合的著作权归属度,Fi,j是查询代码中第i个模式在第j个作者代码集合中出现的频 度,Locj是第j个作者程序代码集合中源代码行数,N为查询模式块的个数,的M为作者个 数。其他与具体实施方式一至四相同。

本实施方式采用计算得到的Aj值越大,则查询代码属于第j个作者的 可能性越大。

具体实施方式六:结合图1、图2和图3,本实施方式是一种利用程序代码编程模式著作 权归属检测模型的著作权归属检测方法,具体是按以下步骤完成的:一、首先利用编程模式 挖掘器中词法解析器对已知著作权归属的程序代码库中的程序代码进行解析,生成标准化的 token串;二、采用编程模式挖掘器中数字序列转换器对标准化的token串执行字符串散列, 计算所对应的hash值,将标准化的token串转换为一个数字序列,然后划分数字序列,将其 转换为序列数据库;三、利用编程模式挖掘器中频繁编程模式挖掘器对序列数据库执行闭合 频繁子序列挖掘,频繁编程模式挖掘器应用改进的BIDE数据挖掘算法,挖掘支持度大于2 的频繁子序列,所述的频繁子序列对应于至少出现两次的编程模式;四、利用编程模式挖掘 器中编程模式索引分析器分析挖掘出的支持度大于2的频繁编程模式,建立倒排索引文件, 并将编程模式和倒排索引文件信息存入数据库中,生成编程模式及其索引文件;五、以待确 认著作权归属的程序代码作为查询程序代码,利用查询代码编程模式解析器根据查询程序代 码提供的信息进行分析和数字序列转换,生成标准化的token串,再对标准化的token串执行 字符串散列,计算所对应的hash值,将标准化的token串转换为一个数字序列,得到的数字 序列即为编程模式,划分数字序列,将其转换为数字序列集合,对生成的数字序列集合进一 步分析,判定该数字序列集合中是否含有相同的数字序列,如果存在含有相同的数字序列, 则去除重复的数字序列,进而得到无重复的编程模式集合,如果不存在含有相同的数字序列, 则直接得到无重复的编程模式集合;六、利用著作权归属度计算器根据无重复的编程模式集 合在编程模式及其索引文件进行检索,得出无重复的编程模式集合在编程模式及其索引文件 中出现的频度,然后按公式计算著作权归属度,计算出著作权归属度后即 输出所述的著作权归属度列表;步骤六中所述的中Aj是查询代码对第j 个作者代码集合的著作权归属度,Fi,j是查询代码中第i个模式在第j个作者代码集合中出现 的频度,Locj是第j个作者程序代码集合中源代码行数,N为查询模式块的个数,M为作者 个数。

本实施方式所述的词法解析器改进了传统的词法分析器,使之能够适用于编程模式检测, 增加对token字的标准化操作,在词法分析基础上仅保留空格、运算符、关键字,将某些类 型相似的标识符映射为相同的token字,将函数名、变量名、变量的值都映射为相同的token 字。

本实施方式所述的数字序列转换器根据源程序中的语法规则,以满足指定代码块规模的 基本的程序块为单位将数字序列划分为若干段,生成一个序列数据库,以基本块为单位生成 序列数据库,一方面可以应用于后续的挖掘算法,另一方面避免了规模过小的模式碎片的产 生。

本实施方式所述的编程模式索引分析器采用倒排索引的方式组织索引信息,每个倒排索 引条目由编程模式、该模式出现的频度、以及该模式在各个作者程序代码集合中出现的次数 构成。

本实施方式利用程序代码的编程模式的著作权归属检测方法,可以根据编程模式,有效 分析给定查询程序代码的著作权归属,可以有效应用于程序代码抄袭检测,软件版权侵犯、 著作权纠纷的判定、和软件维护中,因此本实施方式具有很好的推广应用前景。

具体实施方式七:本实施方式与具体实施方式六的不同点是:步骤一中所述的已知著作 权归属的程序代码库由程序代码的著作权归属集合构成。其他与具体实施方式六相同。

本实施方式所述的程序代码的著作权归属为程序代码属于哪个作者、程序代码属于哪个 软件开发人员或程序代码属于哪个企业。

具体实施方式八:本实施方式与具体实施方式六或七之一不同点是:步骤三中所述的改 进的BIDE数据挖掘算法是对BIDE算法进行了如下改进:一、设置gap阈值和密度阈值,序 列挖掘中允许序列中插入gap,使得算法可以检测插入或删除了部分语句的编程模式;二、 研究将频繁序列挖掘得到的数字序列结果与程序代码相映射的方法,使得算法可以准确定位 程序代码。其他与具体实施方式六或七相同。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号