The Componentware Revolution
Dr.Thomas J Mowbray
Chairman, iCMG

Many of us have serious misconceptions about the capabilities of current software approaches. Based upon surveys of corporate software projects in the United States, the realities of software development are as follows. [1] About one third of all software projects are canceled. Average projects expend twice as much budget and schedule as initially planned. After delivery, the majority of systems are considered unsuccessful because they have far fewer capabilities than expected. Modifying and extending systems are the most expensive cost drivers and very likely to create new defects. Overall, the outcome of filely all application software projects are stovepipe systems, brittle software architectures that under-perform on requirements. The Software Crisis The software crisis in corporate development became apparent decades ago, when procedural software technologies were popular. Subsequent, object-oriented approaches (such as the Object Modeling Technique) have been equally unsuccessful for corporate developers. These outcomes have been repeatedly confirmed by research. [1] Three key factors are exacerbating the software crisis:

  • requirements change,
  • commercial innovation, and
  • distributed computing.

A significant part of the problem is rising user expectations. User requirements for systems have increased much faster than corporate developers' capability to deliver. Requirements changes are more frequent as businesses maneuver for competitive advantage with strategic corporate software.

Another confounding factor is the destabilizing force of accelerating technology innovation, both in commercial software and hardware platforms. Corporate developers have difficulty finding compatible configurations of software products, and are forced to upgrade configurations frequently as new products are released. Software maintenance due to technology upgrades is a significant corporate cost driver.

Distributed computing is an essential feature of many new applications due to predominance of the Internet and geographically diverse enterprises. Traditionally, software designers assumed homogeneous configurations, centralized systems, local communications, and infrequent failures. Today's highly distributed enterprises require heterogeneous hardware/software, decentralized legacy configurations, and complex communications infrastructure. The result is an environment with frequent partial system failures. Distributed computing reverses many key assumptions that are the basis for procedural and object-oriented software development.

The software industry has established object-orientation (OO) as the mainstream technology. OO is the technology adopted by new corporate development projects because OO is universally supported by software tool vendors. Masses of legacy programmers are training for object-oriented development (e.g. C++ and Java) as corporations create new strategic systems. Unfortunately, these developers and corporations are likely to become the next generation of disillusioned participants in the software crisis. However, the organizations that survive and thrive with this technology, must use it in sophisticated new ways, represented by componentware.

Componentware Resolving the software crisis requires fundamental changes in systems thinking, software processes, and technology utilization. The next major era of technology, The Componentware Revolution, contains key elements of the crisis solution.

The componentware approach introduces a set of closely interrelated techniques and technologies. Componentware introduces a sophisticated mindset for generating business results. These componentware elements include:

  • Component Infrastructures
  • Software Patterns
  • Software Architecture
  • Component-Based Development

Componentware technologies provide sophisticated approaches to software development that challenges outdated assumptions. Together these elements create a major new technology trend. Componentware represents as fundamental a change in technology as object-orientation and previous generations.

We will discuss these componentware technologies after a brief introduction to componentware's unique principles.

Components versus Objects

Componentware can be understood as a reincarnation of object-orientation and other software technologies. What distinguishes componentware from previous generations of technology are four principles: encapsulation, polymorphism, late binding, and safety. This list overlaps with object-orientation, except that it eliminates the emphasis on inheritance. In component thinking, inheritance is as a tightly-coupled, white box relationship that is unsuitable for most forms of packaging and reuse. Instead, components reuse functionality by invoking other objects and components instead of inheriting from them. In component terminology, these invocations are called delegations.

By convention, all components have specifications corresponding to their implementations. The specification defines the component encapsulation (i.e. its public interfaces to other components). Reuse of component specifications is a form of polymorphism which is strongly encouraged. Ideally, component specifications are local or global standards that are widely reused throughout a system, an enterprise, or an industry.

Componentware utilizes composition for building systems. In composition, we integrate two or more components to create a larger entity, which could be a new component, a component framework, or an entire system. Composition is the integration of components. The combined component acquires joint specifications from the constituent component.

