Download as pdf or txt
Download as pdf or txt
You are on page 1of 34

What is Software Engineering?

Software engineering is defined as a process of analyzing user requirements and then designing,
building, and testing software application which will satisfy those requirements.

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.

or

Software is more than just a program code. A program is an executable code, which serves some
computational purpose. Software is considered to be collection of executable programming code,
associated libraries and documentations. Software, when made for a specific requirement is
called software product.
Engineering on the other hand, is all about developing products, using well-defined, scientific
principles and methods.
Software engineering is an engineering branch associated with development of software product
using well-defined scientific principles, methods and procedures. The outcome of software
engineering is an efficient and reliable software product.

Definition:
IEEE, in its standard 610.12-1990, defines software engineering as the application of a systematic,
disciplined, which is a computable approach for the development, operation, and maintenance of
software.

Boehm defines software engineering, which involves, ‘the practical application of scientific
knowledge to the creative design and building of computer programs. It also includes associated
documentation needed for developing, operating, and maintaining them.
What was the Software Crisis?
 It was in the late 1960s when many software projects failed.
 Many software became over budget. Output was an unreliable software which is expensive
to maintain.
 Larger software was difficult and quite expensive to maintain.
 Lots of software not able to satisfy the growing requirements of the customer.
 Complexities of software projects increased whenever its hardware capability increased.
 Demand for new software increased faster compared with the ability to generate new
software.

The Solution

Solution was to the problem was transforming unorganized coding effort into a software
engineering discipline. These engineering models helped companies to streamline operations and
deliver software meeting customer requirements.

 The late 1970s saw the widespread uses of software engineering principles.
 In the 1980s saw the automation of software engineering process and growth of (CASE)
Computer-Aided Software Engineering.
 The 1990s have seen an increased emphasis on the ‘management’ aspects of projects
standard of quality and processes just like ISO 9001

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

Large software or Huge Programming: – In our real life, it is quite more comfortable to build a
wall than a house or building. In the same manner, as the size of the software becomes large,
software engineering helps you to build software.
Scalability- If the software process were not based on scientific and engineering concepts, it
would be easier to re-create new software than to scale an existing one.

Adaptability: Whenever the software process was based on scientific and engineering, it is easy
to re-create new software with the help of software engineering.
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.

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.

Quality Management: Better procedure of software development provides a better and quality
software product.

The importance of Software engineering is as follows:


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.

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.

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.

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.

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.

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.

Characteristics of good software


A software product can be judged by what it offers and how well it can be used. This software
must satisfy on the following grounds:

 Operational
 Transitional
 Maintenance
Here are some important characteristics of good software developed by software professionals

Operational
This characteristic let us know about how well software works in the operations which can be
measured on:
Budget, Efficiency, Usability, Dependability, Correctness, Functionality, Safety
Security.

Transitional
This is an essential aspect when the software is moved from one platform to another:

 Interoperability
 Reusability
 Portability
 Adaptability

Maintenance

This aspect talks about how well software has the capabilities to adapt itself in the quickly
changing environment:

 Flexibility
 Maintainability
 Modularity
 Scalability

Software Evolution:

The process of developing a software product using software engineering principles and methods
is referred to as software evolution. This includes the initial development of software and its
maintenance and updates, till desired software product is developed, which satisfies the expected
requirements.

Evolution starts from the requirement gathering process. After which developers create a prototype
of the intended software and show it to the users to get their feedback at the early stage of software
product development. The users suggest changes, on which several consecutive updates and
maintenance keep on changing too. This process changes to the original software, till the desired
software is accomplished.
Even after the user has desired software in hand, the advancing technology and the changing
requirements force the software product to change accordingly. Re-creating software from scratch
and to go one-on-one with requirement is not feasible. The only feasible and economical solution
is to update the existing software so that it matches the latest requirements.

Software Evolution Laws

Lehman has given laws for software evolution. He divided the software into three different
categories:
 S-type (static-type) - This is a software, which works strictly according to
