2003 | WILLEM VISSER, KLAUS HAVELUND, GUILLAUME BRAT, SEUNGIOON PARK, FLAVIO LERDA
The paper discusses the importance of applying formal methods to modern programming languages, particularly Java, to address complex and real-world software systems. The authors argue that while formal methods have traditionally been used with specialized languages, they should now focus on analyzing programs written in mainstream languages like Java, which are widely used and have complex behaviors such as multi-threading and concurrency. They introduce Java Pathfinder (JPF), a verification, analysis, and testing environment for Java that integrates model checking, program analysis, and testing techniques. JPF uses state compression, partial order reduction, symmetry reduction, slicing, abstraction, and runtime analysis to handle large state spaces and complex behaviors. The paper also presents two case studies: a real-time avionics operating system and a spacecraft controller model, demonstrating how JPF can identify intricate errors and combine various techniques to locate deadlocks. The authors emphasize the benefits of studying real programs, including the ability to address errors that are not caught in design, the potential for new research directions, and the ability to interact with other communities in software engineering and testing.The paper discusses the importance of applying formal methods to modern programming languages, particularly Java, to address complex and real-world software systems. The authors argue that while formal methods have traditionally been used with specialized languages, they should now focus on analyzing programs written in mainstream languages like Java, which are widely used and have complex behaviors such as multi-threading and concurrency. They introduce Java Pathfinder (JPF), a verification, analysis, and testing environment for Java that integrates model checking, program analysis, and testing techniques. JPF uses state compression, partial order reduction, symmetry reduction, slicing, abstraction, and runtime analysis to handle large state spaces and complex behaviors. The paper also presents two case studies: a real-time avionics operating system and a spacecraft controller model, demonstrating how JPF can identify intricate errors and combine various techniques to locate deadlocks. The authors emphasize the benefits of studying real programs, including the ability to address errors that are not caught in design, the potential for new research directions, and the ability to interact with other communities in software engineering and testing.