Software Reuse and Component-Based Software Engineering: CIS 376 Bruce R. Maxim UM-Dearborn
Software Reuse and Component-Based Software Engineering: CIS 376 Bruce R. Maxim UM-Dearborn
Software Engineering
CIS 376
Bruce R. Maxim
UM-Dearborn
Software Reuse
In most engineering disciplines, systems are
designed by composition (building system out of
components that have been used in other systems)
Software engineering has focused on custom
development of components
To achieve better software quality, more quickly,
at lower costs, software engineers are beginning to
adopt systematic reuse as a design process
Types of Software Reuse
Application System Reuse
reusing an entire application by incorporation of one
application inside another (COTS reuse)
development of application families (e.g. MS Office)
Component Reuse
components (e.g. subsystems or single objects) of one
application reused in another application
Function Reuse
reusing software components that implement a single
well-defined function
Opportunistic Reuse
Design
system
aachitecture
Specify
components
Search for
reusable
components
Incorporate
discovered
components
Development Reuse as a Goal
Search for
reusable
components
Outline
system
requirements
Modify requirements
accor ding to
discovered
components
Search for
reusable
components
Architectur al
design
Specify system
components
based on reusable
components
Benefits of Reuse
Increased Reliability
components already exercised in working systems
Reduced Process Risk
less uncertainty in development costs
Effective Use of Specialists
reuse components instead of people
Standards Compliance
embed standards in reusable components
Accelerated Development
avoid custom development and speed up delivery
Requirements for Design with Reuse
You need to be able to find appropriate reusable
components
You must be confident that that component you
plan to reuse is reliable and will behave as
expected
The components to be reused must be documented
to allow them to be understood and modified (if
necessary)
Reuse Problems
Increased maintenance costs
Lack of tool support
Pervasiveness of the not invented here
syndrome
Need to create and maintain a component library
Finding and adapting reusable components
Economics of Reuse - part 1
Quality
with each reuse additional component defects are
identified and removed which improves quality.
Productivity
since less time is spent on creating plans, models,
documents, code, and data the same level of
functionality can be delivered with less effort so
productivity improves.
Economics of Reuse - part 2
Cost
savings projected by estimating the cost of building the
system from scratch and subtracting the costs
associated with reuse and the actual cost of the software
as delivered.
Cost analysis using structure points
can be computed based on historical data regarding the
costs of maintaining, qualification, adaptation, and
integrating each structure point.
Generator-Based Reuse
Program generators reuse standard patterns and
algorithms
Programs are automatically generated to conform
to user defined parameters
Possible when it is possible to identify the domain
abstractions and their mappings to executable code
Domain specific language is required to compose
and control these abstractions
Types of Program Generators
Applications generators for business data
processing
Parser and lexical analyzers generators for
language processing
Code generators in CASE tools
User interface design tools
Program Generation
Program generator Generated program
Application
description
Application domain
knowledge
Database
Assessing Program Generator Reuse
Advantages
Generator reuse is cost effective
It is easier for end-users to develop programs
using generators than other CBSE techniques
Disadvantages
The applicability of generator reuse is limited
to a small number of application domains
Component-Based Software
Engineering
CBSE is an approach to software development
that relies on reuse
CBSE emerged from the failure of object-oriented
development to support reuse effectively
Objects (classes) are too specific and too detailed
to support design for reuse work
Components are more abstract than classes and
can be considered to be stand-alone service
providers
Component Abstractions
Functional Abstractions
component implements a single function (e.g. ln)
Casual Groupings
component is part of a loosely related entities like declarations and
functions
Data Abstractions
abstract data types or objects
Cluster Abstractions
component from group of cooperating objects
System Abstraction
component is a self-contained system
Engineering of Component-Based
Systems - part 1
Software team elicits system requirements
Architectural design is established
Team determines requirements are amenable to composition
rather than construction
Are commercial off-the-shelf (COTS) components available to implement the
requirement?
Are internally developed reusable components available to implement the
requirement?
Are the interfaces for available components compatible within in the
proposed system architecture?
Team attempts to remove or modify requirements that cannot
be implemented with COTS or in-house components
Engineering of Component-Based
Systems - part 2
For those requirements that can be addressed with
available components the following activities take place:
component qualification
component adaptation
component composition
component update
Detailed design activities commence for remainder of the
system
Definition of Terms
Component Qualification
candidate components are identified based on services provided and means
by which consumers access them
Component Adaptation
candidate components are modified to meet the needs of the architecture or
discarded
Component Composition
architecture dictates the composition of the end product from the nature of
the connections and coordination mechanisms
Component Update
updating systems that include COTS is made more complicated by the fact
that a COTS developer must be involved
Commercial Off-the-Shelf Software
COTS systems are usually complete applications
library the off an applications programming
interface (API)
Building large systems by integrating COTS
components is a viable development strategy for
some types of systems (e.g. E-commerce or video
games)
COTS Integration Problems
Lack of developer control over functionality and
performance
Problems with component interoperability as
COTS vendors make different user assumptions
COTS vendors may not offer users any control
over the evolutions of its components
Vendors may not offer support over the lifetime of
a product built with COTS components
Developing Components for Reuse
Components may constructed with the explicit
goal to allow them to be generalized and reused
Component reusability should strive to
reflect stable domain abstractions
hide state representations
be independent (low coupling)
propagate exceptions via the component interface
Reusable Components
Tradeoff between reusability and usability
generic components can be highly reusable
reusable components are likely to be more complex and
harder to use
Development costs are higher for reusable
components than application specific components
Generic components may be less space-efficient
and have longer execution times than their
application specific analogs
Domain Engineering - part 1
Domain analysis
define application domain to be investigated
categorize items extracted from domain
collect representative applications from the domain
analyze each application from sample
develop an analysis model for objects
Domain model
Software architecture development
Domain Engineering - part 2
Structural model
consists of small number of structural elements
manifesting clear patterns of interaction
architectural style that can be reused across applications
in the domain
structure points are distinct constructs within the
structural model (e.g. interface, control mechanism,
response mechanism)
Reusable component development
Repository of reusable components is created
Structure Point Characteristics
Abstractions with limited number of instances
within an application and recurs in applications in
the domain
Rules governing the use of a structure point should
be easily understood and structure point interface
should be simple
Structure points should implement information
hiding by isolating all complexity contained
within the structure point itself
Component-Based Development
Analysis
Architectural design
component qualification
component adaptation
component decomposition
Component engineering
Testing
Iterative component update
Component Adaptation Techniques
White-box Wrapping
integration conflicts removed by making code-level
modifications to the code
Grey-box Wrapping
used when component library provides a component
extension language or API that allows conflicts to be
removed or masked
Black-box Wrapping
requires the introduction of pre- and post-processing at
the component interface to remove or mask conflicts
Enhancing Reliability
Name generalization
names modified to use domain independent language
Operation generalization
operations added to provide extra functionality
domain specific operations may be removed
Exception generalization
application specific exceptions removed
exception management added to increase robustness
Component certification
component warranted correct and reliable for reuse
Component Composition Infrastructure
Elements - part 1
Data exchange model
similar to drag and drop type mechanisms should be
defined for all reusable components
allow human-to-software and component-to-component
transfer
Automation
tools, macros, scripts should be implemented to facilitate
interaction between reusable components
Component Composition Infrastructure
Elements - part 2
Structured storage
heterogeneous data should be organized and contained
in a single data structure rather several separate files
Underlying object model
ensures that components developed in different
languages are interoperable across computing platforms
Application Frameworks
Frameworks are sub-system design containing a
collection of abstract and concrete classes along
with interfaces between each class
A sub-system is implemented by adding
components to fill in missing design elements and
by instantiating the abstract classes
Frameworks are reusable entities
Framework Classes
System infrastructure frameworks
support development of systems infrastructure elements
like user interfaces or compilers
Middleware integration frameworks
standards and classes that support component
communication and information exchange
Enterprise application frameworks
support development of particular applications like
telecommunications or financial systems
Extending Frameworks
Generic frameworks need to be extended to create
specific applications or sub-systems
Frameworks can be extend by
defining concrete classes that inherit operations from
abstract class ancestors
adding methods that will be called in response to events
recognized by the framework
Frameworks are extremely complex and it takes
time to learn to use them (e.g. DirectX or MFC)
Representative Component
Standards
Object Management Group (OMG) CORBA
common object request broker architecture
Microsoft COM
component object model
Sun JavaBeans Component System
Application Families
Set of related applications that has a common core
or domain specific architecture
The common core is reused each time a new
application is created
Each member of the family is specialized
platform specialization
configuration specialization
function specialization (based on differences in
customer requirements)
Application Family Architectures
Architectures must be structured into loosely
coupled sub-systems to allow easy modification
Architectures should separate entities from their
descriptions
Access to entities must come through their
descriptions (interfaces) rather than by direct
access
Family Member Development
Elicit stakeholder requirements
use existing family member as prototype
Choose closest-fit family member
search for member that best matches requirements
Re-negotiate requirements
adapt requirements as needed to software capabilities
Adapt existing system
develop new modules needed
Deliver new family member
document key features for further development
Classifying and Retrieving
Components - part 1
Describing reusable components
concept
what the component does
content
how the concept is realized
context
specifies conceptual, operational, and implementation features
of the software component within its domain of application
Classifying and Retrieving
Components - part 2
Library indexing methods
uncontrolled indexing vocabularies
syntax free, no restrictions)
enumerated classification
hierarchical listing of the domain objects grouped by class
relations
faceted classification
based on 1 to 8 basic descriptive application domain features
attribute-value classification
similar to faceted classification using unlimited number of
fixed terms
Classifying and Retrieving
Components - part 3
Reuse environment elements
component database capable of storing software
components and classification information to allow
their retrieval
library management system to allow access to database
software component retrieval system that enables client
software to retrieve components and services from
library server
CBSE tools that support integration of reused
components into a new design or implementation
Design Patterns
A pattern provides a description of a problem and
the essence of its solution
Provide a means of reusing abstract knowledge
about a problem and its solution
Patterns should be sufficiently abstract to allow its
reuse in different settings
Patterns often rely on object characteristics like
inheritance and polymorphism
Pattern Elements
Name
some meaningful identifier
Description
similar to any module description
Solution
template for a design solution which can be instantiated
in different ways
Consequences
results and tradeoffs from applying the pattern
Example from
Sommerville 6th Edition
Chapter 14
Multiple Data Displays
Subject
A: 40
B: 25
C: 15
D: 20
Observer 1
Observer 2
0
5 0
2 5
A B C D
A
B
C
D
Observer Pattern
Name
Observer
Description
Separates the display of object state from the object itself
Problem description
Used when multiple displays of state are needed
Solution description
See next slide with UML description
Consequences
Optimisation to enhance display performance are impractical
Observer Pattern - UML
Subject Observer
Attach (Observer)
Detach (Observer)
Notify ()
Update ()
ConcreteSubject
GetState ()
subjectState
ConcreteObserver
Update ()
observerState
return subjectState
for all o in observers
o -> Update ()
observerState =
subject -> GetState ()