Journal of Software Engineering and Applications, 2011, 4, 283-292
doi:10.4236/jsea.2011.45031 Published Online May 2011 (http://www.SciRP.org/journal/jsea)
Copyright © 2011 SciRes. JSEA
283
Moving from Traditional Software Engineering to
Componentware
Faisal Nabi1, Roisin Mullins2
1E-commerce Security Re search Group, Hazraat Baba Bullah Shah Research Center, Qasoor, Pakistan; 2IT Research Group, School
of Business, University of Wale s Trinity Saint David, Wales, UK.
Email: nabifaisal@yahoo.com, r.mullins@tsd.ac.uk
Received March 10th, 2011; revised April 13th, 2011; accepted April 21st, 2011.
ABSTRACT
The field of software engineering and software technology is developing very fast. Perhaps as a consequence, there is
seldom enough interest or opportunity for systematic investigation of how the underlying technology will actually per-
form. That is, we introduce new concepts, methods, techniques and tools—or change existing ones and emphasize their
value. A major turn in software engineering leading to Componentware has dramatically changed the shape of software
development and introduced interesting methods for the design and rapid development of systems which may provide
cost-effective benefits. In this paper we will discuss Componentware, process model, architecture, principles and the
drivers, advantages, disadvantage and reveal profound changes from the traditional software engineering approaches.
Keywords: Software, Component, Componentware, Component Infrastructure, Software Pattern, Software Architecture,
Component-Based-Development
1. Introduction
The past 20 years has been a time of change in the field
of IT as we see a succession of new technological inven-
tions. The software engineering field has gone through
several generations of introductions of methods and
techniques for developing large, complex systems. The
1970s was the decade of structured programming and
structured methods. The 1980s, was the decade of data
modelling and techniques. And the 1990s have focused
on methods and techniques to support prototyping, itera-
tive development, and a variety of rapid application de-
velopment (RAD) techniques based upon the object ori-
ented (OO) paradigm. The past practices associated with
programming using machine code, assembly languages,
high level languages, fourth generation languages, and
further on to CASE tools, appear to act to solve some
technological problems and help us meet requirements
and develop better systems. However, those in the pro-
fession recognize that previous approaches have not
managed to minimize project failures and project short-
falls [1,2]. One of the key drivers for changes to the
software engineering approaches is the pace of change
that has swept through businesses across the world. This
has accelerated a need for software engineers to respond
to the need for better and improved systems that meet the
changing requirements, more flexible design and allow
for easier reconfiguration. Businesses have become reli-
ant on using and integrating IT and view these tools as
being core to their strategies, competitiveness and the
value they create for customers and supplier. The busi-
ness place high value on their IT and continue to invest
in new systems but in return they expect results. The
overall system requirements from businesses have in-
creased considerably. Having this in mind the search for
new engineering techniques, in order to meet new busi-
ness needs, to some extent is anticipated but requires a
discerning rethink about the stages of change.
There is a concern that much of traditional software
approaches are misunderstood and many software de-
signers fail to appreciate the capabilities of software ap-
proaches. Therefore, there is a need to move to a stage
where the importance of software approaches are highly
valued and better understood.
The signal of a software crisis on the increase in busi-
nesses became apparent decades ago, then with the move
to object-oriented approaches (such as the Object Model-
ling Technique) which became standard they were
deemed equally unsuccessful for corporate developers.
These outcomes have been repeatedly confirmed by re-
search. Three key factors that exacerbate the software
Moving from Traditional Software Engineering to Componentware
284
crisis are:
Requirem e nt s chan ge
Commercial innovation
Distributed computing
A significant part of the problem is the belief that all
user expectations are achievable. While it seems apparent
that user requirements for systems have increased much
faster than corporate developers’ capability to deliver.
The problem is also not helped by the fact that require-
ments changes are more frequent as businesses jostle for
position in the market and try to find ways to increase
their competitive advantage by means of strategic co rpo-
rate software.
Another confounding factor is the destabilizing force
of accelerating technology innovation, both in commer-
cial software and hardware platforms. Corporate devel-
opers have difficulty finding compatible configurations
of software products, and are forced to upgrade configu-
rations frequently as new products are released. Further,
software maintenance due to technology upgrades is a
significant corporate cost driver.
Due to dominance of the Internet for business and
geographically diverse enterprises, distributed computing
is an essential feature of many new applications. Today’s
highly distributed enterprises require heterogeneous
hardware/software, decentralized legacy configurations,
and complex communicatio n s infrastru ctur e. Th e 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 recognized technology for the software industry
has been object-oriented programming (OO) and has
been widely adopted by new corporate development pro-
jects mainly because OO is universally supported by
software tool vendors. There are many programmers re-
ceiving training for object-oriented development (e.g.
C++ and Java) as corporations create new strategic sys-
tems. This acclaimed approach will not satisfy all the
engineering requirements and it is likely that these de-
velopers and corporations are likely to become the next
generation of disillusioned participants in the software
crisis. However, the organizations that endure and thrive
with this technology must use it in sophisticated new
ways, represented by componentware.
Therefore, it can be argued that Componentware ele-
ments could present a fundamental rethink and provide a
focus for changes in systems thinking, software proc-
esses, and technology utilization.
The componentware approach could address the fail-
ure of the majority of projects to meet their deadlines,
budget constraints, quality requirements and should per-
form well against the ever increasing costs associated
with software maintenance. Software developers as re-
ported in the literature [2] who have built software sys-
tems for business by assembling components already
developed and prepared for integration suggest that there
are four elements of Componentware:
Component Infrastructures
Software Patterns
Software Architecture
Component-Base d Development
Mowbray and Malveau (2004) suggest that “Compo-
nentware technologies provide sophisticated approaches
to software development that challenges outdated as-
sumptions. Together these elements create a major new
technology trend. Componentware represents as funda-
mental a change in technology as object-orientation and
previous generations” and this new age of software de-
velopment is illustrated in Figure 1 [2].
In this paper we address the background leading to the
need for a Componentware approach. The move from
traditional approaches to the Componentware era, com-
ponent technology, the drivers and factors of Compo-
nentware, advantages, disadvantage and conclusion.
2. The Move from Traditional Software
Engineering to Componentware
The ubiquitous nature and widespread use of the personal
computers and the Internet has created new markets, en-
couraged new users and developers and importantly
makes computers a core part of education, business and
society.
The acceptance that technology is a part of everyday
life has placed an additional emphasis for change in the
software industry. For example, new users as consumers
expect the cost of software to reduce in order to match
the ever-decreasing hardware price. Further, demand for
new applications such as electronic commerce and
groupware are high. However, conventional methodolo-
gies have not witnessed huge gains in productivity and
quality. This is a further realization of the need to
re-think the way softw are develo pment should pro ceed in
the future.
Figure 1. Change of environment and software.
Copyright © 2011 SciRes. JSEA
Moving from Traditional Software Engineering to Componentware285
Componentware has advantages in that they use com-
ponents as the primary source and this would lead to a
gain in productivity and qu ality. This is a view expressed
by those from a matured engineering discipline [3]. As
suggested by McIlroy, (1976) “making applications from
software components has been a dream in software engi-
neering community. My thesis is th at the software indus-
try is weakly founded, in part because of the absence of a
software components sub industry. … A components
industry could be immensely successful” [4]. However, it
is clear that widespread reuse of software components in
the software industry has not come about and a number
of obstacles have been identified. However, it seems
clear that the most fundamental problems are a lack of
mechanisms to make components interoperable and there
appears to be a lack of “reusable” components.
Since the early 1990’s, approaches namely Compo-
nentware (CW) [5] or Component-Based Software Engi-
neering (CBSE) has emerged [3,6-9]. The CBSE ap-
proach emphasized End-User Computing such as making
possible to develop applications on the PCs. Further, the
use of COTS (Commercial Off-The-Shelf) and Internet
technology such as Web and Java-based technologies
software promoted the CBSE approach for development
business appl i cat ions [10].
It is likely that if CBSE had been more widely ac-
cepted it could have opened up new possibilities for
CBSE such as network distribution of components, and
the reuse and interoperation of components over the
Internet. In recent times, a few types of technologies
have been widely deployed and are still evolving. They
include ActiveX/DCOM from Microsoft [11], CORBA
from OMG [12] and JavaBeans from SUN Microsystems
[13].
2.1. What Differentiates CW/CBSE from the
Conventional Software Reuse?
1) Conventional Software Reuse and CW/CBSE:
Although object-oriented technologies have promoted
software reuse, there is a big gap between the whole sys-
tems and classes. To fill the gap, many interesting ideas
have emerged in object-oriented software reuse in recent
years. They include software architecture [14], design
patterns [15], and frameworks [16].
2) CW/CBSE Approach: Componentware Engineering
(CW)/Component-Based-Software Engineering (CBSE)
as reported in the literature take different approaches,
from conventional software reuse in the following ways.
a) Plug & Play: Component should be able to plug and
play with other components or frameworks so that com-
ponents can be composed at run-time without compila-
tion.
b) Interface-centric: Components should separate the
interface from the implementation and hide the imple-
mentation details so that they can be composed without
knowing their implementation.
c) Architecture-centric: Components are designed on a
pre-defined architecture so that they can interoperate
with other components and/or frameworks.
d) Standardization: A component interface should be
standardized so that they can be manufactured by multi-
ple vendors and widely reused across the corporations.
e) Distribution through Market: Components can be
acquired and improved though competition, being avail-
able on the market, and provide incentives to the ven-
dors.
2.2. Process Model of CW and CBSE
CW/CBSE component-based software engineering al-
lows the software development and delivery stages to
evolve rather than follow a conventional approach and in
doing so some parts of a system can be acquired from the
component vendors and/or be outsourced to other or-
ganizations, some parts of software process can be done
concurrently.
1) The architecture and the software process can be
designed to allow software reuse, the software process
should be reuse-oriented so that designers can reuse arti-
facts at different levels of abstraction along with software
process.
2) Figure 2 illustrates the conv entional waterfall proc-
ess and an example of CBSE process. As indicated in the
figure the Componentware (CW)/CBSE process consists
of two processes; component development and compo-
nent integration. Since these two processes can be done
by different organizations, these two processes can be
concurrent. Unlike the conventional process, the CBSE
process needs an additional process for component ac-
quisition.
Figure 2. Conventional software process compared to com-
ponent-based process model.
Copyright © 2011 SciRes.
JSEA
Moving from Traditional Software Engineering to Componentware
286
3. Component Technology
We will discuss these componentware technologies after
a brief introduction to componentware’s unique princi-
ples.
What is a Software Component?
A software component can be regarded as “a software
element that conforms to a component model and can be
independently deployed and composed without modifi-
cation according to a composition standard” [17].
A further example of a software component “is a unit
of composition with contractually specified interfaces
and context dependencies only. A software component
can be deployed independently and is subject to compo-
sition by the thi rd part y ” [3] .
To simplify the concept of software components, we
classify the notion of software components into three
types:
1) Reusable Module/Unit is an independent and deliv-
erable software part that encapsulates a functional speci-
fication and implementation for reuse by a third party.
2) A reusable component is an independent, deploy-
able, and replaceable software unit that is reusable by a
third party based on the unit’s specification, implementa-
tion, and well-defined contracted interfaces.
3) A composite building block is a reusable compo-
nent that is developed as a building part to conform a
well-defined component model and the accompanying
composition standards.
3.1. Component Architecture and Principles
When Component-based dev elopment is put into practice,
it is necessary to divide the development into two parts
that of supplier on one side and customer on the other
side. In the organization the component developers are
involved in the role of component supplier on one side
and the developers of the software systems who are in-
volved in assembly of these components have the role of
component consumer on the other side.
This division can only be effective when a common
basis is provided for suppliers and consumers of compo-
nents. A component execution environment like COM or
CORBA provide a partial solution. The main focus has
been on technical issues concerning the communication
between running software components. Therefore to aid
the smooth process a component architecture is required
to provide suppliers and customers with a set of rules,
standards and guidelines that prescribe what components
are and how they are assembled into software systems.
Component architecture therefore in our view is a set
of principles and rules according to which a software
system is designed and built with the use of componen ts.
The component architecture covers three aspects of a
software system. These are:
1) Building blocks: The architecture specifies the type
of building blocks systems are composed of.
2) Construction of the software system: The architec-
ture specifies how the building blocks are joined together
when developing an application. The architecture de-
scribes the role that building block s play in the system.
3) Organization: Components are divided in categories
based upon their functionality and these categories are
placed in two dimensional layering.
3.2. Component vs Objects
As described by Szyperski C. (1998) a component’s
characteristic properties are “that it is a unit of inde-
pendent deployment; it is a unit of third-party composi-
tion; and it has no observable state” [3]. This means that
the component is independently deployable and it needs
to be separated from the other components and the envi-
ronment and it contains all its features.
In contrast to the properties characterizing components,
an object’s characteristic properties are that it is a unit of
instantiation (it has a unique identity); it has state that
can be persistent; and it encapsulates its state and behav-
ior [3]. Again, several object properties follow directly.
Since an object is a unit of instan tiation, it cannot be par-
tially instantiated. Further, since an object has an indi-
vidual state, it also needs a unique identity so you can
identify it, despite state chang es, for the object’s lifetime
as shown in Figure 3.
Table 1 describes that although most components are
composed of objects, there are fundamental differences
between two structures. A Component can be differenti-
ated from an object in that its “encapsulation” is guaran-
teed, that is there are no exposed implementation de-
pendencies. An object might only be used within a single
application, but a component has been designed with
reuse in mind and can not assume much about the envi-
Figure 3. Components when activated create interacting
objects.
Copyright © 2011 SciRes. JSEA
Moving from Traditional Software Engineering to Componentware287
Table 1. Summary of objects compared to components.
Objects Components
Many Interdependencies Few Interdependencies
Composed into Components Composed into Services
Interface and Implementation
Together Separate Interface and
Implementation
ronment in which it will be used. An object typically
defines a much smaller portion of a problem space: an
e-mail message, for example.
A component operates at a higher level, for example,
for sending and receiving e-mail. A component typically
contains a mechanism for configuring its operation in
addition to its basic methods for performing its functions.
This provides a means for a component to be adjusted to
a range of different preferences, whereas an individual
object dose not usually provides this range of configura-
bility.
A component is often composed of a number of ob-
jects, which are designed to work together to provide
specific functionality. Some component standards (such
as EJB) also provide a recommended means to package
their components for deployment (e.g, EJB’s in jar file,
containing objects themselves and a deployment descrip-
tion file).
Traditional Notions of Modules with Components:
Module concepts do not normally support one aspect of
Full-fledged components. For one, there are no persistent
immutable resources that come with a Module, beyond
that which has been hardwired as constant in the code.
Resources parameterize a component and replacing these
resources lets you version a component without needing
to recompile; for example localization. Further, modifi-
cation of resources may look like a form of a mutable
component state. Since components are not supposed to
modify their own resources (or their code), this distinc-
tion remains useful; resources fall into the same category
as the complied code that forms part of a component. An
additional aspect of the components that is not usually
associated with modules is the configurability of de-
pendencies.
3.3. Componentware
The term “Componentware” has been argued in the sci-
entific community, and it is best considered as a reincar-
nation of object-orientated programming and other soft-
ware technologies. There are four basic principles: en-
capsulation, polymorphism, late binding, and safety that
distinguish componentware from previous technology
generations.
Except for inheritance, the list overlaps with ob-
ject-orientated approaches. The concept of a component
means that inheritance does not have a fit/support, be-
cause it is loosely coupled and often distributed. Figure
3, clearly explains component’s functionality by invok-
ing other objects, and this is called delegations.
All components specification correspondence to its
implementations. The specification states, its public in-
terfaces with other components that define a component
encapsulating a functional specification and implementa-
tion for reuse. Whereas, polymorphism supports reuse of
component specifications that can be local or global
standards for reuse throughout a system.
Componentware supports composition allowing inte-
gration and specifications from constituent components
for buildi ng systems.
3.4. Component Infrastructures
It has been reported [18] that many global businesses
including Microsoft, Sun Microsytems, IBM and the
CORBA consortia have established significant compo-
nentware infrastructures through massive technology and
marketing investments.
These component infrastructures are described as
dominant infrastructures extending beyond industry
segments and of course they share similarities. A key
feature is their ability to be mutually interoperable and
they are becoming mainstream development platforms.
For example [18] “Microsoft has been promoting the
Component Object Model (COM) and follow-on prod-
ucts for several years. COM is a single-computer com-
ponent infrastructure. OLE and ActiveX define compo-
nentware interfaces based upon COM. In theory, the Dis-
tributed Component Object Model (DCOM) extends the
capabilities of COM over networks and the Internet”. It
has been reported that there has been a remarkable shift
in businesses such as Microsoft to migrate to compo-
nentware and to continue to promote componentware in
the future.
3.4.1. Software Patter ns
Software patterns are often simply described as the de-
sign tools, knowledge reuse and describe the manner of
modelling business systems. These are described by
Mowbray, T. J. and R. C. Malveau, (1997) [19,20] as
“comprising a common body of software knowledge
which can be applied across all component infrastruc-
tures. The most famous category of software patterns,
called design patterns, comprises proven software design
ideas which are reused by developers”. Other important
categories of patterns include analysis patterns and
anti-patterns [20]. The software patterns are important in
understanding design concepts of componentware and
are important for specifications and implementation. It is
expected that software patterns will ameliorate many of
the common problems reported when developing ob-
Copyright © 2011 SciRes.
JSEA
Moving from Traditional Software Engineering to Componentware
288
ject-oriented systems.
3.4.2. Software Archi tecture
Software architectures are concerned with design context,
including planning, maintenance, operations, stable in-
terface specifications, and the design and reuse of com-
ponents. These stable architecture designs present inter-
esting opportunities for distributed projects teams.
3.5. Component-Based Development
There are a number of advantages and factors that stimu-
late interest in component-based development. Accord-
ing to Brown, (1996) the following factors have contrib-
uted to make the component-based development ap-
proach become so popular [7].
The need to automate the software development proc-
ess.
The economic push moving many organizations to-
wards greater use of available commercial solutions.
The style and architecture of the applications being
developed has significantly changed. There has been a
major change from centralized mainframe-based applica-
tions towards multi-tiered applications.
A set of infrastructure standards and supporting tech-
nologies has emerged during the last few years.
Domain-specific libraries and frameworks are starting
to appear.
Leading companies within the software industry have
announced component-based development strategies.
The web infrastructure is maturing. While there is a
great deal of chaos and competing technology, there is
also a basic shape to the infrastructure that allows collec-
tions of independent developed software applications to
be searched, remotely invoked, communicated, and share
data.
Component-Based Development Roles: Component-
Based-Development is a term that describes the process
of creating applications from existing components and it
involves more than just deployment and creates the units
of functionality, which are later assembled into an appli-
cation [21]. The component-based development process
includes reuse and is an iterative, incremental develop-
ment process and requires specialist technical roles.
These componentware roles are described as “compo-
nent system architect, component framework architect,
component programmer and component assembler/app-
lication developer and these roles are different from ob-
ject-oriented approaches which are more reliant on man-
agement decision making.
3.6. The Component-Based Development Process
Component-based development process appears as two
different activities.
1) The component-based application development
process.
2) The component development process respectively.
The component-based application development proc-
ess focuses on assembly software components that sup-
ply user services driven by specific business require-
ments. Whereas the component development process
focuses on acquiring, wrapping and building the actual
components.
Component Application Development
Many authors are in agreement that the component ap-
plication development process considers the design phase
as a major aspect as it captures specification, assembly
selection of components and integration. According to
Brown (1996) “the development of component-based
systems introduces fundamental changes in the way sys-
tems are acquired, integrated, deployed and evolved.
Rather than the classic waterfall approach to system de-
velopment, systems are designed by examining existing
components to see how they meet the system require-
ments. This is followed by an iterative process of refin-
ing the requirements to match the existing components,
and deciding which of those components that can best be
integrated to provide th e necessary functionality. Finally,
the system is engineered by assembling the selected
components using locally developed code”. It is further
suggested that [7] “the real difference between tradition al
application development and component based applica-
tion development takes place within the design phase,
and it is in the design that you begin paying attention to
how the objects you have identified, during the analysis
phase, can be grouped into components”.
These component states are best described by Brown
(1996) as [7] (Figure 4):
“Gathered or off-the-shelf components (COTS)
Consists of those identified as being of poten tial inter-
est, and requires a process of investigating those compo-
nents which may come from a variety of local and re-
mote sources. At this stage little may be known about a
component’s characteristics. The information available
may simply be its name, its parameters, and some idea of
its required operating environment.
Qualified components
Have discovered interfaces so that possible source of
conflict and overlap among components has been identi-
fied. Discovery can take many forms, but usually in-
volves detailed analysis of any available component
documentation or specifications, discussions with com-
ponent developers and users, and trial execution of the
component in different settings.
Adap ted components
Have been amended to address potential sources of
Copyright © 2011 SciRes. JSEA
Moving from Traditional Software Engineering to Componentware
Copyright © 2011 SciRes.
JSEA
289
and data representation” [22]. Architecture is, increas-
ingly, becoming a crucial part of a software organiza-
tion’s business strategy because it is a reusable asset in
itself that can be reapplied to subsequent systems.
conflict. Typically, simple scripts are written as a buffer
between user request and component actions. The buffer
can be used to provide default information to the com-
ponents, eliminate access to unwanted component be-
havior, and act as an insulation layer for the replacement
of components. The figure implies a kind of component
wrapping.
Therefore, it has increased value for the business and
presents opportunities for new bu siness strategies.
A common view is that component-based development
requires a planned and disciplined approach to the archi-
tecture of the system being built. According to Clements
(1995) “purchasing components at random will result in
a collection of mismatched parts that will have no hope
of working in unison” [23]. This has been further advo-
cated by Garlan (1995), as outlined in [24] who points
out that “the reason why even carefully considered sets
of components may be unlikely to successfully operate
with each other is that designers of software components
make assumptions that are often subtle and undocu-
mented about the ways in which the components will
interact with other co mponents, or th e expectations abou t
services or behaviours of those other components”. It has
been suggested that component models do not solve all
architectural mismatch problems.
Assembled components
Have been integrated via some form of common infra-
structure. For consistent component assembly the infra-
structure must consist of both a physical communication
infrastructure such as messaging infrastructure and a set
of conceptual agreements such as naming convention that
embody the shared semantics among the components.
This infrastructure will support component assembly and
coordination, and differentiates architectural assembly
from ad hoc glue.
Updated components
Have been replaced by newer versions, or by different
components with similar behavior and interfaces. This
aspect of component assembly must be expected and
well supported as an essential activity through appropri-
ate definition of component interfaces and controlled
interaction among components”.
Further, a key aspect of component development is to
design for component reuse.
However, there is a component-based development
approach known as layered systems and this approach “is
based on dividing into different groups (layers) based on
what kind of services the components are offering, that is
the characteristics of the components”. This approach
suggests greater efficiency for development and mainte-
nance projects.
3.7. Architectural Design of a Component-Based
System The unified principle of the layered system architec-
ture approach is that a component at a particular layer is
allowed to make use only of components at the same or
next lower layer.
The importance of a stable, solid and dynamic system
architecture is critical to large-scale systems and is of
utmost importance for component-based systems. Ac-
cording to Bass (1998) architecture is, “an abstract view
distinct from the details of implementation, algorithm, Thus, components at each layer are insulated from
change when components at distant layers are replaced or
Figure 4. Reference model for compone n t assembly [7].
Moving From Traditional Software Engineering to Componentware
290
Table 2. Difference between component-based software and
traditional software model for component assembly [26].
Perspective Component-Based
Software Traditional
Software
Objective To efficiently develop
reliable, maintainable,
reusable software systems
To develop
efficient, reliable
software systems
Infrastructure
Beside operating systems
and programming
languages, certain
component models are
needed. For
instance NET/COM +,
EJB, or CORBA
Only need the
support of
operating systems
and programming
languages
Process
Component-based
software engineering
process – includes many
unique activities such as
component selection,
customization,
composition
Traditional
software
engineering
process – includes
requirements
analysis, design,
coding and testing
Roles Component providers
Component users
Usually, only one
development team
participates in the
entire process.
Portability
Relatively easy to
achieve, because the
adopted component
model and component
architectures will
reconcile many
incompatibility and
interoperability issues.
Difficult to
achieve as the
entire engineering
process is often
for one specific
environment
Interoperability
1. Communications
among components will
go through interfaces
and are managed by
component model.
Component model can
manage some of the
interoperability issues
for you.
2. When combining
varied components,
interoperability issue is
more serious
Very often,
traditional
software systems
are developed in a
restricted context,
and there are less
interoperability
issues. Once there
are, it is hard to
achieve as
modules and
subsystems are
context dependent
Maintainability
1. When producer
provides newer version,
system can be easily
upgraded
2. Less control over how
and when components
are maintained
3. May introduce more
overhead when source
code is not available
4. Versioning is handled
by component providers
independently, so
potential conflicts
may exist
1. When
maintaining the
software, any
modification
may require
reconstruction
of the entire
system
2. Have full
controll of any
maintenance
activity
Reusability
Reusability can occur at
any different level:
component, component
architecture
Difficult to reuse;
for some OO
systems, the reuse
is limited to
individual classes
Scalability
Easy to scale: the
scalability can be
automatically managed
by component model
Hard to scale as
any change in the
code may require
changes to all
relevant modules
or subsystems
Structure Loosely coupled
Often distributed
Usually
tightly coupled
and centralized
system
Code
availability Some component source
code may not be available Source code is
usually available
Customization
1. Many components are
general purpose
components and need
customization before
composition
2. Introspection
mechanism provided by
the component systems
to explore available
systems
When integrating
modules into the
final product, no
customization is
needed
modified” [24]. Additionally, according to Clements
(1996) the study and practice of software architecture is
still immature. Rigorous techniqu es need to be deve loped
to describe software architecture so that they can be ana-
lyzed to predict and assume non-functional system prop-
erties [25] and because a solid and dynamic architecture
is so critical to component-based systems, the architec-
ture-based activities need to be more precisely defined
and supported with processes and tools, and need to be
smoothly incorporated into existing development proc-
esses.
4. The Drivers of Componentware
There are many deficiencies in the traditional software
engineering approaches that have led to an acceptance to
move to componentware which allows rapid “Assembly”
of parts (Components), the development of parts as “re-
usable entities”, maintenance and upgrading of systems
by customizing and replacing such parts. A comparison
of component-based software and traditional software is
presented in Table 2.
The move to Componentware also reveals that busi-
nesses are forced to find ways to address the problems
with traditional approach es. The common failure such as,
the majority of projects unable to meet their deadline,
budget, quality requirement and the continued in crease in
the costs associated with software maintenances can not
continue and needs to be addressed by adopting a new
Copyright © 2011 SciRes. JSEA
Moving from Traditional Software Engineering to Componentware291
approach.
The traditional systems objective is “to deliver an effi-
cient and reliable software system. Reusability, main-
tainability and ability to evolve are characteristics that
are not among the top priorities. Nevertheless, as soft-
ware systems get larger and larger, and more and more
complex, these characteristics become more critical [26].
Finally Componentware needs to address the follow-
ing objectives: shorter time to market, lower cost, better
reusability, higher reliability, and maintainability if it is
to be accepted by the software industry and software de-
velopers.
5. Disadvantage of Componentware
It has been suggested that “the component users do not
have full control of the entire engineering process, which
can introduce difficulties in component composition,
selection, testing, and maintenance, as well as many
other activities” [26]. Therefore more thought needs to be
given to understand how the separate roles and distinct
working patterns of designers and users can adjust to
utilizing the innovative capability offered by the Com-
ponentware approach.
6. Conclusions
The move to greater use of Componentware is the next
major software technology trend. At the present time the
uptake has not been widespread as developers prepare for
the transition.
It is readily available for commercial explo itation. The
move to Componentware has been widely accepted and
actively supported by major vendors, including Microsoft,
Sun, IBM, and t he CORBA vendo r c ons o rt i a .
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 ar-
chitecture, and the establishment of component-based
development teams and recognition of specific roles.
The move to Componentware is an exciting opportu-
nity to advance software development and address the
shortcomi ngs o f outdated softw are approaches.
This paper seeks to clarify that if Componentware is
adopted it should enables modern business practices and
expectations in ways that could not be achieved with
previous approaches especially when business have to
face the challenges of requirements change and rapid
commercial innovation. There is good evidence to sup-
port that Componentware delivers the benefits of soft-
ware reuse and en ables outsourcing to distribu ted project
teams which is of high importance and in addition it cre-
ates new value fo r bu sinesses.
REFERENCES
[1] B. Dahlbom and L. Mathiassen, “The Future of Our Pro-
fession,” Communications of the ACM, Vol. 40, No. 6,
1997, pp. 499-519. doi:10.1145/255656.255706
[2] T. J. Mowbray and R. C. Malveau, “Software Architect
Bootcamp,” Prentice Hall PTR, London, 2004.
[3] C. Szyperski, “Component Software: Beyond Object-
Oriented Programming,” ACM Press, Addison-Wesley,
New York, 1998.
[4] M. D. McIlroy, “Mass-Produced Software Components,
Software Engineering Concepts and Techniques (1968
NATO Conference on Software Engineering),” Van
Nostrand Reinhold, New York, 1976.
[5] J. Udell, “Componentware,” Byte, Vol. 19, No. 5, 1994,
pp. 46-56.
[6] M. Aoyama, “Componentware: Building Applications
with Software Components,” Information Processing So-
ciety of Japan, in Japanese, Vol. 37, No. 1, 1996, pp.
71-79.
[7] A. Brown, “Component-Based Software Engineering,”
IEEE CS Press, Washington DC, 1996.
[8] D. Kiely, “Are Components the Future of Software?”
IEEE Computer, Vol. 31, No. 2, 1998, pp. 10-11.
[9] J. Sametinger, “Software Engineering with Reusable
Components,” Springer-Verlag, Berlin, 1997.
[10] K. Wallnau and D. Carney, “COTS Products and Tech-
nology Evaluation: Concepts and Pragmatics,” 20th Inter-
national Conference on Software Engineering Tutorial,
Kyoto, 19-25 September 1998.
[11] “Microsoft,” 1998. http://www.microsoft.com/activex/
[12] ”OMG,” 1998. http://www.omg.org
[13] A. Thomas, “Enterprise JavaBeans: Server Component
Model for Java,” White Paper, 1997.
http://www.javasoft.com/products/ejb/.
[14] M. Shaw and D. Garlan, “Software Architecture, Perspec-
tives on an Emerging Discipline,” Prentice Hall, London,
1996.
[15] E. Gamma and R. Helm, “Design Patterns: Elements of
Reusable Object-Oriented Software,” Addison-Wesley,
New York, 1995.
[16] M. E. Fayad and D. C. Schmidt,“Object-Oriented Appli-
cation Frameworks,” Communications of the ACM, Vol.
40, No. 10, 1997, pp. 32-38.
doi:10.1145/262793.262798
[17] B. Councill and G. T. Helneman, “Component-Based
Software Engineering: Putting the Pieces Together,” Ad-
dison-Wesley, New York, 2001.
[18] “Componentware,” 2010. http://www.phptr.com
[19] T. J. Mowbray and R. C. Malveau, “Corba Design Pat-
terns,” John Wiley & Sons, New York, 1997.
[20] W. J. Brown, R. C. Malveau, H. W. McCormick and T. J.
Mowbray, “Antipatterns: Refactoring Software, Archi-
tectures, and Projects in Crisis,” John Wiley & Sons, New
York, (1998).
Copyright © 2011 SciRes.
JSEA
Moving from Traditional Software Engineering to Componentware
Copyright © 2011 SciRes. JSEA
292
[21] N. Michael, “Java Frameworks & Components: Acceler-
ate Your Web Application Development,” Cambridge
University Press, Cambridge, 2003.
[22] L. Bass, P. Clements and R. Kazman, “Software Archi-
tecture in Practice,” Addison-Wesley, New York, 1998.
[23] P. E. Clements, “From Subroutines to Subsystems: Com-
ponent-Based Software Development,” American Pro-
grammer, Cutter Information Corporation, 1995.
[24] D. Garlan, R. Allen and J. Ockerbloom, “Architectural Mis-
match,” Proceedings of the 17th International Conference on
Software Engineering, Washington, 24-28 April, 1995.
[25] P. E. Clements, “Software Architecture: An Executive
Overview,” Software Engineering Institute, 1996.
[26] J. Z. Gao, H. S. J. Tsao and Y. Wu, “Testing and Quality
Assurance for Component-Based Software,” Artech
House Computer Library, Boston-London, 2005.