23
cs205: engineering software university of virginia fall 2006 Specifying Procedures David Evans www.cs.virginia.edu/cs205

cs205: engineering software university of virginia fall 2006

  • Upload
    tilly

  • View
    21

  • Download
    0

Embed Size (px)

DESCRIPTION

cs205: engineering software university of virginia fall 2006. Specifying Procedures. David Evans www.cs.virginia.edu/cs205. Procedural Specifications. Specification for a procedure describes: What its inputs are What the mapping between inputs and outputs are - PowerPoint PPT Presentation

Citation preview

Page 1: cs205: engineering software university of virginia        fall 2006

cs205: engineering softwareuniversity of virginia fall 2006

Specifying Procedures

David Evanswww.cs.virginia.edu/cs205

Page 2: cs205: engineering software university of virginia        fall 2006

2cs205: engineering software

Procedural Specifications

• Specification for a procedure describes:– What its inputs are– What the mapping between inputs and

outputs are– What it can do the state of the world

Page 3: cs205: engineering software university of virginia        fall 2006

3cs205: engineering software

Requires and Effects

• Header: name of procedure, types of parameters and return value– Java declaration

• Clauses (comments in Java)– REQUIRES- precondition the client

must satisfy before calling– EFFECTS – postcondition the

implementation satisfy at return

Page 4: cs205: engineering software university of virginia        fall 2006

4cs205: engineering software

Contract

• Client promises to satisfy the precondition in the requires clause

• Implementer promises if client satisfies the precondition, the return value and state when the function returns will satisfy the postcondition.

Page 5: cs205: engineering software university of virginia        fall 2006

5cs205: engineering software

Specification Contractf () REQUIRES: precondition EFFECTS: postcondition

precondition{ f (); }postcondition

If the precondition is true,after we call f (),the postcondition is true.

Page 6: cs205: engineering software university of virginia        fall 2006

6cs205: engineering software

Specification Example

public String bestStock () // REQUIRES: false

// EFFECTS: Returns the name of the // best stock to buy on the NASDAQ // tomorrow.

Can we implement a procedure that satisfies this specification?

Yes, any implementation will satisfy this specification! If the precondition in the requires clause is not satisfied, the procedure can do anything and still satisfy its specification!

Page 7: cs205: engineering software university of virginia        fall 2006

7cs205: engineering software

Specification Example

public String bestStock () // REQUIRES: true

// EFFECTS: Returns the name of the // best stock to buy on the NASDAQ // tomorrow.

Can we implement a procedure that satisfies this specification?

Page 8: cs205: engineering software university of virginia        fall 2006

8cs205: engineering software

Requires Clauses• The weaker (more easy to make true)

the requires clause:– The more useful a procedure is for clients– The more difficult it is to implement

correctly

• Avoid requires clauses unless there is a good reason to have one– Default requires clause is: REQUIRES true– Client doesn’t need to satisfy anything

before calling

Page 9: cs205: engineering software university of virginia        fall 2006

9cs205: engineering software

Specification Example

public static int biggest (int [ ] a) // REQUIRES: true

// EFFECTS: Returns the value of the// biggest element of a.

Is this a reasonable specification?

No, what should client expect to happen if a is empty.

Page 10: cs205: engineering software university of virginia        fall 2006

10cs205: engineering software

Specification Example

public static int biggest (int [ ] a) // REQUIRES: a has at least one

element.// EFFECTS: Returns the value of the// biggest element of a.

Is this a good specification?

Maybe, depends on the client. Its risky…

Page 11: cs205: engineering software university of virginia        fall 2006

11cs205: engineering software

Specification Examplepublic static int biggest (int [ ] a) // REQUIRES: true

// EFFECTS: If a has at least one // element, returns the value biggest// element of a. Otherwise, returns// Integer.MIN_VALUE (smallest int // value).Better, but client has to deal with special case now.

Best would probably be to use an exception…

Page 12: cs205: engineering software university of virginia        fall 2006

