blob: 51f477212dcc2635f4303bc21747713a17ec4e98 [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.5/uma.ecore"
xmlns:epf="http://www.eclipse.org/epf" epf:version="1.5.0" xmi:id="_NrC20qeqEdmKDbQuyzCoqQ"
name="design_solution,_0fshwMlgEdmt3adZL5Dmdw" guid="_NrC20qeqEdmKDbQuyzCoqQ"
changeDate="2007-07-25T12:19:31.752-0700" version="1.0.0">
<mainDescription>&lt;p>&#xD;
This task is about designing part of the system, not the whole system. It should be applied based upon some small&#xD;
subset of the requirements. The requirements driving the &lt;a class=&quot;elementLink&quot;&#xD;
href=&quot;./../../openup/workproducts/design.html&quot; guid=&quot;_0WuL8slgEdmt3adZL5Dmdw&quot;>Design&lt;/a> could be scenario-based&#xD;
functional requirements, non-functional requirements, or a combination.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
This task can be applied in some specific context such as the database access elements required for some scenario. In&#xD;
this case the task might be applied again later to deal with a different context on the same requirements. Keep in mind&#xD;
that to actually build some functionality of value to the users, all contexts will typically need to be designed and&#xD;
implemented. For example, to complete a piece of system capability it must be designed and implemented in all its&#xD;
contexts including the user interface, business rules, database access, etc.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
For cohesion and completeness, this task is described as an end-to-end pass of designing a scenario of system usage. In&#xD;
practice, this task will be revisited many times as the design is first considered, portions are implemented, more&#xD;
design is performed based on what was learned, etc. The healthiest application of this task is in very close proximity&#xD;
to the implementation.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
If this task is being performed on an architecturally significant element, the results of this design should be&#xD;
referenced by the &lt;a class=&quot;elementLink&quot; href=&quot;./../../openup/workproducts/architecture_notebook.html&quot;&#xD;
guid=&quot;_0XAf0MlgEdmt3adZL5Dmdw&quot;>Architecture Notebook&lt;/a>. See &lt;a class=&quot;elementLinkWithType&quot;&#xD;
href=&quot;./../../openup/guidances/guidelines/determine_architecturally_significant_requirements.html&quot;&#xD;
guid=&quot;_D3JXMNvKEduv2KOT-Teh6w&quot;>Guideline: Determine Architecturally Significant Requirements&lt;/a> for more information.&#xD;
&lt;/p></mainDescription>
<sections xmi:id="_4Z7WYKuKEdmhFZtkg1nakg" name="Understand requirement details"
guid="_4Z7WYKuKEdmhFZtkg1nakg">
<sectionDescription>&lt;p>&#xD;
&#xD;
&#xD;
Examine the relevant &lt;a class=&quot;elementLink&quot; href=&quot;./../../openup/workproducts/use_case_22BE66E2.html&quot; guid=&quot;_0VGbUMlgEdmt3adZL5Dmdw&quot;>Use Case&lt;/a>s and &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>&amp;nbsp;to understand the scope of the design task and the expectations on the Design. Work&#xD;
&#xD;
&#xD;
with the&amp;nbsp;&lt;a class=&quot;elementLink&quot; href=&quot;./../../openup/roles/stakeholder_9FFD4106.html&quot; guid=&quot;_dTa6gMAYEdqX-s4mWhkyqQ&quot;>Stakeholder&lt;/a> and Analyst to clarify ambiguous or missing information. See &lt;a class=&quot;elementLinkWithType&quot; href=&quot;./../../openup/guidances/guidelines/analyze_the_design_4C4750C0.html&quot; guid=&quot;__MnggPTdEduDKIuqTXQ8SA&quot;>Guideline: Analyze the Design&lt;/a>.&#xD;
&#xD;
&#xD;
&lt;/p>&#xD;
&#xD;
&#xD;
&lt;p>&#xD;
&#xD;
&#xD;
If the requirements are not represented in some sort of scenario form (for example a non-functional requirement might&#xD;
&#xD;
&#xD;
not have a scenario associated with it), a scenario will have to be identified that appropriately exercises the&#xD;
&#xD;
&#xD;
requirements under consideration.&#xD;
&#xD;
&#xD;
&lt;/p>&#xD;
&#xD;
&#xD;
&lt;p>&#xD;
&#xD;
&#xD;
If the requirements are&amp;nbsp;determined to be incomplete or incorrect, work with an analyst and stakeholder to get the&#xD;
&#xD;
&#xD;
requirements improved and possibly submit a change request against the requirements.&#xD;
&#xD;
&#xD;
&lt;/p></sectionDescription>
</sections>
<sections xmi:id="_Ci7aYFixEdusJoWkvSRO9Q" name="Understand the architecture" guid="_Ci7aYFixEdusJoWkvSRO9Q">
<sectionDescription>&lt;p>&#xD;
Review the Architecture Notebook to identify changes and additions to the architecture. See &lt;a&#xD;
class=&quot;elementLinkWithType&quot; href=&quot;./../../openup/guidances/guidelines/evolve_the_design.html&quot;&#xD;
guid=&quot;_C4U9QPTeEduDKIuqTXQ8SA&quot;>Guideline: Evolve the Design&lt;/a> for more information. Work with the architect if there&#xD;
is any uncertainty on the understanding of relevant parts of the architecture or of the conformance of the design&#xD;
strategy.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
This step can be skipped if there were no changes to the&amp;nbsp;architecture in the previous iteration&#xD;
&lt;/p></sectionDescription>
</sections>
<sections xmi:id="_--6tYKuKEdmhFZtkg1nakg" name="Identify design elements" guid="_--6tYKuKEdmhFZtkg1nakg">
<sectionDescription>&lt;p>&#xD;
Identify the elements that collaborate together to provide the required behavior. This can start with the key&#xD;
abstractions identified in the Architecture Notebook, design, domain analysis, and classical analysis of the&#xD;
requirements (noun filtering) to derive the elements that would be required to fulfill them. The &lt;a class=&quot;elementLink&quot; href=&quot;./../../openup/guidances/guidelines/entity_control_boundary_pattern_C4047897.html&quot; guid=&quot;_uF-QYEAhEdq_UJTvM1DM2Q&quot;>Entity-Control-Boundary Pattern&lt;/a> provides a good start for identifying elements. Also&#xD;
see &lt;a class=&quot;elementLinkWithType&quot; href=&quot;./../../openup/guidances/guidelines/analyze_the_design_4C4750C0.html&quot; guid=&quot;__MnggPTdEduDKIuqTXQ8SA&quot;>Guideline: Analyze the Design&lt;/a>.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
Existing elements of the design should be examined to see if they should participate in the collaboration. It is a&#xD;
mistake to create all new elements in each execution of this task.&#xD;
&lt;/p></sectionDescription>
</sections>
<sections xmi:id="_A_LU8KuLEdmhFZtkg1nakg" name="Determine how elements collaborate to realize the scenario"
guid="_A_LU8KuLEdmhFZtkg1nakg">
<sectionDescription>&lt;p>&#xD;
Walk through the scenario distributing responsibilities to the participating elements and ensuring that the elements&#xD;
have the relationships required to collaborate.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
These responsibilities can be simple statements of behavior assigned to elements; they need not be detailed operation&#xD;
specifications with parameters, etc. Similarly, the relationships can just be defined at this step. This step is about&#xD;
ensuring that a quality model is being created that is robust enough to support the requirements. See &lt;a class=&quot;elementLinkWithType&quot; href=&quot;./../../openup/guidances/guidelines/analyze_the_design_4C4750C0.html&quot; guid=&quot;__MnggPTdEduDKIuqTXQ8SA&quot;>Guideline: Analyze the Design&lt;/a>.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
Look to the Architecture Notebook and previous design work to create a consistent collaboration. Work with the&#xD;
architect to understand the details and motivations of the architecture. Look to reuse existing behavior and relations&#xD;
or to apply similar structure to simplify the design of the overall system.&#xD;
&lt;/p></sectionDescription>
</sections>
<sections xmi:id="_ENwJwKuLEdmhFZtkg1nakg" name="Refine design decisions" guid="_ENwJwKuLEdmhFZtkg1nakg">
<sectionDescription>&lt;p>&#xD;
&#xD;
&#xD;
Refine the design to an appropriate level of detail to drive implementation and to ensure that it fits into the&#xD;
&#xD;
&#xD;
architecture. In this step the design can take into consideration the actual implementation language and other&#xD;
&#xD;
&#xD;
technical decisions. Revisit the identification of the elements and the collaborations that realize the scenarios if&#xD;
&#xD;
&#xD;
necessary as this refinement takes into consideration details at a lower level of abstraction. Discuss testability&#xD;
&#xD;
&#xD;
issues, such as design elements that are difficult to test or critical performance areas, with the tester and&#xD;
&#xD;
&#xD;
architect.&#xD;
&#xD;
&#xD;
&lt;/p>&#xD;
&#xD;
&#xD;
&lt;p>&#xD;
&#xD;
&#xD;
Evolve the design by examining recent changes in the larger context of the design and determine if refactoring and&#xD;
&#xD;
&#xD;
redesigning techniques will improve the robustness, flexibility, and understandability of the design. See &lt;a class=&quot;elementLinkWithType&quot; href=&quot;./../../openup/guidances/guidelines/evolve_the_design_3C9D6965.html&quot; guid=&quot;_C4U9QPTeEduDKIuqTXQ8SA&quot;>Guideline: Evolve the Design&lt;/a> for guidance specific design decisions and on making&#xD;
&#xD;
&#xD;
design improvements just when they're needed.&#xD;
&#xD;
&#xD;
&lt;/p>&#xD;
&#xD;
&#xD;
&lt;p>&#xD;
&#xD;
&#xD;
Incorporate &lt;a class=&quot;elementLink&quot; href=&quot;./../../openup/guidances/concepts/arch_mech_2932DFB6.html&quot; guid=&quot;_mzxI0A4LEduibvKwrGxWxA&quot;>Architectural Mechanism&lt;/a>s from the architecture. Apply consistent structure of the&#xD;
&#xD;
&#xD;
elements and organization of the behavior as in other areas of the design and use patterns identified in the&#xD;
&#xD;
&#xD;
architecture.&#xD;
&#xD;
&#xD;
&lt;/p></sectionDescription>
</sections>
<sections xmi:id="_KNZYAKuLEdmhFZtkg1nakg" name="Design internals (for large or complex elements)"
guid="_KNZYAKuLEdmhFZtkg1nakg">
<sectionDescription>&lt;p>&#xD;
&#xD;
&#xD;
Design large or complex elements or some complex internal behavior in more detail.&#xD;
&#xD;
&#xD;
&lt;/p>&#xD;
&#xD;
&#xD;
&lt;p>&#xD;
&#xD;
&#xD;
This might just involve devising an algorithm that could be performed to produce the desired behavior. Add additional&#xD;
&#xD;
&#xD;
operations, attributes, and relationships to support the expectations of an element.&#xD;
&#xD;
&#xD;
&lt;/p>&#xD;
&#xD;
&#xD;
&lt;p>&#xD;
&#xD;
&#xD;
Design the state of the element over the course of its lifetime to ensure its proper behavior in various circumstances.&#xD;
&#xD;
&#xD;
It may be useful to describe a state machine for elements with complex states.&#xD;
&#xD;
&#xD;
&lt;/p></sectionDescription>
</sections>
<sections xmi:id="_mUVt8BfnEduD353bkQ4frw" name="Evaluate the Design" guid="_mUVt8BfnEduD353bkQ4frw">
<sectionDescription>&lt;p>&#xD;
&#xD;
&#xD;
Evaluate the object design for coupling, cohesion, and other quality design measurements.&#xD;
&#xD;
&#xD;
&lt;/p>&#xD;
&#xD;
&#xD;
&lt;p>&#xD;
&#xD;
&#xD;
Consider the design from various angles to ensure that it is a high-quality, communicable design. Work with other&#xD;
&#xD;
&#xD;
technical team members; an independent party can provide a fresh perspective. Use the tester and architect to provide&#xD;
&#xD;
&#xD;
perspectives on design quality and adherence to the architecture. However, when identifying potential reviewers keep in&#xD;
&#xD;
&#xD;
mind that if someone can add value by reviewing the design, then perhaps they could have added even more value by&#xD;
&#xD;
&#xD;
actively participating in the design effort itself. If design flaws are identified, improve the design.&#xD;
&#xD;
&#xD;
&lt;/p>&#xD;
&#xD;
&#xD;
&lt;p>&#xD;
&#xD;
&#xD;
See &lt;a class=&quot;elementLinkWithType&quot; href=&quot;./../../openup/guidances/concepts/design_E36137FA.html&quot; guid=&quot;_bFjlAPTYEduDKIuqTXQ8SA&quot;>Concept: Design&lt;/a>, &lt;a class=&quot;elementLinkWithType&quot; href=&quot;./../../openup/guidances/guidelines/analyze_the_design_4C4750C0.html&quot; guid=&quot;__MnggPTdEduDKIuqTXQ8SA&quot;>Guideline: Analyze the Design&lt;/a>, and &lt;a class=&quot;elementLinkWithType&quot; href=&quot;./../../openup/guidances/guidelines/evolve_the_design_3C9D6965.html&quot; guid=&quot;_C4U9QPTeEduDKIuqTXQ8SA&quot;>Guideline: Evolve the Design&lt;/a> for more information.&#xD;
&#xD;
&#xD;
&lt;/p></sectionDescription>
</sections>
<sections xmi:id="_OGYbwKuLEdmhFZtkg1nakg" name="Communicate the Design" guid="_OGYbwKuLEdmhFZtkg1nakg">
<sectionDescription>&lt;p>&#xD;
Communicate&amp;nbsp;the system's design to&amp;nbsp;those who need to understand it. Though this is described here toward the&#xD;
end of the task, communication should be going on throughout the steps. Working collaboratively is always better than&#xD;
reviewing the work after it is complete.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
Here are some ways to communicate&amp;nbsp;the design:&#xD;
&lt;/p>&#xD;
&lt;ul>&#xD;
&lt;li>&#xD;
Formal models&amp;nbsp;specified in UML.&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Informal diagrams that render static structure and capture&amp;nbsp;dynamic behavior.&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Annotated code that communicates information about the static structure. This can be&amp;nbsp;supplemented with textual&#xD;
descriptions of collaborative behavior across code modules.&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Data models to describe the database schema.&#xD;
&lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;p>&#xD;
Here are some examples of individuals&amp;nbsp;who will need to understand the design of the system:&#xD;
&lt;/p>&#xD;
&lt;ul>&#xD;
&lt;li>&#xD;
Developers&amp;nbsp;who will implement a solution based on the design.&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Architects who can review the design to ensure that it conforms to the architecture or who might examine the design&#xD;
for opportunities to improve the architecture.&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Other designers who can examine the design for applicability to other parts of the system.&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Developers or other designers who will be working on other parts of the system that will&amp;nbsp;depend on the&#xD;
elements designed in this task.&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Other reviewers&amp;nbsp;who will review the design for quality and adherence to standards.&#xD;
&lt;/li>&#xD;
&lt;/ul></sectionDescription>
</sections>
<keyConsiderations>&lt;p>&#xD;
&#xD;
&#xD;
&#xD;
&#xD;
Each step in this task can cause all previous steps to be revisited in light of new information and decisions.&amp;nbsp;For&#xD;
&#xD;
&#xD;
&#xD;
&#xD;
example, while determining how elements collaborate&amp;nbsp;you might find a gap in the requirements that cause you to go&#xD;
&#xD;
&#xD;
&#xD;
&#xD;
back to the beginning after collaborating with the&amp;nbsp;&lt;a class=&quot;elementLink&quot; href=&quot;./../../openup/roles/analyst_39D7C49B.html&quot; guid=&quot;_0VxJsMlgEdmt3adZL5Dmdw&quot;>Analyst&lt;/a>. Or when evaluating the&#xD;
&#xD;
&#xD;
&#xD;
&#xD;
design a reviewer could&amp;nbsp;note that a reusable element doesn't work as expected and that could cause you to identify&#xD;
&#xD;
&#xD;
&#xD;
&#xD;
new elements to take its place.&#xD;
&#xD;
&#xD;
&#xD;
&#xD;
&lt;/p>&#xD;
&#xD;
&#xD;
&#xD;
&#xD;
&lt;p>&#xD;
&#xD;
&#xD;
&#xD;
&#xD;
Consider the architecture while performing this task.&amp;nbsp;All design work must be done while regarding the&#xD;
&#xD;
&#xD;
&#xD;
&#xD;
architecture within which the Design exists.&amp;nbsp;Furthermore, certain design elements will be deemed architecturally&#xD;
&#xD;
&#xD;
&#xD;
&#xD;
significant; those elements will require updates to the architecture.&#xD;
&#xD;
&#xD;
&#xD;
&#xD;
&lt;/p>&#xD;
&#xD;
&#xD;
&#xD;
&#xD;
&lt;p>&#xD;
&#xD;
&#xD;
&#xD;
&#xD;
This task will be applied numerous times.&amp;nbsp;Design is best performed in small chunks.&#xD;
&#xD;
&#xD;
&#xD;
&#xD;
&lt;/p>&#xD;
&#xD;
&#xD;
&#xD;
&#xD;
&lt;p>&#xD;
&#xD;
&#xD;
&#xD;
&#xD;
Even when starting the design for a particular project it&amp;nbsp;is expected that there will be existing frameworks and&#xD;
&#xD;
&#xD;
&#xD;
&#xD;
reusable elements.&amp;nbsp;Every step of this task must give attention to the existing Design and existing&amp;nbsp;&lt;a class=&quot;elementLink&quot; href=&quot;./../../openup/workproducts/implementation_917CA61E.html&quot; guid=&quot;_0YoQcMlgEdmt3adZL5Dmdw&quot;>Implementation&lt;/a>, utilizing existing elements when possible and emulating or improving&#xD;
&#xD;
&#xD;
&#xD;
&#xD;
existing elements as appropriate while designing this portion of the solution.&#xD;
&#xD;
&#xD;
&#xD;
&#xD;
&lt;/p>&#xD;
&#xD;
&#xD;
&#xD;
&#xD;
&lt;p>&#xD;
&#xD;
&#xD;
&#xD;
&#xD;
Apply patterns throughout this task.&amp;nbsp;Patterns represent proven designs and their usage promotes quality and&#xD;
&#xD;
&#xD;
&#xD;
&#xD;
consistency across the Design.&#xD;
&#xD;
&#xD;
&#xD;
&#xD;
&lt;/p></keyConsiderations>
<purpose>&lt;p>&#xD;
&#xD;
&#xD;
&#xD;
&#xD;
&#xD;
The purpose of&amp;nbsp;this&amp;nbsp;task&amp;nbsp;is to describe the&amp;nbsp;elements of the system so that they support the&#xD;
&#xD;
&#xD;
&#xD;
&#xD;
&#xD;
required behavior, are of high quality, and fit within the architecture.&#xD;
&#xD;
&#xD;
&#xD;
&#xD;
&#xD;
&lt;/p></purpose>
</org.eclipse.epf.uma:TaskDescription>