|
Software interoperability is the ability of two or more systems or components to exchange information and to use the information that has been exchanged . In its report for NIST, RTI International and the Logistic Management Institute conservatively estimates the cost of inadequate software interoperability just in the construction industry in the U.S. alone to be $15.8 billion per year. Large software companies makes large concentrated effort investing into the research on software interoperability and developing interoperable solutions for customers .
The problem of making software interoperable is difficult and pervasive. After giving a talk at Intel, I was approached by a manager who expressed his bewilderment at the complexity of this problem. He said that his programmers managed to write software components that were correct with respect to their specifications; however, when these components are integrated into a system, it did not function properly. With utter frustration he exclaimed: “Why do I get a chemical compound with exact properties that I predicted from its constituent chemical components, and I cannot do the same with a system of interoperating software components?”
I believe that there is no silver bullet solution for software interoperability. The proliferation of different programming languages, operating systems and various virtual machines (e.g., CORBA, EJB, and .Net), databases and semistructured data (e.g., HTML and XML) parsers exacerbates the problem of seamless integration of software applications. My vision is that advances can be achieved through the research in design frameworks and middleware, a combination of static analysis, testing, and verification techniques for finding errors, and effective and efficient security mechanisms and protocols for interoperating components.
My goal is to improve the productivity of software engineers developing interoperating components and to improve the quality of these components at the same time. One aspect of this agenda is providing software engineers with reliable solutions for making software. It means that such solutions should enable programmers to develop interoperating components without writing significant amount of additional code, and to provide tools to find bugs in written code at compile time. Not only do I want to develop useful tools and techniques for creating and maintaining interoperating component, but I also want to deepen my understanding of the underlying principles behind component interoperability and use these principles to automate various aspects of error detection.
|