When designing a garden, you begin by formulating your requirements – how large should the grass area be? should you leave a corner to raise potatoes? where should the sand-bin be put? do the requirements interfere with future maintenance work on the house (!)? etc. After that, a design is drawn up, which is carefully documented in a blueprint. Only then will the gardener cut the first sod.
A similar approach is followed when developing software. In a number of phases – requirements engineering, design, implementation, and testing – the software system will take shape. After the software is delivered to the client, it must be maintained. Reiteration of phases occurs because changes have to be incorporated and errors must be corrected. The result is a highly cyclical process, the 'software life cycle'.
The various phases of the initial development cycle are the topics of Chapters 9–13, and Chapter 14 is devoted to software maintenance. In each phase, modeling techniques are used to represent the results of that phase. A sample of well-known modeling techniques is discussed in Chapter 10. In each phase, also, tools are employed. The main classes of tools and their role in the software development process are discussed in Chapter 15.