Understanding Software Development Life Cycles

What is Software Engineering?

Software engineering is the study and application of systematic, economical, and measurable approaches to the development, operation, and maintenance of high-quality software.

What is Software?

Software comprises computer programs and associated documentation.

Key Characteristics of Software Engineering

Software engineering focuses on software systems developed by teams, not individuals. These systems must meet user requirements, be maintainable, perform well, be reliable, and be user-friendly.

Software Development Life Cycle

The software development life cycle outlines the stages involved in creating and maintaining software:

  1. Requirements Definition
  2. Analysis
  3. Design
  4. Coding
  5. Testing

Requirements Definition

Before development begins, the system’s usage, user interactions, and intended functions must be clearly defined.

Analysis

Analysis aims to:

  • Verify the quality of gathered requirements
  • Detail these requirements sufficiently for developers. In essence, analysis focuses on what the system should do.

Design

Design focuses on how to implement the requirements. This phase incorporates technology requirements into the components modeled during analysis, defining the platform and tools to be used.

Coding

Coding translates design decisions into a specific programming language.

Testing

Software testing ensures quality. Its primary goal is to analyze the software’s performance, verifying that it meets client needs. Key test types include:

  • Unit Testing (performed by developers on individual components)
  • Integration Testing (verifies the interaction between different units)
  • System Testing (evaluates the system in a real or simulated working environment)

Software Life Cycle Models

A software life cycle model is an abstract, simplified representation of the software development process. It typically highlights key activities and data involved in producing and maintaining software.

Adopting a Model

Adopting a life cycle model alone isn’t enough to manage a software project effectively. Consider these factors:

  • Organization of process activities
  • Resource allocation (human, hardware, and software)
  • Operating procedures
  • Development policies and constraints
  • Types of software

Characteristics of Life Cycle Models

Common features of life cycle models:

  • Describe the main development stages
  • Define key activities within each phase
  • Specify the outputs of each stage and inputs for subsequent stages
  • Provide a framework for mapping necessary activities

Common Life Cycle Models

  • Waterfall Model
  • Incremental Model
  • Evolutionary Model
  • RAD Model
  • Prototyping
  • Spiral Model
  • RUP-Associated Life Cycle Model

Waterfall Model

The oldest and most widely used model, the Waterfall model, mirrors traditional engineering cycles. It requires a systematic, sequential approach and suits projects with well-defined requirements and experienced development teams.

While the model proposes a sequential flow, real-world projects often involve interaction between phases, with later phases potentially impacting earlier ones.

Advantages of Waterfall

  • User involvement through reviews at each phase’s end
  • Facilitates configuration control
  • Each documented and approved step forms the basis for the next

Disadvantages of Waterfall

  • Strict sequential flow is rarely realistic
  • Requires complete, accurate requirements upfront
  • Assumes developers fully understand the application from the outset
  • Difficult to assess progress in early stages

Prototyping

Prototyping involves developing an initial program for user experimentation to define system requirements. This prototype is then re-implemented in the next phase. Prototyping is particularly useful for:

  • Large, complex systems
  • Projects lacking a pre-existing system or manual process to guide requirements

Goals of Prototyping

  • Understanding user requirements
  • Defining the user interface
  • Demonstrating system feasibility to stakeholders

Iterative Development

Iterative development involves cycling through development activities. Two common iterative approaches are:

  • Incremental
  • Spiral

Spiral Development

Spiral development incorporates management aspects into the software process, including:

  • Regular risk analysis
  • Planning
  • Control
  • Decision making

The process is represented as a spiral, with each loop signifying a phase. Phases are flexible and determined by project needs. Risks are actively assessed and addressed throughout.

Incremental Development

Instead of delivering a complete system at once, development is divided into increments, each delivering a portion of the functionality. User requirements are prioritized, with high-priority features implemented in early increments. Requirements are frozen for each increment but can evolve for later ones.

Incremental Approach

This approach tackles requirement sets by iterating through development stages concurrently. It combines the Waterfall model with evolutionary principles, prioritizing requirements and delivering the system in increments, starting with core services. Each increment can follow a Waterfall or evolutionary approach internally.