Unit-1 - Software Process Model
Unit-1 - Software Process Model
Introduction
Software is more than just a program code. A program is an executable code, which
serves some computational purpose. Software is considered to be a collection of
executable programming code, associated libraries and documentations. Software, when
made for a specific requirement is called software product.
Software is defined as:
Instructions + Data Structures + Documents
Engineering on the other hand, is all about developing products, using well-defined,
scientific principles and methods. Engineering is the branch of science and technology
concerned with the design, building, and use of engines, machines, and structures. It is
the application of science, tools and methods to find cost effective solution to simple
and complex problems.
So, we can define software engineering as an engineering branch associated with
the development of software product using well-defined scientific principles, methods
and procedures. The outcome of software engineering is an efficient and reliable
software product.
OR
Software Crisis
Software Crisis is a term used in computer science for the difficulty of writing useful
and efficient computer programs in the required time .software crisis was due to using
same workforce, same methods, same tools even though rapidly increasing in software
demand, complexity of software and software challenges. With increase in the
complexity of software, many software problems arise because existing methods were
insufficient.
If we will use same workforce, same methods and same tools after fast increasing in
software demand, software complexity and software challenges, then there arose some
problems like software budget problem, software efficiency problem, software quality
problem, software managing and delivering problem etc. This condition is called software
crisis.
Causes of Software Crisis:
The cost of owning and maintaining software was as expensive as developing the
software
At that time Projects was running over-time
At that time Software was very inefficient
The quality of software was low quality
Software often did not meet requirements
The average software project overshoots its schedule by half
At that time Software was never delivered
There is no single solution to the crisis.one possible solution of software crisis is Software
Engineering because software engineering is a systematic, disciplined and quantifiable
approach. For preventing software crisis, there are some guidelines:
The need of software engineering arises because of higher rate of change in user
requirements and environment on which the software is working.
Cost- As hardware industry has shown its skills and huge manufacturing has
lower down the price of computer and electronic hardware. But the cost of
software remains high if proper process is not adapted.
Dynamic Nature- The always growing and adapting nature of software hugely
depends upon the environment in which the user works. If the nature of software
is always changing, new enhancements need to be done in the existing one. This
is where software engineering plays a good role.
In this stage, all the requirements for the target software are specified. These
requirements get approval from the customers, market analysts, and stakeholders.
This is fulfilled by utilizing SRS (Software Requirement Specification). This is a
sort of a document that specifies all those things that need to be defined and created
during the entire project cycle.
SRS is a reference for software designers to come out with the best architecture for the
software. Hence, with the requirements defined in SRS, multiple designs for the product
architecture are present in the Design Document Specification (DDS).
This DDS is assessed by market analysts and stakeholders. After evaluating all the
possible factors, the most practical and logical design is chosen for the development.
Stage-4: Developing Product:
At this stage, the fundamental development of the product starts. For this, developers
use a specific programming code as per the design in the DDS. Hence, it is important
for the coders to follow the protocols set by the association. Conventional programming
tools like compilers, interpreters, debuggers, etc. are also put into use at this stage.
Some popular languages like C/C++, Python, Java, etc. are put into use as per the
software regulations.
After the development of the product, testing of the software is necessary to ensure its
smooth execution. Although, minimal testing is conducted at every stage of SDLC.
Therefore at this stage, all the probable flaws are tracked, fixed, and retested. This
ensures that the product confronts the quality requirements of SRS.
After detailed testing, the conclusive product is released in phases as per the
organization’s strategy. Then it is tested in a real industrial environment. Because it is
important to ensure its smooth performance. If it performs well, the organization sends
out the product as a whole. After retrieving beneficial feedback, the company releases
it as it is or with auxiliary improvements to make it further helpful for the customers.
However, this alone is not enough. Therefore, along with the deployment, the product’s
supervision.
Life Cycle Model:
A software life cycle model (also called process model) is a descriptive and
diagrammatic representation of the software life cycle.
A life cycle model represents all the activities required to make a software product
transit through its life cycle phases. It also captures the order in which these
activities are to be undertaken.
In other words, a life cycle model maps the different activities performed on a
software product from its inception to retirement.
Different life cycle models may map the basic development activities to phases in
different ways. Thus, no matter which life cycle model is followed, the basic
activities are included in all life cycle models, carried out in different orders in
different life cycle models. During any life cycle phase, more than one activity may
also be carried out.
The development team must identify a suitable life cycle model for the particular
project and then adhere to it. Without using of a particular life cycle model the
development of a software product would not be in a systematic and disciplined
manner.
When a software product is being developed by a team there must be a clear
understanding among team members about when and what to do. Otherwise it
would lead to chaos and project failure. This problem can be illustrated by
using an example.
Suppose a software development problem is divided into several parts
and the parts are assigned to the team members. From then on, suppose the team
members are allowed the freedom to develop the parts assigned to them in
whatever way they like. It is possible that one member might start writing the
code for his part, another might decide to prepare the test documents first, and
some other engineer might begin with the design phase of the parts assigned to
him.
This would be one of the perfect recipes for project failure. A software life
cycle model defines entry and exit criteria for every phase. A phase can start only
if its phase-entry criteria have been satisfied.
So without software life cycle model the entry and exit criteria for a phase cannot
be recognized.
Without software life cycle models it becomes difficult for software project
managers to monitor the progress of the project.
Many life cycle models have been proposed so far. Each of them has some advantages
as well as some disadvantages.
Classical Waterfall Model
Iterative Waterfall Model
Incremental process model
Prototyping Model
Evolutionary Model
Rapid Application Development Model
Unified Model
Spiral Model
Agile Model
Classical waterfall model is the basic software development life cycle model.
It is very simple but idealistic.
Earlier this model was very popular but nowadays it is not used. But it is very
important because all the other software development life cycle models are based
on the classical waterfall model.
Classical waterfall model divides the life cycle into a set of phases. This model
considers that one phase can be started after completion of the previous phase.
That is the output of one phase will be the input to the next phase.
Thus the development process can be considered as a sequential flow in the
waterfall.
Here the phases do not overlap with each other. The different sequential
phases of the classical waterfall model are shown in the below figure:
Feasibility study –
Based on this analysis they pick the best solution and determine whether the
solution is feasible financially and technically.
They check whether the customer budget would meet the cost of the product and
whether they have sufficient technical expertise in the area of development.
Design: -
The goal of the design phase is to transform the requirements specified in the
SRS document into a structure that is suitable for implementation in some
programming language.
In technical terms, during the design phase the software architecture is derived
from the SRS document. Two distinctly different approaches are available:
the traditional design approach and the object-oriented design approach.
- Traditional design approach -Traditional design consists of two different
activities; first a structured analysis of the requirements specification is carried
out where the detailed structure of the problem is examined. This is followed
by a structured design activity. During structured design, the results of
structured analysis are transformed into the software design.
- Object-oriented design approach -In this technique, various objects that
occur in the problem domain and the solution domain are first identified, and
the different relationships that exist among these objects are identified. The
object structure is further refined to obtain the detailed design.
Maintenance: -
Maintenance of a typical software product requires much more than the effort
necessary to develop the product itself.
Many studies carried out in the past confirm this and indicate that the relative
effort of development of a typical software product to its maintenance effort is
roughly in the 40:60 ratios. Maintenance involves performing any one or more of
the following three kinds of activities:
When errors are detected at some later phase, these feedback paths allow
correcting errors committed by programmers during some phase.
The feedback paths allow the phase to be reworked in which errors are committed
and these changes are reflected in the later phases.
But, there is no feedback path to the stage – feasibility study, because
once a project has been taken, does not give up the project easily.
It is good to detect errors in the same phase in which they are committed. It
reduces the effort and time required to correct the errors.
Phase Containment of Errors: The principle of detecting errors as close to their
points of commitment as possible is known as Phase containment of errors.
Feedback Path: In the classical waterfall model, there are no feedback paths, so
there is no mechanism for error correction. But in iterative waterfall model feedback
path from one phase to its preceding phase allows correcting the errors that are
committed and these changes are reflected in the later phases.
Simple: Iterative waterfall model is very simple to understand and use. That’s why
it is one of the most widely used software development models.
Incremental delivery not supported: In the iterative waterfall model, the full
software is completely developed and tested before delivery to the customer. There
is no scope for any intermediate delivery. So, customers have to wait long for getting
the software.
Overlapping of phases not supported: Iterative waterfall model assumes that
one phase can start after completion of the previous phase, but in real projects,
phases may overlap to reduce the effort and time needed to complete the project.
Risk handling not supported: Projects may suffer from various types of risks.
But, Iterative waterfall model has no mechanism for risk handling.
A, B, C are modules of Software Product that are incrementally developed and delivered.
Requirements of Software are first broken down into several modules that can be
incrementally constructed and delivered.
At any time, the plan is made just for the next increment and not for any kind of
long term plans. Therefore, it is easier to modify the version as per the need of
the customer.
Development Team first undertakes to develop core features (these do not need
services from other features) of the system.
Once the core features are fully developed, then these are refined to increase
levels of capabilities by adding new functions in Successive versions.
Each incremental version is usually developed using an iterative waterfall model of
development.
As each successive version of the software is constructed and delivered, now the
feedback of the Customer is to be taken and these were then incorporated in the
next version. Each version of the software have more additional features over the
previous ones.
After Requirements gathering and specification, requirements are then spitted into
several different versions starting with version-1, in each successive increment,
next version is constructed and then deployed at the customer site. After the last
version (version n), it is now deployed at the client site.
Types of Incremental model –
1. Staged Delivery Model – Construction of only one part of the project at a time.
2. Parallel Development Model – Different subsystems are developed at the same
time. It can decrease the calendar time needed for the development, i.e. TTM
(Time to Market), if enough Resources are available.
Advantages –
Error Reduction (core modules are used by the customer from the beginning of
the phase and then these are tested thoroughly)
Uses divide and conquer for breakdown of tasks.
Lowers initial delivery cost.
Incremental Resource Deployment.
Disadvantages –
Requires good planning and design.
4. PRTOTYPING MODEL
Prototype
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:
Prototyping: advantages
The resulting software is usually more usable
User needs are better accommodated
The design is of higher quality
The resulting software is easier to maintain
Overall, the development incurs less cost
Prototyping: disadvantages
For some projects, it is expensive
Susceptible to over-engineering:
Designers start to incorporate sophistications that they could not incorporate in
the prototype.
5. Evolutionary Model
It is better for software products that have their feature sets redefined during
development because of user feedback and other factors.
Feedback is provided by the users on the product for the planning stage of the
next cycle and the development team responds, often by changing the product,
plan or process. Therefore, the software product evolves with time.
All the models have the disadvantage that the duration of time from start
of the project to the delivery time of a solution is very high. Evolutionary
model solves this problem in a different approach.
Evolutionary model suggests breaking down of work into smaller chunks,
prioritizing them and then delivering those chunks to the customer one by one.
The number of chunks is huge and is the number of deliveries made to the
customer.
The main advantage is that the customer’s confidence increases as he
constantly gets quantifiable goods or services from the beginning of the project to
verify and validate his requirements.
The model allows for changing requirements as well as all work in broken down
into maintainable work chunks.
Application of Evolutionary Model:
1. It is used in large projects where you can easily find modules for incremental
implementation. Evolutionary model is commonly used when the customer wants to
start using the core features instead of waiting for the full software.
2. Evolutionary model is also used in object oriented software development because
the system can be easily portioned into units in terms of objects.
Advantages:
Disadvantages:
The following pointers describe the typical scenarios where RAD can be used
RAD should be used only when a system can be modularized to be delivered in an
incremental manner.
It should be used if there is a high availability of designers for Modelling.
It should be used only if the budget permits use of automated code generating
tools.
RAD SDLC model should be chosen only if domain experts are available with
relevant business knowledge.
Should be used where the requirements change during the project and working
prototypes are to be presented to customer in small iterations of 2-3 months.
Evolved by Rumbaugh, Booch, and Jacobson. Combines the best features their OO
models. Adopts additional features proposed by other experts. Resulted in Unified
Modeling Language (UML). A framework for Object-Oriented Software
Engineering using UML.
• Inception Phase
• Elaboration Phase
• Construction Phase
• Transition Phase
Inception:
The primary goal of the Inception phase is to establish the case for the viability of the
proposed system.
The tasks that a project team performs during Inception include the
following:
Defining the scope of the system (that is, what's in and what's out)
Identifying critical risks and determining when and how the project will address
them
Starting to make the business case that the project is worth doing, based on initial
estimates of cost, effort, schedule, and product quality
The major milestone associated with the Inception phase is called Life-Cycle
Objectives. The indications that the project has reached this milestone
include the following:
The major stakeholders agree on the scope of the proposed system.
The business case for the project is strong enough to justify a green light for
continued development.
Elaboration:
The primary goal of the Elaboration phase is to establish the ability to build the new
system given the financial constraints, schedule constraints, and other kinds of
constraints that the development project faces.
The tasks that a project team performs during Elaboration include the
following:
Finalizing the business case for the project and preparing a project plan that
contains sufficient detail to guide the next phase of the project (Construction)
The architectural baseline contains expanded versions of the six models initialized during
the Inception phase.
The major milestone associated with the Elaboration phase is called Life-Cycle
Architecture. The indications that the project has reached this milestone include the
following:
Most of the functional requirements for the new system have been captured in the
use case model.
The architectural baseline is a small, skinny system that will serve as a solid
foundation for ongoing development.
The business case has received a green light, and the project team has an initial
project plan that describes how the Construction phase will proceed.
Construction:
The primary goal of the Construction phase is to build a system capable of operating
successfully in beta customer environments.
During Construction, the project team performs tasks that involve building the system
iteratively and incrementally, making sure that the viability of the system is always
evident in executable form.
The major milestone associated with the Construction phase is called Initial
Operational Capability. The project has reached this milestone if a set of beta
customers has a more or less fully operational system in their hands.
Transition:
The primary goal of the Transition phase is to roll out the fully functional system to
customers.
During Transition, the project team focuses on correcting defects and modifying the
system to correct previously unidentified problems.
The major milestone associated with the Transition phase is called Product Release.
8. Spiral Model
The below diagram shows the different phases of the Spiral Model: –
Each phase of the Spiral Model is divided into four quadrants as shown in the
above figure. The functions of these four quadrants are discussed below-
Requirements are gathered from the customers and the objectives are identified,
elaborated, and analyzed at the start of every phase.
Then alternative solutions possible for the phase are proposed in this quadrant.
Identify and resolve Risks:
During the second quadrant, all the possible solutions are evaluated to select the
best possible solution.
Then the risks associated with that solution are identified and the risks are resolved
using the best possible strategy.
At the end of this quadrant, the Prototype is built for the best possible solution.
During the third quadrant, the identified features are developed and verified
through testing.
At the end of the third quadrant, the next version of the software is available.
In the fourth quadrant, the Customers evaluate the so far developed version of
the software. In the end, planning for the next phase is started.
A risk is any adverse situation that might affect the successful completion of a
software project.
The most important feature of the spiral model is handling these unknown risks
after the project has started.
Such risk resolutions are easier done by developing a prototype. The spiral model
supports coping up with risks by providing the scope to build a prototype at every
phase of the software development.
The Prototyping Model also supports risk handling, but the risks must be identified
completely before the start of the development work of the project.
But in real life project risk may occur after the development work starts, in that
case, we cannot use the Prototyping Model.
In each phase of the Spiral Model, the features of the product dated and analyzed,
and the risks at that point in time are identified and are resolved through
prototyping. Thus, this model is much more flexible compared to other SDLC
models.
The Spiral model is called a Meta-Model because it subsumes all the other
SDLC models.
For example, a single loop spiral actually represents the Iterative
Waterfall Model.
The spiral model incorporates the stepwise approach of the Classical
Waterfall Model.
The spiral model uses the approach of the Prototyping Model by building a
prototype at the start of each phase as a risk-handling technique.
Also, the spiral model can be considered as supporting the Evolutionary model
– the iterations along the spiral can be considered as evolutionary levels through
which the complete system is built.
Risk Handling: The projects with many unknown risks that occur as the development
proceeds, in that case, Spiral Model is the best development model to follow due to the
risk analysis and risk handling at every phase.
Good for large projects: It is recommended to use the Spiral Model in large and
complex projects.
Flexibility in Requirements: Change requests in the Requirements at later phase can
be incorporated accurately by using this model.
Customer Satisfaction: Customer can see the development of the product at the early
phase of the software development and thus, they habituated with the system by using
it before completion of the total product.
Complex: The Spiral Model is much more complex than other SDLC models.
Too much dependability on Risk Analysis: The successful completion of the project
is very much dependent on Risk Analysis. Without very highly experienced experts, it is
going to be a failure to develop a project using this model.
9. Agile Model
Planning
Requirements Analysis
Design
Coding
Unit Testing and
Acceptance Testing.
At the end of the iteration, a working product is displayed to the customer and important
stakeholders.
What is Agile?
Agile model believes that every project needs to be handled differently and the
existing methods need to be tailored to best suit the project requirements.
In Agile, the tasks are divided to time boxes (small time frames) to deliver
specific features for a release.
Iterative approach is taken and working software build is delivered after each
iteration.
Each build is incremental in terms of features; the final build holds all the
features required by the customer.
The Agile thought process had started early in the software development and
started becoming popular with time due to its flexibility and adaptability.
The most popular Agile methods include Rational Unified Process (1994),
Scrum (1995), Crystal Clear, Extreme Programming (1996), Adaptive Software
Development, Feature Driven Development, and Dynamic Systems Development
Method (DSDM) (1995).
These are now collectively referred to as Agile Methodologies, after the Agile
Manifesto was published in 2001.
Following are the Agile Manifesto principles −
Individuals and interactions − In Agile development, self-organization and
motivation are important, as are interactions like co-location and pair
programming.
Working software − Demo working software is considered the best means of
communication with the customers to understand their requirements, instead of
just depending on documentation.
Customer collaboration − As the requirements cannot be gathered completely
in the beginning of the project due to various factors, continuous customer
interaction is very important to get proper product requirements.
Responding to change − Agile Development is focused on quick responses to
change and continuous development.
V-Model
1. Unit Testing: In the V-Model, Unit Test Plans (UTPs) are developed during the
module design phase. These UTPs are executed to eliminate errors at code level
or unit level. A unit is the smallest entity which can independently exist, e.g., a
program module. Unit testing verifies that the smallest entity can function correctly
when isolated from the rest of the codes/ units.
2. Integration Testing: Integration Test Plans are developed during the
Architectural Design Phase. These tests verify that groups created and tested
independently can coexist and communicate among themselves.
3. System Testing: System Tests Plans are developed during System Design Phase.
Unlike Unit and Integration Test Plans, System Tests Plans are composed by the
client?s business team. System Test ensures that expectations from an application
developer are met.
4. Acceptance Testing: Acceptance testing is related to the business requirement
analysis part. It includes testing the software product in user atmosphere.
Acceptance tests reveal the compatibility problems with the different systems,
which is available within the user atmosphere. It conjointly discovers the non-
functional problems like load and performance defects within the real user
atmosphere.
When to use V-Model?
o When the requirement is well defined and not ambiguous.
o The V-shaped model should be used for small to medium-sized projects where
requirements are clearly defined and fixed.
o The V-shaped model should be chosen when sample technical resources are
available with essential technical expertise.
Verification and Validation is the process of investigating that a software system satisfies
specifications and standards and it fulfills the required purpose. Barry
Boehm described verification and validation as the following:
Verification is the process of checking that a software achieves its goal without any bugs.
It is the process to ensure whether the product that is developed is right or not.
It verifies whether the developed product fulfills the requirements that we have.
Verification is Static Testing.
Validation:
Validation is the process of checking whether the software product is up to the mark or
in other words product has high level requirements. It is the process of checking the
validation of product i.e. it checks what we are developing is the right product.
It is validation of actual and expected product. Validation is the Dynamic Testing.
Activities involved in validation:
Are we building the system right? Are we building the right system?
The objective of Verification is to make sure The objective of Validation is to make sure
that the product being develop is as per the that the product actually meet up the user’s
requirements and design specifications. requirements, and check whether the
specifications were correct in the first place.
Verification process explains whether the Validation process describes whether the
outputs are according to inputs or not. software is accepted by the user or not.
Verification is carried out before the Validation activity is carried out just after the
Validation. Verification.
Cost of errors caught in Verification is less Cost of errors caught in Validation is more
than errors found in Validation. than errors found in Verification.
Verification is also known as static testing. Validation is also known as dynamic testing.
Quality assurance comes under verification Quality control comes under validation
testing. testing.
Verification is done before the validation After verification testing, validation testing
testing. takes place.
Software requirements specification
4.Unambiguousness: SRS is unambiguous when every fixed requirement has only one
interpretation. This suggests that each element is uniquely interpreted.
For example, consider you are developing a web application for your client. The
client requires that enough number of people should be able to access the application
simultaneously. What's the "enough number of people"? That could mean 10 to you,
but, perhaps, 100 to the client. There's an ambiguity.
5. Ranking for importance and stability: The SRS is ranked for importance and
stability if each requirement in it has an identifier to indicate either the significance or
stability of that particular requirement.
Typically, all requirements are not equally important. Some prerequisites may be
essential, especially for life-critical applications, while others may be desirable.
Each element should be identified to make these differences clear and explicit. Another
way to rank requirements is to distinguish classes of items as essential, conditional, and
optional.
6. Modifiability: SRS should be made as modifiable as likely and should be capable of
quickly obtain changes to the system to some extent. Modifications should be perfectly
indexed and cross-referenced.
7. Verifiability: SRS is correct when the specified requirements can be verified with a
cost-effective system to check whether the final software meets those requirements.
The requirements are verified with the help of reviews.
8. Traceability: The SRS is traceable if the origin of each of the requirements is clear
and if it facilitates the referencing of each condition in future development or
enhancement documentation.
There are two types of Traceability:
1. Backward Traceability: This depends upon each requirement explicitly referencing
its source in earlier documents.
2. Forward Traceability: This depends upon each element in the SRS having a unique
name or reference number.
Functional requirements:-
The functional requirements part discusses the functionalities required from the
system. The system is considered to perform a set of high-level functions {fi }.
The functional view of the system is shown in fig. Each function fi of the
system can be considered as a transformation of a set of input data (ii) to the
The user can get some meaningful piece of work done using a high-level function.
Nonfunctional requirements deal with the characteristics of the system which cannot be
expressed as functions - such as the maintainability of the system, portability of the
system, usability of the system, etc.
Goals of implementation:-
Processing: the amount is debited from the user’s account if sufficient balance is
available, otherwise an error message displayed
The important problems that an organization would face if it does not develop
a SRS document are as follows:
Without developing the SRS document, the system would not be implemented
according to customer needs.
Software developers would not know whether what they are developing is what
exactly required by the customer.
Without SRS document, it will be very much difficult for the maintenance engineers
to understand the functionality of the system.
It will be very much difficult for user document writers to write the users’ manuals
properly without understanding the SRS document.
1. Property Oriented:
2. Model Oriented:
Axiomatic Specification
- Uses a set of stateless functions; each function has a set of pre and post condition.
- Pre and Post conditions are the predicate over the inputs and outputs of a function.
- A predicate is a Boolean expression which is true or false and whose variables are
the parameters of the function being specified.
- Pre-condition: Must satisfied before operation invoked.
- Post – condition: Must satisfied after operation invoked.
The following are the sequence of steps that can be followed to systematically
develop the axiomatic specifications of a function:
Establish the range of input values over which the function should behave
correctly. Also find out other constraints on the input parameters and write it in
the form of a predicate.
Specify a predicate defining the conditions which must hold on the output of the
function if it behaved properly.
Establish the changes made to the function’s input parameters after execution of
the function. Pure mathematical functions do not change their input and therefore
this type of assertion is not necessary for pure functions.
Combine all of the above into pre and post conditions of the function.
Algebraic Specification
- It contains 4 parts: