Software
Engineering
Dr Samar Awad
Lecture_1
Faculty of Engineering,
Suez Canal University
2
Course
Syllabus
Chapter 1: Introduction
Chapter 2: Software Processes
Chapter 3: Agile Software Development
Chapter 4: Requirements Engineering
Chapter 5: System Modeling
Chapter 6: Architectural Design
Chapter 7: Design and Implementation
Chapter 8: Software Testing
Chapter 9: Software Evolution
3
Objectives
Understand what software engineering is and why
it is
important;
Know the answers to key questions that provide
an
introduction to software engineering;
Understand some ethical and professional issues
that are
important for software engineers.
To introduce three case studies that are used in 4
Why Software
Engineering?
Software Engineering is an engineering discipline that is
concerned with all aspects of software production from the
early stages of system specification through to maintaining the
system after it has gone into use.
The economies of ALL developed nations are dependent on
software.
More and more systems (employed for example in
infrastructures, utilities, industrial manufacturing and
entertainment, internet, and telecommunications) are
software-controlled
Software engineering is concerned with theories, methods, and
tools for professional software development.
Expenditure on software represents a significant fraction of 5
The Ariane 5 Rocket
Disaster
On June 4, 1996, an unmanned Ariane 5 Rocket
launched by the European Space Agency exploded
just forty seconds after its liftoff.
The failure results in a loss of more than $370
million.
The failure due to an unhandled floating-point
exception.
A 64-bit floating-point number was converted to a 16-bit
signed integer
Video of the crashed
rocket
[Link]
&t=19s
6
Software
Costs 💰
• Roughly 60% of software costs are development
costs, and 40% are testing costs. For custom
software, the cost of evolution often exceeds the
cost of development.
• For systems with a long life, maintenance costs
may be several times the development costs.
• The costs of software on a PC are often greater
than the hardware cost.
• Software costs control computer system costs.
• Software engineering is concerned with cost-
effective software development.
7
Causes of software project
failure
• Increasing demands (system complexity):
As software engineering evolves, systems must be built faster,
with greater complexity, and offer new capabilities once
thought impossible.
Traditional methods cannot cope with these demands, making
it essential to develop new techniques for speed, scalability,
and innovation.
• Low expectations (failure to use software
engineering methods:
It is relatively easy to write computer programs without using
software engineering methods and techniques. Many
companies have drifted into software development as their
products and services have evolved. They do not use software
engineering methods in their everyday work. Consequently,
their software is often more expensive and less reliable than it
should be. We need better software engineering education and
training to address this problem. 8
Programming vs. Software
Engineering
🔹 Software Engineering / هندسة البرمجيات
Professional activity / نشاط مهني
Developed by teams / ُتطَّور بواسطة فرق عمل
Requires maintenance & evolution / تحتاج إلى صيانة وتطور
مستمر
🔹 Scope of Software / نطاق البرمجيات
More than just code / ليست مجرد كود
Includes configuration files, documentation, manuals,
websites ، أدلة المستخدم، وثائق النظام،تشمل ملفات التهيئة
والمواقع اإللكترونية
🔹 Key Difference / الفرق األساسي
Personal software → no extra docs / البرمجيات الشخصية → ال
توثيق إضافي
Professional software → must include docs & support /
البرمجيات المهنية → يجب أن تتضمن توثيقًا ودعمًا
9
❓ Frequently Asked Questions about Software
Engineering
What is software engineering?
Computer programs and associated documentation.
What are the attributes of good software?
Good software should deliver the required functionality and performance to the user and
should be maintainable, dependable, and usable.
What are the fundamental software engineering activities?
1. Software specification: where customers and engineers define the software
to be produced and the constraints on its operation.
2. Software development: where software is designed and programmed.
3. Software validation: where software is checked to ensure that it is what the
customer required.
4. Software evolution: where software is modified to reflect changing
customer and market.
What is the difference between software engineering and computer science?
Computer science focuses on theory and fundamentals.
Software engineering is concerned with the practicalities of developing and
delivering useful software.
10
❓ Frequently Asked Questions about Software
Engineering
What is the difference between software engineering and system engineering?
System engineering is concerned with all aspects of computer-based systems
development, including hardware, software, and process engineering.
Software engineering is part of this more general process.
What are the key challenges facing software engineering?
Coping with increasing diversity, demands for reduced delivery times, and
developing trustworthy software.
What are the best software engineering techniques and methods?
Different software systems require different development techniques, as
no single method is universally superior. While all projects must be
professionally managed, the chosen approach depends on the system type.
For instance, games are best developed through iterative prototypes, whereas
safety-critical systems demand complete, analyzable specifications to ensure
reliability and safety.
What differences has the Web made to software engineering?
The Web has led to the availability of software services and the possibility of
developing highly distributed service-based systems. Web-based systems
development has led to important advances in programming languages and 11
Software Products
01
Generic products
stand-alone systems that are 02
produced by a development Customized (or bespoke)
organization and sold on the open products
market to any customer who can These are systems that are
buy them. commissioned by a particular
Examples of this type of product customer. A software contractor
include software for PCs such as develops the software especially
databases, word processors, for that customer.
drawing packages, and project- Examples of this type of software
management tools. It also includes include control systems for
so-called vertical applications electronic devices, systems
designed for some specific written to support a particular
purpose, such as library business process, and air traffic
information systems, accounting control systems.
systems, or systems for
maintaining dental records.
12
Essential attributes of good
software
Product characteristics Description
Maintainability Software should be written in such a way so that it can
evolve to meet the changing needs of customers. This is a
critical attribute because software change is an inevitable
requirement of a changing business environment.
Dependability and Software dependability includes a range of characteristics,
security including reliability, security, and safety. Dependable
software should not cause physical or economic damage in
the event of system failure. Malicious users should not be
able to access or damage the system.
Efficiency Software should not waste system resources, such as
memory and processor cycles. Efficiency, therefore, includes
responsiveness, processing time, memory utilization, etc.
Acceptability Software must be acceptable to the type of users for which it
is designed. This means that it must be understandable,
usable, and compatible with other systems that they use.
13
Importance of software
engineering
Software engineering is an engineering discipline
that is concerned with all aspects of software
production from the early stages of system
specification through to maintaining the system after it
has gone into use.
Engineering discipline
Using appropriate theories and methods to solve
problems, bearing in mind organizational and
financial constraints.
All aspects of software production
Not just the technical process of development.
Additionally, project management and the
development of tools, methods, and other support 14
Importance of software
engineering
More and more, individuals and society rely on
advanced software systems. We need to be able
to produce reliable and trustworthy systems
economically and quickly.
It is usually cheaper, in the long run, to use
software engineering methods and techniques
for software systems rather than just write the
programs as if it was a personal programming
project. For most types of systems, the majority
of costs are the costs of changing the software
after it has gone into use.
15
General issues that affect many different types
of software
Heterogeneity
0
Increasingly, systems are required to operate as distributed
1
systems across networks that include different types of computer
and mobile devices.
Business and social change
0
Business and society are changing incredibly quickly as emerging
2
economies develop and new technologies become available.
They need to be able to change their existing software and to
rapidly develop new software.
Security and trust
0
As software is intertwined with all aspects of our lives, it is
3
essential that we can trust that software.
We have to make sure that malicious users cannot attack our
software and that information security is maintained..
16
Software engineering
diversity
There are no universal set of software engineering
methods and techniques that are suitable for all
systems and all companies.
Perhaps the most significant factor in determining which
software engineering methods and techniques are most
important is the type of application that is being
developed.
0 There are many
Stand-alone different types of applications,
applications
including:
These are application systems that run on a local
1
computer, such as a PC. They include all necessary
functionality and do not need to be connected to a
network. Examples of such applications are office
applications on a PC, CAD programs, photo
manipulation software, etc. 17
Software engineering
diversity
Interactive transaction-based applications
0 These are applications that execute on a remote
2 computer and that are accessed by users from their own
PCs or terminals.
These include web applications such as e-commerce
applications, where you can interact with a remote system to
buy goods and services.
They often incorporate a large data store that is accessed
0 and updated control
Embedded in eachsystems
transaction, such as in internet
banking.
These are software control systems that control and
3 manage hardware devices.
Examples of embedded systems include the software in a
mobile (cell) phone, software that controls anti-lock braking
in a car, and software in a microwave oven to control the
cooking process. 18
Software engineering
diversity
Batch processing systems
These are business systems that are
0 designed to process data in large batches. Entertainment systems
4 They process large numbers of individual 0 These are systems that are primarily for
inputs to create corresponding outputs. personal use and which are intended to
Examples of batch systems include periodic 5 entertain the user. e.g., games.
billing systems, such as phone billing
systems, and salary payment systems.
Data collection systems
0 Systems for modeling and 0 These are systems that collect data
simulation
6 These are systems that scientists and 7 from their environment using a set of
sensors and send that data to other
engineers develop to model physical
systems for processing.
processes or situations.
19
Software engineering
diversity
Systems of systems
0 These are systems that are composed of a number of other
8 software systems. Some of these may be generic software
products, such as a spreadsheet program. Other systems in
the assembly may be specially written for that
environment.
The boundaries between these system types are blurred.
If you developed a game for a mobile(cell) phone. You have to take into
account the same constraints(power, hardware interaction) as developers of
the phone software.
Batch processing systems are often used in conjunction with web-based
systems.
20
Software engineering
fundamentals
Some fundamental principles apply to all types of
software systems, irrespective of the development
techniques used:
Systems should be developed using a managed and
understood development process. Of course, different
processes are used for different types of software.
Dependability and performance are important for all types
of systems.
Understanding and managing the software specification
and requirements (what the software should do) are
important.
Where appropriate, you should reuse software that has
already been developed rather than write new software.
21
Software engineering and
the web
The Web is now a platform for running
applications, and organizations are increasingly
developing web-based systems rather than local
systems.
Web services (discussed in Chapter 19) allow
application functionality to be accessed over the
web.
Cloud computing is an approach to the provision
of computer services where applications run
remotely on the ‘cloud’.
Users do not buy software but pay according to use.
22
Web software engineering
Software reuse is the dominant approach for
constructing web-based systems.
When building these systems, you think about how you can
assemble them from pre-existing software components and
systems.
Web-based systems should be developed and
delivered incrementally.
It is now generally recognized that it is impractical to specify
all the requirements for such systems in advance.
User interfaces are constrained by the capabilities of
web browsers.
Technologies such as AJAX allow rich interfaces to be created
within a web browser but are still difficult to use. Web forms
with local scripting are more commonly used.
23
Web-based software
engineering
Web-based systems are complex distributed systems,
but the fundamental principles of software
engineering discussed previously are as applicable to
them as they are to any other types of systems.
The fundamental ideas of software engineering,
discussed in the previous section, apply to web-based
software in the same way that they apply to other
types of software systems.
24
Web-based software
engineering
Web-based systems are complex distributed systems,
but the fundamental principles of software
engineering discussed previously are as applicable to
them as they are to any other types of systems.
The fundamental ideas of software engineering,
discussed in the previous section, apply to web-based
software in the same way that they apply to other
types of software systems.
25