You are on page 1of 25

Introduction to Software Engineering

Software is a program or set of programs containing instructions which provide desired


functionality . And Engineering is the processes of designing and building something
that serves a particular purpose and find a cost effective solution to problems.
Software Engineering is a systematic approach to the design, development, operation,
and maintenance of a software system.

Dual Role of Software:


1. As a product –
 It delivers the computing potential across network of Hardware.
 It enables the Hardware to deliver the excepted functionality.
 It acts as information transformer because it produces, manages, acquires,
modifies, displays, or transmits information.
2. As a vehicle for delivering a product –
 It provides system functionality (e.g., payroll system)
 It controls other software (e.g., an operating system)
 It helps build other software (e.g., software tools)

Objectives of Software Engineering:

1. Maintainability –
It should be feasible for the software to evolve to meet changing requirements.
2. Correctness –
A software product is correct, if the different requirements as specified in the SRS
document have been correctly implemented.
3. Reusability –
A software product has good reusability, if the different modules of the product can
easily be reused to develop new products.
4. Testability –
Here software facilitates both the establishment of test criteria and the evaluation of
the software with respect to those criteria.
5. Reliability –
It is an attribute of software quality. The extent to which a program can be expected
to perform its desired function, over an arbitrary time period.
6. Portability –
In this case, software can be transferred from one computer system or environment
to another.
7. Adaptability –
In this case, software allows differing system constraints and user needs to be
satisfied by making changes to the software.

Program vs Software Product:

1. Program is a set of instruction related each other where as Software Product is a


collection of program designed for specific task.
2. Programs are usually small in size where as Software Products are usually large in
size.
3. Programs are developed by individuals that means single user where as Software
Product are developed by large no of users.
4. In program, there is no documentation or lack in proper documentation.
In Software Product, Proper documentation and well documented and user manual
prepared.
5. Development of program is Unplanned, not Systematic etc but Development of
Software Product is well Systematic, organised, planned approach.
6. Programs provide Limited functionality and less features where as Software
Products provides more functionality as they are big in size (lines of codes) more
options and features.

Classification of Software
The software is used extensively in several domains including hospitals, banks, schools,
defence, finance, stock markets and so on. It can be categorized into different types:

On the basis of application:

1. System Software –
System Software is necessary to manage the computer resources and support the
execution of application programs. Software like operating systems, compilers,
editors and drivers etc., come under this category. A computer cannot function
without the presence of these. Operating systems are needed to link the machine
dependent needs of a program with the capabilities of the machine on which it runs.
Compilers translate programs from high-level language to machine language.
2. Networking and Web Applications Software –
Networking Sofware provides the required support necessary for computers to
interact with each other and with data storage facilities. The networking software is
also used when software is running on a network of computers (such as World Wide
Web). It includes all network management software, server software, security and
encryption software and software to develop web-based applications like HTML,
PHP, XML, etc.
3. Embedded Software –
This type of software is embedded into the hardware normally in the Read Only
Memory (ROM) as a part of a large system and is used to support certain
functionality under the control conditions. Examples are software used in
instrumentation and control applications, washing machines, satellites, microwaves,
washing machines etc.
4. Reservation Software –
A Reservation system is primarily used to store and retrieve information and perform
transactions related to air travel, car rental, hotels, or other activities. They also
provide access to bus and railway reservations, although these are not always
integrated with the main system. These are also used to relay computerized
information for users in the hotel industry, making a reservation and ensuring that
the hotel is not overbooked.
5. Business Software –
This category of software is used to support the business applications and is the
most widely used category of software. Examples are software for inventory
management, accounts, banking, hospitals, schools, stock markets, etc.
6. Entertainment Software –
Education and entertainment software provides a powerful tool for educational
agencies, especially those that deal with educating young children. There is a wide
range of entertainment software such as computer games, educational games,
translation software, mapping software, etc.
7. Artificial Intelligence Software –
Software like expert systems, decision support systems, pattern recognition
software, artificial neural networks, etc. come under this category. They involve
complex problems which are not affected by complex computations using non-
numerical algorithms.
8. Scientific Software –
Scientific and engineering software satisfies the needs of a scientific or engineering
user to perform enterprise specific tasks. Such software is written for specific
applications using principles, techniques and formulae specific to that field.
Examples are software like MATLAB, AUTOCAD, PSPICE, ORCAD, etc.
9. Utilities Software –
The programs coming under this category perform specific tasks and are different
from other software in terms of size, cost and complexity. Examples are anti-virus
software, voice recognition software, compression programs, etc.
10. Document Management Software –
A Document Management Software is used to track, manage and store documents
in order to reduce the paperwork. Such systems are capable of keeping a record of
the various versions created and modified by different users (history tracking). They
commonly provide storage, versioning, metadata, security, as well as indexing and
retrieval capabilities.

