Software is everywhere. We love it when it makes our lives
easier. We hate it when it doesn't work the way we expect—or
when its design is not sufficiently intuitive or robust.
Software is in our military systems—satellites, tanks, aircraft
and ships—but it's also in our everyday life: toasters,
automobiles, banks, and medical equipment. Software is important
and its importance is growing. Software allows us to personalize
and customize many systems. It brings increasingly complex
integrated circuits to life and harnesses their power to help
us. It allows us to communicate more efficiently, to live in a
more connected world, to operate businesses more effectively.
Multi-national businesses have software-intensive enterprise
systems while small businesses and individuals use the Internet
for ever growing applications. Unfortunately, there is a gap
between the state of the art and the state of the practice of
software engineering. Many senior managers don't understand
software engineering and many software prac