<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Shimon Krokhmal's blog - Development process</title>
    <link>http://www.krokhmal.com/</link>
    <description>medium : .NET | JavaScript | Secure coding | Databases | Sql Server | Oracle | CodeSmith | SPS | Life</description>
    <language>en-us</language>
    <copyright>Shimon Krokhmal</copyright>
    <lastBuildDate>Tue, 01 Jul 2008 13:16:38 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.0.7226.0</generator>
    <managingEditor>Shimonkr@gmail.com</managingEditor>
    <webMaster>Shimonkr@gmail.com</webMaster>
    <item>
      <trackback:ping>http://www.krokhmal.com/Trackback.aspx?guid=a3972569-2fd2-4989-8f1b-5a5831512e45</trackback:ping>
      <pingback:server>http://www.krokhmal.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.krokhmal.com/PermaLink,guid,a3972569-2fd2-4989-8f1b-5a5831512e45.aspx</pingback:target>
      <dc:creator>Shimon krokhmal</dc:creator>
      <wfw:comment>http://www.krokhmal.com/CommentView,guid,a3972569-2fd2-4989-8f1b-5a5831512e45.aspx</wfw:comment>
      <wfw:commentRss>http://www.krokhmal.com/SyndicationService.asmx/GetEntryCommentsRss?guid=a3972569-2fd2-4989-8f1b-5a5831512e45</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I have finally started to build a CI server for our project.<br />
during the process, i've examined several build tools and CI servers, such as: CruiseControl\CroiseControl.Net,
Ant\nAnt and MSBuild.<br />
these tools have proven themselves enough (just google it..), but one thing similar
to all of them was the huge amount of XML configurations that needed to be done in
order to get you started.<br />
after a short chat with <a href="http://blogs.microsoft.co.il/blogs/ndobkin/">Nati
Dobkin</a> on the subject, he suggested the TeamCity application, this is really
a smooth start for the CI, a very modular &amp; user freindly system that allows you
to do what you need in the shortest way.
</p>
        <p>
What am i talking about you ask ?<br />
how does the rabit hole got to do with all of this ?
</p>
        <p>
after setting up the environmet, i've started to try get this work with our project.<br />
at first glance, this task should be easy : get the source from TFS, compile, create
deployment files, deploy the files.
</p>
        <p>
          <strong>Q:</strong> what do you think will happen if you take your solution to an
isolated environment and try to compile it?
</p>
        <p>
          <strong>A: </strong>if project was conducted badly, you'll probably get missing reference
errors.<br />
it even get more intresting if those missing Dll's reside in a different workspace(in
the TFS), and the only thing that links this project to the other dll's is the physical
path <strong>ON YOUR HARD DRIVE</strong>.<br />
not exactly the right way to go.
</p>
        <p>
Possible solutions:
</p>
        <ul>
          <li>
preserve the physical link and hold your breath that nothing bad ever happen</li>
          <li>
make some order in the TFS server</li>
          <li>
create a different solution for each Application\server in the system.</li>
        </ul>
        <p>
what do you think is the best way to go?<br />
leave a comment.
</p>
        <img width="0" height="0" src="http://www.krokhmal.com/aggbug.ashx?id=a3972569-2fd2-4989-8f1b-5a5831512e45" />
        <br />
        <hr />
Shimon krokhmal, a part of the Krokhmal family</body>
      <title>Contineus Integration - Find out how deep the rabbit hole goes.</title>
      <guid isPermaLink="false">http://www.krokhmal.com/PermaLink,guid,a3972569-2fd2-4989-8f1b-5a5831512e45.aspx</guid>
      <link>http://www.krokhmal.com/2008/07/01/ContineusIntegrationFindOutHowDeepTheRabbitHoleGoes.aspx</link>
      <pubDate>Tue, 01 Jul 2008 13:16:38 GMT</pubDate>
      <description>&lt;p&gt;
I&amp;nbsp;have finally started to build a CI server for our project.&lt;br&gt;
during the process, i've examined several build tools and CI servers, such as: CruiseControl\CroiseControl.Net,
Ant\nAnt and&amp;nbsp;MSBuild.&lt;br&gt;
these tools have proven themselves enough (just google it..), but one thing similar
to all of them was the huge amount of XML configurations that needed to be done in
order to get you started.&lt;br&gt;
after a short chat with &lt;a href="http://blogs.microsoft.co.il/blogs/ndobkin/"&gt;Nati
Dobkin&lt;/a&gt;&amp;nbsp;on the subject, he suggested the TeamCity application, this is really
a smooth start for the CI, a very modular &amp;amp; user freindly system that allows you
to do what you need in the shortest way.
&lt;/p&gt;
&lt;p&gt;
What am i talking about you ask ?&lt;br&gt;
how does the rabit hole got to do with all of this ?
&lt;/p&gt;
&lt;p&gt;
after setting up the environmet, i've started to try get this work with our project.&lt;br&gt;
at first glance, this task should be easy : get the source from TFS, compile, create
deployment files, deploy the files.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Q:&lt;/strong&gt; what do you think will happen if you take your solution to an
isolated environment and try to compile it?
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;A: &lt;/strong&gt;if project was conducted badly, you'll probably get missing reference
errors.&lt;br&gt;
it even get more intresting if those missing Dll's reside in a different workspace(in
the TFS), and the only thing that links this project to the other dll's is the physical
path &lt;strong&gt;ON YOUR HARD DRIVE&lt;/strong&gt;.&lt;br&gt;
not exactly the right way to go.
&lt;/p&gt;
&lt;p&gt;
Possible solutions:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
preserve the physical link and hold your breath that nothing bad ever happen&lt;/li&gt;
&lt;li&gt;
make some order in the TFS server&lt;/li&gt;
&lt;li&gt;
create a different solution for each Application\server in the system.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
what do you think is the best way to go?&lt;br&gt;
leave a comment.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.krokhmal.com/aggbug.ashx?id=a3972569-2fd2-4989-8f1b-5a5831512e45" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Shimon krokhmal, a part of the Krokhmal family</description>
      <comments>http://www.krokhmal.com/CommentView,guid,a3972569-2fd2-4989-8f1b-5a5831512e45.aspx</comments>
      <category>Development process</category>
    </item>
    <item>
      <trackback:ping>http://www.krokhmal.com/Trackback.aspx?guid=2dde0c54-d00e-49b2-9fd5-721fa715454c</trackback:ping>
      <pingback:server>http://www.krokhmal.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.krokhmal.com/PermaLink,guid,2dde0c54-d00e-49b2-9fd5-721fa715454c.aspx</pingback:target>
      <dc:creator>Shimon krokhmal</dc:creator>
      <wfw:comment>http://www.krokhmal.com/CommentView,guid,2dde0c54-d00e-49b2-9fd5-721fa715454c.aspx</wfw:comment>
      <wfw:commentRss>http://www.krokhmal.com/SyndicationService.asmx/GetEntryCommentsRss?guid=2dde0c54-d00e-49b2-9fd5-721fa715454c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
as we described, The narrative should include a role, a feature and a benefit
</p>
        <p>
“As a [role] 
<br />
I want [feature] 
<br />
so that [benefit]” 
</p>
        <p>
This template has a number of advantages.<br />
By specifying the role within the narrative, you know who to talk to about the feature. 
<br />
By specifying the benefit, you cause the story writer to consider why they want a
feature.<br />
It gets interesting if you find the feature won’t actually deliver the benefit attributed
to it. 
<br />
This usually means you have a missing story. 
<br />
if there is one story with the current feature, which delivers a different benefit
(and is therefore still useful), then there is a hidden story whereby you will
need a different feature to deliver the benefit described.
</p>
        <p>
          <br />
          <strong>The scenario title should say what’s different- </strong>You should be able
to line up the scenarios side by side, and describe how they differ using only the
title. It should be obvious from the title whether this is the scenario you care about,
compared to the others.
</p>
        <p>
