Title: SEC 308 Yazilim M
1SEC 308 Yazilim MühendisligiSoftware and
Software Engineering
2Lecture Plan
- What is Software?
- Why Software Engineering?
- What is Software Engineering?
- Who does Software Engineering?
- Why does Software Fail?
- Software Failure Examples
- Software Myths
3What is Software?
- Software is (1) instructions (computer programs)
that when executed provide desired features,
function, and performance (2) data structures
that enable the programs to adequately manipulate
information and (3) documentation that describes
the operation and use of the programs. - Computer programs and associated documentation
- Software Program Documentation
- Operating Procedures
4Software Product
- Software product is a product designated for
delivery to the user
5Documentation Manuals
- Documentation consists of different types of
manuals are
6Documentation Manuals (cont.)
- Documentation consists of different types of
manuals are
7Software Characteristics
- Software is developed or engineered, it is not
manufactured in the classical sense. - Software doesn't "wear out., but it does
deteriorate. - Although the industry is moving toward
component-based construction, most software
continues to be custom-built. - Failure curve for hardware
8Softwares Dual Role
- Software is a product
- Delivers computing potential
- Produces, manages, acquires, modifies, displays,
or transmits information - Software is a vehicle for delivering a product
- Supports or directly provides system
functionality - Controls other programs (e.g., an operating
system) - Effects communications (e.g., networking
software) - Helps build other software (e.g., software tools)
9Software Product
- Software products may be developed for a
particular customer or may be developed for a
general market - Software products may be
- Generic - developed to be sold to a range of
different customers - Bespoke (custom) - developed for a single
customer according to their specification
10Software Applications
11Software New Categories
- Open world computingpervasive, distributed
computing - Ubiquitous computingwireless networks
- Netsourcingthe Web as a computing engine
- Open sourcefree source code open to the
computing community
12Legacy Software
- Were developed decades ago and have been
continually modified to meet changes in business
requirements and computing platforms. - 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.
13Some attributes of good software
The software should deliver the required
functionality and performance to the user
- Maintainability
- Software must evolve to meet changing needs
- Dependability
- Software must be trustworthy
- Efficiency
- Software should not make wasteful use of system
resources - Usability
- Software must be usable by the users for which it
was designed
14Some Software Development Questions
- Why does it take so long to get software
finished? - Why are development costs so high?
- Why cant we find all errors before giving
software to customer? - Why do we spend so much time and effort
maintaining existing programs? - Why do we have difficulty in measuring progress
as software is being developed and maintained?
15(No Transcript)
16Why is Software Development Hard?
- Millions of lines of code
- Single failure ? entire system fails
- Hundreds of developers
- Many of whom enter/leave project at different
times - Requirement change rapidly
- Software may be obsolete before it is completed
- Possibly most complex human activity ever!
17Why Software Engineering? (cont.)
- The problem is complexity
- Complexity leads to failure
- Software takes too long to develop
- More costly than expected
- Not reliable enough
- Does not do what users want or need
- Difficult to maintain/modify as needs change
- The majority of commercial software projects
started are never completed - Software engineering is about managing this
complexity.
18Why Software Engineering?
- Important to distinguish easy systems (one
developer, one user, experimental use only) from
hard systems (multiple developers, multiple
users, products) - Experience with easy systems is misleading
- One person techniques do not scale up
- Analogy with bridge building
- Over a stream easy, one person job
- Over River Nile ? (the techniques do not
scale)
19Why Software Engineering? (cont.)
20What is Software Engineering?
- Applying engineering principles to software
development - Build software like we build bridges!
- IEEE DefinitionSoftware Engineering is the
application of a systematic, disciplined,
quantifiable approach to the development,
operation, and maintenance of software that is,
the application of engineering to software
21Engineering Principles
- Systematic
- Clear process followed by all involved
- Only way to coordinate 100s of developers
- Quantifiable
- Can accurately measure/estimate key qualities
- Cost and time to develop software
- Correctness, reliability, usability of final
product
22Engineering Principles (cont.)
- Disciplined
- Commitment to quality by all involved
- Developers, management, etc.
- Ethics
- Do not accept project that you do not have the
skills to complete correctly - Do not release product until you know it meets
standards
23What is software engineering? (cont.)
- Software engineering is an engineering discipline
which is concerned with all aspects of software
production - Software engineers should
- adopt a systematic and organised approach to
their work - use appropriate tools and
techniques depending on - the problem to be solved,
- the development constraints and
- the resources available
24What is software engineering? (cont.)
- At the first conference on software engineering
in 1968, Fritz Bauer defined software engineering
as The establishment and use of sound
engineering principles in order to obtain
economically developed software that is reliable
and works efficiently on real machines. - Stephen Schach defined the same as A discipline
whose aim is the production of quality software,
software that is delivered on time, within
budget, and that satisfies its requirements.
25What is the difference between softwareengineerin
g 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 still insufficient
to act as a complete underpinning for software
engineering (unlike e.g. physics and electrical
engineering).
26Where do software engineers fit in?
- Computer science focusing on computer hardware
and programming languages - Software engineering focusing on computer as a
problem-solving tool - Relationship between
computer science and
software
engineering
27What is the difference between softwareengineerin
g and system engineering?
- System engineering is concerned with all aspects
of computer-based systems development including
hardware, software and process engineering.
Software engineering is part of this process
concerned with developing the software
infrastructure, control, applications and
databases in the system. - System engineers are involved in system
specification, architectural design, integration
and deployment.
28Some Realities of Software Engineering
- 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
29A Layered Technology
tools
methods
process model
a quality focus
Software Engineering
30A Process Framework
- Process framework
- Framework activities applied iteratively as a
project progresses - Communication
- Planning
- Modeling
- Construction
- Deployment
- Umbrella Activities manage and control
progress, quality, change and risk - Software project management
- Formal technical reviews
- Software quality assurance
- Software configuration management
- Work product preparation and production
- Reusability management
- Measurement
- Risk management
31What is a software process?
- A set of activities whose goal is the development
or evolution of software - Fundamental activities in all software processes
are - Specification - what the system should do and its
development constraints - Development - production of the software system
(design and implementation) - Validation - checking that the software is what
the customer wants - Evolution - changing the software in response to
changing demands
32What is a software process model?
- Software Process Model is a simplified
representation of a software process, presented
from a specific perspective - Examples of process perspectives
- Workflow perspective - represents inputs, outputs
and dependencies - Data-flow perspective - represents data
transformation activities - Role/action perspective - represents the
roles/activities of the people involved in
software process - Generic process models
- Waterfall
- Iterative development
- Agile Development
- Component-based software engineering
33What are the costs of software engineering?
- Roughly 60 of costs are development costs, 40
are testing costs. For custom software, evolution
costs often exceed development costs - Costs vary depending on the type of system being
developed and the requirements of system
attributes such as performance and system
reliability - Distribution of costs depends on the development
model that is used
34Aspects of Software Engineering
- Problem solving process as a team
- Software products are large and complex
- Development requires analysis and synthesis
- Analysis decompose a large problem into smaller,
understandable pieces - abstraction is the key
- Synthesis build (compose) software from smaller
building blocks - composition is challenging
35Two aspects of Software EngineeringThe analysis
process
36Two aspects of Software EngineeringThe
synthesis process
37The Essence of Software Engineering Practice
- Understand the problem (communication and
analysis). - Plan a solution (modeling and software design).
- Carry out the plan (code generation).
- Examine the result for accuracy (testing and
quality assurance).
38Understand the Problem
- Who has a stake in the solution to the problem?
That is, who are the stakeholders? - What are the unknowns? What data, functions, and
features are required to properly solve the
problem? - Can the problem be compartmentalized? Is it
possible to represent smaller problems that may
be easier to understand? - Can the problem be represented graphically? Can
an analysis model be created?
39Plan the solution
- Have you seen similar problems before? Are there
patterns that are recognizable in a potential
solution? Is there existing software that
implements the data, functions, and features that
are required? - Has a similar problem been solved? If so, are
elements of the solution reusable? - Can subproblems be defined? If so, are solutions
readily apparent for the subproblems? - Can you represent a solution in a manner that
leads to effective implementation? Can a design
model be created?
40Carry out the plan
- Does the solution conform to the plan? Is source
code traceable to the design model? - Is each component part of the solution provably
correct? Has the design and code been reviewed,
or better, have correctness proofs been applied
to algorithm?
41Examine the Result
- Is it possible to test each component part of the
solution? Has a reasonable testing strategy been
implemented? - Does the solution produce results that conform to
the data, functions, and features that are
required? Has the software been validated against
all stakeholder requirements?
42Who Does Software Engineering?
- Participants (stakeholders) in a software
development project
43What does Software Engineer do?
- Spend less than 10 of their time writing code
- Other 90 of their time (partial list)
- Eliciting requirements
- Analyzing requirements
- Writing software requirements documents
- Building and analyzing prototypes
- Developing software designs
- Writing software design documents
- Researching software engineering techniques or
obtaining information about the application
domain
44What does Software Engineer do? (cont.)
- Other 90 of their time (cont.)
- Developing test strategies and test cases
- Testing the software and recording the results
- Isolating problems and solving them
- Learning to use or installing and configuring new
software and hardware tools - Writing documentation such as user manuals
- Attending meetings with colleagues, customers,
and supervisors - Archiving software and readying it for
distribution
45Members of the Development Team
- Requirement analysts work with the customers to
identify and document the requirements - Designers generate a system-level description of
what the system us 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 artifacts
46Members of the Development Team (cont.)
- Typical roles played by the members of a
development team
47Why does Software Fail?
- Software is too expensive
- Software takes too long to build
- Software quality is low
- Software is too complex to support and maintain
- Software does not age gracefully
- Not enough highly-qualified people to design and
build software
48Software Cost
- The cost of Change
- Software projects often go over budget
- Hurts the company and the customer
- Bad for the project/company
- Many projects are cancelled
- People may get fired or may quit
- Bad for the final product
- Features are not implemented
- Bad quality not enough money to get it right
- Expensive in the long run
49Software Time
- Software projects often take too long
- Loss of revenue and market share
- Both for the vendor and for the client
- E.g. baggage system at Denver airport
- Cost 1 million per day
- Projects may become obsolete
- Technology changes rapidly
- Competing products already on the market
- Not enough time to implement all features and to
ensure quality
50Some Questions
- Studies of IT projects by the Standish Group
- 80000 applications
- What percentage of projects were
- What was the cost/time overrun?
Year 2009 Year 2006 Year 2004 Year 2002 Year 2000 Year 1998 Year 1996 Year 1994
Successful 32 35 29 34 28 26 27 16
Challenged 44 19 53 15 23 28 40 31
Failed 24 46 18 51 49 46 33 53
51Success Rate
- 2009/2010 Standish Chaos Report, Standish Group,
indicating
52Overruns and Deficiencies
- Cost overruns 189 of original estimate
- Time overruns 222 of original estimate
- Feature deficiencies
- only 61 of the originally
- specified features were
- implemented
53Some ideas of Failure
- The application doesnt work catastrophic
failure - The delivery overruns the schedule
- Project costs exceed budget
- Insufficient functionality
- Dissatisfied users
- Poor performance
- Lacks scalability
- Fails to deliver an appropriate Return on
Investment (ROI)
54Some ideas for Challenged
- Exceeds budget, but within manageable tolerances
- Overruns, but within manageable tolerances
- Non-essential functionality is defective
- Non-essential functionality is missing
- Flaws have workarounds
- Fewer features and functions than originally
specified
55Why Projects Fail/Succeed?
- The bottom 10 project failure factors
- Incomplete requirements
- Lack of user involvement
- Lack of resources
- Unrealistic expectations
- Lack of executive support
- Changing requirements and specifications
- Lack of planning
- Didnt need it any longer
- Lack of it management
- Technology illiteracy
- The top 10 project success factors
- User involvement
- Executive management support
- Clear statement of requirements
- Proper planning
- Realistic expectations
- Smaller project milestones
- Competent staff
- Ownership
- Clear vision objectives
- Hard-working, focused staff
(Source Turning Chaos into Success,"
softwaremag.com, December 1999)
56Software Quality
- Software defects result in failures
- Example 1 Windows crashes while you play a game
at home - Example 2 The software that controls a nuclear
reactor crashes - Direct loss of life and money
- Millions of dollars
- Indirect loss missed opportunities
- e.g. online purchases are down for a day
- Loss of credibility, bad publicity
57Software Failures Examples
- Therac-25 (1985-1987) six people overexposed
during treatments for cancer - Taurus (1993) the planned automatic transaction
settlement system for London Stock Exchange
cancelled after five years of development - Ariane 5 (1996) rocket exploded soon after its
launch due error conversion (64-bit floating
point into 16-bit signed integer) - The Mars Climate Orbiter assumed to be lost by
NASA officials (1999) different measurement
systems (Imperial and metric)
58Example Ariane 5
- Ariane 5 rocket
- Built by the European Space Agency
- First launch June 1996
- Crashed 40 seconds after launch
- Cost 500 million
- No people on board
- Problem software failure
59What Happened?
- Overflow when velocity was converted from 64-bit
floating point to 16-bit signed integer - The exception was not caught
- Inertial Reference System failed
- Backup system failed for the same reason
- Rocket went off course
- Self-destruct module (correctly) activated
- The code was OK for Ariane 4
- Same software, different environment
60How Has Software Engineering Changed?
- The key factors that have changed the software
development (Wasserman's Seven Key Factors)
61What are the key challenges facing software
engineering?
- Software engineering in the 21st century faces
three key challenges - Legacy systems
- Old, valuable systems must be maintained and
updated - Heterogeneity
- Systems are distributed and include a
mix of hardware and software - Delivery
- There is increasing pressure
- for faster delivery of software
62Software Myths
- Affect managers, customers (and other
non-technical stakeholders) and developers - Are believable because they often have elements
of truth, - but
- Invariably lead to bad decisions,
- therefore
- Insist on reality as you navigate your way
through software engineering
63Manager Myths
- Management may be confident about good standards
and clear procedures of the company. - But the taste of any food item is in the eating
not in the Recipe! - Company has latest computers and state-of-the-art
software tools, so we shouldnt worry about the
quality of the product. - The infrastructure is only one of the several
factors that determine the quality of the
product! - Addition of more software specialists, those with
higher skills and longer experience may bring the
schedule back on the track! - Unfortunately, that may further delay the
schedule! - Software is easy to change
- The reality is totally different.
- Computers provide greater reliability than the
devices they replace - This is not always true.
64Developer Myths
- Once the software is demonstrated, the job is
done. - Usually, the problems just begin!
- Software quality can not be assessed before
testing. - However, quality assessment techniques should be
used through out the software development life
cycle. - The only deliverable for a software development
project is the tested code. - Tested code is only one of the deliverable!
- Aim is to develop working programs
- Those days are over. Now objective is to develop
good quality maintainable programs!
65Customer Myths
- A general statement of objectives is sufficient
to get started with the development of software.
Missing/vague requirements can easily be
incorporated/detailed out as they get
concretized. - If we do so, we are heading towards a disaster.
- Software with more features is better software
- Software can work right the first time
- Both are only myths!
66Question 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 engineering activities? Software specification, software development, software validation and software evolution.
What is the difference between software engineering and computer science? Computer science focuses on theory and fundamentals software engineering is concerned with the practicalities of developing and delivering useful software.
What is the difference between software engineering and system engineering? System engineering is concerned with all aspects of computer-based systems development including hardware, software and process engineering. Software engineering is part of this more general process.
What are the key challenges facing software engineering? Coping with increasing diversity, demands for reduced delivery times and developing trustworthy software.
What are the costs of software engineering? Roughly 60 of software costs are development costs, 40 are testing costs. For custom software, evolution costs often exceed development costs.