defined specifications and solutions. The solution and the method to achieve it, both are
immediately understood before coding. The s-type software is least subjected to changes
hence this is the simplest of all. For example, calculator program for mathematical
computation.
 P-type (practical-type) - This is a software with a collection of procedures. This is defined
by exactly what procedures can do. In this software, the specifications can be described but
the solution is not obvious instantly. For example, gaming software.
 E-type (embedded-type) - This software works closely as the requirement of real-
world environment. This software has a high degree of evolution as there are various
changes in laws, taxes etc. in the real world situations. For example, Online trading
software.

THE EVOLVING ROLE OF SOFTWARE


Today, software takes on a dual role. It is a product and, at the same time, the vehicle for delivering
a product. As a product, it delivers the computing potential embodied by computer hardware or,
more broadly, a network of computers that are accessible by local hardware. Whether it resides
within a cellular phone or operates inside a mainframe computer, software is an information
transformer—producing, managing, acquiring, modifying, displaying, or transmitting information
that can be as simple as a single bit or as complex as a multimedia presentation.

As the vehicle used to deliver the product, software acts as the basis for the control of the computer
(operating systems), the communication of information (networks), and the creation and control
of other programs (software tools and environments). Software delivers the most important
product of our time—information.

Software transforms personal data (e.g., an individual’s financial transactions) so that the data can
be more useful in a local context; it manages business information to enhance competitiveness; it
provides a gateway to worldwide information networks (e.g., Internet) and provides the means for
acquiring information in all of its forms. The role of computer software has undergone significant
change over a time span of little more than 50 years. Dramatic improvements in hardware
performance, profound changes in computing architectures, vast increases in memory and storage
capacity, and a wide variety of exotic input and output options have all precipitated more
sophisticated and complex computer-based systems. The lone programmer of an earlier era has
been replaced by a team of software specialists, each focusing on one part of the technology
required to deliver a complex application.

Changing Nature of Software:


There are seven broad categories of computer software having different forms, uses and challenges
to software engineers.

1. System software: It is a collection of programs written to service other programs. Some system
software are compilers, editors, file management utilities. They process complex but determinate
information structure. Other system applications can be operating system components, drivers,
networking software. They process largely indeterminate data. In either case the system software
area is characterized by heavy interaction with computer hardware, heavy usage by multiple users,
concurrent operation that requires scheduling, resource sharing, and sophisticated process
management, complex data structure, and multiple external interfaces.
2. Application software: It is a program or group of programs designed for end-users. These
software are used to monitor, control and analyze real world events as they occur. An example
may be software required for weather forecasting. Such software will gather and process the status
of temperature, humidity and other environmental parameters to forcast the weather.
Ex: Email apps, c, and java.

3. Engineering and Scientific Software: This software is used to facilitate the engineering
function and task. This type of software used in number crunching algorithms applications.
However modern application within the engineering and scientific area are moving away from the
conventional numerical algorithms. Computer-aided design, system simulation, and other
interactive applications have begun to take a real-time and even system software characteristic.
4. Embedded software: This type of software is placed in “Read-Only- Memory (ROM)”of the
product and control the various functions of the product. The product could be an aircraft,
automobile, security system, signalling system, control unit of power plants, etc. the embedded
software handles hardware components and is also termed as intelligent software.

5. Web based software: It is a communications between computer client-server programs. In


which client runs in a web browser. The software related to web applications come under this
Category. Examples are online actions, web mails, CGI, HTML, Java, Perl, DHTML etc.
6. Artificial intelligence software: It is having machine learning techniques which includes
algorithms that are developed to tell a computer how to respond to something by example.
Artificial Intelligence software makes use of non numerical algorithms to solve complex problems
that are not amenable to computation or straight forward analysis. Examples are expert systems,
artificial neural network, signal processing software etc.

7. Product line software: These are designed to provide a specific capability for use by many
different customers. They focus on a limited and esoteric market place. These software addresses
mass consumer markets. Ex: DBMS, Computer graphics.
Software Myths:

Software myths are the beliefs that people consider are true but are not, regarding software and
its development process. The software myths have been carried over several years and are now
identified by software engineering professionals.

