Ewan Tempero: Project Areas
My research area is measuring design quality, which is in the
general area of Software Metrics. The main research question is,
how can we tell when the design of a piece of software is "good" or "bad"?
Implicit in this question is the question "What does it mean for software to
be `good'?"
A considerable amount of research has gone into "measuring the goodness
of software", where "good" means "has few or no defects (bugs)". However,
it is well known that, over the lifetime of a software application, most of
the cost of the software is in changing software to cope with new
requirements, or a changing environment, not fixing bugs. This means it is
possible to have software with new or no bugs, and yet it still isn't "good"
because it costs too much to keep going.
Maintainability is the attribute of how much software costs
after it has been deployed. It's generally believed that the internal
structure of code, for example what classes are chosen and how they relate
to each other, impacts maintainability. There are many hypotheses as to what
this relationship is, for example, "high coupling between classes leads to
high maintenance costs" or "proper use of design patterns leads to low
maintenance costs". However there is only weak evidence to support them.
What I am interested in doing is to gather evidence to support (or
refute) the various hypothesis and developing new ways to measure design
quality (and then gathering evidence to show they work). There are a number
of honours projects that would fit. Including:
-
Creating a new form of measurement
-
Applying existing forms of measurement to existing code. There are a
bazillion forms of measurement to consider, some more interesting than
others, and most have only been applied to a small number of applications
and usually in a single language. An question that has had very little
research done on is, does the language matter? If we compare Java, C#, and
Python, do we see different things?
-
Visualise the results. In a recent project, we applied more than
20 forms of measurement to every class in about 80 applications.
Some of those applications had over 10,000 classes. That's a lot
of data. How do we understand what it all means? One popular way
is to create different kinds of visualisations (pictures) of the
data that are designed to aid comprehension in some way. An
interesting variation on this is to do the visualisations in a web
environment, using web-based visualisation technologies such as
X3D.
I'm also happy to supervise any projects related to Software Engineering. In
particular, I have had a number of very successful projects creating
plug-ins for Eclipse doing different interesting things.
You can get a good
idea of the kinds of projects I like by looking at
projects I have supervised.