Nothing Special   »   [go: up one dir, main page]

softwareengineering-bsc-module1

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 22

Software Engineering

The term software engineering is the product of two words, software, and engineering.

The software is a collection of integrated programs.

Software subsists of carefully-organized instructions and code written by developers on any of various
particular computer languages.

Computer programs and related documentation such as requirements, design models and user
manuals.

Engineering is the application of scientific and practical knowledge to invent, design, build,
maintain, and improve frameworks, processes, etc.

Software Engineering is an engineering branch related to the evolution of software product using
well-defined scientific principles, techniques, and procedures. The result of software engineering is an
effective and reliable software product.

Why is Software Engineering required?


Software Engineering is required due to the following reasons:

o To manage Large software


o For more Scalability
o Cost Management
o To manage the dynamic nature of software
o For better quality Management

Need of Software Engineering


The necessity of software engineering appears because of a higher rate of progress in user
requirements and the environment on which the program is working.

1
o Huge Programming: It is simpler to manufacture a wall than to a house or building,
similarly, as the measure of programming become extensive engineering has to step to give it
a scientific process.
o Adaptability: If the software procedure were not based on scientific and engineering ideas, it
would be simpler to re-create new software than to scale an existing one.
o Cost: As the hardware industry has demonstrated its skills and huge manufacturing has let
down the cost of computer and electronic hardware. But the cost of programming remains
high if the proper process is not adapted.
o Dynamic Nature: The continually growing and adapting nature of programming hugely
depends upon the environment in which the client works. If the quality of the software is
continually changing, new upgrades need to be done in the existing one.
o Quality Management: Better procedure of software development provides a better and
quality software product.

Characteristics of a good software engineer

The features that good software engineers should possess are as follows:

 Exposure to systematic methods, i.e., familiarity with software engineering principles.


 Good technical knowledge of the project range (Domain knowledge).
 Good programming abilities.
 Good communication skills. These skills comprise of oral, written, and interpersonal skills.
 High motivation.
 Sound knowledge of fundamentals of computer science.
 Intelligence.
 Ability to work in a team
 Discipline, etc.

Importance of Software Engineering

The importance of Software engineering is as follows:

1. Reduces complexity: Big software is always complicated and challenging to progress.


Software engineering has a great solution to reduce the complication of any project. Software
engineering divides big problems into various small issues. And then start solving each small
issue one by one. All these small problems are solved independently to each other.

2
2. To minimize software cost: Software needs a lot of hardwork and software engineers are
highly paid experts. A lot of manpower is required to develop software with a large number of
codes. But in software engineering, programmers project everything and decrease all those
things that are not needed. In turn, the cost for software productions becomes less as
compared to any software that does not use software engineering method.
3. To decrease time: Anything that is not made according to the project always wastes time.
And if you are making great software, then you may need to run many codes to get the
definitive running code. This is a very time-consuming procedure, and if it is not well
handled, then this can take a lot of time. So if you are making your software according to the
software engineering method, then it will decrease a lot of time.
4. Handling big projects: Big projects are not done in a couple of days, and they need lots of
patience, planning, and management. And to invest six and seven months of any company, it
requires heaps of planning, direction, testing, and maintenance. No one can say that he has
given four months of a company to the task, and the project is still in its first stage. Because
the company has provided many resources to the plan and it should be completed. So to
handle a big project without any problem, the company has to go for a software engineering
method.
5. Reliable software: Software should be secure, means if you have delivered the software, then
it should work for at least its given time or subscription. And if any bugs come in the
software, the company is responsible for solving all these bugs. Because in software
engineering, testing and maintenance are given, so there is no worry of its reliability.
6. Effectiveness: Effectiveness comes if anything has made according to the standards.
Software standards are the big target of companies to make it more effective. So Software
becomes more effective in the act with the help of software engineering.

What is software development?


Software development refers to a set of computer science activities dedicated to the process of
creating, designing, deploying and supporting software.

