1.1 Introduction


Definition
Software engineering deals with all aspects of software development including all stages of software
development life cycles.
From the early stages of system specification through maintenance of the system after putting it into
execution.
Software engineering field has evolved very rapidly in a very short period of time compared to classical
engineering fields including civil or electrical engineering.
In the early stages of software engineering, most of the programing was done by scientists trying to solve
specific, relatively small mathematical problems.
These programs were much smaller than current software applications and less demanding in regards
to computing resources including memory space and processing speed.
Today we often build large software systems, in terms of size, complexity and computing resources.
In addition, software engineering is involved in a wide range of topics including scientific, engineering and
business.

1.1 Introduction


About forty years ago, the term "software engineering" meant to establish and use of sound engineering
principles in order to efficiently and economically obtain software that is reliable and efficient when run by
different computer platforms.
As an engineering discipline, software engineering is concerned with the analysis, design, production, and
quality-assurance processes involved in writing good software systems.
Software engineering aids in the production of software that is high in quality, designed, and produced in an
organized and logical way.
It is concerned with the entire software development process from initial design to long-term
maintenance.
In addition, software engineering is concerned with management, quality, novelty, creativity, standards,
individual skills, teamwork and professional practice.
Software engineering began to evolve as a well-defined and distinguished science which could be offered in
computer science and engineering departments in academic institutions.
Software engineering is relatively a young and new discipline, which was classified as an art and which
transited to the engineering discipline and is becoming a matured engineering discipline.

1.1 Introduction


The dictionary definition of "engineering" is the "application of scientific and mathematical principles toward
practical ends".
Software engineering applies scientifically developed and mathematically defined algorithms, functional
design methods, quality-assurance methods, and other practices to develop software products and services.
As a discipline, software engineering is the engineering of software that builds on computer science and
mathematics.
The main steps of software development life cycle include:
Requirements engineering (requirements elicitation; requirements definition and specification)
Design (basic structure based on requirements to modules and choice of algorithms)
Construction (detailed design, coding, debugging, testing while programming, and performance
optimization)
Testing (includes detecting defects and evaluating features)
Evolution and maintenance (software and all of its documentation)

1.1 Introduction


Software engineering evolution was driven by the following motivations and challenges especially for large-
scale software applications:
Software engineering applies scientifically developed and mathematically defined algorithms, functional
design methods, quality-assurance methods, and other practices to develop software products and services.
As a discipline, software engineering is the engineering of software that builds on computer science and
mathematics.
Difficulty of software projects meeting delivery deadlines.
High cost of software after extensive testing.
Errors in delivered software after extensive testing.
High cost in time and effort in maintaining software.
Problems measuring progress during software development and maintenance.
Many definitions were given to software engineering which has evolved over time by different scholars,
authors and organizations. In the following, we present some of the popular and common ones:

1.1 Introduction


IEEE defines software engineering as follows: "Software engineering is the application of a systematic
disciplined quantifiable approach to the development, operation and maintenance of software; the
application of engineering to software".
Bauer, F. L. in Software Engineering. Information Processing 71., 1972. defines software engineering as
follows: "The establishment and use of sound engineering principles (methods) in order to obtain
economically software that is reliable and works on real machines".
Fairley, R. Software Engineering Concepts. New York: McGraw-Hill, 1985 defines Software engineering
as follows: "The technological and managerial discipline concerned with systematic production and
maintenance of software products that are developed and modified on time and within cost estimates".
WebReference Webopaedia defines software engineering as follows: "Software engineering is the
computer science discipline concerned with developing large applications. Software engineering covers
not only the technical aspects of building software systems, but also management issues, such as
directing programming teams, scheduling, and budgeting".
SEI software engineering definition from 1990 SEI Report on Undergraduate Software Engineering
Education (CMU/SEI-90-TR-003): "Engineering is the systematic application of scientific knowledge in
creating and building cost-effective solutions to practical problems in the service of mankind. Software...

1.1 Introduction


...engineering is that form of engineering that applies the principles of computer science and
mathematics to achieving cost-effective solutions to software problems".

Why is software engineering important?
It is very expensive and horrendous to design software systems that do not work or that include bugs, errors
and run wrongly.
The developing entity of such a software system could get bankrupt and loose business.
Such a software developer could be involved in legal cases in court that cost them a huge amount of
money.
The profit that could be earned by the software developer depends on producing software efficiently with
minimal development cost and maintenance effort.
Software reuse which results from the modular design and object-oriented design techniques is an economic
necessity.
Selection of the correct lifecycle is therefore extremely important to the success of the overall software project
because it affects cost, time and effort required to design software products.

1.1 Introduction


Software systems when installed and configured and become under operation must be maintained to keep
running and to minimize their breakdown.
However, as a result of constant software maintenance, a sense of disorder may arise in the system in
question.
On the other hand, without proper maintenance and care, the software can become unmanageable and
unusable.
When software systems are installed for the first time, they rarely work without problem.
They usually have bugs, vulnerabilities and problems.
Very few systems work correctly first time round.
In addition old software systems that used to run on old computer platform must be rebuilt or redesigned to be
usable on modern computer systems.