You are on page 1of 50

Chapter 1

Software & Software Engineering


Software Engineering: A Practitioners Approach,
by Roger S. Pressman

What is
The product
that software professionals build and then support
Software?
over the long term.
Software encompasses: (1) instructions (computer programs)
that when executed provide desired features, function, and
performance; (2) data structures that enable the programs to
adequately store and manipulate information and (3)
documentation that describes the operation and use of the
programs.

Software products
Generic products
Stand-alone systems that are marketed and sold to any customer
who wishes to buy them.
Examples PC software such as editing, graphics programs,
project management tools; CAD software; software for specific
markets such as appointments systems for dentists.

Customized products
Software that is commissioned by a specific customer to meet
their own needs.
Examples embedded control systems, air traffic control
software, traffic monitoring systems.

Why Software is Important?


The economies of ALL developed nations are dependent on
software.
More and more systems are software controlled (transportation,
medical, telecommunications, military, industrial, entertainment)
Software engineering is concerned with theories, methods and tools
for professional software development.
Expenditure on software represents a significant fraction of GNP in
all developed countries.
* Gross national product (GNP) is the market value of all the products and services
produced in one year by labor and property supplied by the residents of a country.

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.

Features of Software?
Its characteristics that make it different from other things human being
build.
Features of such logical system:
Software is developed or engineered, it is not manufactured in the
classical sense which has quality problem.
Software doesn't "wear out. but it deteriorates (due to change). Hardware
has bathtub curve of failure rate ( high failure rate in the beginning, then drop to
steady state, then cumulative effects of dust, vibration, abuse occurs).

Although the industry is moving toward component-based construction


(e.g. standard screws and off-the-shelf integrated circuits), most
software continues to be custom-built. Modern reusable components
encapsulate data and processing into software parts to be reused by
different programs. E.g. graphical user interface, window, pull-down
menus in library etc.

Wear vs.
Deterioration

Wear vs.
Deterioration

Failure
rate

increased failure
rate due to side effects

change
actual curve

idealized curve
Time

Software
Applications

1. System software: such as compilers, editors, file management utilities


2. Application software: stand-alone programs for specific needs.
3. Engineering/scientific software: Characterized by number crunchingalgorithms. such
as automotive stress analysis, molecular biology, orbital dynamics etc
4. Embedded software resides within a product or system. (key pad control of a
microwave oven, digital function of dashboard display in a car)
5. Product-line software focus on a limited marketplace to address mass consumer
market. (word processing, graphics, database management)
6. WebApps (Web applications) network centric software. As advancement in web based
languages emerges, more sophisticated computing environments is supported integrated
with remote database and business applications.
7. AI software uses non-numerical algorithm to solve complex problem. Robotics, expert
system, pattern recognition game playing

SoftwareNew Categories

Open world computingpervasive, distributed


computing
Ubiquitous computingwireless networks
Netsourcingthe Web as a computing engine
Open sourcefree source code open to the
computing community
Also
Data mining
Grid computing
Cognitive machines
Software for nanotechnologies

Legacy Software
Why must it change?

software must be adapted to meet the needs of new


computing environments or technology.
software must be enhanced to implement new business
requirements.
software must be extended to make it interoperable with
other more modern systems or databases.
software must be re-architected to make it viable within a
network environment.

Software Engineering

Some realities:

a concerted effort should be made to understand the


problem before a software solution is developed
design becomes a pivotal activity
software should exhibit high quality
software should be maintainable

The seminal definition:

[Software engineering is] the establishment and use of


sound engineering principles in order to obtain
economically software that is reliable and works efficiently
on real machines.

These slides are designed to accompany Software Engineering: A Practitioners Approach, 7/e
(McGraw-Hill 2009). Slides copyright 2009 by Roger Pressman.

Software Engineering

The IEEE definition:

Software Engineering: (1) The application of a systematic,


disciplined, quantifiable approach to the development,
operation, and maintenance of software; that is, the
application of engineering to software. (2) The study of
approaches as in (1).

These slides are designed to accompany Software Engineering: A Practitioners Approach, 7/e
(McGraw-Hill 2009). Slides copyright 2009 by Roger Pressman.

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 system, the majority of
costs are the costs of changing the software after it has gone
into use.

FAQ about software engineering


Question

Answer

What is software?

Computer programs, data structures 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 is the difference between software Computer science focuses on theory and fundamentals;
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.

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
security

Software dependability includes a range of characteristics


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 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.

Software Engineering

A Layered Technology
tools
methods
process model
a quality focus

