Download as pdf or txt
Download as pdf or txt
You are on page 1of 54

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

You might also like