![]() |
|||||
|
![]() Issues in the Assurance of Component-Based Software By Gary Vecellio and William M. Thomas 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 distinguish adequate software components from inadequate ones. Nor are there sufficient ways to determine the effect that replacing software components will have on a 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:
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 an appropriate level of assurance that software will perform as intended. Agencies that deal with 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 but few identify prescriptive actions that can be taken. For example, 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 on when to use COTS software 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]Federal Aviation Administration regulations require that safety-critical avionics systems adhere to the software development requirements in "Software Considerations in Airborne Systems and Equipment Certification" [6]. This is one of the most prescriptive software standards currently in use. 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. 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:
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:
In traditional software development, 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., for 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:
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. But 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 black-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 all potential behaviors for most software. This means we must gain additional confidence through other means. When multiple organizations are involved, or when components are externally developed (whether commercially or otherwise), assessment of software development, processes, and personnel capabilities is less effective for assurance purposes. 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 that the assurance picture is getting more complicated, 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:
We are investigating the following areas:
These techniques will all help to address the assurance difficulties identified in the previous section. Improved component descriptions can help address the problems caused by a changeable environment and variable usage. Improved change analysis techniques are needed to address issues associated with component flux. Dependency analysis is required to improve the problem of the larger number of smaller parts and to provide visibility into the issues associated with a changeable environment. Finally, component aggregation sets can be used to development 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
|
Solutions That Make a Difference.® |
|
|