Any engineering approach must rest on organizational commitment to quality which fosters a
continuous process improvement culture.
Process layer as the foundation defines a framework with activities for effective delivery of
software engineering technology. Establish the context where products (model, data, report, and
forms) are produced, milestone are established, quality is ensured and change is managed.
Method provides technical how-tos for building software. It encompasses many tasks including
communication, requirement analysis, design modeling, program construction, testing and
support.
Tools provide automated or semi-automated support for the process and methods.

A process is a collection of activities, actions and tasks


that are performed when some work product is to be
created. It is not a rigid prescription for how to build
computer software. Rather, it is an adaptable approach
that enables the people doing the work to pick and choose
the appropriate set of work actions and tasks.
Purpose of process is to deliver software in a timely
manner and with sufficient quality to satisfy those who
have sponsored its creation and those who will use it.

Software Process

A Process Framework

Communication: communicate with customer to understand objectives and gather


requirements
Planning: creates a map that defines the work by describing the tasks, risks and
resources, work products and work schedule.
Modeling: Create a sketch, what it looks like architecturally, how the
constituent parts fit together and other characteristics.
Construction: code generation and the testing.
Deployment: Delivered to the customer who evaluates the products and provides
feedback based on the evaluation.
These five framework activities can be used to all software development
regardless of the application domain, size of the project, complexity of the efforts
etc., though the details will be different in each case.
For many software projects, these framework activities are applied iteratively as
a project progresses. Each iteration produces a software increment that provides a
subset of overall software features and functionality.

Five Activities of a Generic


Process framework

Umbrella Activities
Complement the five process framework activities and help team manage and control
progress, quality, change, and risk.
Software project tracking and control: assess progress against the plan and take
actions to maintain the schedule.
Risk management: assesses risks that may affect the outcome and quality.
Software quality assurance: defines and conduct activities to ensure quality.
Technical reviews: assesses work products to uncover and remove errors before
going to the next activity.
Measurement: define and collects process, project, and product measures to ensure
stakeholders needs are met.
Software configuration management: manage the effects of change throughout the
software process.
Reusability management: defines criteria for work product reuse and establishes
mechanism to achieve reusable components.
Work product preparation and production: create work products such as models,
documents, logs, forms and lists.

The prescriptive process models stress detailed definition,


identification, and application of process activates and tasks. Intent is
to improve system quality, make projects more manageable, make
delivery dates and costs more predictable, and guide teams of
software engineers as they perform the work required to build a
system.
Unfortunately, there have been times when these objectives were not
achieved. If prescriptive models are applied dogmatically (strict) and
without adaptation, they can increase the level of bureaucracy.
Agile process models emphasize project agility and follow a set
of principles that lead to a more informal approach to software
process. It emphasizes maneuverability and adaptability. It is
particularly useful when Web applications are engineered.

Prescriptive and Agile


Process Models

How does the practice of software engineering fit in the


process activities mentioned above? Namely,
communication, planning, modeling, construction and
deployment.
George Polya outlines the essence of problem solving,
suggests:
1. Understand the problem (communication and analysis).
2. Plan a solution (modeling and software design).
3. Carry out the plan (code generation).
4. Examine the result for accuracy (testing and quality assurance).

The Essence of Practice

Software Engineering Paradigms


Data Stru

Plan

Req.
Spec

Design

Listing

Test Spec

Workin
g Pgm

The Classic Life Cycle Model


Introduction:
Also called as the waterfall model.
This is the oldest and most widely used paradigm for
software engineering.
The life cycle paradigm demands a systematic,
sequential approach to software development.
This begins with the system level and progresses
through analysis, design, coding, testing and
maintenance.

The Classic Life Cycle Model


System
Engineering
Analysis
Design
Coding
Testing
Maintenance

The Classic Life Cycle Model


Advantages.
- This is the simplest model.
- It provides a template into which methods for
analysis, design, coding, testing and maintenance can
be placed.
- The steps of this are very similar to the generic steps.
- This remains the most widely used procedural model
for software engineering.

The Classic Life Cycle Model


Disadvantages.
- Real projects rarely follow the sequential flow that
the model proposes.
- Iteration always occurs and creates problems in the
application of the paradigm.
- It is difficult for the customer to state all
requirements explicitly.
- The customer must have patience. A working version
of the program will not be available until late in the
project time span.

Prototyping
Introduction:
This is process that enables the developer to create a model of
the software that must be built.
The model takes one of three forms:
1) a paper prototype
2) a working prototype
3) an existing program

Prototype Model - Reasons

Useful in developing the Graphical User Interface


