Post on 19-Dec-2015
transcript
MADALINA CROITORUcroitoru@lirmm.fr
What is Software Engineering?
• The IEEE Computer Society defines software engineering as:
– The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software.
– The study of approaches as in (1).
MADALINA CROITORUcroitoru@lirmm.fr
Engineering (a definition)• The application of applied science
and mathematics to produce solutions to problems or produce a product.
• In software engineering, we produce software; programs, documentation and configuration.
• There are two types of software: generic and bespoke.
MADALINA CROITORUcroitoru@lirmm.fr
Software engineering has a wide scope
• Mathematics• Computer science• Economics• Management• Ethics
MADALINA CROITORUcroitoru@lirmm.fr
The day the phones stopped ringing
• A single missing “break” statement in a C program resulted in the loss of a long distance telephone service in the USA
• Economic damage was about $100,000,000
• Use of formal methods– Link a model to a software implementation– UML B
MADALINA CROITORUcroitoru@lirmm.fr
Complexity
• The main problem is complexity• UNIX contains 4 million lines of code• WINDOWS 2000 – 1018 lines of code• Software engineering is about
managing this complexity
MADALINA CROITORUcroitoru@lirmm.fr
Difficulties
• Software development is hard• Easy case: one developer, one user
vs hard case: multiple developers, multiple users
• One person techniques do not scale up
MADALINA CROITORUcroitoru@lirmm.fr
Software crisisSurvey of outcomes
from Standish Group
280,000 development projects
1. Successful
2. Cancelled
3. Late, over budget, incomplete
128%
223%
349%
MADALINA CROITORUcroitoru@lirmm.fr
Whittaker paper common reasons
• Poor project planning. Specifically, inadequate risk management and a weak project plan. Risk management becomes more important as the organization gets bigger, so larger organizations need to pay more attention to this area.
• A weak business case. The need for the system should be justified in ways that relate directly to the organization's business needs.
MADALINA CROITORUcroitoru@lirmm.fr
More reasons
• Lack of top management involvement and support. This often dooms the project to failure before it starts. Securing buy-in from the top, often by a strong business case backed up with a realistic project plan, is an essential step.
MADALINA CROITORUcroitoru@lirmm.fr
Goals of software engineering
• Satisfy user requirements
• High reliability• Low maintenance costs• Deliver on time• Low production cost• High performance• Ease of reuse
MADALINA CROITORUcroitoru@lirmm.fr
Satisfying user requirements
• Large-scale commissioned systems:– 45% delivered but not used– 27% paid for but not delivered– 17% abandoned– 6% used after changes– 5% used as delivered
• Users find it hard to articulate what they want
• Developers find it hard to understand what users say
MADALINA CROITORUcroitoru@lirmm.fr
Low maintenance costs
• Maintenance: what is done to the software after it starts being used – 65% of overall project cost
• Corrective: fixing bugs• Adapting: altering software to
adapt to changing software• Perfective: new requirements• Preventative: prevents further
maintenance
MADALINA CROITORUcroitoru@lirmm.fr
Reliability
• You can prove bugs are there but cannot prove they are not
• Bugs are expensive in terms of:– Human lives– Money– Poor customer relations
MADALINA CROITORUcroitoru@lirmm.fr
Delivery on time• Relationship person-
months vs development time is not linear:– Adding person-months of
effort to a project usually has no effect
– Sometimes makes the project slower
• It is really hard to predict when a project will complete and how much effort will require
MADALINA CROITORUcroitoru@lirmm.fr
Production costs
• US Software production 1985: 70 billion $
• US Software production 2000: 700 billion$
• US Software production 2015: ???
MADALINA CROITORUcroitoru@lirmm.fr
Ease of reuse
• Goal of system reuse: use same software in different systems:– Reduce development cost– Increase reliability
• Most software has two parts:– Environment independent
part– Environment dependent (GUI
etc.)