Chapter 1: Introduction to Software Engineering
|
Abstract
The term software engineering was coined in 1968 as a response to the desolate state of the art of developing quality software on time and within budget. Software developers were not able to set concrete objectives, predict the resources necessary to attain those objectives, and manage the customers expectations. More often than not, the moon was promised, a lunar rover built, and a pair of square wheels delivered.
The emphasis in software engineering is on both words, software and engineering. An engineer is able to build a high-quality product using off-the-shelf components and integrating them under time and budget constraints. The engineer is often faced with ill-defined problems and partial solutions, and has to rely on empirical methods to evaluate solutions. Engineers working in such application domains as passenger aircraft design and bridge construction have successfully met similar challenges. Software engineers have not been as successful.
The problem of building and delivering complex software systems on time has been actively investigated and researched. Everything has been blamed, from the customer (What do you mean I cant get the moon for $50?) to the soft in software (If I could add that one last feature ...) to the youth of this discipline. What is the problem?
Complexity and change
Useful software systems are complex. To remain useful they need to evolve with the end users need and the target environment. In this book, we describe object-oriented techniques for conquering complex and changing software systems. In this chapter, we provide a motivation for object-oriented techniques and define the basic concepts used throughout this book.