[发明专利]一种软件代码中重复片段的检测提取方法有效
申请号: | 201610625476.3 | 申请日: | 2016-08-02 |
公开(公告)号: | CN106294139B | 公开(公告)日: | 2018-08-31 |
发明(设计)人: | 张刚 | 申请(专利权)人: | 上海理工大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 上海德昭知识产权代理有限公司 31204 | 代理人: | 郁旦蓉 |
地址: | 200093 *** | 国省代码: | 上海;31 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明提供了一种软件代码中重复片段的检测提取方法,该方法包括如图的步骤一到步骤八,由于代码片段提取采取的语法树中的分层的信息,考虑了代码片段中的语法信息,使得提取的代码片段是有意义的。此外,代码片段的提取过程受到基于倒排索引的查重机制控制:如果已经发现高层次的重复了,低层次就不提取了。这种提取方法相较目前的大多数技术中先分到最小的片段检查重复然后再进行组合的方式,可以节约很多计算量。过程中,检测窗口大小能够根据实际是否存在重复的上下文进行自动调节,提高性能,检测速度快,可以被应用于实时检测场景。同时因为该方法结合了语法结构信息,因此误判率非常低。 | ||
搜索关键词: | 一种 软件 代码 重复 片段 检测 提取 方法 | ||
【主权项】:
1.一种软件代码中重复片段的检测提取方法,对输入的待分析的一组源代码文件进行分析检测后提取得到所述源代码文件中的重复片段,其特征在于,包括以下步骤:步骤一,遍历待分析的所述源代码文件,逐个读入该组文件中每个文件的代码,并使用抽象语法树语法分析器来获取抽象语法树并保留该抽象语法树到所述源代码文件的映射,从该抽象语法树中的根节点开始,按照前序遍历的顺序将节点依次标记为第o个文件第1,2,…,N个节点,直至最后的第z个文件第1,2,…,M个节点;步骤二,从o=1,n=1开始,针对第1个文件的第1个节点的数据进行token化源代码操作,计算得到token化后的哈希值,并将该哈希值存入预先建立的倒排索引表中,其中,所述倒排索引表的索引关键字为哈希字符串,索引内容为放置多个源代码片段的结构体的容器,所述结构体用于记录所述源代码片段;步骤三,当所述倒排索引表存入一条对应的所述索引关键字和所述索引内容后统计属于该关键字的所述结构体的个数;步骤四,判断步骤三中所述结构体的个数是否超过1,当判断为是时进入步骤七,当判断为否时进入下一步;步骤五,当步骤四中所述结构体的个数不超过1时,进一步判断n=N是否成立,如果n=N不成立则令n=n+1后返回步骤二,如果成立则进入下一步;步骤六,如果步骤五中n=N成立则再进一步判断z=o是否成立,如果不成立则令o=o+1返回步骤二,如果o=z成立则进入步骤八;步骤七,当步骤四中所述结构体的个数超过1时,记录对应的所述源代码片段信息,包括文件序号和节点编号,暂存起来并令n=n+x,其中n+x为n后面的首个不以n为祖先的节点,然后重复步骤二;步骤八,提取所述倒排索引表中所述结构体个数超过1的行,每行所述结构体容器内的源代码片段信息映射得到的所述源代码片段序列即为所述重复片段,输出该重复片段。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于上海理工大学,未经上海理工大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201610625476.3/,转载请声明来源钻瓜专利网。
- 上一篇:一种用于医疗手环的无线网络信号接收装置
- 下一篇:物联网数据终端