Lecturer: Dr Jim Grundy
COMP1011 and one of (COMP1012, COMP1013, INFS1014) and 12 credit
points of A-level mathematics or mathematical statistics units
Incompatible with COMP1110
This unit introduces students to the tools and techniques fundamental to the construction of program systems of industrially relevant size and complexity. The various phases of the software life cycle are examined before considering the problems of design, implementation, testing and maintenance in more depth. The fundamental strategies of abstraction, decomposition and reuse are employed throughout the course as methods to combat the difficulty of constructing large or complex software systems. Particular attention is payed to the object-oriented approach to software construction.
The unit necessarily has a strong practical emphasis, and gives the student experience of developing components for larger software systems. The unit extends the student's programming skills with knowledge of the Java and C programming languages, and provides experience with tools that support the software engineering process.
Existing imperative programming skills will be transfered to the Java and C programming languages; experience will be gained with the Make and RCS development tools; testing and debugging skills will be built; concepts of abstraction, decomposition and object-orientation are emphasised.
Industrially relevant problems typically require program systems of a size and complexity that renders undisciplined approaches to their construction destined to failure. This course teaches the fundamental strategies of abstraction, decomposition and reuse as methods for overcoming these problems.
Verification and validation techniques, with an emphasis on testing, are taught as a means to ensure that students are able to deliver the software products required of them, both in this course and in their future programming careers. Once delivered, the working life of a product may well reach into decades. Students are therefore taught the skills and tools necessary to maintain software, and to create documented, maintainable software in the first place.
In software systems, the design process involves the decomposition of the desired system into a collection of interacting design entities, and the construction process involves the realisation of the design entities as program modules. In a good design this controls complexity, enables the resulting system to be modified, and provides a mechanism for software reuse. The student needs to gain experience in the construction, testing and maintenance of these program systems, and needs to acquire effective skills in the use of the corresponding tools (configuration controllers, source version controllers, debuggers, profilers).
This unit will carry the main responsibility for:
The unit shares responsibility for presenting software design by providing an introduction to some of the basic ideas in this area.
Upon completion of this unit, the student will:
The following topics will be covered: