Lecture 1 and 2
Lecture 1 and 2
)
and metrics
COMPONENT-BASED DEVELOPMENT
PARADIGM
The component-based development paradigm is now an
established field of software engineering
which from the outset focuses as much as possible on reusability
of pre-constructed code constructs and other usable or reusable
deliverables.
The component-based paradigm can be utilized with both types
of development paradigm, traditional or advanced.
In component-based paradigms, reusability can be at any level,
or with any deliverable,
whether in requirements, documentation, design construct,
coding, test cases or any similar software construct.
Key Findings
In the component-based paradigm, the emphasis on reusability ultimately results in
a shorter development life cycle.
Component-based development supports modularity, or componentization, which
helps control the overall design of the software and ultimately provides better
maintainability to the developed software.
Due to the nature of componentization, the component-based paradigm supports
parallel construction of components to increase productivity in the development.
The component-based paradigm supports reusability not only during but also after
development. Components are deposited in the repository for future use.
Reduced development costs in comparison to other development paradigms.
Components can be added or removed without affecting the other parts of the
software, hence it provides better scalability.
It enhances the overall reliability of the software as pre-tested and properly
implemented components are used in development.
It is assumed that components used in development support language
independence and vendor independence.
It provides greater flexibility in terms of development and user interaction.
Critiques:
Component-based development supports assembly of pre-developed
components. Assembly and integration is a major challenge in this
paradigm. No standard mechanism has been defined for the
integration of components into the software architecture. The only
mechanism available is the design document.
Interaction among components is both crucial and time-consuming.
Interaction issues are complex and generate complexity in the overall
design of the software.
Testing is comparatively time-consuming and costly as the concept is
based on integration and interaction of components. The main focus
is on integration testing of components.
Components can be sourced from different vendors or from a third
party. Component quality may therefore vary, ultimately affecting the
overall quality of the developed software.
Experts are required to identify and integrate components according
COMPONENT-BASED SOFTWARE
ENGINEERING (CBSE)
Component-based software engineering (CBSE) is an elite form of software
engineering that offers the feature of reusability.
Reuse of software artifacts and the process of reusability make CBSE a
specialized software development paradigm. Its philosophy is “buy, don’t
build.”
CBSE reuses pre-constructed and available software constructs rather than
developing them from the beginning.
The basic idea is to develop a component (including classes, functions,
methods and operations) only once and reuse it in various applications rather
than re-constructing it every time.
Reusing pre-developed and pretested components make the development
life cycle shorter, helps to increase the reliability of the overall application
and reduces time to market
The CBSE development paradigm is used to develop generalized
as well as specific components. Four parallel processes—new
component development, selection of preexisting components
from the repository, integration of components and control and
manage— are involved in the creation of more than one
application concurrently, as described in Figure.
With each process there must be a feedback method to address
problems and errors arising in component selection, new
component development, interaction and integration errors
among the components, and their side effects.
To manage all these parallel activities, there must be a control
procedure or management procedure which will not only assess
the development process but will also manage the requirement
analysis, selection of components, integration of components
and, most importantly, the quality of components submitted to
the repository for future reuse.
WHAT IS A COMPONENT?
Business aspects
Architectural issues
THE COMPONENT:
SZYPERSKI
Szyperski defines a component precisely by enumerating its
characteristic properties as follows:
19
CATEGORIES OF
PATTERNS
Patterns can be classified into three
categories:
major
Architectural Patterns, capture the overall
structure and organization of a software system.
Design Patterns, refine the structure and
behavior of the subsystems the
components as well as the
of exist
relationships which a between
software
them.
Idioms,
system, and the
are low-level patterns which are
dependent
on the chosen paradigm and the
programming language used.
20
DESIGN PATTERNS
Design patterns are widely used in the process of designing component-based
systems in which the reusable units must be identified.
21
SOFTWARE
FRAMEWORKS
CBSE means that we build software by "putting pieces together".
22
COMPONENT FRAMEWORKS
Frameworks in general describe a
typical and reusable situation at a
model level.
Compone
Coordination Services (transactions, nt
persistence..) Framewo
rk
Component
model
24
RELATIONSHIPS BETWEEN CONCEPTS
Component-type Component
Specific interface implementation
Independent Component
model
deployment
Component
Coordination Services (transactions, persistence..)
Framework
25
FRAMEWORKS AND
CONTRACTS
Frameworks focus on the overall
properties of component compositions.
Contracts give specifications for
relationships between concrete
components.
Thesespecifications may be different for
components within one composition.
26
FRAMEWORKS AND
PATTERNS
It is important to that
realize patterns
design and frameworks
concepts of different natures.
are distinct
Design patterns are of a logical
representing
nature, knowledge of and
experience gained with software.
Frameworks are of a physical nature, and are
executable software used in either the design
or the run-time phase.
27
FRAMEWORKS AND
PATTERNS
The major differences between
design patterns and frameworks are as
follows:
The level of abstraction of frameworks
and design patterns
Design patterns are smaller
architectural elements than frameworks
The level of specialization of frameworks and
design patterns.
28
CHARACTERISTICS OF COMPONENT-BASED SOFTWARE
ENGINEERING
Some primary characteristics of CBSE are listed
Reusability: Reusability is the focal property of CBSE. Software
reusability is “the process of creating software systems from existing
software rather than building them from scratch.” Software reuse is the
process of integrating predefined specifications, design architectures,
tested code, or test plans with the proposed software.
Composability: One of the fundamental characteristics of CBSE is that
the components are the reusable, composable software entities, that is,
applications are composed of different individual components. These
individual reusable components are designed in such a way that they
can be reused in composition with other components in various
applications with minimum or no fabrication. Components are composed
of components, that is, a component is itself made up of components,
which are further made up of other components, and so on (Atkinson et
al. 2002). A component can be a part of one or more components
Shorter development cycle: The component-based development paradigm follows
the “divide, solve and conquer” approach. In this paradigm, complex and bulky
applications are divided into smaller, more manageable units or modules. Then, rather
than starting coding of a complete module from the first line, existing elements are
sought and assembled that satisfy the requirements of the module under consideration.
This increases software development speed. In addition, several modules can be
implemented concurrently, regardless of location or context. Thus, development time is
saved and the development cycle becomes shorter.
Maintainability: The effort required to add new functionalities to the application, or
modify, update or remove old features from the software, is referred to as the
maintenance. Since CBSE-based software is made up of reusable and replaceable
components, we can add, update, remove or replace components according to the
requirements of the software. Maintaining composable and independent components is
much easier than maintaining monolithic software.
This regressive form of testing makes component-based applications more robust and
improves the quality of the product. More broadly, the effort, cost and time of testing
are noticeably reduced. Components are independently developed, deployed in various
contexts at the same time with minimal or no fabrication and integrated according to
the predefined architecture; hence, it is assumed that there are no unwanted
interactions among the components to make them unreliable. All the interaction paths
are predefined so the reliability and predictability of components is increased
Flexibility and extendibility: Software developers have the
choice of customizing ,assembling and integrating the components
from a set of available components according to their
requirements. Replaceable and composable components are easy
to add, update, modify or remove from the application without
modifying other components Error navigation and fixing are
relatively easy as it is limited to component level only.
COMPONENTIZATION
Componentization is the method of identifying the quantity of components in a
specific application developed through component-based development.
Componentization addresses the issue of maintaining a balance between the number
of components and the complexity factors of the system. Essentially, the level of
componentization is equivalent to the level of requirement sufficiency.
In determining the level of requirement sufficiency, we consider as many
components as are adequate to solve the software application’s intention. Figure
illustrates componentization vs integration cost.
If we divide the problem into a large quantity of components providing small
functionalities, it will increase both the cost of integration and the interaction effort.
Not only the cost but also the number of interactions, the coding complexity, testing
effort and number of duplicate test cases will also increase.
If an application is componentized with fewer components each providing a number
of functionalities, it will cost in terms of testing as well as maintenance. It is desirable
to achieve a minimum cost region so that cost and effort can be balanced against the
number of component.
COMPONENTS
A component is an identifiable, functionally reusable unit
(element/part/piece/ package) of a larger software system.
A component is developed independently.
A component is delivered and deployed in a context-free
environment.
A component interacts with other components through well-
defined interfaces to access and to provide services.
A software component can be a replaceable, modifiable piece
of code that can be integrated with other replaceable,
modifiable components.
TYPES OF COMPONENTS
There are three classes of component:
The selection of appropriate components for the proposed software is crucial in many respects.
Proper and accurate selection of components makes the software economic, helps to shorten
development time, increases reliability and makes the overall development much smoother.
However, in order to select one component from a number that are available with similar
intentions, selection and verification criteria are needed. At present the only criteria available
for component selection are the customer requirements. Developers generally look for a
component that fits into the software design without considering other selection parameters.
Apart from the requirements, major issues in component selection are:
a. Selection based on the level or degree of reusability of components.
b. Selection based on the reliability issues of the component.
c. Selection based on the increased/decreased level of complexity in the overall software.
d. Selection based on the component testing efforts.
e. Selection based on the scope of maintenance of the component.
f. Selection based on the scope of scalability in the component
COMPONENT
INTERACTION
In component-based software development, interaction among components is necessary as they
are integrated to provide features and functionalities for the proposed software.
Components are designed to interact with each other according to the requirements of the
software. Component interaction is not only necessary but plays a crucial role in the design of the
software architecture. Components are assumed to be context independent, language
independent and vendor independent. Researchers have used various methods, including graph
theory notation, to show the interaction among components. UML includes component interaction
diagrams to denote such interactions. Some fundamental issues with the interaction of
components are as follows:
a. Interactions among components generate complexity in the software. The aim is to reduce
interaction complexity among components.
b. It is necessary to define the interaction mechanism, parameters or methods among components.
c. There is a need for common interfaces to make an interaction between two components.
d. Interaction of components invokes integration-related issues including integration testing and
regression testing.
e. Interaction can introduce new software errors which may increase the testing and debugging
schedule and cost.
f. Appropriate and well-defined metrics are needed to assess these interactions so that the
contribution of components can be justified.
COMPONENT DEPENDENCY
Interaction and integration among components create dependencies among them.
Components depend on each other for functionalities and services. Component
dependency governs the level of coupling among the components. As the
dependency increases, interaction among components will also increase. These
interaction dependencies generate complexity in the software architecture.
Components can be dependent on each other for various reasons, including:
i. Dependency due to data sharing
ii. Temporal dependency
iii. Dependency due to controlling the flow of execution
iv. Sharing of the same state or state dependency
v. Dependency due to providing input or due to receiving output
vi. Context dependency
vii. Interface dependency
Major issues in the context of component dependencies are as follows:
a. Dependency among components should be kept to a minimum if it
cannot be eliminated completely.
b. Notation of dependency in the design of software should be
unambiguous.
c. Presentation of dependency in the implementation of software
should be clearly defined.
d. There should be clearly defined and appropriate metrics to assess
the dependency among components.
e. Dependencies generate complexity overheads in the overall
software architecture . Extra care is required to implement and assess
component dependencies.
COMPONENT
COMPOSITION
Composition defines the capability of the component to be integrated with other components.
Composition among components results in component-based software. The property of
composability defines the usability of the component in the software. It is one of the
fundamental properties of the component. Overall behavior of the software depends on the
flexibility or rigidity of the components in respect of composability.
Composition allows the component to behave according to the structure of the design. The
composition of a component is its individual property. In component-based software
development, components are assumed to be self-composable as well as composable
independently.
Some basic issues regarding component composition are: