The core phases of the software development life cycle are managed by a number of models which are considered common in the software industry. As we'll see later, many of these are in flux and changing due to changes in the industry, but they are often taught as traditional SDLC models.
One that is often mentioned first is the “waterfall” method or “cascade” method. This is named like it is because each step “falls” into the step after it. A visual will often show a line or box with an arrow going down into a subsequent line or box at the next level.
In the waterfall model, each phase is clearly delineated and separate. All of the requirements gathering is done before any design takes place, and all of the design is completed before codebase writing, and all of the codebase writing is done before testing, etc. This provides a very concrete structure for the project: Everyone always knows which phase the project is in, and works accordingly. However, the waterfall model also has its down side, where the process is not as versatile due to the solid barriers between phases.
Another mode is the “iterative” model or “incremental” model.
The incremental model is something you might call a “fragmented” or “fractal” model, in contrast to the waterfall model. Here, the individual steps are broken up into micro components – instead of one overarching design phase, there are multiple design phases locked together with other key tasks from other phases like coding, implementation and testing.
One way to understand the incremental approach is to look at different types of testing – for example, there’s unit testing. A unit is the smallest testable part of any software. Testing software with a unit testing approach means that the small modules are treated differently and independently of one another. Unit testing provides that incremental model, as it allows programmers to test each module or part of the codebase individually and with a granular approach
Another common SDLC model, the “V-shaped” model, has a similar structure, but a somewhat different workflow aspect, where the initial phases go down into implementation and testing phases, and where multiple testing phases follow.
Then there's the agile model which emerged in the last decade or so, bringing us into new philosophies of software design. Incremental development plays a role, and the process itself becomes more complex as key tasks get shuffled from one phase to the other.