The scenario should be described in terms of <strong>Givens</strong>, <strong>Events</strong> and <strong>Outcomes</strong><br />
This is the single most powerful behavioral shift in the adopting BDD process. 
<br />
Simply by getting the business users, the analysts, the testers and the developers
to adopt this vocabulary of “given/when/then”, <strong>they discover that a world
of ambiguity falls away.</strong><br />
Not all scenarios are this simple. 
<br />
Some are best represented as a sequence of events, described as: 
</p>
        <p>
given [some context]<br />
 when [I do something] 
<br />
then [this happens] 
<br />
when [I do another thing] 
<br />
then [this new thing happens] 
</p>
        <p>
And so on. 
</p>
        <p>
An example is a wizard-style website, where you step through a sequence of screens
to build up a complex data model. 
<br />
It is perfectly appropriate to intermingle sequences of events and outcomes, as long
as you get into the habit of thinking in these terms.<br />
One interesting emergent behavior is that the quality of the conversation changes. 
<br />
You will quickly discover that you have missed out an assumed given, or forgotten
to verify an outcome.<br />
By introducing the given/when/then vocabulary, we can <strong>dramatically improve
the quality of the group interaction. </strong></p>
        <p>
          <strong>The givens should define all of, and no more than, the required context:<br /></strong>Any additional givens are distracting, which makes it hard for someone looking
at the story for the first time – whether from the technical or business side – to
understand what they need to know. 
<br />
Similarly any missing givens are really assumptions. If you can get a different outcome
from the givens provided, then there must be something missing.
</p>
        <p>
          <strong>The event should describe the feature :<br /></strong>The event itself should be very simple, typically only a single call into
the production code. As discussed above, some scenarios are more complicated than
this, but mostly the scenarios for a story will revolve around a single event. They
will differ only in the context (the givens) and the corresponding expected outcomes.
</p>
        <p>
          <strong>The story should be small enough to fit in an iteration :<br /></strong>There are no hard and fast rules about how you do this, as long as you break
it down into demonstrable chunks. 
<br />
In general if there are more than about five or six scenarios, a story can probably
be broken down by grouping similar scenarios together.<br />
 <br /><br />
When we need to understand what a computer system is supposed to do so that it can
best serve some business need, questions like:<br />
• What is the most important thing the system should do?<br />
• What is the next most important thing the system doesn't yet do? 
<br />
• If we were to switch off the system, where and what would be the biggest impact? 
</p>
        <p>
These Powerful questions can be tough to answer. 
<br />
But following these will guide us to insights that we hadn't though of.<br /></p>
        <img width="0" height="0" src="http://www.krokhmal.com/aggbug.ashx?id=2dde0c54-d00e-49b2-9fd5-721fa715454c" />
        <br />
        <hr />
Shimon krokhmal, a part of the Krokhmal family</body>
      <title>BDD : Defining the language - deep dive</title>
      <guid isPermaLink="false">http://www.krokhmal.com/PermaLink,guid,2dde0c54-d00e-49b2-9fd5-721fa715454c.aspx</guid>
      <link>http://www.krokhmal.com/2008/06/20/BDDDefiningTheLanguageDeepDive.aspx</link>
      <pubDate>Fri, 20 Jun 2008 12:50:18 GMT</pubDate>
      <description>&lt;p&gt;
as we described, The narrative should include a role, a feature and a benefit
&lt;/p&gt;
&lt;p&gt;
“As a [role] 
&lt;br&gt;
I want [feature] 
&lt;br&gt;
so that [benefit]” 
&lt;/p&gt;
&lt;p&gt;
This template has a number of advantages.&lt;br&gt;
By specifying the role within the narrative, you know who to talk to about the feature. 
&lt;br&gt;
By specifying the benefit, you cause the story writer to consider why they want a
feature.&lt;br&gt;
It gets interesting if you find the feature won’t actually deliver the benefit attributed
to it. 
&lt;br&gt;
This usually means you have a missing story. 
&lt;br&gt;
if there is one story with the current feature, which delivers a different benefit
(and is therefore still useful), then there is&amp;nbsp;a hidden story whereby you will
need a different feature to deliver the benefit described.
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
&lt;strong&gt;The scenario title should say what’s different- &lt;/strong&gt;You should be able
to line up the scenarios side by side, and describe how they differ using only the
title. It should be obvious from the title whether this is the scenario you care about,
compared to the others.
&lt;/p&gt;
&lt;p&gt;
The scenario should be described in terms of &lt;strong&gt;Givens&lt;/strong&gt;, &lt;strong&gt;Events&lt;/strong&gt; and &lt;strong&gt;Outcomes&lt;/strong&gt;
&lt;br&gt;
This is the single most powerful behavioral shift in the adopting BDD process. 
&lt;br&gt;
Simply by getting the business users, the analysts, the testers and the developers
to adopt this vocabulary of “given/when/then”, &lt;strong&gt;they discover that a world
of ambiguity falls away.&lt;/strong&gt;
&lt;br&gt;
Not all scenarios are this simple. 
&lt;br&gt;
Some are best represented as a sequence of events, described as: 
&lt;/p&gt;
&lt;p&gt;
given [some context]&lt;br&gt;
&amp;nbsp;when [I do something] 
&lt;br&gt;
then [this happens] 
&lt;br&gt;
when [I do another thing] 
&lt;br&gt;
then [this new thing happens] 
&lt;/p&gt;
&lt;p&gt;
And so on. 
&lt;/p&gt;
&lt;p&gt;
An example is a wizard-style website, where you step through a sequence of screens
to build up a complex data model. 
&lt;br&gt;
It is perfectly appropriate to intermingle sequences of events and outcomes, as long
as you get into the habit of thinking in these terms.&lt;br&gt;
One interesting emergent behavior is that the quality of the conversation changes. 
&lt;br&gt;
You will quickly discover that you have missed out an assumed given, or forgotten
to verify an outcome.&lt;br&gt;
By introducing the given/when/then vocabulary, we can &lt;strong&gt;dramatically improve
the quality of the group interaction. &lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;The givens should define all of, and no more than, the required context:&lt;br&gt;
&lt;/strong&gt;Any additional givens are distracting, which makes it hard for someone looking
at the story for the first time – whether from the technical or business side – to
understand what they need to know. 
&lt;br&gt;
Similarly any missing givens are really assumptions. If you can get a different outcome
from the givens provided, then there must be something missing.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;The event should describe the feature :&lt;br&gt;
&lt;/strong&gt;The event itself should be very simple, typically only a single call into
the production code. As discussed above, some scenarios are more complicated than
this, but mostly the scenarios for a story will revolve around a single event. They
will differ only in the context (the givens) and the corresponding expected outcomes.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;The story should be small enough to fit in an iteration :&lt;br&gt;
&lt;/strong&gt;There are no hard and fast rules about how you do this, as long as you break
it down into demonstrable chunks. 
&lt;br&gt;
In general if there are more than about five or six scenarios, a story can probably
be broken down by grouping similar scenarios together.&lt;br&gt;
&amp;nbsp;&lt;br&gt;
&lt;br&gt;
When we need to understand what a computer system is supposed to do so that it can
best serve some business need, questions like:&lt;br&gt;
•&amp;nbsp;What is the most important thing the system should do?&lt;br&gt;
•&amp;nbsp;What is the next most important thing the system doesn't yet do? 
&lt;br&gt;
•&amp;nbsp;If we were to switch off the system, where and what would be the biggest impact? 
&lt;/p&gt;
&lt;p&gt;
These Powerful questions can be tough to answer. 
&lt;br&gt;
But following these will guide us to insights that we hadn't though of.&lt;br&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.krokhmal.com/aggbug.ashx?id=2dde0c54-d00e-49b2-9fd5-721fa715454c" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Shimon krokhmal, a part of the Krokhmal family</description>
      <comments>http://www.krokhmal.com/CommentView,guid,2dde0c54-d00e-49b2-9fd5-721fa715454c.aspx</comments>
      <category>BDD</category>
      <category>Development process</category>
    </item>
    <item>
      <trackback:ping>http://www.krokhmal.com/Trackback.aspx?guid=c6bd6c57-dc8b-4bb9-86bf-e548de1c8d87</trackback:ping>
      <pingback:server>http://www.krokhmal.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.krokhmal.com/PermaLink,guid,c6bd6c57-dc8b-4bb9-86bf-e548de1c8d87.aspx</pingback:target>
      <dc:creator>Shimon krokhmal</dc:creator>
      <wfw:comment>http://www.krokhmal.com/CommentView,guid,c6bd6c57-dc8b-4bb9-86bf-e548de1c8d87.aspx</wfw:comment>
      <wfw:commentRss>http://www.krokhmal.com/SyndicationService.asmx/GetEntryCommentsRss?guid=c6bd6c57-dc8b-4bb9-86bf-e548de1c8d87</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
