CSE 311 Software Architecture and Design (3 credits)

Catalog description:

An in-depth look at software design. Study of software architecture, design patterns and software product lines. Designing for quality attributes such as performance, safety, security, reusability, reliability, etc. Measuring internal qualities and complexity of software designs. Evolution of designs. Basics of software evolution, reengineering, and reverse engineering.  Application of formal methods to specify and evaluate designs.

Prerequisite:

CSE 201

Required topics (approximate weeks allocated):

  • Architecture, Design, and Development Process (1)
  • Quality Attributes (1)
  • Software Architecture (2)
  • Design Notations (1)
  • Design Patterns (1)
  • Software Product Lines (2)
  • Detailed Design (1)
  • Design Review and Design Evaluation (2)
  • Formal Methods (2)
  • Design Rationale (1)
  • Reverse Engineering and Design Recovery (2)

Course Outcomes

1: To be able to make the transition from requirements analysis to software design.

1.1: The student will be able to identify quality attributes relevant to a design based on the specified requirements

1.2: The student will be able to identify different views related to a software architecture

1.3: The student will be able to partition a system based on different views of the software architecture

2: To be able to specify software designs

2.1: The student will be able to apply a wide variety of design patterns and architectural styles in designing a wide variety of software

2.2: The student will be able to apply domain analysis techniques to specify software product line architectures

2.3: The student will be able to use sound quality metrics (quality attributes) to identify design objectives

2.4: The student will be able to measure and assess designs to ensure the design objectives have been met

2.5: The student will be able to use design patterns to create designs when appropriate.

3: To be able to facilitate design maintenance and recovery

3.1: The student will be able to apply design rationale approaches to capture rationale and to assess or evaluate a design

3.2: The student will be able to use reverse engineering techniques to recover the design of software

3.3: The student will be able to evolve a software design to account for new or changed requirements

4: To be able to apply formal methods to the design activity

4.1: The student will be able to use basic formal techniques to specify a design

4.2: The student will be able to use formal techniques to validate a design

5: To be able to apply the use of tools for software design

5.1: The student will be able to use standard UML tools to specify software designs

5.2: The student will be able to use formal analysis tools such as model checkers to verify design properties

5.3: The student will be able to use design rationale tools to capture rationale