📗
Software Engineering
What is Software Engineering?
Software is a program or set of programs containing instructions that provide
desired functionality.
Engineering is the process of designing and building something that serves a
particular purpose and finds a cost-effective solution to problems.
Software Engineering is systematic, disciplined, cost-effective technique for
software development that aims to create high-quality, reliable, and maintainable
software.
Characteristics of Software Engineering
Functionality
Refers to the set of features and capabilities that a software program or
system provides to its users.
Software Engineering 1
It is one of the most important characteristics of software, as it
determines the usefulness of the software for the intended purpose
Efficiency
Refers to its ability to use resources such as memory, processing power,
and network bandwidth in an optimal way
High efficiency means that a software program can perform its intended
functions quickly and with minimal use of resources
Examples of factors that can affect the efficiency of software include:
1. Poorly designed algorithms and data structures
2. Inefficient use of memory and processing power
Reliability
Refers to its ability to perform its intended functions correctly and
consistently over time.
Reliability is an important aspect of software quality, as it helps ensure
that the software will work correctly and not fail unexpectedly
Factors that can affect Reliability:
Bugs and errors in the code
Lack of testing and validation
To improve the reliability of software, various techniques and
methodologies can be used, such as testing and validation, formal
verification, and fault tolerance.
Usability
It refers to the extent to which the software can be used with ease. the
amount of effort or time required to learn how to use the software.
Maintainability
It refers to the ease with which the modifications can be made in a
software system to extend its functionality, improve its performance, or
correct errors.
Portability
A set of attributes that bears on the ability of software to be transferred
from one environment to another, without or minimum changes.
Software Engineering 2
Software Processes
A software process is the set of activities to develop a software system. Software
engineers mostly carry out these activities.
These are four key process activities:
1. Software specifications:
Defining what the system should do (Functionality)
2. Software development:
Defining the architecture of the system and implementing
the system
3. Software validation:
Checking what it does what the customer wants
4. Software evolution:
Changing the system in response to changing customer
needs
Software Crisis 🥲
Software Crisis is a term used in computer science for the difficulty of writing
useful and efficient computer programs in the required time.
Causes of Software Crisis
The cost of owning and maintaining software was as expensive as
developing the software
At that time Projects were running over-time
At that time Software was very inefficient
The quality of the software was low quality
Software often did not meet user requirements
Software Engineering 3
At that time Software was never delivered
Non-optimal resource utilization.
The software complexity is harder to change.
Software Crisis Cause
Solution of Software Crisis:
There is no single solution to the crisis. One possible solution to a software crisis
is Software Engineering because software engineering is a systematic,
disciplined, and quantifiable approach.
For preventing software crises, there are some guidelines:
Reduction in software over budget.
The quality of software must be high.
Less time is needed for a software project.
Experienced and skilled people working over the software project.
Software Engineering 4
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 maps the various activities performed on a software product
from its inception to retirement.
Need for SDLC
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.
SDLC
Software Engineering 5
Stages of SDLC:
Stage 1: Planning and Requirement Analysis
Planning is the crucial step in everything and so as in software development.
In this same stage, requirement analysis is also performed by the developers of
the organization. This is attained from the inputs from the customers, sales
department/market surveys.
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,
Stage 2: Defining Requirements
Once the requirement analysis is done, the next stage is to represent and
document the software requirements and get them accepted from the project
stakeholders.
Software Engineering 6
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.
Output of this stage is: SRS (Software Requirement Specification) Document.
Stage 3: Designing the Product Architecture
SRS is the reference for product architects to come out with the best architecture
for the product to be developed.
Based on the requirements specified in SRS, usually more than one design
approach for the product architecture is proposed and documented in a DDS -
Design Document Specification.
Stage 4: Developing Product
In this stage of SDLC the actual development starts and the product is built. The
programming code is generated as per DDS during this stage. If the design is
performed in a detailed and organized manner, code generation can be
accomplished without much hassle.
Stage 5: Product Testing and Integration
After the development of the product, testing of the software is necessary to
ensure its smooth execution.
This stage refers to the testing only stage of the product where product defects
are reported, tracked, fixed and retested, until the product reaches the quality
standards defined in the SRS.
Stage 6: Deployment in the Market and Maintenance
Once the product is tested and ready to be deployed it is released formally.
Sometimes product deployment happens in stages as per the business strategy
of that organization. The product may first be released in a limited segment and
tested in the real business environment.
After the product is released in the market, its maintenance is done for the
existing customer base.
Software Engineering 7
Software Development Models
Waterfall Model 💦
The classical waterfall model divides the life cycle into a set of phases. This
model considers that one phase can be started after the completion of the
previous phase. That is the output of one phase will be the input to the next
phase.
Thus the development process can be considered as a sequential flow in the
waterfall. Here the phases do not overlap with each other
Advantages of Classical Waterfall Model
Simple and is easy to understand.
Each stage in the model is clearly defined.
This model works well for smaller projects and projects where
requirements are well understood (RIGID)
Software Engineering 8
Drawbacks of Classical Waterfall Model
No feedback path
Difficult to accommodate change requests
No overlapping of phases
Iterative Waterfall Model 🔁
The iterative waterfall model provides feedback paths from every phase to its
preceding phases, which is the main difference from the classical waterfall
model.
When errors are detected at some later phase, these feedback paths allow for
correcting errors committed by programmers during some phase.
The feedback paths allow the phase to be reworked in which errors are
committed and these changes are reflected in the later phases.
Software Engineering 9
But, there is no feedback path to the stage – feasibility study, because once a
project has been taken, does not give up the project easily.
The Iterative Waterfall Model is a software development approach that
combines the sequential steps of the traditional Waterfall Model with the
flexibility of iterative design. It allows for improvements and changes to be
made at each stage of the development process, instead of waiting until the
end of the project.
Advantages of Iterative Waterfall Model
This model is very simple and is easy to understand.
Phases in this model are processed one at a time.
Each stage in the model is clearly defined.
Feedback Path
Drawbacks of Iterative Waterfall Model
Limited customer interactions
Difficult to accommodate change requests
No overlapping of phases
Prototype Model
A prototype is a toy implementation of a system. It has limited functional
capabilities, and inefficient performance as compared to the actual
software.
This model is used when the customers do not know the exact project
requirements beforehand. In this model, a prototype of the end product is first
developed, tested and refined as per customer feedback repeatedly till a final
acceptable prototype is achieved which forms the basis for developing the
final product.
Software Engineering 10
Advantages
The customers get to see the partial product early in the lifecycle
New requirements can be easily accommodated as there is scope for
refinement
Missing functionalities can be easily figured out
Disadvantages
Costly w.r.t time as well as money.
Poor Documentation due to continuously changing customer
requirements.
The customer might lose interest in the product if he/she is not satisfied
with the initial prototype.
Software Engineering 11
When to Use:
The Prototyping Model should be used when the requirements of the product
are not clearly understood or are unstable. It can also be used if requirements
are changing quickly
Incremental Model
Also known as : Iterative Enhancement Model
Incremental Model is a process of software development where requirements
are divided into multiple standalone modules of the software development
cycle.
In this model, each module goes through the requirements, design,
implementation and testing phases. Every subsequent release of the module
adds function to the previous release. The process continues until the
complete system achieved.
Software Engineering 12
Advantage of Incremental Model
Errors are easy to be recognized
Easier to test and debug
More flexible
Disadvantage of Incremental Model
Total Cost is high
Well defined module interfaces are needed
When we use the Incremental Model?
When the requirements are superior.
A project has a lengthy development schedule.
When the customer demands a quick release of the product.
You can develop prioritized requirements first.
Evolutionary Development Model
Evolutionary model is a combination of Iterative and Incremental model of
software development life cycle.
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.
Each evolutionary model may be developed using an iterative waterfall model
of development.
Software Engineering 13
Advantages of Evolutionary Model
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.
It reduces the error because the core modules get tested thoroughly.
Disadvantages of Evolutionary Model
High Cost
Not suitable for smaller projects
Spiral Model 🕸
Spiral model is one of the most important Software Development Life Cycle
models, which provides support for Risk Handling (such as schedule
slippage and cost overrun).
Software Engineering 14
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
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.
Each phase of the Spiral Model is divided into four quadrants:
Objectives determination and identify alternative solutions
Software Engineering 15
Identify and resolve Risks
Develop next version of the Product
Review and plan for the next Phase
The Spiral model is called a Meta-Model
When to use Spiral Model?
When the project is large
When changes may require at any time
Large and high budget projects
Advantages
Risk analysis
Useful for large and mission-critical projects.
Disadvantages
Can be a costly model to use
Risk analysis needed highly particular expertise
Doesn't work well for smaller projects.
Agile Model 🆕
"Agile process model" refers to a software development approach based on
iterative
development.
Agile methods break tasks into smaller iterations, or part and do not directly
involve long term planning.
The project scope and requirements are laid down at the beginning of the
development process. Plans regarding the number of iterations, the duration
and the scope of each iteration are clearly defined in advance.
Software Engineering 16
When to use the Agile Model?
When frequent changes are required.
When a customer is ready to have a meeting with a software team all the
time.
Advantage(Pros) of Agile Method:
1. Frequent Delivery
2. Face-to-Face Communication with clients.
3. Anytime changes are acceptable.
Disadvantages(Cons) of Agile Model:
1. Due to the shortage of formal documents, it creates confusion
2. Due to the lack of proper documentation, once the project completes and
the developers allotted to another project, maintenance of the finished
project can become a difficulty.
Comparison
Software Engineering 17
Rapid application development model (RAD)
RAD is a linear sequential software development process model that emphasizes a
concise development cycle using an element based construction approach.
If the requirements are well understood and described, and the project scope is a
constraint, the RAD process enables a development team to create a fully functional
system within a concise time period.
Software Engineering 18
Software Engineering 19
Business • On basis of the flow of information and distribution between various
Modeling business channels, the product is designed
• The information collected from business modeling is refined into a set of
Data Modeling
data objects that are significant for the business
• The data object that is declared in the data modeling phase is
Process
transformed to achieve the information flow necessary to implement a
Modeling
business function
Application • Automated tools are used for the construction of the software, to convert
Generation process and data models into prototypes
Testing and • As prototypes are individually tested during every iteration, the overall
Turnover testing time is reduced in RAD.
When to use RAD Model?
When the system should need to create the project that modularizes in a short
span time (2-3 months).
When the requirements are well-known.
When the technical risk is limited.
Software Engineering 20
When there's a necessity to make a system, which modularized in 2-3 months of
period.
It should be used only if the budget allows the use of automatic code generating
tools.
Advantage of RAD Model
This model is flexible for change.
Each phase in RAD brings highest priority functionality to the customer.
Disadvantage of RAD Model
It required highly skilled designers.
On the high technical risk, it's not suitable.
Big bang model
In this model, developers do not follow any specific process. Development begins
with the necessary funds and efforts in the form of inputs. And the result may or may
not be as per the customer's requirement, because in this model, even the customer
requirements are not defined.
This model is ideal for small projects like academic projects or practical projects.
One or two developers can work together on this model.
When to use Big Bang Model?
As we discussed above, this model is required when this project is
small like an academic project or a practical project. This method is
Software Engineering 21
also used when the size of the developer team is small and when
requirements are not defined, and the release date is not confirmed or
given by the customer.
Advantage(Pros) of Big Bang Model:
1. There is no planning required.
2. Simple Model.
3. Few resources required.
4. Easy to manage.
5. Flexible for developers.
Disadvantage(Cons) of Big Bang Model:
1. There are high risk and uncertainty.
2. Not acceptable for a large project.
3. If requirements are not clear that can cause very expensive.
SR
Software Engineering 22