Software itself is the set of instructions or programs that tell a computer what to do. It is independent
of hardware and makes computers programmable.

There are three basic types:

System software to provide core functions such as operating systems, disk management, utilities,
hardware management and other operational necessities.

Programming software to give programmers tools such as text editors, compilers, linkers, debuggers
and other tools to create code.

Application software (applications or apps) to help users perform tasks. Office productivity suites,
data management software, media players and security programs are examples. Applications also
refers to web and mobile applications like those used to shop on Amazon.com, socialize with
Facebook or post pictures to Instagram.1

A possible fourth type is embedded software. Embedded systems software is used to control
machines and devices not typically considered computers — telecommunications networks, cars,
industrial robots and more. These devices, and their software, can be connected as part of the Internet
of Things (IoT).

3
Software development is primarily conducted by programmers, software engineers and software
developers. These roles interact and overlap, and the dynamics between them vary greatly across
development departments and communities.

Programmers, or coders, write source code to program computers for specific tasks like merging
databases, processing online orders, routing communications, conducting searches or displaying text
and graphics. Programmers typically interpret instructions from software developers and engineers
and use programming languages like C++ or Java to carry them out.

Software engineers apply engineering principles to build software and systems to solve problems.
They use modeling language and other tools to devise solutions that can often be applied to problems
in a general way, as opposed to merely solving for a specific instance or client. Software engineering
solutions adhere to the scientific method and must work in the real world, as with bridges or
elevators. Their responsibility has grown as products have become increasingly more intelligent with
the addition of microprocessors, sensors and software. Not only are more products relying on software
for market differentiation, but their software development must be coordinated with the product’s
mechanical and electrical development work.

Software developers have a less formal role than engineers and can be closely involved with specific
project areas — including writing code. At the same time, they drive the overall software
development lifecycle — including working across functional teams to transform requirements into
features, managing development teams and processes, and conducting software testing and
maintenance.3

The work of software development isn’t confined to coders or development teams. Professionals such
as scientists, device fabricators and hardware makers also create software code even though they are
not primarily software developers. Nor is it confined to traditional information technology industries
such as software or semiconductor businesses. In fact, according to the Brookings Institute (link
resides outside of ibm.com), those businesses “account for less than half of the companies performing
software development.”

An important distinction is custom software development as opposed to commercial software


development. Custom software development is the process of designing, creating, deploying and
maintaining software for a specific set of users, functions or organizations. In contrast, commercial
off-the-shelf software (COTS) is designed for a broad set of requirements, allowing it to be packaged
and commercially marketed and distributed.
Difference between Project and Product
1. Project:
Also known as a software project comprises the steps involved in making a product before it is
actually available to the market. The project can be handled by people which are as less as one
person to the involvement of a lot of people (over 100). These are usually assigned by an enterprise
and are undertaken to form a new product that has not already been made.
2. Product:
The study of products is a part of Software engineering. The software is built by developers on
requests from the customer. After the customer is satisfied with the development process, he
launches the software by manufacturing it. This can be a problem-solving software or computer
based system. This is the result of a project. The software project, when completed, is called a
product after it is available to the market for usage.

4
The product comes into existence after the project is complete.

Difference between Project and Product :


S.NO. Project Product

It comprises the steps involved in


making a software before it is
1. actually available to the market. It is the manufacture of the project for users.

2. The main goal of a project is to form The main goal of the product is to complete the
a new product that has not already work successfully (solve a specific problem).

5
S.NO. Project Product

been made.

Project is undertaken to form a new


3. software. Product is the final production of the project.

It focuses on increasing the A product focuses on the final result and the
performance of the software that is efficiency with which it can solve the given
4. being built. problem.

A project is done only once to get a A product can be made again and again for the
5. new software. purpose of distribution among users.

It is relatively less risky as the software has


It is more risky as here, a software is already been made and tested. The only risk in
6. being made for the first time. most cases would be of wear and tear.

7. It is handled by the project managers. It is handled by the product managers.