12cs205: engineering software

Bad Use of Requires Clause

• Bug discovered in Microsoft Outlook that treats messages that start with “begin ” as empty attachments (can be exploited by viruses)

To workaround this problem: • Do not start messages with the word "begin" followed by two spaces. • Use only one space between the word "begin" and the following data. • Capitalize the word "begin" so that it is reads "Begin." • Use a different word such as "start" or "commence".

from http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q265230&(this is no longer available, was “revoked” by Microsoft)

Page 13: cs205: engineering software university of virginia        fall 2006

13cs205: engineering software

Modifies

• How does a client know a is the same after biggest returns?

public static int biggest (int [ ] a) // REQUIRES: true // EFFECTS: If a has at least one element, // returns the value biggest element of a. // Otherwise, returns Integer.MIN_VALUE // (smallest int value).Reading the effects clause is enough – if biggest modifies

anything, it should describe it. But, that’s a lot of work.

Page 14: cs205: engineering software university of virginia        fall 2006

14cs205: engineering software

Modifies• Modifies clause: any state not listed

in the modifies clause may not be changed by the procedure.

public static int biggest (int [ ] a) // REQUIRES: true // MODIFIES: nothing // EFFECTS: If a has at least one element, // returns the value biggest element of a. // Otherwise, returns Integer.MIN_VALUE // (smallest int value).

Page 15: cs205: engineering software university of virginia        fall 2006

15cs205: engineering software

Modifies Example

public static int replaceBiggest (int [ ] a, int [] b) // REQUIRES: a and b both have at least one // element // MODIFIES: a // EFFECTS: Replaces the value of the biggest // element in a with the value of the biggest // element in b.

Page 16: cs205: engineering software university of virginia        fall 2006

16cs205: engineering software

Defaults• What should it mean when there is

no requires clause?

• What should it mean when there is no modifies clause?

• What should it mean when there is no effects clause?

REQUIRES: true

MODIFIES: nothing

Meaningless.

Page 17: cs205: engineering software university of virginia        fall 2006

17cs205: engineering software

PS1

• Question 2 was very ambiguous:Modify the program so that instead of dying instantly, cells go through a dying state where they are displayed in a different color for one step before they die.

How should the life rules deal with dying cells?

Page 18: cs205: engineering software university of virginia        fall 2006

18cs205: engineering software

Dealing with Bad Specs• When a specification is ambiguous:

– Ask the provider to figure out what it means– Or, state very clearly what additional

assumptions you make

• Good (easy to implement) assumption here: dying cells are not alive (as far as neighbors are concerned), and don’t become alive (whatever their neighbor states are)

Page 19: cs205: engineering software university of virginia        fall 2006

19cs205: engineering software

Avoid Changing Interfaces

• If we change this, need to examine all code that uses isAlive

• If we just change its implementation, don’t need to examine anything else

boolean isAlive() // EFFECTS: Returns true if the cell is alive, false otherwise.

Page 20: cs205: engineering software university of virginia        fall 2006

20cs205: engineering software

enum (added to Java 1.5)public enum StateValue { dead, dying, alive

} ;...public Color getColor() {

switch (alive) {case alive: return Color.green;

case dying: return Color.red; case dead: return Color.white;

}}

Page 21: cs205: engineering software university of virginia        fall 2006

21cs205: engineering software

PS1 Grading

• Full credit even for inelegant code• Later assignments: need clear,

elegant, economical code for full credit

Page 22: cs205: engineering software university of virginia        fall 2006

22cs205: engineering software

PS2

• You will need to write a fair bit of code yourself

• Challenge is to make your specification and implementation cover all possible inputs

• Next class: some hints on PS2

Page 23: cs205: engineering software university of virginia        fall 2006

23cs205: engineering software

Charge• Specifications in CS205

– Will be informal: written in English (aided by common mathematical notations)

– ...but must be precise and clear– REQUIRES/MODIFIES/EFFECTS style