The managers and software practitioners are habitual to these myths. However, the old habits are
difficult to modify.

Different Types of Software Myths:


1) Management Myths
2) Customer Myths
3) Practitioner’s or Developer Myth

1. Management Myths
The manager who is responsible for developing software is often under pressure regarding many
attributes of the software such as:

 The budget of the software.


 Delivering the software within the time limit.
 Enhance the quality of the software.
 Providing customer care services, etc.

Under such pressure, even the software manager develops belief in a software myth that lessens.
These software myths grasped by the software manager lessen his pressure up to a certain level
but this is temporary.
Let us discuss some myths perceived by the software manager:

Myth 1:

The software building team has a book that explains all standards and procedures that are
required for developing software.

The manager has a myth that the book provides everything to the team required for the software
development.

Reality 1
Though there exists a book that has all the standards and procedures required to develop
software. But are the developers aware of its existence? Do they ever refer to such books? Is the
book complete?

Can it be referred to? Does the book help the developers to stick to the time-to-deliver even
maintain the quality of the software?

Most of the time answer to such questions is no.

Myth 2

If more programmers are added to the software development team we can stick to the schedule.

Reality 2

Developing is software is totally different from manufacturing a product. It is not a mechanistic


process. In fact, adding up more people in the team would rather delay the delivery of the
software.

This is because when new members are introduced to the team, the members already working on
the software will have to explain the work done till now. This will even reduce the time from the
time that has to spend on the development of the software.

Although more members can be added to the team in a planned and co-ordinate manner.

Myth 3

Outsourcing the software project to a third party will let the manager relax. The third-party will
be solely responsible for the development of the software.

Reality 3

If the company has outsourced the software project to a third party, it means the company is not
aware of the details of the software project. It doesn’t know how to manage and control the
software project.

2. Customer Myths

The customer is one who requests software either from a software engineer, a technical group, or
the marketing sales department. The customer always requests the software under a contract.

The customer has some myths regarding the development of software. Hence customer develops
false expectations which lead to dissatisfaction with the developer. Let us discuss some myths
developed by the customer.
Myth 1

Customers believe that giving a general statement would let the software developer start writing
the program. The rest of the details can be filled in later.

Reality 1

Although it is not possible for a customer to provide a comprehensive and stable statement. And
an ambiguous statement will lead to disaster. The unambiguous statement comes with an
iterative communication between the customer and the developer.

Myth 2

Customers can ask for the changes in software as many times as desired as software is flexible.

Reality 2

Well, the customer can ask for the changes in the software. But the impact of the changes varies
from the time it has been introduced. If the customer asks for the changes early during the
development of the software the cost impact is less.

However, over time impact of changes grows gradually may it be in terms of cost or duration, or
the quality of the software.

3. Practitioner’s Software Myth

Software practitioners are the ones who are involved in the development and maintenance of the
software. Earlier developing software is considered as an art. So, the software practitioners have
developed some myths regarding the software.

Myth 1

Once you write the code and develop the software your job is done.

Reality

Practically 60% – 80% of the efforts are expended on the software when the software is
delivered to the customer for the first time.

When the software is delivered to the customer for the first time. When a customer starts using
the software they figure out the improvements that can be made to enhance the quality of the
software.
Myth 3

A successful project is one where the delivered software is working

Reality

Although the working software is the essential part of software configuration there are many
other elements that count in a success of a software project. Such as models of the software, its
documents, and plans.

These are the elements that are essential in the foundation of a successful engineering product.

Myth 4

Practicing software engineering while developing software will tend you to create voluminous
documentation and this will eventually slow down the process of software development.

Reality

Practicing software engineering will never tend you to create huge documentation instead it
focuses on the quality of the developed software. A better-quality software reduces the number
of iterations and thus faster the delivery time.

Legacy Software:
Legacy Software are defined as those that rely on older or obsolete technology. This includes not
only outdated computer hardware but also programming languages and software applications that
can no longer support an organization’s technology needs. The criteria given below serve as a
checklist for determining what a legacy system is.
 A system unable to support an organization’s software needs
 The requirement of personnel with archaic technology skill sets
 Excessive costs associated with maintenance
 Substantially decreased system performance
 Cost-prohibitive to upgrade
 Inability to handle the required number of users simultaneously.
 Older software supported with feature updates but no security patches
 A platform incompatible with new systems and drivers
 Software that’s non-compliant with recent standards
 Software that requires new updates to be functional.

