|dc.description.abstract||An object-oriented software system is composed of a collection of
communicating objects that co-operate with one another to achieve some desired
goals. The object is the basic unit of abstraction in an OO program; objects
may model real-world entities or internal abstractions of the system. Similar
objects forms classes, which encapsulate the data and operations performed on
the data. Therefore, extracting, analyzing, and modelling classes/objects and
their relationships is of key importance in understanding and maintaining
object-oriented software systems. However, when dealing with large and complex
object-oriented systems, maintainers can easily be overwhelmed by the vast
number of classes/objects and the high degree of interdependencies among them.
In this thesis, we propose a new model, which we call the Hybrid Model, to
represent object-oriented systems at a coarse-grained level of abstraction. To
promote the comprehensibility of objects as independent units, we group the
complete static description of software objects into aggregate components. Each
aggregate component logically represents a set of objects, and the components
interact with one other through explicitly defined ports.
We present and discuss several applications of the Hybrid Model in reverse
engineering and software evolution.
The Hybrid Model can be used to support a divide-and-conquer comprehension
strategy for program comprehension. At a low level of abstraction, maintainers
can focus on one aggregate-component at a time, while at a higher level, each
aggregate component can be understood as a whole and be mapped to
coarse-grained design abstractions, such as subsystems.
Based on the new model, we further propose a set of dependency analysis
methods. The analysis results reveal the external properties of aggregate
components, and lead to better understand the nature of their
In addition, we apply the new model in software evolution analysis. We identify
a collection of change patterns in terms of changes in aggregate components and
their interrelationships. These patterns help to interpret how an evolving
system changes at the architectural level, and provides valuable information to
understand why the system is designed as the way it is.||en