MSc-IT Study Material
January 2011 Edition

Computer Science Department, University of Cape Town
| MIT Notes Home | Edition Home |

Software Engineering

The Department of Computer Science, University of Cape Town

2010


Table of Contents

1. Introduction
Objectives
Introduction
Information systems and software
The importance of software engineering
Systems
System boundaries
Categories of information system and software programs
Information systems
Legacy systems
The benefits of software systems
Tactical benefits
Strategic benefits
The reasons for change
Software myths
Management myths
Customer / end-user myths
Programmer myths
Review
Questions
Answers
2. Process and Model
Objectives
The software crisis
The code-and-fix approach to software development
Software engineering and the software process
The layers of software engineering
A generic framework of the software process
Software models
Prescriptive and agile models
Computer Aided Software Engineering: CASE
Review
Questions
Answers
3. Requirements Engineering
Objectives
Requirements engineering
What is requirements engineering?
The steps in detail
Inception
Elicitation
Elaboration
Negotiation
Specification
Validation
Management
Use case modeling
Use case modeling in the UML specification
Review
Questions
Answers
4. An Introduction to Analysis and Design
Objectives
Introduction
System analysis
System design
The relation between analysis and design
Introduction to models
Definition of the term model
The properties of models
Model properties: maintainability and disposability
Model properties: graphics and text
Model properties: comprehension
The main models of traditional analysis and design
Class model
Data-flow diagram
Sequence diagrams
Useful points
The benefits of using formal models
Case studies
Review
Questions
Answers
5. Object-oriented Analysis and Design
Objectives
Introduction
Modelling standpoints
Classes and objects
Classification
Classification in object-oriented design
A definition of class and object
Examples of classes
Some thoughts on the relationship between classes and objects
Concrete and conceptual classes
Attributes
Operations
Dynamic behaviour and state
UML notation and conventions
Symbol
Naming conventions
Finding classes
Relationships between classes
Specifying relationships in detail
Inheritance
Abstract classes
Aggregation and composition
Aggregation
Composition
Self-association and roles
Link classes and link attributes
Constraints and notes
Notes
Constraints
Class-Responsibility-Collaborator cards
From model to program
Dynamic behaviour
Interaction diagrams
Summary
Review
Questions
Answers
6. Data-Flow Diagrams
Objectives
Introduction to data-flow diagrams
What are data-flow diagrams?
An example data-flow diagram
The benefits of data-flow diagrams
Case study
The different kinds (and levels) of data-flow diagrams
Elements of data-flow diagrams
Processes
Data-flows
Data stores
External entities
Multiple copies of entities and data stores on the same diagram
Context diagrams
What is a context diagram?
Constructing a context diagram
Level 1 data-flow diagrams
What is a level 1 DFD?
Constructing level 1 DFDs
Decomposing diagrams into level 2 and lower hierarchical levels
What is a level 2 (or lower) DFD?
Constructing level 2 (and lower) DFDs — functional decomposition
Making levels
Balancing
Numbering
Process descriptions
Validation
An example in constructing a data-flow diagram
Identify the system boundaries
Follow inputs
Follow events
Fill in gaps
Repeat
Review
Questions
Answers
7. Design
Objectives
Introduction
Abstraction
Architecture
Patterns
Modularity
Information hiding
Functional independence
Stepwise refinement
Refactoring
Design classes
Review
Questions
Answers
8. Design Patterns
Objectives
Introduction to design patterns
The idea of a pattern
The origins of design patterns
Patterns in software design
Design patterns in object-oriented programming
Definitions of terms and concepts
Scope of development activity: applications, toolkits, frameworks
Pattern classifications and pattern catalogue
Behavioural patterns
Creational patterns
Structural patterns
How to use a design pattern
Patterns in Java
The Observer pattern in Java
The Model-View-Controller pattern
Abstract factory facilities in Java
Composite patterns in Java
Review
Questions
Answers
9. Software Testing
Objectives
Introduction to software testing
The testers
The developers
An independent testing team
The customer
Principles of software testing
The completion of software testing
Writing testable software
Test cases and test case design
Testing strategies
Unit testing
Integration testing
Validation testing
System testing
Testing advice
Flow graphs, cyclomatic complexity and white-box testing
Black-box testing
Object-oriented testing
Debugging
Brute force debugging
Backtracking
Cause elimination
Bisect
Review
Questions
Answers

List of Figures

1.1. A diagrammatic representation of a system
2.1. The code-and-fix approach
2.2. The process with requirements
2.3. The layers of software engineering
2.4. The waterfall method
2.5. The incremental development software model
2.6. Disposable prototyping
2.7. SELECT-Enterprise screenshot
2.8. Java code
2.9. A command-line Java interpreter
3.1. Actor representations
3.2. The system boundary
3.3. Representations of use cases
3.4. Use case association
3.5. Use of stereotypes in use case relationships
3.6. A use case example, without generalisation
3.7. Use case generalisation
3.8. Use case example, with generalisation
3.9. A full example
3.10. Without generalisation
3.11. With generalisation
4.1. An example class model of an estate agency
4.2. An example of a data-flow diagram
4.3. An example of a sequence diagram
5.1. The UML symbol for a class
5.2. A relationship between two classes
5.3. Indicating multiplicity
5.4. Generalisation-specialisation represented in the UML
5.5. The representation of aggregation in the UML
5.6. The representation of composition in the UML
5.7. Link attributes
5.8. The notation for notes
5.9. Sequence diagram notation in the UML
6.1. An example data-flow diagram
6.2. The notation for a process
6.3. Notation for a data-flow
6.4. Notation for a data store
6.5. Notation for external entities
6.6. How to notate duplicated external entities
6.7. How to notate duplicate data stores
6.8. A context diagram for Video-Rental LTD
6.9. A level 1 DFD for Video-Rental LTD
6.10. A level 2 data-flow diagram for Video-Rental LTD
6.11. Find the external entities
8.1. A simple pattern for a bridge
8.2. The girder
8.3. The arch
8.4. Suspension
8.5. Subdivision
8.6. Narrowing
8.7. The Forth Bridge
8.8. Class diagram of the Observer pattern
8.9. Class diagram for the Abstract Factory pattern
8.10. Class diagram of the Composite pattern
8.11. The ECG Observer
8.12. Java output of screen and font information
8.13. java.awt GUI components containers and layout managers
9.1. Flow graph notation
9.2. An example flow-graph

List of Tables

8.1. Design patterns according to Gamma et. al.
8.2. Observable class methods in java.util.package