← All teaching notes

MODEL-DRIVEN ENGINEERING

Connecting source code and models

Why reverse engineering matters for existing software.

Source code describes a system in detail, but detail alone does not make a system easy to understand. When maintaining an unfamiliar application, a developer also needs to understand its concepts, relationships, and behavior.

Two views of the same system

A model can emphasize structure or behavior while leaving some implementation details aside. Source code provides the executable implementation. Moving between these views can support understanding, analysis, and communication.

What reverse engineering contributes

Reverse engineering begins with an existing system and derives information about its design. For example, inspecting classes may reveal associations and inheritance, while examining method bodies helps explain behavior.

A useful representation must preserve the information needed for its purpose. A class diagram alone cannot express every detail of a method’s behavior, and a generated model is not automatically an accurate account of the original design intent.

Where ALF fits

The Action Language for Foundational UML, or ALF, provides a textual way to express behavior for UML-based modeling. It is relevant to the connection between programming constructs and model-level behavior.

My publication, Reverse Engineering of Object Oriented Systems to ALF, sits within this area. The publication page provides the formal research reference.

Explore the research ↗

A classroom question

When converting code into a model, what must be preserved for the model to remain useful—and what can be abstracted away?
← More teaching notesDiscuss this topic ↗