[发明专利]一种基于关键点引导的数据流测试方法及其测试系统在审

专利信息
申请号: 201610956731.2 申请日: 2016-11-03
公开(公告)号: CN107656863A 公开(公告)日: 2018-02-02
发明(设计)人: 蒲戈光;苏亭;张枨宇;武轲;姚银波;周寒茹 申请(专利权)人: 华东师范大学
主分类号: G06F11/36 分类号: G06F11/36
代理公司: 上海麦其知识产权代理事务所(普通合伙)31257 代理人: 董红曼
地址: 200062 上*** 国省代码: 上海;31
权利要求书: 查看更多 说明书: 查看更多
摘要:
搜索关键词: 一种 基于 关键 引导 数据流 测试 方法 及其 系统
【权利要求书】:

1.一种基于关键点引导的数据流测试方法,其特征在于,包括:

步骤一:通过标准的数据流分析方法获得待测程序中的定义-使用对,所述定义-使用对是指存在一条控制流路径总从变量的定义控制流节点到相同变量的使用控制流节点,并且所述定义控制流节点与所述使用控制流节点之间不存在关于所述变量的重定义;

步骤二:根据控制流分析方法分析所述定义-使用对中的关键点;所述关键点是覆盖所述定义-使用对时必须经过的控制流路径的节点;

步骤三:将所述定义-使用对和所述关键点输入符号执行器;

步骤四:所述符号执行器使用基于关键点的路径搜索器引导符号执行;

步骤五:如果符号执行路径覆盖所述定义-使用对,那么就返回所述符号执行路径对应的测试用例,否则继续执行步骤四,直至对于所有定义-使用对都产生了对应的测试用例,或者所有的符号执行路径均执行结束,则结束所述符号执行器的执行;

步骤六:根据符号执行的结果,统计覆盖率。

2.如权利要求1所述的基于关键点引导的数据流测试方法,其特征在于,所述定义-使用对以如下方式获得:

步骤A1:获取所述待测程序中每一个变量的定义;

步骤A2:获取每一个变量的使用所对应的定义,构建初级的定义-使用对;所述初级的定义-使用对为有序对,其表示一语句包含一个变量并且通过路径到达使用所述变量的另一语句;

步骤A3:构建控制流路径,在控制流路径上从所述初级的定义-使用对中排除包含重定义的定义-使用对;

步骤A4:获得所述待测程序中的定义-使用对。

3.如权利要求1所述的基于关键点引导的数据流测试方法,其特征在于,步骤二中所述控制流分析方法分析关键点包含以下步骤:

步骤B1:构建程序的控制流图;

步骤B2:读取所述定义-使用对的信息;

步骤B3:对于每一个定义-使用对,在控制流图上找到到达所述变量的定义节点与该变量的使用的必经节点,存入关键点列表;

步骤B4:对于所述关键点列表中的每一个关键点,重复步骤B3,直到找到的必经点为程序入口;

步骤B5:输出与定义-使用对相对应的关键点列表。

4.如权利要求1所述的基于关键点引导的数据流测试方法,其特征在于,步骤四中基于关键点的路径搜索器引导符号执行包括如下步骤:

步骤C1:如果在待选路径列表中的一条路径将会经过关键点,则选择即将经过关键点的所述路径;

步骤C2:如果在待选路径列表中所有路径均不即将经过关键点,则在控制流图上选择距离关键点最近的路径执行;

步骤C3:如果待选路径列表为空,则结束执行。

5.一种基于关键点引导的数据流测试系统,其特征在于,包含:

覆盖率检测模块,其用于提取待测程序中的数据流信息以及辅助信息,并维护用于保存数据流信息的数据结构;

搜索算法模块,其用于根据覆盖率检测模块提供的信息优化搜索算法,并提供程序状态;

符号执行模块,其用于根据所述程序状态,将执行情况发送至所述覆盖率检测模块,并生成测试用例。

下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。

该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华东师范大学,未经华东师范大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服

本文链接:http://www.vipzhuanli.com/pat/books/201610956731.2/1.html,转载请声明来源钻瓜专利网。

×

专利文献下载

说明:

1、专利原文基于中国国家知识产权局专利说明书;

2、支持发明专利 、实用新型专利、外观设计专利(升级中);

3、专利数据每周两次同步更新,支持Adobe PDF格式;

4、内容包括专利技术的结构示意图流程工艺图技术构造图

5、已全新升级为极速版,下载速度显著提升!欢迎使用!

请您登陆后,进行下载,点击【登陆】 【注册】

关于我们 寻求报道 投稿须知 广告合作 版权声明 网站地图 友情链接 企业标识 联系我们

钻瓜专利网在线咨询

周一至周五 9:00-18:00

咨询在线客服咨询在线客服
tel code back_top