Examples of Legacy Software


Microsoft Windows 7: Windows 7 officially became a legacy operating system in January 2020
after Microsoft halted security updates and support for it. However, over 100 million machines
continue to run this operating system.

COBOL: Common Business-Oriented Language or COBOL is still used 55 years after its
development. Forty-eight percent of businesses and government organizations reportedly depend
on this language more than others.

Discontinued Oracle products: Oracle database software such as E-Business Suite and People
soft.

Problems caused by legacy systems:

A legacy system can cause a my riad of problems, such as exorbitant maintenance costs, data silos
that prevent integration between systems, lack of compliance to governmental regulations, and
reduced security. These issues eventually outweigh the convenience of continuing to use an
existing legacy system.

1. Maintenance is costly (and futile)


Maintenance is to expected with any system, but the cost of maintaining a legacy system is
extensive. Maintenance keeps the legacy system running, but at the same time, the company is
throwing good money after bad. The status quo is maintained, but there’s never a chance for
growth with the legacy system.

At some point, there won’t be any more support for a legacy system and there won’t be any more
updates. If the system fails, there’s nowhere to turn.

Think of a weak dam with holes that you keep plugging and plugging, yet water keeps seeping
through. A legacy system continues to cost a company money for maintenance while never
providing new and innovative services.

2. Data is stuck in silos


Data silos are a by-product of legacy systems. Many older systems were never designed to
integrate with each other in the first place, and many legacy software solutions are built on
frameworks that can’t integrate with newer systems. This means that each legacy system is its own
data silo.

In addition to soloing the data they contain, legacy systems keep the departments that use them
out of data integration happening in the rest of the organization. If one team maintains a legacy
system while the rest of the company upgrades, that one team is isolated from business intelligence
and insights being created in integrated systems.

3. Compliance is much harder


Organizations today must abide by strict sets of compliance regulations. As these regulations
continue to evolve, a legacy system may not be equipped to meet them.

Compliance regulations like the GDPR, for example, require a company to know (and prove) what
customer data they have, where it is, and who is accessing it. Companies with customer data need
to maintain well-governed records, which is much harder (if not impossible) in outdated, siloed
systems.

4. Security gets weaker by the day


A data breach can cost a company dearly, and legacy systems are more vulnerable to hackers than
newer systems. Legacy systems by definition have outdated data security measures, such as hard-
coded passwords. That wasn’t a problem when the system was built, but it is now.

A legacy system not only leaves a company behind with old technology, it can also seriously
damage a company’s reputation by putting data at risk of a breach. At some point, a vendor no
longer supports the legacy system or provides much needed updates, opening the legacy system
up to a security risk. Even if a critical update is available, installing it can be risky and is postponed
for fear of breaking the system. As technology advances, risks increase for legacy systems.

5. New systems don’t integrate


As a company matures, adding new systems is necessary to stay competitive in today’s world. But
the older technology of a legacy system may not be able to interact with a new system. A
department still using a legacy system won’t receive all the benefits that a new system offers.

Developing processes to make the systems work together is cumbersome and still leaves the
company open to security risks. This causes an inability for technological growth within a
company.

A Generic view of process:


Software process: It is set of activities associated results are used to develop a software.
The process of a software development has three Generic views which are:

1. Definition Phase - It is the base of Definition phase. The experts get the knowledge about

"What".

 Information needed for processing.


 Which functions are required.
 Expectations about the capacity.
 Interface which is established.
 Area of the validation
This phase defines all the expectations depending on the standard of the software Engineering. It
contains three steps.

 Analysis of system
 Planning of project
 Requirement Analysis

