[发明专利]一种基于代码静态分析的数据竞争检测方法及系统有效

专利信息
申请号: 201010622730.7 申请日: 2010-12-29
公开(公告)号: CN102073589A 公开(公告)日: 2011-05-25
发明(设计)人: 黄俊飞;宫云战;杨朝红;金大海;姚欣洪;王雅文;肖庆;白哥乐 申请(专利权)人: 北京邮电大学
主分类号: G06F11/36 分类号: G06F11/36
代理公司: 北京汇泽知识产权代理有限公司 11228 代理人: 张瑾
地址: 100876 *** 国省代码: 北京;11
权利要求书: 查看更多 说明书: 查看更多
摘要:
搜索关键词: 一种 基于 代码 静态 分析 数据 竞争 检测 方法 系统
【说明书】:

技术领域

发明有关一种软件测试技术,特别是指一种基于代码静态分析的数据竞争检测方法及系统。

背景技术

软件开发后在投入运行前需对其进行测试,对软件需求分析、设计规格说明和编码实现的最终审查,是软件质量保证的关键步骤。软件测试是为了发现错误而执行程序的过程,在一个可控的软件测试环境中分析或执行程序,其根本目的是以尽可能少的时间和人力发现并改正软件中潜在的各种故障及缺陷,提高软件的质量。

从测试过程是否需要运行被测软件的角度,可将软件测试方法分为两大类:动态测试法和静态测试法。所谓动态测试,就是通过运行软件来检验软件的动态行为和运行结果的正确性。而静态测试的基本特征是在对软件进行分析、检查和测试时并不实际运行被测试的程序。动态测试和静态测试各有其优缺点:动态测试的优点是发现的软件错误非常直观,缺点是对测试用例的设计要求高,不同的测试用例集合发现错误的能力差别很大,另外,由于动态测试法需要实际运行被测程序也是一个限制。而动态测试的缺点恰恰是静态测试优点,静态测试不需要实际运行被测程序,不需要设计相关的测试用例,容易自动化,静态测试的缺点是:发现的问题往往不能完全自动确定为真正的错误,需要人工确认,所以静态测试又被称作静态分析。

从可计算性理论的角度来看,静态分析是一个不可判定问题,提高精度是静态测试的核心问题,提高精度通常包括两个方面:减少误报(False Positive)和减少漏报(False Negative)。由于大量的误报会使人误以为被测软件存在很多问题,对测试失去信心,而漏报则会造成程序具有较高质量的假象。静态测试过程中,造成静态分析不精确的本质在于缺少程序动态执行信息,因此,怎样更好地近似表示和计算程序动态执行信息是提高精度的关键。

在现代软件的开发中,并发程序以其资源利用率高、计算速度快等优点在实际应用中得到了广泛应用。由于并发行为的复杂性及不确定性,使得其开发、测试与维护比一般软件的开发更困难。其中,并发程序最基本的缺陷是数据竞争,在共享内存的多线程程序中,如果一对线程同时访问了同一块内存,有一个访问是写操作,并且这一对线程没有通过加锁进行互斥操作,那么这个程序则可能发生数据竞争。多线程的程序一旦发生数据竞争,将很难被发现。它仅仅是违反了数据结构的不变量,而不会立即引起程序的崩溃,它只有在长期的运行程序的过程中会发生一些错误,因此很难追溯到数据竞争的根源。

发明内容

有鉴于此,本发明的主要目的在于提供一种能对C/C++编写的多线程程序进行有效的数据竞争检测的基于代码静态分析的数据竞争检测方法及系统。

为达到上述目的,本发明提供一种基于代码静态分析的数据竞争检测方法,该方法包括以下步骤:

A、读取待测软件,对待测软件源程序进行词法分析、语法分析及语义分析,生成待测软件的抽象语法树、控制流图、全局函数调用图;

B、遍历每个源文件生成的抽象语法树,找出所有线程的入口函数;

C、遍历每个函数的控制流图,计算每个函数内部的别名信息、函数间出口别名信息、锁集合信息、函数内部访问可逃逸变量的访问链以及线程创建关系图;

D、遇到每个线程的入口函数时,计算当前线程的函数调用链以及修改线程创建关系图;

E、计算每两个线程之间访问节点的初始化语句对集合;

F、遍历初始化语句对集合,根据别名信息删除其中不存在别名关系的语句对,得到拥有别名信息的语句对集合;

G、遍历拥有别名信息的语句对集合,根据锁集合信息,删除其中拥有别名锁的语句对,从而得到缺乏锁同步的语句对集合;

H、遍历缺乏锁同步的语句对集合,根据线程创建关系图删除不可能并发执行的语句对,从而得到最终可能发生数据竞争的语句对。

更进一步地,步骤A中,在计算出全局函数调用图后,会执行如下步骤:

A1、对函数调用图进行拓扑逆序,得到所有函数的拓扑逆序链。

A2、根据函数的拓扑逆序链得到程序源文件的近似依赖关系,然后执行步骤B。

更进一步地,所述步骤C,主要是迭代每个函数的控制流图节点,根据数据流方程计算节点的入口、出口信息,具体包括:

C1、针对每个控制流图节点,根据其所有前驱节点的别名信息计算该节点的入口别名信息;

C2、针对每个控制流图节点,根据其所有前驱节点的锁集合信息计算该节点的入口锁集合信息;

C3、根据节点的性质,计算当前节点的出口别名信息、锁集合信息、创建可逃逸变量的访问节点或者计算函数间的出口别名信息。

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

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

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

×

专利文献下载

说明:

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

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

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

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

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

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

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

钻瓜专利网在线咨询

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

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