Testing Message-Passing Concurrency
By: Zheng Shi , Lasse MØldrup , Umang Mathur and more
Potential Business Impact:
Checks if computer messages arrive in order.
A key computational question underpinning the automated testing and verification of concurrent programs is the \emph{consistency question} -- \emph{given a partial execution history, can it be completed in a consistent manner?} Due to its importance, consistency testing has been studied extensively for memory models, as well as for database isolation levels. A common theme in all these settings is the use of shared-memory as the primal mode of interthread communication. On the other hand, modern programming languages, such as Go, Rust and Kotlin, advocate a paradigm shift towards channel-based (i.e., message-passing) communication. However, the consistency question for channel-based concurrency is currently poorly understood. In this paper we lift the study of fundamental consistency problems to channels, taking into account various input parameters, such as the number of threads executing, the number of channels, and the channel capacities. We draw a rich complexity landscape, including upper bounds that become polynomial when certain input parameters are fixed, as well as hardness lower bounds. Our upper bounds are based on novel algorithms that can drive the verification of channel consistency in automated verification tools. Our lower bounds characterize minimal input parameters that are sufficient for hardness to arise, and thus shed light on the intricacies of testing channel-based concurrency. In combination, our upper and lower bounds characterize the boundary of \emph{tractability/intractability} of verifying channel consistency, and imply that our algorithms are often (nearly) optimal.
Similar Papers
Towards Bug-Free Distributed Go Programs
Software Engineering
Finds hidden bugs in computer messages.
Checking Consistency of Event-driven Traces
Programming Languages
Checks if computer programs run correctly.
Verifying Correctness of Shared Channels in a Cooperatively Scheduled Process-Oriented Language
Programming Languages
Ensures computer parts work right together.