Software Engineering 1B SWE320
Software Engineering 1B SWE320
Increased dependability Reused software, that has been tried and tested in working systems, should
be m ore dependable than new software. The initial use of the software reveals any design and
implementation faults. These are then fixed, thus reducing the number of failures when the software
is reused.
Reduced process risk If software exists, there is less uncertainty in the costs of reusing that software
than in the costs of development. This is an important factor for project management as it reduces
the margin of error in project cost estimation. This is particularly true when relatively large software
components such as sub-systems are reused.
Effective use of specialists Instead of application specialists doing the same work on different
projects, these specialists can develop reusable software that encapsulate their knowledge.
Standards compliance Some standards, such as user interface standards, can be implemented as a
set of standard reusable components. For example, if menus in user interfaces are implemented
using reusable components, all applications present the same menu formats to users. The use of
standard user interfaces improves dependability as users are less likely to make mistakes when
presented with a familiar interface.
Accelerated development Bringing a system to market as early as possible is often more important
than overall development costs. Reusing software can speed up system production because both
development and validation time should be reduced.
Reuse problems
Increased maintenance costs If the source code of a reused software system or component is n ot
available then maintenance costs may be increased as the reused elements of the system may
become increasingly incompatible with system changes.
Lack of tool support CASE toolsets may not support development with reuse. It may be difficult or
impossible to integrate these tools with a component library system. The software process assumed
by these tools may not take reuse into account.
Creating and maintaining a component library Populating a reusable component library and ensuring
the software developers can use this library can be expensive. Our current techniques for classifying,
cataloguing and retrieving software components are immature.
1.2
Application frameworks Collections of abstract and concrete classes that can be adapted and
extended to create application systems.
Legacy system wrapping Legacy systems that can be ‘wrapped’ by defining a set of interfaces and
providing access to these legacy systems through these interfaces.
Service-oriented systems Systems are developed by linking shared services that may be externally
provided
Application product lines An application type is generalised around a common architecture so that
it can be adapted in different ways for different customers.
Configurable vertical applications A generic system is designed so that it can be configured to the
needs of specific system customers.
Program libraries Class and function libraries implementing commonly-used abstractions are
available for reuse.
Program generators A generator system embeds knowledge of a particular types of application and
can generate systems or system fragments in that domain.
1.3
development team.