Software Project Life Cycle
There are many different software project models. The two main competing models include:
- The Waterfall Process - The traditional model where one task is completed at a time with each task subsequent to the first.
- System's Engineering (Component Assembly model) - An linear process which relies heavily upon documentation as the project progresses. Verification is used heavily to be sure the delivered system meets the required specifications and documentation. This model assumes that the project requirements are fixed.
- Iterative Development - Development which assumes that the project requirements are not set in stone and gradually change. It allows for the project to cycle through various phases as requirements change. Includes:
- The Spiral Model Approach - The project repetitively goes through four phases which are identify, design, construct, and evaluate.
- Rapid Prototyping (Rapid Application Development - RAD) - A process where it is accepted that the requirements will change and the project cycle starts almost immediately with development. Feedback with the customer is relied on to keep the project on track.
- Incremental Model - The project is divided into increments. In each increment several waterfall project phase tasks are performed. After planning is done, phases including analyze, design, and development (build) are performed. Each increment has a specific goal to create a certain functional part of the project and the system is put into production when the first increment is complete.
- Concurrent Development Model - Allows multiple functions of a design to be developed in parallel at the same time. It can be effective to rapidly develop a well planned large project but has high risk for large projects unless communication in the organization is very effective.
Several software project life cycles include a few more or less phases such as verification, specification, analysis, and documentation. Some of these activities may be covered in other parts of the project life cycle. For example, documentation should be done during the entire life cycle so I would not consider it as it's own separate life cycle. The Software project lifecycle generally includes the following phases:
- Planning Phase - The planning phase is where responsibilities are and roles are determined. Project goals are specified and project stakeholders are identified. Project deliverables and basic project requirements should be defined including documentation to be created. The project risk should be evaluated and mitigated where possible or the risk should be accepted by the stakeholders. An initial budget should be created. Major phases of the project should be identified and scheduled.
- Analysis or Requirements Phase - Requirements are further determined and documented. The technical team should work with the customers during this part of the project life cycle to get complete requirements. During this phase or the next phase a specific description of the software to be written (specification) should be created.
- Design Phase - Provide a design document showing how the design is planned. During this cycle the designers determine the structure of the code, how it will work, and the main modules. Some experts categorize this part of the cycle into various sub phases
- Development/Coding/Construction - The code is written according to the design document. Several software reviews should be done during the coding phase.
- Testing Phase - A test plan is required, and one or more test results reports should be created as software is tested.
- Implementation Phase - The customer manuals are created and delivered with the software.
- Maintenance Phase - Includes any software repairs or modifications to add capabilities or change program operation.
Documentation is not listed as a separate phase because documentation should be generated during each phase as work is done. Much documentation is created during the testing and implementation phase as the software reaches maturity. A document should be provided at the end of each phase.