Size of Software Industry: > USD 500 billion
(Gartner 2019)
Global IT Spending: USD 3.8 trillion
(Gartner 2019)
Challenges for Software Industry
2012 2013 2014 2015 2016
Successful
Projects 27% 31% 28% 29% 32%
Challenged
Projects 56% 50% 55% 52% 49%
Failed
Projects 17% 19% 17% 19% 19%
Report for Year 2012 to 2016 (Standish 2016)
Factors Project Size and Complexity
Affecting are Customer Satisfaction Level
Project Success Development and Budget Process
Rate Skills of Developers and Managers
Why is SE Needed?
Computers everywhere
Toaster, Microwave, Temperature control of A/C,
Router, Surgical Equipment…
Computers need to be managed
Software runs on all computers
Make lives comfortable, efficient, effective…
SE practices ensure development of good
software to improve our living standard
Solving Problems
Analysis
Solving Problems (continued)
Synthesis
Software Engineering
Solving Problems
Computers
Computing
Software?
Computer programs along with associated
configuration data and documentation s.t. the
programs are correctly operated
Configuration data helps set up the programs
System documentation helps understand structure of
the system
User documentation explains how to use the system
Engineering?
Engineers’ Job?
Make things work
Apply theories, methodologies, tools appropriately
Provide solutions in absence of applicable theories and
methods
Realize financial and organizational constraints
Software Engineering
Solving problems that involve computing and
computers?
Solving problems that involve computing and
computers in a consistent/systematic manner?
A set of guidelines for solving the computing and
computer related problems in a systematic
manner?
Engineering software by remaining concerned
about all aspects of software production?
Aspects of Software Production?
Technical process of developing software
Activities such as management of project and teams
Development of tools, theories, methods to support
production of software
Who Does Software Engineering?
Participants (stakeholders) in a software development
project
Development Team
Requirement analysts: work with the customers to
identify and document the requirements
Designers: generate a system-level description of what the
system is supposed to do
Programmers: write lines of code to implement the
design
Testers: catch faults
Trainers: show users how to use the system
Maintenance team: fix faults that show up later
Librarians: prepare and store documents such as software
requirements
Configuration management team: maintain
correspondence among various artefacts
Development Team (Roles)
Who Does What?
Paradigm Resources
Process Software Skillset
Engineering
Lifecycle
Requirements Design Coding Testing Deployment Maintenance
Analysis
Typical phases in lifecycle of software
Software Lifecycle
Phases
Requirements analysis and definition
System (architecture) design
Program (detailed/procedural) design
Writing programs (coding/implementation)
Testing: unit, integration, system
System delivery (deployment)
Maintenance
Software Engineers?
Adopt a systematic and organized approach,
effectively, to produce high quality software
May have to use Ad hoc approaches to develop
software
Some real complex problems may not be solved using
elegant theories of CS
What is a Good Software Product?
Good software engineering must always include a
strategy for producing quality software
Product Quality?
Multiple facets…
What is a Good Software Product?
Users judge external characteristics (e.g., correct
functionality, number of failures, type of failures)
Designers and maintainers judge internal
characteristics (e.g., ease of modification)
Thus different stakeholders may have different criteria
Need quality models
McCall’s Quality Model
Lehman’s Laws
(1974) "Continuing Change" — A system must be continually
adapted or it becomes progressively less satisfactory. It happens so
until it becomes economical to replace it by a new or a restructured
version
(1974) "Increasing Complexity/Entropy" —Complexity/entropy of a
system increases with time, unless work is done to maintain or
reduce it
(1991) "Continuing Growth" — the functional content of a system
must be continually increased to maintain user satisfaction over its
lifetime
(1996) "Declining Quality" — the quality of a system will appear to
be declining unless it is rigorously maintained and adapted to
operational environment changes
Software Engineering Principles
Some principles are:
Rigor and Formality
Precision and exactness
Assessment of engineering activity and the results
Separation of Concerns
Flow of data and flow of control
Correctness and efficiency
Parts of system
Modularity
Anticipation of Change
Software and Defects?
Software vs Engine (wear-out???)
Software vs House
Software vs Cars (models? Versions?)
l e ve
Stability???? ab
le te n si
a l
Problems??? Defects??? M in
an
um
H
Software Engineering Challenges
Acceptable Quality
Usability
Security
Reliability
Performance
Conflicts?
Cost Effectiveness
Engineering and operational feasibility
Manage
Limited development budget
Timely Completion
Limited time Conflicts…
Software Engineering
Disciplined, consistent, and systematic effort to
construct (design + build) and maintain good quality
software in timely and cost-effective manner
How Successful Have We Been
Perform tasks more quickly and effectively
Word processing, spreadsheets, e-mail
Support advances in medicine, agriculture,
transportation, multimedia education, and most
other industries
Many good stories
However, software is not without problems (recall the
Standish report on challenged and failed projects???)
How Successful Have We Been
IRS hired Sperry Corporation to build an automated
federal income tax form processing system
An extra $90 M was needed to enhance the original $103 product
IRS lost $40.2 M on interests and $22.3 M in overtime wages
because refunds were not returned on time
Malfunctioning in Therac-25 killed several people
Reliability constraints have caused cancellation of many
safety critical systems
Safety-critical: something whose failure poses a threat to life or
health
Terminology for Describing Bugs
A fault: occurs when a human makes a mistake, called
an error, in performing some software activities
A failure: is a departure from the system’s required
behaviour
CS and SE
Programming languages
can we implement an OO design in absence of an OO programming language?
… modularity, packages, …
Operating systems
Part of OS as a utility program? CLI?
Microkernel?
Databases
Use data without knowing underlying representation of data
Db as component of large software systems
Artificial intelligence
Expert system shells
Programming and Testing assistants??
Theoretical computer science… e.g. Automata
SE and Other Disciplines
Management Science
Estimation, scheduling, human resource planning, task
decomposition and assignment, project tracking etc.
Systems Engineering
A Systems Approach
Hardware/Software
People
Interactions
A Systems Approach (Contd.)
Objects
i.e. things
Activities
Actions taken
Input / Outputs
Relationships for example:
Which object performs what activities
Which objects are associated with other objects
System Boundary
Who generates input and who receives output
Which objects/activities are part of the system and which are not
Nested systems, related systems, interrelated systems
A Systems Approach (Contd.)
Example of systems: a human respiratory system
??
A Systems Approach (Contd.)
A computer system must also be clearly described:
System definition of a paycheck production
An Engineering Approach
Idea to build a house
Asking someone to build the house
Explaining requirements
Getting designs
Modifying + Approving designs Building a
Inspecting the construction House
Adding new features
Testing household components
Moving in
Getting issues fixed after moving in
An Engineering Approach
Determine and Analyze Requirements
Produce and Document Overall Design
Produce Detailed Specifications
Identify and Design Components
Build Components Building a
Test Components
Integrate Components
House
Make final modifications after residents
move in
Continue Maintenance by the Residents
An Engineering Approach
Requirement analysis and definition
System design
Program design
Writing the programs
Unit testing Building a
Integration testing System
System testing
System delivery
Maintenance
Information Systems Example
Piccadilly System
Piccadilly Television: regional British TV franchise
Advertising scheme has many constraints:
Cigarette adverts only after 9 pm
if actor in show, no same actor in advert within 45
minutes
if advert in a class of products, no other advert in same
class during same break
rates dependent on amount of time bought
Software to determine, track advertising time
Information Systems Example
Piccadilly System (continued)
Piccadilly system’s context diagram
Real Time Example
Ariane-5 rocket, from the European Space Agency
June 4, 1996: functioned well for 40 seconds, then
veered off course and was destroyed
Contained four satellites: cost was $500 million
Reused code from Ariane-4 rocket
Real Time Example
Ariane-5 Definition of Quality
From the Lions et al report:
“… demonstrated the high quality of the Ariane-5
programme as regards engineering work in general and
completeness and traceability of documents.”
“… the supplier of the SRI … was only following the
specification given to it. … The exception which
occurred was not due to random failure but a design
error.”