blob: f038baae770c7acef73f28dbfea99bb545bd9592 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<org.eclipse.epf.uma:TaskDescription 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="_rUis8LBKEdm7Eph_l9Cn9w" name="refine_the_arch,_0gRJgMlgEdmt3adZL5Dmdw" guid="_rUis8LBKEdm7Eph_l9Cn9w" changeDate="2008-08-08T11:29:21.000-0700" version="1.0.0">
<mainDescription>&lt;p>&#xD;
This task&amp;nbsp;builds upon the outlined architecture and makes concrete and unambiguous architectural decisions to&#xD;
support development.&amp;nbsp; It takes into&amp;nbsp;account any design and implementation work products that have been&#xD;
developed so far.&amp;nbsp; In other words, the architecture evolves as the solution is designed and implemented, and the&#xD;
architecture documentation is updated to reflect any changes made during development. This is&amp;nbsp;a key,&amp;nbsp;since&#xD;
the actual implementation is the only real &quot;proof&quot; that the software architecture is viable and provides the definitive&#xD;
basis for validating the suitability&amp;nbsp;of the architecture.&amp;nbsp; For more information, see &lt;a&#xD;
class=&quot;elementLinkWithType&quot;&#xD;
href=&quot;./../../core.tech.common.extend_supp/guidances/concepts/executable_arch_D4E68CBD.html&quot;&#xD;
guid=&quot;_O1kAANvfEduv2KOT-Teh6w&quot;>Concept: Executable Architecture&lt;/a>.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
The results are captured for future reference and are communicated across the team.&#xD;
&lt;/p></mainDescription>
<keyConsiderations>&lt;p>&#xD;
It is important to continue to reduce the complexity of the&amp;nbsp;solution by raising the levels of abstraction.&amp;nbsp;&#xD;
For more information, see &lt;a class=&quot;elementLinkWithType&quot;&#xD;
href=&quot;./../../core.tech.common.extend_supp/guidances/guidelines/abstract_away_complexity_DBF13AE6.html&quot;&#xD;
guid=&quot;_we3F4ACpEdu8m4dIntu6jA&quot;>Guideline: Abstract Away Complexity&lt;/a>.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
Continue the collaboration with the whole&amp;nbsp;team on the refining of the architecture in order to promote consensus&#xD;
and a common understanding of the overall solution. The architect should be working to coordinate and guide the&#xD;
technical activities of the team rather than doing all the work alone.&amp;nbsp;Place special emphasis&amp;nbsp;on&#xD;
involving&amp;nbsp;the developer(s) throughout this task since it's the developed solution that will prove out the&#xD;
architecture and may result in refinements to the architecture documentation.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
Ensure that those who need to act upon the architectural work&amp;nbsp;understand&amp;nbsp;it and are able to work with&#xD;
it.&amp;nbsp;Make sure that the description of the architecture clearly conveys not only the solution but also the&#xD;
motivation and objectives related to the&amp;nbsp;decisions that have been made in shaping the architecture. This will make&#xD;
it easier for others to understand the architecture and to adapt it over time.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
You can communicate your decisions as many ways as you wish.&amp;nbsp; For example:&#xD;
&lt;/p>&#xD;
&lt;ul>&#xD;
&lt;li>&#xD;
Publication of&amp;nbsp;reference source code&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Publication of&amp;nbsp;reference models&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Publication of&amp;nbsp;software architecture documentation&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Formal&amp;nbsp;presentations of the material&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Informal walkthroughs of the architecture&#xD;
&lt;/li>&#xD;
&lt;/ul></keyConsiderations>
<sections xmi:id="_l92AYNpaEdyP58ppo1Ieaw" name="Refine the architectural goals and architecturally-significant requirements" guid="_l92AYNpaEdyP58ppo1Ieaw">
<sectionDescription>&lt;p>&#xD;
Work with the team, especially the stakeholders and the requirements team, to review the status of the &lt;a&#xD;
class=&quot;elementLink&quot; href=&quot;./../../core.tech.common.extend_supp/guidances/concepts/arch_goals_CB41D8AE.html&quot;&#xD;
guid=&quot;_HlRqANpbEdyP58ppo1Ieaw&quot;>Architectural Goals&lt;/a>&amp;nbsp;and &lt;a class=&quot;elementLink&quot;&#xD;
href=&quot;./../../core.tech.common.extend_supp/guidances/concepts/arch_significant_requirements_1EE5D757.html&quot;&#xD;
guid=&quot;_HrZGIA4MEduibvKwrGxWxA&quot;>Architecturally Significant Requirements&lt;/a>&amp;nbsp;and refine them as needed. It may be&#xD;
that some new architecturally-significant requirements have been introduced or your architectural goals and priorities&#xD;
may have changed.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
The development work performed so far will also inform the decisions and goals you've identified. Use information from&#xD;
designing and implementing the system so far to adjust and refined those decisions and goals.&#xD;
&lt;/p></sectionDescription>
</sections>
<sections xmi:id="_G_k1kBaqEduSTJywppIxVQ" name="Identify architecturally significant design elements" guid="_G_k1kBaqEduSTJywppIxVQ">
<sectionDescription>&lt;p align=&quot;left&quot;>&#xD;
Identify concrete&amp;nbsp;design elements (such as &lt;a class=&quot;elementLink&quot;&#xD;
href=&quot;./../../core.tech.common.extend_supp/guidances/concepts/component_CB167D48.html&quot;&#xD;
guid=&quot;_0YP18MlgEdmt3adZL5Dmdw&quot;>Component&lt;/a>s, classes and&amp;nbsp;subsystems)&amp;nbsp;and provide at least a name and brief&#xD;
description for each.&#xD;
&lt;/p>&#xD;
&lt;p align=&quot;left&quot;>&#xD;
The following are some good sources for design elements:&#xD;
&lt;/p>&#xD;
&lt;ul>&#xD;
&lt;li>&#xD;
&lt;div align=&quot;left&quot;>&#xD;
&lt;div align=&quot;left&quot;>&#xD;
&lt;a class=&quot;elementLink&quot;&#xD;
href=&quot;./../../core.tech.common.extend_supp/guidances/concepts/arch_significant_requirements_1EE5D757.html&quot;&#xD;
guid=&quot;_HrZGIA4MEduibvKwrGxWxA&quot;>Architecturally Significant Requirements&lt;/a>. Highlight the areas of the&#xD;
architecture that participate in realizing, or implementing, the requirements.&#xD;
&lt;/div>&#xD;
&lt;/div>&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
&lt;div align=&quot;left&quot;>&#xD;
&lt;div align=&quot;left&quot;>&#xD;
&lt;a class=&quot;elementLink&quot;&#xD;
href=&quot;./../../core.tech.common.extend_supp/guidances/concepts/key_abstractions_1474DBF2.html&quot;&#xD;
guid=&quot;_pLEGUNqGEdy88NBoQgfGyg&quot;>Key Abstractions&lt;/a>&#xD;
&lt;/div>&#xD;
&lt;/div>&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
&lt;div align=&quot;left&quot;>&#xD;
&lt;div align=&quot;left&quot;>&#xD;
Components that encapsulate the system's interface with external systems.&amp;nbsp; For more information, see&#xD;
&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;/div>&#xD;
&lt;/div>&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Components that implement the &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&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Architectural and key design &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. Apply the chosen patterns to define a new set of elements that conform&#xD;
to the patterns.&#xD;
&lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;p>&#xD;
Identifying components will help hide the complexity of the system and help you work at a higher level. Components need&#xD;
to be internally cohesive and to provide external services through a limited interface.&amp;nbsp; At this point, interfaces&#xD;
do not need to be as detailed as a signature, but they do need to document what the elements need, what they can use,&#xD;
and what they can depend on.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
Component identification can be&amp;nbsp;based on architectural layers, deployment choices, or key abstractions. Ask&#xD;
yourself these questions:&#xD;
&lt;/p>&#xD;
&lt;ul>&#xD;
&lt;li>&#xD;
What is logically or functionally related (same use case or service, for example)?&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
What entities provide services to multiple others?&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
What entities depend on each other? Strongly or weakly?&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
What entities should you be able to exchange independently from others?&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
What will run on the same processor or network node?&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
What parts are constrained by similar performance requirements?&#xD;
&lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;p>&#xD;
When you identify a component be sure to briefly describe the functionality that should be allocated to the components.&#xD;
&lt;/p></sectionDescription>
</sections>
<sections xmi:id="_0qoQ8CikEduQBKSg5n118w" name="Refine architectural mechanisms" guid="_0qoQ8CikEduQBKSg5n118w">
<sectionDescription>&lt;p>&#xD;
Refine&amp;nbsp;the applicable &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, as needed to support the design.&amp;nbsp; For example,&#xD;
refining an analysis mechanism into a design mechanism and/or refining a design mechanism into an implementation&#xD;
mechanism.&amp;nbsp;&lt;br />&#xD;
&lt;/p></sectionDescription>
</sections>
<sections xmi:id="_82iI0FHOEd2zrOgIte8oWg" name="Define development architecture and test architecture" guid="_82iI0FHOEd2zrOgIte8oWg">
<sectionDescription>Ensure that the development and test architectures are defined. Note any architecturally significant differences between&#xD;
these environments and work with the team to devise strategies to mitigate any risks these may introduce.</sectionDescription>
</sections>
<sections xmi:id="_Vdln8MP3EdmWKcx6ixEiwg" name="Identify additional reuse opportunities" guid="_Vdln8MP3EdmWKcx6ixEiwg">
<sectionDescription>&lt;p dir=&quot;ltr&quot; style=&quot;MARGIN-RIGHT: 0px&quot;>&#xD;
Continue to look for more opportunities to reuse existing assets.&amp;nbsp; Where applicable, identify existing components&#xD;
that could be built to be reused.&#xD;
&lt;/p>&#xD;
&lt;p dir=&quot;ltr&quot; style=&quot;MARGIN-RIGHT: 0px&quot;>&#xD;
For more information, see &lt;a 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;/p></sectionDescription>
</sections>
<sections xmi:id="_GFLpsFHPEd2zrOgIte8oWg" name="Validate the architecture" guid="_GFLpsFHPEd2zrOgIte8oWg">
<sectionDescription>Make sure that the architecture supports the requirements and the needs of the team. &lt;br />&#xD;
&lt;br />&#xD;
Development work should be performed to produce just enough working software to show that the architecture is viable. This&#xD;
should provide the definitive basis for validating the suitability of the architecture. As the software should be developed&#xD;
iteratively, more than one increment of the build may be required to prove the architecture. During the early stages of the&#xD;
project it may be acceptable for the software to have a incomplete or prototypical feel, as it will be primarily concerned&#xD;
with baselining the architecture to provide a stable foundation for the remaining development work.</sectionDescription>
</sections>
<sections xmi:id="_xIIVkMUbEdu5GrwIlTJV7g" name="Map the software to the hardware" guid="_xIIVkMUbEdu5GrwIlTJV7g">
<sectionDescription>&lt;p align=&quot;left&quot;>&#xD;
Map the architecturally significant design elements to the target deployment environment. Work with hardware and&#xD;
network specialists to ensure that the hardware is sufficient to meet the needs of the system; and that any new&#xD;
hardware is available in time.&#xD;
&lt;/p></sectionDescription>
</sections>
<sections xmi:id="_pyyVoFHPEd2zrOgIte8oWg" name="Communicate decisions" guid="_pyyVoFHPEd2zrOgIte8oWg">
<sectionDescription>Ensure that those who need to act upon the architectural work understand it and are able to work with it. Make sure that&#xD;
the description of the architecture clearly conveys not only the solution but also the motivation and objectives related to&#xD;
the decisions that have been made in shaping the architecture. This will make it easier for others to understand the&#xD;
architecture and to adapt it over time.</sectionDescription>
</sections>
<purpose>To make and document the architectural decisions necessary to support development.</purpose>
</org.eclipse.epf.uma:TaskDescription>