[发明专利]一种确定工程代码中的无用函数的方法和装置有效
申请号: | 201710818891.5 | 申请日: | 2017-09-12 |
公开(公告)号: | CN107729015B | 公开(公告)日: | 2020-12-11 |
发明(设计)人: | 宋竟轩;李彬;叶进 | 申请(专利权)人: | 创新先进技术有限公司 |
主分类号: | G06F8/41 | 分类号: | G06F8/41 |
代理公司: | 北京亿腾知识产权代理事务所(普通合伙) 11309 | 代理人: | 陈霁 |
地址: | 开曼群岛大开曼岛*** | 国省代码: | 暂无信息 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 确定 工程 代码 中的 无用 函数 方法 装置 | ||
说明书在实施例中公开一种提供工程代码的调用关系图的方法,包括:遍历所述工程代码所对应的抽象语法树,从中提取与直接调用事件相关的直接调用信息;从抽象语法树中推导获得与动态调用事件相关的动态调用信息;提供调用关系图,该调用关系图包括所述直接调用信息和所述动态调用信息。还提供了一种确定工程代码中的无用函数的方法,包括:获取所述工程代码的调用关系图;基于调用关系图,确定至少一个根节点,所述根节点对应于确定被使用的函数;从所述至少一个根节点开始,采用染色逻辑对调用关系图中的函数进行染色;将未被染色的函数确定为无用函数。此外,还提供了与上述方法对应的装置以及存储介质。如此,可以更加有效地确定出工程代码中的无用函数。
技术领域
本发明涉及程序代码优化领域,更具体而言,涉及确定工程代码中的无用函数的方法和装置。
背景技术
应用的安装包大小,是一款应用的质量的核心指标之一,它会影响到包括下载转化率、应用启动时间、代码工程质量等等方面。
工程代码量是安装包大小的最主要组成部分,随着项目的不断迭代,工程代码中不可避免的出现了越来越多的无用函数。这些无用函数,会在至少两个方面对应用产生负面影响。首先是增加了安装包大小。多数移动应用中,由代码组成的部分占据整个安装包大小的80%左右,无用的函数没有任何功能作用,但仍占据的相当的安装包大小,并且增加的安装包大小,也会增加应用的启动时间,并降低运行效率。其次还增加客户端工程的维护成本。客户端代码中残留的无用函数,大多数是在项目长时间开发过程中产生的,这些“僵尸函数”大多都具有相当的历史因素,客户端成员需要额外理解这些无用函数的逻辑,极大的增加了客户端开发人员日常开发过程中的成本,降低了客户端开发工作的效率。
因此,如何识别工程中的无用函数,是减少移动应用安装包大小、增加代码质量的关键问题之一。
为了识别这些无用函数,有些代码的开发者和提供者会进行手动自我检查,也就是项目的开发者基于自己的经验来识别函数的引用情况,根据代码搜索以及经验判断一个函数是否是无用函数。在有些方案中,还会基于文本搜索进行未引用函数的自动化扫描,也就是根据函数名作为关键字,通过代码库中的搜索,判断函数的引用情况。然而,以上的方法效率不高,并且识别无用函数的准确度非常有限,常常出现误报、漏报的情况。
因此,需要更有效的方案,准确识别出工程代码中的无用函数,从而为程序代码的优化提供基础。
发明内容
本说明书中提供的实施例旨在提供更有效的无用函数扫描方法,解决现有技术中的不足。
为实现上述目的,在一个方面,说明书的实施例提供了一种提供工程代码的调用关系图的方法,包括:遍历所述工程代码所对应的抽象语法树,从中提取与直接调用事件相关的直接调用信息;从所述抽象语法树中推导获得与动态调用事件相关的动态调用信息;提供调用关系图,该调用关系图包括所述直接调用信息和所述动态调用信息。
在一个实施例中,所述从抽象语法树中推导获得与动态调用事件相关的动态调用信息包括:从所述抽象语法树中声明节点的表达式推导动态调用的调用类的类型,以及从所述声明节点的表达式推导动态调用的函数名。
在一个实施例中,所述从抽象语法树中声明节点的表达式推导动态调用的调用类的类型包括:响应于所述声明节点的表达式为类(class)动态构造类型的表达式,根据表达式中的字符串参数推导调用类的类型;响应于所述声明节点的表达式为Self.Super指针,根据表达式函数声明所在的类,推导出调用类;
从所述声明节点的表达式推导动态调用的函数名包括:响应于所述声明节点的表达式带有字符串类型的参数,推导出该字符串类型的参数的值,作为函数名;响应于所述声明节点的表达式为Objc地址类型,找到该地址中的函数声明节点,从该节点的声明中获取函数名。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于创新先进技术有限公司,未经创新先进技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710818891.5/2.html,转载请声明来源钻瓜专利网。