Structure and Interpretation of Computer Programs
arXiv:0803.4025 · doi:10.1109/TASE.2008.40
Abstract
Call graphs depict the static, caller-callee relation between "functions" in a program. With most source/target languages supporting functions as the primitive unit of composition, call graphs naturally form the fundamental control flow representation available to understand/develop software. They are also the substrate on which various interprocedural analyses are performed and are integral part of program comprehension/testing. Given their universality and usefulness, it is imperative to ask if call graphs exhibit any intrinsic graph theoretic features -- across versions, program domains and source languages. This work is an attempt to answer these questions: we present and investigate a set of meaningful graph measures that help us understand call graphs better; we establish how these measures correlate, if any, across different languages and program domains; we also assess the overall, language independent software quality by suitably interpreting these measures.
9 pages, 10pt, double column, 15 figures
References in corpus (4)
Cited by in corpus (6)
- Software systems through complex networks science: Review, analysis and applications
- CrossCode: Multi-level Visualization of Program Execution
- Optimization as a design strategy. Considerations based on building simulation-assisted experiments about problem decomposition
- Wavefront Threading Enables Effective High-Level Synthesis
- Let's Take Esoteric Programming Languages Seriously
- An efficient high-quality hierarchical clustering algorithm for automatic inference of software architecture from the source code of a software system