On the basis of copyright:

1. Commercial –
It represents the majority of software which we purchase from software companies,
commercial computer stores, etc. In this case, when a user buys a software, they
acquire a license key to use it. Users are not allowed to make the copies of the
software. The copyright of the program is owned by the company.
2. Shareware –
Shareware software is also covered under copyright but the purchasers are allowed
to make and distribute copies with the condition that after testing the software, if the
purchaser adopts it for use, then they must pay for it.
In both of the above types of software, changes to software are not allowed.
3. Freeware –
In general, according to freeware software licenses, copies of the software can be
made both for archival and distribution purposes but here, distribution cannot be for
making a profit. Derivative works and modifications to the software are allowed and
encouraged. Decompiling of the program code is also allowed without the explicit
permission of the copyright holder.
4. Public Domain –
In case of public domain software, the original copyright holder explicitly relinquishes
all rights to the software. Hence software copies can be made both for archival and
distribution purposes with no restrictions on distribution. Modifications to the
software and reverse engineering are also allowed.

Software components:-
Software components of a computer system have no physical presence, they are stored
in digital form within computer memory. There are different categories of software,
including system software, utilitiesand applications software. Software can also be
described as being either generic or bespoke.
System software is the software used to manage and control the hardware
components and which allow interaction between the hardware and the other types of
software. The most obvious type of system software is the computer's operating
system but device drivers are also included within this category.

Fig 1: a screenshot from a software application


Utility software is software such as anti-virus software, firewalls, disk defragmenters
and so on which helps to maintain and protect the computer system but does not
directly interface with the hardware.
Applications software (also known as 'apps') are designed to allow the user of the
system complete a specific task or set of tasks. They include programs such as web
browsers, office software, games and so on. They are usually the reason you bought
the computer system in the first place and aren't concerned with the management or
maintenance of the system itself.
Any individual software package, whichever of the above types it falls into, can be
either generic (or 'off-the-shelf') or it can be bespoke (custom-built). Generic software
is mass produced with the intention that it will be used by a wide variety of different
users in a range of different situations. Bespoke software is created for a specific
purpose which will be used in a known environment.
Often generic software is used when there is a package available that meets the needs
of the user. Because it is used by many more people the cost of creating it is spread
over a greater number of people or organisations and so the cost to the individual is
much lower. It also has the advantage that it is available immediately there's no waiting
time involved while the software package is designed, created and tested. Bespoke
software has the advantage that it can be tailor made to exact specifications but it
significantly more expensive and will take time to create.

Software Process
A software process (also knows as software methodology) is a set of related activities that
leads to the production of the software. These activities may involve the development of the
software from the scratch, or, modifying an existing system.

Any software process must include the following four activities:

1. Software specification (or requirements engineering): Define the main functionalities


of the software and the constrains around them.
2. Software design and implementation: The software is to be designed and
programmed.
3. Software verification and validation: The software must conforms to it’s
specification and meets the customer needs.
4. Software evolution (software maintenance): The software is being modified to meet
customer and market requirements changes.

In practice, they include sub-activities such as requirements validation, architectural design,


unit testing, …etc.

There are also supporting activities such as configuration and change management,
quality assurance, project management, user experience.

Along with other activities aim to improve the above activities by introducing new
techniques, tools, following the best practice, process standardization (so the diversity of
software processes is reduced), etc.

When we talk about a process, we usually talk about the activities in it. However, a process
also includes the process description, which includes:

1. Products: The outcomes of the an activity. For example, the outcome of architectural
design maybe a model for the software architecture.
2. Roles: The responsibilities of the people involved in the process. For example, the project
manager, programmer, etc.
3. Pre and post conditions: The conditions that must be true before and after an activity.
For example, the pre condition of the architectural design is the requirements have been
approved by the customer, while the post condition is the diagrams describing the
architectural have been reviewed.

Software process is complex, it relies on making decisions. There’s no ideal process and most
organizations have developed their own software process.

For example, an organization works on critical systems has a very structured process, while
with business systems, with rapidly changing requirements, a less formal, flexible process is
likely to be more effective.

Software Crisis:-

Software crisis is a term used in the early days of computing science for the difficulty
of writing useful and efficient computer programs in the required time. The software
crisis was due to the rapid increases in computer power and the complexity of the
problems that could not be tackled. With the increase in the complexity of the software,
many software problems arose because existing methods were insufficient.
The term "software crisis" was coined by some attendees at the first NATO Software
Engineering Conference in 1968 at Garmisch, Germany.[1][2] Edsger Dijkstra's
1972 ACM Turing Award Lecture makes reference to this same problem:[3]
The major cause of the software crisis is that the machines have become several orders
of magnitude more powerful! To put it quite bluntly: as long as there were no machines,
programming was no problem at all; when we had a few weak computers, programming
became a mild problem, and now we have gigantic computers, programming has
become an equally gigantic problem.

— Edsger Dijkstra, The Humble Programmer (EWD340), Communications of the ACM


The causes of the software crisis were linked to the overall complexity of hardware and
the software development process. The crisis manifested itself in several ways:

 Projects running over-budget


 Projects running over-time
 Software was very inefficient
 Software was of low quality
 Software often did not meet requirements
 Projects were unmanageable and code difficult to maintain
 Software was never delivered
The main cause is that improvements in computing power had outpaced the ability of
programmers to effectively utilize those capabilities. Various processes and
methodologies have been developed over the last few decades to improve software
quality management such as procedural programming and object-oriented
programming. However software projects that are large, complicated, poorly specified,
and involve unfamiliar aspects, are still vulnerable to large, unanticipated problems.

Software Quality Attributes


12 software architecture quality attributes
1. Performance – shows the response of the system to performing certain actions for a certain
period of time.
2. Interoperability is an attribute of the system or part of the system that is responsible for its
operation and the transmission of data and its exchange with other external systems.
3. Usability is one of the most important attributes, because, unlike in cases with other
attributes, users can see directly how well this attribute of the system is worked out.
4. Reliability is an attribute of the system responsible for the ability to continue to operate
under predefined conditions.
5. Availability is part of reliability and is expressed as the ratio of the available system time to
the total working time.
6. Security is responsible for the ability of the system to reduce the likelihood of malicious or
accidental actions as well as the possibility of theft or loss of information.
7. Maintainability is the ability of the system to support changes.
8. Modifiability determines how many common changes need to be made to the system to
make changes to each individual item.
9. Testability shows how well the system allows performing tests, according to predefined
criteria.
10. Scalability is the ability of the system to handle load increases without decreasing
performance, or the possibility to rapidly increase the load.
11. Reusability is a chance of using a component or system in other components/systems with
small or no change.
12. Supportability is the ability of the system to provide useful information for identifying and
solving problems.

Software Process Models


A software process model is a simplified representation of a software process. Each model
represents a process from a specific perspective.

We’re going to take a quick glance about very general process models. These generic models
are abstractions of the process that can be used to explain different approaches to the
software development. They can be adapted and extended to create more specific processes.
Some methodologies are sometimes known as software development life cycle(SDLC)
methodologies, though this term could also be used more generally to refer to any
methodology.
Classical Waterfall 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:

1. Feasibility Study: The main goal of this phase is to determine whether it would be
financially and technically feasible to develop the software.
The feasibility study involves understanding the problem and then determine the
various possible strategies to solve the problem. These different identified solutions
are analyzed based on their benefits and drawbacks, The best solution is chosen
and all the other phases are carried out as per this solution strategy.
2. Requirements analysis and specification: The aim of the requirement analysis
and specification phase is to understand the exact requirements of the customer
and document them properly. This phase consists of two different activities.
 Requirement gathering and analysis: Firstly all the requirements regarding the
