CISC 322/3.0 Software Architecture

Original Author: Nick Graham
Last Revised: October 31, 2006

Calendar Description

Abstractions and patterns of interactions and relationships among modules. Design recovery; relationship of architecture to requirements and testing.
Prerequisites: CISC 203/3.0, CISC-204/3.0, CISC-223/3.0 and CISC-235/3.0
Learning Hours 120 (36L;84P)


This course helps students with the transition from programming in the small (as presented in CISC 121 and 124) to programming in the large. The fundamental difference between small and large programs is their complexity. With large programs, considerably planning and design work is necessary prior to implementation to ensure that the system meets its required budget, functionality and quality attributes. Software architecture provides a conceptual and notational framework for expressing the high-level implementation design of software systems. As such, software architecture complements studies of software requirements (CISC 423), human factors (CISC 325) and validation and verification (CISC 327.) The goal of this course is to expose students to the problems of developing large software systems and to introduce them to architectural techniques to help solve these problems. The theory of software architecture includes criteria for decomposing systems into a set of components and connectors, notations for describing both the static and dynamic aspects of software architectures, and analytical frameworks for reasoning about architectural tradeoffs. Since third year students typically have not been exposed to the development of large software systems, the course involves working with a modestly-sized system, both in architectural design and in realization of that design in code.

The courses to which this course is a prerequisite are

  • CISC-423/3.0 (Software Requirements)
  • CISC-498/6.0 (Information Technology Project)

This course is required in the following programs: CSCI, SODE, and MAJ.


Problems in software engineering: the role of software architecture

Programming in the large, problems with developing large software, consequences of poor development practices, software development processes

Software architectural views
  • Architectural perspectives: structural, dataflow and object- oriented views
  • Notations for expressing architectural structure (e.g., UML component, deployment, class diagrams)
  • Notations for expressing architectural dynamics (e.g., UML sequence diagrams)
Designing software architectures

Component decomposition, interface specification, protocol specification

Architectural trade-off analysis
  • Architectural qualities (e.g., performance, availability, modifiability, reusability, security, portability, testability)
  • Trade-offs over quality requirements
Architectural styles and design patterns
  • Architectural styles (e.g., pipes and filters, layers, interpreter, repository, blackboard)
  • Object-Oriented Design patterns (e.g., iterator, flyweight, adapter, abstract factory)
Case studies

Demonstration of extensive systems or frameworks demonstrating architectural principles explored in course; e.g., web application architecture, .Net, CORBA

Possible Texts

While there is no single text that adequately covers the material of this course in one volume, there are many books covering various aspects of the course:

Texts on Software Architecture
  • Len Bass, Paul Clements and Rick Kazman, Software Architecture in Practice, Addison-Wesley, 1998

  • Paul Clements, Rick Kazman, and Mark Klein, Evaluating Software Architectures: Methods and Case Studies, Addison-Wesley, 2002
Texts on Software Architectural Styles
  • Mary Shaw and David Garlan, Software Architecture: Perspectives on an Emerging Discipline, Prentice Hall, 1996
Texts on Object-Oriented Design Patterns
  • Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley, 1995

  • Frank Buschmann, Regine Meunier, Hans Rohnert, and Peter Sommerlad, Pattern-Oriented Software Architecture, Volume 1: A System of Patterns, John Wiley and Sons, 1996

  • Partha Kuchana, Software Architecture Design Patterns in Java, Auerbach, 2004
Texts on UML
  • Grady Booch, James Rumbaugh and Ivar Jacobson, Unified Modeling Language User Guide, 2nd Edition, Addison-Wesley, 2005

  • Dan Pilone and Neil Pitman, UML 2.0 in a Nutshell, O'Reilly Media, 2005.

  • Martin Fowler, UML Distilled: A Brief Guide to the Standard Object Modeling Language, Third Edition, Prentice Hall, 2003

  • Scott W. Ambler, The Elements of UML 2.0 Style, Cambridge University Press, 2005

  • Craig Larman, Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development, 3rd Edition, Prentice Hall, 2004