Site Archive (Complete)
Architecture Blog: What Is Software Architecture
Architecture & Design
PATTERN LANGUAGE

Modeling, Managing, Making it Right.

by Jonathan Erickson
IF YOU BUILD IT

... Will they Come?

by Arnon Rotem-Gal-Oz
April 23, 2006

What Is Software Architecture

Looking the software architecture definitions mentioned in the previous post, we can see there are characteristics that are more prevalent than others:

  • Architecture is early. It represents--well at least, it should represent--the set of earliest design decisions which are both hardest to change and most critical to get right.
  • Architecture is an attribute of a system, whether or not its design was international. Every system has an architecture.
  • Achitecture is about breaking a system into components and setting boundaries. It doesn't describe all the components--it usually deals with the major components of the solution. Also, it doesn't describe the complete characteristics of components--it mainly deals with their interfaces or other aspects that has to do with their interactions.
  • Architecture is about the relationships and interactions of components. Again we are interested in the behaviors of the component as it can be discerned from other components interacting with it.
  • Architecture explains the rationale behind the choices (vs. the choices not made). It is important to understand the reasoning as well as the implications of the decisions made in the architecture since their impact on the project is large. Also it can be beneficial to understand what alternatives where weighted and abandoned (for future reference, when/if things needs to be reconsidered, and for anyone new to the project that needs to understand the situation).
  • There isn't a single structure that is the architecture--there's a need to look at the architecture from different directions or viewpoints to fully understand it.


It is also important to note the following two points:

  • Architecture is a type of design (but not all design is architecture).
  • Architecture is the first design artifact where a system's quality attributes are addressed. Where quality attributes (some call them "non-functional requirements" or "ilities") are requirements for the system as a whole ( e.g., security, performance, availability, flexibility, etc.)

To sum things up, here is my definition for software architecture:

Software architecture is the collection of the fundamental decisions about a software product/solution designed to meet the project's quality attribute requirements. The architecture includes the main components, their main attributes, and their collaboration (i.e. interactions and behavior) to meet the quality attributes. Architecture can and usually should be expressed in several levels of abstraction (depending on the project's size).

If an architecture is to be intentional (rather than accidental), it should be communicated. Architecture is communicated from multiple viewpoints to cater the needs of the different stakeholders.

Posted by Arnon Rotem-Gal-Oz at 03:58 PM  Permalink




 
INFO-LINK


Related Sites: DotNetJunkies, SD Expo, SqlJunkies