software are gathered from the customer and then the gathered requirements
are analyzed. The goal of the analysis part is to remove incompleteness (an
incomplete requirement is one in which some parts of the actual requirements
have been omitted) and inconsistencies (inconsistent requirement is one in
which some part of the requirement contradicts with some other part).
 Requirement specification: These analyzed requirements are documented in a
software requirement specification (SRS) document. SRS document serves as a
contract between development team and customers. Any future dispute between
the customers and the developers can be settled by examining the SRS
document.
3. Design: The aim 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.
4. Coding and Unit testing: In coding phase software design is translated into source
code using any suitable programming language. Thus each designed module is
coded. The aim of the unit testing phase is to check whether each module is working
properly or not.
5. Integration and System testing: Integration of different modules are undertaken
soon after they have been coded and unit tested. Integration of various modules is
carried out incrementally over a number of steps. During each integration step,
previously planned modules are added to the partially integrated system and the
resultant system is tested. Finally, after all the modules have been successfully
integrated and tested, the full working system is obtained and system testing is
carried out on this.
System testing consists three different kinds of testing activities as described below :
1.
 α-testing: α-testing is the system testing performed by the development team.
 β-testing: β-testing is the system testing performed by a friendly set of
customers.
 Acceptance testing: After the software has been delivered, the customer
performed the acceptance testing to determine whether to accept the delivered
software or to reject it.
2. Maintainence: Maintenance is the most important phase of a software life cycle.
The effort spent on maintenance is the 60% of the total effort spent to develop a full
software. There are basically three types of maintenance :
 Corrective Maintenance: This type of maintenance is carried out to correct
errors that were not discovered during the product development phase.
 Perfective Maintenance: This type of maintenance is carried out to enhance
the functionalities of the system based on the customer’s request.
 Adaptive Maintenance: Adaptive maintenance is usually required for porting
the software to work in a new environment such as work on a new computer
platform or with a new operating system.

Advantages of Classical Waterfall Model

Classical waterfall model is an idealistic model for software development. It is very


simple, so it can be considered as the basis for other software development life cycle
models. Below are some of the major advantages of this SDLC model:
 This model is very simple and is easy to understand.
 Phases in this model are processed one at a time.
 Each stage in the model is clearly defined.
 This model has very clear and well undestood milestones.
 Process, actions and results are very well documented.
 Reinforces good habits: define-before- design,
design-before-code.
 This model works well for smaller projects and projects where requirements are well
understood.

Drawbacks of Classical Waterfall Model

Classical waterfall model suffers from various shortcomings, basically we can’t use it in
real projects, but we use other software development lifecycle models which are based
on the classical waterfall model. Below are some major drawbacks of this model:
 No feedback path: In classical waterfall model evolution of a software from one
phase to another phase is like a waterfall. It assumes that no error is ever committed
by developers during any phases. Therefore, it does not incorporate any mechanism
for error correction.
 Difficult to accommodate change requests: This model assumes that all the
customer requirements can be completely and correctly defined at the beginning of
the project, but actually customers’ requirements keep on changing with time. It is
difficult to accommodate any change requests after the requirements specification
phase is complete.
 No overlapping of phases: This model recommends that new phase can start only
after the completion of the previous phase. But in real projects, this can’t be
maintained. To increase the efficiency and reduce the cost, phases may overlap.
Iterative Waterfall Model
In a practical software development project, the classical waterfall model is hard to use.
So, Iterative waterfall model can be thought of as incorporating the necessary changes
to the classical waterfall model to make it usable in practical software development
projects. It is almost same as the classical waterfall model except some changes are
made to increase the efficiency of the software development.
The iterative waterfall model provides feedback paths from every phase to its
preceding phases, which is the main difference from the classical waterfall
model.
Feedback paths introduced by the iterative waterfall model are shown in the figure
below.

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.
Advantages of Iterative Waterfall Model
 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.
