Introduction to
Software Engineering
Lecture 1
More info on Jalote
Ph.D. from the Univ. of Illinois at Urbana Champaign
Has worked as a faculty member at both university of
Maryland, College Park and the Indian Institute of
Technology at Kanpur
IEEE Fellow
Has also served as the Vice President (quality) at
Infosys Technologies Ltd and as a Visiting Researcher
at Microsoft Corporation
Comparison to other CS Disciplines
Software Engineering is unlike other Computer Science
topics in that it focuses on the development of software
generically. (not focus on particular software products)
a strong focus on process and is an attempt to turn
software development into an engineering discipline
Basic Question of Software Engineering: How do we
develop industrial-strength software?
One Thought Experiment !
Say you are given a description of a software system and
you estimate, based on prior experience, that such a
system would be approximately 10,000 lines of Java code.
Assuming that the problem domain does not require
specialized expertise, how long would it take you to build a
10,000 line program?
Discussion
Jalote claims that most students would answer 1 to 3
months.
Assume a student finishes the project in 2 months, that
would result in a productivity of 5,000 lines of code (LOC)
per month.
Jalote then points out that across industries, professional
software development teams average somewhere on the
order of 100 LOC per month to 1000 LOC per month
Assuming the latter rate, a professional software
development team would require 10 months to build a
system that meets the same requirements that our
hypothetical student did in two months
What gives rise to this disparity?
Answer
Quality !
Historical Background
First Software Engineering Conference (NATO-
sponsored conference in 1968)
Software Crisis
#Systems were designed by
identifying the hardware first #Software was allocated
about 1-2% of the budget #However, software was
causing all the problems (!) and thus needed more attention
Progression of SE
Early stages of computing
User/Developer were the same person
Problems were well-understood
High level languages began to appear in the 1950s
Along with the profession of “programmer”
Large Software Systems for Commercial Ventures in the 1960s
Teams of Programmers
Separate end-users
Complex Problems
“Software Crisis” coined, as problems
became apparent. The problem?
over budget
late
faulty
costly to maintain
difficult to evolve
…
Software Engineering formed as a
discipline in 1968
Many “solutions” put forward
New approaches to Project
Management
New Team Organizations
Better Languages and Tools
Organizational Standards
And here we are 40 years later! ☺
What is software?
A mere collection of programs?
@ generally used by the author
@ little documentation to help other people to use it
@ presence of “bugs” is not a major concern
@ not meeting the issues as portability, reliability and
usability
Quality Software / Programming
System Product
Used largely by the people other than the
developers
Users from different backgrounds (proper
interface)
Sufficient documentation
Properly tested
Portable, reliable
IEEE defines…
…software as the collection of computer
programs, procedures, rules and
associated documentation and data
[IEEE87]
Software Problems??
Software is Expensive!
Labour-intensive
Size measured DLOC (Delivered Lines of Code)
Cost measurements in PMs (Effort)
Productivity measured in DLOC/PM
One Example
In contract development, development organizations
will charge clients roughly $100K a person-year or
$8.3K a person month
Average productivity for a person month ranges from
300 LOC to 1000 LOC so the lower and upper limits
for the cost of a line of code is $8 to $28
Lets say you have a project that ends with 50,000
lines of code produced. How much would it cost?
Given a production rate of 1000 LOC per month, it
would take 50 months to produce the system, and if
you charge $8.3K per month, the total is
approximately $417K!
The same project with a production rate of 300 LOC
per month would take 166 months and cost $1.4M!
Late and Unreliable!
One study in the late 80s found that in a survey of 600 firms,
more than 35% reported having a runaway development
project ( budget and schedule are completely out of control).
Success rates (projects completed on-time, within budget) in
2004 was 34%, up from 16.2% in 1994
Failure rates (projects cancelled before completion) in 2004
was 15%, down from 31% in 1994.
Still problem exists!!
Unreliable Software!
Software failures are different from failures found in other
engineering disciplines.
In other disciplines, failures tend to come from a change in
the physical or electrical properties of the system caused by
aging.
Software components do not age... failures come from
mistakes made during the design and development process
or due to changes in the external environment.
Since extensive testing is done on software systems,
failures tend to come when code that is rarely executed is
activated due to a unique set of circumstances in its
operating environment.
Problem of Change and Rework!
Corrective
To fix bugs
maintenance
Adaptive To respond to changes in the system's
maintenance environment
Perfective
To add new features
maintenance
Preventive
To make a system more maintainable
maintenance
Maintenance
Understanding the existing software (code & documents)
Understanding the effect of change
Making the changes
Testing the new parts (changes)
Retesting the old parts (not changed)
Major Problem!!
Changing requirements and associated reworks (rework
effort- 30 to 40% of the total development effort)
SE Challenges
IEEE87 defines…
…software engineering is the systematic approach to the
development, operation, maintenance, and retirement of
software.
Boem87 defines…
…software engineering is the application of science and
mathematics by which the capabilities of computer equipment
are made useful to man via computer programs, procedures,
and associated documentation.
Several Challenges
Scale
Cost, schedule, and Quality
Consistency
Change
SE Challenges: Scale
Acco. to COCOMO,
Small: 2KDLOC
Intermediate: 8KDLOC
Medium: 32KDLOC
Large: 128KDLOC
SE Challenges: Cost, Schedule, and
Quality
Cost: cost of resources (S/W, manpower,
H/W)
Time to market should be reduced (RAD)
Main “Mantra”: Quality
3 Dimensions of Quality
Product Operation
Correctness: extend to which a program satisfies its
specification
Reliability: defines how well the software meets its requirements
Efficiency: relating to the execution of software (response time,
memory requirements)
Integrity: uprightness
Usability: Effort required to learn and operate the software
Contd…
Product Transition
Portability: effort required to transfer the software from one
hardware configuration to another
Reusability: extent to which parts of the software can be reused
Interoperability: effort required to couple the system with other
systems
Product Revision
Maintainability: effort required to locate and fix errors in
operating programs
Flexibility: effort required to modify an operational program
Testability: effort required to test
SE Challenges: Consistency
An organization involved in software development not
only wants high quality and productivity, it also wants
these things consistently
Consistency of performance is an important factor for
any organization; it allows an organization to make
predictions and estimates for future projects
The SE community has looked at these issues and
developed standards for organizations to follow to help
them achieve consistency
ISO 9001
Capability Maturity Model
SE Challenges: Change
A big problem in software development is that
"things change" all the time: requirements change
or new requirements are added
And, these changes occur rapidly, challenging our
ability to deal with the changes
SE approach
basic objective in software development is to
achieve high quality and productivity
doing this is via people, processes, and technology,
sometimes called the Iron Triangle
Software Engineering tends to put a lot of
focus on process (separate the process
from the product it produces )
An argument is made that a high quality
process will help to produce a high quality
product
Phased development (better management
and consistency)
Phased Development Process
Each phase has a clear task and typically works to produce
some sort of artifact (documents and/or code)
The standard phases are:
Requirements Analysis: Understanding the Problem
• Identifying WHAT is needed from the system, not HOW it will achieve its goals
Software Design: Finding a Solution to the Problem
Coding: Implementing the Solution to the Problem
• The biggest challenge is fighting the mismatch between design and implementation
Testing: Testing the Solution to the Problem
• Thinking of testing as being confined to one phase is now antiquated
• Modern life cycles encourage the use of testing throughout the process
Deployment: Delivering the Solution to the Customer
Maintenance: Dealing with the Operation and Evolution of the Software
System
Requirements Analysis
What is needed from the system
Communication between client and developer
Software requirement specification
Done by analyst
Two activities
Problem understanding or analysis
Requirement specification – Specify
Functional and Performance requirements (formats
of inputs and outputs, design constraints)
Software Design
Problem domain to solution domain
Most critical factor which affects ‘Quality’
“how” to satisfy the needs
Output: design document
System Design: identifying the modules, interaction
between modules
Detailed Design: Design logic for each modules,
how components can be implemented
Coding
Translate the design of the system in to
code in a given programming language
Structured programming
Testing
Goal is to uncover requirement, design, and coding
errors
LEVELS
Unit Testing
Integration Testing
System Testing
Acceptance Testing
Test plan: identifies all testing related activities
Test case specification documents
Output: Test report and error report
Managing the Project
Project management plays a critical role in software
development
Many a team of superstar developers have seen their projects fail
due to poor management
To aid in managing software development projects,
software engineering has developed software metrics
Software metrics are quantifiable measures that can be
used to assess different characteristics of a software
system or software process
There are two types of metrics, product and process, and both
types provide information to managers about the state of a
development process and the product that it is producing
Summary
Student Systems vs. Software
Systems
History of Software Engineering
The Problem Domain
Software Engineering Challenges
The Software Engineering Approach
Next?
Software Development Process