a jml tutorialhomepage.cs.uiowa.edu/.../spring11/notes/jml-tutorial.pdf · 2016. 8. 22. · a jml...

232
A JML Tutorial Modular Specification and Verification of Functional Behavior for Java Gary T. Leavens 1 Joseph R. Kiniry 2 Erik Poll 3 1 School of Electrical Engineering and Computer Science University of Central Florida 2 School of Computer Science and Informatics University College Dublin 3 Computing Science Department Radboud University Nijmegen March 27, 2008 / JML Tutorial / jmlspecs.org Gary T. Leavens (UCF) JML Tutorial Fall 2007 1 / 225

Upload: others

Post on 01-Jun-2021

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

A JML TutorialModular Specification and Verification

of Functional Behavior for Java

Gary T. Leavens1 Joseph R. Kiniry2 Erik Poll3

1School of Electrical Engineering and Computer ScienceUniversity of Central Florida

2School of Computer Science and InformaticsUniversity College Dublin

3Computing Science DepartmentRadboud University Nijmegen

March 27, 2008 / JML Tutorial / jmlspecs.org

Gary T. Leavens (UCF) JML Tutorial Fall 2007 1 / 225

Page 2: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Intro.

Objectives

You’ll be able to:Explain JML’s goals.Read and write JML specifications.Use JML tools.Explain basic JML semantics.Know where to go for help.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 2 / 225

Page 3: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Intro.

Tutorial Outline

1 JML Overview

2 Reading and Writing JML Specifications

3 Abstraction in Specification

4 Subtyping and Specification Inheritance

5 ESC/Java2

6 Conclusions

Gary T. Leavens (UCF) JML Tutorial Fall 2007 3 / 225

Page 4: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Intro.

Introduce Yourself, Please

QuestionWho you are?

QuestionHow much do you already know about JML?

QuestionWhat do you want to learn about JML?

Gary T. Leavens (UCF) JML Tutorial Fall 2007 4 / 225

Page 5: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Overview

Outline

1 JML Overview

2 Reading and Writing JML Specifications

3 Abstraction in Specification

4 Subtyping and Specification Inheritance

5 ESC/Java2

6 Conclusions

Gary T. Leavens (UCF) JML Tutorial Fall 2007 5 / 225

Page 6: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Overview Basics

Java Modeling Language

Currently:Formal.Sequential Java.Functional behavior of APIs.Java 1.4.

Working on:Detailed Semantics.Multithreading.Temporal Logic.Java 1.5 (generics).

Gary T. Leavens (UCF) JML Tutorial Fall 2007 6 / 225

Page 7: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Overview Basics

Java Modeling Language

Currently:Formal.Sequential Java.Functional behavior of APIs.Java 1.4.

Working on:Detailed Semantics.Multithreading.Temporal Logic.Java 1.5 (generics).

Gary T. Leavens (UCF) JML Tutorial Fall 2007 6 / 225

Page 8: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Overview Basics

JML’s Goals

Practical, effective for detailed designs.Existing code.Wide range of tools.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 7 / 225

Page 9: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Overview Basics

Detailed Design Specification

Handles:Inter-module interfaces.Classes and interfaces.Data (fields)Methods.

Doesn’t handle:User interface.Architecture, packages.Dataflow.Design patterns.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 8 / 225

Page 10: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Overview Basics

Detailed Design Specification

Handles:Inter-module interfaces.Classes and interfaces.Data (fields)Methods.

Doesn’t handle:User interface.Architecture, packages.Dataflow.Design patterns.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 8 / 225

Page 11: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Overview Flavor

Basic Approach“Eiffel + Larch for Java”

Hoare-style (Contracts).Method pre- and postconditions.Invariants.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 9 / 225

Page 12: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Overview Flavor

A First JML Specification