the Acceptance Criteria consist of a collection of Scenario allow us to determine
when we are done, The most important aspect of a story is the language in which it
is written. 
<br />
The golden rule is that the Story should be written in the language of the Role, that
is to say the beneficiary of the feature. 
<br />
If the Story represents a business feature, it should be written in business terms
with the aid of a business analyst.<br />
If the story describes a technical requirement, such as resilience or scalability
(sometimes called “non-functional” requirements), it should be presented in the appropriate
technical language.<br />
Acceptance Criteria specify, as a collection of Scenario, what needs to be achieved
if the Behavior of the Feature is to be considered finished.
</p>
        <p>
          <strong>A Scenario:<br /></strong>Some Behavior that can be automatically verified once the Story (or some
part of it) is delivered. 
<br />
The Scenario sets up the world in a known state (or in a way that will behave deterministically)
and executes a sequence of one or more Events resulting in one or more verifiable
Outcomes. 
<br />
We commonly implement these scenarios, as FIT fixtures, Selenium tests or programmatically
as code, but the technology is less important than the concept here, the aim of these
verifiable scenarios is to define what a successful outcome looks like. 
</p>
        <p>
This use of Scenarios gives us two immediate returns. 
</p>
        <ul>
          <li>
They form the basis for our estimates, leading to more consistent estimates than story-level
estimations. 
</li>
          <li>
They show when a story is trying to do “too much”. 
<br />
If there are more than a handful of scenarios (five or six), it suggests that the
story should be split into several smaller stories, each providing independent benefit,
and each consisting of a subset of the scenarios. 
<br />
Boundary or exception cases are good examples of this: sets of boundary scenarios
might clump together to describe common business cases, and some of these clusters
will be deemed more important than others. Smaller stories means finer-grained control
over prioritization, finer grained visibility of progress and reduced exposure to
technical risk.</li>
        </ul>
        <p>
Scenario structure:
</p>
        <p>
          <strong>Scenario 1: </strong>Title<br />
Given [context]<br />
And [some more context]…<br />
When  [event]<br />
Then  [outcome]<br />
And [another outcome]…
</p>
        <img width="0" height="0" src="http://www.krokhmal.com/aggbug.ashx?id=c6bd6c57-dc8b-4bb9-86bf-e548de1c8d87" />
        <br />
        <hr />
Shimon krokhmal, a part of the Krokhmal family</body>
      <title>BDD: The Story part 3 - Acceptance Criteria</title>
      <guid isPermaLink="false">http://www.krokhmal.com/PermaLink,guid,c6bd6c57-dc8b-4bb9-86bf-e548de1c8d87.aspx</guid>
      <link>http://www.krokhmal.com/2008/06/14/BDDTheStoryPart3AcceptanceCriteria.aspx</link>
      <pubDate>Sat, 14 Jun 2008 09:29:49 GMT</pubDate>
      <description>&lt;p&gt;
the Acceptance Criteria consist of a collection of Scenario allow us to determine
when we are done, The most important aspect of a story is the language in which it
is written. 
&lt;br&gt;
The golden rule is that the Story should be written in the language of the Role, that
is to say the beneficiary of the feature. 
&lt;br&gt;
If the Story represents a business feature, it should be written in business terms
with the aid of a business analyst.&lt;br&gt;
If the story describes a technical requirement, such as resilience or scalability
(sometimes called “non-functional” requirements), it should be presented in the appropriate
technical language.&lt;br&gt;
Acceptance Criteria specify, as a collection of Scenario, what needs to be achieved
if the Behavior of the Feature is to be considered finished.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;A Scenario:&lt;br&gt;
&lt;/strong&gt;Some Behavior that can be automatically verified once the Story (or some
part of it) is delivered. 
&lt;br&gt;
The Scenario sets up the world in a known state (or in a way that will behave deterministically)
and executes a sequence of one or more Events resulting in one or more verifiable
Outcomes. 
&lt;br&gt;
We commonly implement these scenarios, as FIT fixtures, Selenium tests or programmatically
as code, but the technology is less important than the concept here, the aim of these
verifiable scenarios is to define what a successful outcome looks like. 
&lt;/p&gt;
&lt;p&gt;
This use of Scenarios gives us two immediate returns. 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
They form the basis for our estimates, leading to more consistent estimates than story-level
estimations. 
&lt;/li&gt;
&lt;li&gt;
They show when a story is trying to do “too much”. 
&lt;br&gt;
If there are more than a handful of scenarios (five or six), it suggests that the
story should be split into several smaller stories, each providing independent benefit,
and each consisting of a subset of the scenarios. 
&lt;br&gt;
Boundary or exception cases are good examples of this: sets of boundary scenarios
might clump together to describe common business cases, and some of these clusters
will be deemed more important than others. Smaller stories means finer-grained control
over prioritization, finer grained visibility of progress and reduced exposure to
technical risk.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Scenario structure:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Scenario 1: &lt;/strong&gt;Title&lt;br&gt;
Given [context]&lt;br&gt;
And [some more context]…&lt;br&gt;
When&amp;nbsp; [event]&lt;br&gt;
Then&amp;nbsp; [outcome]&lt;br&gt;
And [another outcome]…
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.krokhmal.com/aggbug.ashx?id=c6bd6c57-dc8b-4bb9-86bf-e548de1c8d87" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Shimon krokhmal, a part of the Krokhmal family</description>
      <comments>http://www.krokhmal.com/CommentView,guid,c6bd6c57-dc8b-4bb9-86bf-e548de1c8d87.aspx</comments>
      <category>BDD</category>
      <category>Development process</category>
    </item>
    <item>
      <trackback:ping>http://www.krokhmal.com/Trackback.aspx?guid=46c701d5-249b-44f4-bac2-c10dc901af7f</trackback:ping>
      <pingback:server>http://www.krokhmal.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.krokhmal.com/PermaLink,guid,46c701d5-249b-44f4-bac2-c10dc901af7f.aspx</pingback:target>
      <dc:creator>Shimon krokhmal</dc:creator>
      <wfw:comment>http://www.krokhmal.com/CommentView,guid,46c701d5-249b-44f4-bac2-c10dc901af7f.aspx</wfw:comment>
      <wfw:commentRss>http://www.krokhmal.com/SyndicationService.asmx/GetEntryCommentsRss?guid=46c701d5-249b-44f4-bac2-c10dc901af7f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
the nerrative Gives us a brief description of what to deliver, 
<br />
and why we should deliver it (in the form of Features and Benefits). 
</p>
        <p>
we shall define few terms:
</p>
        <p>
          <strong>A Role:<br /></strong>Is an aspect that describes the person, or thing, that will benefit from
the Feature.<br />
It is essentially the same as an Actor in a UseCase.
</p>
        <p>
          <strong>A Feature:<br /></strong>It describes something that the system should do (the behavior, as it were).<br />
An important aspect of a Feature is that it is described solely in business terms
and not in terms of technology or technologists, 
<br />
unless of course the business is technology or technologists!!
</p>
        <p>
          <strong>A Benefit:<br /></strong>This is the reason we are delivering a particular Feature– it describes the
