Software maintenance is, often by far, the largest portion of the software lifecycle in terms of
both cost and time. Yet, in spite of thirty years of study of the mechanisms and attributes of
maintenance activities, there exist a number of significant open problems in the field: Software still
becomes unmaintainable with time.
Software maintenance failures result in significant economic costs because unmaintainable
systems generally require wholesale replacement. Maintenance failures occur primarily because
software systems and information about them diverge quickly in time. This divergence is typically
a consequence of the loss of coupling between software components and system metadata that
eventually results in an inability to understand or safely modify a system. Accurate documentation
of software systems, long the proposed solution for maintenance problems, is rarely achieved and
even more rarely maintained. Inaccurate documentation may exacerbate maintenance costs when it
misdirects the understanding of maintainers.
This thesis describes an approach for increasing the maintainability of software systems via the
application and maintenance of structured metadata at the source code and project description
levels. The application of specific metadata approaches to software maintenance issues is
suggested for the reduction of economic costs, the facilitation of defect reduction and the assistance
of developers in finding code-level relationships. The vast majority of system metadata (such as
that describing code structure, encoded relationships, metrics and tests) required for maintainability
is shown to be capable of automatic generation from existing sources, thus reducing needs for
human input and likelihood of inaccuracy. Suggestions are made for dealing with metadata relating
to human intention, such as requirements, in a structured and consistent manner.
The history of metadata is traced to illustrate the way metadata has been applied to virtual,
physical and conceptual resources, including software. Best practice approaches for applying
metadata to virtual resources are discussed and compared to the ways in which metadata havehistorically been applied to software. This historical analysis is used to explain and justify a
specific methodological approach and place it in context.
Theories describing the evolution of software systems are in their infancy. In the absence of a
clear understanding of how and why software systems evolve, a means to manage change is
A methodology is proposed for capturing, describing and using system metadata, coupling it
with information regarding software components, relating it to an ontology of software engineering
concepts and maintaining it over time. Unlike some previous attempts to address the loss of
coupling between software systems and their metadata, the described methodology is based on
standard data representations and may be applied to existing software systems. The methodology is
supportive of distributed development teams and the use of third-party components by its
grounding of terms and mechanisms in the World Wide Web.
Scaling the methodology to the size of the Web required mechanisms to allow the Web’s URL
resolution process to be curated by metadata maintainers. Extensions to the Persistent URL concept
were made as part of this thesis to allow for curation of URL resolutions. A computational
mechanism was defined to allow for the distinction of virtual, physical and conceptual resources
that are identified by HTTP URLs. That mechanism was used to represent different types of
resources in RDF using HTTP URLs while avoiding ambiguities.
The maintenance of system metadata is shown to facilitate understanding and relational
navigation of software systems and thus to forestall maintenance failure. The efficacy of this
approach is demonstrated via a modeling of the methodology and two case studies.