rect rect rect rect rect rect rect
You are viewing an archived version of CBSE 2000. 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
COTS-Based Systems
Overview
Activity Areas
Products and Services
References
Briefings, Courses, and Workshops
CURE (COTS Usage Risk Evaluation)
EPIC
Publications
COTS_Spot Column
Integration of Software-Intensive Systems
Performance Critical Systems
About SEI|Mgt|Eng|Acq|Collaboration|Prod.& Services|Pubs
Rollover Popup Hints for Topic Navigation Buttons above
Issues in the Assurance of Component-Based Software


Gary Veccellio
vecellio@mitre.org
The MITRE Corporation
1820 Dolley Madison Blvd.
McLean, VA 22102
U.S.A.
+1 703 833-5857
William M. Thomas
bthomas@mitre.org
The MITRE Corporation
1820 Dolley Madison Blvd.
McLean, VA 22102
U.S.A.
+1 703 833-6159
 

 

1 Introduction

Software is increasingly being used in systems where the consequence of failure is high. For example, software is being used in systems that threaten life, health, national security, the environment, and the economy. Also, in an effort to decrease software cost and speed time-to-market, software developers are increasing their use of COTS software. Operating systems, middleware, software components, and software frameworks are being purchased off-the-shelf and included in critical applications. Yet there are few, if any, ways to determine adequate software components from inadequate ones. Nor are there adequate ways to determine the effect that replacing software components will have on the system's behavior.

One of the recommendations of the President’s Information Technology Advisory Committee (PITAC) report is to "fund more fundamental research in software development methods and component technologies." The report identifies the need for "Software methods for efficiently creating and maintaining high-quality software of all kinds and for ensuring the reliability of the complex software systems that now provide the infrastructure for much of our economy" [5]. Specifically the report calls for research to explore and create:

  • component-based software design and production techniques, and the scientific and technological foundations needed for a software component industry,
  • techniques for using measurably reliable components and their aggregation into predictably reliable and fault-tolerant systems,
  • theories, languages and tools that support automated analysis, simulation, and testing of components and their aggregation into systems, and
  • techniques for aggregating provably secure components into provably secure systems.

The concern over the use of COTS software components in critical systems is echoed elsewhere. For example, The National Research Council’s report [10] states:

"Commercial software packages and systems - and not systems custom-built from scratch - are a central subject of this report... Research that ignores COTS software could have little impact on trustworthiness for future Networked Information Systems. In the past, computer science research programs serving military needs could safely ignore commercial software products; that course now invites irrelevance."

Recent advances in component technology are making COTS solutions even more attractive. The increasing use of COTS in critical and complex systems is inevitable. Continued research is needed to assure that such systems meet their goals. We are currently investigating issues associated with assurance of This paper reviews standards for COTS software in critical applications, identifies new challenges associated with component based COTS software, and suggests some static analysis approaches to help address the these challenges.

 

 

2 Standards For COTS In High-Integrity Systems

Regulatory agencies are charged with the responsibility of establishing processes, procedures, and mechanisms that are used to gain a appropriate level of assurance software will perform as intended. Agencies that deal with in safety critical domains have recognized the risks associated with using previously developed software and have started to address the problem. However, their actions in this area have not been comprehensive or consistent

Using COTS software in a safety critical application has recognized problems. Many agencies point out the issues by few identify prescriptive actions that can be taken. The Joint Services Computer Resources Management Group points out some of the issues associated with using COTS in critical applications.

"The safety assessment of Commercial Off the Shelf (COTS) software poses one of the greatest challenges to the safety certification of systems. COTS software is generally developed for a wide range of applications in the commercial market. The software is developed to an internal company standard or to an industry standard, such as IEEE, ANSI, or NIST. In general, the language used is determined by the company or the individual project team. Since the vendor releases only compiled versions of the product, there is often no way to determine which language is used. Because the developer can only guess at the applications that the software may be used in, specific issues related to application are often not addressed during the design." [8]

NASA's Software Assurance Technology Center (SATC) recognizes the problem of data availability when dealing with previously developed software. They leave the decision up to the engineering judgement of the acquirer.

"For systems where use of this standard is required, it shall be applied to government furnished software, purchased software (including commercial-off-the-shelf (COTS) software), and any other reused software in the system. In the event that some of the analyses required by this document are not feasible due to the nature of the software and documentation, the developer is responsible for securing a waiver from the NASA acquirer of the system." [3]

The Federal Aviation Administration calls out RTCA's Software Consideration in Airborne Systems and Equipment Certification (DO-178B). This is one of the most prescriptive software standards that are currently. This standard requires that all software, regardless of whether it was previously developed or not, meet the same high standards. It does not specify any procedures, or mechanisms that are to be specifically used for previously developed software.

"COTS software included in airborne systems or equipment should satisfy the objectives of this document. If deficiencies exist in the software life cycle data of COTS software, the data should be augmented to satisfy the objectives of this document" [6]

