The field of software engineering (SE) can intuitively be described as the combination of techniques from both the engineering discipline and all aspects software production. This includes all of the development stages from system specification to maintenance and possibly retirement. Alternatively, it may be defined as the “establishment and use of sound engineering principles in order to obtain economically software that is reliable and works efficiently on real machines.”