Hierarchical Software Analysis to Support Software Development and Evolution
Modern software systems are composed hierarchically from parts: multiple procedures compose programs, multiple programs compose components, multiple components compose subsystems, multiple subsystems compose systems. At each level of the composition hierarchy, formal, mathematically-based languages similar to programming languages, are used to describe and define the elements and their interconnections. And, at each level the nature of the software elements and their interconnections vary, requiring different approaches to static analysis. Our hierarchical model for static analysis is based on the identification and packaging of analytic assets at each level of the composition hierarchy and their use in compositional analysis appropriate for identifying dependencies among elements at that level. In this talk we describe our scalable, efficient model for developing hierarchical static analysis techniques to support composition and evolution of software systems and exemplify the model's use to develop CCDA, our compositional technique for identifying control dependencies among program statements.