(GUI)part of a system - valuable for gaining a better
understanding of the customers needs
used when the technical solutions are unclear tothe
development team (response time of a hardware
controller or the efficiency of a sorting algorithm)
one must plan to throw away the first product inorder to
develop a good product later (prototype)

Prototyping
Build/Revise
mock up

Listen to
Customer

Customer
test-drives
mock up

Prototyping
Advantages:
This model serves as a mechanism for identifying
software requirements.
The prototype is tuned to satisfy the needs of the
customer while at the same time enabling the
developer to better understand what needs to be done.
Because of the working prototype, the developer
attempts to make use of existing program fragments or
applies tools.

Advantages of Prototype Model

Suitable for large systems


Easy and quick to identify customer requirements
Customers can validate the prototype at the earlier
stage
User training to use the system.
User services determination.
System training.
Quality of software is good.

Advantages of Prototype Model

Requirements are not freeze.


Good to deal with the following cases:

-Customer cannot provide the detailed requirements

-Very complicated system-user interactions


-Use new technologies, hardware and algorithms
-Develop new domain application systems

Prototyping
Disadvantages:
The customer sees the working version of the
software, unaware that the prototype is held together.
In the rush to get it working we havent considered
overall S/w quality or long-term maintainability.
The developer makes implementation compromises in
order to get a prototype working quickly.

Spiral development
Process is represented as a spiral rather than as a
sequence of activities with backtracking.
Each loop in the spiral represents a phase in the
process.
No fixed phases such as specification or design loops in the spiral are chosen depending on what is
required.
Risks are explicitly assessed and resolved throughout
the process.

Objective setting
Specific objectives for the phase are identified.

Risk assessment and reduction


Risks are assessed and activities put in place to reduce the key
risks.

Development and validation


A development model for the system is chosen which can be
any of the generic models.

Planning
The project is reviewed and the next phase of the spiral is
planned.

Spiral model sectors

Evolutionary Models: The


Spiral

38

Advantages of Spiral Model

Estimates become more realistic as work progresses


Able to cope with the changes
Software engineers can start working on a project
earlier.

Disadvantages of Spiral Model

Highly customized limiting re-usability.


Applied differently for each application.
Risk of not meeting, budget or schedule

Fourth Generation
Techniques
Encompasses a broad array of software tools.
Enables the s/w developer to specify characteristics of
s/w at a high level.
The tool then automatically generates the source code
based on the developers specification.

Fourth Generation
Techniques
Requirements
Gathering

Design
Strategy
Implement
ation using
4GL
Testing

Fourth Generation
Techniques
Advantages:
Enables the software developer to represent desired
results in a manner that results in automatic
generation of code to generate those results.
Fills the gap - s/w produced using conventional
methods and paradigms which contributes less and
less to all s/w developed.

The V-Model

44

Advantages of V-model

Simple and easy to use.


Testing activities like planning, test designing happens
well before coding.
Proactive defect tracking
Avoids the downward flow of the defects.
Works well for small projects where requirements are
easily understood.

45

Disadvantages of V-model

Very rigid and least flexible.


Software is developed during the implementation phase,
so no early prototypes of the software are produced.
If any changes happen in midway, then the test
documents along with requirement documents has to be
updated.

46

When to use the V-model

used for small to medium sized projects requirements


clearly defined and fixed.
when ample technical resources are available with
needed technical expertise.

47

The Incremental Model


increment #n
Communi c at ion
Planni ng
Modeling
analys is
des ign

C o n s t ru c t i o n
c ode
t es t

De p l o y m e n t
d e l i v e ry
fe e d b a c k

delivery of
nth increment

increment # 2
Communi c at ion
Planning
Modeling
analys is
des ign

C o n s t ru c t i o n
code

De p l o y m e n t

t es t

d e l i v e ry
fe e d b a c k

increment # 1

delivery of
2nd increment

Co mmuni c at io n
Planni ng
M odel ing
analys is
des ign

C o n s t ru c t i o n
c ode

De p l o y m e n t

t es t

d e l i v e ry
fe edbac k

delivery of
1st increment

project calendar time


48

Advantages of Incremental Model

Initial product delivery is faster.


Lower initial delivery cost.
Core product is developed first i.e main functionality is
added in the first increment.
After each iteration, regression testing should be
conducted - faulty elements can be quickly identified
Smaller changes are made during each iteration.
With each release a new feature is added to the product.
Customer can respond to feature and review the
product.
Risk of changing requirement is reduced
Work load is less.
49

Disadvantages of Incremental Model

Requires good analysis.


Resulting cost may exceed the cost of the organization.
Each phase of an iteration is rigid and do not overlap
each other.
As additional functionality is added - problems may arise
related to system architecture

50

You might also like