The following provides a generalization of the software development cycle.
- user (i.e. customer, client, boss, instructor, etc.) generates requirements that state what a program should do
- programmer reviews the requirements to be sure they understand what the user wants
- once the user and programmer agree about the requirements, the programmer designs the program (algorithms/data structures/classes)
- the design is implemented (i.e. translated into source code)
- the program is debugged and unit tested
- integration (program is "added" to the system)
- system testing
System testing can be split into the following parts.
- verification: did we solve the correct problem?
- validation: did we solve the problem correctly?
- stress: can the system be broken?
The system tester is your friend; not your enemy.
Note on terminology: Programs do not have bugs -- they have defects.
Maintenance programmers are not second class citizens.
The earlier defects are discovered in the software development cycle, the less expensive they are to fix. The most expensive defects are those found by the customer.
Software Engineering chapter authored by Paul Vixie from the O'Reilly book OpenSources.
DevShed.com, on 28 August 2002, started a resource on The Art of Software Development. Part one is about Understanding Need.
USDOJ.gov writes about the software development lifecycle.