rect
You are viewing an archived version of CBSE 1999. This page has been archived via the Internet Archive Wayback Machine for the ICSA conference series history. Some links on this page might not work.
← return to the ICSA homepage.
General Navigation Buttons - Home | Search | Contact Us | Site Map | Whats New
engineering graphic
Engineering Practices
Welcome
Architecture Tradeoff Analysis
CERT Coordination Center
COTS-Based Systems
Overview
Activity Areas
Products and Services
CBS Team
References
Events
What's New
Opportunities to work with us
Briefings, Courses, and Workshops
Spiral Development Workshops
CURE (COTS Usage Risk Evaluation)
COTS-Based Systems Monographs
COTS_Spot Column
Little Red Book
Dependable System Upgrade
Information Repositories
Personal & Team Software Process
Product Line Practice
Software Engineering Measurement & Analysis (SEMA)
Complete Technical Project List
Common Acronyms
Featured Publications
Technical Initiatives
Courses
Conferences
About SEI|Mgt|Eng|Acq|Collaboration|Prod.& Services|Pubs
Rollover Popup Hints for Topic Navigation Buttons above
Building Maintainable Component-Based Systems


Dr. Mark R. Vigder (mark.vigder@nrc.ca)
National Research Council Canada  

 

Abstract

Maintaining large software systems that are constructed from pre-built components is expensive and one of the major cost drivers for these systems. By identifying the activities associated with maintaining component-based systems, and then designing systems that facilitate these activities, maintenance costs can be reduced. Designing maintainable systems requires a specific set of design criteria that are to be followed, and a checklist of items that can be used during design inspections in order to verify that the design criteria are being adhered to.

1. Introduction

The traditional approach to a discussion of maintenance issues focuses on the ideas of adaptive, corrective, preventative and perfective maintenance. These discussions, and any conclusions reached, assume that the maintainer has full access to the source code from which the system is constructed. However, many modern software systems are a built from software components where these components are a combination of custom built software and Commercial Off-the-shelf (COTS) software that are acquired and evolved over a long period of time. With the use of third-party components the system manager does not have access to source code (often a blessing) nor direct access to the developers.

Maintenance of these software systems has become a significant cost driver in an organization's overall IT costs. Many of the maintenance activities are made more difficult due to the use of components. Maintaining the system involves managing a number of black-boxes that are supplied by many different vendors that were not necessarily designed to work together.

Maintenance of component-based systems differs from maintenance of custom-built systems in the following ways:

System developers do not have access to the source code. Without access to source code, maintainers must find novel ways for troubleshooting and supporting a system, test the system, and change and modify the functionality of a system.

Maintenance and evolution of the component is controlled by a third party. System developers are one more customer of the component developer. It is the component owners who control the evolution and maintenance of the individual components.

Maintenance is done at the component level rather than the source code level. Rather than fixing components and modules, maintenance of component-based systems involves replacing/adding/deleting components rather than source code changes.

This position paper discusses three main issues related to maintenance: Section 2 identifies the major maintenance activities of component-based systems; Section 3 describes architectural properties that can be built into a system that support the maintenance activities; and Section 4 outlines how an inspection checklist can be used during system construction to assist in building a maintainable component based system.

2. Component-based maintenance activities

The activities of the maintenance process for component-based systems are activities associated with the component level rather than with source code level. These activities include the following.

Gluing and wrapping. Components are generally not "plug-and-play". Significant effort is required to build wrappers around components and the "glue" between components in order that they can work together. As systems evolve this wrapper and glue code must be maintained.

Tailoring. Components provide generic functionality. Organizations must tailor this generic functionality to correspond to their unique business requirements. Such tailoring can be done through various technologies without touching the source code of component, e.g., scripting, plug-ins, and frameworks. As businesses modify and update their processes, maintenance of the software system must be performed to reflect the modified business processes.

Fault identification and isolation. When a system fails, system maintainers can no longer fix the problem by changing the source code. Fixing the code is the responsibility of the component builders. The maintainers must deal with the failure by identifying the component (or set of components) that have the fault, and then by isolating the fault and finding workarounds in order to continue using the system.

Updating component configuration. One of the major activities of maintaining component-based systems is the effort required to upgrade component configurations. This includes: replacing components with newer versions as they are released by the component developer; substituting similar components from different vendors; adding or deleting components as the requirements of the system change.

Monitoring and auditing system behaviour. Any system must be monitored in an ongoing manner in order to evaluate issues such as performance, process improvements, failure detection, and usage as well as to assist in troubleshooting. For component based systems this requires a system manager to be able to monitor the load on each component, its failures, component performance, how components are being used, and where they are being used.

Component testing. System maintainers are continually adding and upgrading components within a system. Before adding components, system maintainers are required to perform extensive component testing to determine the effect of integrating the component into the system. The testing must be done to determine behaviour of the component, differences from previous version, performance, resource requirements, etc.

3. Software architectures that facilitate maintenance activities

Overall system lifecycle costs of component based systems can be reduced by building systems in such a way that they facilitate the maintenance activities that were outlined in Section 2. By building a system with appropriate architectural properties, maintainers will have techniques available to perform the activities. Following is a summary of architectural properties that should be built into component-based systems to enhance their maintainability.

Service level tuning. Maintenance personnel must be able to easily modify the user services of the system. As an organization fine tunes its business process, it must update the software that embodies the process, i.e., maintainers must be able to tune the services that the system provides. Since components cannot generally be modified directly (and should not be modified) it is the responsibility of system designers to build component-based systems where the user services can be tuned without component modification. This can be done through the selection of components that allow for tuning (e.g., through scripting or plug-ins) or by a software architecture that separates generic functionality provided by components from the specific business process functionality that can be provided by modifiable mediators or scripts.

