[发明专利]一种基于控制流图的函数调用路径提取方法及装置有效
申请号: | 201510542043.7 | 申请日: | 2015-08-28 |
公开(公告)号: | CN105138335B | 公开(公告)日: | 2018-01-23 |
发明(设计)人: | 牟永敏 | 申请(专利权)人: | 牟永敏;北京信息科技大学 |
主分类号: | G06F9/44 | 分类号: | G06F9/44 |
代理公司: | 北京远大卓悦知识产权代理事务所(普通合伙)11369 | 代理人: | 贺持缓 |
地址: | 100101 北京市*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 控制 函数 调用 路径 提取 方法 装置 | ||
技术领域
本发明涉及软件测试技术领域,具体地,涉及一种基于控制流图的函数调用路径提取方法及装置。
背景技术
函数调用路径是一个由程序入口点到出口点的函数名序列,其将控制逻辑与函数调用相结合,并把代码分析粒度从语句扩展到函数。
一个程序会因为含有判定条件的选择语句和控制语句而产生多条函数调用路径。在程序设计中,源代码中有顺序、选择、循环三种语句结构。顺序语句不增加函数调用路径的条数,只有选择语句和循环语句才可能产生更多的程序分支。以C语言为例,关键字if,for,while,switch将会产生多条执行语句。所以,这些能够产生分支的关键字是提取函数调用关系图的关注点。
目前,提取函数调用路径的方法主要分为两种,一种是通过静态分析工具分析源代码,提取程序中的方法调用和模块之间的交互信息,确定模块之间的控制流的转向,使用自动机或者其他手段建立函数调用关系图,进而提取函数调用路径。静态分析是指在不需要执行源代码的条件下对源代码进行分析,与动态分析是相对的,动态分析是在执行源代码的条件下对源代码进行分析。
另一种更直观地提取函数调用路径的方法是程序插装法,即通过在源代码或汇编代码中插入设计好的探针函数,在程序再次执行时,即可收集到进入函数以及退出函数的插装信息,基于这些插装信息,可以获得程序的控制流的等信息,进而提取函数调用路径。其中,可以使用装点流拆分算法或其他算法实现函数调用路径的提取工作。目前,在软件自动化测试领域中,目标代码插装和源代码插装是主流的插装研究技术,但是动态插装方法的完整性依赖于测试用例的选取,如果测试用例选取不全,会导致测试过程不充分。
因此,在现有技术中提取函数调用路径的方法的基础上,为了保证函数调用路径提取的准确性以及简化函数调用路径的分析过程,提出新的提取函数调用路径的方案是非常有必要的。
发明内容
本发明所要解决的技术问题是提供一种基于控制流图的函数调用路径提取方法及装置,其目的在于使函数调用路径的提取更为简单准确。
本发明解决上述技术问题的技术方案如下:一种基于控制流图的函数调用路径提取方法,包括:对源代码进行处理,获得包含控制流消息的中间代码;将所述中间代码转换为控制流图,并将函数调用保留在所述控制流图的节点中;根据所述控制流图中每一个节点包含的函数调用的个数的对控制流图进行处理,将控制流图转换成函数调用关系图;以及根据所述函数调用关系图提取出函数调用路径。
优选地,所述对源代码进行处理,获得包含控制流消息的中间代码,包括:基于gcc编译器对源代码进行处理,获得包含控制流消息的GCC-GFG中间代码。
优选地,将所述中间代码转换为控制流图,包括:采用pattern-action模式对所述中间代码进行静态分析,将所述中间代码转换为控制流图;其中,pattern-action模式中的pattern是指采用规则匹配,action是指当匹配到指定规则的代码串后,执行该代码串的相关动作。
优选地,所述规则匹配包括函数声明匹配、基本代码块匹配、goto语句匹配和函数调用匹配。
优选地,所述根据所述控制流图中每一个节点包含的函数调用的个数的对控制流图进行处理,将控制流图转换成函数调用关系图,包括:对所述控制流图中每一个节点包含的函数调用的个数进行分类,分为没有函数调用、函数调用个数仅有一个和函数调用个数大于一个;对于没有函数调用的节点,删除该节点或者将该节点与其上层节点或下层节点进行合并;对于函数调用个数仅有一个的节点,将该节点名称重命名为函数名称;对于函数调用个数大于一个的节点,为该节点的每个函数调用创建一个新节点,并按顺序连接创建的新节点,再删除该节点,并使该节点的上层节点指向按顺序连接的新节点中的第一个节点,而按顺序连接的新节点中最后一个节点则指向该节点的下层节点;以及根据对没有函数调用的节点、函数调用个数仅有一个的节点和函数调用个数大于一个的节点的处理结果,基于选定的数据结构将控制流图转换成函数调用关系图。
本发明的技术方案还提供了一种基于控制流图的函数调用路径提取装置,包括:中间代码获取模块,用于对源代码进行处理,获得包含控制流消息的中间代码;控制流图获取模块,用于将所述中间代码转换为控制流图,并将函数调用保留在所述控制流图的节点中;函数调用关系图获取模块,用于根据所述控制流图中每一个节点包含的函数调用的个数的对控制流图进行处理,将控制流图转换成函数调用关系图;以及函数调用路径获取模块,用于根据所述函数调用关系图提取出函数调用路径。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于牟永敏;北京信息科技大学,未经牟永敏;北京信息科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510542043.7/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种智能终端软件的自动更新方法
- 下一篇:客户机应用程序和网页集成