2. Development phase - Focus point of development phase is "How". After the explanation of
"What" it turn to "How". Various type of question raised in developer mind that how to design the
data structure and Architecture of software, Procedural detail how to implemented and how design
convert in a programming language and testing of software how to perform. Three special steps
always taken in this phase which are

 Design of software
 Coding
 testing of software system

3. Maintenance phase - The main focus of maintenance phase is change which cause is correction
of errors, adaption of new idea, According to the needs of software after change in customer mood.

Layered Technology in Software Engineering:


Software engineering is a fully layered technology, to develop software we need to go from one
layer to another. All the layers are connected and each layer demands the fulfillment of the
previous layer.

Layered technology is divided into four parts:


1. A quality focus: It defines the continuous process improvement principles of software. It
provides integrity that means providing security to the software so that data can be accessed by
only an authorized person, no outsider can access the data. It also focuses on maintainability and
usability.

2. Process: It is the foundation or base layer of software engineering. It is key that binds all the
layers together which enables the development of software before the deadline or on time. Process
defines a framework that must be established for the effective delivery of software engineering
technology. The software process covers all the activities, actions, and tasks required to be carried
out for software development.

3. Method: During the process of software development the answers to all “how-to-do” questions
are given by method. It has the information of all the tasks which includes communication,
requirement analysis, design modeling, program construction, testing, and support.

4. Tools: Software engineering tools provide a self-operating system for processes and methods.
Tools are integrated which means information created by one tool can be used by another.

Software Process Framework


Framework is a Standard way to build and deploy applications. Software
Process Framework is a foundation of complete software engineering process.

Software process framework includes all set of umbrella activities. It also includes number of
framework activities that are applicable to all software projects.
Software process includes:

 Tasks – focus on a small, specific objective.


 Action – set of tasks that produce a major work product.
 Activities – group of related tasks and actions for a major objective.

Process Framework Activities:


The process framework is required for representing common process activities. Five framework
activities are described in a process framework for software engineering. Communication,
planning, modeling, construction, and deployment are all examples of framework activities. Each
engineering action defined by a framework activity comprises a list of needed work outputs,
project milestones, and software quality assurance (SQA) points.

1. Communication: By communication, customer requirement gathering is done. Communication


with consumers and stakeholders to determine the system’s objectives and the software’s
requirements.

2. Planning: Establish engineering work plan, describes technical risk, lists resources
requirements, work produced and defines work schedule.

3. Modeling: Architectural models and design to better understand the problem and for work
towards the best solution. The software model is prepared by:

 Analysis of requirements
 Design
4. Construction: Creating code, testing the system, fixing bugs, and confirming that all criteria
are met. The software design is mapped into a code by:

 Code generation
 Testing

5. Deployment: In this activity, a complete or non-complete product or software is represented to


the customers to evaluate and give feedback. On the basis of their feedback, we modify the product
for the supply of better products.

Umbrella activities:

Umbrella Activities are that take place during a software development process for improved
project management and tracking.

1. Software project tracking and control: This is an activity in which the team can assess
progress and take corrective action to maintain the schedule. Take action to keep the project on
time by comparing the project’s progress against the plan.

2. Risk management: The risks that may affect project outcomes or quality can be analyzed.
Analyze potential risks that may have an impact on the software product’s quality and outcome.
3. Software quality assurance: These are activities required to maintain software quality. Perform
actions to ensure the product’s quality.

4. Formal technical reviews: It is required to assess engineering work products to uncover and
remove errors before they propagate to the next activity. At each level of the process, errors are
evaluated and fixed.

5. Software configuration management: Managing of configuration process when any change


in the software occurs.
6. Work product preparation and production: The activities to create models, documents, logs,
forms, and lists are carried out.

7. Reusability management: It defines criteria for work product reuse. Reusable work items
should be backed up, and reusable software components should be achieved.

8. Measurement: In this activity, the process can be defined and collected. Also, project and
product measures are used to assist the software team in delivering the required software.

Capability Maturity Model Integration (CMMI):


 CMM is a method to evaluate and measure the maturity of the software development
process of an organization.
 CMM measures the maturity of the software development process on a scale of 1 to 5.
 Focuses on elements of essential practices and processes from various bodies of