public class ArrayOps {

private /*@ spec_public @*/ Object[] a;

//@ public invariant 0 < a.length;

/*@ requires 0 < arr.length;@ ensures this.a == arr;@*/

public void init(Object[] arr) {this.a = arr;

}

Gary T. Leavens (UCF) JML Tutorial Fall 2007 10 / 225

Page 13: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Overview Flavor

Field Specification with spec_public

public class ArrayOps {✞ ☎private /*@ spec_public @*/ Object[] a;✝ ✆//@ public invariant 0 < a.length;

/*@ requires 0 < arr.length;@ ensures this.a == arr;@*/

public void init(Object[] arr) {this.a = arr;

}

Gary T. Leavens (UCF) JML Tutorial Fall 2007 11 / 225

Page 14: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Overview Flavor

Object Invariant

public class ArrayOps {

private /*@ spec_public @*/ Object[] a;✞ ☎//@ public invariant 0 < a.length;✝ ✆/*@ requires 0 < arr.length;@ ensures this.a == arr;@*/

public void init(Object[] arr) {this.a = arr;

}

Gary T. Leavens (UCF) JML Tutorial Fall 2007 12 / 225

Page 15: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Overview Flavor

Method Specification with requires, ensures

public class ArrayOps {

private /*@ spec_public @*/ Object[] a;

//@ public invariant 0 < a.length;✞ ☎/*@ requires 0 < arr.length;@ ensures this.a == arr;@*/

public void init(Object[] arr) {✝ ✆this.a = arr;

}

Gary T. Leavens (UCF) JML Tutorial Fall 2007 13 / 225

Page 16: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Overview Flavor

Interface Specification

JML Specification

Java Code

Syntactic Interface Functional Behavior

Gary T. Leavens (UCF) JML Tutorial Fall 2007 14 / 225

Page 17: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Overview Flavor

Interface Specification

/*@ requires 0 < arr.length;@ ensures this.a == arr; @*/

public void init(Object[] arr);

public void init(Object[] arr){ this.a = arr; }

public void init(Object[] arr);

requires 0 < arr.length;ensures this.a == arr;

Gary T. Leavens (UCF) JML Tutorial Fall 2007 15 / 225

Page 18: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Overview Flavor

Like . . . But for Java and . . .

VDM, butOO features

Eiffel, butFeatures for formal verification

Spec#, butDifferent invariant methodologyMore features for formal verification

Gary T. Leavens (UCF) JML Tutorial Fall 2007 16 / 225

Page 19: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Overview Flavor

Unlike OCL and Z

More Java-like syntax.Tailored to Java semantics.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 17 / 225

Page 20: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Overview Flavor

Many Tools, One Language

public class ArrayOps {

private /*@ spec_public @*/ Object[] a;

//@ public invariant 0 < a.length;

/*@ requires 0 < arr.length;@ ensures this.a == arr;@*/

public void init(Object[] arr) {this.a = arr;

}}

ESC/Java2

Warnings

Daikon

Data trace file

JML Annotated Java

JACK, Jive, Krakatoa,KeY, LOOP

Correctness proofClass file

jmlc

Unit tests

jmlunit

jmldoc

Web pages

Bogor

Model checkingXVP

Gary T. Leavens (UCF) JML Tutorial Fall 2007 18 / 225

Page 21: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Overview Flavor

How Tools Complement Each Other

Different strengths:Runtime checking — real errors.Static checking — better coverage.Verification — guarantees.

Usual ordering:1 Runtime checker (jmlc and jmlunit).2 Extended Static Checking (ESC/Java2).3 Verification tool (e.g., KeY, JACK, Jive).

Gary T. Leavens (UCF) JML Tutorial Fall 2007 19 / 225

Page 22: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Overview Interest

Interest in JML

Many tools.State of the art language.Large and open research community:

23 groups, worldwide.Over 135 papers.

See jmlspecs.org

Gary T. Leavens (UCF) JML Tutorial Fall 2007 20 / 225

Page 23: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Overview Interest

Advantages of Working with JML

Reuse language design.Ease communication with researchers.Share customers.

Join us!

Gary T. Leavens (UCF) JML Tutorial Fall 2007 21 / 225

Page 24: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Overview Interest

Opportunities in Working with JMLOr: What Needs Work

Tool development, maintenance.Extensible tool architecture.Unification of tools.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 22 / 225

Page 25: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Overview Finding More

Where to Find More: jmlspecs.org

Documents:“Design by Contract with JML”“An overview of JML tools and applications”“Preliminary Design of JML”“JML’s Rich, Inherited Specifications for Behavioral Subtypes”“JML Reference Manual”

Also:Examples, teaching material.Downloads, sourceforge project.Links to papers, etc.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 23 / 225

Page 26: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W

Outline

1 JML Overview

2 Reading and Writing JML Specifications

3 Abstraction in Specification

4 Subtyping and Specification Inheritance

5 ESC/Java2

6 Conclusions

Gary T. Leavens (UCF) JML Tutorial Fall 2007 24 / 225

Page 27: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Lightweight

JML Annotation Comments �= Java Annotations

JML annotation comments:Line starting with //@

Between /*@ and @*/, ignoring @’s starting lines.First character must be @

Gary T. Leavens (UCF) JML Tutorial Fall 2007 25 / 225

Page 28: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Lightweight

JML Annotations Comments �= Java Annotations

QuestionWhat’s wrong with the following?

// @requires 0 < arr.length;// @ensures this.a == arr;public void init(Object[] arr)

Gary T. Leavens (UCF) JML Tutorial Fall 2007 26 / 225

Page 29: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Lightweight

Most Important JML Keywords

Top-level in classes and interfaces:invariantspec_publicnullable

For methods and constructors:requiresensuresassignablepure

Gary T. Leavens (UCF) JML Tutorial Fall 2007 27 / 225

Page 30: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Lightweight

Example: BoundedStack

ExampleSpecify bounded stacks of objects.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 28 / 225

Page 31: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Lightweight

BoundedStack’s Data and Invariant

public class BoundedStack {

private /*@ spec_public nullable @*/Object[] elems;

private /*@ spec_public @*/ int size = 0;

//@ public invariant 0 <= size;/*@ public invariant elems != null@ && (\forall int i;@ size <= i && i < elems.length;@ elems[i] == null);@*/

Gary T. Leavens (UCF) JML Tutorial Fall 2007 29 / 225

Page 32: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Lightweight

BoundedStack’s Constructor

/*@ requires 0 < n;@ assignable elems;@ ensures elems.length == n;@*/

public BoundedStack(int n) {elems = new Object[n];

}

Gary T. Leavens (UCF) JML Tutorial Fall 2007 30 / 225

Page 33: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Lightweight

BoundedStack’s push Method

/*@ requires size < elems.length-1;@ assignable elems[size], size;@ ensures size == \old(size+1);@ ensures elems[size-1] == x;@ ensures_redundantly@ (\forall int i; 0 <= i && i < size-1;@ elems[i] == \old(elems[i]));@*/

public void push(Object x) {elems[size] = x;size++;

}

Gary T. Leavens (UCF) JML Tutorial Fall 2007 31 / 225

Page 34: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Lightweight

BoundedStack’s pop Method

/*@ requires 0 < size;@ assignable size, elems[size-1];@ ensures size == \old(size-1);@ ensures_redundantly@ elems[size] == null@ && (\forall int i; 0 <= i && i < size-1;@ elems[i] == \old(elems[i]));@*/

public void pop() {size--;elems[size] = null;

}

Gary T. Leavens (UCF) JML Tutorial Fall 2007 32 / 225

Page 35: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Lightweight

BoundedStack’s top Method

/*@ requires 0 < size;@ assignable \nothing;@ ensures \result == elems[size-1];@*/

public /*@ pure @*/ Object top() {return elems[size-1];

}}

Gary T. Leavens (UCF) JML Tutorial Fall 2007 33 / 225

Page 36: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Lightweight

spec_public, nullable, and invariant

spec_publicPublic visibility.Only public for specification purposes.

nullablefield (and array elements) may be null.Default is non_null.

invariant must be:True at end of constructor.Preserved by each method.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 34 / 225

Page 37: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Lightweight

requires and ensures

requires clause:Precondition.Obligation on callers, after parameter passing.Assumed by implementor.

ensures clause:Postcondition.Obligation on implementor, at return.Assumed by caller.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 35 / 225

Page 38: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Lightweight

Semantics of Requires and Ensures

outputpost-state

input pre-state

pre

Gary T. Leavens (UCF) JML Tutorial Fall 2007 36 / 225

Page 39: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Lightweight

Semantics of Requires and Ensures

outputpost-state

input pre-state

pre

post

Gary T. Leavens (UCF) JML Tutorial Fall 2007 37 / 225

Page 40: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Lightweight

Semantics of Requires and Ensures

outputpost-state

input pre-state

pre

post

m()

Gary T. Leavens (UCF) JML Tutorial Fall 2007 38 / 225

Page 41: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Lightweight

assignable and pure

assignableFrame axiom.Locations (fields) in pre-state.New object fields not covered.Mostly checked statically.Synonyms: modifies, modifiable

pureNo side effects.Implies assignable \nothingAllows method’s use in specifications.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 39 / 225

Page 42: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Lightweight

Assignable is a Shorthand

assignable gender;ensures gender.equals(g);

means

ensures \only_assigned(gender)&& gender.equals(g);

Gary T. Leavens (UCF) JML Tutorial Fall 2007 40 / 225

Page 43: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Lightweight

Redundant Clauses

E.g., ensures_redundantlyAlerts reader.States something to prove.Must be implied by:

ensures clauses,assignable clause,invariant, andJML semantics.

Also requires_redundantly, etc.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 41 / 225

Page 44: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Lightweight

Multiple Clauses

Semantics:

requires P;requires Q;

is equivalent to:

requires P && Q;

Similarly for ensures, invariant.

Note: runtime checker gives better errors with multiple clauses.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 42 / 225

Page 45: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Lightweight

Defaults for Omitted Clauses

invariant true;requires true;assignable \everything;ensures true;

Gary T. Leavens (UCF) JML Tutorial Fall 2007 43 / 225

Page 46: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Lightweight

Expression Keywords

\result = method’s return value.\old(E) = pre-state value of E .(\forall T x; P; Q) =

�{Q | x ∈ T ∧ P}

(\exists T x; P; Q) =�{Q | x ∈ T ∧ P}

(\min T x; P; E) = min{E | x ∈ T ∧ P}(\sum T x; P; E) =

�{E | x ∈ T ∧ P}

(\num_of T x; P; Q) =�{1 | x ∈ T ∧ P ∧Q}

. . .

Gary T. Leavens (UCF) JML Tutorial Fall 2007 44 / 225

Page 47: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Exercise

Steps for Specifying a Type for Public Clients

1 Specify data (spec_public fields).2 Specify a public invariant.3 Specify each public method using:

1 requires.2 assignable (or pure).3 ensures.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 45 / 225

Page 48: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Exercise

Exercise: Specify BagOfInt (7 minutes)

ExerciseSpecify the following:

public class BagOfInt {private int[] a;private int n;

/** Initialize to contain input’s elements. */public BagOfInt(int[] input);/** Return the multiplicity of i. */public int occurrences(int i);/** Return and delete the minimum element. */public int extractMin();

}

Gary T. Leavens (UCF) JML Tutorial Fall 2007 46 / 225

Page 49: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Exercise

My Solution: BagOfInt’s Data

public class BagOfInt {/** Elements. */private /*@ spec_public non_null @*/ int[] a;/** Number of active elements in a. */private /*@ spec_public @*/ int n;

//@ public invariant 0 <= n && n <= a.length;

Gary T. Leavens (UCF) JML Tutorial Fall 2007 47 / 225

Page 50: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Exercise

My Solution: BagOfInt’s Constructor

/** Initialize to contain input’s elements. *//*@ assignable a, n;@ ensures n == input.length;@ ensures (\forall int i; 0 <= i && i < n;@ a[i] == input[i]); @*/

public BagOfInt(/*@ non_null @*/ int[] input);

Gary T. Leavens (UCF) JML Tutorial Fall 2007 48 / 225

Page 51: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Exercise

My Solution: Method occurrences

/** Return the multiplicity of i. *//*@ ensures \result@ == (\num_of int j; 0 <= j && j < n;@ a[j] == i); @*/

public /*@ pure @*/ int occurrences(int i);

Gary T. Leavens (UCF) JML Tutorial Fall 2007 49 / 225

Page 52: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Exercise

My Solution: Method extractMin

/** Return and delete the minimum element. *//*@ requires 0 < n;@ assignable n, a, a[*];@ ensures n == \old(n-1);@ ensures \result ==@ \old((\min int j; 0 <= j && j < n; a[j]));@ ensures (\forall int j; 0 <= j && j < \old(n);@ (\old(a[j]) != \result@ && occurrences(\old(a[j]))@ == \old(occurrences(a[j])))@ || (\old(a[j]) == \result@ && occurrences(\old(a[j]))@ == \old(occurrences(a[j])-1))); @*/

public int extractMin();

Gary T. Leavens (UCF) JML Tutorial Fall 2007 50 / 225

Page 53: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Tools

Goals of the Tools

jmlc: Find violations at runtime.jmlunit: Aid/automate unit testing.

ESC/Java2: Warn about likely runtime exceptions and violations.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 51 / 225

Page 54: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Tools

Getting the Tools

Links to all tools:jmlspecs.org’s download page.

Individual tools:Common JML toolssourceforge.net/projects/jmlspecs/ESC/Java2http://kind.ucd.ie/products/opensource/ESCJava2/The Mobius Program Verification Environment (PVE)http://kind.ucd.ie/products/opensource/Mobius/

Gary T. Leavens (UCF) JML Tutorial Fall 2007 52 / 225

Page 55: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Tools

Using jmlc, the Runtime Checker

Example$ jmlc -Q -e BagOfInt.java BagOfIntMain.java$ jmlrac BagOfIntMain

Gary T. Leavens (UCF) JML Tutorial Fall 2007 53 / 225

Page 56: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Tools

Writing Tests Using Assert

int[] mine= new int[] {0, 10, 20, 30, 40, 10};

BagOfInt b = new BagOfInt(mine);System.out.println(

"b.occurrences(10) == "+ b.occurrences(10));

//@ assert b.occurrences(10) == 2;//@ assert b.occurrences(5) == 0;int em1 = b.extractMin();//@ assert em1 == 0;int em2 = b.extractMin();//@ assert em2 == 10;int em3 = b.extractMin();//@ assert em2 == 10;

Gary T. Leavens (UCF) JML Tutorial Fall 2007 54 / 225

Page 57: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Tools

Using jmlc, the Runtime Checker

org...JMLInternalExceptionalPostconditionError:by method BagOfInt.occurrences regarding spec...s atFile "BagOfInt.jml", line 21, character 14, when’jml$e’ is ...ArrayIndexOutOfBoundsException: 6at BagOfInt.main(BagOfInt.java:2120)

Exception in thread "main"

21 /*@ ensures \result22 @ == (\num_of int j; 0 <= j && j < n;23 @ a[j] == i); @*/24 public /*@ pure @*/ int occurrences(int i);

Gary T. Leavens (UCF) JML Tutorial Fall 2007 55 / 225

Page 58: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Tools

Using jmlc with jmlunit

ExampleCLASSPATH includes:

.

junit.jar (version 3.8.1)JML/bin/jml-release.jar

$ jmlunit -i BagOfInt.java

Edit BagOfInt_JML_TestData.java

$ javac BagOfInt_JML_Test*.java$ jmlc -Q -e BagOfInt.java$ jmlrac BagOfInt_JML_Test

Gary T. Leavens (UCF) JML Tutorial Fall 2007 56 / 225

Page 59: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Tools

Using jmlc with jmlunit

.....F.F.F.F.F.F.F.F.F.F.F.F.F.F........F.F.....Time: 0.01There were 16 failures:1) occurrences:0(BagOfInt_JML_Test$TestOccurrences)junit.framework.AssertionFailedError:Method ’occurrences’ applied toReceiver: {3, 4, 2, 3, 3}Argument i: 0

Caused by: ...JMLExitExceptionalPostconditionError:by: method BagOfInt.occurrences regarding spec...s at

File "BagOfInt.jml", line 21, character 14, when’jml$e’ is ...ArrayIndexOutOfBoundsException: 5

Gary T. Leavens (UCF) JML Tutorial Fall 2007 57 / 225

Page 60: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Tools

Using ESC/Java2

Example$ CLASSPATH=.$ export CLASSPATH$ escjava2 -nonNullByDefault BagOfInt.java

Gary T. Leavens (UCF) JML Tutorial Fall 2007 58 / 225

Page 61: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Tools

Using ESC/Java2

BagOfInt ...Prover started:0.03 s 15673776 bytes[2.013 s 15188656 bytes]

BagOfInt: BagOfInt(int[]) ...---------------------------------------------------BagOfInt.java:11: Warning:

Postcondition possibly not established (Post)}^

Associated declaration is".\BagOfInt.jml", line 14, col 6:

@ ensures (\forall int i; 0 <= i && i < n;^

Gary T. Leavens (UCF) JML Tutorial Fall 2007 59 / 225

Page 62: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Tips/Pitfalls

Tip: Use JML Assert Statements

JML assert statementsAll JML features.No side effects.

Java assert statementsOnly Java expressions.Can have side effects.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 60 / 225

Page 63: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Tips/Pitfalls

Tip: Use JML Assume Statements

assume P;

Claims P is true.Checked by the RAC like assert P;

Blame other party if false.Assumed by ESC/Java and static tools.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 61 / 225

Page 64: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Tips/Pitfalls

Assume Statements and Verification

//@ requires P;//@ ensures Q;public void m() {

S

}

generates:

public void m() {//@ assume P;S

//@ assert Q;}

Gary T. Leavens (UCF) JML Tutorial Fall 2007 62 / 225

Page 65: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Tips/Pitfalls

Assume Statements and Verification

//@ requires P;//@ ensures Q;public void m() {

S

}

generates:

//@ assert P;o.m();//@ assume Q;

Gary T. Leavens (UCF) JML Tutorial Fall 2007 63 / 225

Page 66: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Tips/Pitfalls

Pitfall: Aliasing in Java

x

y

Local variables(Stack)

Object fields(Heap)

f

Gary T. Leavens (UCF) JML Tutorial Fall 2007 64 / 225

Page 67: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Tips/Pitfalls

Aliasing and Object IdentityJML Uses Java’s Indirect Model for Objects

For objects x and y , x == y means:x and y have same address.x and y are aliased.Changing of x .f also changes y .f .

Aliasing caused by:Assignment (x = y ).Method calls

Passing field o.y to formal x .Passing both x and y to different formals.Etc.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 65 / 225

Page 68: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Tips/Pitfalls

Pitfall: Aliasing

QuestionWhat’s wrong with this? How to fix it?

public class Counter {

private /*@ spec_public @*/ int val;

//@ assignable val;//@ ensures val == \old(val + y.val);//@ ensures y.val == \old(y.val);public void addInto(Counter y){ val += y.val; }

}

Gary T. Leavens (UCF) JML Tutorial Fall 2007 66 / 225

Page 69: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Tips/Pitfalls

Pitfall: Aliasing

QuestionWhat’s wrong with this? How to fix it?

public class Counter {

private /*@ spec_public @*/ int val;

//@ assignable val;//@ ensures val == \old(val + y.val);//@ ensures y.val == \old(y.val);public void addInto(Counter y){ val += y.val; }

}

Gary T. Leavens (UCF) JML Tutorial Fall 2007 66 / 225

Page 70: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Tips/Pitfalls

Revised Counter to Fix the Problem

public class Counter2 {

private /*@ spec_public @*/ int val;

//@ requires this != y;//@ assignable val;//@ ensures val == \old(val + y.val);//@ ensures y.val == \old(y.val);public void addInto(Counter2 y){ val += y.val; }

}

Gary T. Leavens (UCF) JML Tutorial Fall 2007 67 / 225

Page 71: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Tips/Pitfalls

Pitfall: Representation Exposure

class SortedInts {private /*@ spec_public @*/ int[] a;

/*@ public invariant (\forall int i, j;@ 0 <= i && i < j && j < a.length;@ a[i] <= a[j]); @*/

/*@ requires 0 < a.length;@ ensures \result == a[0];@ ensures (\forall int i, j;@ 0 <= i && i < a.length;@ \result <= a[i]); @*/

public /*@ pure @*/ int first(){ return a[0]; }

Gary T. Leavens (UCF) JML Tutorial Fall 2007 68 / 225

Page 72: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Tips/Pitfalls

Pitfall: Representation Exposure

QuestionWhat’s wrong with this? How to fix it?

/*@ public invariant (\forall int i, j;@ 0 <= i && i < j && j < a.length;@ a[i] <= a[j]); @*/

/*@ requires (\forall int i, j;@ 0 <= i && i < j && j < inp.length;@ inp[i] <= inp[j]);@ assignable a;@ ensures a == inp; @*/

public SortedInts(int[] inp){ a = inp; }

Gary T. Leavens (UCF) JML Tutorial Fall 2007 69 / 225

Page 73: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Tips/Pitfalls

Pitfall: Representation Exposure

QuestionWhat’s wrong with this? How to fix it?

/*@ public invariant (\forall int i, j;@ 0 <= i && i < j && j < a.length;@ a[i] <= a[j]); @*/

/*@ requires (\forall int i, j;@ 0 <= i && i < j && j < inp.length;@ inp[i] <= inp[j]);@ assignable a;@ ensures a == inp; @*/

public SortedInts(int[] inp){ a = inp; }

Gary T. Leavens (UCF) JML Tutorial Fall 2007 69 / 225

Page 74: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Tips/Pitfalls

Revised SortedInts Using Universes (jmlc)

class SortedInts2 {private /*@ spec_public rep @*/ int[] a;

Gary T. Leavens (UCF) JML Tutorial Fall 2007 70 / 225

Page 75: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Tips/Pitfalls

Revised Using Universes (jmlc)

/*@ requires (\forall int i, j;@ 0 <= i && i < j && j < inp.length;@ inp[i] <= inp[j]);@ assignable a;@ ensures \fresh(a);@ ensures a.length == inp.length;@ ensures (\forall int i;@ 0 <= i && i < inp.length;@ a[i] == inp[i]); @*/

public SortedInts2(int[] inp) {a = new /*@ rep @*/ int[inp.length];for (int i = 0; i < a.length; i++) {

a[i] = inp[i];} }

Gary T. Leavens (UCF) JML Tutorial Fall 2007 71 / 225

Page 76: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Tips/Pitfalls

Revised Using Owner (ESC/Java2)

class SortedInts3 {private /*@ spec_public @*/ int[] a;//@ public invariant a.owner == this;

Gary T. Leavens (UCF) JML Tutorial Fall 2007 72 / 225

Page 77: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Tips/Pitfalls

Revised Using Owner (ESC/Java2)

/*@ requires inp.owner != this;@ requires (\forall int i, j;@ 0 <= i && i < j && j < inp.length;@ inp[i] <= inp[j]);@ assignable a;@ ensures \fresh(a);@ ensures a.length == inp.length;@ ensures (\forall int i;@ 0 <= i && i < inp.length;@ a[i] == inp[i]); @*/

public SortedInts3(int[] inp) {

Gary T. Leavens (UCF) JML Tutorial Fall 2007 73 / 225

Page 78: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Tips/Pitfalls

Revised Using Owner (ESC/Java2)

public SortedInts3(int[] inp) {a = new int[inp.length];//@ set a.owner = this;for (int i = 0; i < a.length; i++) {

a[i] = inp[i];}

}

Gary T. Leavens (UCF) JML Tutorial Fall 2007 74 / 225

Page 79: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Tips/Pitfalls

Pitfall: Undefined Expressions

QuestionWhat’s wrong with this? How to fix it?

public class ScreenPoint {

private /*@ spec_public @*/ int x, y;//@ public invariant 0 <= x && 0 <= y;

//@ requires 0 <= cs[0] && 0 <= cs[1];//@ assignable x, y;//@ ensures x == cs[0] && y == cs[1];public ScreenPoint(int[] cs){ x = cs[0]; y = cs[1]; }

Gary T. Leavens (UCF) JML Tutorial Fall 2007 75 / 225

Page 80: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Tips/Pitfalls

Protective Version of ScreenPoint

public class ScreenPoint2 {

private /*@ spec_public @*/ int x, y;//@ public invariant 0 <= x && 0 <= y;

//@ requires 2 <= cs.length;//@ requires 0 <= cs[0] && 0 <= cs[1];//@ assignable x, y;//@ ensures x == cs[0] && y == cs[1];public ScreenPoint2(int[] cs){ x = cs[0]; y = cs[1]; }

Gary T. Leavens (UCF) JML Tutorial Fall 2007 76 / 225

Page 81: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Tips/Pitfalls

Writing Protective Specifications

Clauses evaluated left to right.Short-circuit operators can prevent evaluation.

G && P, G || P

G ==> P, G <== P

Use multiple clauses (equivalent to &&).

Gary T. Leavens (UCF) JML Tutorial Fall 2007 77 / 225

Page 82: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Spec Cases

Multiple Specification Cases

For different preconditions.May overlap.Used to specify exceptions.Used with specification inheritance.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 78 / 225

Page 83: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Spec Cases

Multiple Specification Cases

private /*@ spec_public @*/ int age;

/*@ requires 0 <= a && a <= 150;@ assignable age;@ ensures age == a;@ also@ requires a < 0;@ assignable \nothing;@ ensures age == \old(age);@*/

public void setAge(int a){ if (0 <= a && a <= 150) { age = a; } }

Gary T. Leavens (UCF) JML Tutorial Fall 2007 79 / 225

Page 84: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Spec Cases

Semantics of Multiple Cases

pre

post && post

pre && pre

pre

post

Gary T. Leavens (UCF) JML Tutorial Fall 2007 80 / 225

Page 85: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Spec Cases

Semantics of Multiple Cases

pre

post && post

pre && pre

pre

post

Gary T. Leavens (UCF) JML Tutorial Fall 2007 81 / 225

Page 86: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Spec Cases

Meaning of ’also’

requires 0 <= a && a <= 150;assignable age;ensures age == a;

alsorequires a < 0;assignable \nothingensures age == \old(age);

Gary T. Leavens (UCF) JML Tutorial Fall 2007 82 / 225

Page 87: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Spec Cases

Meaning of ‘also’

requires 0 <= a && a <= 150;assignable age;ensures age == a;

alsorequires a < 0;assignable age;ensures age == \old(age)

&& \only_assigned(\nothing);

Gary T. Leavens (UCF) JML Tutorial Fall 2007 83 / 225

Page 88: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Spec Cases

Meaning of ‘also’

requires (0 <= a && a <= 150) || a < 0;assignable age;ensures \old(0 <= a && a <= 150)

==> (age == a);ensures \old(a < 0)

==> (age == \old(age)&& \only_assigned(\nothing));

Gary T. Leavens (UCF) JML Tutorial Fall 2007 84 / 225

Page 89: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Spec Cases

Notation for Method Specification in T

public interface T {//@ requires pre;//@ ensures post;void m();

}

T � (pre,post)

Gary T. Leavens (UCF) JML Tutorial Fall 2007 85 / 225

Page 90: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Spec Cases

Join of Specification Cases, �S

DefinitionIf T � � (pre�,post

�), T � (pre,post), S ≤ T �, S ≤ T , then

(pre�,post

�) �S (pre,post) = (p,q)

where p = pre� || pre

and q = (\old(pre�) ==> post�) && (\old(pre) ==> post)

and S � (p,q).

Gary T. Leavens (UCF) JML Tutorial Fall 2007 86 / 225

Page 91: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Spec Cases

Client’s View of Multiple Cases

Client can verify by:Picking one spec case.

Assert precondition.Assume frame and postcondition.

Picking several cases.Compute their join.Assert joined precondition.Assume frame and joined postcondition.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 87 / 225

Page 92: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Spec Cases

Implementor’s View of Multiple Cases

Verify each case, orVerify their join.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 88 / 225

Page 93: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Spec Cases

Background for Specifying Exceptions

Java Exceptions:Unchecked (RuntimeException):

Client avoidable (use preconditions).Implementation faults (fix them).

Checked:Clients can’t avoid (efficiently).Condition simultaneous with use (permissions).Alternative returns (not found, EOF, . . .).

Gary T. Leavens (UCF) JML Tutorial Fall 2007 89 / 225

Page 94: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Spec Cases

When to Specify Exceptions

Unchecked exceptions:Don’t specify them.Just specify the normal cases.

Checked exceptionsSpecify them.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 90 / 225

Page 95: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Spec Cases

JML Features for Exception Specification

exceptional_behavior spec cases.signals_only clause.signals clause.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 91 / 225

Page 96: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Spec Cases

Exceptional Specification Example

public class Actor {

private /*@ spec_public @*/ int age;private /*@ spec_public @*/ int fate;

//@ public invariant 0 <= age && age <= fate;

Gary T. Leavens (UCF) JML Tutorial Fall 2007 92 / 225

Page 97: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Spec Cases

Exceptional Specification Example

/*@ public normal_behavior@ requires age < fate - 1;@ assignable age;@ ensures age == \old(age+1);@ also@ public exceptional_behavior@ requires age == fate - 1;@ assignable age;@ signals_only DeathException;@ signals (DeathException e)@ age == fate;@*/

public void older()throws DeathException

Gary T. Leavens (UCF) JML Tutorial Fall 2007 93 / 225

Page 98: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Spec Cases

Underspecification of Exceptions

QuestionHow would you specify this,

ignoring the exceptional behavior?

Gary T. Leavens (UCF) JML Tutorial Fall 2007 94 / 225

Page 99: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Spec Cases

Underspecification of Exceptions

/*@ public normal_behavior@ requires age < fate - 1;@ assignable age;@ ensures age == \old(age+1);@*/

public void older()throws DeathException

Gary T. Leavens (UCF) JML Tutorial Fall 2007 95 / 225

Page 100: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Spec Cases

Heavyweight Behavior Spec CasesPresumed Complete

normal_behavior, exceptional_behaviorSay how method can terminate.Maximally permissive/useless defaults.

behaviorDoesn’t specify normal/exceptional.Can use to underspecify normal/exceptional.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 96 / 225

Page 101: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Spec Cases

Lightweight Specification CasesPresumed Incomplete

Don’t use a behavior keyword.Most defaults technically \not_specified.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 97 / 225

Page 102: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Spec Cases

Semantics of signals_only

signals_only T1, . . . ,Tn;Exception thrown to caller must subtype one T1, . . . ,Tn.

Can’t use in normal_behaviorAt most one signals_only clause per spec case.Default for omitted clause

if method declares throws T1, . . . ,Tn,then signals_only T1, . . . ,Tn;.else signals_only \nothing;.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 98 / 225

Page 103: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Spec Cases

Signals Clause

Specifies, when exception thrown,State of exception object.Other state.

Not very useful.Tip: normally omit.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 99 / 225

Page 104: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Spec Cases

Pitfalls in Exceptional Specification

Can’t return normally and throw exception.So preconditions shouldn’t overlap.

QuestionWhat happens if they overlap?

Gary T. Leavens (UCF) JML Tutorial Fall 2007 100 / 225

Page 105: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Spec Cases

Exercise Using Multiple Cases

ExerciseSpecify the 3x + 1 or “hailstone” function, h, such that:

h(n) =

�(3× n + 1)/2, if n > 0 is odd

n/2, if n > 0 is even

and h is undefined on negative numbers.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 101 / 225

Page 106: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Spec Cases

My Answer

/*@ requires 0 < n;@ requires n % 2 != 0;@ ensures \result == (3*n+1)/2;@ also@ requires 0 < n;@ requires n % 2 == 0;@ ensures \result == n/2;@*/

public static /*@ pure @*/ int h(int n)

Gary T. Leavens (UCF) JML Tutorial Fall 2007 102 / 225

Page 107: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

R/W Spec Cases

My Answer, Using Nesting

/*@ requires 0 < n;@ {|@ requires n % 2 != 0;@ ensures \result == (3*n+1)/2;@ also@ requires n % 2 == 0;@ ensures \result == n/2;@ |} @*/

public static /*@ pure @*/ int h(int n)

Gary T. Leavens (UCF) JML Tutorial Fall 2007 103 / 225

Page 108: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Abstr.

Outline

1 JML Overview

2 Reading and Writing JML Specifications

3 Abstraction in Specification

4 Subtyping and Specification Inheritance

5 ESC/Java2

6 Conclusions

Gary T. Leavens (UCF) JML Tutorial Fall 2007 104 / 225

Page 109: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Abstr. Motivation

Abstraction in Specification

Why use abstraction?Ease maintenance by information hiding.Readability:

Avoid quantifiers.Repeated expressions.

Specify when no fields availableJava interfaces.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 105 / 225

Page 110: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Abstr. Motivation

Features Supporting Abstraction

model fields and represents clauses.pure model methods.pure methods.protected invariants, spec cases, etc.private invariants, spec cases, etc.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 106 / 225

Page 111: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Abstr. Views

Kinds of Clients

class C

class D extends C

class E extends C

class A

class B

class F

public clients

protectedclients

packageclients

private client

Gary T. Leavens (UCF) JML Tutorial Fall 2007 107 / 225

Page 112: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Abstr. Views

Views of Specifications

Declarations in C

Modifier visible to code in:Private C

(None = package) C’s packageProtected C’s subclasses,

C’s packagePublic all

Gary T. Leavens (UCF) JML Tutorial Fall 2007 108 / 225

Page 113: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Abstr. Views

Privacy and Modular Soundness

Specifications visible to module M:Can only mention members visible to M.

For maintenance.For understandability.

Must contain all of M ’s obligations.For sound modular verification.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 109 / 225

Page 114: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Abstr. Views

Privacy and Modular Soundness

QuestionCan private fields be mentioned in public specifications?

QuestionCan non-trivial preconditions be hidden from clients?

QuestionWhat should a client assume is the precondition of

a method with no visible specification cases?

QuestionIf invariant inv depends on field f ,

can inv be less visible than f?

Gary T. Leavens (UCF) JML Tutorial Fall 2007 110 / 225

Page 115: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Abstr. Views

Privacy and Modular Soundness

QuestionCan private fields be mentioned in public specifications?

QuestionCan non-trivial preconditions be hidden from clients?

QuestionWhat should a client assume is the precondition of

a method with no visible specification cases?

QuestionIf invariant inv depends on field f ,

can inv be less visible than f?

Gary T. Leavens (UCF) JML Tutorial Fall 2007 110 / 225

Page 116: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Abstr. Views

Privacy and Modular Soundness

QuestionCan private fields be mentioned in public specifications?

QuestionCan non-trivial preconditions be hidden from clients?

QuestionWhat should a client assume is the precondition of

a method with no visible specification cases?

QuestionIf invariant inv depends on field f ,

can inv be less visible than f?

Gary T. Leavens (UCF) JML Tutorial Fall 2007 110 / 225

Page 117: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Abstr. Views

Privacy and Modular Soundness

QuestionCan private fields be mentioned in public specifications?

QuestionCan non-trivial preconditions be hidden from clients?

QuestionWhat should a client assume is the precondition of

a method with no visible specification cases?

QuestionIf invariant inv depends on field f ,

can inv be less visible than f?

Gary T. Leavens (UCF) JML Tutorial Fall 2007 110 / 225

Page 118: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Abstr. Model

Model Fields for Data Abstraction

Model fields:Just for specification.Abstraction of Java fields.Value from represents.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 111 / 225

Page 119: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Abstr. Model

Model Field in an Interface

public interface Gendered {//@ public model instance String gender;

//@ ensures \result == gender.equals("female");public /*@ pure @*/ boolean isFemale();

}

Gary T. Leavens (UCF) JML Tutorial Fall 2007 112 / 225

Page 120: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Abstr. Model

Represents Clauses

public class Animal implements Gendered {protected boolean gen; //@ in gender;/*@ protected represents@ gender <- (gen ? "female" : "male");@*/

public /*@ pure @*/ boolean isFemale() {return gen;

}

Gary T. Leavens (UCF) JML Tutorial Fall 2007 113 / 225

Page 121: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Abstr. Model

Correctness with Model Fields

gender: “female” true

gen: true true

represents

isFemale’scode

isFemale’sspecification

==

Gary T. Leavens (UCF) JML Tutorial Fall 2007 114 / 225

Page 122: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Abstr. Model

Example of Using Model Fields

QuestionIs Animal’s constructor (below) correct?

protected boolean gen; //@ in gender;/*@ protected represents@ gender <- (gen ? "female" : "male");@*/

/*@ requires g.equals("female")@ || g.equals("male");@ assignable gender;@ ensures gender.equals(g); @*/

public Animal(final String g){ gen = g.equals("female"); }

Gary T. Leavens (UCF) JML Tutorial Fall 2007 115 / 225

Page 123: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Abstr. Model

Example of Using Model Fields

Yes!

protected boolean gen; //@ in gender;/*@ protected represents@ gender <- (gen ? "female" : "male");@*/

/*@ requires g.equals("female")@ || g.equals("male");@ assignable gender;@ ensures gender.equals(g); @*/

public Animal(final String g){ gen = g.equals("female"); }

Gary T. Leavens (UCF) JML Tutorial Fall 2007 116 / 225

Page 124: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Abstr. Model

Semantics of spec_public

protected /*@ spec_public @*/ int age = 0;

shorthand for:

//@ public model int age;//@ protected int _age = 0; //@ in age;//@ protected represents age <- _age;

and rewriting Java code to use _age.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 117 / 225

Page 125: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Abstr. Model

Data Groups for Assignable Clauses

Each field is a data group.Membership by in clauses.Model field’s group contains fields used in its represents.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 118 / 225

Page 126: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Abstr. Model

Data Groups and Assignable Picture

gender

genin

another

g1in

g2in

in

...

assignablegender

Gary T. Leavens (UCF) JML Tutorial Fall 2007 119 / 225

Page 127: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Abstr. Model

The Semantics of Assignable

assignable x , y;means:

method only assigns to (concrete) members of DG(x) ∪ DG(y).

QuestionWhat does assignable gender; mean?

Gary T. Leavens (UCF) JML Tutorial Fall 2007 120 / 225

Page 128: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Abstr. Model

In Clauses for Declarations

private T x; //@ in g;

Immediately follows declarationSame visibility as declaration.

JML ensures that:If f ∈ DG(g), then g visible where f is.If f and g visible, can tell if f ∈ DG(g).

Gary T. Leavens (UCF) JML Tutorial Fall 2007 121 / 225

Page 129: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Abstr. Model

Data Group Visibility and Reasoning

QuestionCan assigning to age change gender?

Gary T. Leavens (UCF) JML Tutorial Fall 2007 122 / 225

Page 130: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Abstr. Advanced

Type-Level Specification Features

fields, in, representsinvariantinitiallyconstraint

Gary T. Leavens (UCF) JML Tutorial Fall 2007 123 / 225

Page 131: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Abstr. Advanced

Initially Clauses

Hold in constructor post-states.Basis for datatype induction.

import java.util.*;public class Patient extends Person {//@ public invariant 0 <= age && age <= 150;

protected /*@ spec_public rep @*/ List log;//@ public initially log.size() == 0;

Gary T. Leavens (UCF) JML Tutorial Fall 2007 124 / 225

Page 132: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Abstr. Advanced

History Constraints

Relate pre-states and post-states.Justifies inductive step in datatype induction.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 125 / 225

Page 133: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Abstr. Advanced

History Constraints

import java.util.*;public class Patient extends Person {

protected /*@ spec_public rep @*/ List log;

/*@ public constraint@ \old(log.size()) <= log.size();@ public constraint (\forall int i;@ 0 <= i && i < \old(log.size());@ log.get(i).equals(\old(log.get(i))));@*/

Gary T. Leavens (UCF) JML Tutorial Fall 2007 126 / 225

Page 134: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Abstr. Other

Helper Methods and Constructors

A helper method or constructor is:privateExempt from invariants and history constraints.

Cannot assume them.Need not establish them.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 127 / 225

Page 135: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Abstr. Other

Ghost fields and Local Variables

Specification-only data.No represents clause.Value from initialization and set statements.Locals useful for loop invariants, termination, etc.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 128 / 225

Page 136: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Abstr. Other

Owner is a Ghost Field

Declaration:

public class Object {//@ public ghost Object owner = null;/* ... */

}

Assignment:

//@ set a.owner = this;

Gary T. Leavens (UCF) JML Tutorial Fall 2007 129 / 225

Page 137: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes

Outline

1 JML Overview

2 Reading and Writing JML Specifications

3 Abstraction in Specification

4 Subtyping and Specification Inheritance

5 ESC/Java2

6 Conclusions

Gary T. Leavens (UCF) JML Tutorial Fall 2007 130 / 225

Page 138: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes

Problems

Duplication of specifications in subtypes.Modular verification when use:

Subtyping, andDynamic dispatch.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 131 / 225

Page 139: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Spec. Inh.

Specification Inheritance Approach

Inherit:Instance fields.Type specifications.Instance methods.Method specification cases.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 132 / 225

Page 140: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Spec. Inh.

Multiple Inheritance Example

NormalSetAge

Animal

ExceptionalSetAge

AgeGendered

Gary T. Leavens (UCF) JML Tutorial Fall 2007 133 / 225

Page 141: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Spec. Inh.

Age and NormalSetAge

public interface Age {//@ model instance int age;

}

public interface NormalSetAgeimplements Age {

/*@ requires 0 <= a && a <= 150;@ assignable age;@ ensures age == a; @*/

public void setAge(int a);}

Gary T. Leavens (UCF) JML Tutorial Fall 2007 134 / 225

Page 142: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Spec. Inh.

ExceptionalSetAge

public interface ExceptionalSetAgeimplements Age {

/*@ requires a < 0;@ assignable \nothing;@ ensures age == \old(age); @*/

public void setAge(int a);}

Gary T. Leavens (UCF) JML Tutorial Fall 2007 135 / 225

Page 143: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Spec. Inh.

What About Animal’s setAge method?

It’s both.Should obey both specifications.

NormalSetAge

Animal

ExceptionalSetAge

Gary T. Leavens (UCF) JML Tutorial Fall 2007 136 / 225

Page 144: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Spec. Inh.

Single Inheritance also

QuestionWhat is the specification of Animal’s isFemale method?

public interface Gendered {//@ ensures \result == gender.equals("female");public /*@ pure @*/ boolean isFemale();

}

public class Animal implements Gendered {

public /*@ pure @*/ boolean isFemale() {return gen;

}}

Gary T. Leavens (UCF) JML Tutorial Fall 2007 137 / 225

Page 145: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Spec. Inh.

Adding to Specification in SubtypeUse of ‘also’ Mandatory

import java.util.*;public class Patient extends Person {protected /*@ spec_public @*/

boolean ageDiscount = false; //@ in age;

/*@ also@ requires (0 <= a && a <= 150) || a < 0;@ ensures 65 <= age ==> ageDiscount; @*/

public void setAge(final int a) {super.setAge(a);if (65 <= age) { ageDiscount = true; }

}

Gary T. Leavens (UCF) JML Tutorial Fall 2007 138 / 225

Page 146: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Spec. Inh.

Method Specification Inheritance

QuestionWhat is the extended specification of Patient’s setAge method?

Gary T. Leavens (UCF) JML Tutorial Fall 2007 139 / 225

Page 147: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Spec. Inh.

Extended Specification of SetAge

/*@ requires 0 <= a && a <= 150;@ assignable age;@ ensures age == a;@ also@ requires a < 0;@ assignable age;@ ensures age == \old(age); @*/

/*@ also@ requires (0 <= a && a <= 150) || a < 0;@ ensures 65 <= age ==> ageDiscount; @*/

Gary T. Leavens (UCF) JML Tutorial Fall 2007 140 / 225

Page 148: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Spec. Inh.

Avoiding Duplication of Preconditions

/*@ requires 0 <= a && a <= 150;@ assignable age;@ ensures age == a;@ also@ requires a < 0;@ assignable age;@ ensures age == \old(age); @*/

/*@ also@ requires \same;@ ensures 65 <= age ==> ageDiscount; @*/

Gary T. Leavens (UCF) JML Tutorial Fall 2007 141 / 225

Page 149: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Spec. Inh.

Method Specification Inheritance

QuestionIn JML, can you override a method

and make its precondition more restrictive?

Gary T. Leavens (UCF) JML Tutorial Fall 2007 142 / 225

Page 150: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Spec. Inh.

No, You Can’t Strengthen PreconditionsCan Point Out Special Cases

public class Person extends Animal {

/*@ also@ requires 65 <= age;@ assignable age, ageDiscount;@ ensures ageDiscount; @*/

public void setAge(final int a);

Gary T. Leavens (UCF) JML Tutorial Fall 2007 143 / 225

Page 151: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Spec. Inh.

Inheritance of Type Specifications

Obeyed by all subtypes:Invariants.Initially Clauses.History Constraints.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 144 / 225

Page 152: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Spec. Inh.

Invariants Obeyed by SubtypesNot a Syntactic Sugar

Animal

PatientTortoiseinvariant 0 <= age

&& age <= 150;

FemalePatient

Gary T. Leavens (UCF) JML Tutorial Fall 2007 145 / 225

Page 153: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Spec. Inh.

Notation for Describing InheritanceT ’s Added Specification

Declared in T (without inheritance):

added_invT invariant

added_hcT history constraint

added_initT initially predicate

added_specTm m’s specification

Other Notations:supers(T ) = {U | T ≤ U}

methods(T ) = {m | m declared in T ∈ T }

Gary T. Leavens (UCF) JML Tutorial Fall 2007 146 / 225

Page 154: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Spec. Inh.

Specification Inheritance’s MeaningExtended Specification of T

Methods: for all m ∈ methods(supers(T ))

ext_specT

m = �T{added_specU

m | U ∈ supers(T )}

Invariant: ext_invT =�{added_inv

U | U ∈ supers(T )}Constraint: ext_hc

T =�{added_hc

U | U ∈ supers(T )}Initially: ext_init

T =�{added_init

U | U ∈ supers(T )}

Gary T. Leavens (UCF) JML Tutorial Fall 2007 147 / 225

Page 155: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Spec. Inh.

Invariant Inheritance

public class FemalePatient extends Patient {//@ public invariant gender.equals("female");

Extended Invariant:

added_invGendered && added_invAnimal

&& added_invPatient

&& added_invFemalePatient

Gary T. Leavens (UCF) JML Tutorial Fall 2007 148 / 225

Page 156: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Spec. Inh.

Invariant Inheritance

public class FemalePatient extends Patient {//@ public invariant gender.equals("female");

Extended Invariant:

true && true&& 0 <= age && age <= 150

&& (\forall int i;0 <= i && i < log.size();log.get(i) instanceof rep String)

&& gender.equals("female")

Gary T. Leavens (UCF) JML Tutorial Fall 2007 149 / 225

Page 157: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Modularity

Modular Verification Problem

Reasoning about dynamic dispatch:

Gendered e = (Gendered)elems.next();if (e.isFemale()) {//@ assert e.gender.equals("female");r.add(e);

}

How to verify?Avoiding case analysis for all subtypes.Reverification when add new subtypes.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 150 / 225

Page 158: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Modularity

Supertype Abstraction

Use static type’s specification.Example:

Gendered e = (Gendered)elems.next();if (e.isFemale()) {//@ assert e.gender.equals("female");r.add(e);

}

Static type of e is Gendered.Use specification from Gendered.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 151 / 225

Page 159: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Modularity

Static Type’s Specification

public interface Gendered {//@ public model instance String gender;

//@ ensures \result == gender.equals("female");public /*@ pure @*/ boolean isFemale();

}

Gary T. Leavens (UCF) JML Tutorial Fall 2007 152 / 225

Page 160: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Modularity

Supertype Abstraction in General

Use static type’s specifications to reason about:Method calls.Invariants.History constraints.Initially predicates.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 153 / 225

Page 161: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Modularity

Supertype Abstraction Summary

T o = createNewObject();//@ assume o.ext_initT && o.ext_invT;

/* ... */

//@ assert o.ext_preTm;

o.m();//@ assume o.ext_postT

m;//@ assume o.ext_invT

m && o.ext_hcT;

Gary T. Leavens (UCF) JML Tutorial Fall 2007 154 / 225

Page 162: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Modularity

Reasoning Without Supertype Abstraction

Case analysis:Case for each potential dynamic type.Can exploit dynamic type’s specifications.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 155 / 225

Page 163: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Modularity

Case Analysis + Supertype Abstraction

Use instanceof for case analysis.Downcast, use supertype abstraction.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 156 / 225

Page 164: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Modularity

Case Analysis + Supertype Abstraction

/*@ requires p instanceof Doctor@ || p instanceof Nurse; @*/

public boolean isHead(final Staff p) {if (p instanceof Doctor) {Doctor doc = (Doctor) p;return doc.getTitle().startsWith("Head");

} else {Nurse nrs = (Nurse) p;return nrs.isChief();

}}

Gary T. Leavens (UCF) JML Tutorial Fall 2007 157 / 225

Page 165: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Validity

Supertype Abstraction’s Soundness

Valid if:Invariants etc. hold as needed (in pre-states), andEach subtype is a behavioral subtype.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 158 / 225

Page 166: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Validity

Assumption about Invariants

assert Pre;

Gary T. Leavens (UCF) JML Tutorial Fall 2007 159 / 225

Page 167: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Validity

Assumption about Invariants

assert Pre;

assume Pre && Inv;

assert Post && Inv;

assume Post;

Gary T. Leavens (UCF) JML Tutorial Fall 2007 160 / 225

Page 168: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Validity

Invariant Methodology

Potential Problems:Representation exposureReentrance

Relevant invariant semantics:Ownership type systemRe-establish invariant when call

Guarantees:Invariant holds at start of method

Gary T. Leavens (UCF) JML Tutorial Fall 2007 161 / 225

Page 169: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Validity

Open Problems

Blending with similar Spec# methodology.Extension to History Constraints and Initially Predicates.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 162 / 225

Page 170: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Validity

Validity of Supertype AbstractionClient’s View

T o = createNewObject();//@ assume o.ext_initT && o.ext_invT;

/* ... */

//@ assert o.ext_preTm;

o.m();//@ assume o.ext_postT

m;//@ assume o.ext_invT

m && o.ext_hcT;

Gary T. Leavens (UCF) JML Tutorial Fall 2007 163 / 225

Page 171: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Validity

What Happens at Runtime

Suppose we have

public T createNewObject() {return new T �();

}

Gary T. Leavens (UCF) JML Tutorial Fall 2007 164 / 225

Page 172: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Validity

Validity of Supertype AbstractionClient’s View

T o = createNewObject();//@ assume o.ext_initT && o.ext_invT;

/* ... */

//@ assert o.ext_preTm;

o.m();//@ assume o.ext_postT

m;//@ assume o.ext_invT

m && o.ext_hcT;

Gary T. Leavens (UCF) JML Tutorial Fall 2007 165 / 225

Page 173: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Validity

Validity of Supertype AbstractionImplementation (Subtype) View

T o = createNewObject(); // new T �()//@ assert o.ext_initT � && o.ext_invT �;

/* ... */

//@ assume o.ext_preT �m ;

o.m();//@ assert o.ext_postT �

m ;//@ assert o.ext_invT �

m && o.ext_hcT �;

Gary T. Leavens (UCF) JML Tutorial Fall 2007 166 / 225

Page 174: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Validity

Behavioral Subtyping

DefinitionSuppose T � ≤ T . ThenT � is a strong behavioral subtype of T if and only if:

for all instance methods m in T ,

ext_specT �m �T �

ext_specT

m

and whenever this has type T �:

ext_invT � ⇒ ext_inv

T ,

ext_hcT � ⇒ ext_hc

T , andext_init

T � ⇒ ext_initT .

Gary T. Leavens (UCF) JML Tutorial Fall 2007 167 / 225

Page 175: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Validity

Method Specification RefinementWith respect to T

Notation:(pre

�,post�) �T � (pre,post)

Means:Every correct implementation of (pre�,post

�) satisfies (pre,post).

Gary T. Leavens (UCF) JML Tutorial Fall 2007 168 / 225

Page 176: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Validity

Method Specification Refinement

pre

post

Gary T. Leavens (UCF) JML Tutorial Fall 2007 169 / 225

Page 177: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Validity

Method Specification Refinement

pre

post

pre

Gary T. Leavens (UCF) JML Tutorial Fall 2007 170 / 225

Page 178: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Validity

Method Specification Refinement

pre

post

pre

post

Gary T. Leavens (UCF) JML Tutorial Fall 2007 171 / 225

Page 179: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Validity

Proving Method Refinements

Theorem

Suppose T � � (pre�,post�) and T � (pre,post) specify m.

Then

(pre�,post

�) �T � (pre,post)

if and only if:

Spec(T �) � pre && (this instanceof T �)⇒ pre�

and

Spec(T �) � \old(pre && (this instanceof T �))⇒ (post

� ⇒ post).

Gary T. Leavens (UCF) JML Tutorial Fall 2007 172 / 225

Page 180: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Validity

also Makes Refinements

TheoremSuppose \old is monotonic. Suppose T � ≤ T , and T � � (pre�,post

�)and T � (pre,post) specify m.

Then

((pre�,post

�) �T � (pre,post)) �T � (pre,post).

Gary T. Leavens (UCF) JML Tutorial Fall 2007 173 / 225

Page 181: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Validity

Semantics of Multiple Cases

pre

post && post

pre && pre

pre

post

Gary T. Leavens (UCF) JML Tutorial Fall 2007 174 / 225

Page 182: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Validity

Semantics of Multiple Cases

pre

post && post

pre && pre

pre

post

Gary T. Leavens (UCF) JML Tutorial Fall 2007 175 / 225

Page 183: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Validity

Spec. Inheritance Forces Behavioral Subtyping

TheoremSuppose T � ≤ T . Then the extended specification of T � is a strong

behavioral subtype of the extended specification of T .

Gary T. Leavens (UCF) JML Tutorial Fall 2007 176 / 225

Page 184: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Validity

DiscussionBehavioral Subtyping and Spec. Inheritance

In JML:Every subtype inherits.Every subtype is a behavioral subtype.

Not all satisfiable.Supertype must allow refinement

Gary T. Leavens (UCF) JML Tutorial Fall 2007 177 / 225

Page 185: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Validity

Unsatisfiable Refinements

pre

post && post

pre && pre

pre

post

post

Gary T. Leavens (UCF) JML Tutorial Fall 2007 178 / 225

Page 186: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Validity

Unsatisfiable Refinements

pre

post && post

pre && pre

pre

post

post

Gary T. Leavens (UCF) JML Tutorial Fall 2007 179 / 225

Page 187: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Validity

Binary Method Specification

QuestionWhat is wrong specifying Gender’s equals method as follows?

/*@ also@ ensures obj instanceof Gendered@ ==> (\result@ == gender.equals(@ ((Gendered)obj).gender));@*/

public /*@ pure @*/boolean equals(/*@ nullable @*/ Object obj);

Gary T. Leavens (UCF) JML Tutorial Fall 2007 180 / 225

Page 188: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Validity

What’s Wrong With It?

Says that only gender matters.Refinements can’t use other attributes.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 181 / 225

Page 189: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Validity

Bad Equals Specification

(f,f) (m,m) (f,m) (m,f)

true

false

Gary T. Leavens (UCF) JML Tutorial Fall 2007 182 / 225

Page 190: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Validity

Bad Equals Specification

(f,f) (m,m) (f,m) (m,f)

true

false

Gary T. Leavens (UCF) JML Tutorial Fall 2007 183 / 225

Page 191: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Validity

Binary Method Specification

QuestionHow to fix it?

/*@ also@ ensures obj instanceof Gendered@ ==> (\result@ == gender.equals(@ ((Gendered)obj).gender));@*/

public /*@ pure @*/boolean equals(/*@ nullable @*/ Object obj);

Gary T. Leavens (UCF) JML Tutorial Fall 2007 184 / 225

Page 192: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Validity

Better, Refinable SpecificationUsing Underspecification

/*@ also@ ensures obj instanceof Gendered@ ==> (\result@ ==> gender.equals(@ ((Gendered)obj).gender));@*/

public /*@ pure @*/boolean equals(/*@ nullable @*/ Object obj);

Gary T. Leavens (UCF) JML Tutorial Fall 2007 185 / 225

Page 193: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Validity

Better, Refinable SpecificationUsing Underspecification

(f,f) (m,m) (f,m) (m,f)

true

false

Allowedresult

Gary T. Leavens (UCF) JML Tutorial Fall 2007 186 / 225

Page 194: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Subtypes Validity

Conclusions About Subtyping

Supertype abstraction allows modular reasoning.Supertype abstraction is valid if:

methodology enforced, andsubtypes are behavioral subtypes.

JML’s also makes refinements.Specification inheritance in JML forces behavioral subtyping.Supertype abstraction automatically valid in JML.Supertype specifications must be permissive.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 187 / 225

Page 195: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

ESC

Outline

1 JML Overview

2 Reading and Writing JML Specifications

3 Abstraction in Specification

4 Subtyping and Specification Inheritance

5 ESC/Java2

6 Conclusions

Gary T. Leavens (UCF) JML Tutorial Fall 2007 188 / 225

Page 196: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

ESC

What Makes ESC/Java Unique?

Encapsulates automatic theorem prover (Simplify).Aims to help programmers.

Not sound.Not complete.

Rigorously modular.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 189 / 225

Page 197: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

ESC

What Makes ESC/Java2 Different?

Nearly full JML syntax parsed.Most JML semantics checked.Integrates many more static checkers.Multiple logics and provers.Eclipse integration.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 190 / 225

Page 198: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

ESC

Stengths of Extended Static Checking

Push-button automation.Tool robustness.User feedback with no user specifications.Integration with popular IDE (Eclipse).Popularity in FM community.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 191 / 225

Page 199: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

ESC

ESC/Java’s Main Weaknesses

False positives and false negatives.Tool and documentation problems.Need for fairly complete specifications.Feedback hard for naive users.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 192 / 225

Page 200: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

ESC Warnings

Kinds of Messages Produced by ESC/Java2

Cautions or errors, from:Parsing.Type checking.

Warnings, from:Static checking, with Simplify (or others).

Gary T. Leavens (UCF) JML Tutorial Fall 2007 193 / 225

Page 201: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

ESC Warnings

Where to Put Specifications

Put specifications in:A .java file, orA specification file.

Suffix .refines-java, .refines-spec, or .refines-jml.No method bodies.No field initializers.Foo.refines-java starts with:

//@ refine "Foo.java";

In the CLASSPATH.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 194 / 225

Page 202: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

ESC Warnings

ESC/Java Checks Modularly

Example

public abstract class ModularityDemo {

protected byte[] b;

public ModularityDemo(){ b = new byte[20]; }

public void m(){ b[0] = 2; }

}

Gary T. Leavens (UCF) JML Tutorial Fall 2007 195 / 225

Page 203: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

ESC Warnings

Modularity Summary

Properties you want to assume aboutFields: use a modifier (non_null), invariant, or

constraint.Method arguments: use a modifier (non_null), or requires.

Method results: use a modifier (pure, non_null),assignable, or ensures.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 196 / 225

Page 204: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

ESC Warnings

When to use assumeAssumptions say “fix me”

Not sure if field or method property.You don’t want to specify more about:

Domain knowledge.Other libraries.

The prover isn’t smart enough.

Best to avoid assume.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 197 / 225

Page 205: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

ESC Warnings

Need for Assignable Clauses

public void move(int i, int j) {moveRight(i);//@ assert x == \old(x+i);moveUp(j);//@ assert y == \old(y+j);//@ assert x == \old(x+i); // ??

}

Gary T. Leavens (UCF) JML Tutorial Fall 2007 198 / 225

Page 206: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

ESC Warnings

Assignable Clauses Localize Reasoning

//@ requires 0 <= j;//@ requires y+j < Integer.MAX_VALUE;//@ assignable y;//@ ensures y == \old(y+j);public void moveUp(int j)

Gary T. Leavens (UCF) JML Tutorial Fall 2007 199 / 225

Page 207: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

ESC Warnings

Kinds of Warnings

Exceptions:Runtime: Cast, Null, NegSize, IndexTooBig, IndexNegative,

ZeroDiv, ArrayStore.Undeclared: Exception.

Specification violations:Method: Precondition, Postcondition, Modifies.

Non-null: NonNull, NonNullInitLoop: LoopInv, DecreasesBound.Flow: Assert, Reachable.

Class: Invariant, Constraint, Initially.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 200 / 225

Page 208: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

ESC Warnings

Exception Warning Example

Example

public class Ex {public void m(Object o) {if (!(o instanceof String)) {throw new ClassCastException();

}}

}

Gary T. Leavens (UCF) JML Tutorial Fall 2007 201 / 225

Page 209: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

ESC Warnings

Exception Warning Example

Output:

Ex: m(java.lang.Object) ...-----------------------------------Ex.java:6: Warning:Possible unexpected exception (Exception)}^

Execution trace information:Executed then branch in ..., line 3, col 32.Executed throw in "Ex.java", line 4, col 6.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 202 / 225

Page 210: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

ESC Warnings

Turning Off Warnings

Preferred:Declare (e.g., runtime exceptions).Specify (e.g, requires).

Alternatively:Use nowarn.

//@ nowarn Exception;

Use command line options (-nowarn Exception).

Gary T. Leavens (UCF) JML Tutorial Fall 2007 203 / 225

Page 211: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

ESC Warnings

Other Kinds of WarningsNot Covered Here

Multithreading.Ownership.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 204 / 225

Page 212: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

ESC Info.

Counterexample Information

Violations can give counterexample context.Explain how warning could happen.State what prover “thinks” could be true.Can be hard to read.More details with -counterexample option.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 205 / 225

Page 213: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

ESC Info.

Example for Reading Counterexamples

Example

public class Alias {private /*@ spec_public non_null */ int[] a

= new int[10];private /*@ spec_public @*/ boolean noneg

= true;

/*@ public invariant noneg ==>@ (\forall int i;@ 0<=i && i < a.length;@ a[i] >= 0);@*/

Gary T. Leavens (UCF) JML Tutorial Fall 2007 206 / 225

Page 214: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

ESC Info.

Example for Reading Counterexamples

Example

//@ requires 0<=i && i < a.length;public void insert(int i, int v) {a[i] = v;if (v < 0) { noneg = false; }

}

Gary T. Leavens (UCF) JML Tutorial Fall 2007 207 / 225

Page 215: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

ESC Info.

Reading ESC/Java2’s Feedback

Alias.java:17: Warning:Possible violation of invariant (Invariant)

Associated declaration is ..., line 7, col 13:/*@ public invariant noneg ==> ...

^Possibly relevant .. from counterexample context:(vAllocTime(brokenObj) < alloc) ...

Execution trace information:Executed then branch in ..., line 16, col 15.

Counterexample context:(intFirst <= v:14.32) ...

Gary T. Leavens (UCF) JML Tutorial Fall 2007 208 / 225

Page 216: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

ESC Info.

Reading Relevant Items

Item MeaningbrokenObj object violating invarianttypeof(brokenObj) its typebrokenObj.(noneg:4.38) its nonneg fieldbrokenObj.(a@pre:2.44) its a fieldtmp0!a:15.4 another object

Gary T. Leavens (UCF) JML Tutorial Fall 2007 209 / 225

Page 217: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

ESC Info.

State Described By Relevant Items

QuestionWhat does this mean?

typeof(brokenObj) <: T_AliasbrokenObj.(noneg:4.38) == @truebrokenObj.(noneg:4.38<1>) == @truebrokenObj.(a@pre:2.44) == tmp0!a:15.4brokenObj != this

Gary T. Leavens (UCF) JML Tutorial Fall 2007 210 / 225

Page 218: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

ESC Info.

Reading Counterexample Context

Look at:thisbrokenObj

brokenObj.(noneg:4.38<1>) == @truethis.(noneg:4.38<1>) == bool$falsebrokenObj.(a@pre:2.44) == tmp0!a:15.4this.(a@pre:2.44) == tmp0!a:15.4...this != nullbrokenObj != thisbrokenObj != null

Gary T. Leavens (UCF) JML Tutorial Fall 2007 211 / 225

Page 219: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

ESC Info.

Reading Counterexample Context

QuestionWhat does the context tell you?

brokenObj.(noneg:4.38<1>) == @truethis.(noneg:4.38<1>) == bool$falsebrokenObj.(a@pre:2.44) == tmp0!a:15.4this.(a@pre:2.44) == tmp0!a:15.4...this != nullbrokenObj != thisbrokenObj != null

Gary T. Leavens (UCF) JML Tutorial Fall 2007 212 / 225

Page 220: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

ESC Info.

It Tells About Aliasing

this

brokenObj

a

nonneg

a

nonneg true

true

tmp0

Gary T. Leavens (UCF) JML Tutorial Fall 2007 213 / 225

Page 221: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

ESC Provers

ESC/Java as a VC Generator

ESC/Java2

JML-annotated Java

Verification Conditions

Prover Counter-examples

Warnings,Traces

ESC/Java2

Gary T. Leavens (UCF) JML Tutorial Fall 2007 214 / 225

Page 222: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

ESC Provers

ESC/Java2 and Provers

Current release supports:Fx7 prover.Coq.

VC formats:Simplify.SMT-LIB.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 215 / 225

Page 223: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

ESC Provers

Other Efforts

Specification-aware dead code detector.Race Condition Checker.Houdini (creates specifications).

Gary T. Leavens (UCF) JML Tutorial Fall 2007 216 / 225

Page 224: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Concl.

Outline

1 JML Overview

2 Reading and Writing JML Specifications

3 Abstraction in Specification

4 Subtyping and Specification Inheritance

5 ESC/Java2

6 Conclusions

Gary T. Leavens (UCF) JML Tutorial Fall 2007 217 / 225

Page 225: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Concl.

Advantages of Working with JML

Reuse language design.Ease communication with researchers.Share customers.

Join us!

Gary T. Leavens (UCF) JML Tutorial Fall 2007 218 / 225

Page 226: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Concl.

Opportunities in Working with JMLOr: What Needs Work

Tool development, maintenance.Extensible tool architecture.Unification of tools.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 219 / 225

Page 227: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Concl.

Current Research on JML

Semantics and Design Work:Ownership and invariants (Peter Müller, Spec# folks)Multithreading (KSU group, INRIA).Frameworks, callbacks (Steve Shaner, David Naumann, me)

Tool WorkMobius effort (Joe Kiniry and others)Annotation Support (Jass group, Kristina Boysen)Testing (Mark Utting, Yoonsik Cheon, . . .).

Gary T. Leavens (UCF) JML Tutorial Fall 2007 220 / 225

Page 228: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Concl.

Future Work on JML

Tools.Java 1.5 support.Eclipse support.Documentation.Concurrency support.Semantic details.Theorem proving tie-ins, Static analysis tie-ins.Inference of specifications.Tools that give more benefits.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 221 / 225

Page 229: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Concl.

What Are You Interested In?

QuestionWhat kinds of research or collaborations interest you?

Gary T. Leavens (UCF) JML Tutorial Fall 2007 222 / 225

Page 230: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Concl.

Acknowledgments

Thanks to Joseph Kiniry, Erik Poll, David Cok, David Naumann,Yoonsik Cheon, Curtis Clifton, Clyde Ruby, Patrice Chalin, PeterMüller, Werner Dietl, Arnd Poetzsch-Heffter, Rustan Leino, Al Baker,Don Pigozzi, and the rest of the JML community.Join us at. . .

jmlspecs.org

Gary T. Leavens (UCF) JML Tutorial Fall 2007 223 / 225

Page 231: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Modular Reasoning

Prove code using specifications of other modules.Sound, if each module satisfies specification.

Scales better than whole-program reasoning.

Gary T. Leavens (UCF) JML Tutorial Fall 2007 224 / 225

Page 232: A JML Tutorialhomepage.cs.uiowa.edu/.../Spring11/Notes/jml-tutorial.pdf · 2016. 8. 22. · A JML Tutorial Modular Specification and Verification of Functional Behavior for Java

Supertype Abstraction for Initially

Given:

public class Patient extends Person {protected /*@ spec_public rep @*/ List log;//@ public initially log.size() == 0;

Verify:

Patient p;if (b) { p = new Patient("male"); }else { p = new FemalePatient(); }//@ assert p.log.size() == 0;

Gary T. Leavens (UCF) JML Tutorial Fall 2007 225 / 225