extended static checking for java
play

Extended Static Checking for Java Lukas Erlacher TU Mnchen - - PowerPoint PPT Presentation

Motivation Example Architecture Discussion Extended Static Checking for Java Lukas Erlacher TU Mnchen - Seminar Verification 14. Juli 2011 Erlacher Extended Static Checking for Java Motivation Example Architecture Discussion Outline


  1. Motivation Example Architecture Discussion Extended Static Checking for Java Lukas Erlacher TU München - Seminar Verification 14. Juli 2011 Erlacher Extended Static Checking for Java

  2. Motivation Example Architecture Discussion Outline 1 Motivation Motivation for static checking 2 Example ESC/Java example 3 Architecture ESC/JAVA architecture VC generator Simplify 4 Discussion JML + ESC/Java annotation language JML What ESC/Java checks Erlacher Extended Static Checking for Java

  3. Motivation Example Motivation for static checking Architecture Discussion Motivation for static checking Why check a program’s behaviour? Erlacher Extended Static Checking for Java

  4. Motivation Example Motivation for static checking Architecture Discussion Motivation for static checking Why check a program’s behaviour? Errors / program does not do what we want Testing is incomplete and unsound Testing is expensive Erlacher Extended Static Checking for Java

  5. Motivation Example Motivation for static checking Architecture Discussion Motivation for static checking Why check a program’s behaviour? Errors / program does not do what we want Testing is incomplete and unsound Testing is expensive Why static checking? Erlacher Extended Static Checking for Java

  6. Motivation Example Motivation for static checking Architecture Discussion Motivation for static checking Why check a program’s behaviour? Errors / program does not do what we want Testing is incomplete and unsound Testing is expensive Why static checking? Does not require executing program Can cover all code paths Erlacher Extended Static Checking for Java

  7. Motivation Example Motivation for static checking Architecture Discussion Motivation for static checking Why check a program’s behaviour? Errors / program does not do what we want Testing is incomplete and unsound Testing is expensive Why static checking? Does not require executing program Can cover all code paths Why ESC/JAVA? Erlacher Extended Static Checking for Java

  8. Motivation Example Motivation for static checking Architecture Discussion Motivation for static checking Why check a program’s behaviour? Errors / program does not do what we want Testing is incomplete and unsound Testing is expensive Why static checking? Does not require executing program Can cover all code paths Why ESC/JAVA? First static checker for Java Architecture and working principle very clear and structured Is applicable in practice Annotation language allows to specify design that can also be checked Erlacher Extended Static Checking for Java

  9. Motivation Example Motivation for static checking Architecture Discussion What is static checking? Erlacher Extended Static Checking for Java

  10. Motivation Example Motivation for static checking Architecture Discussion What is static checking? No checking: Program execution breaks on segfault / null pointer dereference / array bounds violation. Erlacher Extended Static Checking for Java

  11. Motivation Example Motivation for static checking Architecture Discussion What is static checking? No checking: Program execution breaks on segfault / null pointer dereference / array bounds violation. Type checking: Compiler notices illegal code and violation of specification embedded in type information. Erlacher Extended Static Checking for Java

  12. Motivation Example Motivation for static checking Architecture Discussion What is static checking? No checking: Program execution breaks on segfault / null pointer dereference / array bounds violation. Type checking: Compiler notices illegal code and violation of specification embedded in type information. Primitive static checking: Flags easily-detected “suspicious” code such as use of uninitialized variables or unreachable code. Erlacher Extended Static Checking for Java

  13. Motivation Example Motivation for static checking Architecture Discussion What is static checking? No checking: Program execution breaks on segfault / null pointer dereference / array bounds violation. Type checking: Compiler notices illegal code and violation of specification embedded in type information. Primitive static checking: Flags easily-detected “suspicious” code such as use of uninitialized variables or unreachable code. Formal methods: Formally prove that program is correct. Erlacher Extended Static Checking for Java

  14. Motivation Example Motivation for static checking Architecture Discussion What is static checking? No checking: Program execution breaks on segfault / null pointer dereference / array bounds violation. Type checking: Compiler notices illegal code and violation of specification embedded in type information. Primitive static checking: Flags easily-detected “suspicious” code such as use of uninitialized variables or unreachable code. Formal methods: Formally prove that program is correct. Extended static checking uses annotations and generic formal methods to show whether a program behaves within the constraints of its specification. Erlacher Extended Static Checking for Java

  15. Motivation Example Motivation for static checking Architecture Discussion Comparison of checking methods coverage program verification extended static checking decidability ceiling type checking effort Erlacher Extended Static Checking for Java

  16. Motivation Example Motivation for static checking Architecture Discussion ESC/JAVA history Developed at Compaq Systems Research by Flanagan, Leino, Lillibridge, Nelson, Saxe, and Stata Descended from ESC/Modula-3 Developed as practical tool to check programs for semantic errors, specification violations, and synchronization errors in concurrent programs Exploits the space between fast, but primitive syntactic checkers like lint and comprehensive, but costly formal program verification Erlacher Extended Static Checking for Java

  17. Motivation Example ESC/Java example Architecture Discussion ESC/Java example public class Bag { 1 int [] elements; 2 int size; 3 4 Bag( int [] input) { 5 size = input.length; 6 elements = new int [size]; 7 System.arraycopy(input, 0 , elements, 0 , size); 8 } 9 10 .. 11 } 12 Erlacher Extended Static Checking for Java

  18. Motivation Example ESC/Java example Architecture Discussion ESC/Java example public class Bag { 1 int [] elements; 2 int size; 3 4 Bag( int [] input) { 5 size = input.length; 6 elements = new int [size]; 7 System.arraycopy(input, 0 , elements, 0 , size); 8 } 9 10 .. 11 } 12 Bag.java:6: Warning: Possible null dereference (Null) size = input.length; ^ Erlacher Extended Static Checking for Java

  19. Motivation Example ESC/Java example Architecture Discussion ESC/Java example public class Bag { 1 /*@non_null*/ int [] elements; 2 int size; 3 4 Bag(/*@non_null*/ int [] input) { 5 size = input.length; 6 elements = new int [size]; 7 System.arraycopy(input, 0 , elements, 0 , size); 8 } 9 10 .. 11 } 12 Bag.java:6: Warning: Possible null dereference (Null) size = input.length; ^ Erlacher Extended Static Checking for Java

  20. Motivation Example ESC/Java example Architecture Discussion ESC/Java example public class Bag { 1 /*@non_null*/ int [] elements; 2 int size; 3 4 Bag(/*@non_null*/ int [] input) { 5 size = input.length; 6 elements = new int [size]; 7 System.arraycopy(input, 0 , elements, 0 , size); 8 } 9 10 .. 11 } 12 Erlacher Extended Static Checking for Java

  21. Motivation Example ESC/Java example Architecture Discussion ESC/Java example public class Bag { 1 int [] elements; int size; 2 .. 3 int extractMin () { 4 int m = Integer.MAX_VALUE; 5 int mindex = 0 ; 6 for ( int i = 0 ; i < size; i++) { 7 if (elements[i] < m) { 8 mindex = i; 9 m = elements[i]; 10 } 11 } 12 size--; 13 elements[mindex] = elements[size]; 14 return m; 15 } 16 } 17 Erlacher Extended Static Checking for Java

  22. Motivation Example ESC/Java example Architecture Discussion ESC/Java example public class Bag { 1 int [] elements; int size; 2 .. 3 int extractMin () { 4 int m = Integer.MAX_VALUE; 5 int mindex = 0 ; 6 for ( int i = 0 ; i < size; i++) { 7 if (elements[i] < m) { 8 mindex = i; 9 m = elements[i]; 10 } 11 } 12 size--; 13 elements[mindex] = elements[size]; 14 return m; 15 } 16 } 17 Bag1.java:8: Warning: Array index possibly too large (IndexTooBig) if (elements[i] < m) { ^ Erlacher Extended Static Checking for Java

  23. Motivation Example ESC/Java example Architecture Discussion ESC/Java example /*@invariant size >= 0 && size <= elements.length; */ public class Bag { 1 int [] elements; int size; 2 .. 3 int extractMin () { 4 int m = Integer.MAX_VALUE; 5 int mindex = 0 ; 6 for ( int i = 0 ; i < size; i++) { 7 if (elements[i] < m) { 8 mindex = i; 9 m = elements[i]; 10 } 11 } 12 size--; 13 elements[mindex] = elements[size]; 14 return m; 15 } 16 } 17 Erlacher Extended Static Checking for Java

  24. Motivation Example ESC/Java example Architecture Discussion Recap: Examples non_null: Forces assigners to always assign a valid instance - allows users to assume that instance is always valid invariant: introduces the invariant as precondition and post-condition to every method call precondition: forces caller to establish precondition before calling postcondition: forces method to establish post-condition before returning Erlacher Extended Static Checking for Java

Recommend


More recommend