|
Edited by:
Bedir Tekinerdogan
| |

| |
Definition of Software
Architecture Design
The term architecture is not new and has
been used for centuries to denote the physical structure of an artifact.
The definition in Websters'
Dictionary:
Architecture:
1: the art or science of building; specifically:the art or practice of
designing and building structures and especially habitable ones
2 a>:formation or construction as or as if as the result of conscious act <the
architecture of the garden> b: a unifying or coherent form or structure <the
novel lacks architecture>
3: architectural product or work
4: a method or style of building
5: the manner in which the components of a computer or computer system are
organized and integrated
The software engineering community has
adopted the term to denote the gross-level structure of software-intensive
systems. The importance of structure was already acknowledged early in the
history of software engineering. The first software programs were written
for numerical calculations using programming languages that supported
mathematical expressions and later algorithms and abstract data types. Programs
written at that time served mainly one purpose and were relatively simple
compared to the current large-scale diverse software systems. Over time due to
the increasing complexity and the increasing size of the applications, the
global structure of the software system became an important issue. Already in
1968, Dijkstra proposed the correct arrangement of the structure of software
systems before simply programming. He introduced the notion of layered structure
in operating systems, in which related programs were grouped into separate
layers, communicating with groups of programs in adjacent layers. Later, Parnas maintained
that the selected criteria for the decomposition of a system impact the
structure of the programs and several design principles must be followed to
provide a good structure. Within the software engineering community, there is
now an increasing consensus that the structure of software systems is important
and several design principles must be followed to provide a good structure.
In tandem with the increasing popularity of
software architecture design many definitions of architecture have been
introduced over the last decade, though, a consensus on a standard definition is
still not established. We think that the reason why so many and various
definitions on software architectures exist is because every author approaches a
different perspective of the same concept of software architecture and likewise
provides a definition from that perspective. Compare this to the parable of "the
elephant in the dark" (as described by the mystic Rumi), in which four persons
are in a dark room feeling different parts of an elephant, and all believing
that what they feel is the whole beast.
Notwithstanding the numerous
definitions it appears that the prevailing definitions do not generally conflict
with each other and commonly agree that software architecture represents the
gross-level structure of the software system consisting of components and
relations among them.
Looking back at the historical
developments of architecture design we can conclude that similar to the many
concepts in software engineering the concept of software architecture has also
evolved over the years. We observe that this evolution took place at two places.
First, existing stable concepts are specialized with new concepts providing a
broader interpretation of the concept of software architecture. Second, existing
interpretations on software architectures are abstracted and synthesized into
new and improved interpretations. Let us explain this considering the
development of the definitions in the last decade. The set of existing
definitions is large and many other definitions have been collected in various
publications. We provide only the definitions that we consider as
representative.
In the following definition
software architecture represents a high-level structure of a software system. It
is in alignment with the earlier concepts of software architecture as described
by Dijkstra and Parnas:
"The logical
and physical structure of a system, forged by all the strategic and tactical
design decisions applied during development"
- G. Booch, Object-Oriented Design With Applications, Benjamin
Cummings, 1991.
The following definition explicitly considers the interpretation on the
elements of software architecture. It is a specialization of the previous
architecture definitions and represents the functional aspects of the
architecture focusing basically on the data-flow in the system.
"We
distinguish three different classes of architectural elements: processing
elements; data elements; and connection elements. The processing elements are
those components that supply the transformation on the data elements; the data
elements are those that contain the information that is used and transformed;
the connecting elements (which at times may be either processing or data
elements, or both) are the glue that holds the different pieces of the
architecture together."
- D.E. Perry & A.L. Wolf,
Foundations for the Study of Software Architecture. Software Engineering Notes,
ACM Sigsoft 17, 4:40-52, 1992.
A specialization of the
structural issues can be found in the following definition:
"
As the size and complexity of software systems increase, the design and
specification of overall system structure become more significant issues than
the choice of algorithms and data structures of computation. Structural issues
include the organization of a system as a composition of components; global
control structures; protocols for communication, synchronization, and data
access; assignment of functionality to design elements; physical distribution;
composition of design elements; scaling and performance; dimensions of
evolution; and selection among design alternatives. This is the software
architecture level of design. "
- M. Shaw & D. Garlan, Software Architecture: Perspectives on an
Emerging Discipline, Prentice Hall, 1996.
The following definition extends the previous definitions by including design
information in the architectural specification:
"The structure of
the components of a program/system, their interrelationships, and principles and
guidelines governing their design and evolution over time."
- D. Garlan, R. Allen & J. Ockerbloom, Architectural Mismatch: Why
it's hard to build systems out of existing parts,
Proceedings 17th international Conference on Software Engineering
(ICSE), 1995."
Finally the following definition
abstracts from the previous definitions and implies that software architectures
have more than one structure and includes the behaviour of the components as
part of the architecture.
"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."
- L. Bass, P. Clements & R. Kazman,
Software Architecture in Practice, Addison Wesley 1998.
Architecture as a concept
The understanding on the
concept of software architecture is increasing though there are still several
ambiguities. Architectures consist of components and relations, but the term components
may refer to subsystems, processes, software modules, hardware components or
something else. Relations may refer to data flows, control flows,
call-relations, part-of relations etc. To provide a consistent and overall
definition on architectures, we need to provide an abstract, yet a
sufficiently precise meaning of the components and relations. For this we
provide the following definition of architecture:
Architecture is a
concept representing a set of abstractions and relations.
In essence this definition considers architecture as a concept that is
general yet well defined. The reason for this is that the word concept has a
well-defined meaning. A concept is usually defined as a (mental)
representation of a category of instances and is formed by abstracting knowledge
about instances. The process of assigning new instances to a concept is called
categorization or classification. In this context, concepts are
also called categories or classes. There are
several theories on concepts and classification addressing the notions of
concepts, classes, instances and categories. Hereby it is essential to note that
concepts are not just arbitrary abstractions or groupings of a set of instances
but are defined by a consensus of experts in the corresponding domain. As such
concepts are stable and well-defined abstractions with rich semantics. The
definition thus enforces that each architecture consists of components that do
not only represent arbitrary groupings or categories but are semantically well
defined. In that sense we think that this definition is general enough to cover
the various perspectives on architectures. In addition, since an architecture is
a structure of concepts and each concept may represent structures themselves,
the definition implies that an architecture may have different structures. In
the simple case the architecture consist of a set of concepts that can be
considered as 'atomic' and do not have an internal structure. For large software
systems, however, it is necessary to define the architecture from various
perspectives such as, for example, from a logical view, the process view, the
development view and the physical view as defined by Kruchten. Therefore, at the
highest abstraction level the software architecture may consist of concepts that
each represents different architectural views.
|
|
| Architecture in Webster's
Dictionary |
| |
| |
| |
| Lack of Consensus on
Definition |
| |
| |
|
Definition Booch |
| |
| Definition Perry&Wolf |
| |
Definition
Shaw & Garlan |
| |
|
Common definition |
| |
|
Architecture is concept |
|
Conceptual Modeling |
| |
| Multiple Views
|
|