Over time, a software system's architecture eventually deviates from the original designer's intent and degrades through unplanned introduction of changes that invalidate original design decisions. Architectural degradation increases the cost of making new modifications and decreases a system?s reliability, until engineers are no longer able to effectively evolve the system. At that point, the system's actual architecture may have to be recovered from the implementation artifacts, but this is a time-consuming and error-prone process, and leaves critical issues unresolved: the problems caused by architectural degradation will likely be obfuscated by the system?s many elements and their interrelationships, thus risking further degradation.
This collaborative project aims at pinpointing locations in a software system's architecture that reflect architectural degradation. The proposed research comprises four integrated research tasks: (1) Develop a catalog of commonly occurring symptoms of degradation. (2) Develop an architecture recovery technique that automatically extracts both a system's major building blocks and the concerns that influence, drive, and interact with these building blocks. (3) Devise a technique for formally capturing the recovered architectural design decisions, their involving concerns, and the identified causes of degradation. (4) Devise a suite of techniques that leverage the catalog to automatically identify system-specific instances of degradation. As a result, this project will have a potential for broad impact by providing a rigorous, scientific basis for software engineers to streamline the currently prohibitively expensive and error-prone system maintenance and evolution tasks.