Formal Reasoning Using an Iterative Approach with an Integrated Web IDE

Nabil M. Kabbani,Daniel Welch,Caleb Priester,Stephen Schaub,Blair Durkee,Yu-Shan Sun,Murali Sitaraman
DOI: https://doi.org/10.4204/EPTCS.187.5
2015-08-17
Abstract: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.
Software Engineering,Human-Computer Interaction,Programming Languages
What problem does this paper attempt to address?
The problem that this paper attempts to solve is how to achieve the consistency verification between software components and given specifications through the use of an integrated Web IDE (Integrated Development Environment) in the software development process. Specifically, the paper explores how to use the formal verification system supported by this IDE to replace traditional testing and debugging methods in order to statically locate and correct errors. Through practical examples in classroom teaching, the paper shows how students use this iterative method to develop verifiably correct software components. This method emphasizes the importance of design contracts and, by providing readable verification conditions (VCs) and feedback from integrated provers, helps identify the reasons why proofs cannot be completed, thereby guiding students to gradually improve the code and assertions until they finally reach an automatically provable state.