Date Added: Feb 2010
Software architecture erosion is a general problem in legacy software. Because they don't know or don't understand the original architectural intent, maintainers introduce changes that violate the intended architecture and properties. To fight this trend, component models and languages are designed to try to make explicit, and automatically enforceable, the architectural decisions in terms of components, interfaces, and allowed communication channels between component interfaces. But, what about existing systems written in traditional (e.g. object-oriented) languages? To help maintainers work on such systems, the paper explores the possibility of extracting architectural elements (components, communications, services,. ..) from the source code. Some extraction heuristics are proposed and experimented on several implementations of a nontrivial system.