Main People Publications Research Tools
Current Research Projects
 
Component Omnispection
for Supporting Software Engineering Tasks


Abstract

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.


Principal Investigators


Publications


Georgia Tech | College of Computing | Software Engineering | Aristotle Home
Updated November 14, 2005 by Jim Jones