Drawbacks of Iterative Waterfall Model
 Difficult to incorporate change requests: The major drawback of the iterative
waterfall model is that all the requirements must be clearly stated before starting of
the development phase. Customer may change requirements after some time but
the iterative waterfall model does not leave any scope to incorporate change
requests that are made after development phase starts.
 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.
 Limited customer interactions: Customer interaction occurs at the start of the
project at the time of requirement gathering and at project completion at the time of
software delivery. These fewer interactions with the customers may lead to many
problems as the finally developed software may differ from the customers’ actual
requirements.

Prototyping Model
Prototyping is defined as the process of developing a working replication of a product or
system that has to be engineered. It offers a small scale facsimile of the end product
and is used for obtaining customer feedback as described below:
The Prototyping Model is one of the most popularly used Software Development Life
Cycle Models (SDLC models).This model is used when the customers do not know the
exact project requirements beforehand. In this model, a prototype of the end product is
first developed, tested and refined as per customer feedback repeatedly till a final
acceptable prototype is achieved which forms the basis for developing the final product.
In this process model, the system is partially implemented before or during the analysis
phase thereby giving the customers an opportunity to see the product early in the life
cycle. The process starts by interviewing the customers and developing the incomplete
high-level paper model. This document is used to build the initial prototype supporting
only the basic functionality as desired by the customer. Once the customer figures out
the problems, the prototype is further refined to eliminate them. The process continues
till the user approves the prototype and finds the working model to be satisfactory.
There are 2 approaches for this model:
1. Rapid Throwaway Prototyping –
This technique offers a useful method of exploring ideas and getting customer
feedback for each of them. In this method, a developed prototype need not
necessarily be a part of the ultimately accepted prototype. Customer feedback helps
in preventing unnecessary design faults and hence, the final prototype developed is
of a better quality.
2. Evolutionary Prototyping –
In this method, the prototype developed initially is incrementally refined on the basis
of customer feedback till it finally gets accepted. In comparison to Rapid Throwaway
Prototyping, it offers a better approach which saves time as well as effort. This is
because developing a prototype from scratch for every iteration of the process can
sometimes be very frustrating for the developers.
Advantages –
 The customers get to see the partial product early in the life cycle. This ensures a
greater level of customer satisfaction and comfort.
 New requirements can be easily accommodated as there is scope for refinement.
 Missing functionalities can be easily figured out.
 Errors can be detected much earlier thereby saving a lot of effort and cost, besides
enhancing the quality of the software.
 The developed prototype can be reused by the developer for more complicated
projects in the future.
 Flexibility in design.
Disadvantages –
 Costly w.r.t time as well as money.
 There may be too much variation in requirements each time the prototype is
evaluated by the customer.
 Poor Documentation due to continuously changing customer requirements.
 It is very difficult for the developers to accommodate all the changes demanded by
the customer.
 There is uncertainty in determining the number of iterations that would be required
before the prototype is finally accepted by the customer.
 After seeing an early prototype, the customers sometimes demand the actual
product to be delivered soon.
 Developers in a hurry to build prototypes may end up with sub-optimal solutions.
 The customer might lose interest in the product if he/she is not satisfied with the
initial prototype.
Use –
The Prototyping Model should be used when the requirements of the product are not
clearly understood or are unstable. It can also be used if requirements are changing
quickly. This model can be successfully used for developing user interfaces, high
technology software-intensive systems, and systems with complex algorithms and
interfaces. It is also a very good choice to demonstrate the technical feasibility of the
product.

Spiral Model
Spiral model is one of the most important Software Development Life Cycle models,
which provides support for Risk Handling. In its diagrammatic representation, it looks
like a spiral with many loops. The exact number of loops of the spiral is unknown and
can vary from project to project. Each loop of the spiral is called a Phase of the
software development process. The exact number of phases needed to develop the
product can be varied by the project manager depending upon the project risks. As the
project manager dynamically determines the number of phases, so the project manager
has an important role to develop a product using spiral model.
The Radius of the spiral at any point represents the expenses(cost) of the project so far,
and the angular dimension represents the progress made so far in the current phase.
Below diagram shows the different phases of the Spiral Model:
Each phase of Spiral Model is divided into four quadrants as shown in the above figure.
The functions of these four quadrants are discussed below-
1. Objectives determination and identify alternative solutions: 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.
2. 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 is identified and the risks are resolved using the best possible strategy.
At the end of this quadrant, Prototype is built for the best possible solution.
3. Develop next version of the Product: 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.
4. Review and plan for the next Phase: 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.
Risk Handling in Spiral Model
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.
Prototyping Model also support 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
Prototyping Model. In each phase of the Spiral Model, the features of the product dated
and analyzed and the risks at that point of time are identified and are resolved through
prototyping. Thus, this model is much more flexible compared to other SDLC models.

