<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: How To Write Use Case Preconditions and Triggers</title>
	<atom:link href="http://tynerblain.com/blog/2007/03/08/use-case-preconditions-and-triggers/feed/" rel="self" type="application/rss+xml" />
	<link>http://tynerblain.com/blog/2007/03/08/use-case-preconditions-and-triggers/</link>
	<description>Software product success.</description>
	<lastBuildDate>Tue, 22 May 2012 20:46:27 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
	<item>
		<title>By: Hai Ly-Hoang</title>
		<link>http://tynerblain.com/blog/2007/03/08/use-case-preconditions-and-triggers/comment-page-1/#comment-88571</link>
		<dc:creator>Hai Ly-Hoang</dc:creator>
		<pubDate>Tue, 17 Apr 2007 10:24:21 +0000</pubDate>
		<guid isPermaLink="false">http://tynerblain.com/blog/2007/03/08/use-case-preconditions-and-triggers/#comment-88571</guid>
		<description>Hi,

In addition to Precondition, Some UML book also mention about Postcondition. It make me a little bit confusion about how to use Postcondition. Can you give me some example about PostCondition

Thank in advance.</description>
		<content:encoded><![CDATA[<p>Hi,</p>
<p>In addition to Precondition, Some UML book also mention about Postcondition. It make me a little bit confusion about how to use Postcondition. Can you give me some example about PostCondition</p>
<p>Thank in advance.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Hai Ly-Hoang</title>
		<link>http://tynerblain.com/blog/2007/03/08/use-case-preconditions-and-triggers/comment-page-1/#comment-88570</link>
		<dc:creator>Hai Ly-Hoang</dc:creator>
		<pubDate>Tue, 17 Apr 2007 10:20:36 +0000</pubDate>
		<guid isPermaLink="false">http://tynerblain.com/blog/2007/03/08/use-case-preconditions-and-triggers/#comment-88570</guid>
		<description>Hi,

Your suggestion of the trigger is:
    * Existing customer calls to request an appointment.
    * Actor identifies that a customer is due for their next appointment.
I wonder whether we should include those events in the use-case specification. To develop our software, all we need to know is that sometimes the actor will use our Scheduling use-case. That’s enough. We needn&#039;t worry and should not worry about the real-life situation that lead the actor to intiate the use-case. The reason is simple, we cannot/ hardly imagine all of the real-life situations. Maybe, the customer call officer (by phone)/ email or visit face-to-face the officer. Maybe, the technician request a visit (on behalf of the customer…).
Sometimes, some types of trigger are important (eg. a stimulous from sensor, a package from network, receive a message/email….). However, real-life situation trigger like your use-case seems to be not necessary. How about your idea?

I read some UML book. When talking about extension of use-case, the authors usually mention about 2 types of relationship between use-case: include and extend. Use-case extension is good for re-use (save some time for documenting the use-case specification). However, I wonder why should we make a difference between include &amp; extend relationship? It is so meticulous and why don’t we focus on it in design phase in some diagram like activity diagram or sequence diagram? 

Hope to hear from you all

Hai Ly-Hoang</description>
		<content:encoded><![CDATA[<p>Hi,</p>
<p>Your suggestion of the trigger is:<br />
    * Existing customer calls to request an appointment.<br />
    * Actor identifies that a customer is due for their next appointment.<br />
I wonder whether we should include those events in the use-case specification. To develop our software, all we need to know is that sometimes the actor will use our Scheduling use-case. That’s enough. We needn&#8217;t worry and should not worry about the real-life situation that lead the actor to intiate the use-case. The reason is simple, we cannot/ hardly imagine all of the real-life situations. Maybe, the customer call officer (by phone)/ email or visit face-to-face the officer. Maybe, the technician request a visit (on behalf of the customer…).<br />
Sometimes, some types of trigger are important (eg. a stimulous from sensor, a package from network, receive a message/email….). However, real-life situation trigger like your use-case seems to be not necessary. How about your idea?</p>
<p>I read some UML book. When talking about extension of use-case, the authors usually mention about 2 types of relationship between use-case: include and extend. Use-case extension is good for re-use (save some time for documenting the use-case specification). However, I wonder why should we make a difference between include &amp; extend relationship? It is so meticulous and why don’t we focus on it in design phase in some diagram like activity diagram or sequence diagram? </p>
<p>Hope to hear from you all</p>
<p>Hai Ly-Hoang</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Bas van Gils</title>
		<link>http://tynerblain.com/blog/2007/03/08/use-case-preconditions-and-triggers/comment-page-1/#comment-78535</link>
		<dc:creator>Bas van Gils</dc:creator>
		<pubDate>Mon, 12 Mar 2007 10:23:57 +0000</pubDate>
		<guid isPermaLink="false">http://tynerblain.com/blog/2007/03/08/use-case-preconditions-and-triggers/#comment-78535</guid>
		<description>Hi all,

I&#039;ve been writing usecases for a number of years... I have no strong preference for using either extensions or alternative flows *from a writing point of view*. In my experience, using extensions (Rather than alternative flows) makes the usecases easier to read for people not familiar with the UC technique. That, for me, is sufficient reason to use extensions.

Just my five cents

P.S. I really like the book by Cockburn. It is one of the most complete discussions on the topic of usecases so perhaps my comment is slightly biased..</description>
		<content:encoded><![CDATA[<p>Hi all,</p>
<p>I&#8217;ve been writing usecases for a number of years&#8230; I have no strong preference for using either extensions or alternative flows *from a writing point of view*. In my experience, using extensions (Rather than alternative flows) makes the usecases easier to read for people not familiar with the UC technique. That, for me, is sufficient reason to use extensions.</p>
<p>Just my five cents</p>
<p>P.S. I really like the book by Cockburn. It is one of the most complete discussions on the topic of usecases so perhaps my comment is slightly biased..</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Scott Sehlhorst</title>
		<link>http://tynerblain.com/blog/2007/03/08/use-case-preconditions-and-triggers/comment-page-1/#comment-78086</link>
		<dc:creator>Scott Sehlhorst</dc:creator>
		<pubDate>Sat, 10 Mar 2007 17:12:30 +0000</pubDate>
		<guid isPermaLink="false">http://tynerblain.com/blog/2007/03/08/use-case-preconditions-and-triggers/#comment-78086</guid>
		<description>Hey Harry, thanks for commenting, and long term reading!

You make really good points about extensions versus alternates.  I&#039;ve always used alternates in the past, but Cockburn suggests extensions.  I think you&#039;ve convinced me that alternates are better.  What do other folks think about alternates versus extensions?

As to preconditions for subordinate use cases - I think the power of subordinate use cases comes from encapsulation and reuse.  With that approach in mind, a subordinate use case is just another use case that happens to be reused.  And therefore should have preconditions - allowing it to be reused from within multiple other use cases.</description>
		<content:encoded><![CDATA[<p>Hey Harry, thanks for commenting, and long term reading!</p>
<p>You make really good points about extensions versus alternates.  I&#8217;ve always used alternates in the past, but Cockburn suggests extensions.  I think you&#8217;ve convinced me that alternates are better.  What do other folks think about alternates versus extensions?</p>
<p>As to preconditions for subordinate use cases &#8211; I think the power of subordinate use cases comes from encapsulation and reuse.  With that approach in mind, a subordinate use case is just another use case that happens to be reused.  And therefore should have preconditions &#8211; allowing it to be reused from within multiple other use cases.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Harry Nieboer</title>
		<link>http://tynerblain.com/blog/2007/03/08/use-case-preconditions-and-triggers/comment-page-1/#comment-77824</link>
		<dc:creator>Harry Nieboer</dc:creator>
		<pubDate>Fri, 09 Mar 2007 23:20:09 +0000</pubDate>
		<guid isPermaLink="false">http://tynerblain.com/blog/2007/03/08/use-case-preconditions-and-triggers/#comment-77824</guid>
		<description>I have several comments on this Use Case, as I am used to write them somewhat differently. Let me explain what I do different and how I jumped to the conclusion to do it different.

Comment 1: the first precondition is superfluous, as it is already stated that the actor of this Use Case is the office worker, whose work it is to schedule exterminator visits to customers.
This precondition can be modeled more elegant by specifying the actor in the Use case in stead of saying &quot;Actor&quot;. I normally put the Actor names in Italics in my Use Cases.

Comment 2: use alternative flows in stead of extensions.
Almost every Use Case has alternative flows, so don&#039;t introduce another mechanism (extensions) when alternative flows can handle the situation.

Schedule Exterminator Visit To Customer

1. The Office worker verifies customer is an existing customer.
2. The Office worker retrieves customer records.
3. The Office worker requests available times for a technician visit.
4. System presents available times for a technician visit.
5. The Office worker and customer select an acceptable time from the list of available times.
6. The Office worker adds visit time and location to technician’s schedule.
7. System confirms that appointment has been scheduled.
8. The Office worker confirms the appointment with the customer.

Alternative flows

A1.1 New customer
When the Actor determines that the customer is NOT an existing customer, 
the Actor adds a new customer record including the customers location.
Continue at step 2.

Comment 3: &quot;Actor adds visit time and location to technician’s schedule&quot; is not a Use Case, as it does not represent a complete User&#039;s goal, it is only a step in it.

&quot;Add visit time and location&quot; could be a subflow of this use case. Use subflows to prevent the main flow from becoming too complex. Subflows, in my opinion, should NEVER have preconditions.
The reader of the Use Case should be able to first understand the mainflow, and after that delve deeper into the subflows.
In order to be able to understand the mainflow, the reader should know about the preconditions for the subflow while reading the mainflow.

So insteat of:
Flow:

4.  Step ...
5.  Step ... (see subflow S)
6.  Step ...

Subflow S
Precondition: some condition you might think of DOES hold

Step
Step
Step

I prefer:

4. Step ...
5. The  verifies that some condition you might think of DOES hold
6. Step ...

Alternative flows
A5.1  If some condition you might think of DOES NOT hold
Continue at step ...

Again: use the construct &quot;Alternative flows&quot; which we use already.

Hope to hear from you all.</description>
		<content:encoded><![CDATA[<p>I have several comments on this Use Case, as I am used to write them somewhat differently. Let me explain what I do different and how I jumped to the conclusion to do it different.</p>
<p>Comment 1: the first precondition is superfluous, as it is already stated that the actor of this Use Case is the office worker, whose work it is to schedule exterminator visits to customers.<br />
This precondition can be modeled more elegant by specifying the actor in the Use case in stead of saying &#8220;Actor&#8221;. I normally put the Actor names in Italics in my Use Cases.</p>
<p>Comment 2: use alternative flows in stead of extensions.<br />
Almost every Use Case has alternative flows, so don&#8217;t introduce another mechanism (extensions) when alternative flows can handle the situation.</p>
<p>Schedule Exterminator Visit To Customer</p>
<p>1. The Office worker verifies customer is an existing customer.<br />
2. The Office worker retrieves customer records.<br />
3. The Office worker requests available times for a technician visit.<br />
4. System presents available times for a technician visit.<br />
5. The Office worker and customer select an acceptable time from the list of available times.<br />
6. The Office worker adds visit time and location to technician’s schedule.<br />
7. System confirms that appointment has been scheduled.<br />
8. The Office worker confirms the appointment with the customer.</p>
<p>Alternative flows</p>
<p>A1.1 New customer<br />
When the Actor determines that the customer is NOT an existing customer,<br />
the Actor adds a new customer record including the customers location.<br />
Continue at step 2.</p>
<p>Comment 3: &#8220;Actor adds visit time and location to technician’s schedule&#8221; is not a Use Case, as it does not represent a complete User&#8217;s goal, it is only a step in it.</p>
<p>&#8220;Add visit time and location&#8221; could be a subflow of this use case. Use subflows to prevent the main flow from becoming too complex. Subflows, in my opinion, should NEVER have preconditions.<br />
The reader of the Use Case should be able to first understand the mainflow, and after that delve deeper into the subflows.<br />
In order to be able to understand the mainflow, the reader should know about the preconditions for the subflow while reading the mainflow.</p>
<p>So insteat of:<br />
Flow:</p>
<p>4.  Step &#8230;<br />
5.  Step &#8230; (see subflow S)<br />
6.  Step &#8230;</p>
<p>Subflow S<br />
Precondition: some condition you might think of DOES hold</p>
<p>Step<br />
Step<br />
Step</p>
<p>I prefer:</p>
<p>4. Step &#8230;<br />
5. The  verifies that some condition you might think of DOES hold<br />
6. Step &#8230;</p>
<p>Alternative flows<br />
A5.1  If some condition you might think of DOES NOT hold<br />
Continue at step &#8230;</p>
<p>Again: use the construct &#8220;Alternative flows&#8221; which we use already.</p>
<p>Hope to hear from you all.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Scott Sehlhorst</title>
		<link>http://tynerblain.com/blog/2007/03/08/use-case-preconditions-and-triggers/comment-page-1/#comment-77723</link>
		<dc:creator>Scott Sehlhorst</dc:creator>
		<pubDate>Fri, 09 Mar 2007 16:10:23 +0000</pubDate>
		<guid isPermaLink="false">http://tynerblain.com/blog/2007/03/08/use-case-preconditions-and-triggers/#comment-77723</guid>
		<description>Thanks &quot;knowing person&quot; - major typo on my part.  If you look at the earlier article, I described it as &quot;Retrieve&quot;, which is synonymous with READ.

I&#039;m updating this article so as to not distract other readers (and keeping these comments as history).  Thanks for catching it.

The point I was making (in both articles that reference CRUD) is that there are elements of software development that many (but not all) people take to be &quot;understood.&quot;  It raises interesting debates about how to document and approach them when writing requirements.

By analogy - if you set up a database, of course you need to be able to &lt;em&gt;retrieve&lt;/em&gt; a record.  If you have a secure website, of course the user has to be logged in.

There are cases in both domains where you absolutely must specify this stuff.
&lt;ul&gt;
	&lt;li&gt;Database - you are not using auto-increment functions to generate unique ids; you have concurrency;  you need to apply a locking strategy to prevent multiple people from creating multiple records with the same &quot;unique&quot; id.&lt;/li&gt;
	&lt;li&gt;User ACL - you support role-based authorization/variation for viewing of data, access to pages, and validation of fields on entry.  And you expose an API (perhaps as an SOA service provider).&lt;/li&gt;
&lt;/ul&gt;
But there are also cases where the effort to document &quot;understood&quot; levels of detail provides little return.</description>
		<content:encoded><![CDATA[<p>Thanks &#8220;knowing person&#8221; &#8211; major typo on my part.  If you look at the earlier article, I described it as &#8220;Retrieve&#8221;, which is synonymous with READ.</p>
<p>I&#8217;m updating this article so as to not distract other readers (and keeping these comments as history).  Thanks for catching it.</p>
<p>The point I was making (in both articles that reference CRUD) is that there are elements of software development that many (but not all) people take to be &#8220;understood.&#8221;  It raises interesting debates about how to document and approach them when writing requirements.</p>
<p>By analogy &#8211; if you set up a database, of course you need to be able to <em>retrieve</em> a record.  If you have a secure website, of course the user has to be logged in.</p>
<p>There are cases in both domains where you absolutely must specify this stuff.</p>
<ul>
<li>Database &#8211; you are not using auto-increment functions to generate unique ids; you have concurrency;  you need to apply a locking strategy to prevent multiple people from creating multiple records with the same &#8220;unique&#8221; id.</li>
<li>User ACL &#8211; you support role-based authorization/variation for viewing of data, access to pages, and validation of fields on entry.  And you expose an API (perhaps as an SOA service provider).</li>
</ul>
<p>But there are also cases where the effort to document &#8220;understood&#8221; levels of detail provides little return.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: knowing person</title>
		<link>http://tynerblain.com/blog/2007/03/08/use-case-preconditions-and-triggers/comment-page-1/#comment-77718</link>
		<dc:creator>knowing person</dc:creator>
		<pubDate>Fri, 09 Mar 2007 15:49:18 +0000</pubDate>
		<guid isPermaLink="false">http://tynerblain.com/blog/2007/03/08/use-case-preconditions-and-triggers/#comment-77718</guid>
		<description>I question the expertise of this author since he lacks the basic understand of the CRUD acronym which has been known for decades if not longer. His statement of &quot;replace&quot; is 100% incorrect. C-R-U-D are the four basic transactions or actions that can be performed on any data. Create, READ, Update, Delete. His &quot;replace&quot; is synonymous with &quot;update&quot; in a database and is totally wrong. Also his supposed explanation on CRUD and preconditions is off base.</description>
		<content:encoded><![CDATA[<p>I question the expertise of this author since he lacks the basic understand of the CRUD acronym which has been known for decades if not longer. His statement of &#8220;replace&#8221; is 100% incorrect. C-R-U-D are the four basic transactions or actions that can be performed on any data. Create, READ, Update, Delete. His &#8220;replace&#8221; is synonymous with &#8220;update&#8221; in a database and is totally wrong. Also his supposed explanation on CRUD and preconditions is off base.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