It exists after the completion of the software


8. It exists before the software is made. development phases.

It has some cost barriers as the It has no cost barrier as it is continued to be


enterprise sets a fixed budget for the developed only as long as the distributing
9. project. enterprise is profitable.

Project is based on Predictive The product is based on adaptive planning


10. planning (up-front). (iterative).

10 Types of Software Development


There are many different types of software development. Often, the various kinds of developers work
together to bring your project to fruition. Here are just 10 of the many kinds available. Some of them
overlap and can be found in a single professional, while others require a distinct skill set.

1. Frontend Development

Frontend developers work on the part of the product with which the user interacts. They are primarily
concerned with the user interface (UI). For example, they might create the layout, visual aspects, and
interactive elements of a website or app. However, their role isn’t identical to that of a UI or user
experience (UX) designer. They also fix bugs and make certain that the UI can run on different
browsers.

They must be highly proficient in programming and work closely with the backend developers to
ensure that the two aspects of the product function cohesively.

2. Backend Development

6
In contrast, a backend developer works with the part of the product users can’t see — the back end.
This professional builds the infrastructure that powers the website, app, or program, focusing on
functionality, integration of systems, and core logic. They will also deal with the complex, underlying
structure, ensuring strong performance, scalability, and security.

As we mentioned above, the frontend and backend developers work closely together to create a final
product.

3. Full-Stack Development
A full-stack developer works on all aspects of the product, including both the front and back ends. To
be a successful full-stack developer, you must have strong programming skills, as well as a variety of
soft skills that all tech professionals must have, such as problem-solving and critical thinking. At the
end of the day, you — and perhaps your team — are responsible for creating a full, complete product.

4. Desktop Development
Desktop developers exclusively create applications that run on a desktop operating system, such as
Windows, Mac, or Linux. This is opposed to developers that create applications that run on mobile,
tablet, or other devices.

This type of specialization was more ubiquitous in the early days of programming, back before the
days of mobile applications. However, they still have a place in today’s landscape.

5. Web Development
Web development is the process of building web applications. People use these apps through an
internet browser on a multitude of devices. This is different from a mobile app, which runs on a phone
or tablet and doesn’t necessarily require an internet connection to run.

Web development is an umbrella term encompassing both front and backend development.
Professionals can also be full-stack web developers.

6. Database Development

Not to be confused with a database administrator, who typically works with daily database upkeep
and troubleshooting and implements the system, a database developer is responsible for building the
database, modifying and designing existing or new programs, and ensuring that they satisfy the
requirements of the users. Sometimes, the roles of database administrator and developer do overlap —
this depends on the needs of the client or employer.

7. Mobile Development

As is probably obvious from the name, a mobile developer builds applications that run natively on
mobile devices, including smartphones, tablets, and some types of smartwatches. Usually, these
professionals will specialize in either iOS or Android development but not both.

It is possible to work with the two operating systems. However, many companies will work with
developers who are experts in just one. That’s because they tend to be more knowledgeable about the
intricacies of each type of development than those who dabble in both of them since the tools,
frameworks, and languages tend to be different.

7
8. Cloud Computing
Cloud computing encompasses services, programs, and applications that run over the cloud. That
means they can be accessed remotely from practically any location, provided the user has an internet
connection and an appropriate login. They offer plenty of advantages, including scalability.

Some developers specialize in cloud computing — that is, the creation of cloud platforms. They will
build cloud applications and facilitate cloud deployment and migration, as well as manage cloud
services and provide maintenance to users.

9. DevOps Engineering
DevOps is a set of practices and philosophies that are focused on the quick, efficient, and customer-
centric delivery of software. Related to Agile, this style has been widely adopted by software
developers and teams around the world.

DevOps engineers work with teams that practice the principles. They participate not only in the
development of the product at hand but also in quality assurance (QA) testing and eventual
deployment. They must possess a wide range of skills, such as programming, integration, scripting,
QA testing, and more. They also need to blend theory and practice to support and work with the rest
of the team, which may include software developers and QA professionals.

