skip to main content
article

Starc: static analysis for efficient repair of complex data

Published:21 October 2007Publication History
Skip Abstract Section

Abstract

Data structure corruptions are insidious bugs that reduce the reliability of software systems. Constraint-based datastructure repair promises to help programs recover from potentially crippling corruption errors. Prior work repairs a variety of relatively small data structures, usually with hundreds of nodes.

We present STARC which uses static analysis to repair data structures with tens of thousands of nodes. Given a Java predicate method that describes the integrity constraints of a structure, STARC statically analyzes the method to identify: (1) the recurrent fields, i.e., fields that the predicate method uses to traverse the structure; and (2) local field constraints, i.e., how the value of an object field is related to the value of a neighboring object field. STARC executes the predicate method on the structure and monitors its execution to identify corrupt object fields, which STARC then repairs using a systematic search of a neighborhood of the given structure. Each repair action is guided by the result of the static analysis, which enables more efficient and effective repair compared to prior work. Experimental results showthat STARC can repair structures with tens of thousands of nodes, up to 100 times larger than prior work.

STARC efficiency is probably not practical for very large data structures in deployed systems, but opens a promising direction for future work.

References

  1. William Adjie-Winoto, Elliot Schwartz, Hari Balakrishnan, and Jeremy Lilley. The design and implementation of an intentional naming system. In Proc. 17th ACM Symposium on Operating Systems Principles (SOSP), Kiawah Island, December 1999. Google ScholarGoogle ScholarDigital LibraryDigital Library
  2. C. Artho, H. Barringer, A. Goldberg, K. Havelund, S. Khurshid, M. Lowry, C. Pasareanu, G. Rosu, K. Sen, W. Visser, and R. Washington. Combining test case generation and runtime verification. Theoretical Computer Science, 2005. Google ScholarGoogle ScholarDigital LibraryDigital Library
  3. Clark Barrett and Sergey Berezin. CVC Lite: A new implementation of the cooperating validity checker. In Proceedings of the 16th International Conference On Computer Aided Verification, Boston, MA, July 2004.Google ScholarGoogle ScholarCross RefCross Ref
  4. Douglas Barry. Web Services and Service-Oriented Architectures: The Savvy Manager's Guide., chapter Service Oriented Architecture. Morgan Kaufmann Publishers, 2003. Google ScholarGoogle ScholarDigital LibraryDigital Library
  5. Chandrasekhar Boyapati, Sarfraz Khurshid, and Darko Marinov. Korat: Automated testing based on Java predicates. In Proc. International Symposium on Software Testing and Analysis (ISSTA), July 2002. Google ScholarGoogle ScholarDigital LibraryDigital Library
  6. B. Cahoon and K. McKinley. Recurrence analysis for effective array prefetching in java. Concurrency and Computation Practice and Experience, 17, February 2005. Google ScholarGoogle ScholarDigital LibraryDigital Library
  7. Brendon Cahoon. Effective Compile-Time Analysis for Data Prefetching in Java. PhD thesis, University of Massachusetts, Boston, MA, 2002. Google ScholarGoogle ScholarDigital LibraryDigital Library
  8. Edmund. M. Clarke, Orna Grumberg, and Doron~. A. Peled. Model Checking. The MIT Press, Cambridge, MA, 1999. Google ScholarGoogle ScholarDigital LibraryDigital Library
  9. Thomas H. Cormen, Charles E. Leiserson, and Ronald L. Rivest. Introduction to Algorithms. The MIT Press, Cambridge, MA, 1990. Google ScholarGoogle ScholarDigital LibraryDigital Library
  10. Brian Demsky. Data Structure Repair Using Goal-Directed Reasoning. PhD thesis, Massachusetts Institute of Technology, January 2006. Google ScholarGoogle ScholarDigital LibraryDigital Library
  11. Brian Demsky, Michael D. Ernst, Philip J. Guo, Stephen McCamant, Jeff H. Perkins, and Martin Rinard. Inference and enforcement of data structure consistency specifications. In Proc. International Symposium on Software Testing and Analysis (ISSTA), July 2006. Google ScholarGoogle ScholarDigital LibraryDigital Library
  12. Brian Demsky and Martin Rinard. Automatic detection and repair of errors in data structures. In Proc. Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA), 2003. Google ScholarGoogle ScholarDigital LibraryDigital Library
  13. Bassem Elkarablieh, Iván García, Yuk Lai Suen, and Sarfraz Khurshid. Assertion-based repair of structurally complex data. (Under submission).Google ScholarGoogle Scholar
  14. Bassem Elkarablieh, Yahya Zayour, and Sarfraz Khurshid. Efficiently generating structurally complex inputs with thousands of objects. In Proc. European Conference on Object-Oriented Programming (ECOOP), July 2007. Google ScholarGoogle ScholarDigital LibraryDigital Library
  15. Sanguthevar Rajasekaran Ellis Horowitz. Computer Algorithms. W. H. Freeman, second edition, 1997.Google ScholarGoogle Scholar
  16. Michael D. Ernst. Dynamically Discovering Likely Program Invariants. PhD thesis, University of Washington Department of Computer Science and Engineering, Seattle, Washington, August 2000. Google ScholarGoogle ScholarDigital LibraryDigital Library
  17. Iván García. Enabling symbolic execution of Java programs using bytecode instrumentation. Master's thesis, The University of Texas at Austin, May 2005.Google ScholarGoogle Scholar
  18. Patrice Godefroid. Model checking for programming languages using VeriSoft. In Proc. 24th Annual ACM Symposium on the Principles of Programming Languages (POPL), Paris, France, January 1997. Google ScholarGoogle ScholarDigital LibraryDigital Library
  19. Sudhakar Govindavajhala and Andrew W. Appel. Using memory errors to attack a virtual machine. In SP'03: Proceedings of the 2003 IEEE Symposium on Security and Privacy, 2003. Google ScholarGoogle ScholarDigital LibraryDigital Library
  20. G. Haugk, F. Lax, R. Royer, and J. Williams. The 5ESS(TM) switching system: Maintenance capabilities. AT&T Technical Journal, 64(6 part 2), 1985.Google ScholarGoogle Scholar
  21. Klaus Havelund and Thomas Pressburger. Model checking Java programs using Java PathFinder. International Journal on Software Tools for Technology Transfer, 1999.Google ScholarGoogle Scholar
  22. Gerald Holzmann. The model checker SPIN. IEEE Transactions on Software Engineering, 23(5), May 1997. Google ScholarGoogle ScholarDigital LibraryDigital Library
  23. Daniel Jackson. Micromodels of software: Modelling and analysis with Alloy, 2001.Google ScholarGoogle Scholar
  24. Daniel Jackson. Software Abstractions: Logic, Language and Analysis. The MIT Press, Cambridge, MA, 2006. Google ScholarGoogle ScholarDigital LibraryDigital Library
  25. B. Jobstmann, A. Griesmayer, and R. Bloem. Program repair as a game. In 17th Conference on Computer Aided Verification (CAV'05), 2005. Google ScholarGoogle ScholarDigital LibraryDigital Library
  26. Maria Jump and Kathryn S. McKinley. Cork: Dynamic memory leak detection for java. In Proc. 34th Annual ACM Symposium on the Principles of Programming Languages (POPL), 2007. Google ScholarGoogle ScholarDigital LibraryDigital Library
  27. Feras Karablieh, Rida A. Bazzi, and Margaret Hicks. Compiler-assisted heterogeneous checkpointing. In Symposium on Reliable Distributed Systems (SRDS), October 2001.Google ScholarGoogle ScholarCross RefCross Ref
  28. Sarfraz Khurshid, Iván García, and Yuk Lai Suen. Repairing structurally complex data. In Proc. 12th SPIN Workshop on Software Model Checking, 2005. Google ScholarGoogle ScholarDigital LibraryDigital Library
  29. Sarfraz Khurshid, Corina Pasareanu, and Willem Visser. Generalized symbolic execution for model checking and testing. In Proc. 9th Conference on Tools and Algorithms for Construction and Analysis of Systems (TACAS), Warsaw, Poland, April 2003. Google ScholarGoogle ScholarDigital LibraryDigital Library
  30. J. L. Kim and T. Park. An efficient protocol for checkpointing recovery in distributed systems. IEEE Transactions on Parallel and Distributed Systems, Aug 1993. Google ScholarGoogle ScholarDigital LibraryDigital Library
  31. James C. King. Symbolic execution and program testing. Communications of the ACM, 19(7), 1976. Google ScholarGoogle ScholarDigital LibraryDigital Library
  32. Tim Lindholm and Frank Yellin. The Java Virtual Machine Specification. Addison Wesley, second edition, 1999. Google ScholarGoogle ScholarDigital LibraryDigital Library
  33. Barbara Liskov and John Guttag. Program Development in Java: Abstraction, Specification, and Object-Oriented Design. Addison-Wesley, 2000. Google ScholarGoogle ScholarDigital LibraryDigital Library
  34. Muhammad Zubair Malik, Aman Pervaiz, and Sarfraz Khurshid. Generating representation invariants of structurally complex data. In Proc. 11th Conference on Tools and Algorithms for Construction and Analysis of Systems (TACAS), 2007. Google ScholarGoogle ScholarDigital LibraryDigital Library
  35. Darko Marinov. Automatic Testing of Software with Structurally Complex Inputs. PhD thesis, Computer Science and Artificial Intelligence Laboratory, Massachusetts Institute of Technology, 2004. Google ScholarGoogle ScholarDigital LibraryDigital Library
  36. Samiha Mourad and Dorothy Andrews. On the reliability of the IBM MVS/XA operating system. IEEE Transactions on Software Engineering, 13(10), 1987. Google ScholarGoogle ScholarDigital LibraryDigital Library
  37. Alexey Smirnov and Tzi-cker Chiueh. DIRA: Automatic detection, identification, and repair of control-hijacking attacks. In The 12th Annual Network and Distributed System Security Symposium, San Diego, CA, February 2005.Google ScholarGoogle Scholar
  38. William Stallings. Computer Organization and Architecture., chapter Cache Memory. Prentice-Hall, Englewood Cliffs, NJ, 2006.Google ScholarGoogle Scholar
  39. Yuk Lai Suen. Automatically repairing structurally complex data. Master's thesis, Department of Electrical and Computer Engineering, The University of Texas at Austin, May 2005.Google ScholarGoogle Scholar
  40. Willem Visser, Klaus Havelund, Guillaume Brat, and SeungJoon Park. Model checking programs. In Proc. 15th Conference on Automated Software Engineering (ASE), Grenoble, France, 2000. Google ScholarGoogle ScholarDigital LibraryDigital Library
  41. Tao Xie and David Notkin. Tool-assisted unit test generation and selection based on operational abstractions. Automated Software Engineering Journal, 2006. Google ScholarGoogle ScholarDigital LibraryDigital Library

Index Terms

  1. Starc: static analysis for efficient repair of complex data

            Recommendations

            Comments

            Login options

            Check if you have access through your login credentials or your institution to get full access on this article.

            Sign in

            Full Access

            • Published in

              cover image ACM SIGPLAN Notices
              ACM SIGPLAN Notices  Volume 42, Issue 10
              Proceedings of the 2007 OOPSLA conference
              October 2007
              686 pages
              ISSN:0362-1340
              EISSN:1558-1160
              DOI:10.1145/1297105
              Issue’s Table of Contents
              • cover image ACM Conferences
                OOPSLA '07: Proceedings of the 22nd annual ACM SIGPLAN conference on Object-oriented programming systems, languages and applications
                October 2007
                728 pages
                ISBN:9781595937865
                DOI:10.1145/1297027

              Copyright © 2007 ACM

              Publisher

              Association for Computing Machinery

              New York, NY, United States

              Publication History

              • Published: 21 October 2007

              Check for updates

              Qualifiers

              • article

            PDF Format

            View or Download as a PDF file.

            PDF

            eReader

            View online with eReader.

            eReader
            About Cookies On This Site

            We use cookies to ensure that we give you the best experience on our website.

            Learn more

            Got it!