Search papers, labs, and topics across Lattice.
This paper introduces Petrify, an automated verification technique that encodes Java bytecode semantics into Petri nets for analyzing concurrency properties. By leveraging state-of-the-art model checking tools, Petrify achieves a unique balance between expressiveness and practicality, allowing for precise analysis of concurrent behavior while maintaining scalability. Experimental results indicate that Petrify's succinct representation of bytecode leads to efficient verification across various Java versions and even a subset of Kotlin, making it a versatile tool for developers.
Petrify achieves a groundbreaking balance between expressiveness and scalability in verifying concurrency properties of Java bytecode, making it applicable to modern programming practices.
The landscape of automated formal verification is populated by techniques that make prominently different trade-offs: some focus on expressiveness and precision, supporting the verification of complex properties; others favor scalability and practicality, so that they are applicable to larger programs using different features. This paper presents Petrify, a novel automated verification technique for concurrency properties that achieves a distinctive trade-off. Petrify encodes the semantics of Java bytecode programs into Petri nets (PNs), which can be analyzed by state-of-the-art model checking tools such as LoLA. As our experiments demonstrate, Petrify's approach offers an interesting combination of expressiveness and practicality: PNs are a fairly precise encoding of the concurrent behavior of programs; at the same time, Petrify's PN encoding is succinct, so that its analysis remains quite insensitive to parameter size. Another practical benefit of targeting bytecode is that jPetrify, the prototype tool that implements the Petrify technique, is applicable to programs written in any version of Java and even a subset of Kotlin (another language that compiles to Java bytecode) while other similar tools are limited to older versions of Java. While this paper's experiments focus on analyzing fundamental properties like deadlock, Petrify's approach lends itself to be extended to other kinds of concurrency analysis, which we plan to tackle in future work.