Skip to main content

Typestate Verification: Abstraction Techniques and Complexity Results

  • Conference paper
  • First Online:
Static Analysis (SAS 2003)

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

Included in the following conference series:

Abstract

We consider the problem of typestate verification for shallow programs; i.e., programs where pointers from program variables to heap-allocated objects are allowed, but where heap-allocated objects may not themselves contain pointers. We prove a number of results relating the complexity of verification to the nature of the finite state machine used to specify the property. Some properties are shown to be intractable, but others which appear to be quite similar admit polynomial-time verification algorithms. Our results serve to provide insight into the inherent complexity of important classes of verification problems. In addition, the program abstractions used for the polynomial-time verification algorithms may be of independent interest.

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 39.99
Price excludes VAT (USA)
  • Available as PDF
  • Read on any device
  • Instant download
  • Own it forever
Softcover Book
USD 54.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. K. Ashcraft and D. Engler. Using programmer-written compiler extensions to catch security holes. In Proc. IEEE Symp. on Security and Privacy, Oakland, CA, May 2002.

    Google Scholar 

  2. T. Ball, R. Majumdar, T. Millstein, and S. Rajamani. Automatic predicate abstraction of C programs. In Proc. ACM Conf. on Programming Language Design and Implementation, pages 203–213, June 2001.

    Google Scholar 

  3. T. Ball and S. K. Rajamani. Automatically validating temporal safety properties of interfaces. In SPIN 2001: SPIN Workshop, LNCS 2057, pages 103–122, 2001.

    Google Scholar 

  4. E. Clarke, O. Grumberg, S. Jha, Y. Lu, and H. Veith. Counterexample-guided abstraction refinement. In CAV’00, July 2000.

    Google Scholar 

  5. E. Clarke, O. Grumberg, and D. Peled. Model Checking. MIT Press, 1999.

    Google Scholar 

  6. J. Corbett, M. Dwyer, J. Hatcliff, C. Pasareanu, Robby, S. Laubach, and H. Zheng. Bandera: Extracting finite-state models from Java source code. In Proc. Intl. Conf. on Software Eng., pages 439–448, June 2000.

    Google Scholar 

  7. M. Das, S. Lerner, and M. Seigle. ESP: Path-sensitive program verification in polynomial time. In Proc. ACM Conf. on Programming Language Design and Implementation, pages 57–68, Berlin, June 2002.

    Google Scholar 

  8. R. DeLine and M. Fähndrich. Enforcing high-level protocols in low-level software. In Proc. ACM Conf. on Programming Language Design and Implementation, pages 59–69, June 2001.

    Google Scholar 

  9. R. DeLine and M. Fähndrich. Adoption and focus: Practical linear types for imperative programming. In Proc. ACM Conf. on Programming Language Design and Implementation, pages 13–24, Berlin, June 2002.

    Google Scholar 

  10. E. W. Dijkstra. A Discipline of programing. Prentice-Hall, 1976.

    Google Scholar 

  11. J. Field, D. Goyal, G. Ramalingam, and E. Yahav. Shallow finite state verification. Technical Report RC22673, IBM T.J. Watson Research Center, Dec. 2002.

    Google Scholar 

  12. C. Flanagan, K. R. M. Leino, M. Lillibridge, G. Nelson, J. B. Saxe, and R. Stata. Extended static checking for java. In Proc. ACM Conf. on Programming Language Design and Implementation, pages 234–245, Berlin, June 2002.

    Google Scholar 

  13. J. S. Foster, T. Terauchi, and A. Aiken. Flow-sensitive type qualifiers. In Proc. ACM Conf. on Programming Language Design and Implementation, pages 1–12, Berlin, June 2002.

    Google Scholar 

  14. R. Giacobazzi, F. Ranzato, and F. Scozzari. Making abstract interpretations complete. Journal of the ACM, 47(2):361–416, 2000.

    Article  MathSciNet  MATH  Google Scholar 

  15. S. Graf and H. Saidi. Construction of abstract state graphs with PVS. In In Proceedings of the 9th Conference on Computer-Aided Verification (CAV’97), pages 72–83, Haifa, Israel, June 1997.

    Google Scholar 

  16. T. A. Henzinger, R. Jhala, R. Majumdar, and G. Sutre. Lazy abstraction. In Symposium on Principles of Programming Languages, pages 58–70, 2002.

    Google Scholar 

  17. V. Kuncak, P. Lam, and M. Rinard. Role analysis. In Proc. ACM Symp. on Principles of Programming Languages, Portland, January 2002.

    Google Scholar 

  18. W. Landi and B. G. Ryder. Pointer-induced aliasing: A problem classification. In Proc. ACM Symp. on Principles of Programming Languages, pages 93–103, New York, NY, 1991. ACM Press.

    Google Scholar 

  19. W. Landi. Undecidability of static analysis. ACM Letters on Programming Languages and Systems, 1(4):323–337, December 1992.

    Article  Google Scholar 

  20. R. Muth and S. Debray. On the complexity of flow-sensitive dataflow analyses. In Proc. ACM Symp. on Principles of Programming Languages, pages 67–80, New York, NY, 2000. ACM Press.

    Google Scholar 

  21. G. Naumovich, L. A. Clarke, L. J. Osterweil, and M. B. Dwyer. Verification of concurrent sofware with FLAVERS. In Proc. Intl. Conf. on Software Eng., pages 594–597, May 1997.

    Google Scholar 

  22. F. Nielson, H. R. Nielson, and C. Hankin. Principles of Program Analysis. Springer-Verlag, 2001.

    Google Scholar 

  23. G. Ramalingam, A. Warshavsky, J. Field, D. Goyal, and M. Sagiv. Deriving specialized program analyses for certifying component-client conformance. In Proc. ACM Conf. on Programming Language Design and Implementation, volume 37,5 of ACM SIGPLAN Notices, pages 83–94, New York, June 17–19 2002. ACM Press.

    Google Scholar 

  24. G. Ramalingam. The undecidability of aliasing. ACM Transactions on Programming Languages and Systems, 16(5):1467–1471, 1994.

    Article  Google Scholar 

  25. T. Reps, S. Horwitz, and M. Sagiv. Precise interprocedural dataflow analysis via graph reachability. In Proc. ACM Symp. on Principles of Programming Languages, pages 49–61, 1995.

    Google Scholar 

  26. R. E. Strom and D. M. Yellin. Extending typestate checking using conditional liveness analysis. IEEE Trans. Software Eng., 19(5):478–485, May 1993.

    Article  Google Scholar 

  27. R. E. Strom and S. Yemini. Typestate: A programming language concept for enhancing software reliability. IEEE Trans. Software Eng., 12(1):157–171, 1986.

    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 paper

Cite this paper

Field, J., Goyal, D., Ramalingam, G., Yahav, E. (2003). Typestate Verification: Abstraction Techniques and Complexity Results. In: Cousot, R. (eds) Static Analysis. SAS 2003. Lecture Notes in Computer Science, vol 2694. Springer, Berlin, Heidelberg. https://doi.org/10.1007/3-540-44898-5_25

Download citation

  • DOI: https://doi.org/10.1007/3-540-44898-5_25

  • Published:

  • Publisher Name: Springer, Berlin, Heidelberg

  • Print ISBN: 978-3-540-40325-8

  • Online ISBN: 978-3-540-44898-3

  • eBook Packages: Springer Book Archive

Publish with us

Policies and ethics