Chapter 2 Software Development Processes
Chapter 2 Software Development Processes
● Problem may be :-
● System analysis a
g
● System design
b
● Programming/ implementation f
c e
● Testing
d
● Conversion
NB: The activities takes place sequentially but since some may need to be repeated while
others may take place simultaneously, depending on the approach to the system building
employed.
The Software Process Models
The software process is the set of activities and associated results, which produce a
software product. These activities are mostly carried out by software engineers.
There is no such thing as a ‘right’ or a ‘wrong’ software process. Different software
processes decompose software activities (feasibility study, analysis, design,
implementation and evolution) in different ways. The timing of the activities varies as
does the results of each activity. Different organizations use different processes to
produce the same type of product. However, some processes are more suitable than
others for some types of application. If the wrong process is used, this will probably
reduce the quality or the usefulness of the software product to be developed.
Because there are a variety of different process models used, it is impossible to produce
reliable figures for cost distribution across these activities. However, we do know that
modifying software usually takes up more than 60% of total software costs. This
percentage is increasing as more and more software is produced and has to be
maintained. Designing software for change is therefore essential.
Software processes (like most business processes) are complex and involve a very large
number of activities. Like products, processes also have attributes or characteristics.
It is not possible to optimize all process attributes simultaneously. For example, if a
rapid development process is required then it may be necessary to reduce the process
visibility. Making a process visible means producing documents at regular intervals.
ii) Visibility – Do the process activities culminate in clear results so that the progress
of the process is externally visible?
iii) Supportability – To what extent can the process activities be supported by CASE
tools?
iv) Acceptability – Is the defined process acceptable to and unable by the engineers
responsible for producing the software products?
v) Reliability - Is the process designed in such a way that process errors are avoided
or trapped before they result in product errors?
viii) Rapidity – How fast can the process of delivering a system from a given
specification be completed?
Requirements
Definition
System and
Software Design
Implementation
and Unit testing
Integration and
System Testing
Operation and
Maintenance
1. Requirements analysis and definition: The system’s services, constraints and
goals are established by consultation with system users. They are then defined in
a manner which is understandable by both users and development staff.
2. System and software design: The systems design process partitions the
requirements to either hardware or software system. It establishes an overall
system architecture. Software design involves representing the software system
functions in a form that may be transformed into one or more executable
programs.
3. Implementation and unit testing: During this stage, the software design is realized as
a set of program units. Unit testing involves verifying that each unit meets its
specification.
4. Integration and system testing: The individual program units or programs are
integrated and tested as a complete system to ensure that the software requirements
have been met. After testing the software system is delivered to the customer.
5. Operation and maintenance: Normally (although not necessarily) this is the longest
life cycle phase. The system is installed and put into practical use. Maintenance
involves correcting errors which were not discovered in earlier stages of the life
cycle, improving the implementation of system units and enhancing the system’s
services as new requirements are discovered.
In practice these stages overlap and feed information to each other. During design,
problem with requirements are identified: during coding, design problems are found and
so on. The software process in not a simple linear model but involves a sequence of
iterations of the development activities.
During the final life cycle phase (operation and maintenance) the software is put into use.
Errors and omissions in the original software requirements are discovered. Program and
design errors emerge and the need for new functionality is identified. Modifications
become necessary for the software to remain useful. Making these changes (software
maintenance) may involve repeating some or all previous process stages.
Unfortunately, a model which includes frequent iterations makes it difficult to identify
definite management checkpoints for planning and reporting. Therefore, after a small
number of iterations, it is normal to freeze parts of the development, such as the
specification, and to continue with the later development stages. Problems are left for
later resolution, ignored or are programmed around. This premature freezing of
requirements may mean that the system won’t do what the users want. It may also lead to
badly structured systems as design problems are circumvented by implementation tricks.
The problem with the waterfall model is its inflexible partitioning of the project into these
distinct stages. Delivered systems are sometimes unusable, as they do not meet the
customer’s real requirements. Nevertheless the waterfall model reflects engineering
practice. Consequently, it is likely that software process models based on this approach
will remain the norm for large hardware–software systems development.
• PROTOTYPING MODEL
Prototype
A prototype is a toy implementation of the system. A prototype usually exhibits limited
functional capabilities, low reliability, and inefficient performance compared to the actual
software. A prototype is usually built using several shortcuts. The shortcuts might involve
using inefficient, inaccurate, or dummy functions. The shortcut implementation of a
function, for example, may produce the desired results by using a table look-up instead of
performing the actual computations. A prototype usually turns out to be a very crude
version of the actual system.
Need for a prototype in software development
There are several uses of a prototype. An important purpose is to illustrate the input data
formats, messages, reports, and the interactive dialogues to the customer. This is a
valuable mechanism for gaining better understanding of the customer’s needs:
how the screens might look like
Another reason for developing a prototype is that it is impossible to get the perfect
product in the first attempt. Many researchers and engineers advocate that if you want to
develop a good product you must plan to throw away the first version. The experience
gained in developing the prototype can be used to develop the final product.
A prototyping model can be used when technical solutions are unclear to the
development team. A developed prototype can help engineers to critically examine the
technical issues associated with the product development. Often, major design decisions
depend on issues like the response time of a hardware controller, or the efficiency of a
sorting algorithm, etc. In such circumstances, a prototype may be the best or the only way
to resolve the technical issues.
A prototype of the actual product is preferred in situations such as:
• User requirements are not complete
• Technical issues are not clear
• EVOLUTIONARY MODEL
It is also called successive versions model or incremental model. At first, a simple
working model is built. Subsequently it undergoes functional improvements & we keep
on adding new functions till the desired system is built.
Applications:
Large projects where you can easily find modules for incremental implementation.
Often used when the customer wants to start using the core features rather than waiting
for the full software.
Also used in object oriented software development because the system can be easily
portioned into units in terms of objects.
Advantages:
User gets a chance to experiment partially developed system
Reduce the error because the core modules get tested thoroughly.
Disadvantages:
It is difficult to divide the problem into several versions that would be acceptable to the
customer which can be incrementally implemented & delivered.
Fig 3.3: Evolutionary Model
• SPIRAL MODEL
The Spiral model of software development is shown in fig. 4.1. The diagrammatic
representation of this model appears like a spiral with many loops. The exact number of loops
in the spiral is not fixed. Each loop of the spiral represents a phase of the software process.
For example, the innermost loop might be concerned with feasibility study, the next loop
with requirements specification, the next one with design, and so on. Each phase in this
model is split into four sectors (or quadrants) as shown in fig. 4.1. The following activities
are carried out during each phase of a spiral model.
Fig 4.1: Spiral Model
• Agile
Agile is the methodology that developers favor the most out of all the
methodologies out there.
Famous for its iterative approach to software development that offers rapid-fire
progress, Agile is a framework that fosters highly collaborative environments
between all the teams involved in a project.
In short, the iterative and incremental model works through multiple, repeated,
and incremental cycles so developers can pinpoint which areas to improve based
on previous deployments of the software.
• V model
An extended arm of the Waterfall methodology, the v-model executes processes
sequentially in an upward fashion, which in visual context resembles the letter V. Some
refer to the v-model as the verification and validation model thanks to its foundation of
testing phases for each development phase. In short, every piece of software development
is associated with a testing phase.
One thing to note about the v-model is that no phase can start until the previous one is
completed including a corresponding testing exercise.
Advantages:
This is a highly disciplined model and Phases are completed one at a time.
V-Model is used for small projects where project requirements are clear.
This model focuses on verification and validation activities early in the life cycle
thereby enhancing the probability of building an error-free and good quality product.
Clear and Structured Process: The V-Model provides a clear and structured process
for software development, making it easier to understand and follow.
Emphasis on Testing: The V-Model places a strong emphasis on testing, which helps
to ensure the quality and reliability of the software.
Improved Traceability: The V-Model provides a clear link between the requirements
and the final product, making it easier to trace and manage changes to the software.
Disadvantages:
High risk and uncertainty.
It is not suitable for projects where requirements are not clear and contains high risk
of changing.
Inflexibility: The V-Model is a linear and sequential model, which can make it
difficult to adapt to changing requirements or unexpected events.
RAD
Rapid Application Development (RAD) is a software development model that
focuses on rapid prototyping and quick iterations. It prioritizes speed and user
involvement in the development process.
Advantages:
The use of reusable components helps to reduce the cycle time of the project.
The progress and development of the project can be measured through the
various stages.
Disadvantages:
The use of powerful and efficient tools requires highly skilled professionals.
The absence of reusable components can lead to the failure of the project.
The team leader must work closely with the developers and customers to close
the project on time.
The systems which cannot be modularized suitably cannot use this model.
It is not meant for small-scale projects as in such cases, the cost of using
automated tools and techniques may exceed the entire budget of the project.