Chapter 1- Introduction
Software engineering
Hamid Raza Malik
hmalik786@hotmail.com
03228463026
Software engineering
The economies of ALL developed nations are
dependent on software.
More and more systems are software controlled
Software engineering is concerned with theories,
methods and tools for professional software
development.
Expenditure on software represents a significant fraction
of GNP (Gross National Product) in all developed
countries.
What is Software Engineering?
Your thoughts ???
• Software Engineering is the study of techniques to produce
“quality” software. The “quality” software should:
• Perform precisely as required, under all circumstances,
• Be ‘bug-free’ (reasonably !!)
• Be delivered on time, and
• Be delivered within budget.
3
What is Software Engineering? Definitions
• The practical application of scientific knowledge in the design and
construction of computer programs and the associated documentation
required to develop, operate, and maintain them. [Boehm, 1976]
• Application of tools, methods, and disciplines to produce and
maintain an automated solution to a real-world problem. [Blum,
1993]
• Management of people, processes, and products and use of scientific
knowledge to design, construct, validate, and maintain software
products that are reliable, economical, and useful. [Lakhotia, 1995].
4
What is Software Engineering?
u Manage:
• People
• Processes
• Products
u and use scientific knowledge to
• Design
• Construct
• Validate
• Maintain software products
u that are:
• Reliable
• Economical, and Useful
Problem Solving
COMPUTER
CUSTOMER
SCIENCE
Computer
Theories Functions Problem
SOFTWARE
ENGINEERING
Tools and
Techniques to
Solve Problem
Difference between software engineering and
computer science?
Computer science is concerned with theory and
fundamentals; software engineering is concerned with
the practicalities of developing and delivering useful
software.
Computer science theories are currently insufficient to
act as a complete underpinning for software engineering
What is Software?
Software is a set of items or objects
that form a “configuration” that
includes
• programs
• documents
• data ...
What is Software?
• software is engineered
• software doesn’t wear out
• software is complex
• software is a ‘differentiator’
• software is like an ‘aging factory’
Software products
Generic products
The specification of what the software should do is owned by the
software developer and decisions on software change are made
by the developer.
Stand-alone systems that are marketed and sold to any
customer who wishes to buy them.
Examples – PC software such as graphics programs, project
management tools; software for specific markets such as
appointments systems for dentists.
10
Product specification
Customized products
The specification of what the software should do is owned by the
customer for the software and they make decisions on software
changes that are required.
developed for a single customer according to their requirements.
• Examples – e.g. ???
11
kinds of software
specialization interaction
• generic • stand-alone
– word-processor – word-processor
– database – payroll
• customized • embedded
– control system
– washing machine
– business process
– guided missile
+ domain specific
• networked
– SAP (customizable)
– ATM, web browser
Software product
Different from traditional types of products
intangible
• difficult to describe and evaluate
Malleable
human intensive
• involves only trivial “manufacturing” process
Classification
Attributes of Good Software
• Internal vs. external
• External visible to users
• Internal concern developers
• Product vs. process
• Our goal is to develop software products
• The process is how we do it
• Internal qualities affect external qualities
• Process quality affects product quality
Essential attributes of good software
Product characteristic 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.
Efficiency Software should not make wasteful use of system resources such
as memory and processor cycles. Efficiency therefore includes
responsiveness, processing time, memory utilisation, 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.
15
Correctness
• Software is correct if it satisfies the functional
requirements specifications
• assuming that specification exists!
• If specifications are formal, since programs are formal
objects, correctness can be defined formally
• It can be proven as a theorem or disproved by counterexamples
(testing)
Reliability
Software reliability is the probability of failure-free
operation of a computer program for a specified
period in a specified environment.
Reliability is a customer-oriented view of software
quality. It relates to operation rather than design
of the program, and hence it is dynamic rather
than static.
if specs are correct, all correct software is
reliable, but not vice-versa (in practice, however,
specs can be incorrect …)
Idealized situation
Requirements are correct
Reliability
Correctness
Robustness
software behaves “reasonably” even in unforeseen
circumstances (e.g., incorrect input, hardware failure)
Software is deemed to be robust if it can cope with
unexpected or incorrect input. Programs are likely to
encounter incorrect or unexpected data: because of
user error
Usability
Usability is a quality attribute that assesses how easy user
interfaces are to use. The word "usability" also refers to
methods for improving ease-of-use during the design
process.
Example: A computer program that is really simple and easy to
use to perform desired tasks is an example of a program that has
a good usability rating.
Performance
• Performance is an indicator of how well a software system
or component meets its requirements for timeliness.
• Timeliness is measured in terms of response time or
throughput. The response time is the time required to
respond to a request.
• Efficient use of resources
• memory, processing time, communication
• Performance can affect scalability
• a solution that works on a small local network may not work
on a large intranet
Verifiability
• Verifiability relates as much to the specification of a
software system as to the system itself, and it deals
with the ability to show that the system is consistent with
its specification with respect to all specified quality
requirements.
• How easy it is to verify properties
mostly an internal quality
can be external as well (e.g., security critical application)
Portability
• Being able to move software from one machine
platform to another.
• It refers to system software or application software that
can be recompiled for a different platform or to software
that is available for two or more different platforms.
23
Maintainability
• "The ease with which a software system or component
can be modified to correct faults, improve performance
or other attributes, or adapt to a changed environment."
• Maintenance costs exceed 60% of total cost of software
• Three main categories of maintenance
• corrective: removing residual errors (20%)
• adaptive: adjusting to environment changes (20%)
• perfective: quality improvements (>50%)
Maintainability: Can be decomposed as
Reparability
• Reparability involves corrective maintenance.
• A software system is repairable or corrective if it allows the
removal of residual errors present in the product when it is
delivered as well as the errors introduced into the software
during its maintenance.
Evaluability
• ability to adapt sw to environment changes and to improve it
in reasonable time
Reusability
• Existing product (or components) used (with minor
modifications) to build another product
• Reusability is the use of existing assets in some form
within the software product development process;
• These assets are products and by-products of the
software development life cycle and include code,
software components, test suites, designs and
documentation.
Understandability
• Ease of understanding software
• To developers, software understandability is defined
as the complexity and readability of the source code.
• To users, software understandability is defined as the
capability of the software product to enable the user to
understand whether the software is suitable, and how it
can be used for particular tasks.
27
Interoperability
• Ability of a system to coexist and cooperate with other
systems e.g., word processor and spreadsheet
• Interoperability is a characteristic of a product or system
to work with other products or systems.
• Interoperability refers to the basic ability of different
computerized products or systems to readily connect and
exchange information with one another, in either
implementation or access, without restriction.
Programming vs Software Engineering
• Programmers:
• Write code
• Does not require much training
• Work in isolation
• Process not reproducible
• Software Engineers:
Design systems
Have sophisticated training
Use formal methods and techniques
Work in teams
Reproducible process
Software Engineering Paradigms
• The definition of software Engineering can thus said to be the following:
“The skills necessary for software engineers to adequately perform
the roles in software development can said to be two kinds”
• Software Skills:
• This is nut and bolts of actually writing the software.
• Project Management Skills:
• This refers to the how to control the development and subsequent
maintenance of software.
Software Engineering Paradigms
In software Engineering concepts there are three key
elements.
Software
Engineering
Methods Tools Procedures
Problem Solving Approach
• Analyzing the problem
• Break the problem down into sub-problems
• Construction of solutions
• Formation of solution to sub-problems
• Synthesis of the complete solution from sub-solutions
Methods / Tools,
Techniques,
e.g. typewriter
e.g. prepare cake
Solution
Paradigm, e.g. a
Procedures cooking style
e.g. recipe
Problem Solving
Methods: These are the how-to building the software e.g.
1. Project Planning
2. System and software requirement analysis
3. Coding, testing and maintenance
Tools:
These are automated or semi-automated support for
method e.g.
Procedures:
This is glue that holds the methods and tools together
Paradigm:
A particular approach or philosophy for building software
Software Process Activities
• Software specification, where customers and engineers define the
software that is to be produced and the constraints on its operation.
• Software development, where the software is designed and
programmed.
• Software validation, where the software is checked to ensure that it
is what the customer requires.
• Software evolution, where the software is modified to reflect
changing customer and market requirements.
Software Life Cycle / Software Process
• Requirements Phase
• Specification (Analysis) Phase
• Planning Phase
• Design Phase
• Implementation Phase
• Integration Phase
• Maintenance Phase (highest cost among all these phases)
• Retirement
36
Software costs
Software costs often dominate computer system costs.
The costs of software on a PC are often greater than the
hardware cost.
Software costs more to maintain than it does to develop.
For systems with a long life, maintenance costs may be
several times development costs.
Software engineering is concerned with cost-effective
software development.
Software costs
Maintenance is so important, a major aspect of software engineering
consists of techniques, tools, and practices that lead to a reduction in
maintenance cost.
Requirement 2%
Specification 4%
Planning 1%
Design 6%
Module Coding 5%
Maintenance Module Testing 7%
67% Integration 8%
Maintenance 76%
Approximate relative costs of
the phases of the software life cycle.
Scope of Software Engineering
Structured Paradigm Object-Oriented Paradigm
u Requirement Phase u Requirement Phase
u Specification (Analysis) Phase u Object-Oriented Analysis Phase
u Planning Phase
u Planning Phase u Object-Oriented Design Phase
u Design Phase u Object-Oriented Programming
u Implementation Phase Phase
u Integration Phase
u Integration Phase u Maintenance Phase
u Maintenance Phase u Retirement
u Retirement
Comparison of life cycles of structures paradigm and object-oriented paradigm.
What is CASE (Computer-Aided Software
Engineering)
• Software systems which are intended to provide
automated support for software process activities.
CASE systems are often used for method support.
Upper-Case
- Tools to support the early process activities of requirements
and design.
Lower-Case
- Tools to support later activities such as programming,
debugging and testing
Problems: Complexity and Change
Complexity:
• Software systems can include a huge number of functions and
components.
• Many participants with usually different backgrounds participate in the
development of software systems.
• Often no single person can understand the whole system.
• Sometimes systems become so hard to understand that they are never
finished: ‘vaporware’.
Problems: Complexity and Change
Change:
• Requirements are updated when errors are discovered and when
developers get a better understanding of the application.
• Long-term projects involve high staff-turnaround.
• Often, important technological changes occur during the
development of a software system.
• The client’s needs may change during the development process.
• It is impossible to specify a static set of requirements.
Software Challenges
How do we ensure the quality of the software that
we produce?
How do we meet growing demand and still
maintain budget control?
How do we upgrade an aging "software plant?"
How do we avoid disastrous time delays?
How do we successfully institute new software
technologies?
General issues that affect most software
Heterogeneity
Increasingly, systems are required to operate as distributed
systems across networks that include different types of computer
and mobile devices. (IOS, Android, Symbian).
Business and social change
Business and society are changing incredibly quickly as
emerging economies develop and new technologies become
available. They need to be able to change their existing software
and to rapidly develop new software. (From symbian to Android
and IOS)!.
Security and trust
As software is available in all aspects of our lives, it is essential
that we can trust that software. (remote software systems).
46
Application types
Stand-alone applications
These are application systems that run on a local computer,
such as a PC. They include all necessary functionality and do
not need to be connected to a network.
Interactive transaction-based applications
Applications that execute on a remote computer and are
accessed by users from their own PCs or terminals. These
include web applications. (Online Banking systems, Hotel
reservations).
Embedded control systems
These are software control systems that control and manage
hardware devices. Examples??
47
Application types
Batch processing systems
These are business systems that are designed to process data
in large batches. They process large numbers of individual
inputs to create corresponding outputs. Eg. Periodic billing
systems, such as phone billing systems, and salary payment
systems.
Entertainment systems
These are systems that are primarily for personal use and which
are intended to entertain the user.
Systems for modelling and simulation
These are systems that are developed by scientists and
engineers to model physical processes or situations, which
include many, separate, interacting objects.
48
Software engineering and the web
The Web is now a platform for running application, and organizations
are increasingly developing web-based systems rather than local
systems.
Web services 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’.
Cloud computing involves deploying groups of remote servers and
software networks that allow centralized data storage and online
access to computer services or resources 49
Web software engineering
Software reuse is the dominant approach for constructing web-based
systems. (Online Forums)
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.
50
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 system.
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 system.
51
Frequently asked questions (FAQ) about software
engineering
Question Answer
What is software? Computer programs and associated documentation.
Software products may be developed for a particular
customer or may be developed for a general market.
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 is software engineering? Software engineering is an engineering discipline that is
concerned with all aspects of software production.
What are the fundamental software Software specification, software development, software
engineering activities? validation and software evolution.
What is the difference between software Computer science focuses on theory.
engineering and computer science? software engineering is concerned with the practicalities
of developing and delivering useful software.
What is the difference between software System engineering is concerned with all aspects of
engineering and system engineering? computer-based systems development including
hardware, software and process engineering. Software
engineering is part of this more general process.
52
Frequently asked questions (FAQ) about software
engineering
Question Answer
What are the key challenges facing Dealing with increasing diversity, demands for reduced
software engineering? delivery times and developing trustworthy software.
While all software projects have to be professionally
managed and developed, different techniques are
What are the best software engineering appropriate for different types of system.
techniques and methods?
For example, games should always be developed using a
series of prototypes, whereas safety critical control
systems require a complete and analyzable specification
to be developed. You can’t, therefore, say that one method
is better than another.
53
Key points
Software engineering is an engineering discipline that is
concerned with all aspects of software production.
Essential software product attributes are maintainability,
dependability and security, efficiency and acceptability.
The high-level activities of specification, development,
validation and evolution are part of all software
processes.
54
Key points
There are many different types of system and each
requires appropriate software engineering tools and
techniques for their development.
The fundamental ideas of software engineering are
applicable to all types of software system.
55
Thank You