blob: 353cbc9bf225d83dbc4c5ad8a71f3a3be9eb4385 [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.4/uma.ecore"
xmlns:epf="http://www.eclipse.org/epf"
epf:version="1.2.0" xmi:id="-K57GQWwsOy4jkTyqZoWs2A"
name="develop_architecture,_mDf2EBapEduSTJywppIxVQ" guid="-K57GQWwsOy4jkTyqZoWs2A"
changeDate="2007-02-26T03:44:53.453-0800" version="1.0.0">
<mainDescription>&lt;h1> Identify architectural priorities &lt;/h1>&#xD;
&lt;p> Architecture&amp;nbsp;priorities&amp;nbsp;can take the form of&amp;nbsp;one or more &lt;a class=&quot;elementLink&quot; href=&quot;./../../../openup/guidances/concepts/arch_mech_2932DFB6.html&quot; guid=&quot;_mzxI0A4LEduibvKwrGxWxA&quot;>Architectural &#xD;
Mechanism&lt;/a>s that are brought into scope by association with the scenarios &#xD;
prioritized for the current iteration. Other drivers may also be apparent. For &#xD;
example, it may be necessary to move certain aspects of the architecture from &#xD;
prototype- to production-quality implementation or to explore certain aspects &#xD;
of the architecture to inform developers of future iterations. &lt;/p>&#xD;
&lt;p> The architectural&amp;nbsp;priorities are often&amp;nbsp;driven by&amp;nbsp;the development &#xD;
of software that implements an&amp;nbsp;&lt;a class=&quot;elementLink&quot; href=&quot;./../../../openup/guidances/concepts/arch_mech_2932DFB6.html&quot; guid=&quot;_mzxI0A4LEduibvKwrGxWxA&quot;>Architectural &#xD;
Mechanism&lt;/a>.&amp;nbsp;It is important to specify the qualities of these mechanisms &#xD;
precisely, and this may lead you to supplement the use (or &amp;quot;usage&amp;quot;) &#xD;
scenarios with quality attributes. Because more than one use scenario may place &#xD;
demands on the same mechanisms, it may be helpful to consolidate these into &#xD;
quality scenarios. &lt;/p>&#xD;
&lt;p> For example, if you want a system to be secure, specify the types of threats. &#xD;
Quality scenarios are one way to express desired qualities in collaboration &#xD;
with the system stakeholders [&lt;a class=&quot;elementLinkWithUserText&quot; href=&quot;./../../../openup/guidances/supportingmaterials/references_6CCF393.html&quot; guid=&quot;_9ToeIB83Edqsvps02rpOOg&quot;>KAZ04&lt;/a>]. &#xD;
Walk through things that could happen to the system and how it would respond. &#xD;
&lt;strong>Use-case scenarios&lt;/strong> focus on runtime behavior where the stakeholder is the user. &#xD;
&lt;strong>Quality scenarios&lt;/strong> encompass other interactions with the system as well, such &#xD;
as system maintenance staff modifying the system. &lt;/p>&#xD;
&lt;p> Several scenarios may be devised for each quality attribute (such as usability, &#xD;
reliability, performance, or&amp;nbsp;security). For example: security scenarios &#xD;
for denial of service and unauthorized access. A good scenario makes clear what &#xD;
the stimulus is, what causes it, and what responses are appropriate. &lt;/p>&#xD;
&lt;p>&#xD;
Example:&#xD;
&lt;/p>&#xD;
&lt;blockquote>&#xD;
&lt;p>&#xD;
During peak operation, an unauthorized intruder tries to download prohibited data through the system&#xD;
administrator’s interface. The system detects the attempt, blocks access, and notifies the supervisor within 15&#xD;
seconds.&#xD;
&lt;/p>&#xD;
&lt;/blockquote>&#xD;
&lt;p>&#xD;
After you have collected the scenarios, you need to establish priorities for them. Use scenarios to realize&#xD;
requirements, so that their mapping onto the architecture, their impact, and their interactions can be understood.&#xD;
&lt;/p>&#xD;
&lt;h2> Refine the Architectural Mechanisms &lt;/h2>&#xD;
&lt;p> Consider each high-priority quality scenario, and map each of these onto the &#xD;
Architectural Mechanisms. Refine the mechanisms to identify the specific technology &#xD;
that will handle each mechanism in scope. For example, for the Persistence mechanism, &#xD;
it may be appropriate to&amp;nbsp;use a relational database management system, such &#xD;
as MySQL.&amp;nbsp;Consider the selection of technology in the context of the requirements &#xD;
and constraints. &lt;/p>&#xD;
&lt;p>&#xD;
See &lt;a class=&quot;elementLinkWithType&quot; href=&quot;./../../../openup/guidances/concepts/arch_mech_2932DFB6.html&quot; guid=&quot;_mzxI0A4LEduibvKwrGxWxA&quot;>Concept: Architectural Mechanism&lt;/a> for more information.&#xD;
&lt;/p>&#xD;
&lt;h2> Identify Business Patterns &lt;/h2>&#xD;
&lt;p> The&amp;nbsp;architecture of&amp;nbsp;a software system can often be characterized &#xD;
by a small number of essential scenarios. For example, for an online bookstore, &#xD;
describing the way the software handles the scenarios for ordering a book and &#xD;
checking out the shopping cart are often enough to communicate the essence of &#xD;
the architecture. Such business patterns also provide a useful blueprint for &#xD;
similar functionality throughout the system. &lt;/p>&#xD;
&lt;h2> Identify reuse opportunities &lt;/h2>&#xD;
&lt;p> After looking for similar behavior and returned values, look for similarity &#xD;
of parameters. If the interfaces&amp;nbsp;are not an exact match for the component &#xD;
interfaces being proposed, you can modify the proposed&amp;nbsp;signatures to increase &#xD;
the degree of reuse. Some design mechanisms, such as performance or security &#xD;
requirements, may disqualify a component from reuse even when there is&amp;nbsp;a &#xD;
perfect match between operation signatures. &lt;/p>&#xD;
&lt;p align=&quot;left&quot;> A common set of components may exist that provides many of the &#xD;
&lt;a class=&quot;elementLink&quot; href=&quot;./../../../openup/guidances/concepts/arch_mech_2932DFB6.html&quot; guid=&quot;_mzxI0A4LEduibvKwrGxWxA&quot;>Architectural &#xD;
Mechanisms&lt;/a> that you need&amp;nbsp;for the new system. These components may be &#xD;
available either because they were developed or purchased previously for&amp;nbsp;similar &#xD;
systems. Given their suitability and compatibility within the software architecture, &#xD;
there may be a need to reverse-engineer these components to represent them in &#xD;
a design model and reuse them in a project. &lt;/p>&#xD;
&lt;p align=&quot;left&quot;>&#xD;
Similar thinking applies to&amp;nbsp;existing databases. Part of the information to be used by the application under&#xD;
development may already reside in a database. You may be able to get the classes that represent the database structures&#xD;
that hold this information by reverse-engineering the database.&#xD;
&lt;/p>&#xD;
&lt;h2 align=&quot;left&quot;> Identify architecturally significant design elements &lt;/h2>&#xD;
&lt;p align=&quot;left&quot;> Consider&amp;nbsp;each high-priority&amp;nbsp;scenario in scope. Walk &#xD;
through the actions that the&amp;nbsp;scenario initiates, and highlight the areas &#xD;
of the architecture that participate in realizing, or implementing, the requirements. &#xD;
&lt;/p>&#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. Component identification can&#xD;
be&amp;nbsp;based on architectural layers, deployment choices, or key abstractions. Ask 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;
Each component includes entities from the problem domain, control classes that coordinate complex tasks within&#xD;
components, and interfaces that handle communication with the environment. The interface for each instantiated element&#xD;
is identified. At this point, interfaces do not need to be as detailed as a signature, but they do need to document&#xD;
what the elements need, what they can use, and what they can depend on.&#xD;
&lt;/p>&#xD;
&lt;p> Identified patterns define the types of elements but not a specific number. &#xD;
Apply the chosen patterns to define a new set of elements that conform to the &#xD;
patterns. Functionality will be allocated to the instantiated elements. &lt;/p>&#xD;
&lt;h2> Define development and test architectures &lt;/h2>&#xD;
&lt;p>&#xD;
The development and test architectures may be different from the target production implementation.&#xD;
&lt;/p>&#xD;
&lt;ul>&#xD;
&lt;li>&#xD;
Additional software may need to be developed to support testing.&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Alternative deployment configurations may need to be defined in response to constraints on development hardware.&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Multiple environments may be required to support different categories of tests.&#xD;
&lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;p>&#xD;
In each case, you need to specify the architecture. Also, be sure to consider the impact on the quality of the overall&#xD;
architecture.&#xD;
&lt;/p>&#xD;
&lt;h2> Validate the architecture &lt;/h2>&#xD;
&lt;p> The surest way to validate the architecture is through software. The software &#xD;
developed up to the end of the Elaboration phase is largely aiming to validate &#xD;
the architecture, to the point where it can be baselined, thereby providing &#xD;
some level of stability during the Construction phase. &lt;/p>&#xD;
&lt;p> It can also be useful to perform simple validation by walking through the &#xD;
main design concepts and models, perhaps around a whiteboard or through other &#xD;
collaborative techniques. This can help refine thinking but will not act as &#xD;
a substitute for building some software. &lt;/p>&#xD;
&lt;h2> Communicate decisions &lt;/h2>&#xD;
&lt;p>&#xD;
You can document and communicate your decisions as many ways as you wish:&#xD;
&lt;/p>&#xD;
&lt;ul>&#xD;
&#xD;
&lt;li> Publication of&amp;nbsp;reference source code&lt;/li>&#xD;
&#xD;
&lt;li> Publication of&amp;nbsp;reference models&lt;/li>&#xD;
&#xD;
&lt;li> Publication of&amp;nbsp;software architecture documentation&lt;/li>&#xD;
&#xD;
&lt;li> Formal&amp;nbsp;presentations of the material&lt;/li>&#xD;
&lt;li>&#xD;
Informal walkthroughs of the architecture&#xD;
&lt;/li>&#xD;
&lt;/ul></mainDescription>
</org.eclipse.epf.uma:ContentDescription>