A Language for Building Verified Software Components

Safe and secure reuse is only achievable by deploying formally verified software components. This paper presents essential design objectives for languages for building such components and highlights key features in RESOLVE—a prototype for such languages. It explains why the language must include specifications as an integral constituent and must have clean and rich semantics, which preclude unconstrained aliasing and other unwanted side-effects. In order that arbitrarily complex components can be given concise and verification amenable specifications, an adequate language must also include an open-ended mechanism for incorporating additional mathematical theories. Given these essential characteristics, safe and secure reuse cannot be attained within popular languages, such as C++ or Java, either by constraining them or by extending them. Better languages are necessary.

[1]  Bruce W. Weide,et al.  Copying and Swapping: Influences on the Design of Reusable Software Components , 1991, IEEE Trans. Software Eng..

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

[3]  David Lorge Parnas,et al.  A technique for software module specification with examples , 1972, CACM.

[4]  Gregory Kulczycki,et al.  The Location Linking Concept: A Basis for Verification of Code Using Pointers , 2012, VSTTE.

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

[6]  Viktor Kuncak,et al.  An integrated proof language for imperative programs , 2009, PLDI '09.

[7]  Chun-Kun,et al.  Lecture Note Sel4: Formal Verification of an Os Kernel , 2022 .

[8]  Gary T. Leavens,et al.  Beyond Assertions: Advanced Specification and Verification with JML and ESC/Java2 , 2005, FMCO.

[9]  Tobias Nipkow,et al.  A Proof Assistant for Higher-Order Logic , 2002 .

[10]  Murali Sitaraman,et al.  Engaging students in specification and reasoning: "hands-on" experimentation and evaluation , 2009, ITiCSE '09.

[11]  Mandayam K. Srivas,et al.  A Tutorial Introduction to PVS , 1998 .

[12]  William B. Frakes,et al.  Software Reuse: Advances in Software Reusability , 2000, Lecture Notes in Computer Science.

[13]  Bruce W. Weide,et al.  Specification and Verification with References , 2001 .

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

[15]  C. A. R. Hoare,et al.  The verifying compiler: A grand challenge for computing research , 2003, JACM.

[16]  Tom Ridge,et al.  The 1st Verified Software Competition: Experience Report , 2011, FM.

[17]  K. Rustan M. Leino,et al.  The Spec# Programming System: An Overview , 2004, CASSIS.

[18]  Stephen H. Edwards,et al.  Formal Foundations of Reuse and Domain Engineering, 11th International Conference on Software Reuse, ICSR 2009, Falls Church, VA, USA, September 27-30, 2009. Proceedings , 2009, ICSR.

[19]  Douglas R. Smith Generating Programs Plus Proofs by Refinement , 2005, VSTTE.

[20]  Gregory Kulczycki,et al.  Reasoning about Software-Component Behavior , 2000, ICSR.

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

[22]  David S. Hardin Design and Verification of Microprocessor Systems for High-Assurance Applications , 2010 .

[23]  Bruce W. Weide,et al.  A Review of Verification Benchmark Solutions Using Dafny , 2010 .

[24]  Panagiotis Manolios,et al.  Computer-Aided Reasoning: An Approach , 2011 .

[25]  Gerard J. Holzmann,et al.  The SPIN Model Checker , 2003 .

[26]  S. Rajamani,et al.  A decade of software model checking with SLAM , 2011, Commun. ACM.

[27]  Wolfram Schulte,et al.  FM 2011: Formal Methods - 17th International Symposium on Formal Methods, Limerick, Ireland, June 20-24, 2011. Proceedings , 2011, FM.

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

[29]  C. A. R. Hoare,et al.  The verifying compiler: A grand challenge for computing research , 2003, JACM.

[30]  Bruce M. Adcock,et al.  Working Towards the Verified Software Process , 2010 .

[31]  Trevor J. Jennings SPARK: the libre language and toolset for high-assurance software engineering , 2009 .

[32]  Viktor Kuncak,et al.  Full functional verification of linked data structures , 2008, PLDI '08.

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

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

[35]  Hovav Shacham,et al.  Comprehensive Experimental Analyses of Automotive Attack Surfaces , 2011, USENIX Security Symposium.

[36]  Lars Birkedal,et al.  Modular verification of linked lists with views via separation logic , 2010, FTfJP@ECOOP.

[37]  Richard J. Lipton,et al.  Social processes and proofs of theorems and programs , 1979, CACM.

[38]  Parosh Aziz Abdulla,et al.  The 1st Verified Software Competition: Experience Report , 2011 .

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

[40]  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).

[41]  D McMorrow,et al.  Science of Cyber-Security , 2010 .