In our daily life we are surrounded by devices like television sets, clocks, DVD players, mobile phones, etc. These devices are actually computer systems that execute software programs in order to perform their functions. The proper working of these devices, therefore, strongly depends on the proper working of the software which these devices execute. Since these devices are proliferating and interacting with other systems in order to serve us in a multitude of ways and circumstances, the quality of software already plays a crucial role in our lives.
Some of these software qualities are directly perceived by the end-users of a software system (for example, performance and reliability), while others are perceived by other people interested in these systems, like maintenance personnel (for example, maintainability).