<?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.6/uma.ecore" xmlns:epf="http://www.eclipse.org/epf" epf:version="1.5.1" xmlns:rmc="http://www.ibm.com/rmc" rmc:version="7.5.1" xmi:id="-UQ_e8kozIP11Xu008RJd-A" name="new_concept,__O7tAMVvEduLYZUGfgZrkQ" guid="-UQ_e8kozIP11Xu008RJd-A" changeDate="2008-10-15T06:28:05.000-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 the following:&#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>