business value accrued from this Feature. 
<br />
Initially the Benefit is usually qualitative, 
<br />
but we usually expect to see some quantitative business value assigned to the Story
before it is chosen for development. 
<br />
This is to help keep us honest and to ensure that we are focusing our development
efforts on Features that have real business value.
</p>
        <p>
To ensure that we don't forget any of these critical components we often use a template
for the narrative like this: 
</p>
        <p>
          <strong>As a &lt;Role&gt; 
<br />
I want &lt;Feature&gt; 
<br />
So that &lt;Benefit&gt; </strong>
        </p>
        <p>
A concrete example may be something like: 
</p>
        <p>
          <strong>As a</strong> Developer 
<br /><strong>I want</strong> to be able to rename classes 
<br /><strong>So that</strong> I don’t spend too much time worrying about getting the name
right first time 
</p>
        <p>
          <br />
The reason for this degree of formality is that it helps us avoid some common analysis
anti-patterns. 
</p>
        <p>
Two in particular are worth mentioning: 
</p>
        <ul>
          <li>
            <strong>Feature = Benefit</strong>. 
<br />
This is where the “benefit” is simply a restatement of the feature, this is a common
failing in technical or semi-technical customers, 
<br />
who wish to promote a particular technical solution. 
<br />
These requirements can often be (diplomatically) eliminated, reducing complexity,
risk and the associated cost. 
</li>
          <li>
            <strong>Feature ≠&gt; Benefit. (“Feature does not imply benefit”) 
<br /></strong>The feature described will not deliver the benefit described. 
<br />
When this occurs it often reveals hidden requirements. 
<br />
It may be that the Feature delivers a completely different benefit which we hadn't
identified. 
<br />
Conversely, we may need to introduce some new Feature to actually achieve the specified
Benefit, 
<br />
a previously hidden, and thus unplanned, feature. 
</li>
        </ul>
        <p>
 
</p>
        <p>
 
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://www.krokhmal.com/aggbug.ashx?id=46c701d5-249b-44f4-bac2-c10dc901af7f" />
        <br />
        <hr />
Shimon krokhmal, a part of the Krokhmal family</body>
      <title>BDD: The Story part 2 - Narrative</title>
      <guid isPermaLink="false">http://www.krokhmal.com/PermaLink,guid,46c701d5-249b-44f4-bac2-c10dc901af7f.aspx</guid>
      <link>http://www.krokhmal.com/2008/06/13/BDDTheStoryPart2Narrative.aspx</link>
      <pubDate>Fri, 13 Jun 2008 09:04:50 GMT</pubDate>
      <description>&lt;p&gt;
the nerrative Gives us a brief description of what to deliver, 
&lt;br&gt;
and why we should deliver it (in the form of Features and Benefits). 
&lt;/p&gt;
&lt;p&gt;
we shall define few terms:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;A Role:&lt;br&gt;
&lt;/strong&gt;Is an aspect that describes the person, or thing, that will benefit from
the Feature.&lt;br&gt;
It is essentially the same as an Actor in a UseCase.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;A Feature:&lt;br&gt;
&lt;/strong&gt;It describes something that the system should do (the behavior, as it were).&lt;br&gt;
An important aspect of a Feature is that it is described solely in business terms
and not in terms of technology or technologists, 
&lt;br&gt;
unless of course the business is technology or technologists!!
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;A Benefit:&lt;br&gt;
&lt;/strong&gt;This is the reason we are delivering a particular Feature– it describes the
business value accrued from this Feature. 
&lt;br&gt;
Initially the Benefit is usually qualitative, 
&lt;br&gt;
but we usually expect to see some quantitative business value assigned to the Story
before it is chosen for development. 
&lt;br&gt;
This is to help keep us honest and to ensure that we are focusing our development
efforts on Features that have real business value.
&lt;/p&gt;
&lt;p&gt;
To ensure that we don't forget any of these critical components we often use a template
for the narrative like this: 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;As a &amp;lt;Role&amp;gt; 
&lt;br&gt;
I want &amp;lt;Feature&amp;gt; 
&lt;br&gt;
So that &amp;lt;Benefit&amp;gt; &lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
A concrete example may be something like: 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;As a&lt;/strong&gt; Developer 
&lt;br&gt;
&lt;strong&gt;I want&lt;/strong&gt; to be able to rename classes 
&lt;br&gt;
&lt;strong&gt;So that&lt;/strong&gt; I don’t spend too much time worrying about getting the name
right first time 
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
The reason for this degree of formality is that it helps us avoid some common analysis
anti-patterns. 
&lt;/p&gt;
&lt;p&gt;
Two in particular are worth mentioning:&amp;nbsp;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Feature = Benefit&lt;/strong&gt;. 
&lt;br&gt;
This is where the “benefit” is simply a restatement of the feature, this is a common
failing in technical or semi-technical customers, 
&lt;br&gt;
who wish to promote a particular technical solution. 
&lt;br&gt;
These requirements can often be (diplomatically) eliminated, reducing complexity,
risk and the associated cost. 
&lt;li&gt;
&lt;strong&gt;Feature ≠&amp;gt; Benefit. (“Feature does not imply benefit”) 
&lt;br&gt;
&lt;/strong&gt;The feature described will not deliver the benefit described. 
&lt;br&gt;
When this occurs it often reveals hidden requirements. 
&lt;br&gt;
It may be that the Feature delivers a completely different benefit which we hadn't
identified. 
&lt;br&gt;
Conversely, we may need to introduce some new Feature to actually achieve the specified
Benefit, 
&lt;br&gt;
a previously hidden, and thus unplanned, feature. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.krokhmal.com/aggbug.ashx?id=46c701d5-249b-44f4-bac2-c10dc901af7f" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Shimon krokhmal, a part of the Krokhmal family</description>
      <comments>http://www.krokhmal.com/CommentView,guid,46c701d5-249b-44f4-bac2-c10dc901af7f.aspx</comments>
      <category>BDD</category>
      <category>Development process</category>
    </item>
    <item>
      <trackback:ping>http://www.krokhmal.com/Trackback.aspx?guid=7e759fc8-e933-4957-8ec9-eeae489a0a6c</trackback:ping>
      <pingback:server>http://www.krokhmal.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.krokhmal.com/PermaLink,guid,7e759fc8-e933-4957-8ec9-eeae489a0a6c.aspx</pingback:target>
      <dc:creator>Shimon krokhmal</dc:creator>
      <wfw:comment>http://www.krokhmal.com/CommentView,guid,7e759fc8-e933-4957-8ec9-eeae489a0a6c.aspx</wfw:comment>
      <wfw:commentRss>http://www.krokhmal.com/SyndicationService.asmx/GetEntryCommentsRss?guid=7e759fc8-e933-4957-8ec9-eeae489a0a6c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
if you haven't read the introduction yet, please read the <a href="http://www.krokhmal.com/2007/10/26/BDDTDDIntroduction.aspx">introduction
to BDD</a></p>
        <p>
          <strong>What is this story all about ?<br /></strong>The idea is that the words you use influence the way you think about something.<br />
To smooth its path through the development process, We say that it must fulfill certain
additional criteria. 
</p>
        <p>
A story should have a Title, a Narrative and AcceptanceCriteria:
</p>
        <p>
          <strong>Title:</strong>
        </p>
        <p>
Gives us a label to describe this piece of function throughout the life of the project.<br />
It is important to choose good titles to describe the story, 
<br />
Since the story is an atom of development and as such is referred to in all sorts
of conversations throughout the life of the project. 
</p>
        <p>
Poor titles for stories are things like: <br />
   • Implement Performance Enhancements <br />
   • Move Data <br />
   • Create Persistence Layer 
<br /></p>
        <p>
Titles should describe the story in <strong>business terms</strong>, and should make
sense when, 
<br />
For example, considered as a unit of value for the system. 
</p>
        <p>
