Effective software development processes remain the holy grail of software development and over the years many contenders have emerged and then gone out of fashion. These vary in the detail of what activities they prescribe, their related artefacts, how the activities should be carried out in relation to one another, and how often each activity should be revisited. There are, however, some fundamental development activities that are well understood and common to most approaches. In very broad terms:
- Analysis involves understanding the problem which the software is intended to solve, i.e., the requirements in context, with validation as the means to check that understanding.
- Design involves describing, conceptually, a software solution that meets the requirements of the problem.
- Implementation involves realising such a solution in software.
- Testing involves making sure that the solution has certain inherent qualities, with verification as a means to check its adequacy with respect to the specified requirements and validation as a means to check that the solution does address the problem.
- Deployment involves making the developed solution available in its context of operation and use.