一 可达性测试步骤:
(1)在给定输入下,以非确定性方式执行被测并发程序,收集执行的同步序列。
(2)对收集到的同步序列进行竞争分析,通过改变同步序列中同步事件的竞争结果构造竞争表,计算满足约束的竞争变体。
(3)以竞争变体为前缀确定性执行被测并发程序,然后以非确定性方式执行程序的后续部分,收集执行的同步序列。
(4)对每一个新的可行的同步序列,重复执行步骤(2)和(3),直到给定测试输入下没有新的可行同步序列产生。
二 相关概念:
(1)同步序列:
并发程序执行过程中同步事件的集合。
(2)并发程序同步事件存在两种时序关系:先发生于关系和并发关系。
*先发生于关系需满足以下任意一种(例如a先发生于b):a和b发生在同一线程中,且a在b之前发生;a和b能构成一个同步对,其中a为发生事件,b为接收事件;存在同步事件c,存在a先发生于c并且c先发生于b。
(3)控制结构:
*假设e为一个同步序列Q中线程T所执行的同步事件,e的控制结构记为c_struct(e,Q)。
*如果e是线程中执行的第一个事件,那么c_struct(e,Q)为空;否则c_struct(e,Q)包含线程T中直接先发生于e的事件f和所有先发生于f的时间,以及这些事件间的同步事件。
(4)先导竞争
(5)竞争集:
在一个同步序列中,可能与一个接收事件的发送方存在竞争的发送事件构成了该接受事件的竞争集。
(6)竞争变体:
同步序列的一个竞争变体通过改变该同步序列的一个或者多个接收事件的发送事件得到。可通过建立竞争表来计算竞争变体(怎么构造竞争表以及怎么从竞争表得出竞争变体),竞争表的列表示同步序列中每个竞争集不为空的接收事件,竞争表的一行代表同步序列的一个竞争变体。
三 思路:
(1)一个MapReduce Job+动态平衡算法:map任务获得初始竞争变体分片,然后一直执行,reduce任务做聚集;map任务间需要动态平衡。
(2)链接多个MapReduce Job。