An interactive reverse engineering environment for large-scale C++ code

Few toolsets for reverse-engineering and understanding of C++ code provide parsing and fact extraction, querying, analysis and code metrics, navigation, and visualization of source-code-level facts in a way which is as easy-to-use as integrated development environments (IDEs) are for forward engineering. We present an interactive reverse-engineering environment (IRE) for C and C++ which allows to set up the fact extraction process, apply user-written queries and metrics, and visualize combined query results, metrics, code text, and code structure. Our IRE tightly couples a fast, tolerant C++ fact extractor, an open query system, and several scalable dense-pixel visualizations in a novel way, offering an easy way to analyze and examine large code bases. We illustrate our IRE with several examples, focusing on the added value of the integrated, visual reverse-engineering approach.

[1]  Michel Dagenais,et al.  Parsing C++ despite missing declarations , 1999, Proceedings Seventh International Workshop on Program Comprehension.

[2]  Danny Holten,et al.  Hierarchical Edge Bundles: Visualization of Adjacency Relations in Hierarchical Data , 2006, IEEE Transactions on Visualization and Computer Graphics.

[3]  Christopher W. Pidgeon,et al.  DMS®: Program Transformations for Practical Scalable Software Evolution , 2002, IWPSE '02.

[4]  Michael G. Burke,et al.  A practical method for LR and LL syntactic error diagnosis and recovery , 1987, TOPL.

[5]  George C. Necula,et al.  Elkhound: A Fast, Practical GLR Parser Generator , 2003, CC.

[6]  Richard C. Holt,et al.  Completeness of a fact extractor , 2003, 10th Working Conference on Reverse Engineering, 2003. WCRE 2003. Proceedings..

[7]  Jonathan I. Maletic,et al.  An XML-Based Lightweight C++ Fact Extractor , 2003, IWPC.

[8]  Georg Sander VCG - visualization of compiler graphs , 1995 .

[9]  Michele Lanza CodeCrawler - polymetric views in action , 2004, Proceedings. 19th International Conference on Automated Software Engineering, 2004..

[10]  Walter R. Bischofberger,et al.  Sniff—A Pragmatic Approach to a C++ Programming Environment 1 , 1992 .

[11]  Alexandru Telea,et al.  Combining Extended Table Lens and Treemap Techniques for Visualizing Tabular Data , 2006, EuroVis.

[12]  William J. Schroeder,et al.  The Visualization Toolkit , 2005, The Visualization Handbook.

[13]  Julian Smart,et al.  Cross-Platform GUI Programming with wxWidgets (Bruce Perens Open Source) , 2005 .

[14]  Julian Smart,et al.  Cross-Platform GUI Programming with wxWidgets , 2005 .

[15]  Hausi A. Müller,et al.  How do program understanding tools affect how programmers understand programs? , 1997, Proceedings of the Fourth Working Conference on Reverse Engineering.

[16]  Lucian Voinea,et al.  A Framework for Reverse Engineering Large C++ Code Bases , 2009, SQM@CSMR.

[17]  Paul Klint,et al.  Re-engineering needs generic programming language technology , 1997, SIGP.

[18]  F.J.A. Boerboom,et al.  Fact extraction, querying and visualization of large C++ code bases , 2006 .

[19]  G. Lommerse,et al.  The visual code navigator: an interactive toolset for source code investigation , 2005, IEEE Symposium on Information Visualization, 2005. INFOVIS 2005..

[20]  Alexandru Telea,et al.  Visualization of areas of interest in software architecture diagrams , 2006, SoftVis '06.

[21]  Stephen G. Eick,et al.  Seesoft-A Tool For Visualizing Line Oriented Software Statistics , 1992, IEEE Trans. Software Eng..

[22]  Russell W. Quong,et al.  ANTLR: A predicated‐LL(k) parser generator , 1995, Softw. Pract. Exp..

[23]  Björn Karlsson,et al.  Beyond the C++ Standard Library: An Introduction to Boost , 2005 .

[24]  Jonathan I. Maletic,et al.  An XML-based lightweight C++ fact extractor , 2003, 11th IEEE International Workshop on Program Comprehension, 2003..

[25]  Tibor Gyimóthy,et al.  Extracting facts from open source software , 2004, 20th IEEE International Conference on Software Maintenance, 2004. Proceedings..

[26]  Björn Karlsson,et al.  Beyond the C++ Standard Library , 2005 .

[27]  Stéphane Ducasse,et al.  Object-Oriented Metrics in Practice , 2005 .

[28]  Michele Lanza,et al.  Object-Oriented Metrics in Practice - Using Software Metrics to Characterize, Evaluate, and Improve the Design of Object-Oriented Systems , 2006 .