10. Security Engineering

Everyone knows how important security in software is in this day and age. Security software
professionals are dedicated to ensuring the security of various technological systems. They must have
extensive knowledge of the methodology, practices, tools, and patterns cybercriminals employ to hack
software so they can help prevent these attacks from taking place.

Ethical hackers are one example of this type of professional. They work with clients to
attempt hack software in order to pinpoint and expose vulnerabilities, allowing them to patch
them before they are exploited by cybercriminals.

This is by no means a comprehensive list of all the types of software development — the
field is wide and varied. However, these are still some of the most important types you should
understand when looking to hire developers and development teams to work on your next
project — and build a high-quality product.

Software Development Life Cycle (SDLC)


A software life cycle model (also termed process model) is a pictorial and diagrammatic
representation of the software life cycle. A life cycle model represents all the methods required to
make a software product transit through its life cycle stages. It also captures the structure in which
these methods are to be undertaken.

In other words, a life cycle model maps the various activities performed on a software product from
its inception to retirement. Different life cycle models may plan the necessary development activities
to phases in different ways. Thus, no element which life cycle model is followed, the essential
activities are contained in all life cycle models though the action may be carried out in distinct orders
in different life cycle models. During any life cycle stage, more than one activity may also be carried
out.

8
Need of SDLC
The development team must determine a suitable life cycle model for a particular plan and then
observe to it.

Without using an exact life cycle model, the development of a software product would not be in a
systematic and disciplined manner. When a team is developing a software product, there must be a
clear understanding among team representative about when and what to do. Otherwise, it would point
to chaos and project failure. This problem can be defined by using an example. Suppose a software
development issue is divided into various parts and the parts are assigned to the team members. From
then on, suppose the team representative is allowed the freedom to develop the roles assigned to them
in whatever way they like. It is possible that one representative might start writing the code for his
part, another might choose to prepare the test documents first, and some other engineer might begin
with the design phase of the roles assigned to him. This would be one of the perfect methods for
project failure.

A software life cycle model describes entry and exit criteria for each phase. A phase can begin only if
its stage-entry criteria have been fulfilled. So without a software life cycle model, the entry and exit
criteria for a stage cannot be recognized. Without software life cycle models, it becomes tough for
software project managers to monitor the progress of the project.

SDLC Cycle
SDLC Cycle represents the process of developing software. SDLC framework includes the following
steps:

The stages of SDLC are as follows:


Stage1: Planning and requirement analysis

Requirement Analysis is the most important and necessary stage in SDLC.

The senior members of the team perform it with inputs from all the stakeholders and domain experts
or SMEs in the industry.

9
Planning for the quality assurance requirements and identifications of the risks associated with the
projects is also done at this stage.

Business analyst and Project organizer set up a meeting with the client to gather all the data like what
the customer wants to build, who will be the end user, what is the objective of the product. Before
creating a product, a core understanding or knowledge of the product is very necessary.

For Example, A client wants to have an application which concerns money transactions. In this
method, the requirement has to be precise like what kind of operations will be done, how it will be
done, in which currency it will be done, etc.

Once the required function is done, an analysis is complete with auditing the feasibility of the growth
of a product. In case of any ambiguity, a signal is set up for further discussion.

Once the requirement is understood, the SRS (Software Requirement Specification) document is
created. The developers should thoroughly follow this document and also should be reviewed by the
customer for future reference.

Stage2: Defining Requirements

Once the requirement analysis is done, the next stage is to certainly represent and document the
software requirements and get them accepted from the project stakeholders.

This is accomplished through "SRS"- Software Requirement Specification document which contains
all the product requirements to be constructed and developed during the project life cycle.

Stage3: Designing the Software

The next phase is about to bring down all the knowledge of requirements, analysis, and design of the
software project. This phase is the product of the last two, like inputs from the customer and
requirement gathering.

Stage4: Developing the project

