Formal Reasoning Using an Iterative Approach with an Integrated Web IDE

This paper summarizes our experience in communicating the elements of reasoning about correctness, and the central role of formal specifications in reasoning about modular, component-based software using a language and an integrated Web IDE designed for the purpose. Our experience in using such an IDE, supported by a 'push-button' verifying compiler in a classroom setting, reveals the highly iterative process learners use to arrive at suitably specified, automatically provable code. We explain how the IDE facilitates reasoning at each step of this process by providing human readable verification conditions (VCs) and feedback from an integrated prover that clearly indicates unprovable VCs to help identify obstacles to completing proofs. The paper discusses the IDE's usage in verified software development using several examples drawn from actual classroom lectures and student assignments to illustrate principles of design-by-contract and the iterative process of creating and subsequently refining assertions, such as loop invariants in object-based code.

[1]  Murali Sitaraman,et al.  Teaching and assessment of mathematical principles for software correctness using a reasoning concept inventory , 2013 .

[2]  David R. Cok,et al.  OpenJML: Software verification for Java 7 using JML, OpenJDK, and Eclipse , 2014, F-IDE.

[3]  Mathieu Jaume,et al.  Teaching Formal Methods and Discrete Mathematics , 2014, F-IDE.

[4]  Murali Sitaraman,et al.  Teaching Mathematical Reasoning Principles for Software Correctness and Its Assessment , 2015, TOCE.

[5]  K. Rustan M. Leino,et al.  Dafny: An Automatic Program Verifier for Functional Correctness , 2010, LPAR.

[6]  Gregory Kulczycki,et al.  A Language for Building Verified Software Components , 2013, ICSR.

[7]  Jeffrey C. Carver,et al.  Specification and reasoning in SE projects using a Web IDE , 2013, 2013 26th International Conference on Software Engineering Education and Training (CSEE&T).

[8]  Cesare Tinelli,et al.  The SMT-LIB Standard: Version 1.2 , 2005 .

[9]  David R. Cok,et al.  SPEEDY: An Eclipse-based IDE for invariant inference , 2014, F-IDE.

[10]  Patrice Chalin,et al.  Towards an industrial grade IVE for Java and next generation research platform for JML , 2010, International Journal on Software Tools for Technology Transfer.

[11]  Lawrence Charles Paulson,et al.  Isabelle/HOL: A Proof Assistant for Higher-Order Logic , 2002 .

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

[13]  Murali Sitaraman,et al.  Specification engineering and modular verification using a web-integrated verifying compiler , 2012, 2012 34th International Conference on Software Engineering (ICSE).

[14]  Murali Sitaraman,et al.  Building a push-button RESOLVE verifier: Progress and challenges , 2011, Formal Aspects of Computing.

[15]  Gregory Kulczycki,et al.  Direct reasoning , 2004 .

[16]  François Pessaux FoCaLiZe: Inside an F-IDE , 2014, F-IDE.

[17]  Hampton Smith Engineering Specifications and Mathematics for Verified Software , 2013 .

[18]  Michael Leuschel,et al.  Checking Computations of Formal Method Tools - A Secondary Toolchain for ProB , 2014, F-IDE.

[19]  Murali Sitaraman,et al.  Mechanical and modular verification condition generation for object-based software , 2011 .

[20]  Bertrand Meyer,et al.  Object-Oriented Software Construction, 2nd Edition , 1997 .

[21]  Frank Piessens,et al.  VeriFast for Java: A Tutorial , 2013, Aliasing in Object-Oriented Programming.

[22]  Michael Leuschel,et al.  Who watches the watchers: Validating the ProB Validation Tool , 2014, F-IDE.

[23]  Anna Philippou,et al.  Tools and Algorithms for the Construction and Analysis of Systems , 2018, Lecture Notes in Computer Science.

[24]  Frank Piessens,et al.  VeriFast: A Powerful, Sound, Predictable, Fast Verifier for C and Java , 2011, NASA Formal Methods.

[25]  Bertrand Meyer,et al.  Proceedings 1st Workshop on Formal Integrated Development Environment: The Gotthard Approach: Designing an Integrated Verification Environment for Eiffel , 2014 .

[26]  Bor-Yuh Evan Chang,et al.  Boogie: A Modular Reusable Verifier for Object-Oriented Programs , 2005, FMCO.

[27]  K. Rustan M. Leino,et al.  The Dafny Integrated Development Environment , 2014, F-IDE.

[28]  Greg Nelson,et al.  Fast Decision Procedures Based on Congruence Closure , 1980, JACM.

[29]  Clark W. Barrett,et al.  The SMT-LIB Standard Version 2.0 , 2010 .

[30]  Murali Sitaraman,et al.  A web-integrated verifying compiler for RESOLVE: a research perspective , 2014, ISEC '14.

[31]  Gary T. Leavens,et al.  Behavioral interface specification languages , 2012, CSUR.

[32]  Nikolaj Bjørner,et al.  Z3: An Efficient SMT Solver , 2008, TACAS.

[33]  Bertrand Meyer,et al.  Verifying Eiffel Programs with Boogie , 2011, ArXiv.

[34]  Takeo Kanade,et al.  Aliasing in object-oriented programming: types, analysis and verification , 2013 .

[35]  Murali Sitaraman,et al.  Experience report: evolution of a web‐integrated software development and verification environment , 2015, Softw. Pract. Exp..

[36]  Murali Sitaraman,et al.  Verifying Component-Based Software: Deep Mathematics or Simple Bookkeeping? , 2009, ICSR.

[37]  Bruce Weide,et al.  Component-based software using RESOLVE , 1994, SOEN.

[38]  Catherine Dubois,et al.  Proceedings 1st Workshop on Formal Integrated Development Environment, F-IDE 2014, Grenoble, France, April 6, 2014 , 2014, F-IDE.

[39]  Patrice Chalin,et al.  JML4: Towards an Industrial Grade IVE for Java and Next Generation Research Platform for JML , 2008, VSTTE.

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

[41]  Bertrand Meyer,et al.  Eiffel: A language and environment for software engineering , 1988, J. Syst. Softw..

[42]  NASA Formal Methods - Third International Symposium, NFM 2011, Pasadena, CA, USA, April 18-20, 2011. Proceedings , 2011, NASA Formal Methods.