State Exploration of Scala Actor Programs
The growing use of multicore and networked computing systems is increasing the importance of developing reliable parallel and distributed code. Unfortunately, developing and testing such code is notoriously hard, especially for shared-memory models of programming. The actor model offers a promising alternative paradigm based on message passing. Essentially, an actor is an autonomous concurrent object which interacts with other actors only by exchanging messages. In actor-based systems, the key source of non-determinism is the order in which messages are delivered to—and processed by—the actors. Bugs can still occur in actor programs as the interleaving of messages may be incorrect, or the sequential code within an actor can have bugs. We developed a general framework, called SEJAP, for exploring possible message schedules in actor systems compiled to the Java bytecode. Specifically, in this dissertation, we present one instantiation of SEJAP for the actor library of the Scala programming language. To the best of our knowledge, this is the first framework that allows systematic exploration of Scala actor programs. We also present two optimizations that alleviate the state explosion problem typical for such exploration, and thus speed up the overall exploration of actor programs in SEJAP. We have implemented our framework, Scala instantiation, and optimizations in Java PathFinder, a widely used model checker for Java bytecode developed by NASA. Preliminary results show that SEJAP can effectively explore executions of actor programs. Further, our use of SEJAP already discovered a previously unknown bug in the sample code from a popular site for Scala.