Fundamental Approaches
Sequential
Sequential (Waterfall)
In this model, software development is viewed as a linear process.
Generally it can be seen as five phases:
- specifiying requirements
- designing product
- implementing
- testing
- deploying
A strict model only moves in the forward direction - there is no provision to change artifacts from previous stages.
Possible uses
The model works well for projects that are already well-understood, as the requirements are stable, and the effort can be estimated accurately.
Possible cons
There is a higher risk of overrunning deadlines as if the effort is not estimated well, or the requirements change, this results in a big issue.
Iterative
Iterative
In this model, software development is viewed as an iterative process. Each iteration produces a new version of the product, factoring in feedback from each iteration into subsequent iterations.
This can be done in two approaches:
- Breadth-first refers to an approach where an iteration changes all major components, and all functionality areas eg: skateboard → scooter → car
- Depth-first refers to an approach where an iteration focuses on a singular component eg: wheels → bottom part of car → … In this approach, a working product may not be produced early.
Possible uses
The model works well for projects that are already well-understood, as the requirements are stable, and the effort can be estimated accurately.
Possible cons
There is a higher risk of overrunning deadlines as if the effort is not estimated well, or the requirements change, this results in a big issue.
Real world examples
A sequential approach to building a car could come up with finding the requirements for the car, designing the car, making the car, and fixing the issues with the car
An iterative (breadth-first) approach to building a car, could be building a skateboard first, then after feedback building a scooter, and iteratively until a car is met (making a usable product from iteration)
An iterative (depth-first) approach to building a car is building it part by part - each iteration builds a component fully.
Agile
Key features of agile approaches:
- Requirements prioritized based on need of user
- clarified regularly
- factored into development schedule as appropriate
- Work based on a rough project plan and a high level design that evolves as project goes on
- Complete transparency and responsibility sharing
Scrum
Scrum
A process skeleton that contains sets of practices and predefined roles.
Roles:
- Scrum master (maintains processes)
- Product owner (represents stakeholders and business)
- Team (cross-functional group who do analysis, design, ..)
Scrums are divided into iterations called sprints, which are preceded by a planning meeting, and succeeded by a review or retrospective meeting.
For each sprint, the team creates a potentially deliverable product increment.
- Encourages co-location of all team members
- Requirements churn - empirical approach accepts that problem cannot be fully understood or defined.
XP
eXtreme Programming (XP) stresses customer satisfaction.
Emphasises
- responding to changing customer requirements
- teamwork
- improvement through communication, simplicity, feedback, respect and courage
Unified Process
- Inception
- Understand problem, communicate with customer, plan development
- Elaboration
- Refine and expand requirements, determine high-level design
- Construction
- Major implementation effort, refine design models, test all level, multiple releases
- Transition
- Ready system for production, familarise end users
CMMI
Capability Maturity Model Integration
Defines five maturity levels for a process, and provides criteria to determine if the process is at a certain maturity level.
- Initial
- Managed
- Defined
- Quantitatively Managed
- Optimising
Revision control
Revision control
The process of managing multiple versions of a piece of information.
- tracks history and evolution of a product
- makes it easier to collaborate
- helps to recover from mistakes (reverting)
- allows for simultaneous work on multiple versions of project
RCS (Revision control software)
Git, Mercurial, Subversion, Perforce