Maintaining Evolving Component-Based Software with UML Ye Wu and Jeff Offutt Information and Software Engineering Department George Mason University Fairfax, VA 22030, USA (703) 993-1651 {wuye, ofut}@ise.gmu.edu Abstract Component-based software engineering has been increasingly adopted for software development. This approach relies on using reusable components as the building blocks for constructing software. On the one hand, this helps improve software quality and productivity; on the other hand, it necessitates frequent maintenance activities, such as upgrading third party components or adding new features. The cost of maintenance for conventional software can account for as much as two-thirds of the total cost, and it is likely to be more for component-based software. Thus, an effective maintenance technique for component-based software is strongly desired. This paper presents a UML-based technique that attempts to help resolve difficulties introduced by the implementation transparent characteristics of component-based software systems. This technique can also be useful for other maintenance activities. For corrective maintenance activities, the technique starts with UML diagrams that represent changes to a component, and uses them to support regression testing. To accommodate this approach for perfective maintenance activities, more challenges are encountered. We provide a UML-based framework to evaluate the similarities of the old and new components, and corresponding retesting strategies are provided. Keywords Component-based software, software maintenance, program analysis 1. Introduction Component-based software development facilitates software reuse and promotes quality and productivity. This “building-block” approach has been increasingly adopted for software devel- opment, especially for large-scale applications. Much work has been devoted to developing in- frastructure for the construction of component-based software [5, 14, 24, 27, 29, 36]. The aims of