Title: An Introduction to Software Engineering by Prof. Mark Ramsey
1An Introduction to Software Engineeringby Prof.
Mark Ramsey
- Introductions
- Introduction to Software Engineering
- Software Specification
- Software Design
- Software Validation
- Software Management
2An Introduction to Software EngineeringIntroducti
on
- How Did We Get Here?
- Well-Engineered Software
- The Software Process
- Management Process Models
3An Introduction to Software EngineeringHow Did
We Get Here?
- Computer Hardware is decreasing while computer
systems are being incorporated in more more
products. - Boehm states that in 1985 software costs 140
Billion - Growing at a rate of 12 per year - 763 Billion
in 2000 - What is Software Engineering
- Software Systems built by teams rather than
individuals. - Includes Engineering Principles in development of
these systems. - Technical as well as Non-Technical Aspects
4An Introduction to Software EngineeringHow Did
We Get Here?
- Term Software Engineering first introduced in
the late 1960s at a conference. - Industry was trying to address the software
crisis as a result of the introduction of 3rd
Generation computer hardware. - This new hardware made large software systems
possible(needed). - New techniques were needed to control the
complexity inherent in large software systems - Industry well ahead of Academia
- Computer Science vs Mathematics
- Information Systems vs Computer Science
- Software Engineering vs Computer Engineering
5An Introduction to Software Engineering
Well-Engineered Software
- Like all engineering, Software Engineering is not
just about producing products, but producing
products is a cost-effective way. - Four key attributes which a well-engineered
software system should possess - Should be maintainable
- Should be reliable
- Should be efficient
- Should offer an appropriate User interface
6An Introduction to Software Engineering The
Software Process
- In 1970 the notion that software development is
like other engineering processes resulted in
Royce developing a model for Software
Development. The first being the Waterfall Model
(Software Life Cycle)
Requirements analyst and definition
System and Software Design
Implementation and Unit Testing
Integration and System Testing
7An Introduction to Software Engineering The
Software Process
- Detailed software process models are still the
subject of research. But there are a number of
different models or paradigms of software
development - The Waterfall Approach number of stages
- Exploratory Programming develop a working system
as quickly as possible and modify as needed - Prototyping Establish system requirements
- Formal transformation developing a formal
specification of the software system and
transforming into a program - System assembly from reusable components
assembling already existing software components - The first 3 are used currently for all practical
systems development
8An Introduction to Software Engineering The
Software Process
- Software Development Life Cycle
- Requirements Analysis and Definitions
- System and Software Design
- Implementation and Unit Testing
- Integration and System Testing
- Operations and Maintenance
9An Introduction to Software Engineering The
Software Process
- An aim of software engineering is to reduce
overall software costs so the cost distribution
across the software process must be known. - System Type Req/Design Impl Testing
- Control Systems 46 20
34 - Spaceborne Systems 34 20
46 - Operating Systems 33 17 50
- Scientific Systems 44 26 30
- Business Systems 44 28 28
10An Introduction to Software Engineering
Management Process Models
- Project Management is one thing which
distinguishes professional software engineering
and no process model can be acceptable if it
results in an unmanageable process. - Activity Output documents
- Requirements Analysis Feasibility Study/ Outline
Requirements - Requirements Definition Requirements
Specification - System Specification Functional Specs/Acceptance
Test Specs/Draft User Manual - Architectural Design Design Architecture
Specs/System Test Specs - Interface Design Interface Specs/Integration
Test Specs - Detailed Design Design Specs/Unit Test Specs
- Coding Program Code
- Unit Testing Unit Test Result Report
- Module Testing Module Test Result Report
- Integration Testing Integration Test
Report/Final User Manual - System Testing System Test Report
- Acceptance Testing Final System
11An Introduction to Software Engineering Review
Point
- Software engineering involves technical
non-technical issues. As well as knowledge of
specification, design, and implementation
techniques, software engineers must know
something about human factors and software
management. - Well-Engineered software is software which
provides the services required by its users. It
should be maintained, reliable and efficient, and
should provide an appropriate user interface. - The waterfall model of software development
suffers from inadequacies but will continue to be
widely used because it simplifies management of
the software process. - Exploratory programming is not suited to the
development of most large, long-lifetime software
systems because it is likely to result in systems
which are expensive to maintain. - Document-driven management process models suffer
from the disadvantage that they inhibit process
iteration because documents are frozen and then
become very expensive to change.
12An Introduction to Software Engineering Exercise
1
- A university intends to procure an integrated
student management system holding all details of
registered students including personal
information, courses taken, and examination marks
achieved. The alternative approaches to be
adopted are - Buy a database management system and develop an
in-house system based on this database. - Buy a comparable system from another university
and modify it to local requirements - Join a consortium of other universities,
establish a common set of requirements and
contract a software house to develop a single
system for all the universities in the
consortium - Identify two possible risks in each of these
strategies and suggest techniques for risk
resolution which would help in deciding which
approach to adopt.
13An Introduction to Software Engineering Exercise
2
- Write a plausible requirements definition for the
following functions - An unattended petrol (gas) pump system which
includes a credit card reader. The customer
swipes the card through the reader then specifies
the amount of fuel required. The fuel is
delivered and the customers account is debited. - The cash dispensing function in a bank
auto-teller machine. - The spell checking and correcting function in a
word processor.
14An Introduction to Software Engineering Software
Design
- Design is a creative process. Although methods
guidelines are helpful, judgement flair on the
part of the software engineer are still required
to design a software system. - The main design activities in the software
process are architectural design, system
specification, interface design, component
design, data structure design and algorithm
design. - Functional decomposition involves considering a
system as a set of interacting functional units. - Object-oriented decomposition considers the
system as a set of objects where an object is an
entity with state and functions to inspect and
modify that state. - A decision on whether a system should be
implemented as a single sequential process or as
a number of parallel processes is a detailed
design decision. The design process should
partition the system into logical, interacting
units which may be realized as either sequential
or parallel components. - The most important design quality attribute is
maintainability. Maximizing cohesion in a
component minimizing the coupling between
components is likely to lead to maintainable
design. - The use of inheritance in object-oriented systems
can improve the quality of a design but may make
the design more difficult to understand.
15An Introduction to Software Engineering Exercise
3
- Explain why sequential software designs are
easier to validate than designs which involve
parallel processes
16An Introduction to Software Engineering
Verification Validation
- Verification Validation are not the same thing.
Verification is intended to show that a program
meets its specification. Validation is intended
to show that the program does what the user wants
it to do. - Testing has a dual function it is used to
establish the presence of defects in a program
and it is used to estimate whether or not the
program is operationally usable. - Testing can only be demonstrated the presence of
errors. It cannot prove their absence. - The testing process involves unit testing, module
testing, sub-system testing, integration testing
and acceptance testing. - Testing should be scheduled as part of the
project planning process. Adequate resources must
be made available for testing. - Testing strategies which may be adopted include
top-down testing, bottom-up testing, thread
testing of real-time systems and stress testing.
17An Introduction to Software Engineering Exercise
4
- Describe four classes of systems encountered in
everyday life which might be subject to stress
testing.
18An Introduction to Software Engineering Software
Management
- Good software project management is essential if
software engineering projects are to be developed
on schedule and within budget. - Software management is different from other
engineering management because software is
intangible, because we dont understand the
software process and because many projects are
novel and innovative. - A software manager has diverse roles but the most
significant activities are project planning,
estimating, and scheduling. - Various development team organizations have been
adopted. Democratic teams work well with
experienced and competent staff. Chief programmer
teams try to make best use a scarce resource,
namely, programming skills. - The dominant factor in programming productivity
is the aptitude of the individual programmer. - Existing measures of programming productivity do
not take the quality of the finished product into
account.
19An Introduction to Software Engineering Exercise
5
- Explain why the productivity of programmers
working on embedded systems is usually very much
lower than that of programmers developing
business information systems.