Software Development Life Cycle (SDLC)

    SDLC

    SOFTWARE DEVELOPMENT LIFE CYCLE [SDLC] or Software Development Process, defines the stages / phases in the building of software.

    ISTQB Definition

    • software development lifecycle (SDLC): The activities performed at each stage in software development, and how they relate to one another logically and chronologically.
    • software lifecycle: The period of time that begins when a software product is conceived and ends when the software is no longer available for use. The software lifecycle typically includes a concept phase, requirements phase, design phase, implementation phase, test phase, installation and checkout phase, operation and maintenance phase, and sometimes, retirement phase. Note these phases may overlap or be performed iteratively.

    Models

    There are numerous software development life cycle models in the world but they can be broadly categorized into two:

    Sequential Development Models

    Sequential development models, which is a relatively traditional approach, advocate the development of software sequentially through a number of well defined phases. This means development activities are linear and a phase in the development process begins only after the previous phase is complete. Software is delivered with complete set of features but this typically takes months or years for delivery. [Imagine the building contractor delivering your whole house after a year, and you never got a chance to look at it before that.]

    Examples of Sequential Development Models include:

    Waterfall Model

    Development phases cascade, like a waterfall, one after the other over time: Requirements >> Design >> Implementation >> Verification >> Maintenance.

    Waterfall Model

    Testing is done only after coding of the entire software is complete.

    V-Model

    V-Model is an extension of the Waterfall model where the development phases, instead of moving down in a linear way, are bent upwards after the coding phase, to form the typical V shape: Requirements Design >> System Design >> Architecture Design >> Module Design >> Coding >> Unit Test >> Integration Test >> System Test >> Acceptance Test.

    Separate testing is associated with each of the project definition phases.

    Iterative and Incremental Development Models

    Iterative development advocates the development and delivery of software in a series of cycles, often of a fixed duration. [Imagine the building contractor delivering pieces of your house every month.]

    Incremental development advocates the development and delivery of software incrementally, one piece at a time. [Imagine the building contractor delivering your house one room at a time.]

    Testing is conducted in each increment or iteration.

    Though Agile software development has higher values, it normally adopts the iterative and incremental method to achieve those values.

    Examples of Iterative and Incremental Development Models include: 

    Rational Unified Process

    Each iteration is relatively long (a couple of months), and the feature increments are correspondingly large. [Imagine your building contractor delivering you a room every three months.]

    Scrum

    Each iteration is relatively short but fixed (a few days or a few weeks), and the feature increments are correspondingly small. [Imagine your building contractor delivering you something every two weeks: a door, a window, a wall, a room.]

    Kanban

    Iterations are either fixed-length or not and the features increments can be a single feature or a group of features. [Imagine your building contractor delivering you a door after a week and a room after a month.]

    Spiral

    Iterations are exploratory and the feature increments experimental with the developed features being either implemented, adapted or scrapped. [Imagine your building contractor delivering you a plastic house prior to a concrete house.]

    Model Selection

    Software development life cycle model to be used for a particular project can be selected (and adapted) based on the following:

    • Business priorities
    • Product characteristics and risks
    • Project goals and risks
    • Team characteristics

    In complex projects, different models may be adopted for each segment of the project. For example, V-Model may be used for developing the back-end while Scrum may be using for developing the front-end.

    SDLC Activities in Summary

    Whatever the model or however the model defines them, SDLC in general comprises of all or some of the following phases / activities/ tasks:

    • Project Planning
    • Requirements Development
    • Estimation
    • Scheduling
    • Design
    • Coding
    • Test Build / Deployment
    • Unit Testing
    • Integration Testing
    • User Documentation
    • System Testing
    • Acceptance Testing
    • Production Build / Deployment
    • Release
    • Maintenance

    SDLC Activities in Detail

    • Project Planning
      • Prepare
      • Review
      • Rework
      • Baseline
      • Revise [if necessary] >> Review >> Rework >> Baseline
    • Requirements Development [Business Requirements and Software/Product Requirements]
      • Develop
      • Review
      • Rework
      • Baseline
      • Revise [if necessary] >> Review >> Rework >> Baseline
    • Estimation [Size / Effort / Cost]
      • <same as the activities/tasks mentioned for Project Planning>
    • Scheduling
      • <same as the activities/tasks mentioned for Project Planning>
    • Designing [High-Level Design and Detail Design]
      • <same as the activities/tasks mentioned for Requirements Development>
    • Coding
      • Code
      • Review
      • Rework
      • Commit
      • Recode [if necessary] >> Review >> Rework >> Commit
    • Test Builds Preparation/Deployment
      • Build/Deployment Plan
        • Prepare
        • Review
        • Rework
        • Baseline
        • Revise [if necessary] >> Review >> Rework >> Baseline
      • Build/Deploy
    • Unit Testing
      • Test Plan
        • Prepare
        • Review
        • Rework
        • Baseline
        • Revise [if necessary] >> Review >> Rework >> Baseline
      • Test Cases/Scripts
        • Prepare
        • Review
        • Rework
        • Baseline
        • Execute
        • Revise [if necessary] >> Review >> Rework >> Baseline >> Execute
    • Integration Testing
      • <same as the activities/tasks mentioned for unit testing>
    • User Documentation
      • Prepare
      • Review
      • Rework
      • Baseline
      • Revise [if necessary] >> Review >> Rework >> Baseline
    • System Testing
      • <same as the activities/tasks mentioned for Unit Testing>
    • Acceptance Testing[ Internal Acceptance Test and External Acceptance Test]
      • <same as the activities/tasks mentioned for Unit Testing>
    • Production Build/Deployment
      • <same as the activities/tasks mentioned for Test Build/Deployment>
    • Release
      • Prepare
      • Review
      • Rework
      • Release
    • Maintenance
      • Recode [Enhance software / Fix bugs]
      • Retest
      • Redeploy
      • Rerelease

    Notes

    • The activites mentioned here are NOT set in stone and each phase does not necessarily have to be implemented in the order listed.
    • Though SDLC uses the term ‘Development’, it does not focus just on the coding tasks done by developers but incorporates the tasks of all stakeholders, including Testers.

    There are still other activities / tasks, like Configuration Management, involved in the proper development of software which have not been specifically mentioned above. No matter what, it is essential that you clearly understand the software development life cycle your project is following. One issue that is widespread in many projects is that software testers are involved much later in the life cycle, due to which they lack the visibility and authority they need to ensure the highest level of quality in software.

    Last Updated on September 10, 2020 by STF