blob: 94934305ba277fc20a84336468d805204234d90f [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="-78ko4CuOJERKJF9ZvwMUBQ"
name="detail_ucs_and_scenarios,_4BJ_YCxSEdqjsdw1QLH_6Q" guid="-78ko4CuOJERKJF9ZvwMUBQ"
changeDate="2007-07-18T12:11:58.614-0700" version="1.0.0">
<mainDescription>&lt;h3>&#xD;
Most efficient way to write use cases&#xD;
&lt;/h3>&#xD;
&lt;p>&#xD;
Because use cases model requirements, they are highly dynamic by nature. The more we examine a scenario, the more we&#xD;
learn and the more things change. To further complicate the issue, changes to one use case can lead to changes in&#xD;
others. Therefore, we want a flexible, highly efficient method for writing use cases that maximizes stakeholder value&#xD;
and minimizes risk early in the project and minimizes costly rework later.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
An iterative, breadth-before-depth approach is best. This breadth-first approach involves two aspects: finding and&#xD;
outlining use cases and detailing individual use cases.&#xD;
&lt;/p>&#xD;
&lt;h4>&#xD;
Finding and outlining use cases&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
Use cases exist in sets, and the relationships between the various use cases and Actors are important. As you learn&#xD;
more about the Actors, you also learn more about the system's boundaries and transactions. Likewise, as you learn more&#xD;
about the system's transactions, you learn more about its Actors. Therefore, it is more efficient to capture and&#xD;
outline the primary use cases before detailing individual use cases. This way, you can identify and understand the&#xD;
importance and risk associated with each use case before committing time to detailing them.&amp;nbsp; This aspect of the&#xD;
breadth-before-depth approach is embodied in the process by the explicit separation of two tasks &lt;a class=&quot;elementLink&quot; href=&quot;./../../../openup/tasks/find_and_outline_requirements_90D272B9.html&quot; guid=&quot;_P9cMUPV_EdmdHa9MmVPgqQ&quot;>Find and Outline Requirements&lt;/a>&amp;nbsp;and &lt;a class=&quot;elementLink&quot; href=&quot;./../../../openup/tasks/detail_requirements_9747F71E.html&quot; guid=&quot;_0e1mIMlgEdmt3adZL5Dmdw&quot;>Detail Requirements&lt;/a>.&amp;nbsp;&#xD;
&lt;/p>&#xD;
&lt;h4>&#xD;
Detailing individual use cases&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
Similarly, it makes sense to write each individual use case iteratively. Start by detailing the main scenario.&amp;nbsp; As&#xD;
you do this, you can identify various alternative and error flows that the use case might follow, and then evaluate,&#xD;
rearrange, or eliminate them and prioritize them before detailing the surviving scenarios, so you can focus your effort&#xD;
in the right place.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
The level of detail that you capture depends on several factors. 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> for guidance on selecting the correct format for your use cases.&#xD;
&lt;/p>&#xD;
&lt;h5>&#xD;
Detail the basic flow of events (main scenario)&#xD;
&lt;/h5>&#xD;
&lt;p>&#xD;
As a starting point, use the step-by-step description of the main scenario that you created during &lt;a class=&quot;elementLinkWithType&quot; href=&quot;./../../../openup/tasks/find_and_outline_requirements_90D272B9.html&quot; guid=&quot;_P9cMUPV_EdmdHa9MmVPgqQ&quot;>Task: Find and Outline Requirements&lt;/a>. Then, gradually add details to this scenario,&#xD;
describing &lt;strong>what&lt;/strong> the use case does, &lt;strong>not how&lt;/strong> to solve problems internal to the system.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
A flow of events description covers:&#xD;
&lt;/p>&#xD;
&lt;ul>&#xD;
&lt;li>&#xD;
How and when the use case starts&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
When the use case interacts with the Actors and what data they exchange&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
When the use case uses data stored in the system or stores data in the system&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
How and when the use case ends&#xD;
&lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;p>&#xD;
It does not describe:&#xD;
&lt;/p>&#xD;
&lt;ul>&#xD;
&lt;li>&#xD;
The GUI&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Technical details of hardware or software&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Design issues&#xD;
&lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;p>&#xD;
Describe the flow of events for the main scenario in the form:&#xD;
&lt;/p>&#xD;
&lt;ol>&#xD;
&lt;li>&#xD;
The use case starts when &amp;lt;Actor name&amp;gt; &amp;lt;does something&amp;gt;.&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
The system &amp;lt;does something in response&amp;gt;.&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
The &amp;lt;Actor name&amp;gt; does something else.&#xD;
&lt;/li>&#xD;
&lt;/ol>&#xD;
&lt;p>&#xD;
See Section 4 of&amp;nbsp;&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> for a sample completed basic flow.&#xD;
&lt;/p>&#xD;
&lt;h5>&#xD;
Detail alternate flows&#xD;
&lt;/h5>&#xD;
&lt;p>&#xD;
A use case consists of a number of scenarios, each representing specific instances of the use case that correspond to&#xD;
specific inputs from the Actor or to specific conditions in the environment. Each scenario describes alternate ways&#xD;
that the system behaves, or it may describe failure or exception cases.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
Review the list of alternative flows that you captured during &lt;a class=&quot;elementLinkWithType&quot; href=&quot;./../../../openup/tasks/find_and_outline_requirements_90D272B9.html&quot; guid=&quot;_P9cMUPV_EdmdHa9MmVPgqQ&quot;>Task: Find and Outline Requirements&lt;/a>. As you detail the main scenario, you may identify additional alternate flows by asking these&#xD;
questions:&#xD;
&lt;/p>&#xD;
&lt;ul>&#xD;
&lt;li>&#xD;
Are there different options available, depending on input from the Actor? (Example: If the Actor enters an invalid&#xD;
PIN number while accessing an ATM.)&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
What business rules may come into play? (Example: The Actor requests more money from the ATM than is available in&#xD;
her account.)&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
What could go wrong? (Example: No network connection available when required to perform a transaction.)&#xD;
&lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;p>&#xD;
It is best to develop these scenarios iteratively, as well.&#xD;
&lt;/p>&#xD;
&lt;ol>&#xD;
&lt;li>&#xD;
Begin by identifying them.&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Examine each possible scenario to determine whether it is relevant, that it can actually happen, and that it is&#xD;
distinct from other scenarios.&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Eliminate redundant or unnecessary scenarios.&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Prioritize the remaining scenarios and start detailing the more important ones.&#xD;
&lt;/li>&#xD;
&lt;/ol>&#xD;
&lt;p>&#xD;
In addition to the detailing the flow of events of each alternative flow in the form described above, each alternative&#xD;
flow should describe:&#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&#xD;
&lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;p>&#xD;
See Section 5 of&amp;nbsp;&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> for examples of completed alternative flows.&#xD;
&lt;/p>&#xD;
&lt;h4>&#xD;
Structure the use case&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
It is useful to structure the use case according to scenarios. This helps both to simplify communication and&#xD;
maintenance and to permit the use cases to be implemented iteratively. Name and describe each key scenario so that&#xD;
these may be prioritized, assigned to an iteration and an individual, and referenced from the&amp;nbsp;&lt;a class=&quot;elementLink&quot; href=&quot;./../../../openup/workproducts/work_items_list_39D03CC8.html&quot; guid=&quot;_rGNWsCbSEdqh1LYUOGRh2A&quot;>Work Items List&lt;/a> for implementation.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
In addition to structuring the use cases according to scenarios, it is often useful to structure the scenarios&#xD;
themselves into subflows. This provides an additional level of granularity for planning work and tracking progress.&#xD;
Unless a subflow involves only a minor part of the complete flow of events (which can be described in the body of the&#xD;
text), describe each subflow in a separate section of the Flow of Events section. Subflows that should be in a separate&#xD;
section include these examples:&#xD;
&lt;/p>&#xD;
&lt;ul>&#xD;
&lt;li>&#xD;
Subflows that occupy a large segment of a given flow of events.&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Exceptional and alternative flows of events. This helps the use case's basic flow of events to stand out more&#xD;
clearly.&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Any subflow that can be run at several intervals in the same flow of events.&#xD;
&lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;p>&#xD;
If there are subflows identified that are common to multiple use cases, you can re-factor your use-case model to&#xD;
include these. See&amp;nbsp;&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> for more information on the &amp;lt;&amp;lt;include&amp;gt;&amp;gt;&#xD;
dependency.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
For more information on structuring the use case, see the &quot;Flow of Events - Structure&quot; section&amp;nbsp;in &lt;a class=&quot;elementLinkWithType&quot; href=&quot;./../../../openup/guidances/concepts/use_case_BB199D1B.html&quot; guid=&quot;_KudM0NcJEdqz_d2XWoVt6Q&quot;>Concept: Use Case&lt;/a>.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
The&amp;nbsp;&lt;a class=&quot;elementLinkWithType&quot; href=&quot;./../../../openup/guidances/templates/uc_specification_E97E98B0.html&quot; guid=&quot;_0cpNwMlgEdmt3adZL5Dmdw&quot;>Template: Use-Case Specification&lt;/a> provides a suggested structure for the use case&#xD;
specification. See&amp;nbsp;&lt;a class=&quot;elementLinkWithType&quot; href=&quot;./../../../openup/guidances/examples/uc_model_evolve_960F136B.html&quot; guid=&quot;_t4QdAMNqEdu2IdAIaWZyAw&quot;>Example: Evolution of the Use-Case Model&lt;/a> and&amp;nbsp;&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> for examples of structuring the use-case model and use case specifications, respectively.&#xD;
&lt;/p>&#xD;
&lt;h4>&#xD;
Detail special requirements&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
Be sure to also capture any requirements that are related to the use case but are not taken into consideration in the&#xD;
flow of events of the use case.&amp;nbsp;These requirements include business rules, design constraints, usability&#xD;
requirements, performance requirements, reliability requirements, supportability requirements, and interface&#xD;
requirements. These requirements all influence the implementation and associated cost as much as the flow of events.&#xD;
Therefore, they must be agreed upon and prioritized.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
Typically, nonfunctional requirements that refer to a specific use case are captured in the Special Requirements&#xD;
section of the use case. For more information, see the &quot;Special Requirements&quot; section in &lt;a class=&quot;elementLinkWithType&quot; href=&quot;./../../../openup/guidances/concepts/use_case_BB199D1B.html&quot; guid=&quot;_KudM0NcJEdqz_d2XWoVt6Q&quot;>Concept: Use Case&lt;/a>.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
If there are nonfunctional requirements that apply to more than one use case, capture these in the &lt;a class=&quot;elementLinkWithType&quot; href=&quot;./../../../openup/workproducts/supporting_requirements_spec_7D9DD47C.html&quot; guid=&quot;_BVh9cL-CEdqb7N6KIeDL8Q&quot;>Artifact: Supporting Requirements Specification&lt;/a>. For more information on supporting&#xD;
requirements, see &lt;a class=&quot;elementLinkWithType&quot; href=&quot;./../../../openup/guidances/concepts/supporting_requirements_B2C4D610.html&quot; guid=&quot;_VXZ5wO0IEdqHTdbLTmC5IQ&quot;>Concept: Supporting Requirements&lt;/a>.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
For guidance in writing clear, concise, unambiguous special and supporting requirements, see&amp;nbsp;guidelines &lt;a class=&quot;elementLink&quot; href=&quot;./../../../openup/guidances/guidelines/writing_good_requirements_48248536.html&quot; guid=&quot;_6jXzYNcKEdqz_d2XWoVt6Q&quot;>Writing Good Requirements&lt;/a>&amp;nbsp;and &lt;a class=&quot;elementLink&quot; href=&quot;./../../../openup/guidances/guidelines/requirement_pitfalls_14EE9652.html&quot; guid=&quot;_1AOsMO0JEdqHTdbLTmC5IQ&quot;>Requirement Pitfalls&lt;/a>.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
See Section 8 of&amp;nbsp;&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> for examples of special requirements.&#xD;
&lt;/p>&#xD;
&lt;h4>&#xD;
Describe preconditions and post-conditions&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
A &lt;strong>precondition&lt;/strong> of a use case explains the state that the system must be in for the use case to be able&#xD;
to start. Be careful in describing the system state. Avoid describing the detail of other, incidental activities that&#xD;
may already have taken place.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
A &lt;strong>post-condition&lt;/strong> of a use case lists possible states that the system can be in after the use case&#xD;
runs. The system must be in one of those states. A post-condition also states actions that the system performs at the&#xD;
end of the use case, regardless of what occurred in the use case. Post-conditions may be categorized as Minimal&#xD;
Guarantees&amp;nbsp;or Success Guarantees:&#xD;
&lt;/p>&#xD;
&lt;ul>&#xD;
&lt;li>&#xD;
&lt;b>Minimal Guarantees&lt;/b> represent conditions that will be true when the use cases end, regardless of how they&#xD;
terminate.&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
&lt;b>Success Guarantees&lt;/b> represent condition that will be true when the use cases end successfully, regardless of&#xD;
which paths they took.&#xD;
&lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;p>&#xD;
Consider the following when specifying preconditions and post-condition:&#xD;
&lt;/p>&#xD;
&lt;ul>&#xD;
&lt;li>&#xD;
The states described by pre- or post-conditions should be states that the user can observe. &quot;The user has logged on&#xD;
to the system&quot; or &quot;The user has opened the document&quot; are examples of observable states.&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
A precondition is a constraint on when a use case can start. It is not the event that starts the use case.&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
A precondition for a use case is not a precondition for only one subflow, although you can define preconditions and&#xD;
post-conditions at the subflow level.&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
A post-condition for a use case should be true regardless of which alternative flows were executed; it should not&#xD;
be true only for the main flow. If something could fail, you would cover that in the post-condition by saying &quot;The&#xD;
action has completed,&quot; or if something failed, &quot;The action was not performed,&quot; rather than just &quot;The action is&#xD;
completed.&quot;&amp;nbsp;&#xD;
&lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;p>&#xD;
For more information, see the &quot;Preconditions Post-conditions&quot; section in &lt;a class=&quot;elementLinkWithType&quot; href=&quot;./../../../openup/guidances/concepts/use_case_BB199D1B.html&quot; guid=&quot;_KudM0NcJEdqz_d2XWoVt6Q&quot;>Concept: Use Case&lt;/a>.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
See Section 7 of&amp;nbsp;&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> for example pre- and post-conditions.&#xD;
&lt;/p></mainDescription>
</org.eclipse.epf.uma:ContentDescription>