Skip to main content

Extreme Model Checking

  • Chapter
Verification: Theory and Practice

Part of the book series: Lecture Notes in Computer Science ((LNCS,volume 2772))

Abstract

One of the central axioms of extreme programming is the disciplined use of regression testing during stepwise software development. Due to recent progress in software model checking, it has become possible to supplement this process with automatic checks for behavioral safety properties of programs, such as conformance with locking idioms and other programming protocols and patterns. For efficiency reasons, all checks must be incremental, i. e., they must reuse partial results from previous checks in order to avoid all unnecessary repetition of expensive verification tasks. We show that the lazy-abstraction algorithm, and its implementation in Blast, can be extended to support the fully automatic and incremental checking of temporal safety properties during software development.

This work was supported in part by the NSF grants CCR-9988172, CCR-0085949, and CCR-0234690, the ONR grant N00014-02-1-0671, the DARPA grant F33615-00-C-1693, and the MARCO grant 98-DT-660.

This is a preview of subscription content, log in via an institution to check access.

Access this chapter

Chapter
USD 29.95
Price excludes VAT (USA)
  • Available as PDF
  • Read on any device
  • Instant download
  • Own it forever
eBook
USD 84.99
Price excludes VAT (USA)
  • Available as PDF
  • Read on any device
  • Instant download
  • Own it forever
Softcover Book
USD 109.99
Price excludes VAT (USA)
  • Compact, lightweight edition
  • Dispatched in 3 to 5 business days
  • Free shipping worldwide - see info

Tax calculation will be finalised at checkout

Purchases are for personal use only

Institutional subscriptions

Preview

Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.

