Towards Programming Tool Support for Reuse
Robert Biddle and Ewan Tempero
Victoria University of Wellington, New Zealand
robert,ewan@mcs.vuw.ac.nz
http://www.mcs.vuw.ac.nz/research/renata/
June 1998
Many approaches are being pursued to improve the effectiveness
of software developers. Two important strategies are the
development of tools to aid the programmer, and reuse of
code to reduce the programmer's work. Both these strategies have
led to improvements in productivity, but not to the degree hoped
for. Of course, there are many factors involved, and the impact
of non-technical issues can be significant. Even so, we believe a
key reason success has been limited is that although reuse is the
critical strategy to pursue, programming both with reuse and for
reuse are difficult technical tasks. Accordingly, we propose the
development of programming tools designed to explicitly support
reuse. There are tools such as code repository systems that
already directly support reuse, but we believe every kind
of programming tool has a role to play in facilitating reuse. We
are investigating what kind of support is necessary, how tools
could provide such support, and are developing prototype tools to
explore these ideas. In this poster we will explain our approach,
relate our experience with two prototype tools, and outline our
plans for future work.
Our approach is based on our earlier work, which involved
developing a model for programming language support for reuse,
and our work in computer science education, where the model has
already been very useful. We propose to develop programming
environment featuring tools that directly support those aspects
that our model tells us are important to improving reusability.
Our model is based on the concept of code assemblies, a
symmetry of context reuse and component reuse, and
dependencies that are beneficial or detrimental to reuse.
The model was designed from consideration of programming language
features and how they are used in programming, and so should also
apply to a programming environment where the language features
are actually used.
Our first prototype tools concentrate on assisting the
programmer to understand the structure of their program from the
viewpoint of reusability. Our education work suggests that
students need such assistance during program development to keep
a focus on how their program design relates to principles of
reusability. We suspect that similar issues affect programmers in
industry, although on a larger scale. One of our tools addresses
static program structure, and so is similar to a CASE tool
featuring a class browser. However, we have adapted the
diagrammatic notation to highlight the interplay of context and
component reuse. Another tool addresses dynamic program
structure, and so is similar to a program visualisation system.
Again, we use diagrams to illustrate the connections as code
assemblies use, and are used by, other assemblies. In this tool
the diagrams are animated as the program runs, and the programmer
can inspect the changing structure to better understand the
patterns that result, and so gain insight into how assemblies
are, or might be, used and reused.
Our experience with these first prototypes has been positive,
and we are encouraged that such tools really can facilitate
programming for reusability. Moreover, our model does seem to
match the needs of a programming environment. We are now
developing a structure for tool support throughout the
programming process. Broadly, we distinguish program construction
and program exploration. In construction, there is support needed
both in harnessing assemblies from outside (e.g. repositories),
and from within (e.g. editors). In exploration, there is support
needed both for the static program and the dynamic execution, and
this support can extend to testing, profiling, and algorithm
animation. We are now developing a second set of prototypes to
test the overall structure, and to refine our understanding. We
hope to address each kind of programming tool, and eventually
develop an entire programming environment that explicitly
supports reuse. This work is still in progress, and we hope this
poster will encourage early feedback on our approach.
|