Single versus multiple inheritance in object oriented programming
ACM SIGPLAN OOPS Messenger
Design patterns: elements of reusable object-oriented software
Design patterns: elements of reusable object-oriented software
Handbook of graph grammars and computing by graph transformation: volume I. foundations
Handbook of graph grammars and computing by graph transformation: volume I. foundations
AntiPatterns: refactoring software, architectures, and projects in crisis
AntiPatterns: refactoring software, architectures, and projects in crisis
Refactoring: improving the design of existing code
Refactoring: improving the design of existing code
Object-Oriented Design Heuristics
Object-Oriented Design Heuristics
Patterns of Enterprise Application Architecture
Patterns of Enterprise Application Architecture
CSMR '01 Proceedings of the Fifth European Conference on Software Maintenance and Reengineering
Designing software for ease of extension and contraction
ICSE '78 Proceedings of the 3rd international conference on Software engineering
OOPSLA '04 Companion to the 19th annual ACM SIGPLAN conference on Object-oriented programming systems, languages, and applications
Efficient Relational Calculation for Software Analysis
IEEE Transactions on Software Engineering
Search-Based Software Maintenance
CSMR '06 Proceedings of the Conference on Software Maintenance and Reengineering
Proceedings of the 8th annual conference on Genetic and evolutionary computation
Classics in software engineering
High-impact Refactoring Based on Architecture Violations
CSMR '07 Proceedings of the 11th European Conference on Software Maintenance and Reengineering
Cluster analysis of Java dependency graphs
Proceedings of the 4th ACM symposium on Software visualization
Design Pattern Formalization Techniques
Design Pattern Formalization Techniques
Identifying Architectural Bad Smells
CSMR '09 Proceedings of the 2009 European Conference on Software Maintenance and Reengineering
Identification of Move Method Refactoring Opportunities
IEEE Transactions on Software Engineering
The Qualitas Corpus: A Curated Collection of Java Code for Empirical Studies
APSEC '10 Proceedings of the 2010 Asia Pacific Software Engineering Conference
QoSA'10 Proceedings of the 6th international conference on Quality of Software Architectures: research into Practice - Reality and Gaps
Towards extensive software architecture erosion repairs
ECSA'13 Proceedings of the 7th European conference on Software Architecture
Towards flexible automated software architecture erosion diagnosis and treatment
Proceedings of the WICSA 2014 Companion Volume
Quality-Aware Refactoring for Early Detection and Resolution of Energy Deficiencies
UCC '13 Proceedings of the 2013 IEEE/ACM 6th International Conference on Utility and Cloud Computing
Hi-index | 0.00 |
The refactoring of large systems is difficult, with the possibility of many refactorings having to be done before any useful benefit is attained. We present a novel approach to detect starting points for the architectural refactoring of large and complex systems based on the analysis and manipulation of the type dependency graph extracted from programs. The proposed algorithm is based on the simultaneous analysis of multiple architectural antipatterns, and outputs dependencies between artefacts that participate in large numbers of instances of these antipatterns. If these dependencies can be removed, they represent high-impact refactoring opportunities: a small number of changes that have a major impact on the overall quality of the system, measured by counting architectural antipattern instances. The proposed algorithm is validated using an experiment where we analyse a set of 95 open-source Java programs for instances of four architectural patterns representing modularisation problems. We discuss some examples demonstrating how the computed dependencies can be removed from programs. This research is motivated by the emergence of technologies such as dependency injection frameworks and dynamic component models. These technologies try to improve the maintainability of systems by removing dependencies between system parts from program source code and managing them explicitly in configuration files.