Software Architecture Course

Course summary

While there is vigorous debate about which process to follow — including Agile and high-ceremony processes — there is a general consensus about the core concepts of software architecture and how to model them.

Software architects build and analyze models to understand systems and reduce risk, and use those models to create and evolve implementations. Since software development has diverse risks, architects build various kinds of models. They follow a divide-and-conquer strategy, where they “divide” by producing models with a limited view of the system, allowing them to comprehend and reason about a particular part or quality of the system. In order to “conquer,” however, they must understand how all the models fit back together to build a system.

So we need ways to make it easier to understand individual parts of a model and relate the parts with the whole.

This course explains how to use models of goals, information, behavior, and components to express business problems and solutions, with the focus on interconnections between the models. Conceptual and concrete models are related to each other using refinement. Views narrow the details present in the full model, allowing analysis and improved comprehension.

It gives participants the conceptual tools to help them divide models as needed, as well as fit them back together (“conquer” them). Course participants will leave with a coherent mental framework of software architecture, helping them to reconcile business needs with implementation issues, identify risks, and successfully design systems.

Topics

The five-day version of the class can be tailored to suit your needs. There is little wiggle room in the one and three-day classes to enable much customization, but we are willing to work with you to cover the topics of your choice.

  • Modern software challenges
  • Sources of risk in software engineering
  • Essential modeling ideas: Refinement, Views, Generalization, and Classification
  • Goals models
  • Information models
  • Behavior models
  • Component and connector models
  • Qualities of good models
  • Domain modeling
  • Blackbox modeling
  • Whitebox modeling
  • Choosing level of detail
  • Views and viewtypes
  • Architectural styles
  • Advanced goals models
  • Advanced information models
  • Advanced behavior models
  • Advanced component and connector models
  • Avoiding top-down design and big design up front
  • Migration planning
  • Architecture analysis
  • Bridging architecture and code
  • Service oriented architectures
  • Model driven engineering & domain specific languages
  • Product line architectures
  • What is still hard in software architecture
  • Tool support
  • Maximizing model effectiveness

Mechanics

This course is available as a 1, 3, or 5-day course. The lectures contain a running example and comprise about 60% of course time. The remaining 40% are in-depth exercises designed to reinforce key concepts.

  • One-day course: Day one covers the basics of software architecture, views, and refinement. It is suitable as a introduction to software architecture for a general audience, including developers and managers.
  • 3-day course: Lectures during days two and three show basic use of modeling goals, information, behavior, and components. In order to focus on key ideas, these days focus on “best case” development. Participants in exercises will design and analyze a simple system using the techniques from lectures.
  • 5-day course: Lectures during days four and five relax the idealistic assumptions in previous days and discuss how to get the most value from software architecture models in realistic conditions, including short time boxes, bottom-up development, brownfield development, and partial outsourcing. Advanced topics in model building are covered. Participants in exercises will design and analyze a second, more complex system.