Component-based software technologies are viewed as essential for
creating the complex software systems of the future. Despite the
advantages of using components, however, serious drawbacks in that
usage are also becoming apparent. These drawbacks include
difficulties validating and maintaining software built with
components, threats to the security and integrity of component-based
software, and difficulties assessing the suitability of particular
components for particular applications.
In many cases, drawbacks arise due to lack of information about
external components, which are typically provided with little more
than interface information. Many software engineering tasks, however,
such as verification, integration, program understanding, and impact
analysis, require additional information. For example, an application
developer wishing to evaluate the potential impact of using a
component in an application requires information on data dependences
arising from inclusion of that component, and a developer wishing to
assess the suitability of a component for a distributed environment
that involves transactional aspects requires protocol information for
the component.
Providing the component's source code is not a viable solution to
these problems: in many cases, this would create intellectual-property
problems; also, many kinds of information cannot be derived from code
alone or are expensive to calculate. A preferable approach is to
provide information with components that can be efficiently used
``out-of-the-box'', accommodates intellectual property needs, and yet,
supports the full range of software engineering tasks for which
component users require assistance. We refer to such additional
information as metacontent. Metacontents describe static and
dynamic aspects of a component, can be accessed by the component user,
and can be used for various tasks. Metacontents consist of
information (metadata) about components and utilities
(metamethods) for computing and retrieving such information.
We envision component providers supplying such metacontents, just
as electrical engineers provide essential characteristics with
hardware components, based on the needs of their user communities and
to enable the broader use and acceptance of their components. We also
envision application builders relying on such metacontents to perform
tasks in engineering, deploying, integrating, analyzing, and
maintaining component-based systems. As a parallel, consider battery
manufacturers, who provides static information (metadata) such as
battery size and voltage, with their batteries (components), and
dynamic retrieval facilities (metamethods relying on ``human''
processors) that users can exploit to determine the charge remaining
in a battery.
The notion of providing additional data with components is not
new: mechanisms to support it are provided by some existing component
models, and researchers have proposed the use of such information for
specific tasks. However, these existing models lack general
applicability to software engineering tasks, addressing only a limited
range of specific problems. Furthermore, there is no general
consensus on what a metacontent is and on how it should be designed,
developed, and used; the development of metacontents is usually
limited to adding bits and pieces of information to components in the
form of static metadata.
What is required is a far more general framework to guide the
design, development, and use of metacontents. This framework must be
capable of addressing metacontents for the entire broad spectrum of
software engineering tasks that depend on and can benefit by
information about external components.
We propose to address this need. Our overall objective is to develop
such a new, comprehensive framework for metacontents to support
software engineering activities for component-based software systems.
The framework will include a reference model for metacontents, and a
set of guidelines for defining metacontents and for developing
techniques for producing and consuming the corresponding metadata. In
developing this framework, we will target a wide range of software
engineering needs, including tasks such as analysis, validation, and
deployment of component-based systems. We will investigate how to
develop metacontents for such tasks, and factorize the experience
gathered during the investigation to incrementally define and improve
the framework. We will also develop methodologies and tools that
exploit such metacontents, so to be able to evaluate our approaches
The proposed research is both fundamental, promising to provide a
general framework for component metacontents and an initial set of
metacontents supporting several meaningful software engineering tasks,
and eminently practical, promising to improve component-based
software-engineering practices. Although building on existing notions
of providing data with components, the research is innovative in its
vision of the extent to which this data can be provided and utilized.
Finally, the research promises to improve important qualities of
component-based software, such as reliability, security, and
maintainability, providing benefits to all sectors of society that
depend on that software.