A generic software development life cycle
Analysis of user requirements
During this stage, the problem is defined so that a clear understanding can be gained of what the system should do, i.e. what the inputs to the system are, what the output should be, and the operational parameters within which the system is expected to work. If the new system is to replace an existing system, the problem may be defined in terms of the additional or enhanced functionality that is required.
In this stage, a solution to the problem is designed by defining a logical sequence of steps that will achieve each of the stated system objectives. Such a sequence of steps is often referred to as an algorithm . Some of the methods used to define program algorithms are described later in this section, and include flowcharts and pseudocode. These tools allow the program designer to break a given problem down into a series of small tasks which the computer can perform to solve the problem. The user interface will also be designed during this stage, and will determine how input is obtained, how output is displayed, and what controls are available to the user.
This stage, sometimes known as the implementation stage, is where the algorithms are translated into a programming language, and tends to be the longest phase of the development life-cycle. In this case, we are using Visual Basic to write the program.
The documentation of the program fulfils two main objectives. The first is to provide a technical reference to facilitate ongoing maintenance and development of the software itself. The second is to provide user documentation, i.e. a set of instructions that inform the user about the features of the software and how to use them. The aim of software testing is to find any errors ("bugs") in the program, to eliminate those errors (a process known as "debugging"), and as far as is reasonably practicable should be sufficiently rigorous to ensure that the software will function as expected under all forseeable circumstances.
Once the software has been "rolled out" and any necessary user training has been completed, it will be necessary to monitor the performance of the system over time to ensure that it is behaving as expected. The system will need to be maintained, and parts of it will need to be upgraded from time to time to handle evolving user needs or to cope with new problems. Eventually, as the system ages, it may no longer be able to adequately cope with the demands of a growing number of users, take advantage of advances in hardware technology, or adapt to a constantly changing environment. When this time comes, the system will need to be decommissioned and replaced by a new system. Hence, the software development life cycle will begin again.