The Nuclear Regulatory Commission and Lawrence Livermore National Laboratories have conducted extensive investigations regarding the design and development of safety critical software. The have also studied the use of previously developed software in High Consequence System Systems. They point out the fact that the state-of-the-practice in software engineering doesn't well support the use of previously developed software in systems where there is a high consequence of failure, but they leave open its use in systems with lesser consequence of failure.

"Given the current state of the art in software engineering and the technical, political, and maintenance considerations associated with typical commercial software, it appears that it will be difficult at best to incorporate COTS software products into high-consequence safety systems. If an effective grading process is in place, however, the tradeoffs associated with the use of COTS products in lower risk categories become more palatable." [7]

In addition, they recognize the important part the vendor plays in the decision to use or not use previously developed software. It should also be noted that their comment specifically mentions programmable logic controller vendors. In this domain the software is relatively simple. Their comment might be less appropriate if, for example, the domain was software for knowledge based systems.

"Is it Possible to Use COTS Software in an HCSS? Yes. Some software vendors, such as programmable logic controller vendors, produce software with the knowledge that it will be used in systems with medium to high risks. Some of these vendors use software processes that have been designed to produce high-integrity software. They are generally aware of the types of hazards associated with the systems in which their products will be used and those hazards have been considered in their designs. In order to meet the demands of the high-integrity marketplace, they may be motivated to form long-term partnerships with users and to supply additional reliability documentation. Such vendors may well be in a position to meet applicable acceptance and regulatory requirements for the use of their products in HCSS’s." [7]

In traditional software developments, assurance that the software will function as intended is built up from several sources of evidence. These sources can broadly be classified as people and process, analysis, and testing [4]. There is agreement in the community that all three of these sources of evidence are necessary for true assurance. To date, the systems of interest to software assurance researchers have been primarily safety-critical systems. Typically, such systems are built from scratch with few, if any, COTS components. As discussed above, the regulatory community has not embraced the use of COTS software in safety critical systems. In addition, there are still significant questions about the cost-of COTS when used in safety critical systems [9]. However, there is increasing interest in expanding the use of COTS software components in critical, if not safety critical, systems.

 

 

3 New Challenges with Component Based Software

Assurance of component-based software is complicated by the fact that its development and use differs from traditional COTS based software (e.g., libraries, operating systems, databases, and window management systems). In general traditional COTS software is configured for a specific operating system / processor pair, is used in somewhat predictable ways, and has a large user base. Component-based software introduces new assurance challenges that include:

  • Changeable environment and dependencies– traditional COTS software is developed for a specific hardware and operating system specific environment. Vendors often support multiple hardware and operating system pairs, but the vendor knows these at development time. Software components execute in more abstract containers where the environment and the dependencies are not completely determinable at development time (e.g., dynamic class loading and model code). It should be noted that some major software "disasters" have been the result of changing environments [1], [2]. Because component-based software facilitates change it is likely to exacerbate this problem. Techniques and tools that assist in component dependency analysis are needed to improve this situation.
  • Variable usage – one of the selling points of software components is their ability to be reconfigured for a variety of uses and to undergo post development configuration. From a functional perspective this is an attractive advantage, but it complicates assurance. For example, as a component’s configuration changes it becomes difficult to extrapolate prior experience and past testing evidence. Also, for a given system, a component might have multiple configurations. The identification of the configuration of each component instance and a comparison with its assurance arguments becomes a post development assurance activity. Techniques and tools that assist in the extraction of component configuration descriptions are needed to improve this situation.
  • Larger number of smaller parts – traditional systems have utilized a small number of rather large, well-defined COTS pieces. While the goal of component-based systems will be to use a small number of well-defined components to produce the desired functionality, they can potentially contain a larger number of less well-defined pieces. Techniques and tools that assist in the identification of component aggregation sets are needed to improve this situation.
  • Component flux – is a problem similar to the version creep issue associated with the use of COTS software [9]. That is, the introduction of new versions is out of your control of the organization using the software. The problem is magnified with component-based software because of the increased number of components and connections between them. As the number of software components in a system increases the issue of identifying a consistent set of becomes more difficult. Techniques and tools that assist in the definition of component change analysis are needed to improve this situation.
  • Developer inconsistencies – similar to traditional COTS software, by the time a software component is used in a system the group the developed it might no longer be together. This is complicated further when multiple development organizations are supplying components for the same system. Also, at present there are no authorities that certify individuals or organizations for the production of critical software components. While there are steps being taken in this direction [11], [12], meaningful advances are a decade away. This makes assessing the people and process difficult or impossible. Assurance is therefore best gained through analysis and testing.

Many of the challenges of using component-based software in critical applications can not be effectively addressed via traditional software assurance technologies. Testing approaches have been used for many years to show that software will function as intended. Given that components might not be developed by the organization using the component, white-box testing is generally not possible. Also, component testing is less effective when a component’s configuration, environment, and dependencies can be changed at integration or deployment time. Performing component-level block-box testing can increase assurance, but, as pointed out in [12], developing the associated test oracles can be an expensive proposition. System and subsystem level testing can be effective, but they have a high associated cost, and can not cover the entire state space for most software. This means we must gain additional confidence through other means.

