[发明专利]基于静态分析的源码多版本函数调用关系差异性标识方法有效
申请号: | 201410252637.X | 申请日: | 2014-06-09 |
公开(公告)号: | CN104035772B | 公开(公告)日: | 2017-11-14 |
发明(设计)人: | 李斌;刘雪花;武延军 | 申请(专利权)人: | 中国科学院软件研究所 |
主分类号: | G06F9/44 | 分类号: | G06F9/44;G06F17/30 |
代理公司: | 北京君尚知识产权代理事务所(普通合伙)11200 | 代理人: | 冯艺东 |
地址: | 100190 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 静态 分析 源码 版本 函数 调用 关系 差异性 标识 方法 | ||
技术领域
本发明涉及源代码静态分析技术,特别涉及函数调用关系图和多版本差异性标识方法,提出了一种实用的基于静态分析的源码多版本函数调用关系差异性标识方法。
背景技术
源码静态分析技术是指在不运行代码的方式下,通过词法分析、语法分析、控制流分析等技术对程序代码进行扫描,验证代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。常用的静态分析技术包括词法分析、语法分析、抽象语法树分析、语义分析、控制流分析和数据流分析。静态函数调用关系是结合控制流分析和数据流分析产生的,本发明提出的新方法依靠静态分析获取源代码的静态函数调用关系。
静态函数调用关系图(以下简称函数调用关系图)展示了程序代码块之间不同层次的函数调用关系,包括顶层的模块间函数调用关系、文件间函数调用关系和底层的函数调用关系。图中的节点代表一个模块、文件或者函数,而边代表了调用关系。函数调用关系图展示了所有可能执行的路径,这些执行路径在实际的一次执行过程中不会都发生。在源代码的静态分析过程中,使用函数调用关系图能协助开发人员分析软件行为,对程序的运行框架有一个全局把握,大大提高开发人员工作效率。尤其在维护源码和分析开源代码的过程中是非常有用的。另外还可以用于更加深层次的源代码分析,如数据流分析等。
现有生成函数调用图的工具非常之多,但功能都大同小异。比较常用的像Doxygen,cflow等。Doxygen作为一个功能强大的文档生成工具,除了能根据注释生成文档,还成生成详细的函数调用图。而cflow小巧简单,主要用于生成c代码的流程图。这些常用的工具都只提供函数之间的调用关系,穷举了源代码所有的函数调用关系,信息量庞大且没有分类和归纳信息。本发明提出的新方法中对函数调用关系进行分层次展示,粒度从粗到细,调用关系清晰可见。
本发明涉及到另一背景是定制开源软件的升级问题。开源软件更新速度非常快,版本升级非常频繁。而版本升级往往涉及到重要BUG的修复和新功能的增加,对于用户定制版也有着相当重要的意义。软件的升级为已有的定制和补丁的同步升级带来了巨大的工作量。目前的这种同步升级基本依靠开发者的个人经验和手工分析。常用的代码版本比较工具Diff只能对两个版本进行简单比较,比较结果体现代码行之间的区别,是文本的差异性比较。因此,目前还没有一种方法(或软件)能够进行多版本之间代码逻辑块的函数调用关系分析比较,更没有多版本之间函数调用关系的差异性分析比较。
发明内容
本发明的目的在于提供一种基于静态分析的源码多版本函数调用关系差异性标识方法。通过这种方法图像化展示多版本差异,并分模块、文件和函数三种粒度进行显示,层层深入,最终指向有差异的函数。本发明能够将开发者从繁重的逐行阅读和比较代码的工作中解放出来,引导开发者精准定位核心问题,显著提高开发者工作效率。
本发明的基于静态分析的源码多版本函数调用关系差异性标识方法,包括三部分,如图1所示,第一部分是源代码静态分析,第二部分是源代码多版本比较,第三部分是源代码多版本差异性标识,具体描述如下:
1)静态分析:通过源码静态分析技术进行词法分析、语法分析和控制流分析,获取源码中定义的函数列表和函数之间的静态调用关系,并存储在数据库中;
2)版本比较:通过比较选取的不同版本源码获得其Diff文件,再结合函数定义列表和调用关系标识出变化的差异部分,并将变化的部分进行细致的状态分析,分别标识出函数定义和调用的修改状态、新增状态和删除状态,并存储在数据库中;
3)差异标识:结合用户的需求和数据库中保存的状态数据进行单个版本的调用关系展示和多版本函数调用关系差异视图的展示。
下面对本发明方法进行具体说明。
1)源代码静态分析
源代码静态分析阶段主要通过源码静态分析技术进行词法分析、语法分析和控制流分析等,完成函数定义和调用等信息的分析和获取。本方法从源代码的编译过程中获取函数定义和调用信息,并将这些信息进行整理合并能得出源代码的各层次的函数调用关系。这些信息是进行版本对比的基础。为了便于后期的查询与分析,将这些数据录入数据库中以下相关表格中:
目录文件列表:用来记录源码目录和文件路径。主要包括文件/目录名称,所属版本信息等。
函数定义列表:用来记录所有函数的定义相关信息。主要包括函数名称,函数所属的文件,函数的起止行号等。
静态函数调用列表:用来记录静态函数调用的相关信息。主要包括调用函数信息,被调用函数信息,以及这两个函数所属的文件等。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国科学院软件研究所,未经中国科学院软件研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410252637.X/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种美白紧肤面膜
- 下一篇:用于从烟道气中除汞的物质的多官能组合物