9733569 More than ever, society relies on software systems that operate correctly. Modifying software systems to insure their reliability poses major technical and economic challenges. The difficulties that face software engineers include absent or incorrect documentation, poorly structured code, and the effort required to understand handed-down systems. To maintain software, one must recover, understand, correct, and maintain the design-level structure of the software. The goal of this research is to develop techniques and implement tools to simplify software maintenance. The proposed tools support three activities: first, design recovery to extract structural information from systems; second, design visualization to facilitate the viewing of recovered software structures; third, design maintenance to determine the quality of designs, identify problematic areas, measure the impact of software modifications, and so on. Central to our design maintenance approach is a formalism for specifying constraints on software structures. From these specifications, the design maintenance tools are automatically generated to detect violations of such constraints. Currently, in the absense of such tools, designers have difficulty preserving the structural integrity of systems that undergo continuous modification. The outcome of this work should benefit software practitioners and inspire educators to integrate software maintenance techniques and tools into their curricula.***