blob: 2b80ccff867ddd92b17038fb7f096b6cf5e60c41 [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" xmi:id="-YeVRerdEixh4HgHOuw2KRQ"
name="analyze_arch_reqs,_42UD4A3tEduibvKwrGxWxA" guid="-YeVRerdEixh4HgHOuw2KRQ"
changeDate="2007-06-29T13:28:32.759-0700" version="1.0.0">
<mainDescription>&lt;h4>&#xD;
Identify architectural goals&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
Architectural goals provide the motivation and rationale&amp;nbsp;for decisions. These goals are&amp;nbsp;often driven&#xD;
by&amp;nbsp;the software requirements, particularly in&amp;nbsp;&lt;a class=&quot;elementLink&quot; href=&quot;./../../../openup/workproducts/supporting_requirements_spec_7D9DD47C.html&quot; guid=&quot;_BVh9cL-CEdqb7N6KIeDL8Q&quot;>Supporting Requirements Specification&lt;/a>, because they are not always&amp;nbsp;obvious from&amp;nbsp;the use cases alone [&lt;a class=&quot;elementLinkWithUserText&quot; href=&quot;./../../../openup/guidances/supportingmaterials/references_6CCF393.html&quot; guid=&quot;_9ToeIB83Edqsvps02rpOOg&quot;>ALL02&lt;/a>].&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
Architectural goals define how the system needs to respond to change over time. Consider these questions when writing&#xD;
your goals:&#xD;
&lt;/p>&#xD;
&lt;ul>&#xD;
&lt;li>&#xD;
What is the expected lifespan of the system?&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Will the system need to respond to technological changes over that time, such as new versions of middleware or&#xD;
other products?&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
How&amp;nbsp;frequently is&amp;nbsp;the system&amp;nbsp;expected to adapt to change?&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
What changes can we anticipate in the future, and how can we make them easier to accommodate?&#xD;
&lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;p>&#xD;
These considerations will have a significant effect on the structure of the system.&#xD;
&lt;/p>&#xD;
&lt;h4>&#xD;
Identify architecturally significant requirements&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
Some of the requirements will be more significant than others when considered from an architectural perspective.&#xD;
Identifying them will define&amp;nbsp;the subset of requirements that will generally need to be satisfied before the&#xD;
architecture can be stabilised. Furthermore, the system will generally be more sensitive to changes&amp;nbsp;against&#xD;
architecturally significant requirements&amp;nbsp;than others, so identifying and communicating ths subset will help others&#xD;
understand the potential implications of change.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
Requirements can be explicitly or implicitly architecturally significant. Implicitly significant requirements may&#xD;
define the essence of the functional behaviour of the system (for example, making a purchase from an on-line store).&#xD;
Explicitly significant requirements are often overtly technical in nature, such as performance targets; the need to&#xD;
interface to other systems; the number of users that must be supported; or security requirements.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
See &lt;a class=&quot;elementLink&quot; href=&quot;./../../../openup/guidances/guidelines/determine_architecturally_significant_requirements_817DFD9B.html&quot; guid=&quot;_D3JXMNvKEduv2KOT-Teh6w&quot;>Determine Architecturally Significant Requirements&lt;/a>&amp;nbsp;for more information.&#xD;
&lt;/p>&#xD;
&lt;h4>&#xD;
Identify constraints on the architecture&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
Gather information about the existing&amp;nbsp;environment and identify any constraints in the solution. This will ease&#xD;
integration with the environment; and may reduce risk, cost and duplication of solution elements.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
Architectural constraints can arise from various factors:&#xD;
&lt;/p>&#xD;
&lt;div style=&quot;MARGIN-LEFT: 2em&quot;>&#xD;
&lt;ul>&#xD;
&lt;li>&#xD;
Network topology&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Use of a given database vendor or an existing database&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Web environment (server configurations, firewall, DMZs, and so forth)&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Servers (hardware model, operating system)&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Use of third-party software or a particular technology&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Compliance with existing standards&#xD;
&lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;/div>&#xD;
&lt;p>&#xD;
For example, if the company uses only one type of database, you will probably try to use it as much as possible to&#xD;
leverage&amp;nbsp;the existing database administration skills, rather than introducing a new one.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
These architectural constraints, combined with the requirements, help you define&amp;nbsp;an appropriate&amp;nbsp;candidate for&#xD;
the system architecture.&#xD;
&lt;/p>&#xD;
&lt;h4>&#xD;
Survey, assess, and select from available assets&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
To assess and select assets to reuse on your project, you need to understand the requirements of the system's&#xD;
environment. You also need to understand the scope and general functionality of the system that the Stakeholders&#xD;
require. There are several types of assets to consider, including (but not limited to): reference architectures;&#xD;
frameworks; patterns; analysis mechanisms; classes; and experience. You can search asset&amp;nbsp;repositories (internal or&#xD;
external to your organization) and industry literature to identify assets or similar projects.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
You need to assess whether available assets contribute to solving the key challenges of the current project and whether&#xD;
they are compatible with the project's architectural constraints. You also need to analyze the extent of the fit&#xD;
between assets and requirements, considering whether any of the requirements are negotiable (to enable use of the&#xD;
asset). Also, assess whether the asset could be modified or extended to satisfy requirements, as well as what the&#xD;
tradeoffs in adopting it are, in terms of cost, risk, and functionality.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
Finally, decide, in principle, whether to use one or more assets, and record the rationale for this decision.&#xD;
&lt;/p>&#xD;
&lt;h4>&#xD;
Define approach for structuring the system&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
Structuring your system helps you manage its complexity by using the well-known &quot;divide and conquer&quot; strategy. By&#xD;
breaking the process into smaller and more manageable pieces, you make development easier.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
Layering&amp;nbsp; is&amp;nbsp;one of the most&amp;nbsp;commonly used&amp;nbsp;approaches for structuring and decomposing systems. Each&#xD;
layer groups similar classes or components, which communicate insofar as possible only with adjacent layers.&amp;nbsp; See&#xD;
&lt;a class=&quot;elementLinkWithType&quot; href=&quot;./../../../openup/guidances/guidelines/layering_F169CF07.html&quot; guid=&quot;_0gpkAMlgEdmt3adZL5Dmdw&quot;>Guideline: Layering&lt;/a> for more information.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
You do not define which layers contain which classes or components. Instead, you define how many layers you will need&#xD;
and which kinds of layers you will use. For example, if you are developing a new middleware system, you probably do not&#xD;
need a business layer. Later, during&amp;nbsp;design activities, you decide which classes and components will populate&#xD;
these layers.&#xD;
&lt;/p>&#xD;
&lt;h4>&#xD;
Define approach for deploying the system&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
Develop a high level overview of how the software is deployed. For example, determine if the system needs to be&#xD;
accessed remotely, or has requirements that suggest distribution across multiple nodes. Some sources of information to&#xD;
consider are:&#xD;
&lt;/p>&#xD;
&lt;ul>&#xD;
&lt;li>&#xD;
users at geographical locations&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
organization of business data&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
service level requirements&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
constraints (such as requirements to interface with legacy systems)&#xD;
&lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;p>&#xD;
Validate that the deployment overview supports users (especially those users at remote locations if this is required)&#xD;
performing typical&amp;nbsp;usage scenarios&amp;nbsp;while satisfying nonfunctional requirements and constraints. Validate that&#xD;
the nodes and connections are adequate to support the interactions between components on different nodes, and between&#xD;
components and their stored data.&#xD;
&lt;/p>&#xD;
&lt;h4>&#xD;
Identify key abstractions&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
Requirements and analysis tasks usually uncover key concepts and behaviors that the system must be able to handle.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
The concepts manifest in design as key abstractions.&amp;nbsp;Key behaviors should correlate with the scenarios identifed&#xD;
as part of the architecturally significant requirements and represent the important interactions between key&#xD;
abstractions.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
The &lt;a class=&quot;elementLink&quot; href=&quot;./../../../openup/workproducts/vision_2E71B03C.html&quot; guid=&quot;_0WVxcMlgEdmt3adZL5Dmdw&quot;>Vision&lt;/a> and &lt;a class=&quot;elementLink&quot; href=&quot;./../../../openup/workproducts/glossary_5D300778.html&quot; guid=&quot;_Wn7HcNcEEdqz_d2XWoVt6Q&quot;>Glossary&lt;/a> work products are&#xD;
good sources for key abstractions. These abstractions are often easily identified because they represent things that&#xD;
are significant to the business. For example, Customer and Account are typical key abstractions in the banking&#xD;
business.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
The abstractions that&amp;nbsp;are identified at this point will also probably change and evolve during the course of the&#xD;
project. The purpose of this step is not to identify&amp;nbsp;the complete&amp;nbsp;set of classes and relationships that will&#xD;
survive throughout design.&amp;nbsp;Rather, it is&amp;nbsp;to identify the&amp;nbsp;important&amp;nbsp;concepts that the system must&#xD;
handle. The value in calling them out early in the project is that everyone on the team understands the importance of&#xD;
these&amp;nbsp;concepts and develops&amp;nbsp;coherant software to handle them consistently.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
Don't spend too much time describing&amp;nbsp;abstractions in detail at this initial stage, because there is a risk that&#xD;
spending too much time will result in identifying classes and relationships that the solution does not actually need.&#xD;
When&amp;nbsp;identifying&amp;nbsp;key abstractions, it can be useful to also define any obvious relationships that exist&#xD;
between them.&amp;nbsp;These can be captured in a table or&amp;nbsp;in diagrams (in a tool or whiteboard), and create a short&#xD;
description for each abstraction.&amp;nbsp;In general, it is not worth agonizing over defining a highly detailed set of&#xD;
relationships at this early stage in design. The relationships will become more concrete and detailed later and&#xD;
will&amp;nbsp;probably modify&amp;nbsp;these early&amp;nbsp;assumptions.&#xD;
&lt;/p>&#xD;
&lt;h4>&#xD;
Identify&amp;nbsp;architecture mechanisms&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
See&amp;nbsp;&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>.&#xD;
&lt;/p>&#xD;
&lt;h4>&#xD;
Capture architectural decisions&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
It is often useful to record key architectural decisions and working assumptions on an architectural overview diagram&#xD;
to make it easier to communicate the architecture to the project team and stakeholders.&amp;nbsp;This information should be&#xD;
part of the description of the architecture, but it can vary in format to suit the needs of the project.&amp;nbsp;For&#xD;
example, on an agile and low-ceremony project the overview diagram can be an informal picture story board or a graph&#xD;
with icons on either a whiteboard or a drawing tool. The illustration needs to show the nature of the proposed&#xD;
solution, convey the governing ideas, and represent the major building blocks.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
Architecture decisions should be captured in the &lt;a class=&quot;elementLinkWithType&quot; href=&quot;./../../../openup/workproducts/architecture_notebook_9BB92433.html&quot; guid=&quot;_0XAf0MlgEdmt3adZL5Dmdw&quot;>Artifact: Architecture Notebook&lt;/a>.&#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. See &lt;a class=&quot;elementLink&quot; href=&quot;./../../../openup/guidances/guidelines/architectural_view_FF6EDA37.html&quot; guid=&quot;_T9nygClEEduLGM8dfVsrKg&quot;>Architectural View&lt;/a>&amp;nbsp;for more information.&lt;br />&#xD;
&lt;/p></mainDescription>
</org.eclipse.epf.uma:ContentDescription>