Home

  My CV   Research   Publications   Projects   Teaching    
 

Personal Area

 

    
  About me

    

  Where I Live

 

  Photo Album

    
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 


 

 

>Research>Software Architecture

Henry Muccini
Ph.D. in Computer Science

Software Architecture (as in [PhD-Thesis])
[History] [Formalizing SA] [SA views] [SA and UML]

History:

The notion of Software Architecture (SA) may be related to precursor work on system decomposition and system abstraction: the notion of decomposing software systems into modules has been largely analyzed in the '60s and '70s (as
reported in [Garlan2001]): in 1968 Dijkstra [Dijkstra68] considered the problem to structure a computer program, in 1975 a Module Interconnection Language (MIL) has been presented in [DeRemerKron76] to partition the software into units
(separately implementable) and to define the relationships between
parts. The notion of abstraction may be found in [Shaw89] where Shaw presents its approach to embody abstract information into classes of components and illustrate methods for components composition.

Based on these (and many others) previous works, SAs emerged in the '90s as a discipline to structure complex software systems, exploiting commonalities in specific organizations domain (pipeline, client-server, pipe and filter) and to provide a high-level system description. In 1992, Perry and Wolf [PerryWolf92] propose one of the earliest definitions of SAs describing them as "a set of architectural (or, if you will, design) elements that have a particular form" in which elements are divided into processing elements, data elements and connection elements. Garlan and Shaw, in [GarlanShaw93], suggest that an SA for a specific system may be captured as ``a collection of computational components -
or simply components - together with a description of the interactions between these components - the connectors".
These and other definitions [DefSA-Boehm95,SADefCarnegie_W] proposed in the '90s present SAs as a tool to represent the system architecture by modeling individual components and their interactions and focusing on the overall organization of a large software system (the glue) using abstractions of individual
components.

Initially, the SA description mainly relied on architectural paradigms (pipelines, layered systems, client-server organizations) described through informal box-and-line diagrams. In [GarlanShawBook] (1996) the authors put in evidence how
this diagrammatic description of SA is ambiguous, not supported by
tools and without specific criteria for selecting architectures.
Anyway, they also highlight the practitioners interest in this new
discipline (also demonstrated by the success of the [GPT95,Gar95a] workshops on SA). Moreover, SAs where difficult to be maintained and impossible to be analyzed and there was no way to check consistency among requirements, SA and system implementation. However, the industry recognized the importance of
SA as a mean to create a library of components (techniques, patterns and so on) reusable in the development of new software systems.

New languages for describing architectures were needed. An ideal architectural description language would provide [GarlanShawBook]:

- Composition: it should be possible to describe systems
as composed of existent libraries of components and connectors;
- Abstraction: components and connectors should be described
at a desired level of abstraction hiding unnecessary details and
putting in evidence important properties;
- Reusability: components, connectors and whole architectures
should be reused to develop new components, connectors and system
architectures;
- Analysis: architectural descriptions should be analyzed.

Existing languages and notations do not have the ability to point out these (and other) architectural properties thus the need to develop SA ad hoc tools.


Formalizing Software Architectures

A primary problem in this area is related to the ability to suitably describe SAs. Tools and architectural languages have been introduced in order to make rigorous architectural specifications, avoiding ambiguity and making possible architecture-based analysis. Architectural Description Languages (ADLs) [ADL_Neno97,GarlanPerry95] were born providing a well defined syntax to define architectural entities. Each one has its own formalism to represent the topological and dynamic description of an SA; the Software Architect detects the system components and connectors, the ports, the interfaces and all that is needed by
the ADL topological model and group them together in a graphical (or syntactical) notation reflecting the architectural rules and constrains. Some of the initially defined ADLs are Unicon, Aesop, C2, Darwin and FSP, Wright, Cham and Rapide. We will very briefly summarize these ADLs giving some references on how to access the full information:

