Lecture 1 Software Engineering CS-2105
Lecture 1 Software Engineering CS-2105
Used as delivered
2%
Usable w. rework
Paid for, but
3% not delivered
30%
Used w. extensive rework,
but later abandoned
20%
Take
Takeaalook
lookat
atthe
theStandish
StandishReport
Report(The
(The“Chaos”
“Chaos”
Chapter 1- Introduction
What 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.
What is Software?
Software is developed or engineered, it is
not manufactured in the classical sense.
Software doesn't "wear out."
Although the industry is moving toward
component-based construction, most
software continues to be custom-built.
Wear vs. Deterioration
increased failure
rate due to side effects
Failure
rate
change
actual curve
idealized curve
Time
Software Applications
system software
application software
engineering/scientific software
embedded software
product-line software
WebApps (Web applications)
AI software
Software—New Categories
Open world computing—pervasive, distributed computing
Ubiquitous computing—wireless networks
Netsourcing—the Web as a computing engine
Open source—”free” source code open to the computing
community (a blessing, but also a potential curse!)
Also … (see Chapter 31)
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.
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).
A Layered Technology
tools
methods
process model
a “quality” focus
Software Engineering
Software Engineering: Layered
Approach
Analysis: Understand the nature of the problem and
break the problem into pieces
Synthesis: Put the pieces together into a large
structure
26
Plan 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 sub-problems be defined?
If so, are solutions readily apparent for the sub-problems?
Can you represent a solution in a manner that leads to
effective implementation?
Can a design model be created?
Carry 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?
Examine 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?
Hooker’s General Principles
1: The Reason It All Exists
2: KISS (Keep It Simple, Stupid!)
3: Maintain the Vision
4: What You Produce, Others Will Consume
5: Be Open to the Future
6: Plan Ahead for Reuse
7: Think!
How It all Starts
SafeHome:
Every software project is precipitated by some
business need—
the need to correct a defect in an existing
application;
the need to the need to adapt a ‘legacy system’ to a
changing business environment;
the need to extend the functions and features of an
existing application, or
the need to create a new product, service, or
system.
31
General issues that affect most
software
Heterogeneity
Increasingly, systems are required to operate as
distributed systems across networks that include
different types of computer and mobile devices.
Business and social change
Business and society are changing incredibly quickly
as emerging economies develop and new technologies
become available. They need to be able to change
their existing software and to rapidly develop new
software.
Security and trust
As software is intertwined with all aspects of our lives,
it is essential that we can trust that software.
Software myths
Management myths
Standards and procedures for building software
Add more programmers if behind the schedule
Customer myths
A general description of objectives enough to start
coding
Requirements may change as the software is
flexible
Practitioner myths
Task accomplished when the program works
Quality assessment when the program is running
Working program the only project deliverable
Software engineering ethics
Software engineering involves wider
responsibilities than simply the application of
technical skills.
Software engineers must behave in an honest
and ethically responsible way if they are to be
respected as professionals.
Ethical behaviour is more than simply
upholding the law but involves following a set
of principles that are morally correct.
Issues of professional
responsibility
Confidentiality
Engineers should normally respect the
confidentiality of their employers or clients
irrespective of whether or not a formal
confidentiality agreement has been signed.
Competence
Engineers should not misrepresent their level
of competence. They should not knowingly
accept work which is outwith their
competence.
Issues of professional
responsibility
Intellectual property rights
Engineers should be aware of local laws governing the
use of intellectual property such as patents, copyright,
etc. They should be careful to ensure that the
intellectual property of employers and clients is
protected.
Computer misuse
Software engineers should not use their technical skills
to misuse other people’s computers. Computer misuse
ranges from relatively trivial (game playing on an
employer’s machine, say) to extremely serious
(dissemination of viruses).
Credits
Pressman Slides
Sommerville Slides
Whitten-Bentley Slides