blob: 8e457b15c655ec05b35ac55c110b1b59bf717ea8 [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:rmc="http://www.ibm.com/rmc" xmlns:epf="http://www.eclipse.org/epf"
epf:version="1.2.0" xmi:id="-BQLZ5GRUNrMdU6XeZAfe9Q"
name="use_case,_KudM0NcJEdqz_d2XWoVt6Q" guid="-BQLZ5GRUNrMdU6XeZAfe9Q" changeDate="2007-03-30T13:15:40.660-0700"
version="1.0.0">
<mainDescription>&lt;h3>&#xD;
Explanation&#xD;
&lt;/h3>&#xD;
&lt;p>&#xD;
A use case describes the interactions between one of more&amp;nbsp;&lt;a class=&quot;elementLink&quot; href=&quot;./../../../openup/guidances/concepts/actor_411726C.html&quot; guid=&quot;_zGqO0MDpEduTGJ8i4u8TMw&quot;>Actor&lt;/a>s and the system in order to provide an observable result of value for the&#xD;
initiating actor.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
The functionality of a system is defined by different use cases, each of which represents a specific goal (to obtain&#xD;
the observable result of value) for a particular actor.&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;picturecenter&quot; align=&quot;center&quot;>&#xD;
&amp;nbsp;&lt;img height=&quot;321&quot; alt=&quot;Figure 1: ATM use case example&quot; src=&quot;./resources/im_uc.gif&quot; width=&quot;456&quot; />&#xD;
&lt;/p>&#xD;
&lt;blockquote dir=&quot;ltr&quot; style=&quot;MARGIN-RIGHT: 0px&quot;>&#xD;
&lt;blockquote dir=&quot;ltr&quot; style=&quot;MARGIN-RIGHT: 0px&quot;>&#xD;
&lt;blockquote dir=&quot;ltr&quot; style=&quot;MARGIN-RIGHT: 0px&quot;>&#xD;
&lt;blockquote dir=&quot;ltr&quot; style=&quot;MARGIN-RIGHT: 0px&quot;>&#xD;
&lt;p class=&quot;picturetext&quot;>&#xD;
Figure 1: ATM use case example.&#xD;
&lt;/p>&#xD;
&lt;/blockquote>&#xD;
&lt;/blockquote>&#xD;
&lt;/blockquote>&#xD;
&lt;/blockquote>&#xD;
&lt;p>&#xD;
In an automated teller machine illustrated in Figure 1, the Bank Customer can withdraw cash from an account, transfer&#xD;
funds between accounts, or deposit funds to an account. These correspond to specific goals that the actor has in using&#xD;
the system.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
Each use case is associated with a goal of one of the actors. The collection of use cases constitutes all the possible&#xD;
ways of using the system. You should be able to determine the goal of a use case simply by observing its name.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
A use case describes the interactions between the actor(s) and the system in the form of a dialog between the actor(s)&#xD;
and the system of the form:&#xD;
&lt;/p>&#xD;
&lt;ol>&#xD;
&lt;li>&#xD;
The actor &amp;lt;&amp;lt;does something&amp;gt;&amp;gt;&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
The system &amp;lt;&amp;lt;does something in response&amp;gt;&amp;gt;&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
The actor &amp;lt;&amp;lt;does something else&amp;gt;&amp;gt;&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
The system…&lt;br />&#xD;
&lt;/li>&#xD;
&lt;/ol>&#xD;
&lt;p>&#xD;
Each dialog of this form is called a “Flow of Events”.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
Since there are many flows of events possible for achieving the goal (for example, the flow may differ depending upon&#xD;
specific input from the actor), and there are situations in which the goal cannot be achieved (for example, a required&#xD;
network connection is currently unavailable), each use case will contain several flows, including one “Basic Flow of&#xD;
Events” and several “Alternative Flows”.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
The Basic Flow of Events specifies the interactions between the actor(s) and the system for the ideal case, where&#xD;
everything goes as planned, and the actor’s goal (the observable result of value) is met.&amp;nbsp; The basic flow&#xD;
represents the main capability provided by the system for this use case.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
As the name implies, Alternative Flows specify alternative interactions associated with the same goal.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
Closely related to use cases is the concept of a scenario.&amp;nbsp; A scenario is a &lt;strong>specific&lt;/strong> flow of&#xD;
events, for a &lt;strong>specific&lt;/strong> set of inputs to the system, states of the system, and states of the system’s&#xD;
environment.&amp;nbsp; Scenarios are closely related to test cases.&#xD;
&lt;/p>&#xD;
&lt;h3>&#xD;
Properties of Use Cases&#xD;
&lt;/h3>&#xD;
&lt;h4>&#xD;
&lt;a id=&quot;Name&quot; name=&quot;Name&quot;>Name&lt;/a>&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
Each use case should have a name that clearly describes the main goal of the use case. The name may have to be several&#xD;
words to be understood. Typically the name is a verb phrase, for example: Withdraw Cash. Note: No two use cases can&#xD;
have the same name.&#xD;
&lt;/p>&#xD;
&lt;h4>&#xD;
&lt;a id=&quot;Brief Description&quot; name=&quot;Brief Description&quot;>Brief Description&lt;/a>&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
The brief description of the use case should reflect its purpose.&amp;nbsp;&#xD;
&lt;/p>&#xD;
&lt;h4>&#xD;
&lt;a id=&quot;XE_use_case__flow_of_events&quot; name=&quot;XE_use_case__flow_of_events&quot;>&lt;/a>&lt;a id=&quot;XE_flow_of_events__guidelines_for&quot; name=&quot;XE_flow_of_events__guidelines_for&quot;>&lt;/a>&lt;a id=&quot;Flow of Events - Contents&quot; name=&quot;Flow of Events - Contents&quot;>Flow of&#xD;
Events - Contents&lt;/a>&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
The &lt;b>flow of events&lt;/b> should describe the interactions between the actor(s) and the system clearly enough for an&#xD;
outsider to easily understand. The flow of events should represent &lt;em>what&lt;/em> the system does, not &lt;em>how&lt;/em> the&#xD;
system is design to perform the required behavior.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
Follow these guidelines for the contents of the flow of events:&#xD;
&lt;/p>&#xD;
&lt;ul>&#xD;
&lt;li>&#xD;
Describe how the use case starts and ends.&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Describe what data is exchanged between the actor and the use case.&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Do not describe the details of the user interface, unless it is necessary to understand the behavior of the system.&#xD;
Specifying user interface details too early will limit design options.&amp;nbsp;&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Describe the flow of events, not only the functionality. To enforce this, start every action with &quot;When the actor&#xD;
... &quot;.&amp;nbsp;&amp;nbsp;&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Avoid vague terminology.&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Detail the flow of events. Specify what happens when, for each action. Remember this text will be used to identify&#xD;
test cases.&#xD;
&lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;p>&#xD;
If you have used certain terms in other use cases, be sure to use the exact same terms in this use case, and&#xD;
that&amp;nbsp;the meaning of the terms is consistent. To manage common terms, put them in a &lt;a class=&quot;elementLink&quot; href=&quot;./../../../openup/workproducts/glossary_5D300778.html&quot; guid=&quot;_Wn7HcNcEEdqz_d2XWoVt6Q&quot;>Glossary&lt;/a>.&#xD;
&lt;/p>&#xD;
&lt;h4>&#xD;
&lt;a id=&quot;Flow of Events - Structure&quot; name=&quot;Flow of Events - Structure&quot;>Flow of Events - Structure&lt;/a>&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
The two main parts of the flow of events are &lt;b>basic flow of events&lt;/b> and &lt;a id=&quot;XE_flow_of_events__alternative_flow&quot; name=&quot;XE_flow_of_events__alternative_flow&quot;>&lt;/a>&lt;b>alternative flows of&#xD;
events&lt;/b>. The basic flow of events should cover what &quot;normally&quot; happens when the use case is performed. The&#xD;
alternative flows of events cover behavior of optional or exceptional character in relation to the normal behavior, and&#xD;
also variations of the normal behavior. You can think of the alternative flows of events as detours from the basic flow&#xD;
of events, some of which will return to the basic flow of events and some of which will end the execution of the use&#xD;
case.&#xD;
&lt;/p>&#xD;
&lt;p align=&quot;center&quot;>&#xD;
&lt;img height=&quot;212&quot; alt=&quot;Diagram described in caption.&quot; src=&quot;./resources/ucstrct.gif&quot; width=&quot;231&quot; />&#xD;
&lt;/p>&#xD;
&lt;blockquote dir=&quot;ltr&quot; style=&quot;MARGIN-RIGHT: 0px&quot;>&#xD;
&lt;blockquote dir=&quot;ltr&quot; style=&quot;MARGIN-RIGHT: 0px&quot;>&#xD;
&lt;blockquote dir=&quot;ltr&quot; style=&quot;MARGIN-RIGHT: 0px&quot;>&#xD;
&lt;p class=&quot;picturetext&quot;>&#xD;
Figure 2: Typical structure of a use case flow of events&#xD;
&lt;/p>&#xD;
&lt;/blockquote>&#xD;
&lt;/blockquote>&#xD;
&lt;/blockquote>&#xD;
&lt;p class=&quot;picturetext&quot;>&#xD;
The straight arrow in Figure 2 represents the basic flow of events, and the curves represent alternative paths in&#xD;
relation to the normal. Some alternative paths return to the basic flow of events, whereas,&amp;nbsp;others end the use&#xD;
case.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
To clarify where an alternative flow of events fits in the structure, you need to describe the following for each&#xD;
detour to the basic flow of events:&#xD;
&lt;/p>&#xD;
&lt;ul>&#xD;
&lt;li>&#xD;
Where the alternative flow can be inserted in the basic flow of events.&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
The condition that needs to be fulfilled for the alternative behavior to start.&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
How and where the basic flow of events is resumed, or how the use case ends.&amp;nbsp;&amp;nbsp;&#xD;
&lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;p>&#xD;
It might be tempting, if the alternative flow of events is very simple, to just describe it in the basic flow of events&#xD;
section (using some informal &quot;if-then-else&quot; construct). This should be avoided. Too many alternatives will make the&#xD;
normal behavior difficult to see. Also, including alternative paths in the basic flow of events section will make the&#xD;
text more pseudo-code like and harder to read.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
Both the basic and alternative flows may be further structured into subflows. In doing this, your main goal should be&#xD;
readability of the text. A guideline is that a subflow should be a segment of behavior within the use case that has a&#xD;
clear purpose, and is &quot;atomic&quot; in the sense that you do either all or none of the actions described.&amp;nbsp;&#xD;
&lt;/p>&#xD;
&lt;h4>&#xD;
&lt;a id=&quot;XE_use_case__flow_of_events&quot; name=&quot;XE_use_case__flow_of_events&quot;>&lt;/a>&lt;a id=&quot;XE_flow_of_events__guidelines_for&quot; name=&quot;XE_flow_of_events__guidelines_for&quot;>&lt;/a>&lt;a id=&quot;Special Requirements&quot; name=&quot;Special Requirements&quot;>Special&#xD;
Requirements&lt;/a>&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
In the Special Requirements of a use case, you describe all the requirements on the use case that are not covered by&#xD;
the flow of events. These are typically non-functional requirements that will influence the design model. See also the&#xD;
discussion on non-functional requirements in &lt;a class=&quot;elementLinkWithType&quot; href=&quot;./../../../openup/guidances/concepts/requirements_8006414F.html&quot; guid=&quot;_0Wh-sMlgEdmt3adZL5Dmdw&quot;>Concept: Requirements&lt;/a>.&amp;nbsp;&#xD;
&lt;/p>&#xD;
&lt;h4>&#xD;
&lt;a id=&quot;XE_postcondition__guidelines_for&quot; name=&quot;XE_postcondition__guidelines_for&quot;>&lt;/a>&lt;a id=&quot;XE_precondition__guidelines_for&quot; name=&quot;XE_precondition__guidelines_for&quot;>&lt;/a>&lt;a id=&quot;preconditions and Postconditions&quot; name=&quot;preconditions and Postconditions&quot;>Preconditions and Post-conditions&lt;/a>&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
A precondition is the state of the system and its surroundings that is required before the use case can be&#xD;
started.&amp;nbsp;Post-Conditions are&amp;nbsp;the states the system can be in after the use case has ended. It can&#xD;
be&amp;nbsp;helpful to use the&amp;nbsp;concepts of precondition and post-condition to clarify how the flow of events starts&#xD;
and ends. However, only use them only if the audience for the description of the use case agrees that it is helpful.&#xD;
&lt;/p>&#xD;
&lt;p align=&quot;center&quot;>&#xD;
&lt;img height=&quot;278&quot; alt=&quot;Diagram described in caption.&quot; src=&quot;./resources/ucprepst.gif&quot; width=&quot;344&quot; />&#xD;
&lt;/p>&lt;br class=&quot;picturetext&quot; />&#xD;
&lt;br />&#xD;
&lt;blockquote dir=&quot;ltr&quot; style=&quot;MARGIN-RIGHT: 0px&quot;>&#xD;
&lt;blockquote dir=&quot;ltr&quot; style=&quot;MARGIN-RIGHT: 0px&quot;>&#xD;
&lt;blockquote dir=&quot;ltr&quot; style=&quot;MARGIN-RIGHT: 0px&quot;>&#xD;
&lt;p>&#xD;
Figure 3: Illustration of preconditions and resulting post-conditions&#xD;
&lt;/p>&#xD;
&lt;/blockquote>&#xD;
&lt;/blockquote>&#xD;
&lt;/blockquote>&#xD;
&lt;blockquote dir=&quot;ltr&quot; style=&quot;MARGIN-RIGHT: 0px&quot;>&#xD;
&lt;p class=&quot;exampleheading&quot;>&#xD;
Examples&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;example&quot;>&#xD;
&lt;strong>A precondition for the use case Cash Withdrawal in the ATM machine:&lt;/strong> The customer has a personally&#xD;
issued card that fits in the card reader, has been issued a PIN number, and is registered with the banking system.&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;example&quot;>&#xD;
&lt;strong>A post-condition for the use case Cash Withdrawal in the ATM machine:&lt;/strong> At the end of the use case,&#xD;
all account and transaction logs are balanced, communication with the banking system is reinitialized and the card&#xD;
is returned to the customer.&amp;nbsp;&amp;nbsp;&#xD;
&lt;/p>&#xD;
&lt;/blockquote>&#xD;
&lt;h3>&#xD;
Level of detail necessary in use cases&#xD;
&lt;/h3>&#xD;
&lt;p>&#xD;
There will often be use cases in your model that are so simple that they do not need a detailed structured description&#xD;
of the use case, a step-by-step outline is quite enough. The criteria for making this decision is that you don't see&#xD;
disagreement among different readers on what the use case means, and that designers and testers are comfortable with&#xD;
the level of detail provided by the step-by-step format. Examples are use cases that describe simple entry or retrieval&#xD;
of some data from the system.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
For more information on possible formats and level of detail captured for each use case see &lt;a class=&quot;elementLinkWithType&quot; href=&quot;./../../../openup/guidances/guidelines/use_case_formats_FF4AE425.html&quot; guid=&quot;_qq0GMAXkEduj_7BEUj1JfQ&quot;>Guideline: Use Case Formats&lt;/a>.&#xD;
&lt;/p>&#xD;
&lt;h3>&#xD;
Example &lt;a id=&quot;The Scope of a Use Case&quot; name=&quot;The Scope of a Use Case&quot;>Use Case&lt;/a>&#xD;
&lt;/h3>&#xD;
&lt;p>&#xD;
For an example of a completed use-case specification see &lt;a class=&quot;elementLinkWithType&quot; href=&quot;./../../../openup/guidances/examples/use_case_spec_CD5DD9B1.html&quot; guid=&quot;_JLOiIMNvEdu2IdAIaWZyAw&quot;>Example: Use-Case Specification&lt;/a>.&#xD;
&lt;/p></mainDescription>
</org.eclipse.epf.uma:ContentDescription>