论文部分内容阅读
代码克隆是软件开发过程中常见的开发方式,随着开源组件、代码复用技术和开发框架等技术在程序开发中扮演越来越重要的角色,克隆代码的数量也随之快速增长。虽然代码克隆在一定程度上提高了程序开发效率,但也对软件管理及维护产生了负面影响,包括软件缺陷传播、恶意代码传播等。代码相似性分析技术旨在通过自动化的方式对克隆代码进行检测,降低克隆代码带来的负面影响。同时,随着软件产业的不断发展,代码相似性分析技术也越来越深入地应用于软件版权保护、软件安全、程序抄袭检测等领域。因此,研究高效并准确的代码相似性分析技术成为一个愈发重要的问题。传统代码相似性分析技术中,基于文本内容的方法执行效率较高,但忽略了词法、语法等信息,准确性较差;基于图和树等语法结构的检测方案耗时过高,检测粒度也往往局限于函数级别和复杂语句块级别,较难应用到实际生产环境;同时,面向包含大规模插入修改的克隆代码,传统方案往往无法对其有效地识别和分析。针对已有技术的痛点,本文提出基于程序属性特征、符号特征以及上下文特征进行代码相似性分析研究,尽可能充分利用程序的有效信息,提高检测准确性,同时兼顾相似性分析过程的执行效率。(1)在程序特征提取方面,本文基于程序抽象语法树进行实现。其中上下文特征解决了以往方案中难以识别克隆代码内插入干扰内容过多的问题,提高了分析完整性和准确性,这也是本文的创新之处;符号特征及属性特征则包含了程序词汇信息及属性信息,三种特征为后续相似性分析提供支持。(2)在代码相似性分析方面,本文针对代码片段实现基于对应符号特征距离算法进行相似性分析,有效解决插入代码修改、更改变量名、修改代码布局等对分析带来的影响,并保证了分析过程的执行效率。(3)对于以往方案难以检测包含大规模插入修改的克隆代码的问题,本文提出了基于程序上下文特征对代码片段进行合并的算法,从而可以很好的解决这一问题。基于上述研究,本文以本实验室的软件安全性分析与验证工具系统为基础进行二次开发,构建完成代码相似性分析子系统,通过客户端软件向用户提供服务。通过对多个开源项目进行特征提取测试、相似性分析测试、同类产品横向对比测试,实验结果表明各项功能符合预期需求。