In this phase of SDLC, the actual development begins, and the programming is built. The
implementation of design begins concerning writing code. Developers have to follow the coding
guidelines described by their management and programming tools like compilers, interpreters,
debuggers, etc. are used to develop and implement the code.

Stage5: Testing

After the code is generated, it is tested against the requirements to make sure that the products are
solving the needs addressed and gathered during the requirements stage.

During this stage, unit testing, integration testing, system testing, acceptance testing are done.

Stage6: Deployment

Once the software is certified, and no bugs or errors are stated, then it is deployed.

Then based on the assessment, the software may be released as it is or with suggested enhancement in
the object segment.

10
After the software is deployed, then its maintenance begins.

Stage7: Maintenance

Once when the client starts using the developed systems, then the real issues come up and
requirements to be solved from time to time.

This procedure where the care is taken for the developed product is known as maintenance.

SDLC Models
Software Development life cycle (SDLC) is a spiritual model used in project management that defines
the stages include in an information system development project, from an initial feasibility study to
the maintenance of the completed application.

There are different software development life cycle models specify and design, which are followed
during the software development phase. These models are also called "Software Development
Process Models." Each process model follows a series of phase unique to its type to ensure success in
the step of software development.

Here, are some important phases of SDLC life cycle:

Waterfall Model

The Waterfall Model was the first Process Model to be introduced. It is also referred to as a linear-
sequential life cycle model. It is very simple to understand and use. In a waterfall model, each phase
must be completed before the next phase can begin and there is no overlapping in the phases.
The Waterfall model is the earliest SDLC approach that was used for software development.

11
The waterfall Model illustrates the software development process in a linear sequential flow. This
means that any phase in the development process begins only if the previous phase is complete. In this
waterfall model, the phases do not overlap.

Waterfall Model - Design

Waterfall approach was first SDLC Model to be used widely in Software Engineering to ensure
success of the project. In "The Waterfall" approach, the whole process of software development is
divided into separate phases. In this Waterfall model, typically, the outcome of one phase acts as the
input for the next phase sequentially.
The following illustration is a representation of the different phases of the Waterfall Model.

The sequential phases in Waterfall model are −


 Requirement Gathering and analysis − All possible requirements of the system to be
developed are captured in this phase and documented in a requirement specification
document.
 System Design − The requirement specifications from first phase are studied in this phase and
the system design is prepared. This system design helps in specifying hardware and system
requirements and helps in defining the overall system architecture.
 Implementation − With inputs from the system design, the system is first developed in small
programs called units, which are integrated in the next phase. Each unit is developed and
tested for its functionality, which is referred to as Unit Testing.
 Integration and Testing − All the units developed in the implementation phase are integrated
into a system after testing of each unit. Post integration the entire system is tested for any
faults and failures.
 Deployment of system − Once the functional and non-functional testing is done; the product
is deployed in the customer environment or released into the market.
 Maintenance − There are some issues which come up in the client environment. To fix those
issues, patches are released. Also to enhance the product some better versions are released.
Maintenance is done to deliver these changes in the customer environment.
All these phases are cascaded to each other in which progress is seen as flowing steadily downwards
(like a waterfall) through the phases. The next phase is started only after the defined set of goals are

12
achieved for previous phase and it is signed off, so the name "Waterfall Model". In this model, phases
do not overlap.

Waterfall Model - Application

Every software developed is different and requires a suitable SDLC approach to be followed based on
the internal and external factors. Some situations where the use of Waterfall model is most
appropriate are −
 Requirements are very well documented, clear and fixed.
 Product definition is stable.
 Technology is understood and is not dynamic.
 There are no ambiguous requirements.
 Ample resources with required expertise are available to support the product.
 The project is short.

Waterfall Model - Advantages

