discipline banner.gif (11841 bytes)

Back to Software Architecture and Related Concerns

See also

Definitions.pdf (206Kb)

Related Papers and Columns

Software Architecture (.pdf)

On this page:

System Definitions

Software Architecture Definitions

 

Architecture Community Input

Practitioners' Definitions

Give us your Definition for:
-- Architectural Mechanisms
-- Architecture Strategy

What is Your Point of View on:
-- RUP and Architecture

 

Definitions of Software Architecture

System Definitions

UML 1.3: A system is a collection of connected units that are organized to accomplish a specific purpose. A system can be described by one or more models, possibly from different viewpoints.

IEEE Std. 610.12-1990: A system is a collection of components organized to accomplish a specific function or set of functions.

Software Architecture Definitions

The following definitions are by influential writers in this field. They are organized chronologically, with the most recent first. (You can also check out the SEI's great collection of Software Architecture Definitions.)

Bass, Clements, and Kazman. Software Architecture in Practice 2nd ed, Addison-Wesley 2003:

The software architecture of a program or computing system is the structure or structures of the system, which comprise software elements, the externally visible properties of those elements, and the relationships among them.

UML 1.3:

Architecture is the organizational structure of a system. An architecture can be recursively decomposed into parts that interact through interfaces, relationships that connect parts, and constraints for assembling parts. Parts that interact through interfaces include classes, components and subsystems.

Bass, Clements, and Kazman. Software Architecture in Practice, Addison-Wesley 1997:

'The software architecture of a program or computing system is the structure or structures of the system, which comprise software components, the externally visible properties of those components, and the relationships among them.

By "externally visible" properties, we are referring to those assumptions other components can make of a component, such as its provided services, performance characteristics, fault handling, shared resource usage, and so on. The intent of this definition is that a software architecture must abstract away some information from the system (otherwise there is no point looking at the architecture, we are simply viewing the entire system) and yet provide enough information to be a basis for analysis, decision making, and hence risk reduction."

Garlan and Perry, guest editorial to the IEEE Transactions on Software Engineering, April 1995:

Software architecture is "the structure of the components of a program/system, their interrelationships, and principles and guidelines governing their design and evolution over time."

Dewayne E. Perry and Alexander L. Wolf. "Foundations for the Study of Software Architecture''. ACM SIGSOFT Software Engineering Notes, 17:4, October 1992:

"... software architecture is a set of architectural (or, if you will, design) elements that have a particular form.

We distinguish three different classes of architectural element:
- processing elements;
- data elements; and
- connecting elements."

IEEE Std. 610.12-1990:

Architecture is the organizational structure of a system.

Practioner's Definitions

The following definitions are samples from software architects and senior software engineers given at the outset of our software architecture workshops. They reflect the current understanding of software architecture among practitioners of this discipline.

Software architecture is:

  • an overall view of the solution to a problem
  • the high-level design of modular components and how they interact
  • a foundation that one can build on to solve a problem (e.g., rules, policies, attributes, etc.)
  • an efficient method to meet a fixed set of well-defined attributes

Visitor Definitions

If you are a practicing software architect, we would like to post your definition of software architecture here.

Marshall Anthony, Student Software Architect, Fairleigh Dickinson University

Software Architecture is the logical flow (or design) of interrelated components that work towards the goal of a current or prospective system, given the required resources.

Semyon Axelrod and Mike Regan, GMAC/RFC

"Software architecture forms a set of abstractions about the system that provide enough essential information to form the basis for communication, analysis, decision making and risk assessment.

Every system can be abstracted to a set of models that hide irrelevant details while preserving the essential structure. Different models are used to capture different concerns. The models are usually graphical and focus on the public aspects of sub-systems and components along with their relationships to each other."

Pierre Naccache, R3D Information & Technologie, Canada

"An architecture is the identification of the components of a system, their relationships and their organization. An architecture supports the goals of a system and respects the constraints. An architecture identifies the critical issues and makes explicit the design choices made. Finally, an architecture prescribes the rules that must be followed (by the components)."

Product Line Architecture Team, Convergys

"The architecture of a system defines the building blocks, the externally visible properties of these building blocks, and their interrelationships"

Dr Paul Netherwood, CWB, UK

"Architecture is defined to be the rules, heuristics and patterns governing:

  • Partitioning the problem and the system to be built into discrete pieces
  • Techniques used to create interfaces between these pieces
  • Techniques to manage overall structure and flow
  • Techniques used to interface the system to its environment
  • Appropriate use of development and delivery approaches, techniques and tools.

Defining architecture is part of the software development process. Its primary goal is to define the non-functional requirements of a system and define the environment. The detailed design is followed by a definition of how to deliver the functional behavior within the architectural rules. Architecture is important because it:

  • Controls complexity
  • Enforces best practice
  • Gives consistency and uniformity
  • Communicates skill needs
  • Reduces risk
  • Enables re-use."

Hubert Matthews, Oxyware Ltd, UK

Architecture is the highest level description of a system that allows us to reason about whether the system meets its requirements in a given context, and which constrains all further refinements. It is a context-dependent balance of the forces and constraints that mould the system. <May 15, 2002>

Jim Standley, MetLife

Application Architecture is the consideration of the parts that make up a system: how many there are, how big they are, how they divide responsibility, how they collaborate, how they communicate. All this is a view of design at a high enough level of abstraction that it may be applied to more than one system.  Some days I call it "breaking big rocks into little rocks." <May 17, 2002>

G Muniasamy, Tentacle Technologies (M) Sdn Bhd

Architecture is an approach to understand the problem and window to view the solution.

Valluvan Raman, MTech India

Software architecture is the body of knowledge that takes the highest authority to play with the gene of a software system and to alter all its visible and invisible characteristics. <November 17, 2008>

 

Slides/Notes on Definitions

See Definitions.pdf (206Kb) for some of the slides (with student notes) we used as context setting in our "How to Lead/Follow/Get out of the Way" seminar at the Enterprise Architectures Conference in March, 2001.

 

Copyright © 1999-2008 by Bredemeyer Consulting
URL: http://www.bredemeyer.com
Last Modified: November 17, 2008