Modular verification of global module invariants in object-oriented programs

Modules and objects both contain variables whose values may be constrained by invariants. For example, in the object-oriented languages Java and C#, a module is a class and its static fields, and an object is an instance of a class and its instance variables. The invariants of modules work differently both from the invariants of objects alone and from the invariants of modules in a procedural language. This paper presents a methodology for module invariants in an objectoriented setting. The methodology is sound, prescribes an initialization order of a program’s modules, supports the dynamic loading of modules and classes, and is amenable to static, modular checking.

[1]  David Detlefs,et al.  Simplify: a theorem prover for program checking , 2005, JACM.

[2]  Peter Müller,et al.  Modular Specification and Verification of Object-Oriented Programs , 2002, Lecture Notes in Computer Science.

[3]  C. A. R. Hoare,et al.  Proof of Correctness of Data Representations (Reprint) , 2002, Software Pioneers.

[4]  Sheng Liang,et al.  Dynamic class loading in the Java virtual machine , 1998, OOPSLA '98.

[5]  Dexter Kozen,et al.  Eager Class Initialization for Java , 2002, FTRTFT.

[6]  Martin C. Rinard,et al.  ACM Conference on Object-Oriented Programming, Systems, Languages and Applications (OOPSLA), November 2002 Ownership Types for Safe Programming: Preventing Data Races and Deadlocks , 2022 .

[7]  K. Rustan M. Leino,et al.  Extended static checking , 1998, PROCOMET.

[8]  K. Rustan M. Leino,et al.  Object Invariants in Dynamic Contexts , 2004, ECOOP.

[9]  Jan Vitek,et al.  Confined types , 1999, OOPSLA '99.

[10]  C. A. R. Hoare,et al.  Proof of correctness of data representation , 1975, Language Hierarchies and Interfaces.

[11]  Gary T. Leavens Modular specification and verification of object-oriented programs , 1991, IEEE Software.

[12]  K. Rustan M. Leino,et al.  Data abstraction and information hiding , 2002, TOPL.

[13]  David von Oheimb Analyzing Java in Isabelle-HOL: formalization, type safety and Hoare logic , 2001 .

[14]  K. Rustan M. Leino,et al.  ESC/Java User's Manual , 2000 .

[15]  Bertrand Meyer,et al.  Eiffel: The Language , 1991 .

[16]  Luca Cardelli,et al.  Program fragments, linking, and modularization , 1997, POPL '97.

[17]  Albert L. Baker,et al.  JML: A Notation for Detailed Design , 1999, Behavioral Specifications of Businesses and Systems.

[18]  QianZhenyu,et al.  A formal specification of Java class loading , 2000 .

[19]  Arnd Poetzsch-Heffter,et al.  A Programming Logic for Sequential Java , 1999, ESOP.

[20]  David,et al.  Analyzing Java in Isabelle/HOL , 2001 .

[21]  Greg Nelson,et al.  Extended static checking for Java , 2002, PLDI '02.

[22]  K. Rustan M. Leino,et al.  Verification of Object-Oriented Programs with Invariants , 2003, J. Object Technol..

[23]  Egon Börger,et al.  Initialization problems for Java , 2000, Softw. Concepts Tools.

[24]  Michael Barnett,et al.  Friends Need a Bit More: Maintaining Invariants Over Shared State , 2004, MPC.

[25]  Sophia Drossopoulou,et al.  Flexible Models for Dynamic Linking , 2003, ESOP.

[26]  K. R Leino,et al.  Towards Reliable Modular Programs , 1995 .

[27]  Zhenyu Qian,et al.  A formal specification of Java class loading , 2000, OOPSLA '00.

[28]  Albert L. Baker,et al.  Preliminary design of JML: a behavioral interface specification language for java , 2006, SOEN.