Some examples of better titles may be: <br />
   • Accept Credit Card Payment <br />
   • Confirm Exchange Rate <br />
   • Accept Product Updates<br /></p>
        <img width="0" height="0" src="http://www.krokhmal.com/aggbug.ashx?id=7e759fc8-e933-4957-8ec9-eeae489a0a6c" />
        <br />
        <hr />
Shimon krokhmal, a part of the Krokhmal family</body>
      <title>BDD: The Story part1 - Title</title>
      <guid isPermaLink="false">http://www.krokhmal.com/PermaLink,guid,7e759fc8-e933-4957-8ec9-eeae489a0a6c.aspx</guid>
      <link>http://www.krokhmal.com/2008/06/12/BDDTheStoryPart1Title.aspx</link>
      <pubDate>Thu, 12 Jun 2008 08:55:05 GMT</pubDate>
      <description>&lt;p&gt;
if you haven't read the introduction yet, please read the &lt;a href="http://www.krokhmal.com/2007/10/26/BDDTDDIntroduction.aspx"&gt;introduction
to BDD&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;What is this story all about ?&lt;br&gt;
&lt;/strong&gt;The idea is that the words you use influence the way you think about something.&lt;br&gt;
To smooth its path through the development process, We say that it must fulfill certain
additional criteria. 
&lt;/p&gt;
&lt;p&gt;
A story should have a Title, a Narrative and AcceptanceCriteria:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Title:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Gives us a label to describe this piece of function throughout the life of the project.&lt;br&gt;
It is important to choose good titles to describe the story, 
&lt;br&gt;
Since the story is an atom of development and as such is referred to in all sorts
of conversations throughout the life of the project. 
&lt;/p&gt;
&lt;p&gt;
Poor titles for stories are things like:&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;•&amp;nbsp;Implement Performance Enhancements&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;•&amp;nbsp;Move Data&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;•&amp;nbsp;Create Persistence Layer 
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
Titles should describe the story in &lt;strong&gt;business terms&lt;/strong&gt;, and should make
sense when, 
&lt;br&gt;
For example, considered as a unit of value for the system. 
&lt;/p&gt;
&lt;p&gt;
Some examples of better titles may be:&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;•&amp;nbsp;Accept Credit Card Payment&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;•&amp;nbsp;Confirm Exchange Rate&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;•&amp;nbsp;Accept Product Updates&lt;br&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.krokhmal.com/aggbug.ashx?id=7e759fc8-e933-4957-8ec9-eeae489a0a6c" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Shimon krokhmal, a part of the Krokhmal family</description>
      <comments>http://www.krokhmal.com/CommentView,guid,7e759fc8-e933-4957-8ec9-eeae489a0a6c.aspx</comments>
      <category>BDD</category>
      <category>Development process</category>
    </item>
    <item>
      <trackback:ping>http://www.krokhmal.com/Trackback.aspx?guid=1f761eed-1b01-4a57-a386-60b9e1e3bdd8</trackback:ping>
      <pingback:server>http://www.krokhmal.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.krokhmal.com/PermaLink,guid,1f761eed-1b01-4a57-a386-60b9e1e3bdd8.aspx</pingback:target>
      <dc:creator>Shimon krokhmal</dc:creator>
      <wfw:comment>http://www.krokhmal.com/CommentView,guid,1f761eed-1b01-4a57-a386-60b9e1e3bdd8.aspx</wfw:comment>
      <wfw:commentRss>http://www.krokhmal.com/SyndicationService.asmx/GetEntryCommentsRss?guid=1f761eed-1b01-4a57-a386-60b9e1e3bdd8</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In the last few weeks, i was doing a deep dive into some development methodologies
such as TDD, <a href="http://www.krokhmal.com/2007/10/26/BDDTDDIntroduction.aspx">BDD</a>,
and scrum.<br />
what was bothering be about the TDD approach is the concept of designing for testability.<br />
in early stages of my research, i spoke with <a href="http://blogs.microsoft.co.il/blogs/ndobkin/">Nati</a>,
a good friend of mine that practicing TDD in his team,<br />
he told me that in order to write practice TDD it is imperative to write testable
code.<br />
What is testable code i asked ?<br />
Well, this is not a simple question to answer, <a href="http://weblogs.asp.net/rosherove/">roy
Osherove</a> has even written a <a href="http://www.manning.com/osherove/">book</a> about
that,<br />
from changing the design of your application, like using MVP to an "Inherit &amp;
Override" practice .<br />
all these practices make your TDD life easier, but we need to ask ourselves one simple
question :<br />
"<strong>What is the purpose of your application ?</strong>", 
<br />
seems like a stupid question to raise, but due to the noticeable progress of the software
industry towards TDD blindly, 
<br />
this may affect the software performance/Quality "Just" for making our code testable.
</p>
        <p>
I came across Eli Lopian's article about <a href="http://www.codeproject.com/dotnet/StopDesign4Tests.asp">Stop
Designing for Testability</a>, which confirms my concerns about the issue, i Totally
agree with him.<br />
testable code has an added value, but must we not forget the real purpose of the application,
which is to run best in production environment.
</p>
        <p>
This post is a sort of a reply post to <a href="http://blogs.microsoft.co.il/blogs/ndobkin/archive/2007/11/17/testable-code-is-it-worth-it.aspx">nati's
post - Testable code, is it worth it ?</a> regarding that matter.
</p>
        <p>
Testable application is certainly an added value to the development process and to
the business as one,<br />
but we must be careful not to make it the main issue of the application.<br />
a great example of how TDD should be done is the <a href="http://www.TypeMock.Net">TypeMock.Net</a> tool,
which allows you coding TDD without affecting the performance and OOP design
of the application, in my opinion, this is the way to go the TDD way.
</p>
        <p>
What do you think about this matter ?
</p>
        <img width="0" height="0" src="http://www.krokhmal.com/aggbug.ashx?id=1f761eed-1b01-4a57-a386-60b9e1e3bdd8" />
        <br />
        <hr />
Shimon krokhmal, a part of the Krokhmal family</body>
      <title>TDD approach - Does redefining application purpose necessary?</title>
      <guid isPermaLink="false">http://www.krokhmal.com/PermaLink,guid,1f761eed-1b01-4a57-a386-60b9e1e3bdd8.aspx</guid>
      <link>http://www.krokhmal.com/2007/11/19/TDDApproachDoesRedefiningApplicationPurposeNecessary.aspx</link>
      <pubDate>Mon, 19 Nov 2007 07:32:59 GMT</pubDate>
      <description>&lt;p&gt;
