Method Verification

advertisement
Method Verification
CS/SWE 332
Paul Ammann
Verification vs Validation


Verification vs. Validation
Verification


Validation


A given implementation is correct with respect to
another description
A given description is desirable
We will focus on Verification in this lecture

Good news! All Verification Obligations follow the
same basic model!
2
Verification of Method
Contracts in Data Abstractions

First basic problem




Contract is in JavaDoc
Code is in Java
How are the states related?
Solution:

Abstraction Function maps


Representation States to
Abstract States
3
Key to verifying methods in
isolation

Common (flawed) informal approach to
analyzing a given method:


See how other methods behave
Worry about method interactions




Interactions are reflected in representation state.
This doesn’t scale!
Instead, we want to analyze each method by itself
We need a general description of important
properties relevant to all methods

Exactly what the Rep Invariant does
4
Method Verification: Part 1
The Representation Invariant

Does the method establish/maintain the
rep-invariant?

Base case for constructors

Plus any other methods that create objects


Clone? Serialization?
Inductive case for mutators
5
Method Verification Part 2:
The Contract



Given The Rep Invariant as an
Assumption
Given Preconditions as Assumptions
Does the Postcondition Hold?

Need to Map States Through Abstraction
Function
6
Verification In Diagram Form
Abstract State (Before)
Method
Contract
Abstract State (After)
?
AF()
AF()
Representation State (Before)
Representation State (After)
Method
Code
7
Verification Example

Diagram shown for method verification


Will revisit same diagram for overridden methods
Example to develop in class:
public class Members {
// Members is a mutable record of organization membership
// AF: ??
// rep-inv: ??
List<Person> members;
// the representation
// Post: person becomes a member
public void join (Person person) { members.add
(person);}
// Post: person is no longer a member
public void leave(Person person) { members.remove(person);}
}


Exactly what is incorrect?
Verification tools:


Contract, Abstraction function, Representation Invariant
Validation question: What about null values in members?
8
Verification Example - Analysis
rep-inv: members != null

join()

Yes
Maintain rep-inv?





No
No
Satisfy contract?

Not a meaningful question
leave()

Yes
Satisfy contract?
Maintain rep-inv?

Yes
leave()

join()

Satisfy contract?



Maintain rep-inv?


rep-inv: members != null
&& no duplicates in members
Maintain rep-inv?


Yes
Satisfy contract?

Yes
9
Verification Example – Repair 1
rep-inv: members != null

join()


Analysis

As is
join()

leave()
while (members.contains(person)) {
members.remove(person);
}
Maintain rep-inv?


Satisfy contract?


Yes – already analyzed
Yes – already analyzed
leave()

Maintain rep-inv?


Yes
Satisfy contract?

Yes
10
Verification Example – Repair 2
rep-inv: members != null
&& no duplicates in members

join()
Analysis

if (!members.contains(person)) {
members.add(person);
{


As is
Maintain rep-inv?


leave()

join()
Satisfy contract?


Yes
Yes
leave()

Maintain rep-inv?


Yes – Already analyzed
Satisfy contract?

Yes – Already analyzed
11
Another Verification Example
public class Poly {
// Polys are immutable polynomials c0 + c1x + c2x^2 + …
// AF: ci = trms[i] for appropriate values of i
// rep-inv: deg = trms.length-1
//
trms.length >= 1
//
trms != null
//
if deg > 0 then trms[deg] != 0
int[] trms; int deg;
// the representation
// Post: Return degree of this, ie largest exponent with
// coefficient != 0. Returns 0 if this is zero Poly
public int degree() { return deg; }
// Other methods omitted
}


How do we decide if degree() is correct?
How must code change if rep-inv changes?
12
Download