The advantages of waterfall development are that it allows for departmentalization and control. A
schedule can be set with deadlines for each stage of development and a product can proceed through
the development process model phases one by one.
Development moves from concept, through design, implementation, testing, installation,
troubleshooting, and ends up at operation and maintenance. Each phase of development proceeds in
strict order.
Some of the major advantages of the Waterfall Model are as follows −
 Simple and easy to understand and use
 Easy to manage due to the rigidity of the model. Each phase has specific deliverables and a
review process.
 Phases are processed and completed one at a time.
 Works well for smaller projects where requirements are very well understood.
 Clearly defined stages.
 Well understood milestones.
 Easy to arrange tasks.
 Process and results are well documented.

Waterfall Model - Disadvantages

The disadvantage of waterfall development is that it does not allow much reflection or revision. Once
an application is in the testing stage, it is very difficult to go back and change something that was not
well-documented or thought upon in the concept stage.
The major disadvantages of the Waterfall Model are as follows −
 No working software is produced until late during the life cycle.
 High amounts of risk and uncertainty.
 Not a good model for complex and object-oriented projects.
 Poor model for long and ongoing projects.
 Not suitable for the projects where requirements are at a moderate to high risk of changing.
So, risk and uncertainty is high with this process model.
 It is difficult to measure progress within stages.
 Cannot accommodate changing requirements.
 Adjusting scope during the life cycle can end a project.
 Integration is done as a "big-bang. at the very end, which doesn't allow identifying any
technological or business bottleneck or challenges early.

13
RAD Model
The RAD (Rapid Application Development) model is based on prototyping and iterative
development with no specific planning involved. The process of writing the software itself involves
the planning required for developing the product.
Rapid Application Development focuses on gathering customer requirements through workshops or
focus groups, early testing of the prototypes by the customer using iterative concept, reuse of the
existing prototypes (components), continuous integration and rapid delivery.

What is RAD?

Rapid application development is a software development methodology that uses minimal planning in
favour of rapid prototyping. A prototype is a working model that is functionally equivalent to a
component of the product.

In the RAD model, the functional modules are developed in parallel as prototypes and are integrated
to make the complete product for faster product delivery. Since there is no detailed preplanning, it
makes it easier to incorporate the changes within the development process.
RAD projects follow iterative and incremental model and have small teams comprising of developers,
domain experts, customer representatives and other IT resources working progressively on their
component or prototype.
The most important aspect for this model to be successful is to make sure that the prototypes
developed are reusable.

RAD Model Design

RAD model distributes the analysis, design, build and test phases into a series of short, iterative
development cycles.
Following are the various phases of the RAD Model −
Business Modelling
The business model for the product under development is designed in terms of flow of information
and the distribution of information between various business channels. A complete business analysis
is performed to find the vital information for business, how it can be obtained, how and when is the
information processed and what are the factors driving successful flow of information.
Data Modelling
The information gathered in the Business Modelling phase is reviewed and analyzed to form sets of
data objects vital for the business. The attributes of all data sets is identified and defined. The relation
between these data objects are established and defined in detail in relevance to the business model.
Process Modelling
The data object sets defined in the Data Modelling phase are converted to establish the business
information flow needed to achieve specific business objectives as per the business model. The
process model for any changes or enhancements to the data object sets is defined in this phase.
Process descriptions for adding, deleting, retrieving or modifying a data object are given.
Application Generation

14
The actual system is built and coding is done by using automation tools to convert process and data
models into actual prototypes.
Testing and Turnover
The overall testing time is reduced in the RAD model as the prototypes are independently tested
during every iteration. However, the data flow and the interfaces between all the components need to
be thoroughly tested with complete test coverage. Since most of the programming components have
already been tested, it reduces the risk of any major issues.

The following illustration describes the RAD Model in detail.

RAD Model Vs Traditional SDLC

The traditional SDLC follows a rigid process models with high emphasis on requirement analysis and
gathering before the coding starts. It puts pressure on the customer to sign off the requirements before
the project starts and the customer doesn’t get the feel of the product as there is no working build
available for a long time.
The customer may need some changes after he gets to see the software. However, the change process
is quite rigid and it may not be feasible to incorporate major changes in the product in the traditional
SDLC.
The RAD model focuses on iterative and incremental delivery of working models to the customer.
This results in rapid delivery to the customer and customer involvement during the complete
development cycle of product reducing the risk of non-conformance with the actual user
requirements.