knowledge.
 Describes common sense, efficient, proven ways of doing business (which you should
already be doing) − not a radical new approach.

 It is a software process
CMMI Model – Maturity Levels :
There are five maturity levels described as follows:

Maturity level 1: Initial


 Processes are poorly managed or controlled.
 Unpredictable outcomes of processes involved.
 ad hoc and chaotic approach used.
 No KPAs (Key Process Areas) defined.
 Lowest quality and highest risk
Maturity level 2: Repeatability
 In this mainly focus on establishing the basic project management policies.
 Using experience of the previous project the current project will be developed
 What are mistakes done and hoe to avoid will be analyzed.
 What are the methods that gave success that time will be analyzed
Activities:
 Project planning
 Configuration management
 SQA
Maturity level 3: Defined
 Processes are well characterized and described using standards, proper procedures, and
methods, tools, etc.
 Medium quality and medium risk involved.
 Focus is process standardization.
Activities:
 Peer Reviews
 Intergroup communication
 Tanning programs
Maturity level 4: Managed
 Requirements are managed.
 Processes are planned and controlled.
 Projects are managed and implemented according to their documented plans.
 This risk involved is lower than Initial level, but still exists.
 Quality is better than Initial level.
Activities:
 Software quality management
 Quantitative management
Maturity level 5 : Optimizing
 Continuous improvement in processes and their performance.
 Improvement has to be both incremental and innovative.
 Highest quality of processes.
 Lowest risk in processes and their performance

Process models:

A process model describes how each step in SDLC (software development life cycle) work and
what are the process required for each step in SDLC.
Software Development life Cycle:

Software Development Life Cycle (SDLC) is a process used by the software industry to design,
develop and test high quality softwares. The SDLC aims to produce a high-quality software that
meets or exceeds customer expectations, reaches completion within times and cost estimates.

 SDLC is the acronym of Software Development Life Cycle.


 It is also called as Software Development Process.
 SDLC is a framework defining tasks performed at each step in the software development
process.
 ISO/IEC 12207 is an international standard for software life-cycle processes. It aims to be
the standard that defines all the tasks required for developing and maintaining software.

Why is the SDLC important?

 It provides a standardized framework that defines activities and deliverables


 It aids in project planning, estimating, and scheduling
 It makes project tracking and control easier
 It increases visibility on all aspects of the life cycle to all stakeholders involved in the
development process
 It increases the speed of development
 It improves client relations
 It decreases project risks
 It decreases project management expenses and the overall cost of productio

The following figure is a graphical representation of the various stages of a typical SDLC.
A typical Software Development Life Cycle consists of the following phases –

1. Requirement Phase: During this phase, all the relevant information is collected from the
customer to develop a product as per their expectation. Any ambiguities must be resolved in this
phase only.Business analyst and Project Manager set up a meeting with the customer to gather all
the information like what the customer wants to build, who will be the end-user, what is the
purpose of the product. Before building a product a core understanding or knowledge of the
product is very important.

For Example, A customer wants to have an application which involves money transactions. In this
case, the requirement has to be clear like what kind of transactions will be done, how it will be
done, in which currency it will be done, etc.

2. Analysis Phase : Once the requirement gathering is done, an analysis is done to check the
feasibility of the development of a product. In case of any ambiguity, a call is set up for further
discussion.

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

3. Design Phase: Based on the requirement we make a design showing how the flow of process
should happen.

High level design: Gives the architecture of the software products.


Low level design: Describes how each and every feature in the software product should work.

4. Implementation or Coding Phase: Implementation/Coding starts once the developer gets the
Design document. The Software design is translated into source code. All the components of the
software are implemented in this phase.

5. Testing Phase: Testing starts once the coding is complete and the modules are released for
testing. In this phase, the developed software is tested thoroughly and any defects found are
assigned to developers to get them fixed.

Retesting, regression testing is done until the point at which the software is as per the customer’s
expectation. Testers refer SRS document to make sure that the software is as per the customer’s
standard.
6. Deployment and Maintenance: 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. After the software is deployed, then its maintenance
begins.
Once when the client starts using the developed systems, then the real issues come up and
requirements to be solved from time to time.

