3 Cr. (Hrs.:3 Lec.)
Builds on the student's existing knowledge of and experience designing software. This course focuses on high level design of software systems so that those systems satisfy quality attributes such as security, availability, performance, and modifiability. Students will learn the importance of developing, documenting, communicating, and adhering to a software architecture that achieves not only the functional but also the non-functional requirements of a software system. Prerequisite: ESOF 328 and CSCI 443. (1st)
Course generally offered fall (1st) semester.
E1. Students have a conceptual understand of and practical experience with the steps of requirements production, including requirements elicitation, requirements validation, and requirements management. (ESOF 328)
E2. Students have worked in a group to design, implement, test, and maintain a small software system (5000 lines of code) and appreciate the complexities of implementing a large software system. Students have made at least two presentations on aspects of the software systems that they implemented. (ESOF 322)
E3. Students should have a solid understanding of commonly used data structures and well-known algorithms and how to implement them in a high-level object-oriented programming language. (CSCI 332)
R1. Be able to design and implement a term project in a high-level object-oriented program language by utilizing at least two (2) software design patterns and conforming to a well-known software architecture.
R2. Be able to analyze and articulate the impact of their engineered design on the quality attributes of their code base.
R3. Understand the concept of software design patterns, why they are useful, and how they are created and promulgated.
R4. Be familiar with some of the 23 “Gang of Four” design patterns and other useful patterns and give the requirements for an application for which at least one of the patterns studied applies, can select and appropriately utilize the pattern.
R5. Must be able to provide a complete design document – using the latest version of UML – for the software being written.