RAD Model - Application

15
RAD model can be applied successfully to the projects in which clear modularization is possible. If
the project cannot be broken into modules, RAD may fail.
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.

RAD Model - Pros and Cons

RAD model enables rapid delivery as it reduces the overall development time due to the reusability of
the components and parallel development. RAD works well only if high skilled engineers are
available and the customer is also committed to achieve the targeted prototype in the given time
frame. If there is commitment lacking on either side the model may fail.
The advantages of the RAD Model are as follows −
 Changing requirements can be accommodated.
 Progress can be measured.
 Iteration time can be short with use of powerful RAD tools.
 Productivity with fewer people in a short time.
 Reduced development time.
 Increases reusability of components.
 Quick initial reviews occur.
 Encourages customer feedback.
 Integration from very beginning solves a lot of integration issues.
The disadvantages of the RAD Model are as follows −
 Dependency on technically strong team members for identifying business requirements.
 Only system that can be modularized can be built using RAD.
 Requires highly skilled developers/designers.
 High dependency on Modelling skills.
 Inapplicable to cheaper projects as cost of Modelling and automated code generation is very
high.
 Management complexity is more.
 Suitable for systems that are component based and scalable.
 Requires user involvement throughout the life cycle.
 Suitable for project requiring shorter development times.
Agile Model
Agile SDLC model is a combination of iterative and incremental process models with focus on
process adaptability and customer satisfaction by rapid delivery of working software product. Agile
Methods break the product into small incremental builds. These builds are provided in iterations. Each
iteration typically lasts from about one to three weeks. Every iteration involves cross functional teams
working simultaneously on various areas like −

 Planning
 Requirements Analysis

16
 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.
Here is a graphical illustration of the Agile Model −

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.

17
 Responding to change − Agile Development is focused on quick responses to change and
continuous development.

Agile Vs Traditional SDLC Models

Agile is based on the adaptive software development methods, whereas the traditional SDLC
models like the waterfall model is based on a predictive approach. Predictive teams in the traditional
SDLC models usually work with detailed planning and have a complete forecast of the exact tasks
and features to be delivered in the next few months or during the product life cycle.
Predictive methods entirely depend on the requirement analysis and planning done in the beginning
of cycle. Any changes to be incorporated go through a strict change control management and
prioritization.
Agile uses an adaptive approach where there is no detailed planning and there is clarity on future
tasks only in respect of what features need to be developed. There is feature driven development and
the team adapts to the changing product requirements dynamically. The product is tested very
frequently, through the release iterations, minimizing the risk of any major failures in future.
Customer Interaction is the backbone of this Agile methodology, and open communication with
minimum documentation are the typical features of Agile development environment. The agile teams
work in close collaboration with each other and are most often located in the same geographical
location.

Agile Model - Pros and Cons

Agile methods are being widely accepted in the software world recently. However, this method may
not always be suitable for all products. Here are some pros and cons of the Agile model.
The advantages of the Agile Model are as follows −
 Is a very realistic approach to software development.
 Promotes teamwork and cross training.
 Functionality can be developed rapidly and demonstrated.
 Resource requirements are minimum.
 Suitable for fixed or changing requirements
 Delivers early partial working solutions.
 Good model for environments that change steadily.
 Minimal rules, documentation easily employed.
 Enables concurrent development and delivery within an overall planned context.
 Little or no planning required.
 Easy to manage.
 Gives flexibility to developers.
The disadvantages of the Agile Model are as follows −
 Not suitable for handling complex dependencies.
 More risk of sustainability, maintainability and extensibility.
 An overall plan, an agile leader and agile PM practice is a must without which it will not
