3F6 Software Engineering and Design
This 16 lecture module aims to teach some of the key principles
of software engineering and design. It is aimed specifically at
the construction of engineering systems built by small teams of
5 to 20 people.
The course starts with a low-level overview of what computers are doing
``close to the metal'' and then works up through object oriented
design techniques to system components and software management.
- Architecture of a computer (1)
How a program executes, the structure of memory and pointers in C/C++.
- Classes and C++ (2,3)
Introduction to object oriented programming in C++; motivation,
approach, language facilities.
- The Unified Modeling Language (4)
Using formal UML diagrams to express the architecture and behaviour of software; and the role of these diagrams in software design.
- Object Oriented Design (5)
How to turn a specification into a software design.
- Design Patterns (6,7)
Commonly recurring design problems and solutions.
- Refactoring (8)
Redesigning existing software to improve its design and to incorporate new capabilities.
- User interface design (9)
Designing for the user, use cases and UI design patterns.
- Distributed Systems (10,11)
Client-Server architectures and CORBA.
- Database Systems (12)
Database management systems, transaction processing,
concurrency control, check-pointing and recovery.
- Concurrent Systems (13,14)
Constructing systems with multiple processes/threads.
- Software Management (15,16)
How to manage the software construction process for small engineering systems.
Lecture Notes and Examples Papers
Lecture notes will appear immediately after each lecture. Example paper solutions will appear approximately 4 weeks after they are issued.
Red=not accessible yet
CUED C++ Resource Guide