[发明专利]基于程序约束构建的多线程程序输出唯一性检测与证据生成方法有效
申请号: | 201410320129.0 | 申请日: | 2014-07-07 |
公开(公告)号: | CN104077226A | 公开(公告)日: | 2014-10-01 |
发明(设计)人: | 刘烃;张晓东;刘沛;俞乐晨;郑庆华 | 申请(专利权)人: | 西安交通大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 西安智大知识产权代理事务所 61215 | 代理人: | 段俊涛 |
地址: | 710049*** | 国省代码: | 陕西;61 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 程序 约束 构建 多线程 输出 唯一 检测 证据 生成 方法 | ||
技术领域
本发明涉及可信软件及软件测试领域,特别涉及一种基于程序约束构建的多线程程序输出唯一性检测与证据生成方法。
背景技术
随着多核处理器被普遍应用,编写性能与结构良好的多线程程序成为释放多核处理器潜能的重要途径。调试多线程程序中的隐晦错误成为当务之急。对于串行程序,同一输入,多次执行下输出必定唯一。但是同一输入下对,于多线程程序的多次执行,未必就能产生唯一的输出。因为多线程程序在每次执行过程中都可能会产生不同的线程交织,对程序的执行结果也会有不同的影响。所以,如何验证多线程程序的输出唯一性,是一个亟待解决的问题。
然而,验证多线程程序存在一定的难度,难以重现并行错误。多线程程序具有以下几个特征:1)用户难以控制所有线程之间的执行顺序;2)在调试器中使用插装技术或者断点调试方法会产生副作用,导致某些错误消失;3)由于操作系统与运行时环境的原因,导致错误发生的序列很少再次发生;4)线程交织导致的空间状态爆炸,例如,对于有n个线程,每个线程执行k指令的程序,其交织序列数量可达(nk)!/(k!)n>=(n!)k。即使在可控制线程调度的假设下,程序员也无法用穷举所有线程交织。
目前,对于多线程程序的测试与验证已有大量工作,其中包括不确定性测试与模型检验等。基于覆盖标准指导的不确定测试方法,通过检查每次执行中的覆盖标准集合以确定尚未覆盖的元素,向程序中插入随机延迟以增大下次执行中覆盖其他元素的可能性。此外,模型检验通过符号化程序状态以及遍历整个状态空间,以查找程序中的错误状态。虽然模型检验在一定程度解决了多线程程序的验证问题,但其具有状态空间爆炸问题,导致难以扩展应用到大型复杂软件系统。
发明内容
为了克服上述现有技术的缺点,本发明的目的在于提供一种基于程序约束构建的多线程程序输出唯一性检测与证据生成方法,根据多线程程序语义构建约束表达式,将输出唯一性的验证问题转化为约束求解问题,采用约束求解器检测是否存在不同的输出,并生成说明不同输出的反例执行路径。
为了实现上述目的,本发明采用的技术方案是:
一种基于程序约束构建的多线程程序输出唯一性检测与证据生成方法,包括如下步骤:
S1)将监控代码植入待测程序,以记录程序的执行过程;
S2)在给定输入下,执行已插桩程序,生成路径记录文件;
S3)预处理执行路径以便于约束构建;
S4)在程序运行结尾处自动添加属性条件,针对多线程程序的运行输出,将输出唯一性条件ρ以assert的格式插入程序;
S5)根据程序执行语义将执行路径中状态转移、线程交织关系转化为无量词一阶逻辑表达式,构建蕴含了所有可能的交织序列的多线程程序执行路径约束模型F;
S6)针对唯一性条件ρ,利用约束求解器验证是否有解。
S7)如果有解,则表示存在多种不同的输出,并生成证据序列;如果无解,则表示此输出在此输入下唯一。
本发明进一步的改进在于:所述步骤S1)中插桩工作并非在源码或者二进制的层面上进行,而是在字节码的层面上完成,具体实施方法为:首先将待测多线程程序源码转化为中间字节码格式,即LLVM字节码;然后将具有监控功能的语句植入待测程序;最后将植入监控代码的字节码链接成可执行程序。
本发明进一步的改进在于:所述步骤S3)中预处理包括提取共享变量以识别出执行路径中公有变量的访问点以及切片以去除与验证属性无关的执行语句。
本发明进一步的改进在于:所述步骤S4)中自动识别出输出变量且对其构建输出唯一性验证条件ρ。
本发明进一步的改进在于:所述步骤S5)中多线程程序执行路径约束模型F蕴含了执行路径所有可能的交织序列,包括五种约束:路径表达式、内存模型约束、读写关系约束、偏序约束以及同步语义约束,定义分别如下:
1)路径表达式:描述线程内部的定义-使用链,以及控制线程内部状态转换;
2)内存模型约束:表示程序中语句、变量之间的关系,采用顺序一致性的语义,顺序一致性规定CPU按照代码中语句的顺序来执行程序;
3)读写关系约束:定义线程间的定义-使用链,规定共享变量所读取到的值,必须来自初始值以及最近的写值;
4)偏序约束:定义线程之间创建线程与终止线程操作语句于被操作线程语句之间的时序关系;
5)同步语义约束:定义线程之间同步控制操作语句之间的时序关系;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于西安交通大学,未经西安交通大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410320129.0/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种香兰素的制备方法
- 下一篇:超抗扭多台肩的全密封锥管螺纹连接装置