Process and personnel assessment is less useful when multiple organizations are involved and when components are externally developed (whether commercially or otherwise). New, more comprehensive assurance approaches are needed. These approaches might include the certification of software engineers and organizations, improved testing strategies, more fault tolerant designs, and better analysis techniques.

At the same time the assurance picture is getting more complicated, there are several factors are falling into place that will better enable the development of better assurance technologies for component-based software. Many of these factors are related to the use of the Java programming language and its associated Java Beans and Enterprise Java Beans technologies to developed highly reusable software components. These technologies are of particular importance because they are codified in commercial standards and support platform independence. Of interest to us are the potential improvements that can be made in the static and dynamic software analysis of component-based systems.

 

 

4 Static Analysis for Assurance of Component-Based Software

Improvements in program analysis technologies, both static and dynamic, can help to overcome the challenges introduced by component-based software development. Using static component analysis that extracts and records relevant information from previously developed components is a tractable approach for improving assurance and offers some advantages over dynamic analysis. For example:

  • Static dependency and exception propagation analysis can identify platform sensitive components.
  • Characterizing parameter dependent behavior can identify components that are configuration sensitive.
  • Combining information extraction with change analysis is a useful approach for identifying potential version incompatibilities.
  • Identifying component sets with high cohesion and minimum coupling can form the bases for subsystem integration like testing in component-based software.

Our approach is not to invent new analysis techniques, as we believe there are many current analysis techniques that can be exploited. Rather, we want to investigate extending the currently available techniques and tools to adapt them to our purposes.

We are investigating the following areas:

  • Component descriptions – methods and techniques to extract information from components that can be used to make static or dynamic assurance arguments. For example, inter-method dependencies, algorithmic configuration dependencies, exception propagation, and time dependent behavior. For those constraints that are particularly difficult to analyze, we are identifying ways to record and package off-line supplemental data in order to enhance static analysis possibilities or to support runtime based assurance techniques.
  • Component change analysis – methods and techniques to identify the significant semantic differences among substitutable components. For example, changes in exception handling, use of threads, and use of internal data structure.
  • Component dependencies analysis – methods and techniques to identify the significant dependencies among components and between a component and its platform or environment. For example, interface usage, platform dependent features, interaction closures, and component – framework dependencies.
  • Component aggregation sets - methods and techniques to identify sets of components that exhibit high cohesion and minimum coupling. For example, sets of user interface, business logic, and data access components that exhibit logical cohesion, but reside in different architectural tiers.

These techniques will all help to address the difficulties identified in the previous section. Updated component descriptions that characterize environment-dependent can help to address the problem of assurance in the presence of a changeable environment and variable usage. Improved change analysis techniques are needed to address issues associated with component flux. Dependency analyses are required alleviate difficulties with the larger number of smaller parts and to provide visibility into the dependencies on a changeable environment. Finally, the identification of component aggregation sets can be used in the development of metrics more suitable for component based software, enabling more effective identification and remediation of developer inconsistencies.

 

 

5 Conclusion

We are focusing on development of a component assurance taxonomy, as well as information extraction and analysis strategies. Our taxonomy will identify assurance properties that are unique or magnified in component-based software, and approaches supporting analysis of these properties. A first step is the identification of analysis techniques and approaches that can be used in the determination of these properties. We are also investigating static information extraction techniques that can be applied to component-based software, particularly those written in Java. Where applicable, these strategies will be codified in an analysis workbench specification, a prototype analysis workbench, and in criteria useful for the development, acquisition, and analysis of component-based software.

 

 

References

[1] ARIANE 5, Flight 501 Failure, Report by the Inquiry Board.
[2] N. Leveson, and C. Turner, An investigation of the Therac-15 accidents, IEEE Computer, 26(7): 18-41, July 1993.
[3] NASA Software Safety Standard, NASA-STD-8719.13A, National Aeronautics and Space Administration, September 1997.
[4] D. Parnas, et al., Evaluation of Safety-Critical Software, Communication of the ACM, 6 June 1990, Volume 33, Number 6, pg. 636-648.
[5] President’s Information Technology Advisory Committee (PITAC) Interim Report to the President, August 1998.
[6] RTCA/DO-178B, Software Consideration in Airborne Systems and Equipment Certification, RTCA, 1992.
[7] J. A. Scott, G. G. Preckshot, J. M. Gallagher, Using Commercial-Off-the-Shelf (COTS) Software in High-Consequence Safety Systems, Lawrence Livermore National Laboratory, 1995.
[8] Software System Safety Handbook, Joint Services Computer Resources Management Group, 1997.
[9] N. Talbert, The Cost of COTS, IEEE Computer, June 1998.
[10] Trust in Cyberspace, National Research Council, Committee on Information Systems Trustworthiness, National Academy Press, 1999.
[11] Standard for Safety-Related Software, UL-1998, Underwriters Laboratories Inc., 1994.
[12] J. Voas, Certifying Off-the-Shelf Software Components, IEEE Computer, June 1998.

download the PDF file


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 2004 by Carnegie Mellon University
Terms of Use
URL: http://www.sei.cmu.edu/cbs/cbse2000/papers/19/19.html
Last Modified: 11 August 2004