Slicing concurrent Java programs using Indus and Kaveri

Special section FASE'04/05

Abstract

Program slicing is a program analysis and transformation technique that has been successfully used in a wide range of applications including program comprehension, debugging, maintenance, testing, and verification. However, there are only few fully featured implementations of program slicing that are available for industrial applications or academic research. In particular, very little tool support exists for slicing programs written in modern object-oriented languages such as Java, C#, or C++. In this paper, we present Indus—a robust framework for analyzing and slicing concurrent Java programs, and Kaveri—a feature-rich Eclipse-based GUI front end for Indus slicing. For Indus, we describe the underlying tool architecture, analysis components, and program dependence capabilities required for slicing. In addition, we present a collection of advanced features useful for effective slicing of Java programs including calling-context sensitive slicing, scoped slicing, control slicing, and chopping. For Kaveri, we discuss the design goals and basic capabilities of the graphical facilities integrated into a Java development environment to present the slicing information. This paper is an extended version of a tool demonstration paper presented at the International Conference on Fundamental Aspects of Software Engineering (FASE 2005). Thus, the paper highlights tool capabilities and engineering issues and refers the reader to other papers for technical details.

Keywords

Program slicing Program dependences Concurrent Java Indus Kaveri 

Preview

Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.

References

  1. 1.
    Agarwal, H., Horgan, J.H.: Dynamic program slicing. In: Proceedings of the ACM SIGPLAN 1990 Conference on Programming Language Design and Implementation (PLDI’90), pp. 246–256 (1990)Google Scholar
  2. 2.
    Bacon, D.F., Sweeney, P.F.: Fast static analysis of C++ virtual function calls. In: Proceedings of the 11th ACM SIGPLAN Conference on Object-oriented Programming, Systems, Languages, and Applications (OOPSLA’96), pp. 324–341 (1996)Google Scholar
  3. 3.
    Binkley D. (1997). Semantics guided regression test cost reduction. IEEE Trans. Softw. Eng. 23(8): 489–516 CrossRefGoogle Scholar
  4. 4.
    Brat, G., Havelund, K., Park, S., Visser, W.: Java PathFinder—a second generation of a Java model-checker. In: Proceedings of the Workshop on Advances in Verification (2000)Google Scholar
  5. 5.
    Corbett, J.C., Dwyer, M.B., Hatcliff, J., Laubach, S., Păsăreanu, C.S., Robby, Zheng, H.: Bandera: Extracting finite-state models from Java source code. In: Proceedings of the 22nd International Conference on Software Engineering (ICSE’00), pp. 439–448 (2000)Google Scholar
  6. 6.
    Dwyer, M.B., Hatcliff, J.: Slicing software for model construction. In: Proceedings of Partial Evaluation and Semantic-Based Program Manipulation (PEPM’99), pp. 105–118 (1999)Google Scholar
  7. 7.
    Dwyer, M.B., Hatcliff, J., Hoosier, M., Ranganath, V., Robby, Wallentine, T.: Evaluating the effectiveness of slicing for model reduction of concurrent object-oriented programs. In: Proceedings of International Conference on Tools and Algorithms for the Construction and Analysis of Systems (TACAS’06), pp. 73–89 (2006)Google Scholar
  8. 8.
    Dwyer, M.B., Person, S., Elbaum, S.: Controlling factors in evaluating path-sensitive error detection techniques. In: Proceedings of the ACM SIGSOFT Symposium on Foundations of Software Engineering (2006)Google Scholar
  9. 9.
    Hammer, C., Snelting, G.: An improved slicer for Java. In: Proceedings of the ACM-SIGPLAN-SIGSOFT Workshop on Program Analysis for Software Tools and Engineering (PASTE’04), pp. 17–22 (2004)Google Scholar
  10. 10.
    Hatcliff, J., Corbett, J.C., Dwyer, M.B., Sokolowski, S., Zheng, H.: A formal study of slicing for multi-threaded programs with JVM concurrency primitives. In: Proceedings of the 1999 International Symposium on Static Analysis (SAS’99), Lecture Notes in Computer Science, pp. 1–18 (1999)Google Scholar
  11. 11.
    Hatcliff, J., Dwyer, M.B., Zheng, H.: Slicing software for model construction. J. Higher-order Symbolic Comput. 13(4), 315–353 (2000). A special issue containing selected papers from the 1999 ACM SIGPLAN Workshop on Partial Evaluation and Program ManipulationGoogle Scholar
  12. 12.
    Henzinger, T.A., Jhala, R., Majumdar, R., Sutre, G.: Lazy abstraction. In: Proceedings of the 29th Annual Symposium on Principles of Programming Languages (POPL’02), pp. 75–83 (2002)Google Scholar
  13. 13.
    Horwitz, S., Pfeiffer, P., Reps, T.W.: Dependence analysis for pointer variables. In: Proceedings of the ACM SIGPLAN ’89 Conference on Programming Language Design and Implementation (PLDI’89), pp. 28–40 (1989)Google Scholar
  14. 14.
    Horwitz S., Reps T. and Binkley D. (1990). Interprocedural slicing using dependence graphs. ACM Trans. Programm. Language Systems 12(1): 26–60 CrossRefGoogle Scholar
  15. 15.
    Krinke, J.: Static slicing of threaded programs. In: Proceedings ACM SIGPLAN/SIGFSOFT Workshop on Program Analysis for Software Tools and Engineering (PASTE’98), pp. 35–42 (1998)Google Scholar
  16. 16.
    Krinke, J.: Advanced slicing of Sequential and concurrent programs. Ph.D. thesis, Fakultät für Mathematik und Informatik, Universität Passau (2003)Google Scholar
  17. 17.
    Krinke, J.: Barrier slicing and chopping. In: Proceedings of Third IEEE International Workshop on Source Code Analysis and Manipulation (SCAM’03), pp. 81–87 (2003)Google Scholar
  18. 18.
    Krinke, J.: Context-sensitive slicing of concurrent programs. In: Proceedings of ESEC/SIGSOFT FSE’03, pp. 178–187 (2003)Google Scholar
  19. 19.
    Krinke, J.: Context-sensitivity matters, but context does not. In: Proceedings of Fourth IEEE International Workshop on Source Code Analysis and Manipulation (SCAM’04), pp. 29–35 (2004)Google Scholar
  20. 20.
    Kumar, S., Horwitz, S.: Better slicing of programs with jumps and switches. In: Proceedings of Fundamental Approaches of Software Engineering (FASE’02), pp. 96–112 (2002)Google Scholar
  21. 21.
    Liang, D., Harrold, M.J.: Efficient computation of parameterized pointer information for interprocedural analyses. In: Proceedings 8th International Static Analysis Symposium (SAS’01), pp. 279–298 (2001)Google Scholar
  22. 22.
    Millett, L.I., Teitelbaum, T.: Slicing Promela and its applications to model checking, simulation, and protocol understanding. In: Proceedings of the 4th International SPIN Workshop (SPIN’98) (1998)Google Scholar
  23. 23.
    Nanda, M.G.: Slicing concurrent Java programs: issues and solutions. Ph.D. thesis, Indian Institute of Technology, Bombay (2001)Google Scholar
  24. 24.
    Nanda, M.G., Ramesh, S.: Slicing concurrent programs. In: Proceedings of International Symposium on Software Testing and Analysis (ISSTA’00), pp. 180–190 (2000)Google Scholar
  25. 25.
    Ottenstein, K., Ottenstein, L.: The program dependence graph in a software development environment. In: Proceedings of ACM SIGPLAN/SIGSOFT Symposium on Practical Software Development Environments (PPDE’84), pp. 177–184 (1984)Google Scholar
  26. 26.
    Podgurski A. and Clarke L. (1990). A formal model of program dependences and its implications for software testing, debugging and maintenance. IEEE Trans. Softw. Eng. 16(8): 965–979 CrossRefGoogle Scholar
  27. 27.
    Ranganath, V.P.: Object-flow analysis for optimizing finite-state models of Java software. Master’s thesis, Department of Computing and Information Science, Kansas State University (2002)Google Scholar
  28. 28.
    Ranganath, V.P.: Scalable and accurate approaches to program dependence analysis, slicing, and verification of concurrent object oriented programs. Ph.D. thesis, Department of Computing and Information Science, Kansas State University (2006)Google Scholar
  29. 29.
    Ranganath, V.P., Amtoft, T., Banerjee, A., Dwyer, M.B., Hatcliff, J.: A new foundation for control-dependence and slicing for modern program structures. In: Programming Languages and Systems, Proceedings of 14th European Symposium on Programming (ESOP’05) (2005). Extended version is available at http://projects.cis.ksu.edu/docman/?group_id=12Google Scholar
  30. 30.
    Ranganath, V.P., Hatcliff, J.: Pruning interference and ready dependences for slicing concurrent Java programs. In: Proceedings of Compiler Construction (CC’04), pp. 39–56 (2004)Google Scholar
  31. 31.
    Ren, X., Shah, F., Tip, F., Ryder, B.G., Chesley, O.: Chianti: a tool for change impact analysis of java programs. In: Proceedings of the 19th Annual ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA’04), pp. 432–448 (2004)Google Scholar
  32. 32.
    Ruf, E.: Effective synchronization removal for Java. In: Proceedings of the ACM SIGPLAN 2000 Conference on Programming Language Design and Implementation (PLDI’00), pp. 208–218 (2000)Google Scholar
  33. 33.
    Tip F. (1995). A survey of program slicing techniques. J Program. Languages 3: 121–189 Google Scholar
  34. 34.
    Vallée-Rai, R.: SOOT: A Java bytecode optimization framework. Master’s thesis, School of Computer Science, McGill University (2000)Google Scholar
  35. 35.
    Wang, Z., Elbaum, S., Rosenblum, D.: Automated generation of context-aware tests. Accepted at the International Conference on Software Engineering (ICSE’07) (2007)Google Scholar
  36. 36.
    Weiser M. (1984). Program slicing. IEEE Trans. Softw. Eng. 10(4): 352–357 CrossRefGoogle Scholar

Copyright information

© Springer-Verlag 2007

Authors and Affiliations

  1. 1.Department of Computing and Information SciencesKansas State UniversityManhattanUSA

Personalised recommendations