analyzing dynamic call graphs enhanced with program state information for feature location and understanding
In this paper we present a prototype tool for locating and understanding features in unfamiliar source code of complex C/C++ software systems. The key concepts of the analysis tool are (1) combining dynamic function call graphs with information on the functions' containment within hierarchically structured modules and (2) providing means of gathering program state information on user-defined locations within the call graph. Starting from a typically huge dynamic call graph logged during feature execution, developers narrow their search for functions implementing the feature's core functionality by successively pruning the graph from feature-irrelevant functions. The assessment whether a function contributes to a feature is performed on various levels of abstraction, namely on (1) module containment, (2) on the function's call relations, and (3) on the way it modifies data. Having sorted out feature-irrelevant functions this way, users are able to analyze the remaining, probably highly feature-relevant functions with other heavy-weight analysis techniques, such as debugging techniques, to get a deep understanding of the feature implementation.
feature location dynamic analysis software visualization reverse engineering concept assignment maintenance