Component-Based Software Engineering - New Challenges in Software Development
Component-Based Software Engineering - New Challenges in Software Development
Component-Based Software Engineering - New Challenges in Software Development
Software Development
Ivica Crnkovic
Mälardalen University, Department of Computer Engineering, Västerås, Sweden
[email protected], http://www.idt.mdh.se/personal/icc
tel: +56 70 533 75 57 fax: +46 21 10 41 60
Abstract
IVICA CRNKOVIC assesses the challenges of this emerging technology and discusses its
implications for the software development process.
1
Software Development Challenges
We are witnessing an enormous expansion in the use of software in business, industry,
administration and research. Software is no longer marginal in technical systems but has now
become a central factor in many fields. System features based on software functionality, rather
than other characteristics, are becoming the most important factor in competing on the market,
for example in car industry, the service sector and in schools. Increasing numbers of software
users are non-experts. These trends place new demands on software. Usability, robustness, simple
installation and integration become the most important features of software. As a consequence of
the wider area of software utilisation, the demand for the integration of different areas has
increased. We distinguish between vertical integration in which data and processes at different
levels are integrated, and horizontal integration in which similar types of data and processes from
different domains are integrated. For example, in industrial process automation, at the lowest
levels of management (Field Management), data collected from the process and controlled
directly, is integrated on the plant level (Process Management), then is further processed for
analysis and combination with data provided from the market and finally published on the Web
(Business Management).
A consequence of all this is that software is becoming increasingly large and complex.
Traditionally, software development addressed challenges of increasing complexity and
dependence on external software by focussing on one system at a time and on delivery deadlines
and budgets, while ignoring the evolutionary needs of the system. This has led to a number of
problems: the failure of the majority of projects to meet their deadline, budget, and quality
requirements and the continued increase in the costs associated with software maintenance.
To meet these challenges, software development must be able to cope with complexity and to
adapt quickly to changes. If new software products are each time to be developed from scratch,
these goals cannot be achieved. The key to the solution to this problem is reusability. From this
perspective Component-based Development (CBD) appears to be the right approach. In CBD
software systems are built by assembling components already developed and prepared for
integration. CBD has many advantages. These inc lude more effective management of
complexity, reduced time to market, increased productivity, improved quality, a greater degree of
consistency, and a wider range of usability[1].
However, there are several disadva ntages and risks in using CBD which can jeopardise its
success.
− Time and effort required for development of components. Among the factors which can
discourage the development of reusable components is the increased time and effort
required, the building of a reusable unit requires three to five times the effort required to
develop a unit for one specific purpose. (B. Spencer, Microsoft, Presentation at 22nd ICSE,
1999, also an interesting observation about efficient reuse of real-time components, made
by engineers at Siemens [2] that, as a rule of thumb, the overhead cost of developing a
reusable component, including design plus documentation, is recovered after the fifth reuse.
Similar experience at ABB [3] shows that reusable components are exposed to changes
more often than non-reusable parts of software at the beginning of their lives, until they
reach a stable state.)
2
− Unclear and ambiguous requirements. In general, requirements management is an
important part of the development process, its main objective being to define consistent
and complete component requirements. Reusable components are, by definition, to be used
in different applications, some of which may yet be unknown and the requireme nts of
which cannot be predicted. This applies to both functional and non- functional
requirements.
− Conflict between usability and reusability. To be widely reusable, a component must be
sufficiently general, scalable and adaptable and therefore more comple x (and thus more
complicated to use), and more demanding of computing resources (and thus more
expensive to use). A requirement for reusability may lead to another development
approach, for example building a new, a more abstract level, which gives less flexibility
and fine tuning, but achieves better simplicity [3][4].
− Component maintenance costs. While application maintenance costs can decrease,
component maintenance costs can be very high since the component must respond to the
different requirements of different applications running in different environments, with
different reliability requirements and perhaps requiring a different level of maintenance
support.
− Reliability and sensitivity to changes. As components and applications have separate
lifecycles and different kinds of requirements, there is some risk that a component will not
completely satisfy the application requirements or that it may include concealed
characteristics not known to application developers. When introducing changes on the
application level (changes such as updating of operating system, updating of other
components, changes in the application, etc.), there is a risk that the change introduced will
cause system failure.
To enjoy the advantages and avoid the problems and risks, we need a systematic approach to
component-based development at the process and technology levels.
The major goals of CBSE are the provision of support for the development of systems as
assemblies of components, the development of components as reusable entities, and the
maintenance and upgrading of systems by customising and replacing their components [5]. The
building of systems from components and the building of components for different systems
3
requires established methodologies and processes not only in relation to the
development/maintenance aspects, but also to the entire component and system lifecycle
including orga nisational, marketing, legal, and other aspects. In addition to specific CBSE
objectives such as component specification or composition and technologies, there are a number
of software engineering disciplines and processes which require specific methodologies for
application in component-based development. Many of these methodologies are not yet
established in practice, some are not even developed. The progress of software development in
the near future will depend very much on the successful establishment of CBSE and this is
recognized by both industry and academia. All major software engineering conferences now
include sessions related to CBSE and CBSE workshops are held frequently[6][7][8][9][10].
According to the Gartner Group [11] “By 2002, 70 percent of all new applications will be
deployed using component-based application building blocks.”
Overviews of certain CBSE disciplines and some of the relevant trends and challenges in the near
future are presented below.
Component Specification
For a common understanding of component-based development, the starting point is an
agreement of what a component is and what it is not. As a generic term the concept is pretty clear
– a component is a part of something – but this is too vague to be useful. The definition of a
component has been widely discussed [13][14]. However, we shall adopt Szyperski’s definition
[4], which is the most frequently used today:
A software component is a unit of composition with contractually specified interface and explicit
context dependencies only. A software component can be deployed independently and is subject
to composition by third parts.
The most important feature of a component is the separation of its interface from its
implementation. This separation is different from those which we can find in many programming
languages (such as ADA or Modula-2), in which declaration is separated from implementation, or
those in object-oriented programming languages in which class definitions are separated from
class implementations. We require that the integration of a component into an application should
be independent of the component development lifecycle and that there should be no need to
recompile or re- link the application when updating with a new component. Another important
characteristic of the separatio n is that the component implementation is only visible through its
interface. This is especially significant for components delivered by a third party. An implication
of this is the requirement for a complete specification of a component including its functional
interface, non-functional characteristics (performance, resources required, etc.), use cases, tests,
etc. While current component-based technologies successfully manage functional interfaces,
there is no satisfactory support for managing other parts of a component specification.
The component definition adopted above is focused on the use of components. It says little about
how to design, implement and specify a component. There are however, other definitions which
point to other aspects of component-based development. For example there is a strong relation
between object-oriented programming (OOP) and components. Component models (also called
component standards) COM/DCOM [15][16], .NET[17], Enterprise Java Beans (EJB)[18][19],
and CORBA Component Model (CCM) [20] relate Component Interface to Class Interface.
Components adopt object principles of unification of functions and data encapsulation. Cheesman
4
and Daniels [21] consider that a component can exist in several forms during its lifecycle:
Component Specification (component characteristics, component function), Component Interface
(a part of its specification, a definition of a component’s behaviour), Component Implementation
(A realisation of a Component Specification), Installed Component (deployed instance of a
Component Implementation) and Component Object (an instance of Installed Object). Not all
researchers agree that components are extensions of OOP. On the contrary, they consider that the
difference between components and objects lies in the fact that an object has state and is a unit of
instantiation, while a component is stateless and is a unit of deployment [4].
There are also different understandings of CBD in academia and industry [22]. While researchers
in academia define components as well defined entities (often small, and with easily understood
functional and non- functional features), industry sees components as parts of a system which can
be reused, but are not necessarily well defined with explicit interfaces and with slight or no
conformance with component models. A component can be an amorphous part of a system, the
adaptation of which may require much effort. Such components (or rather reusable entities) are of
extreme importance, as the larger the components are, the greater the productivity which can be
achieved by their reuse.
Development with components is focused on the identification of reusable entities and relations
between them, starting from the system requirements. The early design process includes two
essential steps: Firstly, specification of a system architecture in terms of functional components
5
and their interaction, this giving a logical view of the systems and secondly, specification of a
system architecture consisting of physical components.
Different lifecycle models, established in software engineering, can be used in CBD. These
models will be modified to emphasise component-centric activities. Let us, consider, for
example, the waterfall model using an ext reme component-based approach. Fig. 1 shows the
waterfall model and the meaning of the phases. Identifying requirements and a design in the
waterfall process is combined with finding and selecting components. The design includes the
system architecture design and component identification/selection.
3 Create
6
− Replace earlier with later versions of components. This corresponds with system
maintenance. Bugs may have been eliminated or new functionality added.
There are many other aspects of CBD which require specific methods, technologies and
management. For example, development environment tools [24][25], component models and
support for their use, software configuration management [26], testing, software metrics, legal
issues, project management, development process, standardisation and certification issues, etc.
Discussion of these is beyond the scope of this article and the relation between software
architecture and CBD is discussed in the following.
7
tools. Architectural definition languages (ADLs), for example ACME [29], can be used for
designing component-based-systems and implemented for the existing component models.
Software architecture is often related to a process of tradeoff analysis. Experience has shown that
the many attributes of large software systems live principally in the system's software
architecture. In such systems the achievement of qualities attributes depends more on the overall
software architecture than on code- level practices such as language choice, detailed design,
algorithms, data structures, testing, and so on. There exist several methods for such analysis, for
example SAAM (Software Architecture Analysis Method) [30] and ATAM (Architecture
Tradeoff Analysis Method) [31]. Both ATAM and SAAM are a scenario-based method.
However, unlike the SAAM, the ATAM focuses on multiple quality attributes (modifiability,
availability, security, and performance) and is aimed at locating and analysing tradeoffs in a
software architecture. For component-based systems a modified approach in these analyses is
required. The components have pre-determined attributes, some of them immanent only to the
component, but some of them emerging in composition with other components. A tradeoff
analysis helps in selecting the proper components and in predicting the attributes of component
compositions. At the same time inclusion of the pre-existing components sets the boundaries in
which the analysis can be performed. For example one characteristic of a candidate component
can be a high reusability but a poor performance, while of the other candidate a better
performance but a lower reusability. The architectural analysis will he lp in making decision in
component selection.
Software architecture and CBD are successfully used in the development of software product
lines [22][27] from which many variants of a product are delivered. Typical product variants
contain a set of core-components and a number of additional components. The component-based
approach and architectural design play important role in product configuration management.
8
<<interface>>
<<subsystem>>
IAccount Canonical Form
Account
+getAccount()
<<subsystem>>
Elided Form
IAccount Account
UML is however not specialised for CBD and certain extensions to standard UML (such as
naming convention, or stereotypes) are required. The component interfaces cannot be described
by UML at such a detailed level that they can be used directly. For this reason there exist
extensions to UML, for example Catalysis [33]. Further work on UML related to CBSE is
expected. The next major version of UML (UML 2.0) [34] includes proposals for extensions for
describing Enterprise Java Beans, data modelling entities, real- time components, XML
components, etc. Many of these are related directly or indirectly to CBSE.
9
<<subsystem>> <<subsystem>>
IComA ComA IComB ComB
Conceptual
Architecture
<<subsystem>>
IComA ComC
Implementation
Architecture
<<imp>> <<imp>>
IComA ComA IComB ComB
Deployment
Architecture
:ComA :ComB
Server DataServer
− Composition predictability – Even if we assume that we can specify all the relevant
attributes of components, it is not known how these attributes determine the
corresponding attributes of systems of which they are composed. The ideal approach, to
derive system attributes from component attributes is still a subject of research. A
question remains - “Is such derivation at all possible? Or should we not concentrate on
the measurement of the attributes of component composites?” [39].
11
− Long-term management of component-based systems – As component-based systems
include sub-systems and components with independent lifecycles, the problem of system
evolution becomes significantly more complex. There are many questions of different
types: technical issues (can a system be updated technically by replacing components?),
administrative and organisational issues (which components can be updated, which
components should be or must be updated?), legal issues (who is responsible for a system
failure, the producer of the system or of the component?), etc. CBSE is a new approach
and there is little experience as yet of the maintainability of such systems. There is a risk
that many such systems will be troublesome to maintain.
− Dependable systems and CBSE - The use of CBD in safety-critical domains, real-time
systems, and different process-control systems, in which the reliability requirements are
more rigorous, is particularly challenging. A major problem with CBD is the limited
possibility of ensuring the quality and other non- functional attributes of the components
and thus our inability to guarantee specific system attributes.
These are some of the many challenges facing CBSE today. The goal of CBSE is to standardise
and formalise all disciplines supporting activities related to CBD. The success of the CBD
approach depends directly on further research and the implementation of CBSE.
12
References
[1] Brown A. Large-Scale Component-Based Development. Prentice Hall, 2000
[2] Mrva, M. Reuse Factors in Embedded Systems Design. High- Level Design
Techniques Dept. at Siemens AG, Munich, Germany, 1997
[3] Crnkovic, I. and Larsson, M. A Case Study: Demands on Component-based
Development, Proceedings 22nd International Conference on Software Engineering,
ACM Press, 2000
[4] Szyperski C., Component Software –Beyond Object-Oriented Programming. Addison-
Wesley, 1998
[5] Heineman G. and Councill W. Component-based Software Engineering, Putting the
Pieces Together. Addison Wesley, 2001
[6] ICSE 2000, Workshop on Component-Based Software Engineering (CBSE 3),
http://www.sei.cmu.edu/cbs/cbse2000/CFP2000.html, Access date 2001-07-14
[7] ICSE 2001, Workshop on Component-Based Software Engineering (CBSE 4),
http://www.sei.cmu.edu/pacc/CBSE4-Proceedings.html, Access date 2001-07-14
[8] ECOOP 2000, Workshop on Component-Oriented Programming,
http://www.ipd.hk-r.se/bosch/WCOP2000/, Access date 2001-07-14
[9] Euromicro 2001, Workshop on Component-Based Software Engineering,
http://www.idt.mdh.se/ecbse/, Access date 2001-07-14
[10] Workshop on CBSE – ABB Corporate Research Centre, Switzerland, 2000,
http://icawww2.epfl.ch/~opreiss/CBSE_Conference2000/, Access date 2001-07-14
[11] Gartner Group, http://www.gartner.com, Access date 2001-07-14
[12] Brown A. and Wallnau K., The current state of CBSE, IEEE Software, 1998
[13] Szyiperski C. and Pfister C., Workshop on Component-Oriented Programming,
Summary. In Mühlhäuser M. (ed.) Special Issues in Object-Oriented Programming –
ECOOP96 Workshop Reader, Springer 1997
[14] ICSE 1999, Workshop on Component-Based Software Engineering (CBSE 2),
http://www.sei.cmu.edu/cbs/icse99/cbsewkshp.html, Access date 2001-07-14
[15] Box D. Essential COM, Addison-Wesley, 1998
[16] Microsoft Component Object Model, http://www.microsoft.com/com/, Access date
2001-07-14
[17] Microsoft .NET Component Model, http://www.microsoft.com/net, Access date 2001-
07-14
[18] Enterprise Javabeans technology, http://java.sun.com/products/ejb/, Access date 2001-
07-14
[19] Matena V. and Stearns B Applying Enterprise JavaBeans(TM): Component-Based
Development for the J2EE(TM) Platform, Addison-Wesley, 2000
[20] OMG, CORBA, http://www.omg.org/technology/documents/spec_catalog.htm,
Access date 2001-07-14
[21] Cheesman J. and Daniels J. UML Components – a Simple Process for Specifying
Component-Based Software, Addison-Wesley, 2001
[22] Bosch J. Design & Use of Software Architecture, Addison Wesley, 2000
[23] Maiden N. and Ncube C. Acquiring Requirements for Commercial Off-The Shelf
Package Selection, IEEE Software, Vol. 15, No. 2, Mar., 1998
[24] Microsoft Visual Studio, http://msdn.microsoft.com/vstudio/, Access date 2001-07-14
13
[25] Development tools – Forte ™ tools, http://www.sun.com/forte/, Access date 2001-07-
14
[26] Larsson M. and Crnkovic I., New challenges for configuration Management,
Proceedings of 9th Symposium on System Configuration Management, Lecture Notes
in Computer Science, Springer, 1999
[27] Bosch J. Software Product Lines: Organisational alternatives, ICSE 2000
Proceedings, ACM Press, 2001, 91-100
[28] L. Bass, P. Clements, R. Kazman, Software Architecture In Practice, Addison
Wesley, 1998
[29] ACME architecture definition language, http://www.cs.cmu.edu/~acme/, Access dated
2001-07-14
[30] Kazman, R., Abowd, G., Bass, L., Clements, P., “Scenario-Based Analysis of
Software Architecture”, IEEE Software, Nov. 1996, 47-55.
[31] Rick Kazman, Mario Barbacci, Mark Klein, S. Jeromy Carrière, Experience with
Performing Architecture Tradeoff Analysis, ICSE 1999 Proceedings, ACM Press,
1999, 54-63
[32] Booch G., Jacobson I and Rumbaugh J. The Unified Modeling Language User Guide,
Addison-Wesley, 1998
[33] D'Souza D. and Wills A., Objects, Components, and Frameworks With UML : The
Catalysis Approach , Addison-Wesley, 1998
[34] OMG UML, http://www.omg.org/technology/uml, Access date 2001-07-14
[35] OPC Foundation, http://www.opcfoundation.org/ , Access date 2001-07-14
[36] Extensible Markup Language (XML) http://www.w3.org/XML, Access date 2001-07-
14
[37] Voas J. and Payne J., Dependability Certification of Software Components, Journal of
Systems and Software, No. 52, 2000, pp. 165-172
[38] Morris J., Lee G., Parker K., Bundell G., Peng Lam C., "Software Component
"Certification", IEEE Computer, 2001, September
[39] Wallnau K. and Stafford J., Ensembles: Abstractions for a New Class of Design
Problem, 27th Euromicro Conference 2001 Proceedings, IEEE Computer society,
2001, pp. 48-55
[40] Kotonya G. and Rashid A., A strategy for Managing Risks in Component-based
Software Development,27th Euromicro Conference 2001 Proceedings, IEEE
Computer society, 2001, pp. 12-21
[41] Crnkovic I., Larsson M., Küster Filipe J. K., Lau K., Databases and Information
Systems, Fourth International Baltic Workshop, Baltic DB&IS, Selected papers,
Kluwer Academic Publishers 2001, pp.237-252
14