Department of Computer Science, Unit Catalogue 2007/08
CM50109 Formal methods & programming
| Credits: 12 |
| Semester: 1|
|Assessment: CW 100%|
(a) to develop an understanding of how the principles behind software development are
much more important than the chosen programming language, and how specification and design choices may have a major impact on the correctness and suitability of the final software solution;
(b) to develop a systemic understanding of software development paradigms for complex software system building;
(c) to develop skills in critically analysing problems for appropriate software solutions;
(d) to develop an understanding of, and skills in the use of, formal methods as part of the software design process.
(e) to develop group working skills in software development, and an understanding of how teams are built and interact.
After taking this unit the student should be able to:
* identify issues and appropriate solutions for the design and implementation of complex software problems;
* perform evaluations of design solutions to determine their fitness for purpose;
* demonstrate an understanding of the principles of software development paradigms and their relationship to the appropriateness of an eventual software solution;
* demonstrate an understanding of the use of formal methods as part of the development of software solutions;
* work effectively in a team to develop a software solution to a given problem.
Choosing appropriate design techniques (T F A); designing software solutions in modular and object-oriented programming languages (T, F, A); Formally specifying solutions for modular languages, and incorporating these specification into hierarchical object models, and implementing software solutions based on these models (T, A). Group working (T, A).
The building blocks of software. Software design paradigms: abstraction, modularisation, encapsulation, data hiding, clientship, reuse, forms of inheritance and their meanings. Use of formal specification techniques and their place in the software development lifecycle. Principles for engineering complex software systems. The effect of the programming language on design and implementation issues. The differences (and similarities) between modular programming and object oriented programming. Software project management and group working (with associated group project).