Constructing Verifiably Correct Programs

Initially supported by NSF under Grant No. CNS-0509299 and DUE-0837567, the goal of this project is to develop approaches for constructing correct programs that are formally proved or verified. A specific focus is on investigating the use of formally-specified design documents such as OCL constraints. The Object Constraint Language (OCL) is a textual notation to specify constraints or rules that apply to UML models such as class diagrams. This project investigates both static and dynamic verification techniques and methods. The goal for static verification is to automatically translating OCL constraints to source code-level assertions such as JML specification and CleanJava annotations for formal program verification. The goal for dynamic verification is to automatically translating OCL constraints to executable assertions. It is said that assertions-self-checks on the state of a running program-are most effective when they are derived or generated from the formal specification of a program. In particular, the project focuses on deriving JML assertions and AspectJ aspects from architectural or design constraints written in architecture description languages (ADL) or OCL. Our research has shown that formally-specified design constraints such as class invariants and operation pre and postconditions written in OCL can be systematically translated to code-level annotations written in CleanJava and the resulting annotations can be used in the correctness proof of code [Cheon and Avila 2013]. The approach provides a practical alternative, or complementary technique, to program testing to assure the correctness of software. Our research also showed that runtime checks can mitigate the problem of design drift and corrosion. The key idea is to systematically translate architectural or design constraints written in a formal notation such as OCL and ADL into executable assertions to check them at run-time. The executable assertions can be JML assertions [Jung and Rubio, et al., 2007] [Avila, Flores and Cheon 2008] or AspectJ aspects [Cheon, Avila, Roach, et al. 2009a, 2009b]. Our approach and framework enable runtime verification of design-implementation conformance by detecting design corrosion. Our AspectJ framework is modular and plug-and-playable in that the constraint checking logic is completely separated from the implementation modules that are oblivious of the former. We also found a shortcoming of OCL in its support for qualified associations and proposed a small extension to OCL to make it more expressive [Dove, Barua and Cheon 2014]. In our recent work [Cheon, Cao and Rahad 2016], we proposed to use Java 8 streams for writing more concise and cleaner assertions on a collection. The use of streams in JML can be minimal and non-invasive in the conventional style of writing assertions. It can also be holistic to write all assertions in the abstract state defined by streams.

  1. Yoonsik Cheon, Zejing Cao and Khandoker Rahad, Writing JML Specifications Using Java 8 Streams, Technical Report 16-83, Department of Computer Science, University of Texas at El Paso, El Paso, TX, December 2016. [PDF]
  2. Alla Dove, Aditi Barua and Yoonsik Cheon, Extending OCL to Better Express UML Qualified Associations, Technical Report 14-20, Department of Computer Science, University of Texas at El Paso, El Paso, TX, March 2014. [PDF]
  3. Yoonsik Cheon and Carmen Avila, Constructing Verifiably Correct Java Programs Using OCL and CleanJava, International Conference on Software Engineering Research and Practice, Las Vegas, Nevada, July 22-25, 2013. pages 231-237, [PDF]
  4. Carmen Avila and Yoonsik Cheon, Functional Verification of Class Invariants in CleanJava, Innovations and Advances in Computer, Information, and Systems Sciences, and Engineering, Lecture Notes in Electrical Engineering, volume 152, Springer-Verlag, August 2012, pages 1067-1076. [DOI: 10.1007/978-1-4614-3535-8_88]
  5. Yoonsik Cheon, Carmen Avila, Steve Roach, and Cuauhtemoc Munoz. Checking Design Constraints at Run-time Using OCL and AspectJ, International Journal of Software Engineering, 2(3):5-28, December 2009. [PDF]
  6. Yoonsik Cheon, Carmen Avila, Steve Roach, Cuauhtemoc Munoz, Neith Estrada, Valeria Fierro, and Jessica Romo. An Aspect-Based Approach to Checking Design Constraints at Run-time. ITNG 2009: 6th International Conference on Information Technology: New Generations, April 27-29, 2009, Las Vegas, NV, pages 223-228, IEEE Computer Society. [DOI: 10.1109/ITNG.2009.282]
  7. Carmen Avila, Guillermo Flores, Jr., and Yoonsik Cheon. A Library-Based Approach to Translating OCL Constraints to JML Assertions for Runtime Checking, International Conference on Software Engineering Research and Practice, July 14-17, 2008, Las Vegas, Nevada, U.S.A., pages 403-408, July 2008. [PDF]
  8. Hyotaeg Jung, Carlos E. Rubio-Medrano, Eric Wong, and Yoonsik Cheon. Architectural Assertions: Checking Architectural Constraints at Run-Time. The 6th International Workshop on System and Software Architectures, pages 604-607. Published in Proceedings of SERP 2007, Volume II, June 25-28, Las Vegas, Nevada. [PDF]

Last modified: $Id: vericop.html,v 1.1 2019/08/17 05:54:06 cheon Exp $