work.
 Strict delivery management dictates the scope, functionality to be delivered, and adjustments
to meet the deadlines.
 Depends heavily on customer interaction, so if customer is not clear, team can be driven in the
wrong direction.
 There is a very high individual dependency, since there is minimum documentation generated.
 Transfer of technology to new team members may be quite challenging due to lack of
documentation.

18
Spiral Model

The spiral model combines the idea of iterative development with the systematic, controlled aspects
of the waterfall model. This Spiral model is a combination of iterative development process model
and sequential linear development model i.e. the waterfall model with a very high emphasis on risk
analysis. It allows incremental releases of the product or incremental refinement through each
iteration around the spiral.

Spiral Model - Design

The spiral model has four phases. A software project repeatedly passes through these phases in
iterations called Spirals.
Identification
This phase starts with gathering the business requirements in the baseline spiral. In the subsequent
spirals as the product matures, identification of system requirements, subsystem requirements and unit
requirements are all done in this phase.
This phase also includes understanding the system requirements by continuous communication
between the customer and the system analyst. At the end of the spiral, the product is deployed in the
identified market.
Design
The Design phase starts with the conceptual design in the baseline spiral and involves architectural
design, logical design of modules, physical product design and the final design in the subsequent
spirals.
Construct or Build
The Construct phase refers to production of the actual software product at every spiral. In the baseline
spiral, when the product is just thought of and the design is being developed a POC (Proof of
Concept) is developed in this phase to get customer feedback.
Then in the subsequent spirals with higher clarity on requirements and design details a working model
of the software called build is produced with a version number. These builds are sent to the customer
for feedback.
Evaluation and Risk Analysis
Risk Analysis includes identifying, estimating and monitoring the technical feasibility and
management risks, such as schedule slippage and cost overrun. After testing the build, at the end of
first iteration, the customer evaluates the software and provides feedback.
The following illustration is a representation of the Spiral Model, listing the activities in each phase.

19
Based on the customer evaluation, the software development process enters the next iteration and
subsequently follows the linear approach to implement the feedback suggested by the customer. The
process of iterations along the spiral continues throughout the life of the software.

Spiral Model Application

The Spiral Model is widely used in the software industry as it is in sync with the natural development
process of any product, i.e. learning with maturity which involves minimum risk for the customer as
well as the development firms.
The following pointers explain the typical uses of a Spiral Model −
 When there is a budget constraint and risk evaluation is important.
 For medium to high-risk projects.
 Long-term project commitment because of potential changes to economic priorities as the
requirements change with time.
 Customer is not sure of their requirements which is usually the case.
 Requirements are complex and need evaluation to get clarity.
 New product line which should be released in phases to get enough customer feedback.
 Significant changes are expected in the product during the development cycle.

Spiral Model - Pros and Cons

The advantage of spiral lifecycle model is that it allows elements of the product to be added in, when
they become available or known. This assures that there is no conflict with previous requirements and
design.
This method is consistent with approaches that have multiple software builds and releases which
allows making an orderly transition to a maintenance activity. Another positive aspect of this method
is that the spiral model forces an early user involvement in the system development effort.

20
On the other side, it takes a very strict management to complete such products and there is a risk of
running the spiral in an indefinite loop. So, the discipline of change and the extent of taking change
requests is very important to develop and deploy the product successfully.
The advantages of the Spiral SDLC Model are as follows −
 Changing requirements can be accommodated.
 Allows extensive use of prototypes.
 Requirements can be captured more accurately.
 Users see the system early.
 Development can be divided into smaller parts and the risky parts can be developed earlier
which helps in better risk management.
The disadvantages of the Spiral SDLC Model are as follows −
 Management is more complex.
 End of the project may not be known early.
 Not suitable for small or low risk projects and could be expensive for small projects.
 Process is complex
 Spiral may go on indefinitely.
 Large number of intermediate stages requires excessive documentation.
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 more 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 analysed 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

21
agile model is favoured. 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.

22

You might also like