Large-scale software development has been described as one of the most difficult of human undertakings. This course examines the reasons for the inherent complexity of software construction, and presents structured methods to deal effectively with it. The course will focus on the object-oriented approach for analysis and design. Students will gain an appreciation of the difference between writing programs and doing analysis and design. Problem formulation and decomposition (analysis) and solution building (design) will be covered. Students will work in small groups, each group having the responsibility for analysis, design and implementation of a software system. Case tools will be used in several stages of the development process.