1 / 15

OOSC - JMSAssert

OOSC - JMSAssert. Design By Contract. A powerful technique for writing reliable software. Specifying the software purpose with the implementation. Key elements: Invariant Preconditions Postconditions. Design By Contract.

kamal
Download Presentation

OOSC - JMSAssert

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. OOSC - JMSAssert

  2. Design By Contract • A powerful technique for writing reliable software. • Specifying the software purpose with the implementation. • Key elements: • Invariant • Preconditions • Postconditions

  3. Design By Contract • Precondition – The constraints under which the routine will function properly. • Postconditions – The state of the class after the routine execution • The Contract: If you call routine R() with the preconditions satisfied, R() will return satisfying the postconditions. • Invariant – Always holds

  4. When are condition checked?

  5. JMS Syntax - Invariant • Invariant - @inv • May access all class members or its direct/indirect bases, including private members • May appear in any JavaDoc comment • Preferable in the class comment

  6. JMS Syntax - Preconditions • Precondition - @pre • JavaDoc preceding the respective method • May reference class members and arguments • Multiple @pre markers are conjugated (AND)

  7. JMS Syntax - Postconditions • Postconditions - @post • JavaDoc preceding the respective method • May use $prev(expression) to access the value at the method entry. • May use $ret to denote method’s return value • Multiple @post markers are conjugated (AND)

  8. Example Precondition /** * @pre !isEmpty() * @post (top == $prev(top- 1)) * @post $ret == elems[top] * @post !isFull */ public synchronized Object pop() { return elems[--top]; } Postconditions

  9. JMS Syntax - General • Order has no meaning • @macro – for complicated conditions • Recursion – as expected, on every call • Inner classes can access outer classes’ members • Anonymous classes – specify invariant in one of its methods

  10. JMSAssert Installation • Run the jmssetup-1.02.exe installation file • The following lines are added to the path: REM Next two lines are added by JMSAssert SET CLASSPATH=%CLASSPATH%;C:\PROGRA~1\JMSASS~1.0\ bin\mmsclasses.jar; SET PATH=%PATH%;C:\PROGRA~1\JMSASS~1.0\bin; • Copy the “classic” directory from “..\jdk1.3.1\jre\bin\” to the directory:“C:\Program Files\JavaSoft\JRE\1.3\bin\”

  11. Setup (cont.) • Your JavaSoft directory should look like: • If you use jdk 1.2.2, you will have a 1.2 directory

  12. JMSAssert – how does it work • Annotate source code with assertions • Compile your code using javac (as usual) • Preprocess the code using jmsassert: creates contract files (*.jms) and a Startup.jms file. • *.jms files contain java code for the assertions. • Execute using: jmsjava Startup <filename>to check assertions. • jmsjava makes sure method assertions are called before/after the method invocation.

  13. JMS Execution • “jmsassert” – generates help text • “jmsassert –s <filename.java>” – generate assertions for a class file • “jmsassert –r –s .” – generate assertions for all class files in the directory and sub-dirs. (use for packages) • “javac <filename.java>” – compile • “jmsjava Startup <main>” - execute and check assertions

  14. Execution process Stack Demo files Annotate source with assertions MyStack.java Preprocess to generate assertion files Startup.jms default_MyStack.jms Jmsassert –s <file.java> default_MyStack_StackEnum.jms Compile Java file javac <file.java> MyStack.class MyStack$StackEnum.class Execute using jmsjava MyStack$StackEnum.class StackTest.class Jmsjava Startup <file.java>

  15. Notes • Execute these steps form the command line! • Make sure your CLASSPATH environment variable contains the current directory.Add “CLASSPATH=%CLASSPATH%;.;” to autoexec.bat.

More Related