Initially supported by NSF under Grant No. DUE-0837567, the goals of
this project is to develop practical verification techniques suitable
for teaching in undergraduate computer science courses and to
integrating program verification to the undergraduate computer science
curriculum. The mathematics to achieve these goals are sets and
functions, rather than first-order predicate logic as taught in the
standard computer science curriculum. An annotation notation called
CleanJava incorporating recent advances in specification
languages has been developed to document programs as functions from
input values to output values [Cheon, Vela and Yeep 2012] [Vela and
Cheon 2013]. A functional verification approach supporting a natural,
intuitive, forward reasoning has been extended for modular
verification of object-oriented programs [Cheon 2010] [Avila and Cheon
2012]. A formal correctness proof of code containing loops such as
while loops typically uses the technique of proof-by-induction, and
often the most difficult part of carrying out an inductive proof is
formulating a correct induction hypothesis, a specification for a loop
statement. An incorrect induction hypothesis will surely fail the
proof. We developed a systematic way for identifying specifications of
loop statements [Barua and Cheon 2013] [Barua and Cheon 2015]. The key
idea of our approach is to categorize and document common patterns of
loop statements along with their specifications [Barua and Cheon 2014]
[Barua and Cheon 2018]. This is based on our observation that
similarly-structured loops frequently have similarly-structured
specifications. Thus, a catalog of code and specification patterns can
be used as a good reference for finding and formulating a
specification of a loop statement. We believe our approach is
applicable to other verification techniques such as Hoare logic using
pre- and post-conditions. We also developed lightweight tools for
teaching and learning functional specification and verification, such
as an extensible checker for the CleanJava annotation language [Yeep
and Cheon 2013]. An incremental integration to the curriculum was
achieved by first delivering an experimental course on program
verification and then, using this experience as a guide, introducing
problem-based learning modules to programming and software engineering
courses in the undergraduate curriculum. Our recent work includes an
application of loop patterns to code refactoring [Rahad, Cao and Cheon
2017].
Last modified: $Id: cleanjava.html,v 1.1 2019/08/17 05:54:06 cheon Exp $