# Topic covered
* Software Engineering
  * History of software engineering
* Software Development Life Cycle(SDLC)
* SDLC Phases
* SDLC Models
  * Classical Waterfall model
  * Iterative Waterfall Model
  * Prototype Model
  * Incremental Model
  * Spiral Model
  * Agile Model

1. Software Engineering

Software Engineering is 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.

  • Need of Software Engineering
    • To manage Large software
    • For better Scalability, Cost Management, Quality

1.1 History of software engineering

  • 1940 - 50
    • Simple software development started by big giant like IBM, NASA, etc
    • Build and Deliver methods used
  • 1945 to 1965 –> The origins
    • Introduces by NATO Science Committee
  • 1965 to 1985 –> The software crisis
    • Many software projects failed.
    • Due to over budget, expensive to maintain, late delivery…
    • Eg: IBM OS/360
  • 1990 - 1999 –> Prominence of the Internets
    • World Wide Web, OS
  • 2000 - 2010 –> Lightweight methodologies
  • 2010 - Till –> AI, ML, DL

1.2 Software Development Life Cycle(SDLC)

  • SDLC is a systematic, disciplined, cost-effective techniques for software development
  • SDLC process aims to produce high-quality software that meets customer expectations
  • SDLC consists of a detailed info which explains how to plan, build, and maintain specific software.

1.3 Why SDLC?

  • It offers a basis for project planning, scheduling, and estimating
  • Provides a framework for a standard set of activities and deliverables
  • It is a mechanism for project tracking and control
  • Increases visibility of project planning to all involved stakeholders of the development process
  • Increased and enhance development speed
  • Helps you to decrease project risk and project management plan overhead

1.4 SDLC Phases

SDLC Phases

  1. Requirement Gathering and analysis
    • This includes calculating labor and material costs, creating a timetable with target goals, and creating the project’s teams and leadership structure.
  2. Feasibility study
    • Define and document the software needs –> known as SRS Document (Software Requirements Specification)
    • 5 Checks: Economic, Legal, Operation feasibility, Technical, Schedule
  3. Design
    • The system and software design documents are prepared as per the SRS document.
    • All High-Level Design (HLD) and Low-Level Design (LLD) document are prepared.
  4. Coding
    • It is the longest phase of the Software Development Life Cycle process.
  5. Testing
  6. Deployment
  7. Maintenance
    • Bug fixing – bugs are reported because of some scenarios which are not tested at all
    • Upgrade – Upgrading the application to the newer versions of the Software
    • Enhancement – Adding some new features into the existing software

1.5 SDLC Models

1.5.1. Classical Waterfall model

  • It is very simple but idealistic
  • Earlier this model was very popular but nowadays it is not used
  • But it is very important because all the other sdlc models are based on the classical waterfall model
  • Basic, Rigid, Inflexible, Not for real project

The outcome of one phase acts as the input for the next phase. i.e. development process can be considered as a sequential flow

Pros

* Base Model
* Simple and easy
* For smaller projects

Cons

* No feedback path
* Sequential flow

Classical Waterfall model

1.5.2. Iterative Waterfall Model

  • Basic, Problem should be well understood

The iterative waterfall model provides feedback paths from every phase to its preceding phases

Pros

* Simple and easy
* For smaller projects
* Feedback path

Cons

* Sequential flow
* No Incremental delivery

Iterative Waterfall Model

1.5.3. Prototype Model

  • Used where user requirement is not clear, Costly

In prototype model, before carrying out the development of actual software, a working prototype of the system is built

Pros

* Reduce the risk of incorrect user requirement
* Support early product marketing

Cons

* Prototyping building can be expensive
* Special tools & techniques are required to build a prototype
* It is a time-consuming process

Prototype Model

1.5.4. Incremental Model

  • Incremental Model is a process where requirements divided into multiple standalone modules
  • Module by module delivery, easy to test and debug

Pros

* Errors are easy to be recognized
* Easier to test and debug
* Initial cost is low
* The client gets important functionality early.

Cons

* Total Cost is high

Incremental Model

1.5.5. Spiral Model

  • Spiral Model is used for risk management that combines the iterative
  • Risk analysis, Big project, not early lock requirement

Pros

* Risk Handling
* Good for large projects
* Flexibility in Requirements

Cons

* Complex
* Expensive
* Too much dependability on Risk Analysis

Spiral Model

1.5.6. Agile Model

  • Agile Model is combination of iterative and incremental process models
  • It focuses 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.
  • At the end of the iteration, a working product is displayed to the customer and important stakeholders.
  • Flexible, Parallel, process divided into sprint
  • Pros
* Frequently delivery
* Face-to-Face Communication with clients
* Anytime changes are acceptable
* It reduces total development time

Cons

* Less documentation
* Maintenance problem

Agile Model

Reference