Alive: Finding Non-Termination in Distributed Asynchronous Programs

Unfortunately we are currently unable to provide the source or binaries for our Alive code-to-code translator, nor the Hwsw asynchronous program analysis tool. We have included here the source code of examples used in the experiments of our submission to SAS 2012. Our examples are coded as Boogie programs. Given a source file P.bpl, we have included the following:

We have applied the Alive and Hwsw tools as follows. First we translate P.bpl into P.alive.bpl:

Alive P.bpl [/fair]

For a given program P.bpl, the assertion added in P.alive.bpl can be violated if and only if there exists a (fair, when Alive is passed the /fair flag) nonterminating execution in P.bpl.

Given the translated program P.alive.bpl, we run our Hwsw asynchronous program analysis tool to detect whether the added assertion can be violated:

Hwsw P.alive.bpl /flags:P.config

As our analysis tool is based on bounded verification, we must specify bounds on, e.g., maximum recursion depth, and a bound on the amount of interleaving / reordering between asynchronous tasks. All of the parameters passed to Hwsw are listed in P.config. The result of Hwsw is either No bugs found, which means that we are unable to conclude whether P.bpl has a nonterminating execution, or True bug, in which case Hwsw outputs a trace of P.alive.bpl witnessing a periodic nonterminating execution of P.bpl.

The programs used in our experiments are listed below.

Example Programs

PingPong / bpl / alive / flags

PingPong-mod2 / bpl / alive / flags

PingPong-mod2-1md / bpl / alive / flags

PingPong-mod3 / bpl / alive / flags

PingPong-mod3-1md / bpl / alive / flags

PingPong-mod3-2md / bpl / alive / flags

PingPongPung / bpl / alive / flags

PingPongPung-1md / bpl / alive / flags

SpanningTree-bug / bpl / alive / flags

SpanningTree-correct / bpl / alive / flags

Bfs-bug / bpl / alive / flags

Bfs-correct / bpl / alive / flags

BellmanFord-bug / bpl / alive / flags

BellmanFord-correct / bpl / alive / flags

Paxos-bug-individual / bpl / alive / manual / flags

Paxos-bug-competition / bpl / alive / manual / flags