spin简介以及ispin运行样例

工具名称:iSpin

工具的适用范围和应用情况:此工具主要是用Promela编写实现。Promela是一种过程建模语言,其预期用途是验证并行系统的逻辑。给定Promela中的程序,Spin可以通过对建模系统的执行进行随机或迭代仿真来验证模型的正确性,或者可以生成C该程序对系统状态空间进行快速详尽的验证。验证程序还可以用于证明系统不变性的正确性,并且可以找到非进度执行周期。最后,它支持线性时间时间约束的验证;要么通过Promela永不声明,要么通过直接制定时间逻辑中的约束条件。可以使用Spin在不同类型的环境假设下验证每个模型。一旦使用Spin建立了模型的正确性,该事实即可用于所有后续模型的构建和验证。

spin简介以及ispin运行样例

 

工具使用流程:主要是先通过编写Promela程序,如中间左方白框所示,通过在 Edit/view标签中的 Syntax CheckRedundancy Check之后,通过 Simulate/Replay标签有(Re)Run Stop Rewind 等进行一个随机模拟的运行。通过查看消息序列图 MSC 能查看各个进程之间通过通道进行的消息交互,先给出随机运行序列以及最终结果,具体哪行除了问题。

其中中间左方白框为输入,左下方黑方框为变量数值,中间黑框是运行过程以及问题出错行。

 

对Spin的补充:

Spin采用了偏序规约、on the fly等技术,从而使得状态空间的数目得以缩减,提高了检测效率,是针对多线程软件的有效的检测工具其主要检测进程之间的信息交互是否正确。 Spin从一个并发系统的高规格的描述开始,在分析没有语法错误之后,对系统进行交互模拟,直到确认系统拥有预期的设计行为。Spin能较好的检验网络协议的一致性,找出系统中存在的无效循环、死锁、未定义的接收以及标记不完整等问题以及可以检测协议、验证算法的正确性和线性时态逻辑的正确性

 

spin简介以及ispin运行样例

 

Spin的基本结构图

内容源码
bool wantp = false, wantq = false;
byte critical = 0; 

active proctype p() {
    do 
    ::!wantq;
       wantp = true;
       critical++;
       assert (critical == 1);
       critical--;
       wantp = false;
    od
}

active proctype q() {
    do 
    ::!wantp;
       wantq = true;
       critical++;
       assert (critical == 1);
       critical--;
       wantq = false;
    od
}