An in-depth study of software construction using a modern language. Concepts such as information hiding, data abstraction, concurrency, and object-oriented software construction are discussed. An in-depth study of methods, tools, notations, and validation techniques for the analysis and specification of software requirements.
Students participate in a group project on software requirements.
Concepts and methods for the architectural design of large-scale software systems. Fundamental design concepts and design notations are introduced. Several design methods are presented and compared, with examples of their use. Students participate in a group software design project. Formal mechanisms for specifying, validating, and verifying software systems.