blob: 4dc8c95fafa439cf3728e5ac16a2aed70d799e65 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<org.eclipse.epf.uma:ContentDescription xmi:version="2.0"
xmlns:xmi="http://www.omg.org/XMI" xmlns:org.eclipse.epf.uma="http://www.eclipse.org/epf/uma/1.0.5/uma.ecore"
xmlns:epf="http://www.eclipse.org/epf" epf:version="1.5.0" xmlns:rmc="http://www.ibm.com/rmc"
rmc:version="7.5.0" xmi:id="-UQ_e8kozIP11Xu008RJd-A"
name="new_concept,__O7tAMVvEduLYZUGfgZrkQ" guid="-UQ_e8kozIP11Xu008RJd-A" changeDate="2008-10-15T06:28:05.992-0700"
version="7.2.0">
<mainDescription>&lt;h3>&#xD;
Introduction&#xD;
&lt;/h3>&#xD;
&lt;p>&#xD;
Software architecture is a concept that is easy to understand, and that most engineers intuitively feel, especially&#xD;
with a little experience, but it is hard to define precisely. In particular, it is difficult to draw a sharp line&#xD;
between design and architecture-architecture is one aspect of design that concentrates on some specific features.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
In An Introduction to Software Architecture, David Garlan and Mary Shaw suggest that software architecture is a level&#xD;
of design concerned with issues: &quot;Beyond the algorithms and data structures of the computation; designing and&#xD;
specifying the overall system structure emerges as a new kind of problem. Structural issues include gross organization&#xD;
and global control structure; protocols for communication, synchronization, and data access; assignment of&#xD;
functionality to design elements; physical distribution; composition of design elements; scaling and performance; and&#xD;
selection among design alternatives.&quot; &lt;a class=&quot;elementlinkwithusertext&quot;&#xD;
href=&quot;./../../../core.tech.common.base/guidances/supportingmaterials/references.tech_6CCF393.html&quot;&#xD;
guid=&quot;_9ToeIB83Edqsvps02rpOOg&quot;>[GAR93]&lt;/a>&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
But there is more to architecture than just structure; the IEEE Working Group on Architecture defines it as &quot;the&#xD;
highest-level concept of a system in its environment&quot; &lt;a class=&quot;elementlinkwithusertext&quot;&#xD;
href=&quot;./../../../core.tech.common.base/guidances/supportingmaterials/references.tech_6CCF393.html&quot;&#xD;
guid=&quot;_9ToeIB83Edqsvps02rpOOg&quot;>[IEP1471]&lt;/a>. It also encompasses the &quot;fit&quot; with system integrity, with economical&#xD;
constraints, with aesthetic concerns, and with style. It is not limited to an inward focus, but takes into&#xD;
consideration the system as a whole in its user environment and its development environment - an outward focus.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
The architecture focuses on specific aspects of the overall system design, concentrating on structure, essential&#xD;
elements, key scenarios and those aspects that have a lasting impact on system qualities such as performance,&#xD;
reliability, adaptability and cost. It also defines the set of &lt;a class=&quot;elementLink&quot;&#xD;
href=&quot;./../../../core.tech.common.extend_supp/guidances/concepts/arch_mechanism_2932DFB6.html&quot;&#xD;
guid=&quot;_mzxI0A4LEduibvKwrGxWxA&quot;>Architectural Mechanism&lt;/a>s, &lt;a class=&quot;elementLink&quot;&#xD;
href=&quot;./../../../core.tech.common.extend_supp/guidances/concepts/pattern_10BE6D96.html&quot;&#xD;
guid=&quot;_0YJvUMlgEdmt3adZL5Dmdw&quot;>Pattern&lt;/a>s and styles that will guide the rest of the design, assuring its integrity.&#xD;
&lt;/p>&#xD;
&lt;h3>&#xD;
Purpose of Architecture&#xD;
&lt;/h3>&#xD;
&lt;p>&#xD;
The architecture can be used for many things:&#xD;
&lt;/p>&#xD;
&lt;ul>&#xD;
&lt;li>&#xD;
&lt;strong>To describe the essential structure of the system and the decisions guiding the structure of the&#xD;
system&lt;/strong> so the integrity and understandability of the system is assured.&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
&lt;a id=&quot;Comment71_&quot; name=&quot;Comment71_&quot;>&lt;strong>To identify and attack risks to the system&lt;/strong> (using the&#xD;
architecture as an artifact of governance)&lt;/a>&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
&lt;strong>To provide context and guidance for developers&lt;/strong> to construct the system by describing the&#xD;
motivations behind the architectural decisions so those decisions can be robustly implemented. The architecture&#xD;
services as the blueprint for development.&amp;nbsp;For example, the architect may place constraints on how data is&#xD;
packaged and communicated between different parts of the system. This may appear to be a burden, but the&#xD;
justification in the Architecture Notebook can explain that there is a significant performance bottleneck when&#xD;
communicating with a legacy system. The rest of the system must adapt to this bottleneck by following a specific&#xD;
data packaging scheme.&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
&lt;strong>To provide an overview of the system to whoever must maintain the architecture&lt;/strong>, as well as an&#xD;
understanding of the motivation behind the important technical decisions.&amp;nbsp; Team members who were not involved&#xD;
in those architectural decisions need to understand the reasoning behind the&amp;nbsp;context of the architecture so&#xD;
they can best address the needs of the system.&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
&lt;strong>To define the project structure and team organization.&lt;/strong> Architectural elements make excellent units&#xD;
of implementation, unit testing, integration, configuration management and&amp;nbsp;documentation.&amp;nbsp;&amp;nbsp; They can&#xD;
also be used to define&amp;nbsp; so that managers can plan the project.&#xD;
&lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;h3>&#xD;
Architecture Description&#xD;
&lt;/h3>&#xD;
&lt;p>&#xD;
To speak and reason about software architecture, you must first define an architectural representation, a way of&#xD;
describing important aspects of an architecture.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
The following is some information that is worth capturing as part of the software architecture:&#xD;
&lt;/p>&#xD;
&lt;ul>&#xD;
&lt;li>&#xD;
Architectural goals (see &lt;a class=&quot;elementLinkWithType&quot;&#xD;
href=&quot;./../../../core.tech.common.extend_supp/guidances/concepts/arch_goals_CB41D8AE.html&quot;&#xD;
guid=&quot;_HlRqANpbEdyP58ppo1Ieaw&quot;>Concept: Architectural Goals&lt;/a>)&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
References to architecturally significant requirements and how the architecture addresses those requirements,&#xD;
including&amp;nbsp;key scenarios that describe critical behavior of the system (see &lt;a class=&quot;elementLinkWithType&quot;&#xD;
href=&quot;./../../../core.tech.common.extend_supp/guidances/concepts/arch_significant_requirements_1EE5D757.html&quot;&#xD;
guid=&quot;_HrZGIA4MEduibvKwrGxWxA&quot;>Concept: Architecturally Significant Requirements&lt;/a>)&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Constraints on the architecture and how the architecture addresses those constraints (see &lt;a&#xD;
class=&quot;elementLinkWithType&quot;&#xD;
href=&quot;./../../../core.tech.common.extend_supp/guidances/concepts/arch_constraints_AE56B662.html&quot;&#xD;
guid=&quot;_jdKSsNpiEdyP58ppo1Ieaw&quot;>Concept: Architectural Constraints&lt;/a>)&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Key abstractions (see &lt;a class=&quot;elementLinkWithType&quot;&#xD;
href=&quot;./../../../core.tech.common.extend_supp/guidances/concepts/key_abstractions_1474DBF2.html&quot;&#xD;
guid=&quot;_pLEGUNqGEdy88NBoQgfGyg&quot;>Concept: Key Abstractions&lt;/a>)&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
&lt;a class=&quot;elementLink&quot;&#xD;
href=&quot;./../../../core.tech.common.extend_supp/guidances/concepts/arch_mechanism_2932DFB6.html&quot;&#xD;
guid=&quot;_mzxI0A4LEduibvKwrGxWxA&quot;>Architectural Mechanism&lt;/a> and where they should be applied (see &lt;a&#xD;
class=&quot;elementLinkWithType&quot;&#xD;
href=&quot;./../../../core.tech.common.extend_supp/guidances/concepts/arch_mechanism_2932DFB6.html&quot;&#xD;
guid=&quot;_mzxI0A4LEduibvKwrGxWxA&quot;>Concept: Architectural Mechanism&lt;/a>).&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Description of the partitioning approach, as well as a description of the key partitions.&amp;nbsp; For example,&#xD;
Layering&amp;nbsp;(see &lt;a class=&quot;elementLinkWithType&quot;&#xD;
href=&quot;./../../../core.tech.common.extend_supp/guidances/guidelines/layering_F169CF07.html&quot;&#xD;
guid=&quot;_0gpkAMlgEdmt3adZL5Dmdw&quot;>Guideline: Layering&lt;/a>)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Description of the deployment approach, as well as how key components are allocated to deployment&#xD;
nodes.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
References to architecturally significant design elements (see &lt;a class=&quot;elementLinkWithType&quot;&#xD;
href=&quot;./../../../core.tech.common.extend_supp/guidances/concepts/component_CB167D48.html&quot;&#xD;
guid=&quot;_0YP18MlgEdmt3adZL5Dmdw&quot;>Concept: Component&lt;/a>)&amp;nbsp;&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Critical system interfaces (see &lt;a class=&quot;elementLinkWithType&quot;&#xD;
href=&quot;./../../../core.tech.common.extend_supp/guidances/guidelines/repres_interfaces_to_ext_systems_51A34F6E.html&quot;&#xD;
guid=&quot;_0gjdYMlgEdmt3adZL5Dmdw&quot;>Guideline: Representing Interfaces to External Systems&lt;/a>)&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Assets that have been reused and/or assets that have been developed to be reused (for more information, see &lt;a&#xD;
class=&quot;elementLinkWithType&quot;&#xD;
href=&quot;./../../../core.tech.common.extend_supp/guidances/guidelines/software_reuse_B6B04C26.html&quot;&#xD;
guid=&quot;_vO2uoO0OEduUpsu85bVhiQ&quot;>Guideline: Software Reuse&lt;/a>)&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Guidance, decisions, and constraints the developers must follow in building the system, along with justification&#xD;
&lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;p>&#xD;
The architecture can contain any information and references that are appropriate in communicating how developers should&#xD;
build the system.&#xD;
&lt;/p>&#xD;
&lt;h4>&#xD;
Architectural Representation&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
The architecture can be represented in many forms and from many viewpoints, depending on the needs of the project and&#xD;
the preferences of the project team. It need not be a formal document. The essence of the architecture can often be&#xD;
communicated through a series of simple diagrams on a whiteboard; or as a list of decisions. The illustration just&#xD;
needs to show the nature of the proposed solution, convey the governing ideas, and represent the major building blocks&#xD;
to make it easier to communicate the architecture to the project team and stakeholders.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
If a more complex system is required, then the architecture can be represented as a more comprehensive set&#xD;
of&amp;nbsp;views that describe the architecture from a number of viewpoints. For more information, see &lt;a&#xD;
class=&quot;elementLinkWithType&quot;&#xD;
href=&quot;./../../../core.tech.common.extend_supp/guidances/concepts/arch_views_viewpoints_7A6CD31.html&quot;&#xD;
guid=&quot;_kgtcoNc8Edyd7OybSySFxg&quot;>Concept: Architectural Views and Viewpoints&lt;/a>.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
The architecture can be expressed as a simple metaphor or as a comparison to a predefined architectural style or set of&#xD;
styles. It may be a precise set of models or documents that describe the various aspects of the system's key elements.&#xD;
Expressing it as skeletal implementation is another option - although this may need to be baselined and preserved to&#xD;
ensure that the essence of the system can be understood as the system grows. Choose the medium that best meets the&#xD;
needs of the project.&#xD;
&lt;/p>&#xD;
&lt;h3>&#xD;
Architectural Patterns&#xD;
&lt;/h3>&#xD;
&lt;p>&#xD;
Architectural &lt;a class=&quot;elementLink&quot;&#xD;
href=&quot;./../../../core.tech.common.extend_supp/guidances/concepts/pattern_10BE6D96.html&quot;&#xD;
guid=&quot;_0YJvUMlgEdmt3adZL5Dmdw&quot;>Pattern&lt;/a>s are ready-made forms that solve recurring architectural problems. An&#xD;
architectural framework or an architectural infrastructure (middleware) is a set of components on which you can build a&#xD;
certain kind of architecture. Many of the major architectural difficulties should be resolved in the framework or in&#xD;
the infrastructure, usually targeted to a specific domain: command and control, MIS, control system, and so on.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
&lt;a class=&quot;elementlinkwithusertext&quot;&#xD;
href=&quot;./../../../core.tech.common.base/guidances/supportingmaterials/references.tech_6CCF393.html&quot;&#xD;
guid=&quot;_9ToeIB83Edqsvps02rpOOg&quot;>[BUS96]&lt;/a> groups architectural patterns according to the characteristics of the&#xD;
systems in which they are most applicable, with one category dealing with more general structuring issues. The table&#xD;
shows the categories presented in &lt;a class=&quot;elementlinkwithusertext&quot;&#xD;
href=&quot;./../../../core.tech.common.base/guidances/supportingmaterials/references.tech_6CCF393.html&quot;&#xD;
guid=&quot;_9ToeIB83Edqsvps02rpOOg&quot;>[BUS96]&lt;/a> and the patterns they contain.&#xD;
&lt;/p>&#xD;
&lt;div align=&quot;center&quot;>&#xD;
&lt;table&#xD;
style=&quot;BORDER-RIGHT: rgb(128,128,128) 1px solid; BORDER-TOP: rgb(128,128,128) 1px solid; BORDER-LEFT: rgb(128,128,128) 1px solid; BORDER-BOTTOM: rgb(128,128,128) 1px solid&quot;&#xD;
cellspacing=&quot;0&quot; bordercolordark=&quot;#808080&quot; cellpadding=&quot;4&quot; width=&quot;85%&quot; bordercolorlight=&quot;#808080&quot; border=&quot;1&quot;>&#xD;
&lt;tbody>&#xD;
&lt;tr>&#xD;
&lt;th id=&quot;col1&quot; width=&quot;50%&quot;>&#xD;
Category&#xD;
&lt;/th>&#xD;
&lt;th id=&quot;col2&quot; width=&quot;50%&quot;>&#xD;
Pattern&#xD;
&lt;/th>&#xD;
&lt;/tr>&#xD;
&lt;tr>&#xD;
&lt;th id=&quot;row2&quot; align=&quot;left&quot; headers=&quot;col1&quot; width=&quot;50%&quot; rowspan=&quot;3&quot;>&#xD;
Structure&#xD;
&lt;/th>&#xD;
&lt;td headers=&quot;row2 col2&quot; width=&quot;50%&quot;>&#xD;
Layers&#xD;
&lt;/td>&#xD;
&lt;/tr>&#xD;
&lt;tr>&#xD;
&lt;td headers=&quot;row2 col2&quot; width=&quot;50%&quot;>&#xD;
Pipes and Filters&#xD;
&lt;/td>&#xD;
&lt;/tr>&#xD;
&lt;tr>&#xD;
&lt;td headers=&quot;row2 col2&quot; width=&quot;50%&quot;>&#xD;
Blackboard&#xD;
&lt;/td>&#xD;
&lt;/tr>&#xD;
&lt;tr>&#xD;
&lt;th id=&quot;row3&quot; align=&quot;left&quot; headers=&quot;col1&quot; width=&quot;50%&quot;>&#xD;
Distributed Systems&#xD;
&lt;/th>&#xD;
&lt;td headers=&quot;row3 col2&quot; width=&quot;50%&quot;>&#xD;
Broker&#xD;
&lt;/td>&#xD;
&lt;/tr>&#xD;
&lt;tr>&#xD;
&lt;th id=&quot;row4&quot; align=&quot;left&quot; headers=&quot;col1&quot; width=&quot;50%&quot; rowspan=&quot;2&quot;>&#xD;
Interactive Systems&#xD;
&lt;/th>&#xD;
&lt;td headers=&quot;row4 col2&quot; width=&quot;50%&quot;>&#xD;
Model-View-Controller&#xD;
&lt;/td>&#xD;
&lt;/tr>&#xD;
&lt;tr>&#xD;
&lt;td headers=&quot;row4 col2&quot; width=&quot;50%&quot;>&#xD;
Presentation-Abstraction-Control&#xD;
&lt;/td>&#xD;
&lt;/tr>&#xD;
&lt;tr>&#xD;
&lt;th id=&quot;row5&quot; align=&quot;left&quot; headers=&quot;col1&quot; width=&quot;50%&quot; rowspan=&quot;2&quot;>&#xD;
Adaptable Systems&#xD;
&lt;/th>&#xD;
&lt;td headers=&quot;row5 col2&quot; width=&quot;50%&quot;>&#xD;
Reflection&#xD;
&lt;/td>&#xD;
&lt;/tr>&#xD;
&lt;tr>&#xD;
&lt;td headers=&quot;row5 col2&quot; width=&quot;50%&quot;>&#xD;
Microkernel&#xD;
&lt;/td>&#xD;
&lt;/tr>&#xD;
&lt;/tbody>&#xD;
&lt;/table>&lt;br />&#xD;
&lt;/div>&#xD;
&lt;p>&#xD;
Refer to &lt;a class=&quot;elementlinkwithusertext&quot;&#xD;
href=&quot;./../../../core.tech.common.base/guidances/supportingmaterials/references.tech_6CCF393.html&quot;&#xD;
guid=&quot;_9ToeIB83Edqsvps02rpOOg&quot;>[BUS96]&lt;/a> for a complete description of these patterns.&#xD;
&lt;/p>&#xD;
&lt;h3>&#xD;
&lt;a id=&quot;Architectural Style&quot; name=&quot;Architectural Style&quot;>Architectural Style&lt;/a>&#xD;
&lt;/h3>&#xD;
&lt;p>&#xD;
A software architecture (or an architectural view) may have an attribute called &lt;b>architectural style&lt;/b>, which&#xD;
reduces the set of possible forms to choose from, and imposes a certain degree of uniformity to the architecture. The&#xD;
style may be defined by a set of patterns, or by the choice of specific components or connectors as the basic building&#xD;
blocks.&#xD;
&lt;/p>&#xD;
&lt;h3>&#xD;
Architectural Timing&#xD;
&lt;/h3>&#xD;
&lt;p>&#xD;
Teams should expect to spend more time on architectural issues early in the project.&amp;nbsp; This allows the team to&#xD;
reduce risk associated to technology early in the project, hence allowing the team to more rapidly reduce the variance&#xD;
in their estimate on what they can deliver at what time. Examples of architectural issues that needs to be resolved&#xD;
early on include&#xD;
&lt;/p>&#xD;
&lt;ul>&#xD;
&lt;li>&#xD;
Component and their major interfaces&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Major technology choices (platform, languages, architecture frameworks / reference architectures, etc.)&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Interfaces to external systems&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Common services (persistence mechanisms, logging mechanisms, garbage collection, etc.)&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Key patterns&#xD;
&lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;h3>&#xD;
Validating the Architecture&#xD;
&lt;/h3>&#xD;
&lt;p>&#xD;
The best way to validate the architecture is to actually implement it.&amp;nbsp; For more information, see &lt;a&#xD;
class=&quot;elementLink&quot; href=&quot;./../../../core.tech.common.extend_supp/guidances/concepts/executable_arch_D4E68CBD.html&quot;&#xD;
guid=&quot;_O1kAANvfEduv2KOT-Teh6w&quot;>Executable Architecture&lt;/a>.&#xD;
&lt;/p></mainDescription>
</org.eclipse.epf.uma:ContentDescription>