Dynamic program analysis - Reconciling developer productivity and tool performance

Abstract Dynamic program analysis tools serve many important software engineering tasks such as profiling, debugging, testing, program comprehension, and reverse engineering. Many dynamic analysis tools rely on program instrumentation and are implemented using low-level instrumentation libraries, resulting in tedious and error-prone tool development. Targeting this issue, we have created the Domain-Specific Language for Instrumentation (DiSL), which offers high-level programming abstractions especially designed for instrumentation-based dynamic analysis. When designing DiSL, our goal was to boost the productivity of tool developers targeting the Java Virtual Machine, without impairing the performance of the resulting tools. In this paper we assess whether DiSL meets this goal. First, we perform a controlled experiment to measure tool development time and correctness of the developed tools, comparing DiSL with a prevailing, state-of-the-art instrumentation library. Second, we recast 10 open-source software engineering tools in DiSL and compare source code metrics and performance with the original implementations. Our studies show that DiSL significantly improves developer productivity, enables concise tool implementations, and does not have any negative impact on tool performance.

[1]  Eileen Kraemer,et al.  Designing your Next Empirical Study on Program Comprehension , 2007, 15th IEEE International Conference on Program Comprehension (ICPC '07).

[2]  Walter Binder,et al.  DiSL: a domain-specific language for bytecode instrumentation , 2012, AOSD.

[3]  Paul H. J. Kelly,et al.  Profiling with AspectJ , 2007 .

[4]  Gregg Rothermel,et al.  Sofya: Supporting Rapid Development of Dynamic Program Analyses for Java , 2007, 29th International Conference on Software Engineering (ICSE'07 Companion).

[5]  Shigeru Chiba,et al.  Load-Time Structural Reflection in Java , 2000, ECOOP.

[6]  Amer Diwan,et al.  The DaCapo benchmarks: java benchmarking development and analysis , 2006, OOPSLA '06.

[7]  Guy L. Steele,et al.  Java(TM) Language Specification, The (3rd Edition) (Java (Addison-Wesley)) , 2005 .

[8]  Mira Mezini,et al.  Turbo DiSL: Partial Evaluation for High-Level Bytecode Instrumentation , 2012, TOOLS.

[9]  David Holmes,et al.  Java Concurrency in Practice , 2006 .

[10]  Mira Mezini,et al.  Taming reflection: Aiding static analysis in the presence of reflection and custom class loaders , 2011, 2011 33rd International Conference on Software Engineering (ICSE).

[11]  James R. Larus,et al.  Exploiting hardware performance counters with flow and context sensitive profiling , 1997, PLDI '97.

[12]  Alfred V. Aho,et al.  Debugging Aspect-Enabled Programs , 2007, SC@ETAPS.

[13]  Mira Mezini,et al.  new Scala() instance of Java: a comparison of the memory behaviour of Java and Scala programs , 2012, ISMM '12.

[14]  Michael D. Ernst,et al.  ReCrash: Making Software Failures Reproducible by Preserving Object States , 2008, ECOOP.

[15]  Romain Robbes,et al.  Software systems as cities: a controlled experiment , 2011, 2011 33rd International Conference on Software Engineering (ICSE).

[16]  Arie van Deursen,et al.  A Controlled Experiment for Program Comprehension through Trace Visualization , 2011, IEEE Transactions on Software Engineering.

[17]  Eric Bodden,et al.  Aspect-Oriented Race Detection in Java , 2010, IEEE Transactions on Software Engineering.

[18]  Stephen N. Freund,et al.  The RoadRunner Dynamic Analysis Framework for Concurrent Programs , 2010, PASTE '10.

[19]  Cristina V. Lopes,et al.  Aspect-oriented programming , 1999, ECOOP Workshops.

[20]  Petr Tuma,et al.  Productive Development of Dynamic Program Analysis Tools with DiSL , 2013, 2013 22nd Australian Software Engineering Conference.

[21]  Laurie J. Hendren,et al.  Optimizing Java Bytecode Using the Soot Framework: Is It Feasible? , 2000, CC.

[22]  Shigeru Chiba,et al.  Josh: an open AspectJ-like language , 2004, AOSD '04.

[23]  Walter Binder,et al.  @J: towards rapid development of dynamic analysis tools for the Java Virtual Machine , 2009, VMIL '09.

[24]  Eric Bodden,et al.  Racer: effective race detection using aspectj , 2008, ISSTA '08.

[25]  Atanas Rountev,et al.  Precise memory leak detection for java software using container profiling , 2013, 2008 ACM/IEEE 30th International Conference on Software Engineering.

[26]  Walter Binder,et al.  Platform‐independent profiling in a virtual execution environment , 2009, Softw. Pract. Exp..

[27]  Walter Binder,et al.  Platform-independent profiling in a virtual execution environment , 2009 .

[28]  Gregor Kiczales,et al.  Aspect-oriented programming , 2001, ESEC/FSE-9.

[29]  Mira Mezini,et al.  JP2: Call-site aware calling context profiling for the Java Virtual Machine , 2014, Sci. Comput. Program..

[30]  Guy L. Steele,et al.  The Java Language Specification , 1996 .

[31]  Oscar Nierstrasz,et al.  Exploiting Dynamic Information in IDEs Improves Speed and Correctness of Software Maintenance Tasks , 2012, IEEE Transactions on Software Engineering.