Aesop ('94) [Aesop,Aesop_W} is a system for developing style-oriented architectural design environments. It provides a generic toolkit and communication infrastructure that users can customize with architectural style descriptions and a
set of tools that they would like to use. Aesop helps the software engineer to exploit design and domain knowledge when producing domain specific architectures. Rapidly generate design environments for producing families of software systems. Store, retrieve, and organize libraries of "style-aware" architectural design elements and patterns with the Software Shelf
[Aesop_W].

- Unicon ('95) [UniCon95,Unicon_W] is an architectural-description
language intended to aid designers in defining SAs in terms of abstractions that they find useful. An architecture description in UniCon consists of a set of components and connectors: each component has an interface that define
computational rules and constrains. Connectors are specified by a protocol defining how components may interact. UniCon support schedulability analysis on non-functional properties. It only has a predefined set of types.

UniCon is an implementation constraint ADL, i.e., architectural elements (components, connectors, ports, ...) are directly related to their implementations. In particular, UniCon provides a mechanism to point to source documents, external to
UniCon, containing the components implementation in different programming languages.

UniCon is supported by a proactive graphical editor that prevents errors occurring during the architectural design. More details may be found in the UniCon Web site [Unicon_W].

- Darwin ('95) [Darwin,Darwin_W] is a language for describing software structures in terms of primitive and composite components. Components expose well-defined interfaces representing a service provided or required by that component. Programs are constructed by creating instances of component types and binding
their interfaces together. Connectors in Darwin are the bindings. Darwin considers such compositions also to be types and hence encourages hierarchical composition. The general form of a Darwin program is therefore the tree in which the root and all intermediate nodes are composite components; the leaves are
primitive components encapsulating behavioral as opposed to structural aspects [Darwin_W].

Darwin possesses both a textual and graphical notation and a process algebra (the Finite State Process (FSP) [FSP_W]) allowing for analysis at the architecture-level.

- The Cham formalism [BerryBoudol:TCS92] was developed by Berry and Boudol in the field of theoretical computer science for the principal purpose of defining a generic computational framework. This formalism based on molecules and
chemical reactions has been adapted to describe SAs in [InvWolf:TSE95] ('95). The Cham syntax will be summarized in Section "Cham" while its use for SA-based analysis is presented in Section "SA_Analysis".

- Rapide ('95) [Rapide,Rapide_W] is a general-purpose system description language that allows modeling of component interfaces and their externally visible behavior. In Rapide, an architecture is composed of a number of interfaces and the connections among them. A complete definition of an interface requires both what services it offers to other components in the system and the services required from the rest of the system to perform the offered services.

Rapide is a language framework consisting of i) a type language, ii) an executable architecture definition language, iii) a specification language, and iv) a concurrent reactive programming language.

Rapide is designed to support component-based development of large, multi-language systems by utilizing architecture definitions as the development framework. The main engine behind the power in Rapide is its model of computation based on Partially Ordered Sets of Events (posets). Under this model, a computation is represented as a set of events generated by the execution of the system. Each event represents the occurrence of an activity
within a program. Posets provide a formal basis for constructing early life cycle prototyping tools, allowing architectural designs to be simulated through automatic tools.

How Rapide may be used to perform SA analysis is briefly discussed
in Section "SA_Analysis".


- C2 ('96) [C2,C2_W] is a component- and message- based architectural style, well suited for large-scale, heterogeneous and distributed applications. A C2 architecture is a hierarchical network of concurrent components linked together by connectors following style rules. Central to the architectural style is a principle of limited visibility, or substrate independence: each component interface can be attached to at most one connector; a connector may be attached to any number of other components and connectors; request msgs may only be sent ``upward" through the architecture while notifications msgs may only be sent ``downward", i.e., a component is only aware of services provided by components ``above" it in the hierarchy, and is completely unaware of services provided by components ``beneath" it.

C2 is scalable (its component may run in different environment, may be of various granularity and may have its own thread of control) and flexible with respect to users, dialogs and tool kits. C2 SADL is the language for defining architectures built according to the C2 style.


- Wright ('97)[AllenGarlan:TOSEM97] is an architectural-specification language to support more direct specification and analysis of architectural descriptions. Its
specifications are based on the idea that interaction relationships among components of a software system should be directly specifiable as protocols. A Wright description specifies components and connector classes and the system configuration using instances of classes, defining the architectural topology as
a list of attachments.

Wright can be used to provide a precise, abstract, meaning to an architectural specification and to analyze both the architecture of individual software systems and of families of systems. work on Wright has focussed on the concept of explicit connector types, on the use of automated checking of architectural properties, and on the formalization of architectural styles.

Wright is an implementation independent language that do not prescribe a particular relationship between an architectural description and an implementation. More information may be get in [Wright_W].


- PADL ('00) [BernardoFSE00](Process Algebra based Architectural
Description Language) is inspired by Darwin and Wright and allows abstraction and compositionality mechanisms that makes it well suited to be used as an ADL. PADL formalizes the concept of architectural type as a restriction to the concept of architectural style to make easier the investigation on properties
which are common to instances of architectural styles. In architectural types, components behaviors may vary from architectural instance to architectural instance but the topology is fixed.


For more details, [Clements96,InPractice_Chap12] present a survey on ADLs, cataloguing ADLs features in a structured fashion; in [ADL_Neno97] the authors characterize ADLs showing what they should have or should be able to do, presenting a concise classification framework for ADLs.

SA Views

The languages and formalisms presented in the previous section, differ in many aspects and there is not a standard notation or specification language to describe SAs. As a way to cope with many different ADL syntaxes, a partial solution has been represented by libraries to support the integration of different ADL technologies (Acme) [Acme_W]. The main problem occurring in this approach
is the difficulty to simulate the same information especially referring to the dynamic aspects of the description. Inaccuracy or a bad knowledge of the environment can generate really different results in terms of system analysis.

More recently, researchers in industry and academia have integrated the SA description in their software development processes, e.g. [Applied,InPractice]. They have understood some SA benefits: SA can play a significant role in the
development process improving the dependability of large complex software products, while reducing development times and costs [GarlanShawBook,Applied]. SA represents the most promising approach to tackle the problem of scaling up in software engineering, because, through suitable abstractions, it provides the way to make large applications manageable.

Software architects have also learnt some lessons: i) despite the high-level of abstraction, notably in industrial contexts, the SA can be too complex to be described and managed; ii) SA production and management is, in general, an expensive task.
Therefore the effort is justified if the SA artifacts are extensively used for multiple purposes. Typical use of SA is as a high-level design blueprint of the system to be used during the system development and later on for maintenance and reuse. At the same time SA can be used in itself in order to analyze and validate architectural choices, both behavioral and quantitative. For this reasons architectural descriptions encompass not only static information but also dynamic (behavioral) aspects.

To tackle system complexity several viewpoints [Kruchten,Applied,JJWicsa99] have been introduced. The Kruchten work [Kruchten] ('95) on the 4+1 views has been recognized as the first relevant work on this subject but the need
of multiple views has been previously advocated by Perry and Wolf in [PerryWolf92] in which they say that ``the software architect needs a number of different views of the SA for the various uses and users", in [SAAM94] the authors define three perspectives for understanding and describing architectures
functionality, structure and allocation. Also Boehm in [DefSA-Boehm95] says: ``behavioral/operational view, static topological view and a dataflow view... and also other views that are concerned with other stakeholder needs".


The use of views allows to handle different aspects of the system separately and to manage the description of real systems. Several slightly different views are defined in different approaches:

- in [Kruchten] the author defines four-plus-one views: the logical view, which is the object model of the design, the development view, the static organization of the
software, the process view, which captures the concurrency and synchronization aspects of the design, the physical view which maps the software onto the hardware. The fifth view is the use case one, representing dynamic aspects (sequences of interactions between objects) shared in all the other views;

- in [Applied] the authors present a different organization of views: conceptual, module, execution and code. These views are semantically close to those defined in [Kruchten] but, in this case, each view may be represented by several UML diagrams.

- [UmlProcess] also proposes an interpretation of architectural views. It presents a use case driven, architecture-centric, iterative and incremental process in which
views are mapped into UML models.


Just to demonstrate the attention the community has given to views, in the Proc. of the second Int. Software Architecture Workshop (ISAW-2) [ISAW96] there are more than twenty papers on views definition, consistency and support.

Different notations, generally graphical, have been introduced for views representation and approaches have been proposed to check views consistency: in [Michael] the authors propose an approach to design a method for multiple view consistency checking. The SA specification is defined in terms of a collection
of diagrams each one representing a software view without a mathematical basis. To check the view consistency, they provide a formal definition of the views and their relationships, define their semantics as sets of graphs and apply an algorithm to check the consistency of diagrams.

In [Filken_Incons] the authors present how inconsistencies may be handled using the ViewPoints  framework and a logic-based consistency handling. Their approach is based on the assumption that to check specifications consistency among view points is equivalent to an inconsistency handling in distributed
logical databases: views specified in the ViewPoints framework are translated into classical logic formulae and stored in logical databases checked for consistency using temporal logic.

In [ASE01,Straw01] we propose our approach to manage view consistency checking, supposing to have state diagrams and scenarios models representing the SA dynamics at the architectural level; we want to prove that they describe, from different viewpoints, the same system behavior using the SPIN model checker. Our approach will be presented in Chapter 11.

In the next section we will analyze how UML has been adapted to model multi views SAs.

Software Architecture and UML

The multi-view design helps the software architect to specify complex architectures from different perspectives but does not provide a solution for the lack of standard notations and languages. As already introduced, SAs are formalized using several different ADLs, based on different languages (poset, pi-calculus, process algebra, Chemical reactions,...), and with different analysis capabilities.

As a way to provide a standard notation to formally describe SAs, some researchers have proposed to extend the Unified Modeling Language (UML) [UML] to deal with SAs. UML is a standard that has wide acceptance and is even more widely used. Although its original purpose was for detailed design, its extension mechanisms makes it potentially applicable much more broadly. These facts suggest a strategy to incorporate in the UML framework pieces of
information that are provided by the architectural descriptions.
In this direction various approaches have been proposed in the last few years, mostly describing multiple views SAs:

- the first paper proposing the use of UML to formalize static aspects of SAs is [RMRR98] in 1998. In this work the authors show how UML can be extended to fit the C2 ADL architectural style. The proposed idea is to extend the UML meta-model with new meta-classes (as subclasses of existing meta-classes) using the
UML-provided extension mechanisms. In [Neno_Wicsa99] Medvidovic and Rosenblum refine the approach and they believe Sequence, Collaboration and Activity diagrams may be used to model C2's components behavior;

- another relevant work is that proposed by Booch in [Booch_W]: the key idea is that each Kruchten [Kruchten] view may be mapped into UML diagrams. The logical view is formalized using Class diagrams, the process view is mapped to
Activity diagrams, implementation and deployment views are modeled by Component and Deployment diagrams, respectively. The fifth view is expressed through Sequence and Collaboration diagrams;

- Hofmeister, Nord and Soni in [UML_Wicsa99,Applied] propose different, with respect to Kruchten, views (conceptual, module, execution and code), each one implemented by more UML diagrams. In the examples the book presents, the conceptual view is implemented by Use Case and Interaction diagrams, the module view is formalized through Class diagrams, the execution view is
formalized using Deployment, Interaction, Activity and Class diagrams. The code view is related to Component diagrams;

- the Unified Software Development Process [UmlProcess] also proposes four evolutionary views (Use Case, Analysis Model, Design Model and Implementation Model) to be defined during the development process and formalized using UML.


More recently, some other works have addressed the use of UML to
formalize SAs:

- Garlan et al. in [GarlanSA_00] propose their approach to model SA using UML. This work has been extended in [GarlanSA_01] in which six alternatives are presented for modeling architectural structure using UML. The first three consider how to use classes and objects to model components, the fourth is based on UML
components, the fifth on UML subsystems and the last is based on the UML Real-Time Profile. Before mapping architectural constructs into UML elements, the authors identify the elements composing an architectural structure, i.e., components, connectors, systems, properties and styles. What this approach offers more than others is a more systematic analysis on what needs to be modeled, examining the strength and weaknesses of adopting a particular
modeling strategy.

Anyway, it considers only structural aspects mapping SAs in UML, as other approaches. Concluding, the authors point out that ``there is no single best way to encode ADLs in UML. Each of the strategies has strengths and weakness".

- The SA community and researchers in industry understand SAs in different ways, and use them with different goals. What is needed is a formalism to create a bridge among these different communities. [NenoUML&SA] proposes UML has
the tool to close the gap. For this purpose, the authors propose two different approaches adhering to the requirement that the resulting approach still involve standard UML. In the first approach, UML is used ``as is", i.e., the existing UML notation is used to represent SAs. The second approach, instead, constrain the
UML meta model using UML built-in mechanisms. A third approach was
initially analyzed; it was discarded since it makes use of not standard UML concepts. The first approach has been used to model the Meeting Scheduler in C2. The second strategy has been used to constrain UML in order to formalize architectures in C2, Rapide and Wright.

These results have been analyzed to evaluate the UML's ability to represent SA effectively, putting in evidence UML lacking in modeling and exploiting architectural styles, in explicitly describe software connectors and in formalizing local and global
architectural constrains.

- In the ICSE 2001 program, a tutorial [SA&UML_ICSE01tutor] and a workshop [SA&UML_ICSE01work] have been dedicated to the use of UML to describe SAs. The tutorial discusses how to express views in the UML, in the spirit of the new IEEE Standard 1471:2000. The workshop brings together researchers and
practitioners in the fields of SA and the UML and encompass the following areas of concentration: ontology of architectures, architectural methodology and experience and architectural analysis.
 

Henry Muccini
muccini@di.univaq.it
http://www.HenryMuccini.com