Process Models:
1) Waterfall Model:
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 and Maintenance − Once the functional and non-functional testing
is done; the product is deployed in the customer environment or released into the
market.There are some issues which come up in the client environment. To fix those issues,
patches are released. Also to enhance the product some better versions are released.
Maintenance is done to deliver these changes in the customer environment.

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 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

 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.

Disadvantages

 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.

Incremental Model:
Incremental Model is a process of software development where requirements are broken down
into multiple standalone modules of software development cycle. Incremental development is done
in steps from analysis design, implementation, testing/verification, maintenance.

Each iteration passes through the requirements, design, coding and testing phases. And each
subsequent release of the system adds function to the previous release until all designed
functionality has been implemented. The system is put into production when the first increment is
delivered. The first increment is often a core product where the basic requirements are addressed,
and supplementary features are added in the next increments. Once the core product is analyzed
by the client, there is plan development for the next increment.

Characteristics of an Incremental module includes

 System development is broken down into many mini development projects


 Partial systems are successively built to produce a final total system
 Highest priority requirement is tackled first
 Once the requirement is developed, requirement for that increment are frozen
When to use Incremental models?

 Requirements of the system are clearly understood


 When demand for an early release of a product arises
 When software engineering team are not very well skilled or trained
 When high-risk features and goals are involved
 Such methodology is more in use for web application and product based companies

Advantages:

 The software will be generated quickly during the software life cycle
 It is flexible and less expensive to change requirements and scope
 Throughout the development stages changes can be done
 This model is less costly compared to others
 A customer can respond to each building
 Errors are easy to be identified

Disadvantages

 It requires a good planning designing


 Problems might cause due to system architecture as such not all requirements collected
up front for the entire software lifecycle
 Each iteration phase is rigid and does not overlap each other
 Rectifying a problem in one unit requires correction in all the units and consumes a lot of
time

RAD Model:

As the name suggest, RAD is the Rapid Application Development Model. This model is used for
projects which has to be done in a fast pace and can be modularised.

The main advantage is that it is a very high speed waterfall model and hence the time is relatively
short.

The main disadvantage is that since tha project is done in parallel between teams, if one team lacks
technical skills, the project will be a flop.

The requirement analysis is done first and then the project is divided into modules. The design,
implementation and testing are done for each module by different teams. Then the output from
each module are integrated in the deployment stage.
Advantages:

 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.

Disadvantages:

 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.

Applications:

1. This model should be used for a system with known requirements and requiring a 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 the ability to use powerful techniques are a necessity.
5. The model should be chosen when the budget permits the use of automated tools and
techniques required.

Evolutionary Model:
Evolutionary model is also referred to as the successive versions model and sometimes as the
incremental model. In Evolutionary model, the software requirement is first broken down into
several modules (or functional units) that can be incrementally constructed and delivered. The
development first develops the core modules of the system. The core modules are those that do
not need services from the other modules. The initial product skeleton is refined into increasing
levels of capability by adding new functionalities in successive versions.

Evolutionary Development of a Software Product

The evolutionary model is shown in above Figure each successive version/model of the product
is a fully functioning software capable of performing more work than the previous
versions/model.

The evolutionary model is normally useful for very large products, where it is easier to find
modules for incremental implementation.

Evolutionary Model of Software Development


Often, evolutionary model is used when the customer prefers to receive the product in increments
so that he can start using the different features as and when they are developed rather than waiting
all the time for the full product to be developed and delivered.

Where the Evolutionary model is useful


Evolutionary model is useful in many cases. Two most important cases are mentioned below;

1. It is very useful in a large project where you can easily find a module for step by step
implementation. The evolutionary model is used when the users need to start using the
many features instead of waiting for the complete software.
2. The evolutionary model is also very useful in object-oriented software development
because all the development is divided into different units.

Advantages

 Large project: Evolutionary model is normally useful for very large products.

 User gets a chance to experiment with a partially developed software much before the
complete version of the system is released.

 Evolutionary model helps to accurately elicit user requirements during the delivery of
