The Software Development Approaches below show how the various tasks related to software development can be organized. Typical approaches or paradigms encountered in DoD software development include waterfall, incremental, and spiral as described below. The incremental development approach typically forms the basis for software development within the larger systems-level of Evolutionary Acquisition (EA).
Types of Software Development Approaches
There are three main types of software development approaches. These are:
- Waterfall Approach
- Incremental Approach
- Spiral Approach
Development activities are performed in order, with possibly minor overlap, but with little or no iteration between activities. User needs are determined, requirements are defined, and the full system is designed, built, and tested for ultimate delivery at one point in time. A document-driven approach best suited for highly precedence systems with stable requirements.
The waterfall model is often also referred to as the linear and sequential model, for the flow of activities in this model are rather linear and sequential as the name suggests. In this model, the software development activities move to the next phase only after the activities in the current phase are over. However, like is the case with a waterfall, one cannot return to the previous stage.
Determines user needs and defines the overall architecture, but then delivers the system in a series of increments
(“software builds”). The first build incorporates a part of the total planned capabilities, the next build adds more capabilities, and so on, until the entire system is complete.
A risk-driven controlled prototyping approach that develops prototypes early in the development process to specifically address risk areas followed by an assessment of prototyping results and further determination of risk areas to prototype. Areas that are prototyped frequently include user requirements and algorithm performance. Prototyping continues until high-risk areas are resolved and mitigated to an acceptable level.
During each iteration or loop, the system is explored at greater depth and more detail is added. Appropriate for exploratory projects that are working in an unfamiliar domain or with unproven technical approaches. The iterative nature allows for knowledge gained during early passes to inform subsequent passes. Requires low up-front commitment.