[发明专利]用于检测代码的方法和装置有效
申请号: | 201910584002.2 | 申请日: | 2019-07-01 |
公开(公告)号: | CN110297639B | 公开(公告)日: | 2023-03-21 |
发明(设计)人: | 刘志伟;邢永旭;张克鹏;白伟;李涛 | 申请(专利权)人: | 北京百度网讯科技有限公司 |
主分类号: | G06F8/41 | 分类号: | G06F8/41 |
代理公司: | 北京英赛嘉华知识产权代理有限责任公司 11204 | 代理人: | 王达佐;马晓亚 |
地址: | 100085 北京市*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 用于 检测 代码 方法 装置 | ||
本申请实施例公开了用于检测代码的方法和装置。该方法包括:解析待检测的代码库以确定待检测的代码库中的代码元素之间的调用关系;确定代码元素之间的调用关系的复杂度,筛选出与待检测的代码库中的其他代码元素之间的调用关系的复杂度不超过预设复杂度的代码元素为候选代码元素;对待检测的代码库与其他代码库之间的依赖关系进行解析;响应于确定候选代码元素未被与待检测的代码库具有依赖关系的其他代码库调用,确定候选代码元素为无效代码元素。该方法实现了无效代码的准确检测。
技术领域
本申请实施例涉及计算机技术领域,具体涉及数据处理技术领域,尤其涉及用于检测代码的方法和装置。
背景技术
无效代码是非注释代码中不参与实际执行的代码或者参与执行但是产生的结果并没有被使用的代码,是冗余的代码。无效代码一般嵌入在正常的代码中,无法像注释代码一样被程序员从语法中直接识别出来。
随着不断的开发,企业内的代码数量越来越多,对代码的维护需要消耗巨大的成本。而无效代码不仅会占用机器资源和降低产品性能,还会增加工程师阅读理解的难度,造成资源的浪费。
发明内容
本公开的实施例提出了用于检测代码的方法、装置、电子设备和计算机可读介质。
第一方面,本公开的实施例提供了一种用于检测代码的方法,包括:解析待检测的代码库以确定待检测的代码库中的代码元素之间的调用关系;确定代码元素之间的调用关系的复杂度,筛选出与待检测的代码库中的其他代码元素之间的调用关系的复杂度不超过预设复杂度的代码元素为候选代码元素;对待检测的代码库与其他代码库之间的依赖关系进行解析;响应于确定候选代码元素未被与待检测的代码库具有依赖关系的其他代码库调用,确定候选代码元素为无效代码元素。
在一些实施例中,上述确定代码元素之间的调用关系的复杂度,包括:对于待检测的代码库中的一个代码元素,基于代码元素是否与待检测的代码库中的其他代码元素具有调用关系、以及与代码元素具有调用关系的其他代码元素是否为候选代码元素,确定代码元素与待检测的代码库中其他代码元素之间的调用关系的复杂度。
在一些实施例中,上述筛选出与待检测的代码库中的其他代码元素之间的调用关系的复杂度不超过预设复杂度的代码元素为候选代码元素,包括以下至少一项:筛选出与待检测的代码库中的其他代码元素不具有调用关系的代码元素,作为候选代码元素;筛选出未被待检测的代码库中的其他代码元素调用、且不是待检测的代码库对应的程序的执行入口的代码元素,作为候选代码元素。
在一些实施例中,上述筛选出与待检测的代码库中的其他代码元素之间的调用关系的复杂度不超过预设复杂度的代码元素为候选代码元素,还包括:筛选出已确定的候选代码元素所调用的代码元素作为候选代码元素的被调用代码元素;响应于确定被调用代码元素未被除已确定的候选代码元素之外的其他代码元素调用,确定被调用代码元素为候选代码元素。
在一些实施例中,上述解析待检测的代码库以确定待检测的代码库中的代码元素之间的调用关系,包括:采用代码解析器对待检测的代码库进行解析得到抽象语法树;基于抽象语法树提取出待检测的代码库中的代码元素之间的调用关系。
在一些实施例中,上述方法还包括:响应于确定候选代码元素被与待检测的代码库具有依赖关系的其他代码库调用,且在与待检测的代码库具有依赖关系的其他代码库中调用候选代码元素的所有代码元素是无效代码元素,确定候选代码元素为无效代码元素。
第二方面,本公开的实施例提供了一种用于检测代码的装置,包括:第一解析单元,被配置为解析待检测的代码库以确定待检测的代码库中的代码元素之间的调用关系;筛选单元,被配置为确定代码元素之间的调用关系的复杂度,筛选出与待检测的代码库中的其他代码元素之间的调用关系的复杂度不超过预设复杂度的代码元素为候选代码元素;第二解析单元,被配置为对待检测的代码库与其他代码库之间的依赖关系进行解析;确定单元,被配置为响应于确定候选代码元素未被与待检测的代码库具有依赖关系的其他代码库调用,确定候选代码元素为无效代码元素。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京百度网讯科技有限公司,未经北京百度网讯科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910584002.2/2.html,转载请声明来源钻瓜专利网。