Interprocedural optimization: eliminating unnecessary recompilation
SIGPLAN '86 Proceedings of the 1986 SIGPLAN symposium on Compiler construction
Rigi-A system for programming-in-the-large
ICSE '88 Proceedings of the 10th international conference on Software engineering
Constructing the Procedure Call Multigraph
IEEE Transactions on Software Engineering
The C Information Abstraction System
IEEE Transactions on Software Engineering
The C programming language
ACM Letters on Programming Languages and Systems (LOPLAS)
Constructing call multigraphs using dependence graphs
POPL '93 Proceedings of the 20th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
How Accurate is Scientific Software?
IEEE Transactions on Software Engineering
A practical interprocedural data flow analysis algorithm
Communications of the ACM
Efficient computation of flow insensitive interprocedural summary information
SIGPLAN '84 Proceedings of the 1984 SIGPLAN symposium on Compiler construction
The Field Programming Environment: A Friendly Integrated Environment for Learning and Development
The Field Programming Environment: A Friendly Integrated Environment for Learning and Development
A precise inter-procedural data flow algorithm
POPL '81 Proceedings of the 8th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
An efficient way to find the side effects of procedure calls and the aliases of variables
POPL '79 Proceedings of the 6th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Lightweight lexical source model extraction
ACM Transactions on Software Engineering and Methodology (TOSEM)
Separate Computation of Alias Information for Reuse
IEEE Transactions on Software Engineering - Special issue: best papers of the 1996 international symposium on software testing and analysis ISSTA'96
Documenting virtual communities
SIGDOC '96 Proceedings of the 14th annual international conference on Systems documentation: Marshaling new technological forces: building a corporate, academic, and user-oriented triangle
Strategic directions in software engineering and programming languages
ACM Computing Surveys (CSUR) - Special ACM 50th-anniversary issue: strategic directions in computing research
A C++ data model supporting reachability analysis and dead code detection
ESEC '97/FSE-5 Proceedings of the 6th European SOFTWARE ENGINEERING conference held jointly with the 5th ACM SIGSOFT international symposium on Foundations of software engineering
An empirical study of static call graph extractors
ACM Transactions on Software Engineering and Methodology (TOSEM)
IBM Systems Journal
A C++ Data Model Supporting Reachability Analysis and Dead Code Detection
IEEE Transactions on Software Engineering
Reverse engineering: a roadmap
Proceedings of the Conference on The Future of Software Engineering
Advances in software engineering
The Effectiveness of Control Structure Diagrams in Source Code Comprehension Activities
IEEE Transactions on Software Engineering
The canonical activities of reverse engineering
Annals of Software Engineering
Playing Detective: Reconstructing Software Architecture from Available Evidence
Automated Software Engineering
An Empirical Analysis of C Preprocessor Use
IEEE Transactions on Software Engineering
From relational program dependencies to hypertextual access structures
Nordic Journal of Computing
Software architecture recovery using Conway's law
CASCON '98 Proceedings of the 1998 conference of the Centre for Advanced Studies on Collaborative research
View Extraction and View Fusion in Architectural Understanding
ICSR '98 Proceedings of the 5th International Conference on Software Reuse
ETV: a program trace player for students
ITiCSE '05 Proceedings of the 10th annual SIGCSE conference on Innovation and technology in computer science education
Toward mining "concept keywords" from identifiers in large software projects
MSR '05 Proceedings of the 2005 international workshop on Mining software repositories
Effective pattern matching of source code using abstract syntax patterns
Software—Practice & Experience
PASTE '07 Proceedings of the 7th ACM SIGPLAN-SIGSOFT workshop on Program analysis for software tools and engineering
An Iterative Framework for Software Architecture Recovery: An Experience Report
ECSA '08 Proceedings of the 2nd European conference on Software Architecture
Continuous social screencasting to facilitate software tool discovery
Proceedings of the 34th International Conference on Software Engineering
Hi-index | 0.00 |
Informally, a call graph represents calls between entities in a given program. The call graphs that compilers compute to determine the applicability of an optimization must typically be conservative: a call may be omitted only if it can never occur an any execution of the program. Numerous software engineering tools also extract call graphs, with the expectation that they will help software engineers increase their understanding of a program. The requirements placed on software engineering tools when computing call graphs are typically more related than for compilers. For example, some false negatives-calls that can in fact take place in some execution of the program, but which are omitted from the call graph-may be acceptable, depending on the understanding task at hand. In this paper we empirically show a consequence of this spectrum of requirements by comparing the C call graphs extracted from three software systems (mapmaker, mosaic, and gee) by five extraction tools (cflow, CIA, Field, mk-functmap, and rigiparse). A quantitative analysis of the call graphs extracted for each system shows considerable variation, a result that is counterintuitive to many experienced software engineers. A qualitative analysis of these results reveals a number of reasons for this variation: differing treatments of macros, function pointers, input formats, etc. We describe and discuss the study, sketch the design space, and discuss the impact of our study on practitioners, tool developers, and researchers.