Design and analysis of interoperating components

Access full-text files

Date

2006

Authors

Grechanik, Mark

Journal Title

Journal ISSN

Volume Title

Publisher

Abstract

Components are modular units (e.g., objects, modules, or programs) that interact by exchanging data. Two or more components interoperate when they exchange information [16]. It is conservatively estimated that the cost of programming errors in component interoperability just in the capital facilities industry in the U.S. alone is $15.8 billion per year. A primary driver for this high cost is fixing flaws in incorrect data exchanges between interoperating components [17]. Interoperating components are difficult to design, build, and evolve. We propose an approach for the design and analysis of interoperating components. The core of our approach is an abstraction in which foreign objects (i.e., objects that are not defined in a host programming language) are abstracted as graphs and abstract operations access and manipulate them. These operations navigate to data elements, read and write data, add and delete data elements, and load and save data. We offer different uses for the proposed abstraction. We build a framework called Reification Object-Oriented Framework (ROOF) which uses our abstraction to reduce the multiplicity of platform API calls to a small set of operations on foreign objects that are common to all platforms [48]. With ROOF, we hide the tremendously ugly, hard-to-learn, hard-to-maintain, and hard-to-evolve code that programmers must write or generate today, i.e., we simplified code of interoperating components, making it scalable and easier to write, maintain, and evolve. Our abstraction makes the task of static checking of interoperating components tractable by reducing the multiplicity of platform APIs to a small set of operations on foreign objects that are common to all platforms. By introducing a simple extension to grammars of object-oriented languages, we enable the collection of information about foreign objects at compile time. Static type checking uses this information to find possible errors that could otherwise be detected only at the runtime. We designed Foreign Object REification Language (FOREL), an extension for object-oriented languages that provides a general abstraction for foreign component access and manipulation based on ROOF. FOREL type checking coupled with a conservative static analysis mechanism reports potential errors when referencing foreign components. While ROOF and FOREL offer new approaches for developing interoperating components, many components are still written using low-level platform API calls. We use our abstraction to design and build a tool called a Verifier for Interoperating cOmponents for finding Logic fAults (Viola) that finds errors in components exchanging XML data. Viola creates models of the source code of components by extracting abstract operations and computing approximate specifications of the data (i.e., schemas) that these components exchange. With these extracted models, Viola’s static analysis mechanism reports potential errors for a system of interoperating components.

Description

Keywords

LCSH Subject Headings

Citation