References

  1. J.-R. Abrial. The B Book: Assigning Programs to Meanings. Cambridge University Press, 1996.

    Google Scholar 

  2. H. Agrawal, J.R. Horgan, E.W. Krauser, and S.A. London. Incremental regression testing. In ICSM 93: International Conference on Software Maintenance, pages 348-357. IEEE, 1993.

    Google Scholar 

  3. R. Alur, A. Itai, R.P. Kurshan, and M. Yannakakis. Timing verification by successive approximation. Information and Computation, 118(1):142–157, 1995.

    Article  MATH  MathSciNet  Google Scholar 

  4. G. Ammons, R. Bodik, and J. Larus. Mining specifications. In POPL 02: Principles of Programming Languages, pages 4-16. ACM, 2002.

    Google Scholar 

  5. F. Balarin and A.L. Sangiovanni-Vincentelli. An iterative approach to language containment. In CAV 93: Computer-Aided Verification, Lecture Notes in Computer Science 697, pages 29-40. Springer-Verlag, 1993.

    Google Scholar 

  6. T. Ball. On the limit of control-flow analysis for regression test selection. In ISSTA 98: International Symposium on Software Testing and Analysis, pages 134-142. ACM, 1998.

    Google Scholar 

  7. T. Ball and S.K. Rajamani. The SLAM project: Debugging system software via static analysis. In POPL 02: Principles of Programming Languages, pages 1-3. ACM, 2002.

    Google Scholar 

  8. K. Beck. Extreme Programming Explained: Embrace Change. Addison-Wesley, 1999.

    Google Scholar 

  9. B. Blanchet, P. Cousot, R. Cousot, J. Feret, L. Mauborgne, A. Mine, D. Monniaux, and X. Rival. Design and implementation of a special-purpose static program analyzer for safety-critical real-time embedded software. In The Essence of Computation, Complexity, Analysis, Transformation: Essays Dedicated to Neil D. Jones, Lecture Notes in Computer Science 2566, pages 85-108. Springer-Verlag, 2002.

    Google Scholar 

  10. W.R. Bush, J.D. Pincus, and D.J. Sielaff. A static analyzer for finding dynamic programming errors. Software Practice and Experience, 30(7):775–802, 2000.

    Article  MATH  Google Scholar 

  11. Y. Cheon and G.T. Leavens. A simple and practical approach to unit testing: The JML and JUnit way. In ECOOP 02: European Conference on Object-Oriented Programming, Lecture Notes in Computer Science 2374, pages 231-255. Springer-Verlag, 2002.

    Google Scholar 

  12. E. Clarke, O. Grumberg, S. Jha, Y. Lu, and H. Veith. Counterexample-guided abstraction refinement. In CAV 00: Computer-Aided Verification, Lecture Notes in Computer Science 1855, pages 154-169. Springer-Verlag, 2000.

    Google Scholar 

  13. J. Corbett, M. Dwyer, J. Hatcliff, C. Pasareanu, R.S. Laubach, and H. Zheng. Bandera: Extracting finite-state models from Java source code. In ICSE 00: International Conference on Software Engineering, pages 439-448. ACM/IEEE, 2000.

    Google Scholar 

  14. D.W. Currie, A.J. Hu, S. Rajan, and M. Fujita. Automatic formal verification of DSP software. In DAC 00: Design Automation Conference, pages 130-135. ACM/IEEE, 2000.

    Google Scholar 

  15. M. Das, S. Lerner, and M. Seigle. ESP: Path-sensitive program verification in polynomial time. In PLDI 02: Programming Language Design and Implementation, pages 57-68. ACM, 2002.

    Google Scholar 

  16. R. DeLine and M. Fähndrich. Enforcing high-level protocols in low-level software. In PLDI 01: Programming Language Design and Implementation, pages 59-69. ACM, 2001.

    Google Scholar 

  17. E.W. Dijkstra. A Discipline of Programming. Prentice-Hall, 1976.

    Google Scholar 

  18. D. Engler, B. Chelf, A. Chou, and S. Hallem. Checking system rules using system-specific, programmer-written compiler extensions. In OSDI 00: Operating System Design and Implementation, pages 1-16. Usenix Association, 2000.

    Google Scholar 

  19. D. Evans and D. Larochelle. Improving security using extensible light-weight static analysis. IEEE Software, 19(1):42–51, 2002.

    Article  Google Scholar 

  20. C. Flanagan, K.R.M. Leino, M. Lillibridge, G. Nelson, J.B. Saxe, and R. Stata. Extended static checking for Java. In PLDI 02: Programming Language Design and Implementation, pages 234-245. ACM, 2002.

    Google Scholar 

  21. J.S. Foster, T. Terauchi, and A. Aiken. Flow-Sensitive Type Qualifiers. In PLDI 02: Programming Language Design and Implementation, pages 1-12. ACM, 2002.

    Google Scholar 

  22. E. Gamma and K. Beck. JUnit: A cook’s tour. Java Report, 4(5):27–38, 1999.

    Google Scholar 

  23. P. Godefroid. Model checking for programming languages using VeriSoft. In POPL 97: Principles of Programming Languages, pages 174-186. ACM, 1997.

    Google Scholar 

  24. S. Graf and H. Säïdi. Construction of abstract state graphs with PVS. In CAV 97: Computer-Aided Verification, Lecture Notes in Computer Science 1254, pages 72-83. Springer-Verlag, 1997.

    Google Scholar 

  25. M.J. Harrold, J. Jones, T. Li, D. Liang, A. Orso, M. Pennings, S. Sinha, S. Spoon, and A. Gujarathi. Regression test selection for java software. In OOPSLA 01: Object-Oriented Programming, Systems, Languages, and Applications, pages 312-326. ACM, 2001.

    Google Scholar 

  26. K. Havelund and T. Pressburger. Model checking Java programs using Java PathFinder. Software Tools for Technology Transfer, 2(4):72–84, 2000.

    Google Scholar 

  27. K. Havelund and G. Rosu. Monitoring Java programs with Java PathExplorer. Electronic Notes in Theoretical Computer Science, 55(2), 2001.

    Google Scholar 

  28. K. Havelund and G. Rosu, editors. Workshop on Run-Time Verification, volume 70(4) of Electronic Notes in Theoretical Computer Science, 2002.

    Google Scholar 

  29. T.A. Henzinger, R. Jhala, R. Majumdar, G.C. Necula, G. Sutre, and W. Weimer. Temporal-safety proofs for systems code. In CAV 02: Computer-Aided Verification, Lecture Notes in Computer Science 2404, pages 526-538. Springer-Verlag, 2002.

    Google Scholar 

  30. T.A. Henzinger, R. Jhala, R. Majumdar, and S. Qadeer. Thread-modular abstraction refinement. In CAV 03: Computer-Aided Verification, Lecture Notes in Computer Science 2725, pages 262-274. Springer-Verlag, 2003.

    Google Scholar 

  31. T.A. Henzinger, R. Jhala, R. Majumdar, and G. Sutre. Lazy abstraction. In POPL 02: Principles of Programming Languages, pages 58-70. ACM, 2002.

    Google Scholar 

  32. T.A. Henzinger, R. Jhala, R. Majumdar, and G. Sutre. Software verification with blast. In SPIN 03: SPIN Workshop, Lecture Notes in Computer Science 2648, pages 235-239. Springer-Verlag, 2003.

    Google Scholar 

  33. G.J. Holzmann. The Spin model checker. IEEE Transactions on Software Engineering, 23(5):279–295, 1997.

    Article  MathSciNet  Google Scholar 

  34. G.J. Holzmann. Logic verification of ANSI-C code with Spin. In SPIN 00: Model Checking of Software, Lecture Notes in Computer Science 1885, pages 131-147. Springer-Verlag, 2000.

    Google Scholar 

  35. M. Kaufmann, P. Manolios, and J.S. Moore. Computer-Aided Reasoning: An Approach. Kluwer Academic Publishers, 2000.

    Google Scholar 

  36. R.P. Kurshan. Computer-Aided Verification of Coordinating Processes. Princeton University Press, 1994.

    Google Scholar 

  37. G.T. Leavens, K.R.M. Leino, E. Poll, C. Ruby, and B. Jacobs. JML: Notations and tools supporting detailed design in Java. In OOPSLA 00: Object-Oriented Programming, Systems, Languages, and Applications, pages 105-106. ACM, 2000.

    Google Scholar 

  38. T. Lev-Ami and S. Sagiv. TVLA: A system for implementing static analyses. In SAS 02: Static Analysis Symposium, Lecture Notes in Computer Science 2280, pages 280-301. Springer-Verlag, 2000.

    Google Scholar 

  39. Z. Manna. The correctness of programs. Journal of Computer and Systems Sciences, 3(2):119–127, 1969.

    Article  MathSciNet  Google Scholar 

  40. Z. Manna. Mathematical Theory of Computation. McGraw-Hill, 1972.

    Google Scholar 

  41. Z. Manna and A. Pnueli. Temporal Verification of Reactive Systems: Safety. Springer-Verlag, 1995.

    Google Scholar 

  42. R. Milner. An algebraic definition of simulation between programs. In Second International Joint Conference on Artificial Intelligence, pages 481-489. The British Computer Society, 1971.

    Google Scholar 

  43. G.C. Necula. Proof-carrying code. In POPL 97: Principles of Programming Languages, pages 106-119. ACM, 1997.

    Google Scholar 

  44. G.C. Necula. Translation validation for an optimizing compiler. In PLDI 00: Programming Languages Design and Implementation, pages 83-95. ACM, 2001.

    Google Scholar 

  45. R. O’Callahan and D. Jackson. Lackwit: A program-understanding tool based on type inference. In ICSE 97: International Conference on Software Engineering, pages 338-348. ACM/IEEE, 1997.

    Google Scholar 

  46. W. Oney. Programming the Microsoft Windows Driver Model. Microsoft Press, 1999.

    Google Scholar 

  47. S. Owre, S. Rajan, J.M. Rushby, N. Shankar, and M.K. Srivas. PVS: Combining specification, proof checking, and model checking. In CAV 96: Computer-Aided Verification, Lecture Notes in Computer Science 1102, pages 411-414. Springer-Verlag, 1996.

    Google Scholar 

  48. A. Pnueli, M. Siegel, and E. Singerman. Translation validation. In TACAS 98: Tools and Algorithms for the Construction and Analysis of Systems, Lecture Notes in Computer Science 1384, pages 151-166. Springer-Verlag, 1998.

    Google Scholar 

  49. M. Rinard and D. Marinov. Credible compilation. Technical Report MIT-LCS-TR-776, MIT, 1999.

    Google Scholar 

  50. G. Rothermel and M. Harrold. Analyzing regression test selection techniques. IEEE Transactions on Software Engineering, 22(8):529–551, 1996.

    Article  Google Scholar 

  51. G. Rothermel and M. Harrold. A safe, efficient regression test selection technique. ACM Transactions on Software Engineering and Methodology, 6(2):173–210, 1997.

    Article  Google Scholar 

  52. H. Saidi. Model-checking-guided abstraction and analysis. In SAS 00: Static-Analysis Symposium, Lecture Notes in Computer Science 1824, pages 377-396. Springer-Verlag, 2000.

    Google Scholar 

  53. M.A.A. Sanvido, W. Schaufelberger, and V. Cechticky. Testing embedded control systems using hardware-in-the-loop simulation and temporal logic. In 15th IFAC World Congress on Automatic Control, 2002.

    Google Scholar 

  54. D. Stotts, M. Lindsey, and A. Antley. An informal formal method for systematic JUnit test-case generation. In XP/Agile Universe 2002, Lecture Notes in Computer Science 2418, pages 132-143. Springer-Verlag, 2002.

    Google Scholar 

  55. N. Wirth. Program development by stepwise refinement. Communications of the ACM, 14(4):221–227, 1971.

    Article  MATH  Google Scholar 

Download references

Author information

Authors and Affiliations

Authors

Editor information

Editors and Affiliations

Rights and permissions

Reprints and permissions

Copyright information

© 2003 Springer-Verlag Berlin Heidelberg

About this chapter

Cite this chapter

Henzinger, T.A., Jhala, R., Majumdar, R., Sanvido, M.A.A. (2003). Extreme Model Checking. In: Dershowitz, N. (eds) Verification: Theory and Practice. Lecture Notes in Computer Science, vol 2772. Springer, Berlin, Heidelberg. https://doi.org/10.1007/978-3-540-39910-0_16

Download citation

  • DOI: https://doi.org/10.1007/978-3-540-39910-0_16

  • Publisher Name: Springer, Berlin, Heidelberg

  • Print ISBN: 978-3-540-21002-3

  • Online ISBN: 978-3-540-39910-0

  • eBook Packages: Springer Book Archive

Publish with us

Policies and ethics