[发明专利]一种并发程序的缺陷模式发现方法有效
| 申请号: | 201510264963.7 | 申请日: | 2015-05-22 |
| 公开(公告)号: | CN104899137B | 公开(公告)日: | 2017-09-01 |
| 发明(设计)人: | 叶俊民;李超;曹洋洋;叶竹君;李蓉;杨艳 | 申请(专利权)人: | 华中师范大学 |
| 主分类号: | G06F11/36 | 分类号: | G06F11/36 |
| 代理公司: | 武汉天力专利事务所42208 | 代理人: | 吴晓颖 |
| 地址: | 430079 湖*** | 国省代码: | 湖北;42 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 并发 程序 缺陷 模式 发现 方法 | ||
1.一种并发程序的缺陷模式发现方法,其特征在于该方法包括以下步骤:
(1)监控目标程序,使用面向方面编程探针代码的注入方法对监控点进行监控以便获取状态信息;
(2)使用动态标记迁移算法DLT对设置监控点的目标程序的执行进行调度,获取目标程序的监控点的状态信息;所述的动态标记迁移算法DLT(S,T,t,SeS)的算法输入参数有:全局状态栈S,全局迁移序列集T,局部迁移t和初始的全局序列集SeS;算法输出参数有:全局序列集SeS;其步骤如下:
(2-1)将S中的栈顶元素出栈存入状态s,将SeS中的当前序列存入序列变量σ中;
(2-2)更新s的回溯信息;
(2-3)如果存在线程p和s状态下可行迁移集合s.enabled中线程p的一个迁移元素t,执行以下步骤:
(2-3-1)将线程p赋值给状态s的回溯集s.backtrack;
(2-3-2)创建状态s下已经执行过的迁移集合s.done,并将其置为空;
(2-3-3)如果存在某一线程q是状态s的回溯集s.backtrack与状态s下已经执行过的迁移集合s.done的差集中的元素,重复执行以下步骤,直到不存在这样的线程q为止:
(2-3-3-1)将q加入状态s下已经执行过的迁移集合s.done中;
(2-3-3-2)从状态s的回溯集s.backtrack中删除线程q;
(2-3-3-3)设p’是执行迁移tm的线程,若线程p’属于s.done,且tm属于s.enabled,则将tm加入集合s.retrieved中;
(2-3-3-4)将s状态下可行迁移集合s.enabled中线程q执行的迁移设置为tn;
(2-3-3-5)创建项集is并初始化为空,并将tn添加到is中;
(2-3-3-6)将项集is添加到序列变量σ中;
(2-3-3-7)判断从状态s出发且执行tn迁移后到达的状态是否为空值,若不是,则执行以下步骤,否则不执行:
(2-3-3-7-1)将从状态s出发且执行tn迁移后得到的状态设为s';
(2-3-3-7-2)将独立于迁移t且属于s.enabled中的迁移t'存入s'.retrieved集合中;
(2-3-3-7-3)将s'.enabled与s'.retrieved集合的差集存入s'.enabled中;
(2-3-3-7-4)将迁移tn添加入迁移序列T中;
(2-3-3-7-5)将状态s'压入状态栈S中;
(2-3-3-7-6)递归调用DLT(S,T,t,SeS)算法;
(2-3-3-7-7)将T中的最后一项序列移出;
(2-3-3-8)将S中的一项状态出栈;
(2-4)返回全局序列集SeS;
(3)把监控到的状态信息,以轨迹序列的形式存储在数据库中,获取数据库中每条轨迹序列的执行结果,对轨迹序列进行分类,得到成功执行序列集和失效执行序列集;
(4)在成功执行序列集和失效执行序列集中,利用序列模式挖掘算法ISPAM进行挖掘,得到目标程序缺陷模式;所述的序列模式挖掘算法ISPAM的步骤如下:
(4-1)将候选模式集合R和前k个缺陷模式的集合L设置为空集,并设置全局变量minsup为0;
(4-2)将成功执行序列集GS和失效执行序列集BS分别转化为垂直序列数据集V(GS)和V(BS),生成V(BS)中项集列表Sinit;
(4-3)对于项集列表Sinit中的每一个项items,完成以下步骤:
(4-3-1)计算其是否是频繁项,如果是:
(4-3-1-1)调用SAVE()方法对由单个项组成的模式存储到L中;
(4-3-1-2)在R集合添加项items,Sinit,Sinit中在items之后的项的集合组成的三元组;
(4-4)如果存在元组<r,S1,S2>属于R集合并且r的支持度大于等于minsup,则重复做以下步骤,直到不满足这一条件为止:
(4-4-1)选择R集合中拥有最高支持度的模式r的元组<r,S1,S2>;
(4-4-2)通过调用SEARCH()方法对候选模式集合R进行拓展,更新候选模式集合R,并将拓展得到的模式调用SAVE()方法存储到L中;
(4-4-3)将元组<r,S1,S2>从R中移除;
(4-4-4)将R中的所有满足<r,S1,S2>∈R|sup(r)<min sup>条件的元组从R中移除;
(4-5)返回含有前k个缺陷模式的集合L。
2.根据权利要求1所述的并发程序的缺陷模式发现方法,其特征在于步骤(1)中所述的获取状态信息的步骤如下:
步骤一,基于面向方面编程思想和待监控的源程序,在待监控的并发程序中针对共享变量的读写操作定义监控点,接着在监控点处添加若干个切点;
步骤二,定义每一个切点对应的通知,同时定义该通知需执行的处理代码,当切点匹配时,通知内定义的处理代码在切点之前,或在切点之后,或在切点附近这3处执行,通知内的transform()方法将用于存放包含源程序中被监控方法的参数表数组args中的行号、序列号信息的临时变量meg中的内容以及执行环境中的线程标识符转换成监控现场信息,并存入在事件类EventPO中。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华中师范大学,未经华中师范大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510264963.7/1.html,转载请声明来源钻瓜专利网。