Why Spiral Model is called Meta Model ?

The Spiral model is called as 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 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.
Advantages of Spiral Model: Below are some of the advantages of the Spiral Model.
 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.
Disdvantages of Spiral Model: Below are some of the main disadvantages of the
spiral model.
 Complex: The Spiral Model is much more complex than other SDLC models.
 Expensive: Spiral Model is not suitable for small projects as it is expensive.
 Too much dependable on Risk Analysis: The successful completion of the project
is very much dependent on Risk Analysis. Without very highly experienced
expertise, it is going to be a failure to develop a project using this model.
 Difficulty in time management: As the number of phases is unknown at the start of
the project, so time estimation is very difficult.
Incremental process model
Incremental process model is also know as Successive version model.
First, a simple working system implementing only a few basic features is built and then
that is delivered to the customer. Then thereafter many successive iterations/ versions
are implemented and delivered to the customer until the desired system is realized.

A, B, C are modules of Software Product that are incrementally developed and


delivered.
Life cycle activities –
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.

When to use this –


1. Funding Schedule, Risk, Program Complexity, or need for early realization of
benefits.
2. When Requirements are known up-front.
3. When Projects having lengthy developments schedules.
4. Projects with new Technology.
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.
 Total cost is not lower.
 Well defined module interfaces are required.
Rapid application development model (RAD)
The Rapid Application Development Model was first proposed by IBM in 1980’s. The
critical feature of this model is the use of powerful development tools and techniques.
A software project can be implemented using this model if the project can be broken
down into small modules wherein each module can be assigned independently to
separate teams. These modules can finally be combined to form the final product.
Development of each module involves the various basic steps as in waterfall model i.e
analyzing, designing, coding and then testing, etc. as shown in the figure.
Another striking feature of this model is a short time span i.e the time frame for
delivery(time-box) is generally 60-90 days.

The use of powerful developer tools such as JAVA, C++, Visual BASIC, XML, etc. is
also an integral part of the projects.

This model consists of 4 basic phases:


1. Requirements Planning –
It involves the use of various techniques used in requirements elicitation like
brainstorming, task analysis, form analysis, user scenarios, FAST (Facilitated
Application Development Technique), etc. It also consists of the entire structured
plan describing the critical data, methods to obtain it and then processing it to form
final refined model.
2. User Description –
This phase consists of taking user feedback and building the prototype using
developer tools. In other words, it includes re-examination and validation of the data
collected in the first phase. The dataset attributes are also identified and elucidated
in this phase.
3. Construction –
In this phase, refinement of the prototype and delivery takes place. It includes the
actual use of powerful automated tools to transform process and data models into
the final working product. All the required modifications and enhancements are too
done in this phase.
4. Cutover –
All the interfaces between the independent modules developed by separate teams
have to be tested properly. The use of powerfully automated tools and subparts
makes testing easier. This is followed by acceptance testing by the user.
The process involves building a rapid prototype, delivering it to the customer and the
taking feedback. After validation by the customer, SRS document is developed and the
design is finalised.
Advantages –
 Use of reusable components helps to reduce the cycle time of the project.
 Feedback from the customer is available at initial stages.
 Reduced costs as fewer developers are required.
 Use of powerful development tools results in better quality products in comparatively
shorter time spans.
 The progress and development of the project can be measured through the various
stages.
 It is easier to accommodate changing requirements due to the short iteration time
spans.
Disadvantages –
 The use of powerful and efficient tools requires highly skilled professionals.
 The absence of reusable components can lead to failure of the project.
 The team leader must work closely with the developers and customers to close the
