powered by
XX:YY
https://asq.click/

Software Architecture

Introduction

Prof. Cesare Pautasso

http://www.pautasso.info/
cesare.pautasso@usi.ch

http://asq.click

Contents

  • Architecture and other Metaphors
  • Architectural Forces
  • When do you need an architect?
  • Why software architecture?
  • Course Overview

Software Architecture

Firmitatis

Utilitatis

Venustatis

De Architectura

  • Durability the building should last for a long time without falling down on the people inside
  • Utility the building should be useful for the people living in it
  • Beauty the building should look good and raise the spirits of its inhabitants

Vitruvio, 23BC

The Art and Science of Building

  • Architects are not concerned with the creation of building technologies and materials—making glass with better thermal qualities or stronger concrete.
  • Architects are concerned with how building materials can be put together in desirable ways to achieve a building suited to its purpose.
  • The design process that assembles the parts into a useful, pleasing (hopefully) and cost-effective (sometime) whole that is called “architecture”.

Architecting, the planning and building of structures, is as old as human societies – and as modern as the exploration of the solar system

Foundation

Platforms

Which platform have you built your software on?

Nothing is built on stone;
all is built on sand,
but we must build as if the sand were stone.

Jorge Luis Borges

Closed

Open

Interfaces

Forces

When do you need an architect?

Small

One Person can build it

  • Minimal planning
  • Basic tools
  • Simple process

Medium

An experienced team can build it

  • Modeling plans
  • Power tools
  • Well-defined process

Large

Do not try this without an architect

Ultra-Large

Was this designed by an architect?

CodeCity, Richard Wettel

How Large?

Always choose the appropriate tools for the size of the project you are working on

How Large?

  • How much time to build it?
  • How many people in the project?
  • How much did it cost?

How to measure software size? Lines of code (LOC), GB, $

What is the largest software project you have been working on?

How Large?

Software Architecture

As the size and complexity of a software system increase, the design decisions and the global structure of a system become more important than the selection of specific algorithms and data structures.

Lecture Context

Why Software Architecture?

Hiding Complexity

Abstraction

The difficult part is to know which elements to leave out and which to emphasize

Communication

Representation

Visualization

Visualization

Visualization

Quality

Change

Evolution

Architectural decisions:
hard to change later on
and that you wish you could
get right early in a project

Stewart Brands, Ralph Johnson

Why Software Architecture?

  1. Manage complexity through abstraction
  2. Communicate, remember and share global design decisions among the team
  3. Visualize and represent relevant aspects (structure, behavior, deployment, …) of a software system
  4. Understand, predict and control how the design impacts quality attributes of a system
  5. Define a flexible foundation for the maintenance and future evolution of the system

Course Overview

Course Overview

  • Theory
  • Modeling exercises
  • Technology demos
  • Design workshops

Modeling exercises

  • Learn how to sketch, refine, communicate and defend your architecture from multiple perspectives
  • Describe an idea for your next software project, or represent an existing one
  • One model presented by each student

Technology Demos

  • Learn about how software architecture meets the code
  • Give a convincing demo of a component framework, a connector, a continuous integration tool, a deployment tool
  • One video for each student

Design Workshop

  • Learn about how to make architectural decisions
  • Present your alternative
  • Compare it with another one, argue why your team should adopt it
  • One design discussion for two/three students
    (one student per alternative)

References

  • Michael Keeling, Design it! From Programmer to Software Architect, Pragmatic Bookshelf, 2017
  • Michael T. Nygard, Release It! Design and Deploy Production-Ready Software, 2nd edition, Pragmatic Bookshelf, 2017
  • Richard N. Taylor, Nenad Medvidovic, Eric M. Dashofy, Software Architecture: Foundations, Theory and Practice, John-Wiley, 2009
  • Simon Brown, Software Architecture for Developers, LeanPub, 2015
  • George Fairbanks, Just Enough Software Architecture: A Risk Driven Approach, M&B 2010
  • Eberhardt Rechtin, Systems Architecting: Creating and Building Complex Systems, Prentice Hall 1991
  • Henry Petroski, Small Things Considered: Why There Is No Perfect Design, Vintage 2004
  • Ian Gordon, Essential Software Architecture, Springer 2004
  • Christopher Alexander, The Timeless Way of Building, Oxford University Press 1979
  • Stewart Brand, How Buildings Learn, Penguin 1987
  • Amy Brown and Greg Wilson (eds.) The Architecture of Open Source Applications, 2012