different versions of the software.

 The core modules get tested thoroughly, thereby reducing the chances of errors in the
core modules of the final products.

 Evolutionary model avoids the need to commit large resources in one go for
development of the system.

Disadvantages

Difficult to divide the problem into several versions that would be acceptable to the customer and
which can be incrementally implemented and delivered.

Iterative Model:

In the Iterative model, iterative process starts with a simple implementation of a small set of the
software requirements and iteratively enhances the evolving versions until the complete system is
implemented and ready to be deployed.

Prototype Model:

The prototype model requires that before carrying out the development of actual software, a
working prototype of the system should be built. A prototype is a toy implementation of the
system. A prototype usually turns out to be a very crude version of the actual system, possible
exhibiting limited functional capabilities, low reliability, and inefficient performance as compared
to actual software. In many instances, the client only has a general view of what is expected from
the software product. In such a scenario where there is an absence of detailed information
regarding the input to the system, the processing needs, and the output requirement, the prototyping
model may be employed.

Steps of Prototype Model

1. Requirement Gathering and Analyst


2. Quick Decision
3. Build a Prototype
4. Assessment or User Evaluation
5. Prototype Refinement
6. Engineer Product
Advantage of Prototype Model

1. Reduce the risk of incorrect user requirement


2. Good where requirement are changing/uncommitted
3. Regular visible process aids management
4. Support early product marketing
5. Reduce Maintenance cost.
6. Errors can be detected much earlier as the system is made side by side.

Disadvantage of Prototype Model

1. An unstable/badly implemented prototype often becomes the final product.


2. Require extensive customer collaboration
o Costs customer money
o Needs committed customer
o Difficult to finish if customer withdraw
o May be too customer specific, no broad market
3. Difficult to know how long the project will last.
4. Easy to fall back into the code and fix without proper requirement analysis, design,
customer evaluation, and feedback.
5. Prototyping tools are expensive.
6. Special tools & techniques are required to build a prototype.
7. It is a time-consuming process.

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 the 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.
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.

Unified Process:

Unified process (UP) is an architecture centric, use case driven, iterative and incremental
development process. UP is also referred to as the unified software development process. The
Unified Process is an attempt to draw on the best features and characteristics of traditional software
process models, but characterize them in a way that implements many of the best principles of
agile software development. The Unified Process recognizes the importance of customer
communication and streamlined methods for describing the customer’s view of a system. It
emphasizes the important role of software architecture and “helps the architect focus on the right
goals, such as understand ability, reliance to future changes, and reuse”.

The unified process occurs over four phases which include, Inception, Elaboration,
Construction, and Transition. Each of these phases consists of several iterations.
Unified Process Phases

 Inception Phase: Communication with the customer is made, and all the features are
identified and plan for the development process.
 Elaboration Phase: Identified features are modeled.
 Construction Phase: The is constructed and developed.
 Transition Phase: The software is deployed on the client-side.

The output of each Phase

 Inception Phase: The initial use case model includes the features, the business case, risk
list, project plan, prototype, etc.
 Elaboration Phase: Analysis model. Preliminary model, manual use case model, etc.
 Construction Phase: The software is developed, the test plan made, the user manual, and
the installation manual are written.
 Transition Phase: Software increment, the beta test report, and the user feedback.

Advantages of Unified Process

1. This is a complete methodology in itself with an emphasis on accurate documentation


2. It is proactively able to resolve the project risks associated with the client's evolving
requirements requiring careful change request management
3. Less time is required for integration as the process of integration goes on throughout the
software development life cycle.
4. The development time required is less due to reuse of components.
5. There is online training and tutorial available for this process.

Disadvantages of Unified Process

1. The team members need to be expert in their field to develop a software under this
methodology.
2. The development process is too complex and disorganized.
3. On cutting edge projects which utilise new technology, the reuse of components will not
be possible. Hence the time saving one could have made will be impossible to fulfill.
4. Integration throughout the process of software development, in theory sounds a good
thing. But on particularly big projects with multiple development streams it will only add
to the confusion and cause more issues during the stages of testing

You might also like