Architectures for Software Systems

Credits: 12 units

Semester: Spring

Length: full semester


The amount and complexity of software in systems is on the rise. Avionics software in modern aircrafts ranges in tens of millions lines of code. It is not atypical for a premium class automobile today to contain close to 100 million lines of code. Same is true for chemical and nuclear power plants. Such large proportion of software in these systems introduces design and operational complexity making them high-risk systems. The fundamental objective of this course is to help you develop a clear understanding of the significant role an architecture plays in the development of such systems.

Designing architectures of software-intensive systems can be challenging. The requirements that drive a system’s architecture are often quite different from the requirements that define the functionality of a system. They have a longer-term impact on the system than most functional requirements, some are highly subjective or difficult to articulate, they have non-obvious interactions with each other, and many stakeholders don’t understand the architectural implications of what they need, so they are likely to overlook some of their architecturally significant requirements. The architecture must anticipate change in the functional requirements, in business conditions, in available technologies, in the development organization itself, and so forth. The architecture must also be stabilized while many functional and business requirements are still unstable. Architecturally significant requirements can be difficult to test before the system is operational. They often have cross-cutting impact, making shortcomings difficult to correct after development has progressed, and thus making them high risk. So, another objective of this course is to introduce you to fundamental concepts, techniques and methods used for creating and managing architectures of software intensive systems.

Course Topics

  • Architectural Drivers and Quality Requirements
  • Architectural Tactics and Patterns
  • Designing Architecture
  • Architectures Lifecycle and Processes
  • Architecture Documentations
  • Guidance to Architects
  • Design by Selection
  • Architecture Evaluation
  • Future Directions in Architecture (Architecture in Cloud Computing; Architecture in Product Lines)

More course details can be found in the Managing Software Development syllabus.

After completing this course, students will:

  • Be able to understand what software architecture is, what fundamental concepts underlying a software architecture and what is the significance of software architecture
  • Be able to examine how business goals and quality attributes influence the architecture of a software system
  • Be able to understand predominant quality attributes – For example: availability, interoperability, modifiability, performance, security, testability and usability
  • Be able to use architectural tactics and patterns in designing an architecture
  • Be able to use a proper architectural design methodology (e.g. ACDM, ADD,..) to create an architecture of a software system
  • Be able to create analytical models as supporting evidence for architectural design decisions
  • Be able to discriminate among alternative design choices
  • Be able do tradeoff analysis for resolving conflicts among quality attribute requirements
  • Be able to document interfaces and behavior of architectural elements
  • Be able to understand the significance of views in documenting an architecture
  • Be able to follow a view-based approach in documenting the architecture
  • Be able to follow Architecture Tradeoff Analysis Method (ATAM) for analyzing the suitability of an architecture for a given purpose


Industrial software engineering experience, or a comprehensive undergraduate course in software engineering. All (non-MSIT) applicants need to submit a one page description of their prior industrial software experience to the instructor.

Сайт находится в технической разработке