Foundations for the study of software architecture
ACM SIGSOFT Software Engineering Notes
Design patterns: elements of reusable object-oriented software
Design patterns: elements of reusable object-oriented software
ICSE '94 Proceedings of the 16th international conference on Software engineering
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
Design erosion: problems and causes
Journal of Systems and Software
IEEE Software
Editorial: software architecture - Engineering quality attributes
Journal of Systems and Software - Special issue on: Software architecture - Engineering quality attributes
A Survey of Software Refactoring
IEEE Transactions on Software Engineering
Effective C++: 55 Specific Ways to Improve Your Programs and Designs (3rd Edition)
Effective C++: 55 Specific Ways to Improve Your Programs and Designs (3rd Edition)
Comparing Uniform and Flexible Policies for Software Maintenance and Replacement
IEEE Transactions on Software Engineering
Journal of Software Maintenance and Evolution: Research and Practice
Evolution in software systems: foundations of the SPE classification scheme: Research Articles
Journal of Software Maintenance and Evolution: Research and Practice
Towards engineered architecture evolution
MISE '09 Proceedings of the 2009 ICSE Workshop on Modeling in Software Engineering
DECOR: A Method for the Specification and Detection of Code and Design Smells
IEEE Transactions on Software Engineering
Microsoft Application Architecture Guide
Microsoft Application Architecture Guide
A classification of value for software architecture decisions
ECSA'10 Proceedings of the 4th European conference on Software architecture
Empirical software evolvability - code smells and human evaluations
ICSM '10 Proceedings of the 2010 IEEE International Conference on Software Maintenance
Hi-index | 0.00 |
Much work has been done on the subject of what happens to software architecture during maintenance activities. There seems to be a consensus that it degrades during the evolution of the software. More recent work shows that this degradation occurs even during development activities: design decisions are either adjusted or forgotten. Some studies have looked into the causes of this degradation, but these have mostly done so at a very high level. This study examines three projects at code level. Three architectural pre-implementation designs are compared with their post-implementation design counterparts, with special attention paid to the causes of the changes. We found many negative changes causing anti-patterns, at the package, class, and method levels. After analysis of the code, we were able to find the specific reasons for the poor design decisions. Although the underlying causes are varied, they can be grouped into three basic categories: knowledge problems, artifact problems, and management problems. This categorization shows that anti-pattern causes are varied and are not all due to the developers. The main conclusion is that promoting awareness of anti-patterns to developers is insufficient to prevent them since some of the causes escape their grasp.