blob: e3e8f216947da5448ea1830d3653377e06af33f9 [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="_AGvpcMM3EdmSIPI87WLu3g"
name="uc_model,_0VAUsMlgEdmt3adZL5Dmdw" guid="_AGvpcMM3EdmSIPI87WLu3g" changeDate="2007-02-28T11:40:11.200-0800"
version="1.0.0">
<mainDescription>&lt;h3>&#xD;
Introduction&#xD;
&lt;/h3>&#xD;
&lt;p>&#xD;
The key to successful iterative development is ensuring that the development team maximizes stakeholder value and&#xD;
minimizes risk early in the lifecycle, while minimizing re-work later.&amp;nbsp; This imposes some constraints on how we&#xD;
develop the use-case model.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
At one extreme is the classical waterfall approach, which attempts to&amp;nbsp;detail all of the requirements prior to&#xD;
design and implementation.&amp;nbsp; This approach delays delivery of stakeholder value and risk reduction unnecessarily.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
At the other extreme is&amp;nbsp;beginning development prior to understanding what the system must do.&amp;nbsp; This approach&#xD;
results in significant, and costly, re-work later in the lifecycle.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
A better approach is to detail only those requirements which will be the focus of development in the next iteration (or&#xD;
two).&amp;nbsp; Selection of these requirements is driven by value and risk, and thus requires as a minimum an abstract&#xD;
understanding of the &quot;big-picture&quot;.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
The following discussion will outline the approach used to evolve the use-case model to achieve these goals.&#xD;
&lt;/p>&#xD;
&lt;h3>&#xD;
&lt;a id=&quot;How the Use-Case Model Evolves&quot; name=&quot;How the Use-Case Model Evolves&quot;>How the Use-Case Model Evolves&lt;/a>&#xD;
&lt;/h3>&#xD;
&lt;p>&#xD;
The recommended approach to evolving the use-case model takes a &quot;breadth before depth&quot; approach.&amp;nbsp; In this&#xD;
approach, one identifies the actors and use cases and outlines them quickly.&amp;nbsp; Based on this knowledge, one can&#xD;
then perform an initial assessment of risk and priorities and thus focus the effort of&amp;nbsp;detailing&amp;nbsp;the use&#xD;
cases on the right areas.&#xD;
&lt;/p>&#xD;
&lt;h4>&#xD;
Inception&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
The purpose of inception is to understand the scope of the system.&amp;nbsp; We need to understand the main purpose of the&#xD;
system, what is within the scope of the system, and what is external to the system.&amp;nbsp; We should strive to list all&#xD;
the primary actors and use cases, however we don't have the luxury of being able to detail all of these requirements at&#xD;
this time.&amp;nbsp; Strive to&amp;nbsp;identify by name&amp;nbsp;~80% of the primary actors and use cases and provide a brief&#xD;
description (one - three sentences) for each.&#xD;
&lt;/p>&#xD;
&lt;blockquote dir=&quot;ltr&quot; style=&quot;MARGIN-RIGHT: 0px&quot;>&#xD;
&lt;h5>&#xD;
Identify Stakeholders&#xD;
&lt;/h5>&#xD;
&lt;p>&#xD;
Begin by listing all the external stakeholders for the system.&amp;nbsp; These individuals will be the source of the&#xD;
requirements.&#xD;
&lt;/p>&#xD;
&lt;h5>&#xD;
Identify Actors&#xD;
&lt;/h5>&#xD;
&lt;p>&#xD;
Name and describe the primary actors.&amp;nbsp; See &lt;a class=&quot;elementLinkWithType&quot; href=&quot;./../../../openup/guidances/guidelines/find_and_outline_actors_and_ucs_BB5516A9.html&quot; guid=&quot;_eyL0wCu-EdqSxKAVa9kmvA&quot;>Guideline: Find and Outline Actors and Use Cases&lt;/a>.&#xD;
&lt;/p>&#xD;
&lt;h5>&#xD;
Identify Use Cases&#xD;
&lt;/h5>&#xD;
&lt;p>&#xD;
For each actor, ask &quot;what does this actor want to accomplish with the system&quot;?&amp;nbsp; This will reveal the primary&#xD;
use cases for the system.&amp;nbsp; Name and describe each of these as you discover them.&#xD;
&lt;/p>&#xD;
&lt;h5>&#xD;
Update the Use-Case Model&#xD;
&lt;/h5>&#xD;
&lt;p>&#xD;
Update the use case model to capture the actor and use case names and brief description.&amp;nbsp; Capture the&#xD;
relationship between the actors and use cases.&#xD;
&lt;/p>&#xD;
&lt;h5>&#xD;
Outline the Basic Flows&#xD;
&lt;/h5>&#xD;
&lt;p>&#xD;
For those use cases that are considered high priority by the stakeholders, or high risk by the development team,&#xD;
capture a step-by-step description of the Basic Flow.&amp;nbsp; Don't worry about structuring the flow at this&#xD;
point.&amp;nbsp; Focus on capturing the dialogue between the actor and the system and the key requirements for the&#xD;
system.&#xD;
&lt;/p>&#xD;
&lt;h5>&#xD;
Identify Alternate Flows&#xD;
&lt;/h5>&#xD;
&lt;p>&#xD;
As you work through the Basic Flows, ask: &quot;What can go wrong?&quot;; &quot;What options are available at this point?&quot;;&#xD;
etc.&amp;nbsp; These types of questions will reveal alternate flows.&amp;nbsp; Capture these, giving each a name and brief&#xD;
description.&amp;nbsp; Fight the urge to detail these alternate flows at this time.&#xD;
&lt;/p>&#xD;
&lt;h5>&#xD;
Refactor the Use Case Model&#xD;
&lt;/h5>&#xD;
&lt;p>&#xD;
Based on the Basic Flows you have identified, determine if there is common behavior that could be factored out into&#xD;
&amp;lt;&amp;lt;include&amp;gt;&amp;gt; use cases.&amp;nbsp; Refactor the Use Case model accordingly.&#xD;
&lt;/p>&#xD;
&lt;h5>&#xD;
Prioritize Use Cases&#xD;
&lt;/h5>&#xD;
&lt;p>&#xD;
Given the abstract description you now have of the requirements, work with stakeholders to prioritize the use&#xD;
cases.&amp;nbsp; This will be the primary input to iteration planning.&#xD;
&lt;/p>&#xD;
&lt;/blockquote>&#xD;
&lt;h4>&#xD;
Elaboration&#xD;
&lt;/h4>&#xD;
&lt;blockquote dir=&quot;ltr&quot; style=&quot;MARGIN-RIGHT: 0px&quot;>&#xD;
&lt;p>&#xD;
The purpose of elaboration is to demonstrate the feasibilty of&amp;nbsp;the solution prior to committing additional&#xD;
resources.&amp;nbsp; To be successful, one should demonstrate that stakeholder value can be delivered and that the risk&#xD;
of continuing is acceptable.&amp;nbsp; We should strive to detail and implement ~20% of the scenarios.&amp;nbsp; These&#xD;
scenarios should be selected to achieve good coverage of the architecture (for example, a vertical slice through&#xD;
the architecture, touching as many&amp;nbsp;components and interfaces as possible, is preferred to elaborating the GUI&#xD;
only).&#xD;
&lt;/p>&#xD;
&lt;h5>&#xD;
Detail Basic Flow&#xD;
&lt;/h5>&#xD;
&lt;p>&#xD;
For those UC selected for the next iteration, spend the time to detail the basic flow now.&amp;nbsp; See &lt;a class=&quot;elementLinkWithType&quot; href=&quot;./../../../openup/guidances/guidelines/detail_ucs_and_scenarios_6BC56BB7.html&quot; guid=&quot;_4BJ_YCxSEdqjsdw1QLH_6Q&quot;>Guideline: Detail Use Cases and Scenarios&lt;/a>.&#xD;
&lt;/p>&#xD;
&lt;h5>&#xD;
Detail Alternate Flow&#xD;
&lt;/h5>&#xD;
&lt;p>&#xD;
For those alternate flows selected for the next iteration, spend the time to detail the flows now.&#xD;
&lt;/p>&#xD;
&lt;h5>&#xD;
Update the Use-Case Model&#xD;
&lt;/h5>&#xD;
&lt;p>&#xD;
Update the Use-Case Model to capture any refinements made as a result of your work.&amp;nbsp; Depending upon the&#xD;
complexity of the system, you may want to introduce packages to group the use cases in a logical manner to simplify&#xD;
communications, iteration planning, and parallel development.&#xD;
&lt;/p>&#xD;
&lt;/blockquote>&#xD;
&lt;h4>&#xD;
Construction&#xD;
&lt;/h4>&#xD;
&lt;blockquote dir=&quot;ltr&quot; style=&quot;MARGIN-RIGHT: 0px&quot;>&#xD;
&lt;p>&#xD;
The purpose of construction is to incrementally deliver functionality (and value).&amp;nbsp; Working from the iteration&#xD;
plan, continue detailing the remaining requirements.&amp;nbsp; Shoot for completion of ~90 - ~95% of use cases by the&#xD;
end of construction.&#xD;
&lt;/p>&#xD;
&lt;h5>&#xD;
Detail Basic Flows&#xD;
&lt;/h5>&#xD;
&lt;p>&#xD;
For those UC selected for the next iteration, spend the time to detail the basic flow now.&amp;nbsp; See &lt;a class=&quot;elementLinkWithType&quot; href=&quot;./../../../openup/guidances/guidelines/detail_ucs_and_scenarios_6BC56BB7.html&quot; guid=&quot;_4BJ_YCxSEdqjsdw1QLH_6Q&quot;>Guideline: Detail Use Cases and Scenarios&lt;/a>.&#xD;
&lt;/p>&#xD;
&lt;h5>&#xD;
Detail Alternate Flows&#xD;
&lt;/h5>&#xD;
&lt;p>&#xD;
For those alternate flows selected for the next iteration, spend the time to detail the flows now.&#xD;
&lt;/p>&#xD;
&lt;h5>&#xD;
Update the Use-Case Model&#xD;
&lt;/h5>&#xD;
&lt;p>&#xD;
Update the Use-Case Model to capture any refinements made as a result of your work.&#xD;
&lt;/p>&#xD;
&lt;/blockquote>&#xD;
&lt;h4>&#xD;
Transition&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
The purpose of transition is to make the system operational in its intended environment.&amp;nbsp; Some requirements will&#xD;
still be uncovered at this point, but if we have done things right they should not stress the design.&amp;nbsp; The&#xD;
remaining ~5% to ~10% of use cases should be detailed and implemented in this phase.&#xD;
&lt;/p>&#xD;
&lt;h3>&#xD;
&lt;a id=&quot;Avoiding Functional Decomposition&quot; name=&quot;Avoiding Functional Decomposition&quot;>Avoiding Functional&#xD;
Decomposition&lt;/a>&#xD;
&lt;/h3>&#xD;
&lt;p>&#xD;
A common pitfall for those new to use-case models is to perform a&amp;nbsp;functional decomposition of the system. This&#xD;
results in many small &quot;use cases&quot;, that on their own do not deliver the &quot;observable result of value&quot; to the&#xD;
actor.&amp;nbsp; To avoid this, watch for the following symptoms:&#xD;
&lt;/p>&#xD;
&lt;ul>&#xD;
&lt;li>&#xD;
&lt;strong>Small&lt;/strong> use cases, meaning that the description of the flow of events is only one or a few&#xD;
sentences.&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
&lt;strong>Many&lt;/strong> use cases, meaning that the number of use cases is some multiple of a hundred, rather than a&#xD;
multiple of ten.&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Use-case names that are constructions such as &quot;do this operation on this particular data&quot; or &quot;do this function with&#xD;
this particular data&quot;. For example, &quot;Enter Personal Identification Number in an ATM machine&quot; should not be modeled&#xD;
as a separate use case for the ATM machine, because no one would use the system to do just this. A use case is a&#xD;
complete flow of events that results in something of value to an actor.&#xD;
&lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;p>&#xD;
To avoid functional decomposition, make sure that the use-case model helps answer these kinds of questions:&#xD;
&lt;/p>&#xD;
&lt;ul>&#xD;
&lt;li>&#xD;
What is the context of the system?&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Why are you building this system?&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
What does the user want the system to do?&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
How&amp;nbsp;do the users benefit from the system?&#xD;
&lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;h3>&#xD;
&lt;a id=&quot;Structuring the Use-Case Model&quot; name=&quot;Structuring the Use-Case Model&quot;>Structuring the Use-Case Model&lt;/a>&#xD;
&lt;/h3>&#xD;
&lt;p>&#xD;
There are three main reasons for structuring the use-case model:&#xD;
&lt;/p>&#xD;
&lt;ul>&#xD;
&lt;li>&#xD;
To make the use cases easier to understand.&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
To partition common behavior described within many use cases.&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
To make the use-case model easier to maintain.&#xD;
&lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;p>&#xD;
Structuring is not the first thing you do, however. There is no point in structuring the use cases until you know a bit&#xD;
more about their behavior than a one-sentence description. You should at least have established a step-by-step outline&#xD;
for the flow of events of the use case to make sure that your decisions are based on an accurate understanding of the&#xD;
behavior.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
There are several advanced modeling concepts available in the literature for&amp;nbsp;structuring the use-case model,&#xD;
however, following the principle of &quot;keep-it-simple&quot; only the most useful of these, namely the &amp;lt;&amp;lt;include&amp;gt;&amp;gt;&#xD;
relationship is discussed in this process.&amp;nbsp; This relationship permits one to factor out common behavior into a&#xD;
separate use case that is &quot;include&quot; in other use cases.&amp;nbsp; See &lt;a class=&quot;elementLinkWithType&quot; href=&quot;./../../../openup/guidances/concepts/use_case_model_CD178AF9.html&quot; guid=&quot;_2jyfUAhVEduRe8TeoBmuGg&quot;>Concept: Use-Case Model&lt;/a>&amp;nbsp;for more&amp;nbsp;details.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
Another aspect of&amp;nbsp;structuring the use-case model for easier understanding is grouping the use cases into packages.&#xD;
The use-case model can be organized as a hierarchy of use-case packages. For more information on use-case packages, see&#xD;
&lt;a class=&quot;elementLinkWithType&quot; href=&quot;./../../../openup/guidances/concepts/use_case_model_CD178AF9.html&quot; guid=&quot;_2jyfUAhVEduRe8TeoBmuGg&quot;>Concept: Use-Case Model&lt;/a>.&#xD;
&lt;/p>&#xD;
&lt;h3>&#xD;
&lt;a id=&quot;Use Cases Are Always Related to Actors&quot; name=&quot;Use Cases Are Always Related to Actors&quot;>Relationship Between Use&#xD;
Cases and Actors&lt;/a>&#xD;
&lt;/h3>&#xD;
&lt;p>&#xD;
Running each use case includes communication with one or more actors. A use-case instance is always started by an actor&#xD;
asking the system to do something. This implies that every use case should have communicates-associations with actors.&#xD;
The reason for this rule is to enforce that the system provides only the functionality that users need and nothing&#xD;
else. Having use cases that no one requests is an indication that something is wrong in the use-case model or in the&#xD;
requirements.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
However, there are some exceptions to this rule:&#xD;
&lt;/p>&#xD;
&lt;ul>&#xD;
&lt;li>&#xD;
An&amp;nbsp;&quot;included&quot; use case might not interact with an actor if the base use case does.&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
A use case may be initiated according to a schedule (for example, once a week or once a day), which means that the&#xD;
system clock is the initiator. The system clock is internal to the system; therefore, the use case is not initiated&#xD;
by an actor but by an internal system event. If no other actor interaction occurs in the use case, it will not have&#xD;
any associations to actors. However, for clarity, you can use &quot;time&quot; as an actor to show how the use case is&#xD;
initiated in your use-case diagrams. &lt;strong>CAUTION:&lt;/strong> if you have a lot of &quot;time&quot; actors in your model,&#xD;
challenge them.&amp;nbsp; Perhaps you missed a real actor, such as an administrator responsible for scheduling reports,&#xD;
etc.&#xD;
&lt;/li>&#xD;
&lt;/ul></mainDescription>
</org.eclipse.epf.uma:ContentDescription>