project in time.
 The systems which cannot be modularized suitably cannot use this model.
 Customer involvement is required throughout the life cycle.
 It is not meant for small scale projects as for such cases, the cost of using
automated tools and techniques may exceed the entire budget of the project.
Applications –
1. This model should be used for a system with known requirements and requiring
short development time.
2. It is also suitable for projects where requirements can be modularized and reusable
components are also available for development.
3. The model can also be used when already existing system components can be used
in developing a new system with minimum changes.
4. This model can only be used if the teams consist of domain experts. This is because
relevant knowledge and ability to use powerful techniques is a necessity.
5. The model should be chosen when the budget permits the use of automated tools
and techniques required.

Comparison of different life cycle models


Classical Waterfall Model: The Classical Waterfall model can be considered as the
basic model and all other life cycle models are based on this model. It is an ideal model.
However, the Classical Waterfall model cannot be used in practical project
development, since this model does not support any mechanism to correct the errors
that are committed during any of the phases but detected at a later phase. This problem
is overcome by the Iterative Waterfall model through the inclusion of feedback paths.

Iterative Waterfall Model: The Iterative Waterfall model is probably the most used
software development model. This model is simple to use and understand. But this
model is suitable only for well-understood problems and is not suitable for the
development of very large projects and projects that suffer from a large number of risks.

Prototyping Model: The Prototyping model is suitable for projects, which either the
customer requirements or the technical solutions are not well understood. This risks
must be identified before the project starts. This model is especially popular for the
development of the user interface part of the project.

Evolutionary Model: The Evolutionary model is suitable for large projects which can be
decomposed into a set of modules for incremental development and delivery. This
model is widely used in object-oriented development projects. This model is only used if
incremental delivery of the system is acceptable to the customer.

Spiral Model: The Spiral model is considered as a meta-model as it includes all other
life cycle models. Flexibility and risk handling are the main characteristics of this model.
The spiral model is suitable for the development of technically challenging and large
software that is prone to various risks that are difficult to anticipate at the start of the
project. But this model is very much complex than the other models.

Agile Model: The Agile model was designed to incorporate change requests quickly. In
this model, requirements are decomposed into small parts that can be incrementally
developed. But the main principle of the Agile model is to deliver an increment to the
customer after each Time-box. The end date of an iteration is fixed, it can’t be extended.
This agility is achieved by removing unnecessary activities that waste time and effort.

Selection of appropriate life cycle model for a project: Selection of proper lifecycle
model to complete a project is the most important task. It can be selected by keeping
the advantages and disadvantages of various models in mind. The different issues that
are analyzed before selecting a suitable life cycle model are given below :
 Characteristics of the software to be developed: The choice of the life cycle
model largely depends on the type of the software that is being developed. For small
services projects, the agile model is favored. On the other hand, for product and
embedded development, the Iterative Waterfall model can be preferred. The
evolutionary model is suitable to develop an object-oriented project. User interface
part of the project is mainly developed through prototyping model.
 Characteristics of the development team: Team member’s skill level is an
important factor to deciding the life cycle model to use. If the development team is
experienced in developing similar software, then even an embedded software can
be developed using the Iterative Waterfall model. If the development team is entirely
novice, then even a simple data processing application may require a prototyping
model.
 Risk associated with the project: If the risks are few and can be anticipated at the
start of the project, then prototyping model is useful. If the risks are difficult to
determine at the beginning of the project but are likely to increase as the
development proceeds, then the spiral model is the best model to use.
 Characteristics of the customer: If the customer is not quite familiar with
computers, then the requirements are likely to change frequently as it would be
difficult to form complete, consistent and unambiguous requirements. Thus, a
prototyping model may be necessary to reduce later change requests from the
customers. Initially, the customer’s confidence is high on the development team.
During the lengthy development process, customer confidence normally drops off as
no working software is yet visible. So, the evolutionary model is useful as the
customer can experience a partially working software much earlier than whole
complete software. Another advantage of the evolutionary model is that it reduces
the customer’s trauma of getting used to an entirely new system .

You might also like