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.
Access this chapter
Tax calculation will be finalised at checkout
Purchases are for personal use only
Preview
Unable to display preview. Download preview PDF.
References
J.-R. Abrial. The B Book: Assigning Programs to Meanings. Cambridge University Press, 1996.
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.
R. Alur, A. Itai, R.P. Kurshan, and M. Yannakakis. Timing verification by successive approximation. Information and Computation, 118(1):142–157, 1995.
G. Ammons, R. Bodik, and J. Larus. Mining specifications. In POPL 02: Principles of Programming Languages, pages 4-16. ACM, 2002.
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.
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.
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.
K. Beck. Extreme Programming Explained: Embrace Change. Addison-Wesley, 1999.
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.
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.
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.
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.
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.
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.
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.
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.
E.W. Dijkstra. A Discipline of Programming. Prentice-Hall, 1976.
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.
D. Evans and D. Larochelle. Improving security using extensible light-weight static analysis. IEEE Software, 19(1):42–51, 2002.
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.
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.
E. Gamma and K. Beck. JUnit: A cook’s tour. Java Report, 4(5):27–38, 1999.
P. Godefroid. Model checking for programming languages using VeriSoft. In POPL 97: Principles of Programming Languages, pages 174-186. ACM, 1997.
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.
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.
K. Havelund and T. Pressburger. Model checking Java programs using Java PathFinder. Software Tools for Technology Transfer, 2(4):72–84, 2000.
K. Havelund and G. Rosu. Monitoring Java programs with Java PathExplorer. Electronic Notes in Theoretical Computer Science, 55(2), 2001.
K. Havelund and G. Rosu, editors. Workshop on Run-Time Verification, volume 70(4) of Electronic Notes in Theoretical Computer Science, 2002.
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.
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.
T.A. Henzinger, R. Jhala, R. Majumdar, and G. Sutre. Lazy abstraction. In POPL 02: Principles of Programming Languages, pages 58-70. ACM, 2002.
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.
G.J. Holzmann. The Spin model checker. IEEE Transactions on Software Engineering, 23(5):279–295, 1997.
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.
M. Kaufmann, P. Manolios, and J.S. Moore. Computer-Aided Reasoning: An Approach. Kluwer Academic Publishers, 2000.
R.P. Kurshan. Computer-Aided Verification of Coordinating Processes. Princeton University Press, 1994.
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.
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.
Z. Manna. The correctness of programs. Journal of Computer and Systems Sciences, 3(2):119–127, 1969.
Z. Manna. Mathematical Theory of Computation. McGraw-Hill, 1972.
Z. Manna and A. Pnueli. Temporal Verification of Reactive Systems: Safety. Springer-Verlag, 1995.
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.
G.C. Necula. Proof-carrying code. In POPL 97: Principles of Programming Languages, pages 106-119. ACM, 1997.
G.C. Necula. Translation validation for an optimizing compiler. In PLDI 00: Programming Languages Design and Implementation, pages 83-95. ACM, 2001.
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.
W. Oney. Programming the Microsoft Windows Driver Model. Microsoft Press, 1999.
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.
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.
M. Rinard and D. Marinov. Credible compilation. Technical Report MIT-LCS-TR-776, MIT, 1999.
G. Rothermel and M. Harrold. Analyzing regression test selection techniques. IEEE Transactions on Software Engineering, 22(8):529–551, 1996.
G. Rothermel and M. Harrold. A safe, efficient regression test selection technique. ACM Transactions on Software Engineering and Methodology, 6(2):173–210, 1997.
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.
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.
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.
N. Wirth. Program development by stepwise refinement. Communications of the ACM, 14(4):221–227, 1971.
Author information
Authors and Affiliations
Editor information
Editors and Affiliations
Rights 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