Section: New Results
Package understanding and Assessing
Participants : Stéphane Ducasse, Simon Denier, Nicolas Anquetil, Jannik Laval, Hani Abdeen.
Another way to support the understanding of large systems is to offer ways to understand and fix dependencies between software elements. We worked on how to semi-automatically reorganized packages to minimize coupling.
DSM Cycle identification and support. Dependency Structure Matrix (DSM) has been successfully applied to identify software dependencies among packages and subsystems. A number of algorithms were proposed to compute the matrix so that it highlights patterns and problematic dependencies between subsystems. However, existing DSM implementations often miss important information to fully support reengineering effort. For example, they do not clearly qualify and quantify problematic relationships, an information which is crucial to support remediation tasks. In  ,  we presented an enriched DSM (eDSM) where cells are enriched with contextual information about (i) the type of dependencies (inheritance, class reference...), (ii) the proportion of referencing entities, (iii) the proportion of referenced entities. We distinguish independent cycles and stress potentially simple fixes for cycles using color conventions. This work is language independent and has been implemented on top of the Moose reengineering environment. It has been applied to non-trivial case studies among which ArgoUML, and Morphic the UI framework available in two open-source Smalltalks (Squeak and Pharo). Solutions to actual modularization problems identified using our eDSM approach have been applied and retrofitted in the Pharo main distribution.
Automatic Package Coupling and Cycle Minimization. Object-oriented software is usually organized into subsystems using the concepts of package or module. Such modular structure helps applications to evolve when facing new requirements. However, studies show that as software evolves to meet requirements and environment changes, modularization quality degrades. To help maintainers improve the quality of software modularization we have designed and implemented a heuristic search-based approach for automatically optimizing inter-package connectivity (i.e., dependencies). In  we present our approach and its underlying techniques and algorithm based on Simulated Annealing technique. We show through a case study how it enables maintainers to optimize OO package structure of source code.