Week 6 - Software Process Model Mod
Week 6 - Software Process Model Mod
Topic Coverage
Process activities
Generic Process models
Coping with change
Modern Process Models
The Rational Unified Process
Computer AIDED Software Engineering
Introduction
This module has been encompassed to distinguish different software development
processes and activities. In systems design and implementation an automated system –
software is indeed plays a vital role in the success of system implementation process.
Software Process
Let us first discuss process, when we provide a service or create a product we always
follow a sequence of steps to accomplish a set of tasks. You do not usually just do things
just to accomplish an output example: you don’t just put up the drywall before the wiring
for a house is installed or bake a cake before all the ingredients are mixed together. We
usually follow certain steps or procedures to produce an expected output, we can think of a
series of activities as a process.
Any process has the following characteristics: (a) it recommends all of the major activities
(b) it uses resources and produces intermediate and final products or output (c)it may
include sub-processes and has entry and exit criteria (d) the activities are organized in a
sequence (e) constrains or control may apply to activities (budget control, availability of
Course Module
ADVANCED SYSTEMS DESIGN AND IMPLEMENTATION 2
[Software Process Models]
resources). When the process involves the building of some product we refer to the process
as a life cycle Software development process – software life cycle. A structured set of
activities required to develop a software system such as specification, design, validation
and evolution. Somerville defined software process is a set of related activities that leads
to the production of a software product. These activities may involve the development of
software from scratch. However, business applications are not necessarily developed in
this way. It is most likely that IT Companies develop business software which is often
developed by extending and modifying existing systems or by configuring and integrating
off-the-shelf software or system components which was discuss in the previous module –
Software Sources.
These are the set of activities in software development or software processes:
1. Software specification: The functionality of the software and constraints on its
operation must be defined.
2. Software design and implementation: The software to meet the specification
must be produced.
3. Software validation: The software must be validated to ensure that it does what
the customer wants.
4. Software evolution: The software must evolve to meet changing customer needs.
These activities that are fundamental to software engineering. But in some form, these
activities are part of all software processes. In practice, of course, they are complex
activities in themselves and include sub-activities such as requirements validation,
architectural design, unit testing, etc. There are also supporting process activities such as
documentation and software configuration management. When we discuss processes, we
usually talk about the activities in these processes such as specifying a data model,
designing a user interface, etc., and the ordering of these activities. However, as well as
activities, process descriptions may also include: (a) products, which are the outcomes of a
process activity. For example, the out- come of the activity of architectural design may be a
model of the software architecture (b) roles, which reflect the responsibilities of the
people involved in the process. Examples of roles are project manager, configuration
manager, programmer, etc. (c) pre- and post-conditions, which are statements that are
true before and after a process activity has been enacted or a product produced.
Software processes most of the time are complex and, like all logical and creative
processes, rely on people making decisions and judgments. There is no ideal process and
most organizations have developed their own software development processes. Processes
have evolved to take advantage of the capabilities of the people in an organization and the
specific characteristics of the systems that are being developed. For some systems, such as
critical systems, a very structured development process is required. For business systems,
with rapidly changing requirements, a less formal, flexible process is likely to be more
effective.
Course Module
ADVANCED SYSTEMS DESIGN AND IMPLEMENTATION 3
[Software Process Models]
Process Activities
The four basic process activities of specification, development, validation, and evolution are
organized differently in different development processes as mentioned before. In the
waterfall model, they are organized in sequence, whereas in incremental development they
are interleaved. The manner 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.
Software Specification
Software specification or requirements engineering is the process of understanding and
defining what services are required from the system and identifying the constraints on the
system’s operation and development. Requirements engineering is a particularly critical
stage of the software process as errors at this stage inevitably lead to later problems in the
system design and implementation. The requirements engineering process as illustrated in
Fig. 6.1 aims to produce an agreed requirements document that specifies a system
satisfying stakeholder requirements. Requirements are usually presented at two levels of
detail. End-users and customers need a high-level statement of the requirements; system
developers need a more detailed system specification.
Heads up!!
The following images has been grabbed from Software Engineering 7th Edition by Ian Somerville.
Ian Somerville is a prominent researcher in the field of systems engineering, system dependability and social
informatics, being an early advocate of an interdisciplinary approach to system dependability.
proposed system will be cost-effective from a business point of view and if it can
be developed within existing budgetary constraints. A feasibility study should be
relatively cheap and quick. The result should inform the decision of whether or
not to go ahead with a more detailed analysis.
2. Requirements elicitation and analysis
This is the process of deriving the system requirements through observation of
existing systems, discussions with potential users and procurers, task analysis,
and so on. This may involve the development of one or more system models and
prototypes. These help you understand the system to be specified.
3. Requirements specification
Requirements specification is the activity of translating the information gathered
during the analysis activity into a document that defines a set of requirements.
Two types of requirements may be included in this document. User
requirements are abstract statements of the system requirements for the
customer and end-user of the system; system requirements are a more detailed
description of the functionality to be provided.
4. Requirements validation
This activity checks the requirements for realism, consistency, and
completeness. During this process, errors in the requirements document are
inevitably discovered. It must then be modified to correct these problems.
Of course, the activities in the requirements process are not simply carried out in a strict
sequence. Requirements analysis continues during definition and specification and new
requirements come to light throughout the process. Therefore, the activities of analysis,
definition, and specification are interleaved.
The crucial part of this phase is understanding the business environment and its need.
Requirement discovery is vital, conducting rigorous fact finding techniques such interview,
observation, questionnaire etc.
Software Design and Implementation
The implementation stage of software development is the process of converting a system
specification into an executable system. It always involves processes of software design
and programming but, if an incremental approach to development is used, may also involve
refinement of the software specification.
A software design is a description of the structure of the software to be implemented, the
data models and structures used by the system, the interfaces between system components
and, sometimes, the algorithms used. Designers do not arrive at a finished design
immediately but develop the design iteratively. They add formality and detail as they
develop their design with constant backtracking to correct earlier designs.
As illustrated in Fig. 6.2 is an abstract model of this process showing the inputs to the
design process, process activities, and the documents produced as outputs from this
process.
Course Module
ADVANCED SYSTEMS DESIGN AND IMPLEMENTATION 5
[Software Process Models]
The figure suggests that the stages of the design process are sequential. In fact, design
process activities are interleaved. Feedback from one stage to another and consequent
design rework is inevitable in all design processes. Most software interfaces with other
software systems. These include the operating system, database, middleware, and other
application systems. These make up the software platform, the environment in which the
software will execute.
Information about this platform is an essential input to the design process, as designers
must decide how best to integrate it with the software’s environment. The requirements
specification is a description of the functionality the software must provide and its
performance and dependability requirements.
Fig. 6.2 shows four activities that may be part of the design process for information
systems:
1. Architectural design, where you identify the overall structure of the system, the
principal components (sometimes called sub-systems or modules), their
relationships, and how they are distributed.
Course Module
ADVANCED SYSTEMS DESIGN AND IMPLEMENTATION 6
[Software Process Models]
2. Interface design, where you define the interfaces between system components.
This interface specification must be unambiguous. With a precise interface, a
component can be used without other components having to know how it is
implemented. Once interface specifications are agreed, the components can be
designed and developed concurrently.
3. Component design, where you take each system component and design how it
will operate. This may be a simple statement of the expected functionality to be
implemented, with the specific design left to the programmer. Alternatively, it may
be a list of changes to be made to a reusable component or a detailed design model.
The design model may be used to automatically generate an implementation.
4. Database design, where you design the system data structures and how these
are to be represented in a database. Again, the work here depends on whether an
existing database is to be reused or a new database is to be created.
The detail and representation of these vary considerably. For critical systems, detailed
design documents setting out precise and accurate descriptions of the system must be
produced. If a model-driven approach is used, these outputs may mostly be diagrams.
Where agile methods of development are used, the outputs of the design process may not
be separate specification documents but may be represented in the code of the program.
Structured methods for design were developed in the 1970s and 1980s and were the
precursor to the UML and object-oriented design (Budgen, 2003). They rely on producing
graphical models of the system and, in many cases, automatically generating code from
these models. Model-driven development (MDD) or model-driven engineering (Schmidt,
2006), where models of the software are created at different levels of abstraction, is an
evolution of structured methods. In MDD, there is greater emphasis on architectural
models with a separation between abstract implementation- independent models and
implementation-specific models.
Software development tools may be used to generate a skeleton program from a design.
This includes code to define and implement interfaces, and, in many cases, the developer
need only add details of the operation of each program component. Programming is a
personal activity and there is no general process that is usually followed. Some
programmers start with components that they understand, develop these, and then move
on to less-understood components. Others take the opposite approach, leaving familiar
components till last because they know how to develop them. Some developers like to
define data early in the process then use this to drive the program development; others
leave data unspecified for as long as possible.
Course Module
ADVANCED SYSTEMS DESIGN AND IMPLEMENTATION 7
[Software Process Models]
Normally, programmers carry out some testing of the code they have developed. This often
reveals program defects that must be removed from the program. This is called debugging.
Defect testing and debugging are different processes. Testing establishes the existence of
defects. Debugging is concerned with locating and correcting these defects. When you are
debugging, you have to generate hypotheses about the observable behavior of the program
then test these hypotheses in the hope of finding the fault that caused the output anomaly.
Testing the hypotheses may involve tracing the program code manually. It may require
new test cases to localize the problem. Interactive debugging tools, which show the
intermediate values of program variables and a trace of the statements executed, may be
used to support the debugging process.
Software Validation
Software validation or, more generally, verification and validation also known as (V&V) is
intended to show that a system both conforms to its specification and that it meets the
expectations of the system customer. Program testing, where the system is executed using
simulated test data, is the principal validation technique. Validation may also involve
checking processes, such as inspections and reviews, at each stage of the software process
from user requirements definition to program development. Because of the predominance
of testing, the majority of validation costs are incurred during and after implementation.
Except for small programs, systems should not be tested as a single, monolithic unit.
The process is therefore an iterative one with information being fed back from later stages
to earlier parts of the process. The stages in the testing process are:
1. Development testing
The components making up the system are tested by the people developing the
system. Each component is tested independently, without other system
components. Components may be simple entities such as functions or object
classes, or may be coherent groupings of these entities. Test automation tools,
such as JUnit (Massol and Husted, 2003), that can re-run component tests when
new versions of the component are created, are commonly used.
2. System testing
System components are integrated to create a complete system. This process is
concerned with finding errors that result from unanticipated interactions
between components and component interface problems. It is also concerned
with showing that the system meets its functional and non-functional
requirements, and testing the emergent system properties. For large systems,
this may be a multi-stage process where components are integrated to form sub-
systems that are individually tested before these sub-systems are themselves
integrated to form the final system.
3. Acceptance testing
This is the final stage in the testing process before the system is accepted for
operational use. The system is tested with data supplied by the system customer
rather than with simulated test data. Acceptance testing may reveal errors and
omissions in the system requirements definition, because the real data exercise
the system in different ways from the test data. Acceptance testing may also
Course Module
ADVANCED SYSTEMS DESIGN AND IMPLEMENTATION 8
[Software Process Models]
reveal requirements problems where the system’s facilities do not really meet
the user’s needs or the system performance is unacceptable.
Normally, component development and testing processes are interleaved. Programmers
make up their own test data and incrementally test the code as it is developed. This is an
economically sensible approach, as the programmer knows the component and is therefore
the best person to generate test cases. If an incremental approach to development is used,
each increment should be tested as it is developed, with these tests based on the
requirements for that increment. In extreme programming, tests are developed along with
the requirements before development starts.
This helps the testers and developers to understand the requirements and ensures that
there are no delays as test cases are created. When a plan-driven software process is used
(e.g., for critical systems development), testing is driven by a set of test plans. An
independent team of testers works from these pre-formulated test plans, which have been
developed from the system specification and design. Fig. 6.4 illustrates how test plans are
the link between testing and development activities. Acceptance testing is sometimes called
‘alpha testing’. Custom systems are developed for a single client. The alpha testing process
continues until the system developer and the client agree that the delivered system is an
acceptable implementation of the requirements.
Software Evolution
The flexibility of software systems is one of the main reasons why more and more software
is being incorporated in large, complex systems. Modification of a software product after
delivery to correct faults, to improve performance or other attributes, or to adapt the
product to a modified environment (IEEE 1219, 1993). Maintenance is seen as after-the-
fact activity and no integration with software development process in this definition.
Maintenance can be defined as after acceptance of the original product, all changes to the
software are considered part of the maintenance process. There are different types of
maintenance as enumerated below: (a) Correctives: removes residual faults with no change
in original specifications (b) Enhancement or Update: simply changes to the original
specifications and new developments (c) Perfectives: improves the performance of the
existing functionality (d) Adaptive: involves changes made when the product is a new
software environment.
Course Module
ADVANCED SYSTEMS DESIGN AND IMPLEMENTATION 9
[Software Process Models]
Heads up!!
Change adds to the costs of software development because it usually means that work that
has been completed has to be redone. This is called rework. For example, if the
relationships between the requirements in a system have been analyzed and new
requirements are then identified, some or all of the requirements analysis has to be
repeated. It may then be necessary to redesign the system to deliver the new requirements,
change any programs that have been developed, and re-test the system. There are two
related approaches that may be used to reduce the costs of rework:
1. Change avoidance where the software process includes activities that can
anticipate possible changes before significant rework is required. For example, a
prototype system may be developed to show some key features of the system to
Course Module
ADVANCED SYSTEMS DESIGN AND IMPLEMENTATION 10
[Software Process Models]
customers. They can experiment with the prototype and refine their requirements
before committing to high software production costs.
2. Change tolerance where the process is designed so that changes can be
accommodated at relatively low cost. This normally involves some form of
incremental development. Proposed changes may be implemented in increments
that have not yet been developed. If this is impossible, then only a single increment
(a small part of the system) may have to be altered to incorporate the change.
In this section, we will discuss two ways of coping with change and changing system
requirements. These are: prototyping and incremental.
1. System prototyping where a version of the system or part of the system is
developed quickly to check the customer’s requirements and the feasibility of some
design decisions. This supports change avoidance as it allows users to experiment
with the system before delivery and so refine their requirements. The number of
requirements change proposals made after delivery is therefore likely to be
reduced.
2. Incremental delivery where system increments are delivered to the customer
for comment and experimentation. This supports both change avoidance and change
tolerance. It avoids the premature commitment to requirements for the whole
system and allows changes to be incorporated into later increments at relatively low
cost.
In this context software process model is introduce to streamline the software process in
which each model represents a process from a particular viewpoint, and thus provides only
partial information about that process.
In this segment, we will discuss generic or classical process models sometimes called
process paradigms and present these from different perspective. From an architectural
perspective we will discuss the framework of the process but not the details of specific
activities. Also we will discuss its drawbacks and appropriateness for a certain project.
In the early days before the application of engineering in system development. Developers
tend to use “code and fix” method also known as cowboy coding characterized as anti-
pattern technique wherein the development is not done through a deliberate strategy or
methodology. It is often the result of schedule pressure on the software development team.
Also known as CABTAB “Code a bit and test a bit”. This traditional method has been
replaced by a more systematic and methodical approaches.
Course Module
ADVANCED SYSTEMS DESIGN AND IMPLEMENTATION 11
[Software Process Models]
The process models that we cover here are: (1) waterfall model, separate and distinct
phases of specification and development (2) incremental development, developed as a
series of versions (increments), with each version adding functionality to the previous
version (3) reuse-oriented software engineering, approach is based on the existence of a
significant number of reusable components which process focuses on integrating these
components into a system rather than developing them from scratch.
These generic or classical model has been the basis of every model process models. These
models are not mutually exclusive and are often used together, especially for large systems
development. For large systems, it makes sense to combine some of the best features of the
waterfall and the incremental development models which leads to the development of
modern process models.
Heads Up!
The waterfall model was first defined by Winston W. Royce in 1970 and has been widely used for software
projects ever since.
Winston W. Royce is an American computer scientist, director at Lockheed Software Technology Center
in Austin, Texas. He was a pioneer in the field of software development.
Waterfall Model
It was the first Process Model to be introduced and the earliest SDLC approach that was
used for software development. Also, it is illustrates the software development process in a
linear sequential flow; hence it is also referred to as a linear-sequential life cycle model. This
means that any phase in the development process begins only if the previous phase is
complete. In waterfall model phases do not overlap. It is very simple to understand and use.
The whole process of software development is divided into separate phases as illustrated
in Figure 6.1. In a waterfall model, each phase must be completed before the next phase can
begin and there is no overlapping in the phases. In Waterfall model, typically, the outcome
of one phase acts as the input for the next phase sequentially.
Course Module
ADVANCED SYSTEMS DESIGN AND IMPLEMENTATION 12
[Software Process Models]
The waterfall model is an example of a plan-driven process—in principle, you must plan
and schedule all of the process activities before starting work on them.
The sequential phases in Waterfall model are:
Requirement Definition: All possible requirements of the system to be
developed are captured in this phase and documented in a requirement
specification doc.
System and Software Design: The requirement specifications from first phase
are studied in this phase and system design is prepared. System Design helps
in specifying hardware and system requirements and also helps in defining
overall system architecture.
Implementation and Unit Testing: With inputs from system design, the
system is first developed in small programs called units, which are integrated
in the next phase. Each unit is developed and tested for its functionality which
is referred to as Unit Testing.
Integration and System Testing: All the units developed in the
implementation phase are integrated into a system after testing of each unit.
Post integration the entire system is tested for any faults and failures.
Operation and Maintenance: Once the functional and nonfunctional testing is
done, the product is deployed in the customer environment or released into
the market. There are some issues which come up in the client environment.
To fix those issues patches are released. Also to enhance the product some
better versions are released. Maintenance is done to deliver these changes in
the customer environment.
In principle, the result of each phase is one or more documents that are approved also
referred to as signing off. The following phase should not start until the previous phase
has finished. In practice, these stages overlap and feed information to each other. During
design, problems with requirements are identified. During coding, design problems are
Course Module
ADVANCED SYSTEMS DESIGN AND IMPLEMENTATION 13
[Software Process Models]
found and so on. On this event, problems and its drawbacks arise such as inflexible
partitioning of the project into distinct stages and it is difficult to respond to
changing customer requirements therefore, model is only appropriate when the
requirements are well-understood. Which suggests to the specific waterfall model
application in which the model is most appropriate to situation such as: (a)
requirements are very well documented, clear and fixed (b) product definition is stable
(c) technology is understood and is not dynamic (d) there are no ambiguous
requirements (e) ample resources with required expertise are available to support the
product (f) the project is short.
The waterfall model is consistent with other engineering process models and
documentation is produced at each phase. This makes the process visible so managers
can monitor progress against the development plan. Which leads to its primary
advantage of the model which allows for departmentalization and control. Also, schedule
can be set with deadlines for each stage of development and a product can proceed
through the development process model phases one by one. In addition to this,
development moves from concept, through design, implementation, testing, installation,
troubleshooting, and ends up at operation and maintenance. Each phase of development
proceeds in strict order. However as the primary problem presented the model has its
own disadvantage which is that it does not allow for much reflection or revision. Once an
application is in the testing stage, it is very difficult to go back and change something
that was not well-documented or thought upon in the concept stage.
Tips Up!
The table below presents the pros and cons of waterfall model which might help the
students to decide whether which process model to use.
Table 6.1
Pros and Cons of Waterfall Model
Course Module
ADVANCED SYSTEMS DESIGN AND IMPLEMENTATION 14
[Software Process Models]
Pros Cons
Simple and easy to understand and use No working software is produced until late
Easy to manage due to the rigidity of during the life cycle.
the model. Each phase has specific High amounts of risk and uncertainty.
deliverables and a review process. Not a good model for complex and object-
Phases are processed and completed oriented projects.
one at a time. Poor model for long and ongoing projects.
Works well for smaller projects where Not suitable for the projects where
requirements are very well requirements are at a moderate to high risk
understood. of changing. So risk and uncertainty is high
Clearly defined stages. with this process model.
Well understood milestones. It is difficult to measure progress within
Easy to arrange tasks. stages.
Process and results are well Cannot accommodate changing
documented. requirements.
Adjusting scope during the life cycle can
end a project.
Integration is done as a "big-bang. At the
very end, which doesn't allow identifying
any technological or business bottleneck or
challenges early.
Principles of Waterfall
It is a series of steps.
Each step is user defined.
Each step creates a definite product.
Each product forms the basis for the next step.
The correctness of each step can be checked.
Verification – are we building the right product?
Validation – are we building the product right?
Strengths of Waterfall Model
It divides a complete task into smaller more manageable task.
Each task produces a user-defined deliverables.
Drawback of Waterfall Model
During coding an error in the design (previous stage) is discovered.
During unit testing design fault is revealed.
In response to the perceived problems and criticisms with the waterfall model,
many modified waterfall models have been introduced.
Course Module
ADVANCED SYSTEMS DESIGN AND IMPLEMENTATION 15
[Software Process Models]
Heads Up!
The waterfall model was also refined using mathematical transformations that preserve its consistency into
executable code.
Formal development processes, such as that based on the B method (Schneider, 2001; Wordsworth, 1996)
are particularly suited to the development of systems that have stringent safety, reliability, or security
requirements.
Incremental development
Incremental development is based on the idea of developing an initial implementation,
exposing this to user comment and evolving it through several versions until an adequate
system has been developed as illustrated in Fig. 6.6. Specification, development, and
validation activities are interleaved rather than separate, with rapid feedback across
activities. Phases are divided up into smaller, more easily managed modules. Each module
passes through the requirements, design, implementation and testing phases. A working
version of software is produced during the first module, so you have working software
early on during the software life cycle. Each subsequent release of the module adds
function to the previous release. The process continues till the complete system is achieved.
Incremental software development, which is a fundamental part of agile approaches, is
better than a waterfall approach for most business, e-commerce, and personal systems. It
promotes customer focus development that each and every phase allows intervention or
input with the customer making the project progress or increment in the development.
Generally, the early increments of the system include the most important or most urgently
required functionality. Customer focused development makes it possible to make it a clear
functional and efficient software development.
Course Module
ADVANCED SYSTEMS DESIGN AND IMPLEMENTATION 16
[Software Process Models]
Course Module
ADVANCED SYSTEMS DESIGN AND IMPLEMENTATION 17
[Software Process Models]
Disadvantages:
Needs good planning and design.
Needs a clear and complete definition of the whole system before it can be broken
down and built incrementally.
Total cost is higher than waterfall.
save time because each phase of the process builds on the previous phase which has
already been refined. When carefully carried out, ROD can minimize the likelihood of errors
or bugs making their way into the final product.
The reuse-oriented model is not always practical in its pure form because a full repertoire
of reusable components may not be available. In such instances, some new program
components must be designed. If not thoughtfully done, ROD can lead to compromises in
perceived requirements, resulting in a product that does not fully meet the needs of its
intended users.
Reuse-oriented approaches rely on a large base of reusable software components and an
integrating framework for the composition of these components. Sometimes, these
components are systems in their own right (COTS or commercial off-the-shelf systems)
that may provide specific functionality such as word processing or a spreadsheet.
A general process model for reuse-based development is shown in Figure 6.7. Although the
initial requirements specification stage and the validation stage are comparable with other
software processes, the intermediate stages in a reuse- oriented process are different.
These stages are:
1. Component analysis
Given the requirements specification, a search is made for components to
implement that specification. Usually, there is no exact match and the
components that may be used only provide some of the functionality
required.
2. Requirements modification
During this stage, the requirements are analyzed using information about the
components that have been discovered. They are then modified to reflect the
available components. Where modifications are impossible, the component
analysis activity may be re-entered to search for alternative solutions.
3. System design with reuse
During this phase, the framework of the system is designed or an existing
framework is reused. The designers take into account the components that
are reused and organize the framework to cater for this. Some new software
may have to be designed if reusable components are not available.
4. Development and integration
Software that cannot be externally procured is developed, and the
components and COTS systems are integrated to create the new system.
Course Module
ADVANCED SYSTEMS DESIGN AND IMPLEMENTATION 19
[Software Process Models]
The three generic process models has been the basis in the development of software.
However due to software flexibility and business needs variance modern process model
has been introduce. The modern process models has been used by developers based on the
system development situations and the project needs. These models a most likely the
combination and best practices adapted from the generic process models.
Course Module
ADVANCED SYSTEMS DESIGN AND IMPLEMENTATION 20
[Software Process Models]
Objectives of Prototyping
to demonstrate the usefulness of the application to management
user training, a prototype system can be used for training users before the final
system has been delivered
to established that some new technology will provide activities needed.
Course Module
ADVANCED SYSTEMS DESIGN AND IMPLEMENTATION 21
[Software Process Models]
Advantages:
Many provide the proof of concept to attract funding.
Early visibility of the prototype gave user ideas of what the final system looks
like.
Encourage active participation among users and producer.
Last effectiveness
Increases system development speed.
Assist to identifying any problems with the efficiency of earlier design
requirements analysis and coding activities.
Helps to refine potential risks associated with the delivery of the system
being develop.
Disadvantages:
Possibility of causing system to be kept unfinished
Course Module
ADVANCED SYSTEMS DESIGN AND IMPLEMENTATION 22
[Software Process Models]
Lack of flexibility
Project management difficulties
Product might produce a system inadequacy for average organization needs.
Course Module
ADVANCED SYSTEMS DESIGN AND IMPLEMENTATION 23
[Software Process Models]
Spiral Model attempts to solve some of the problems of the waterfall model incorporating
its best features. It offers greater flexibility than waterfall model. It also incorporates
prototyping as necessary. A comprehensive stages of spiral model is presented on Fig. 6.9
as it is enumerated below
1. System Requirement
2. Preliminary Design
3. First Prototype
4. Second Prototype – evolved by a fourfold procedure:
4.1 Evaluating the first prototype in terms of strengths, weaknesses, and
risks.
4.2 Defining the requirements of the second prototype.
4.3 Planning and designing the second prototype
4.4 Constructing and testing the second prototype.
5. Risk Analysis
6. Prototype Evaluation
7. Preceding steps are iterated until…
8. The client is satisfied
9. Final System
The RUP is a phased model that identifies four discrete phases in the software process.
However, unlike the waterfall model where phases are equated with process activities, the
phases in the RUP are more closely related to business rather than technical concerns. Fig.
6.10 shows the phases in the RUP. These are:
1. Inception: The goal of the inception phase is to establish a business case for the
system. You should identify all external entities (people and systems) that will
interact with the system and define these interactions. You then use this infor-
Course Module
ADVANCED SYSTEMS DESIGN AND IMPLEMENTATION 25
[Software Process Models]
mation to assess the contribution that the system makes to the business. If this
contribution is minor, then the project may be cancelled after this phase.
2. Elaboration: The goals of the elaboration phase are to develop an understanding
of the problem domain, establish an architectural framework for the system,
develop the project plan, and identify key project risks. On completion of this phase
you should have a requirements model for the system, which may be a set of UML
use-cases, an architectural description, and a development plan for the software.
3. Construction: The construction phase involves system design, programming, and
testing. Parts of the system are developed in parallel and integrated during this
phase. On completion of this phase, you should have a working software system and
associated documentation that is ready for delivery to users.
4. Transition: The final phase of the RUP is concerned with moving the system from
the development community to the user community and making it work in a real
environment. This is something that is ignored in most software process models but
is, in fact, an expensive and sometimes problematic activity. On completion of this
phase, you should have a documented software system that is working correctly in
its operational environment.
Iteration within the RUP is supported in two ways. Each phase may be enacted in an
iterative way with the results developed incrementally. In addition, the whole set of phases
may also be enacted incrementally, as shown by the looping arrow from Transition to
Inception in Fig. 6.10. The static view of the RUP focuses on the activities that take place
during the development process. These are called workflows in the RUP description. There
are six core process workflows identified in the process and three core supporting
workflows.
The RUP has been designed in conjunction with the UML, so the workflow description is
oriented around associated UML models such as sequence models, object models, etc. The
core engineering and support workflows are described in Fig. 6.11. The advantage in
presenting dynamic and static views is that phases of the development process are not
associated with specific workflows. In principle at least, all of the RUP workflows may be
active at all stages of the process. In the early phases of the process, most effort will
probably be spent on workflows such as business modelling and requirements and, in the
later phases, in testing and deployment.
Course Module
ADVANCED SYSTEMS DESIGN AND IMPLEMENTATION 26
[Software Process Models]
Workflow Description
Business modelling: The business processes are modelled using business use
cases.
Requirements Actors: who interact with the system are identified and use cases
are developed to model the system requirements.
Analysis and design: A design model is created and documented using
architectural models, component models, object models, and sequence models.
Implementation: The components in the system are implemented and structured
into implementation sub-systems. Automatic code generation from design models
helps accelerate this process.
Testing: It is an iterative process that is carried out in conjunction with
implementation. System testing follows the completion of the implementation.
Deployment: A product release is created, distributed to users, and installed in
their workplace.
Configuration and change management: This supporting workflow manages
changes to the system.
Project management: This supporting workflow manages the system.
Environment: This workflow is concerned with making appropriate software tools
available to the software development team.
The practice perspective on the RUP describes good software engineering practices that
are recommended for use in systems development. Six fundamental best practices are
recommended:
Course Module
ADVANCED SYSTEMS DESIGN AND IMPLEMENTATION 27
[Software Process Models]
Course Module
ADVANCED SYSTEMS DESIGN AND IMPLEMENTATION 28
[Software Process Models]
RAD Phases
Requirements planning phase: a workshop utilizing structured discussion of
business problems
User description phase: automated tools capture information from users
Construction phase: productivity tools, such as code generators, screen generators,
etc. inside a time-box. “Do until done”
Cutover phase: installation of the system, user acceptance testing and user training
RAD Strengths
Reduced cycle time and improved productivity with fewer people means lower costs
Time-box approach mitigates cost and schedule risk
Customer involved throughout the complete cycle minimizes risk of not achieving
customer satisfaction and business needs
Focus moves from documentation to code (WYSIWYG).
Uses modeling concepts to capture information about business, data, and processes.
RAD Weaknesses
Accelerated development process must give quick responses to the user
Risk of never achieving closure
Hard to use with legacy systems
Requires a system that can be modularized
Developers and customers must be committed to rapid-fire activities in an
abbreviated time frame.
When to use RAD
Reasonably well-known requirements
User involved throughout the life cycle
Project can be time-boxed
Functionality delivered in increments
High performance not required
Low technical risks
Course Module
ADVANCED SYSTEMS DESIGN AND IMPLEMENTATION 29
[Software Process Models]
Course Module
ADVANCED SYSTEMS DESIGN AND IMPLEMENTATION 30
[Software Process Models]
In case of some software deliverables, especially the large ones, it is difficult to assess the
effort required at the beginning of the software development life cycle.
There is lack of emphasis on necessary designing and documentation.
The project can easily get taken off track if the customer representative is not clear what
final outcome that they want.
Only senior programmers are capable of taking the kind of decisions required during the
development process. Hence it has no place for newbie programmers, unless combined
with experienced resources.
delivery process, and helped popularize core software engineering practices like automated
testing, refactoring, continuous integration (CI), and test-driven development (TDD).
XP Practices
1. Planning game – determine scope of the next release by combining business
priorities and technical estimates
2. Small releases – put a simple system into production, then release new versions
in very short cycle
3. Metaphor – all development is guided by a simple shared story of how the whole
system works
4. Simple design – system is designed as simply as possible (extra complexity
removed as soon as found)
5. Testing – programmers continuously write unit tests; customers write tests for
features
6. Refactoring – programmers continuously restructure the system without
changing its behavior to remove duplication and simplify
7. Pair-programming -- all production code is written with two programmers at
one machine
8. Collective ownership – anyone can change any code anywhere in the system at
any time.
9. Continuous integration – integrate and build the system many times a day –
every time a task is completed.
10. 40-hour week – work no more than 40 hours a week as a rule
11. On-site customer – a user is on the team and available full-time to answer
questions
12. Coding standards – programmers write all code in accordance with rules
emphasizing communication through the code
XP is “extreme” because: Commonsense practices taken to extreme levels
• If code reviews are good, review code all the time (pair programming)
• If testing is good, everybody will test all the time
• If simplicity is good, keep the system in the simplest design that supports its current
functionality. (simplest thing that works)
• If design is good, everybody will design daily (refactoring)
• If architecture is important, everybody will work at defining and refining the
architecture (metaphor)
• If integration testing is important, build and integrate test several times a day
(continuous integration)
• If short iterations are good, make iterations really, really short (hours rather than
weeks)
Course Module
ADVANCED SYSTEMS DESIGN AND IMPLEMENTATION 32
[Software Process Models]
Software that helps carry out much of the dredge work associated with software
development (e.g., documentation creation and organization)
Benefits
Improve software quality
Enforce discipline
Help communication between development team members
Information is illustrated through diagrams that are typically easier to
understand
Development information is centralized
Problems
Limitations in flexibility of documentation
Major danger: completeness and syntactic correctness does NOT mean
compliance with requirements
Costs associated with the use of the tool
Purchase price
Training
Course Module
ADVANCED SYSTEMS DESIGN AND IMPLEMENTATION 33
[Software Process Models]
Activity automation
• Graphical editors for system model development
• Data dictionary to manage design entities
• Graphical UI builder for user interface construction
• Debuggers to support program fault finding
• Automated translators to generate new versions of a program
Case technology has led to significant improvements in the software process though not the
order of magnitude improvements that were once predicted
Software engineering requires creative thought - this is not readily automatable
Software engineering is a team activity and, for large projects, much time is spent in
team interactions. CASE technology does not really support these
Classification helps us understand the different types of CASE tools and their support for
process activities
Activity-based Classification
Course Module
ADVANCED SYSTEMS DESIGN AND IMPLEMENTATION 35
[Software Process Models]
CASE TOOLS
Upper-CASE tools (front-end tools): Assist developer during requirements,
analysis, and design workflows or activities
Lower-CASE tools (back-end tools): Assist with implementation, testing, and
maintenance workflows or activities
Integrated CASE tools (I-CASE): provide support for the full life cycle
WORKBENCHES
Collection of tools that together support:
Process workflows (requirements, design, etc.)
One or two activities where an activity is a related collection of tasks
Course Module
ADVANCED SYSTEMS DESIGN AND IMPLEMENTATION 36
[Software Process Models]
Commercial examples:
PowerBuilder
Software Through Pictures
Software Architect
Environments
Support the complete software process or, at least, a large portion of the
software process
Normally include several different workbenches which are integrated in
some way
Components of CASE
Design Analysi
Generato s
r tool
Drawin Code
g Generato
Tool r
Error- Prototypin
checking g
tool Tool
Course Module
ADVANCED SYSTEMS DESIGN AND IMPLEMENTATION 37
[Software Process Models]
CASE repository
• Centralized database
• Allows easy sharing of information between tools and SDLC activities
• Used to store graphical diagrams and prototype forms and reports during
analysis and design workflows
• Provides wealth of information to project manager and allows control over
project
• Facilitates reusability
CASE repository acts as:
Information repository
Combines information about organization’s business information and application
portfolio
Provides automated tools to manage and control access
Data dictionary
Used to manage and control access to information repository
Facilities for recording, storing and processing resources
Useful for cross-referencing
Diagramming tools
Allow you to represent a system and its components visually
Allows higher level processes to be easily decomposed
Can examine processes or data models at high or low level
Course Module
ADVANCED SYSTEMS DESIGN AND IMPLEMENTATION 38
[Software Process Models]
Centr al Qu ery
Co de
infor ma tio n lan guage
gener ator
repos ito ry facilities
Import/export translators
Code generation tools
Glossary
System – combination of hardware and software that needs the product.
Methodology – particular approves or paradigm or set of techniques designed to
accomplish a specific phase or a number of phases in software development life cycle.
Bug – the colloquial term use to refer to a software fault.
Fault – the actual problem in the code that is causing a failure.
Failure – the behaviour preceded by the user that resulted from the fault in the code.
Error – the programmer’s mistake that kept to the code fault in the code.
Client – the individual or organization who wants a product to be develop.
Developer – the individual or group responsible for building the product.
User – the persons who will utilize the product.
Product – any non-trivial piece of software.
Course Module
ADVANCED SYSTEMS DESIGN AND IMPLEMENTATION 40
[Software Process Models]
References
Course Module