A Software Development Life Cycle (SDLC) model is a framework that describes the activities performed at each stage of a software development project.
In a Software Development Life Cycle, the activities are performed in five phases −
Requirements Gathering − Requirements for a software to be developed are gathered. These requirements will be in a language that is understood by the customer / user. Domain specific terminology is recommended.
Analysis − The gathered requirements are analyzed from implementation point of view and the software specifications are written to cover both, the functional requirements and the non-functional requirements.
Design − This phase involves arriving at the software architecture and implementation specifics based on technology chosen for development.
Construction − In this phase, the code is developed, unit tested, integrated, integration tested and the build is produced.
Testing − Functional testing of the built software is done in this phase. This also includes the testing of non-functional requirements.
There are two approaches to performing these activities −
Prescriptive − The SDLC models that will provide you ways of performing the activities in a prescribed manner as defined by the framework.
Adaptive − The SDLC models that will give you flexibility in performing the activities, with certain rules that need to be followed. The agile methods mostly follow this approach, with each one having its rules. However, following an adaptive or agile approach does not mean that the software is developed without following any discipline. This would lead to a chaos.
You need to understand that we cannot say that a specific SDLC model is good or bad. Each of them has its own strengths and weaknesses and thus are suitable in certain contexts.
When you choose an SDLC model for your project, you need to understand −
- Your Organization Context
- Your Technology Context
- Your Team Composition
- Your Customer Context
For example, if the software development is predictable, you can use a Prescriptive approach. On the other hand, if the software development is unpredictable, i.e. requirements are not entirely known, or the development team does not have prior exposure to the current domain or technology, etc. then Adaptive approach is the best choice.
In the following sections, you will understand the most prevalent SDLC models that are evolved during the execution of software development projects across the industry. You will also get to know the strengths and weaknesses of each of them and in what contexts they are suitable.