If the components have matching specifications for client calls and services, then they can interoperate with no extra coding. This is often called plug and play integration. At run time, when executed at runtime, this is a form of a late binding. For example, a client component can discover a component server through an on-line directory, such as the CORBA Trader Service. With matching client and service interface specifications, the components can establish a run-time binding to each other, and interact seamlessly through the component infrastructure.

In a perfect world, all components would be fully conformant with their specifications and free from all defects. Successful operation and interoperation of components depends on many internal and external factors. Safety properties can help because they can minimize entire classes of defects in a component environment. As society becomes increasingly dependent upon software technology, safety has become a serious legal concern and one of the most important areas of computer science research.

For example, Java's garbage collection feature guarantees memory safety, or freedom from memory deallocation defects (which are problematic in C++ programs). Other kinds of safety include type safety (guaranteed data type compatibility), and module safety which controls the effects of software extension and component composition.

Component Infrastructures

The componentware revolution has already arrived in the form of component infrastructures. Major platform vendors have bet their futures on componentware product lines. In particular, Microsoft, Sun Microsystems, IBM, and the CORBA consortia have established significant componentware infrastructures through massive technology and marketing investments.

These component infrastructures (Microsoft COM, Sun Enterprise Java Beans, and CORBA request brokers) are dominant infrastructures for overlapping industry segments. Microsoft COM on the desktop; Java for cross platform applications; and CORBA for corporate networks and the Internet. Interestingly, these technologies are also mutually interoperable, with Microsoft, Sun, IBM, and others supporting the CORBA Internet Inter-ORB Interoperability Protocol (IIOP) for Microsoft COM and Java Remote Method Invocation (although Java works equally well with CORBA). In the following paragraphs, we'll compare these infrastructures briefly.

Microsoft has been promoting the Component Object Model (COM) and follow-on products for several years. COM is a single-computer component infrastructure. OLE and ActiveX define componentware interfaces based upon COM. In theory, the Distributed Component Object Model (DCOM) extends the capabilities of COM over networks and the Internet. With these technologies, Microsoft has funded a major corporate strategy promoting a worldwide migration to componentware over the past five years. Future Microsoft plans indicate that it will continue its componentware initiative for the forseeable future.


The DCOM Disaster

Benefits CORBA

