Schedule (subject to change; check regularly)

Lecture slides and handouts are available for download from blackboard.

Week 1   

Jan 23

    Topic:   Introduction

    Reading: T1, T2.1-2.6

Week 2   

Jan 28

    Topic: Basic Concepts

    Reading: T3

Jan 30

    Topic: Architectural View and Styles I

    Reading: T4.1-4.3.4

Week 3   

Feb 4

    Topic: Architectural View and Styles II

    Reading: T4.1 - 4.3.4

Feb 6

    Topic: Data Flow Style I

    Reading: T5

    Handout: Lab 1, Code

Week 4   

Feb 11

    Topic: Data Flow Style II

    Reading: T5

Feb 13

    Topic: Data Flow Style Case Study

    Reading: T5

Week 5   

Feb 18

    Topic: Call Return Style I

    Reading: T5

Feb 20

    Topic: Call Return Style II

    Reading: T5

Week 6   

Feb 25

    Topic: Event Based Style

    Handout: Lab 2, Code

    Reading: T5

Feb 27

    Topic: Event Based Style Case Study

    Reading: T5

Week 7   

Mar 4

   Topic: Recap of Lab 1, Lab 2, and midterm review

Mar 6

   Topic: Recap of Lab 1, Lab 2, and midterm review

Week 8   

Mar 11

    -- Spring Break

Mar 13

    -- Spring Break

Week 9   

Mar 18

  -- Midterm Exam

Mar 20

   Topic: C2 Style

   Reading: T4.3.5

   Handout: Project Description

Week 10   

Mar 25

    Topic: Architecture Implementation Frameworks

    Reading: T9

Mar 27

    Topic: Distributed Software Architectures

    Reading: T11

Week 11   

Apr 1

   Topic: Architecture-Based Adaptation

    Reading: T14

Apr 3

   Topic: Project Requirements Recap

Week 12   

Apr 8

   -- Midterm Project Presentations 

   -- Presenters: Adnan, Garine,  Jaclyn, Chad, Brandon, Keith  

Apr 10

   -- Midterm Project Presentations

    -- Presenters: Bradley, Ribhi, Jeremy, Kyle,  Christopher, Paul

Week 13   

Apr 15

    Topic: Quality Attributes of Software Architecture I

    Reading: T12 and ATAM

Apr 17

    Topic: Quality Attributes of Software Architecture II

    Reading: T12 and ATAM

Week 14   

Apr 22

    Topic: Subsystem Design I

    Reading: Object-Oriented Design Patterns

Apr 24

    Topic: Subsystem Design II

    Reading: Object-Oriented Design Patterns

Week 15   

Apr 29

   -- Final Project Presentations 

   -- Presenters: Paul, Christopher, Kyle, Jeremy, Ribhi, Bradley

May 1

   -- Final Project Presentations  

   -- Presenters: Keith, Brandon, Chad, Jaclyn, Garine, Adnan

Week 16   

May 6

   Topic: Guest Lecture (paper) and Course Recap

Week 17

May 13     1:30-4:15pm

    -- Final Exam


Professor                       Dr. Sam Malek

                                       Electronic Mail:

                                       Office: Nguyen Engineering Building, Room 4431

                                       Office Phone: +1-703-993-1677

                                       Office Hours: Mon 10am-12pm or by appointment

Teaching Assistant        Naeem Esfahani

                                       Electronic Mail:

                                       Office: Nguyen Engineering Building, Room 4404

                                       Office Hours: by appointment



One of the greatest difficulties for an inexperienced programmer in a large software engineering project is understanding the “big picture”. What are the components of a software system? How are those components communicating with one another? What other architectures are possible for the system? What are the tradeoffs between those alternatives? Architecting software is normally reserved for senior and highly experienced programmers, but this course shows you the ropes of the trade so that you too can work towards becoming a software architect.

This course teaches how to design, understand, and evaluate software systems at an architectural level of abstraction. By the end of the course, students will be able to:

  1. Identify and characterize the major architectural styles in existing software systems.

  2. Recover the architecture of a software system by analyzing its code.

  3. Describe a system’s architecture accurately using views of the code and run-time structures.

  4. Use existing tools and architectural frameworks to expedite software design.

  5. Design a medium-size software system that satisfies a specification of requirements

  6. Discuss the pros and cons of architectural alternatives.

This course can be taken for credit towards

  1. BS CS major as a Senior CS-related course

  2. BS CS minor in Software Engineering

  3. BS in Applied CS in Software Engineering



  1. CS 321 or SWE 321 Minimum Grade of C

  2. Knowledge of Java

Textbook and Readings

  1. Software Architecture: Foundations, Theory, and Practice (required).  R. N. Taylor, N. Medvidovic, and E. M. Dashofy. Wiley, 2009.


  1. Class Participation 5%

  2. Two Programming Assignments 25%

  3. One Course Project 25%

  4. Midterm Exam 20%

  5. Final Exam 25%

Late Work Will only be accepted with previous authorization from the instructor.