Flexible component configuration. A flexible component configuration refers to the ease with which maintainers can add, delete, replace, and upgrade components. Factors affecting the flexibility include the level of component coupling, interconnection architecture among components, and the use of wrappers and glue code to isolate components.

Visibility. In order to assist in fault identification and isolation, troubleshooting, and system monitoring, it is necessary that system maintainers have visibility into system behaviour. Since components themselves are black boxes, visibility must be provided at the edges of the boxes, in the wrappers and glue code. Developers must build systems in such a way that monitoring and instrumentation facilities are provided at appropriate points in the architecture.

Fault isolation and exception handling. A software architect cannot control when or how a component will fail, but they can control how failures are detected and what happens in the event of a failure. For maintenance purposes, it is important to design systems such that failures are detected as soon as they occur, are isolated to the components in which they occur, an exception is generated for every failure, and recovery and reporting is handled by the system architecture.

Open system. An open system, in this context, is one that can be expanded and included as part of a larger system. Openness is achieved through a number of means, for example use of standards for interfaces, standards for middleware, exported and documented interfaces and data schemas, etc.

Appropriate integration architecture. System builders do not have ownership of the components of the system; they do however have ownership of the system architecture. Architects must focus on constructing a system that assists integration by: minimizing component coupling; allowing for concurrency control; and provide instrumentation capability.

4. Constructing maintainable component based systems

In order to build a system with the properties outlined in Section 3, a mechanism must be put in place that verifies the existence of the properties during the construction and evolution of the system. One mechanism that can be used to verify these properties is to identify a specific checklist of items that can be verified in the design and implementation of the system. A checklist can be used during the inspections or walkthroughs of the software design; if the inspection verifies the items on the checklist are included then the system will possess the desired properties.

Categories that should be included as part of the inspection are listed below. A more detailed description can be found in [1,2].

Connector infrastructure. Since connectors provide the infrastructure for communication between components, they impact the ease of integration and operations of the system. The objectives in inspecting the connector architecture are: determine whether components can be easily moved to allow for reconfiguration of the system; verify that components can be easily added, removed, and substituted; maximize the selection of third party component suppliers who can provide components that are compatible with the system; determine the level of visibility the connector provides for the purposes of troubleshooting and testing.

Interconnection topology. The objective of evaluating the interconnection topology is to minimize the number of interconnections and to simplify the interconnection patterns. Understanding the topology is a necessary condition for understanding component dependencies and performing operations such as developing test plans and system troubleshooting. Simplifying the topology eases the task of substituting components and integrating new components into the system. It also provides an insulating mechanism between components by isolating functionality.

Interfaces. The objective of evaluating the interfaces is to verify that interfaces provide the following: interfaces remain independent of the underlying component so that component substitution is possible; interfaces facilitate the instrumentation, monitoring, testing, and troubleshooting of systems; and interfaces are documented, versioned, and under configuration management.

Tailorability. The objective is to have a system that can be quickly and easily tailored to meet new or updated requirements. A checklist must verify: the tailorability of individual components; tailorability of the glue code; and tailorability of the architectural style.

Architectural style. The objective of the architectural style evaluation is to verify that: an architectural style for the system has been defined and documented; the style is appropriate for the long-term evolutionary goals of the system; components used to construct the system are consistent with the architectural style; the architectural style is being maintained during the initial development as well as during the maintenance of the system.

Run-time instrumentation. The purpose of evaluating the instrumentation is the following: determine whether integrators and users have an adequate instrumentation capability; determine what level of instrumentation is available from the architecture; determine the usefulness of standards for instrumentation.

Collaborations. The objective in inspecting the component collaborations is to determine the dependencies between components and to verify that system services can be added and modified.

Configuration management. Since much of the maintainability of component based systems depends on an appropriate configuration management process to manage the evolution and configuration of components, it is important to evaluate the CM processes and tools. It must be verified that the CM process can: determine the component versions installed at each site; track the history of updates to components at each deployed site; and record known compatible and incompatible sets of components.

Component substitution Evaluation of the architecture should include a number of component substitution exercises to verify that component substitution is possible, and determine the level of effort required to substitute components.

5. Conclusions

Maintenance activities associated with component based systems are different from traditional systems in that maintainers are dealing with components that are black-box, they do not control, and which they exercise minimal control over how they evolve. In order to reduce life cycle costs, architects must design the system in such a way to facilitate the activities associated with maintaining component based systems. This can be done by identifying the architectural properties that are desirable in such a system and then developing a detailed checklist that can be used during inspections and/or walkthroughs to verify that the properties are being built and preserved in the system.

 

 

[1] M. Vigder, Inspecting COTS Based Software Systems, Verifying an Architecture to Support Management of Long-Lived Systems, NRC Report No. 41604, 1998. (Available at http://wwwsel.iit.nrc.ca/projects/cots/COTSpg.html).

[2] M. Vigder, An Architecture for COTS Based Software Systems, NRC Report No. 41603, 1998. (Available at http://wwwsel.iit.nrc.ca/projects/cots/COTSpg.html).

 
 

 

 

 

download the PDF file
contact the organizers


The Software Engineering Institute (SEI) is a federally funded research and development center sponsored by the U.S. Department of Defense and operated by Carnegie Mellon University.

Copyright 2001 by Carnegie Mellon University
URL: http://www.sei.cmu.edu/papers/38/38.htm
Last Modified: 27 September 2000