Department of Computer Science
Section A (Fall) Mon, Wed 13:00-14:30
A program which does not work is undoubtedly wrong; but a program which does work is not necessarily right. It may still be wrong because it is hard to understand or because it is hard to maintain as the program requirements change; or because its structure is different from the structure of the problem. (M. A. Jackson)
This course introduces the topic of software design through lectures, supplementary readings and a set of small design problems. The course deals with the problem of designing software that can be used, understood and modified by people other than the original designer.
Software design is in itself a large topic as design can deal with various classes of programs and systems: small, medium and large; batch; real time; distributed; and interactive (visual and graphical). Every design class has its own problems. In this course we deal with small to medium programs and small systems that work without critical time constraints (although time will be considered).
We examine design methods such as JSP (Jackson System Programming), Data Flow, SADT (Structured Analysis and Design Technique), top down, bottom up and structured design methods. We show how theoretical notions from finite state machines and grammars are related to and used in the design process.
Some of the low level techniques we look at are: abstract data types; backtracking; divide and conquer; structure clash resolution; process inversion; coroutines; and error handling.
Design issues are related to the other phases of developing a program: requirements analysis, specification, implementation, testing, and maintenance.
Upon leaving the course, you can expect to be able to design, implement and modify programs and systems of programs which transform sequences from one form to another. You will understand the role of tools and frames in the design process. You will be able to evaluate program designs and design methods.
Texts: Lecture notes
Prerequisites: general prerequisites, including COSC2001.03 and MATH2090.03