IntroSoftwareEng12 PDF
IntroSoftwareEng12 PDF
IntroSoftwareEng12 PDF
Functionality: The system should provide functions that meet the needs of all the
stakeholders of the system. This will involve determining what these needs are,
identifying and resolving conflicting needs, and designing a system that meets the
identified needs.
1
School of Informatics, University of Edinburgh Computer Science 1 Ah
Critical applications: Software has found its way into many applications where fail-
ure has serious consequences. For example: car braking and steering, process
control, safety systems in hazardous processes, civilian avionics, communication
networks and telephony, . . . .
Economically: The estimated value of systems containing embedded software will ex-
ceed 1012 dollars in the next few years. This is only one market for software, there
are many others.
This does not mean Software Engineering is important at the moment. Critics point to
well-publicised failures to supply well-engineered software systems by suppliers who
do attempt to use best practice. These well-publicised failures mask many projects
that are successful and are delivered on time and on price. We can argue that the
aims of Software Engineering are important and in some contexts those aims can be
realised.
Software Products
Stakeholders in a software product are usually concerned with two broad categories of
characteristics of software:
2
School of Informatics, University of Edinburgh Computer Science 1 Ah
Attributes can make conflicting demands on the software product. For exam-
ple, improving efficiency may lead to more complex interactions between soft-
ware modules and to more interactions between formerly independent modules.
Changes like these can have a serious effect on the Maintainability of a system
because more interaction between modules can make tracking down and fixing
errors much more difficult.
Specification: This is a description of what the software has to do and sets accept-
able levels for software attributes. For most software systems going from the
user needs to a statement of requirements and then to a precise specification is
a difficult and error prone task. The study of Requirements Engineering is an
increasingly important part of Software Engineering.
Design: This covers the high-level structural description of the architecture of the sys-
tem, through the detailed design of the individual components in the system and
finally to the implementation of the system on a particular computing platform
(usually hardware plus operating software).
Validation and Verification: Validation is the activity of checking the correct system is
being constructed (building the right system). Verification is the activity of check-
ing the system is being constructed correctly (building the system right). These
activities are essential to ensure a software project is going in the right direction.
Maintenance: This activity ensures that the system keeps track with changes in its
operating environment throughout its operational life. This involves correcting
errors that are discovered in operation and modifying the system to take account
of changes in the system requirements. Repairing Millennium Bug errors in soft-
ware is an example of Maintenance activity (and a good example of the costs of
3
School of Informatics, University of Edinburgh Computer Science 1 Ah
such activity). In one sense we can see the Millennium Bug problem as a change
of requirement because when these systems were written their intended lifetime
was much shorter than has turned out to be the case.
Visibility: How easy is it for an external assessor to determine what progress has been
made?
Reliability: How good is the process at detecting errors before they appear in a prod-
uct?
Robustness: How well does the process cope with unexpected change?
Waterfall Model
This is a linear model where each activity provides the input to the next stage in the
process. This process usually has high visibility because at the close of each stage full
documentation is generated for that stage. Because of the linear nature of the process
it is not particularly robust because any changes tend to force us to loop back to some
earlier change and then follow through each of the stages again. In the early days of
software production this was the standard model used by most developers.
Evolutionary Development
This approach was introduced by Gilb in 1985[3, 4]. It is often associated with the
object-oriented approach to system development. The aim of this process is to split the
problem up into many sub-tasks each of which can deliver a part of the product that
4
School of Informatics, University of Edinburgh Computer Science 1 Ah
Requirements
System Design
Program Design
Program Impl.
Testing
Delivery
Maintenance
offers a tangible improvement in the system to the users. Each sub-task is tackled
and delivered as a separate deliverable in the life of the project. Delivery of a new
component changes the perception of the project, then the priorities on completing
the remaining tasks are re-evaluated in the light of the new component and the most
important (from a user view) is chosen as the next to deliver. Evolutionary development
is highly Robust because changes can easily be factored into the process but it is not
particularly Visible because it may be difficult to keep track of many sub-tasks in an
efficient way.
Spiral Model
Measurement
Once a process is established it is possible for an organisation to measure concrete
elements of its software development process. Such measurement is carried out to
discover the effort used on projects and measures of the attributes of the systems
produced. Many organisations also attempt to use such measurements to create a
predictive model of development costs in terms of features of the customer requirement.
5
School of Informatics, University of Edinburgh Computer Science 1 Ah
Go/no go decision
Initial prototype
Planning from Next prototype
feedback Engineered system
Provided the products are reasonably well focussed and stable and the development
teams are also stable this approach is an essential tool in providing accurate estimates
of development costs. Most companies producing high cost software keep extensive
historic data on past projects and use this as a basis for costing new projects.
Summary
We have introduced the main elements of Software Engineering. In particular:
Stuart Anderson.
David Aspinall, 21st October 2002.
6
School of Informatics, University of Edinburgh Computer Science 1 Ah
Questions
1. Over the past 30 years hardware engineering has been significantly more success-
ful then software engineering. Identify arguments that support and contradict this
statement.
2. Think of a few of your favourite software project disasters. Write down what you
think were the main causes of your chosen disasters. Many of the explanations
for these disasters take the form of folklore that has little to do with the complex
causes that surround software disasters. Use your favourite web search engine to
try to get to the bottom of one or two disasters.
3. Consider each of the software development processes outlined above try to assess
how well you think each will do on each of the process characteristics listed above.
Bibliography
[1] Barry W. Boehm. A spiral model of software development and enhancement. IEEE
Computer, 21(5):61–72, 1988.
[2] Barry W. Boehm and Tom DeMarco. Guest Editors’ introduction: Software risk
management. IEEE Software, 14(3):17–19, May/June 1997.
[3] Tom Gilb. Evolutionary delivery versus the ”waterfall model”. ACM SIGSOFT Soft-
ware Engineering Notes, 10(3):49–61, July 1985.