In the last few weeks, i was doing a deep dive into some development methodologies
such as TDD, &lt;a href="http://www.krokhmal.com/2007/10/26/BDDTDDIntroduction.aspx"&gt;BDD&lt;/a&gt;,
and scrum.&lt;br&gt;
what was bothering be about the TDD approach is the concept of designing for testability.&lt;br&gt;
in early stages of my research, i spoke with &lt;a href="http://blogs.microsoft.co.il/blogs/ndobkin/"&gt;Nati&lt;/a&gt;,
a good friend of mine that practicing TDD in his team,&lt;br&gt;
he told me that in order to write practice TDD it is imperative to write testable
code.&lt;br&gt;
What is testable code i asked ?&lt;br&gt;
Well, this is not a simple question to answer, &lt;a href="http://weblogs.asp.net/rosherove/"&gt;roy
Osherove&lt;/a&gt;&amp;nbsp;has even written a &lt;a href="http://www.manning.com/osherove/"&gt;book&lt;/a&gt; about
that,&lt;br&gt;
from changing the design of your application, like using MVP to an "Inherit &amp;amp;
Override" practice .&lt;br&gt;
all these practices make your TDD life easier, but we need to ask ourselves one simple
question :&lt;br&gt;
"&lt;strong&gt;What is the purpose of your application ?&lt;/strong&gt;", 
&lt;br&gt;
seems like a stupid question to raise, but due to the noticeable progress of the software
industry towards TDD blindly, 
&lt;br&gt;
this may affect the software performance/Quality "Just" for making our code testable.
&lt;/p&gt;
&lt;p&gt;
I&amp;nbsp;came across Eli Lopian's article about &lt;a href="http://www.codeproject.com/dotnet/StopDesign4Tests.asp"&gt;Stop
Designing for Testability&lt;/a&gt;, which confirms my concerns about the issue, i Totally
agree with him.&lt;br&gt;
testable code has an added value, but must we not forget the real purpose of the application,
which is to run best in production environment.
&lt;/p&gt;
&lt;p&gt;
This post is a sort of a reply post to &lt;a href="http://blogs.microsoft.co.il/blogs/ndobkin/archive/2007/11/17/testable-code-is-it-worth-it.aspx"&gt;nati's
post&amp;nbsp;- Testable code, is it worth it ?&lt;/a&gt;&amp;nbsp;regarding that matter.
&lt;/p&gt;
&lt;p&gt;
Testable application is certainly an added value to the development process and to
the business as one,&lt;br&gt;
but we must be careful not to make it the main issue of the application.&lt;br&gt;
a great example of how TDD should be done is the &lt;a href="http://www.TypeMock.Net"&gt;TypeMock.Net&lt;/a&gt;&amp;nbsp;tool,
which allows you coding TDD&amp;nbsp;without affecting the performance and OOP design
of the application, in my opinion, this is the way to go the TDD way.
&lt;/p&gt;
&lt;p&gt;
What do you think about this matter ?
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.krokhmal.com/aggbug.ashx?id=1f761eed-1b01-4a57-a386-60b9e1e3bdd8" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Shimon krokhmal, a part of the Krokhmal family</description>
      <comments>http://www.krokhmal.com/CommentView,guid,1f761eed-1b01-4a57-a386-60b9e1e3bdd8.aspx</comments>
      <category>Development process</category>
      <category>TDD</category>
    </item>
    <item>
      <trackback:ping>http://www.krokhmal.com/Trackback.aspx?guid=43c39973-73cb-4fd8-b24a-76a4ab2af2a8</trackback:ping>
      <pingback:server>http://www.krokhmal.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.krokhmal.com/PermaLink,guid,43c39973-73cb-4fd8-b24a-76a4ab2af2a8.aspx</pingback:target>
      <dc:creator>Shimon krokhmal</dc:creator>
      <wfw:comment>http://www.krokhmal.com/CommentView,guid,43c39973-73cb-4fd8-b24a-76a4ab2af2a8.aspx</wfw:comment>
      <wfw:commentRss>http://www.krokhmal.com/SyndicationService.asmx/GetEntryCommentsRss?guid=43c39973-73cb-4fd8-b24a-76a4ab2af2a8</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
The last two weeks I'm doing a deep dive into <a href="http://www.krokhmal.com/2007/10/17/AutomatingDevelopmentProcess.aspx">development
automation process</a>, which should save allot of time.<br />
a big part of a development process is testing, and as of that many methodologies
emerged such as TDD(Test driven development) and so.<br />
The main purpose of these test driven methodologies is to produce a better quality
code by creating a set of tests and then write a testable code.<br /></p>
        <p>
          <strong>What is BDD?<br /></strong>Behavior-driven development (BDD) is an evolution of test-driven development
(TDD) and acceptance-test driven design, 
<br />
and is intended to make these practices more accessible and intuitive to newcomers
and experts alike.<br />
It shifts the vocabulary from being test-based to behavior-based, and positions itself
as a design philosophy. 
</p>
        <p>
let me explain it in a more explicit way:<br />
as a newcomer to the TDD like process, I found myself asking questions like : 
<br />
How vastly my tests should me?<br />
Where do I start?<br />
How do i integrate the TDD process with the rest of the development process?<br />
How to write a testable code?<br />
What would be the impact of it?<br />
How do I justify it to the stakeholders?
</p>
        <p>
often stakeholders aren't eager for process changes especially if they are unfamiliar
with the new techniques,<br />
cons seems to be having a greater impact on a decision process rather than the major
advantages, even if they are insignificant comparing to the advantages.<br /></p>
        <p>
        </p>
        <p>
          <strong>In what way does the BDD elevate the TDD process?<br /></strong>To answer that question, let's put aside the code writing and the testing
process and focus on the entire development process.<br />
Often technical person and a business person speak in "different languages", even
analysts and developers sometimes suffer from misunderstandings.<br />
Behavior driven development is a technique that designed to eliminate ambiguity and
miscommunication between people on different roles.<br /><br />
this technique comes to solve one basic thing : how do i write a process requirement
in a way that would be understandable to all the development personnel, and ensure
that the implementation covers the requirements.<br /><br />
To answer the question "where do I start?" ask yourself "what is the next most important
thing that the system does not do?"<br />
This question should get you started.<br /></p>
        <p>
        </p>
        <p>
Lets define our requirements in the following template :<br /><strong>As a [</strong>role<strong>]<br />
I want [</strong>Feature<strong>]<br />
So that [</strong>Benefit<strong>].</strong></p>
        <p>
Defining requirment in this way answers a few important questions:
</p>
        <ul>
          <li>
Who is the stakeholder for the given request (this is the person that should care
about the wanted feature) 
</li>
          <li>
What is the needed functionality? 
</li>
          <li>
What would be the benefit from this specific feature?</li>
        </ul>
        <p>
Note that when these specific questions answered, you can see which features are more
important (and which are not relevant at all).<br />
this way interaction with all the development related personnel will be in "the same
language".
</p>
        <p>
          <strong>Developing scenarios that could happen due to given requirement!<br /></strong>i find the word "scenarios" or even "specifications" more pleasant than "Test"
for some reason,<br />
no matter how you look at it, success of these "scenarios", which are situations
or a set of rules that must be handled in a specific way, are viable to the success
of your project/product/feature development.<br /><br /><strong>Ok, this is all great, but how all this relates to TDD ?<br /></strong>glad you asked this question, i see it in a very simple way:<br />
If the system fulfills all the acceptance criteria, it's behaving correctly.
</p>
        <p>
To summarize all this, 
<br />
i would say that BDD is a way to produce an idea for a requirement into an implemented,
tested production ready code.
</p>
        <p>
stay tuned for the second part about writing scenarios, development tools and more.
</p>
        <img width="0" height="0" src="http://www.krokhmal.com/aggbug.ashx?id=43c39973-73cb-4fd8-b24a-76a4ab2af2a8" />
        <br />
        <hr />
Shimon krokhmal, a part of the Krokhmal family</body>
      <title>BDD : TDD - Introduction</title>
      <guid isPermaLink="false">http://www.krokhmal.com/PermaLink,guid,43c39973-73cb-4fd8-b24a-76a4ab2af2a8.aspx</guid>
      <link>http://www.krokhmal.com/2007/10/26/BDDTDDIntroduction.aspx</link>
      <pubDate>Fri, 26 Oct 2007 09:40:09 GMT</pubDate>
      <description>&lt;p&gt;
