论文部分内容阅读
随着开源软件的蓬勃发展,软件复用已经成为开源软件开发的重要手段。大量的粘贴复制和修改,会在软件项目之间产生大量相似的代码片段,即代码克隆。这种现象很大程度上是人为的并且有益于软件开发利用的,但也可能对软件的质量产生负面效应。代码克隆在软件内部会对软件的可维护性和一致性产生潜在威胁,在不同的软件项目间会产生漏洞传播、未授权的抄袭等危害。对软件中潜在的代码克隆进行检测,将会面临代码克隆种类多样化。代码克隆检测场景多样化以及大规模软件中海量的潜在代码克隆等巨大挑战。本文主要针对项目间海量代码克隆的抄袭检测问题,聚焦代码克隆检测效率对已有代码克隆检测方法并进行改进优化。在此基础上,本文实现了高效可扩展的项目间海量开源代码克隆抄袭检测服务工具CopyCat,为开源项目间的代码查重和版权维护打下了坚实的基础。主要内容如下:(1)实现了对已有代码克隆检测方法的分析评估和循环并行优化利用大规模的代码克隆检测基准BigCloneBench,从适用性、可扩展性和资源占用等方面对现有代码克隆检测方法进行测试分析,筛选出性能优异的NiCad和CloneWorks。经过优化,删减NiCad在项目间检测时不必要的项目内检测,在不改变检测结果的基础上极大地降低了检测时间。在CloneWorks中通过比较,选取最优的代码解析处理方法;利用项目名标记扩展CloneWorks,实现了项目间的代码克隆检测;在代码解析转换和结果转化报告阶段进行并行优化,极大地提高了程序执行效率。(2)设计了项目间多粒度多编程语言项目的克隆检测自动适配方法面向项目间多语言大规模代码克隆并发检测场景。针对软件项目间可能存在多种程序语言的问题,设计了自动匹配四种程序语言和多语言并发克隆检测的机制;针对大规模代码克隆检测问题,设计了预估代码规模、分配资源并选择适当检测方法的机制。针对用户对代码克隆检测的场景需求,引入代码克隆检测相关参数的选择机制以满足用户需要。(3)设计实现了面向海量开源代码的项目间代码克隆检测系统与开源中国的码云平台合作,在支持多语言、大规模代码克隆检测的场景基础上,整合码云社区广泛的开源项目资源并进行平台优化,在精简代码克隆输出报告的基础上,设计了用户查询相似代码片段内容的机制,对代码克隆检测结果进行可视化展示。同时整合Gitee IDE,用户可直接对代码进行在线编辑提交。