Page 53 -
P. 53
36 Chapter 2 Software processes
There are three types of software component that may be used in a reuse-oriented
process:
1. Web services that are developed according to service standards and which are
available for remote invocation.
2. Collections of objects that are developed as a package to be integrated with a
component framework such as .NET or J2EE.
3. Stand-alone software systems that are configured for use in a particular
environment.
Reuse-oriented software engineering has the obvious advantage of reducing the
amount of software to be developed and so reducing cost and risks. It usually also
leads to faster delivery of the software. However, requirements compromises are
inevitable and this may lead to a system that does not meet the real needs of users.
Furthermore, some control over the system evolution is lost as new versions of the
reusable components are not under the control of the organization using them.
Software reuse is very important and I have dedicated several chapters in the third
part of the book to this topic. General issues of software reuse and COTS reuse are
covered in Chapter 16, component-based software engineering in Chapters 17 and
18, and service-oriented systems in Chapter 19.
2.2 Process activities
Real software processes are interleaved sequences of technical, collaborative, and
managerial activities with the overall goal of specifying, designing, implementing,
and testing a software system. Software developers use a variety of different software
tools in their work. Tools are particularly useful for supporting the editing of different
types of document and for managing the immense volume of detailed information
that is generated in a large software project.
The four basic process activities of specification, development, validation, and evo-
lution are organized differently in different development processes. In the waterfall
model, they are organized in sequence, whereas in incremental development they are
interleaved. How these activities are carried out depends on the type of software,
people, and organizational structures involved. In extreme programming, for example,
specifications are written on cards. Tests are executable and developed before the
program itself. Evolution may involve substantial system restructuring or refactoring.
2.2.1 Software specification
Software specification or requirements engineering is the process of understanding
and defining what services are required from the system and identifying the con-
straints on the system’s operation and development. Requirements engineering is a