Chapter 1
Introduction to Software Engineering
Overview
• Introduction to Software Engineering
– Software Engineering is a systematic approach to
developing, operating, and maintaining software systems
efficiently and reliably.
– It involves applying engineering principles and
methodologies to software development to ensure
quality, efficiency, and scalability.
– This overview will highlight the significance of Software
Engineering in modern technology and its role in
addressing the challenges of the Software Crisis.
Definition:
– Software Engineering encompasses the systematic
application of scientific and technological
knowledge to develop and maintain software
products.
– It involves processes, methods, tools, and
techniques to manage software development
projects efficiently and effectively.
– The goal of Software Engineering is to produce high-
quality software that meets user requirements
within budget and time constraints.
Basic Concepts
• Understanding Software and Engineering
– Software refers to programs, data, documentation, and
user interfaces that constitute a computer system.
– Engineering involves the systematic application of
knowledge and principles to design, build, and maintain
complex systems.
– In Software Engineering, these concepts converge to
address the challenges of developing reliable and
scalable software systems.
Evolution of Software Engineering
• From Early Programming Practices to Software
Engineering Discipline
– Software Engineering has evolved from ad-hoc
programming practices to a disciplined approach to
software development.
– Early practices lacked systematic methodologies,
leading to inefficiencies, errors, and project failures.
– The emergence of Software Engineering as a discipline
addressed these challenges by introducing systematic
approaches and methodologies.
Evolution of Software Engineering
• Tracing the Development of Software Engineering
– Early programming practices were largely ad-hoc,
lacking systematic methodologies, and resulting in
inefficiencies and errors.
– The emergence of Software Engineering as a discipline
stemmed from the need for structured approaches to
address software complexities.
– Over time, Software Engineering has integrated
principles from engineering, computer science, and
management to refine its practices.
Key Milestones in Software Engineering Evolution
• Notable Progress in Software Engineering
– 1940s-1950s: The advent of electronic computers marked the
beginning of software development efforts.
– 1960s-1970s: Structured programming methodologies and early
software development models, such as the Waterfall Model,
emerged.
– 1980s-1990s: The proliferation of personal computers led to
advancements in software development tools and
methodologies.
– 2000s-Present: Agile methodologies gained popularity,
emphasizing flexibility and customer collaboration in response to
changing requirements.
The Software Crisis
– The Software Crisis refers to the challenges faced by the
software industry in delivering quality software products
efficiently and reliably.
– Factors contributing to the crisis include increasing
complexity, changing requirements, and inadequate
development practices.
– Addressing the Software Crisis requires adopting
systematic approaches and methodologies to ensure the
quality and reliability of software systems.
Addressing the Software Crisis
– Software Engineering practices aim to address the
challenges posed by the Software Crisis by introducing
systematic approaches to software development.
– These practices include requirements engineering,
software design, coding, testing, and maintenance,
conducted in a structured and disciplined manner.
– By adopting Software Engineering practices,
organizations can improve the quality, reliability, and
efficiency of software development processes.
Software Development Life Cycle (SDLC)
• Understanding the SDLC:
– Software Development Life Cycle (SDLC) is a process used by
the software industry to design, develop and test high
quality software's.
– The SDLC aims to produce a high-quality software that
meets or exceeds customer expectations, reaches
completion within times and cost estimates.
– SDLC is a process followed for a software project, within a
software organization.
– It consists of a detailed plan describing how to develop,
maintain, replace and alter or enhance specific software.
The life cycle defines a methodology for improving the
quality of software and the overall development process.
Software Life Cycle Models Overview
• SDLC Models
– There are various software development life cycle
models defined and designed which are followed
during the software development process. These
models are also referred as Software Development
Process Models.
– Each process model follows a Series of steps unique
to its type to ensure success in the process of
software development.
Software Development Life
Cycle (SDLC)
• Following are the most important and popular
SDLC models followed in the industry −
– Waterfall Model
– Iterative Model
– Spiral Model
– V-Model
– Agile Model
– Big Bang Model
Waterfall Model
• The Waterfall Model is a sequential software
development process consisting of distinct phases:
requirements, design, implementation, testing,
deployment, and maintenance.
• Each phase must be completed before moving to
the next, resembling a waterfall flowing
downwards.
• The Waterfall Model is easy to understand and
implement but lacks flexibility, making it less
suitable for projects with changing requirements.
Waterfall Model
• 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.
Waterfall Model
• 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.
Waterfall model
• 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.
Waterfall model
• 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.
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.
– No working software is produced until late during the life
cycle( it’s sequential)
– High amounts of risk and uncertainty.
– Not a good model for complex and object-oriented
projects.
– Poor model for long and ongoing projects.
Iterative Models
• Iterative process starts with a simple
implementation of a subset of the software
requirements and iteratively enhances the
evolving versions until the full system is
implemented.
• At each iteration, design modifications are made
and new functional capabilities are added.
• The basic idea behind this method is to develop a
system through repeated cycles (iterative) and in
smaller portions at a time (incremental).
Iterative model
Iterative mode
• Iterative and Incremental development is a
combination of both iterative design or
iterative method and incremental build model
for development.
• “During software development, more than one
iteration of the software development cycle
may be in progress at the same time”.
Iterative Models
• Advantages and Disadvantages
– Advantages of Iterative Models include early delivery of
partial functionality, reduced risk through incremental
development, and greater flexibility in accommodating
changes.
• Disadvantages
– However, managing iterations and controlling scope can
be challenging, and there may be increased complexity
due to the need for integration across iterations.
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
Risk Handling in Spiral Model
– The most important feature of the spiral model is handling these unknown
risks after the project has started. Such risk resolutions are easier done by
developing a prototype.
– The spiral model supports coping with risks by providing the scope to build
a prototype at every phase of software development.
– The Prototyping Model also supports risk handling, but the risks must be
identified completely before the start of the development work of the
project.
– But in real life, project risk may occur after the development work starts, in
that case, we cannot use the Prototyping Model.
– In each phase of the Spiral Model, the features of the product dated and
analyzed, and the risks at that point in time are identified and are resolved
through prototyping.
– Thus, this model is much more flexible compared to other SDLC models.
Cont..
• Advantages
– 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.
Spiral Model
• Disadvantages
– 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.
V-Model
• The V-model is an SDLC model where execution of
processes happens in a sequential manner in a V-shape. It
is also known as Verification and Validation model.
• The V-Model is an extension of the waterfall model and is
based on the association of a testing phase for each
corresponding development stage.
• This means that for every single phase in the
development cycle, there is a directly associated testing
phase.
• This is a highly-disciplined model and the next phase
starts only after completion of the previous phase.
V Model
• Under the V-Model, the corresponding testing
phase of the development phase is planned in
parallel.
• So, there are Verification phases on one side
of the ‘V’ and Validation phases on the other
side.
• The Coding Phase joins the two sides of the V-
Model.
V-Model
Agile Methodology
• 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.
Agile Model
• Every iteration involves cross functional teams
working simultaneously on various areas like −
– Planning
– Requirements Analysis
– Design
– Coding
– Unit Testing and
– Acceptance Testing.
Agile model
Agile Model
• Advantages
– 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.
Agile Model
• Disadvantages
– Not suitable for handling complex dependencies.
– More risk of sustainability, maintainability and
extensibility.
– 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.
Big Bang Model
• The Big Bang model is an SDLC model where we do not
follow any specific process.
• The development just starts with the required money and
efforts as the input, and the output is the software
developed which may or may not be as per customer
requirement.
• This Big Bang Model does not follow a process/procedure
and there is a very little planning required.
• Even the customer is not sure about what exactly he wants
and the requirements are implemented on the fly without
much analysis.
Big Bang Model
• The Big Bang Model comprises of focusing all the
possible resources in the software development
and coding, with very little or no planning.
• The requirements are understood and
implemented as they come.
• Any changes required may or may not need to
revamp the complete software.
Big Bang Model
• Advantages
– This is a very simple model
– Little or no planning required
– Easy to manage
– Very few resources required
– Gives flexibility to developers
– It is a good learning aid for new comers or
students.
Big Bang Model
• Disadvantages
– Very High risk and uncertainty.
– Not a good model for complex and object-
oriented projects.
– Poor model for long and ongoing projects.
– Can turn out to be very expensive if requirements
are misunderstood.
End