The last two weeks I'm doing a deep dive into &lt;a href="http://www.krokhmal.com/2007/10/17/AutomatingDevelopmentProcess.aspx"&gt;development
automation process&lt;/a&gt;, which should save allot of time.&lt;br&gt;
a big part of a development process is testing, and as of that many methodologies
emerged such as TDD(Test driven development) and so.&lt;br&gt;
The main purpose of these test driven methodologies is to produce a better quality
code by creating a set of tests and then write a testable code.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;What is BDD?&lt;br&gt;
&lt;/strong&gt;Behavior-driven development (BDD) is an evolution of test-driven development
(TDD) and acceptance-test driven design, 
&lt;br&gt;
and is intended to make these practices more accessible and intuitive to newcomers
and experts alike.&lt;br&gt;
It shifts the vocabulary from being test-based to behavior-based, and positions itself
as a design philosophy. 
&lt;/p&gt;
&lt;p&gt;
let me explain it in a more explicit way:&lt;br&gt;
as a newcomer to the TDD like process, I found myself asking questions like : 
&lt;br&gt;
How vastly my tests should me?&lt;br&gt;
Where do I start?&lt;br&gt;
How do i integrate the TDD process with the rest of the development process?&lt;br&gt;
How to write a testable code?&lt;br&gt;
What would be the impact of it?&lt;br&gt;
How do I justify it to the stakeholders?
&lt;/p&gt;
&lt;p&gt;
often stakeholders aren't eager for process changes especially if they are unfamiliar
with the new techniques,&lt;br&gt;
cons seems to be having a greater impact on a decision process rather than the major
advantages, even if they are insignificant comparing to the advantages.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;In what way does the BDD elevate the TDD process?&lt;br&gt;
&lt;/strong&gt;To answer that question, let's put aside the code writing and the testing
process and focus on the entire development process.&lt;br&gt;
Often technical person and a business person speak in "different languages", even
analysts and developers sometimes suffer from misunderstandings.&lt;br&gt;
Behavior driven development is a technique that designed to eliminate ambiguity and
miscommunication between people on different roles.&lt;br&gt;
&lt;br&gt;
this technique comes to solve one basic thing : how do i write a process requirement
in a way that would be understandable to all the development personnel, and ensure
that the implementation covers the requirements.&lt;br&gt;
&lt;br&gt;
To answer the question "where do I start?" ask yourself "what is the next most important
thing that the system does not do?"&lt;br&gt;
This question should get you started.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Lets define our requirements in the following template :&lt;br&gt;
&lt;strong&gt;As a [&lt;/strong&gt;role&lt;strong&gt;]&lt;br&gt;
I want [&lt;/strong&gt;Feature&lt;strong&gt;]&lt;br&gt;
So that [&lt;/strong&gt;Benefit&lt;strong&gt;].&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Defining requirment in this way answers a few important questions:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Who is the stakeholder for the given request (this is the person that should care
about the wanted feature) 
&lt;li&gt;
What is the needed functionality? 
&lt;li&gt;
What would be the benefit from this specific feature?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Note that when these specific questions answered, you can see which features are more
important (and which are not relevant at all).&lt;br&gt;
this way interaction with all the development related personnel will be in "the same
language".
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Developing scenarios that could happen due to given requirement!&lt;br&gt;
&lt;/strong&gt;i find the word "scenarios" or even "specifications" more pleasant than "Test"
for some reason,&lt;br&gt;
no matter how you look at it, success of&amp;nbsp;these "scenarios", which are situations
or a set of rules that must be handled in a specific way, are viable to the success
of your project/product/feature development.&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;Ok, this is all great, but how all this relates to TDD ?&lt;br&gt;
&lt;/strong&gt;glad you asked this question, i see it in a very simple way:&lt;br&gt;
If the system fulfills all the acceptance criteria, it's behaving correctly.
&lt;/p&gt;
&lt;p&gt;
To summarize all this, 
&lt;br&gt;
i would say that BDD is a way to produce an idea for a requirement into an implemented,
tested production ready code.
&lt;/p&gt;
&lt;p&gt;
stay tuned for the second part about writing scenarios, development tools and more.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.krokhmal.com/aggbug.ashx?id=43c39973-73cb-4fd8-b24a-76a4ab2af2a8" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Shimon krokhmal, a part of the Krokhmal family</description>
      <comments>http://www.krokhmal.com/CommentView,guid,43c39973-73cb-4fd8-b24a-76a4ab2af2a8.aspx</comments>
      <category>Development process</category>
      <category>BDD</category>
    </item>
    <item>
      <trackback:ping>http://www.krokhmal.com/Trackback.aspx?guid=4990fe09-c85a-4d3a-af20-e5340ff80885</trackback:ping>
      <pingback:server>http://www.krokhmal.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.krokhmal.com/PermaLink,guid,4990fe09-c85a-4d3a-af20-e5340ff80885.aspx</pingback:target>
      <dc:creator>Shimon krokhmal</dc:creator>
      <wfw:comment>http://www.krokhmal.com/CommentView,guid,4990fe09-c85a-4d3a-af20-e5340ff80885.aspx</wfw:comment>
      <wfw:commentRss>http://www.krokhmal.com/SyndicationService.asmx/GetEntryCommentsRss?guid=4990fe09-c85a-4d3a-af20-e5340ff80885</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I'm sure that if you reading this blog, you have encountered a bug or two (at least).<br />
Now, as you know, often you have to solve bugs of other people that have been fired/left/not
available at the moment or just frustrated from it and need a fresh pair of eyes to
look at it.
</p>
        <p>
So, you need to deal with the bug, just you and him, like a dual, 
<br />
What do you do? , how do you confront this mysterious daemon?<br />
 <br />