Unfortunately, DCOM is a technological disaster of such proportions that only Microsoft could fund its continued existence with favorable public relations. A key problem with DCOM is its security model, which was not architected into the technology prior to massive commercial deployment on Microsoft operating systems. For security and other reasons (e.g. system management support), DCOM is not recommended for use on the Internet, nor is it suitable for distributed enterprise systems. These and other DCOM limitations are supposed to be addressed by Windows 2000 and COM+ (DCOM's successor), which are likely to stabilize by early next century. The DCOM disaster has not influenced Microsoft's strong support for componentware technology.

DCOM's misfortunes have yielded significant benefits for CORBA vendors. At one time, Microsoft's DCOM was considered an insurmountable competing technology to CORBA. Vendor groups were terrified about the future prospects for CORBA.

With increasing industry skepticism about DCOM and other proprietary middleware, CORBA has become the uncontested market leader for distributed computing. CORBA's is the only adopted technology for distributed computing that supports multiple programming languages and multiple platforms. SIDEBAR END

Sun Microsystems invention of Java is a continuing evolution of programming language features, infrastructures, and related class libraries. Java technology has created tremendous industry excitement and support from independent developers. The extensions for Java Beans and Enterprise Java Beans establish an evolving component model that rivals COM and ActiveX in the cross-platform application space. Enterprise Java Beans and the IBM San Francisco project are using Java Remote Method Invocation (RMI) for distributed computing, one of several proprietary infrastructures available to Java programmers. While proprietary Java infrastuctures do provide convenience for programmers, they lack one key capability: interoperability with other programming languages. This may be a serious limitation for corporate projects because it hampers legacy integration and cross-language development which is commonplace for server applications. Another, more subtle issue, is that Java application programming interfaces (APIs) are not standards. For popular technologies like JDBC, vendors often customize the APIs as they create their value-added versions of the Sun reference technologies.

The Common Object Request Broker Architecture (CORBA) is an open-systems standard for distributed infrastructure supported by multiple vendors, industry consortia, and formal standards bodies. [2] Recently, there has been a surge in CORBA licensing in corporate development organizations with a surprising array of Fortune 500 companies adopting CORBA for enterprise projects, including banks and manufacturers. From its inception CORBA has supported both object and componentware models. With today's CORBA products supporting multiple component interfaces in a single encapsulated servlet, CORBA is an ideal infrastructure for componentware development involving heterogeneous hardware/software, multiple programming languages, or distributed computing. Recently, CORBA has been extended to support the capabilities of message oriented middleware and domain-specific API standards (healthcare, manufacturing, financial services, and so forth). Just like any other technology, CORBA products do have limitations (e.g. memory leaks, conformance, performance). However, for a standard established in 1991, it is amazing how well the CORBA architecture has weathered cataclysmic innovations in other technologies and emerged ever stronger (e.g. Java and the Internet).

Componentware infrastructures are having a significant impact on software development. In many respects, these infrastructures are well on their way to becoming mainstream development platforms. Because all of these infrastructures are becoming interoperable (through CORBA IIOP), there is a well understood relationship between infrastructure models. Their similarities are much greater than their proprietary differences might imply.

Infrastructure selection is one of the most discussed, but least important, aspects of implementing componentware. For corporate developers, the most critical issues are confronted well after infrastructure selection. These issues include: how to master designing with the technology, how to architect systems, and how you coordinate your development efforts. These areas are covered by the next three sections on Software Patterns, Software Architecture, and Component-Based Development.

Software Patterns

Software patterns comprise a common body of software knowledge which can be applied across all component infrastructures. The most famous category of software patterns, called design patterns, comprises proven software design ideas which are reused by developers. [3] Other important categories of patterns include analysis patterns and antipatterns. [1] Analysis patterns define proven ways of modeling business information; that can be directly applied to the modeling of new software systems and databases.

Software patterns are a necessary element of componentware. The development of new, reusable components requires expert-level quality of design, specification, and implementation. Proven design solutions are necessary to establish successful component architectures and frameworks for families of applications. Often, there are too many variables to take chances on unproven design concepts.

The popularity of software patterns can be explained as a response to the practical shortcomings of object-orientation. Antipatterns explain the common mistakes that people make when developing object-oriented software systems (as well as other types of systems). Much more is needed than basic object-oriented principles to build successful systems. Design patterns explain the additional, sophisticated ideas that are required for effective software designs. Analysis patterns present the sophisticated ideas necessary for the effective modeling of concepts and data.

It is still commonplace in software development, to reinvent design ideas, incurring the risks and delays of trial and error experimentation. If fact, most software methods encourage reinvention as the normal mode of development. Considering the challenging forces of requirements change, technology innovation, and distributed computing, we consider reinvention to be an unnecessary risk in many circumstances. This comment is especially applicable to the development of components, where the costs of defects and redesigns can affect multiple systems.

Altogether, software patterns can be described as knowledge reuse. It is interesting to note that most patterns are considered as simple as commonsense by expert-level developers. However, for the majority of developers, patterns are a necessary part of technical training that can help them to achieve world-class results.

Software Architecture

Software architecture concerns the planning and maintenance of system structure from earliest system concept, through development, and operations. Good architectures are stable system structures which can accommodate changes in requirements and technologies. Good architectures ensure the continuous satisfaction of human needs (i.e. quality) throughout system lifecycles.

Reusable components are examples of good architecture. They support stable interface specifications, which can accommodate changes due to reuse in many system contexts.

Software architecture plays an important role in component design, specification, and use. Software architecture provides the design context, within which, components are designed and reused. Components have a role in predetermining aspects of software architecture. For example, a component framework may predefine the architecture of a significant portion of a system.

One of the most exciting aspects of software architecture for componentware is supporting distributed project teams. A software architecture comprises a system specification that enables parallel, independent development of the system or its parts. A proper software architecture defines computational boundaries (i.e. API) that divide the system into separate testable subsystems. These subsystems can be outsourced to one or more distributed project teams.

Component-Based Development

Component-based development is software development with a difference. Many process aspects are reused, such as iterative, incremental development. The primary componentware difference is the specialization of technical roles. [2] Three key componentware roles are software architect, component developer, and application developer. These differ from object-oriented approaches which promoted notions of all-purpose programmers, committee-based design, and architecture after-the-fact.

A typical leadership team for a project comprises a software architect and a project manager. The architect works in conjunction with management to make key technical decisions, those with system-wide impact. The architect is responsible for technical planning of the system, and communicating these plans with developers. Since the architect coordinates system-wide design decisions, many other technical decisions are the responsibility of developers. To be effective, the architect must have the highest levels of experience and technical training; with outstanding skills in design, specification-writing, and spoken communication.

The best component developers are also the most talented programmers. They design and program the building blocks from which the application will be constructed. The architect defines the major boundaries behind which component-based services will be provided. Reuse of pre-existing components is evaluated with respect to an organizational software repository. For new component requirements, the component-developers design and construct new software, updating the organizational repository. Typically, components will implement the horizontal functions and lower-level aspects of the system, reducing the need for application developers to reinvent these capabilities. Component developers make intensive use of software patterns, applying several overlapping patterns to each component design and implementation.

Application developers are responsible for integrating components and implementing the vertical requirements of the system, including user interfaces. They apply preexisting components to the solution of application-specific problems. Application developers must communicate with end-users have some domain expertise.

Generally, component developers use systems programming languages, such as C++ and Java, while application developers use scripting languages, such as Javascript, TCL, Python, and Visual Basic. Systems programming languages allow more control of low level issues, but are more difficult to use for application-building. Scripting languages provide a higher level of abstraction, with a corresponding reduction of up to 8:1 in lines of code needed to implement a given requirement, compared to systems programming languages.


The Componentware Revolution is the next major software technology trend. In many ways, it has already arrived, and is readily available for commercial exploitation. This revolution is actively supported by major vendors, including Microsoft, Sun, IBM, and the CORBA vendor consortia

. The most important aspects of componentware are not the choice of technologies, but how these are applied. Successful adoption of componentware must include the reuse of software patterns, the planning of software architecture, and the establishment of component-based development teams.

The Componentware Revolution is an exciting opportunity to avoid the inadequacies of outdated software approaches. Componentware enables you to survive and thrive when facing the challenges of requirements change and rapid commercial innovation. Componentware delivers the benefits of software reuse and enables outsourcing to distributed project teams.


[1] Brown, W.J., R.C. Malveau, H.W. McCormick, and T.J. Mowbray, ANTIPATTERNS: REFACTORING SOFTWARE, ARCHITECTURES, AND PROJECTS IN CRISIS, John Wiley & Sons, 1998. (ISBN 0-471-19713-0)

[2] Mowbray, T.J. and W.A. Ruh, INSIDE CORBA, Addison-Wesley, 1997. {ISBN 0-201-89540-4)

[3] Mowbray, T.J. And R.C. Malveau, CORBA DESIGN PATTERNS, John Wiley & Sons, New York, 1997. (ISBN 0-471-10611-9)

[4] Mowbray, T.J. And R. Zahavi, THE ESSENTIAL CORBA: SYSTEMS INTEGRATION USING DISTRIBUTED OBJECTS, John Wiley & Sons, New York, 1995. (ISBN 0-471-10611-9)


Back Next
Copyright 2005 iCMG. All rights reserved.
Site Index | Contact Us | Legal & Privacy Policy