2.5 KiB
Software development life cycles (SDLC)
Here are several popular SDLC models:
Waterfall
The waterfall model is best suited for well-defined complex projects, where problems can be spotted early and complexity is dealt with in an orderly way. Key distadvantages include low customer visibility and low flexibility to mid-project changes.
Incremental development
"Incremental" here refers to adding to the work products (requirements, source code, etc.) in stages. In each stage, more functionality is added (core functionality first).
Iterative development
In iterative development one iterates through the whole process (requirements → ... → deployment) multiple times. Iterative and incremental development often go together.
Spiral
Spiral is a type of incremental and iterative development where risk assessment occurs at the start of each cycle.
Agile
Agile is a form of incremental and iterative development with emphasis on frequent face-to-face communication, high customer visibility, adaptability to change, and minimizing non-software work products. For example, Extreme Programming (XP) is an agile methodology based on the principles of communication, simplicity, feedback, courage, and respect.
Evolutionary
In an evolutionary model, deliverables are given to the customer frequently and incrementally. The focus is on high-value features first and getting customer feedback early and often.
Code & Fix
This is a kind of incremental development where life cycle phases other than coding and debugging (requirements analysis, software design, testing, etc.) are skipped, and code refactoring is often neglected.
Prototyping
This isn't really a life cycle on its own (although it can be adapted as such, as with "evolutionary prototyping"). Rather, it's a technique that is good for dealing with unclear requirements, assisting in communication, or in developing initial user interface design.
Questions guiding the choice of SDLC model
This list is adapted from Rapid Development by Steve McConnell.
- How well do the customer and development team understand the requirements?
- How likely are requirements to change?
- Are major archiectural changes likely?
- Are there hard schedule constraints?
- Are the relevant tools and technologies well-understood by the development team?
- Is high visibility important to customers and/or management?
- How will human factors affect the project (discipline, skills, training, and intellectual limits)?
- What opportunities are there to parallelize work phases?