论文部分内容阅读
BPEL是Web服务组合的事实标准,利用flow和link提供了并发和同步的机制。BPEL流程中的不同线程可同时访问同一个共享变量,虽然isolated scope提供了并发情况下对共享变量的访问控制,但和传统并发程序一样,如果BPEL流程未对共享变量的访问进行正确的同步,则BPEL流程也会存在数据竞争的错误。BPEL中引入的死路径删除等特性,进一步增加了数据竞争检测的难度。 数据竞争是多线程程序的常见错误之一,只有在线程间某些特定的切换下才会发生,是一种难以检测和定位且具有较大危害性的错误。目前针对BPEL的研究主要集中在测试和验证方面,需要针对数据竞争进行专门的检测。 在现有工作的基础上,我们综合运用静态检测和基于有色Petri网动态模拟执行的方法来检测BPEL流程中的数据竞争,可以比较全面和准确地检测到数据竞争,主要工作如下: (1)由于BPEL是一种基于XML的语言,抽象程度比较高,难以对BPEL流程直接进行分析,我们首先将BPEL流程转换成为更容易理解的BAFG图(一种扩展的CFG图),在此基础上,从控制流和同步流的角度,分析了包括死路径删除在内的BPEL流程的语义。 (2) BPEL流程在静态条件下可确定由控制流和同步流的传递的发生序关系,因此通过静态检测的方式,可以先初步检测出可能的BPEL数据竞争活动对。静态检测比较全面,但由于静态检测不执行BPEL流程,会存在较多的误判。 (3)在BAFG图上,结合静态检测的结果,利用深度优先遍历的算法生成BPEL测试路径,并根据约束求解工具去除不可能的测试路径,每条测试路径都包含可能存在数据竞争的BPEL活动对。 (4)根据BPEL测试路径,利用有色Petri网建模工具CPN Tools模拟BPEL流程的执行,判断可能存在数据竞争的BPEL活动对在模拟执行中是否可以并发执行,若可以并发执行,则存在数据竞争,否则不存在数据竞争。