Most of the people that inherit a bug, clueless regarding his data, try to confront
with it straight forward.<br />
Ask a common developer how would he handle a bug, 9 of 10 answers will be "debug".<br />
well, i think it's wrong, it's like knowing that there is a giant brick wall and still
running at full speed right in to it.<br />
(unless you are "The Hulk", it won't work)
</p>
        <p>
here is how I'm dealing with a bug :
</p>
        <ul>
          <li>
Bring it to your own game court - whenever you have a situation, it's always happens
in some environment.<br />
it's crucial to know it as it was your own place.<br />
suppose you have a .Net Web application running on a windows server 2003, you need
to know damn sure all the environment laws regarding it.<br />
thing like how IIS handle requests or how security configurations should be, are vital
to your diagnosis of the problem.<br /></li>
          <li>
Understand the symptoms right - i have a TV series that i watch , called "House",
it's about a brilliant diagnostician doctor that works mostly in unconventional ways
and solves the most bizarre cases by doing that.<br />
i tend to refer this TV series as an educational show on how to handle strange cases
and how to approach them.<br />
on one of it's episodes they had a brilliant dialog:<br />
- "House, the patients kidneys are shutting down"<br />
- "Great, we have another symptom"<br /></li>
          <li>
Write it down - get yourself a notebook or even a giant white-board to write
all these symptoms that you have found, it should be right in-front of you all the
time until you have solved the case.<br /></li>
          <li>
Ask yourself What can cause it ? - preferably do this out loud, ask your self that
question regarding each symptom that you found, maybe even with a team , that could
confirm it or deny your theories.<br /></li>
          <li>
What was changed ? - this is the most important question that you need to ask
yourself.<br />
things does not go wild on their own,if it worked before and now does not, then something
is changed.<br />
this would be our biggest clue to solve the problem !<br />
this could be an environmental change, a change in the situation that the application
handles or a coding change,<br />
each one of these can cause a problem, we need to understand which exactly is it.<br /></li>
          <li>
Develop a theory - this is the fun part, now you have all the data that you need to
solve this bug.<br />
you know how the environment behaves, you have the symptoms to the problem, things
that was been changed, and possible causes to our symptoms.<br />
now you need the sit a few minutes and think what is the reason that fits to all our
gathered data.<br /></li>
          <li>
Blind tests are the devil - most of them will give you nothing and consume much of
your precious time, Get a theory that you think that fits the symptoms and then
test it, not the other way around.<br /></li>
          <li>
Develop a solution to the problem - after we have our theory and we tested it, we
need to develop a solution that fixes the problem, this is the easy part.</li>
        </ul>
        <p>
for example, here is a problem that i have encountered almost a year ago:<br /><strong><br /><a href="http://www.krokhmal.com/2007/01/26/SolvingThe8007000eSystemResourceExceededError.aspx">8007000e
System resource exceeded<br />
Microsoft OLE DB Provider for ODBC Drivers error '8007000e' 
<br />
[Microsoft][ODBC Microsoft Access Driver] System resource exceeded.</a></strong></p>
        <p>
lets try to follow these guidelines and solve the problem:
</p>
        <p>
          <strong>Bring it to your own game court </strong>- this is a windows environment
that runs an asp web application based on Microsoft access.<br /><strong>Understand the right symptoms </strong>- we have a database that denies
any further connections due to resource limits.<br /><strong>Write it down </strong>- take a moment to look at those symptoms.<br /><strong>Ask yourself what can cause it</strong> - it could be an environmental
cause, like connection limits are not enough, or coding mistake that suffers from
not closing an opened connection.<br /><strong>What was changed ?  </strong>- code wasn't changed, all system configurations
was not changed, traffic to your site is doubled.<br /><strong>Develop a theory - </strong>since the traffic was doubled, the connections
are doubled as well, and thus reaching to the connection limit of our application.<br />
why the application does not clearing the connection resources ? - because the code
that opens them does not close them, thus the connections piled up and reaching the
connection limit way before the recycling process started.<br /><strong>Test it </strong>- recycle the connection pool, simulate traffic that won't
be in the connections limit(simultaneously), but can be piled up to reach the limit.<br /><strong>Develop a solution to the problem </strong>- if you are intrested for this
solution , you can check out my <a href="http://www.krokhmal.com/2007/01/26/SolvingThe8007000eSystemResourceExceededError.aspx">post </a>about
it
</p>
        <p>
        </p>
        <img width="0" height="0" src="http://www.krokhmal.com/aggbug.ashx?id=4990fe09-c85a-4d3a-af20-e5340ff80885" />
        <br />
        <hr />
Shimon krokhmal, a part of the Krokhmal family</body>
      <title>Another bug bites the dust - complete guide to a road of happiness</title>
      <guid isPermaLink="false">http://www.krokhmal.com/PermaLink,guid,4990fe09-c85a-4d3a-af20-e5340ff80885.aspx</guid>
      <link>http://www.krokhmal.com/2007/10/13/AnotherBugBitesTheDustCompleteGuideToARoadOfHappiness.aspx</link>
      <pubDate>Sat, 13 Oct 2007 12:29:56 GMT</pubDate>
      <description>&lt;p&gt;
I'm sure that if you reading this blog, you have encountered a bug or two (at least).&lt;br&gt;
Now, as you know, often you have to solve bugs of other people that have been fired/left/not
available at the moment or just frustrated from it and need a fresh pair of eyes to
look at it.
&lt;/p&gt;
&lt;p&gt;
So, you need to deal with the bug, just you and him, like a dual, 
&lt;br&gt;
What do you do? , how do you confront this mysterious daemon?&lt;br&gt;
&amp;nbsp;&lt;br&gt;
Most of the people that inherit a bug, clueless regarding his data, try to confront
with it straight forward.&lt;br&gt;
Ask a common developer how would he handle a bug, 9 of 10 answers will be "debug".&lt;br&gt;
well, i think it's wrong, it's like knowing that there is a giant brick wall and still
running at full speed right in to it.&lt;br&gt;
(unless you are "The Hulk", it won't work)
&lt;/p&gt;
&lt;p&gt;
here is how I'm dealing with a bug :
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Bring it to your own game court - whenever you have a situation, it's always happens
in some environment.&lt;br&gt;
it's crucial to know it as it was your own place.&lt;br&gt;
suppose you have a .Net Web application running on a windows server 2003, you need
to know damn sure all the environment laws regarding it.&lt;br&gt;
thing like how IIS handle requests or how security configurations should be, are vital
to your diagnosis of the problem.&lt;br&gt;
&lt;li&gt;
Understand the symptoms right - i have a TV series that i watch , called "House",
it's about a brilliant diagnostician doctor that works mostly in unconventional ways
and solves the most bizarre cases by doing that.&lt;br&gt;
i tend to refer this TV series as an educational show on how to handle strange cases
and how to approach them.&lt;br&gt;
on one of it's episodes they had a brilliant dialog:&lt;br&gt;
- "House, the patients kidneys are shutting down"&lt;br&gt;
- "Great, we have another symptom"&lt;br&gt;
&lt;li&gt;
Write it down - get yourself a notebook or even&amp;nbsp;a giant white-board to write
all these symptoms that you have found, it should be right in-front of you all the
time until you have solved the case.&lt;br&gt;
&lt;li&gt;
Ask yourself What can cause it ? - preferably do this out loud, ask your self that
question regarding each symptom that you found, maybe even with a team , that could
confirm it or deny your theories.&lt;br&gt;
&lt;li&gt;
What was changed ? - this is the most important question that&amp;nbsp;you need to ask
yourself.&lt;br&gt;
things does not go wild on their own,if it worked before and now does not, then something
is changed.&lt;br&gt;
this would be our biggest clue to solve the problem !&lt;br&gt;
this could be an environmental&amp;nbsp;change, a change in the situation that the application
handles or a coding change,&lt;br&gt;
each one of these can cause a problem, we need to understand which exactly is it.&lt;br&gt;
&lt;li&gt;
Develop a theory - this is the fun part, now you have all the data that you need to
solve this bug.&lt;br&gt;
you know how the environment behaves, you have the symptoms to the problem, things
that was been changed, and possible causes to our symptoms.&lt;br&gt;
now you need the sit a few minutes and think what is the reason that fits to all our
gathered data.&lt;br&gt;
&lt;li&gt;
Blind tests are the devil - most of them will give you nothing and consume much of
your precious time, Get a theory that you think that fits&amp;nbsp;the symptoms and then
test it, not the other way around.&lt;br&gt;
&lt;li&gt;
Develop a solution to the problem - after we have our theory and we tested it, we
need to develop a solution that fixes the problem, this is the easy part.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
for example, here is a problem that i have encountered almost a year ago:&lt;br&gt;
&lt;strong&gt;
&lt;br&gt;
&lt;a href="http://www.krokhmal.com/2007/01/26/SolvingThe8007000eSystemResourceExceededError.aspx"&gt;8007000e
System resource exceeded&lt;br&gt;
Microsoft OLE DB Provider for ODBC Drivers error '8007000e' 
&lt;br&gt;
[Microsoft][ODBC Microsoft Access Driver] System resource exceeded.&lt;/a&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
lets try to follow these guidelines and solve the problem:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Bring it to your own game court&amp;nbsp;&lt;/strong&gt;- this is a windows environment
that runs an asp web application based on Microsoft access.&lt;br&gt;
&lt;strong&gt;Understand the right symptoms&amp;nbsp;&lt;/strong&gt;- we have a database that denies
any further connections due to resource limits.&lt;br&gt;
&lt;strong&gt;Write it down &lt;/strong&gt;- take a moment to look at those symptoms.&lt;br&gt;
&lt;strong&gt;Ask yourself what can cause it&lt;/strong&gt;&amp;nbsp;- it could be an environmental
cause, like connection limits are not enough, or coding mistake that suffers from
not closing an opened connection.&lt;br&gt;
&lt;strong&gt;What was changed ?&amp;nbsp; &lt;/strong&gt;- code wasn't changed, all system configurations
was not changed, traffic to your site is doubled.&lt;br&gt;
&lt;strong&gt;Develop a theory - &lt;/strong&gt;since the traffic was doubled, the connections
are doubled as well, and thus reaching to the connection limit of our application.&lt;br&gt;
why the application does not clearing the connection resources ? - because the code
that opens them does not close them, thus the connections piled up and reaching the
connection limit way before the recycling process started.&lt;br&gt;
&lt;strong&gt;Test it &lt;/strong&gt;- recycle the connection pool, simulate traffic that won't
be in the connections limit(simultaneously), but can be piled up to reach the limit.&lt;br&gt;
&lt;strong&gt;Develop a solution to the problem &lt;/strong&gt;- if you are intrested for this
solution , you can check out my &lt;a href="http://www.krokhmal.com/2007/01/26/SolvingThe8007000eSystemResourceExceededError.aspx"&gt;post &lt;/a&gt;about
it
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.krokhmal.com/aggbug.ashx?id=4990fe09-c85a-4d3a-af20-e5340ff80885" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Shimon krokhmal, a part of the Krokhmal family</description>
      <comments>http://www.krokhmal.com/CommentView,guid,4990fe09-c85a-4d3a-af20-e5340ff80885.aspx</comments>
      <category>Lessons</category>
      <category>Development process</category>
    </item>
  </channel>
</rss>