<?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>Test Driven Developer - ATDD</title>
    <link>http://testdrivendeveloper.com/</link>
    <description>You got a TEST for that?</description>
    <language>en-us</language>
    <copyright>John E. Boal</copyright>
    <lastBuildDate>Sat, 15 Nov 2008 21:08:59 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.1.8102.813</generator>
    <managingEditor>web_master1@TestDrivenDeveloper.com</managingEditor>
    <webMaster>web_master1@TestDrivenDeveloper.com</webMaster>
    <item>
      <trackback:ping>http://testdrivendeveloper.com/Trackback.aspx?guid=e36a37f3-53c9-460d-8042-ee50090f0ad0</trackback:ping>
      <pingback:server>http://testdrivendeveloper.com/pingback.aspx</pingback:server>
      <pingback:target>http://testdrivendeveloper.com/PermaLink,guid,e36a37f3-53c9-460d-8042-ee50090f0ad0.aspx</pingback:target>
      <dc:creator>John E. Boal</dc:creator>
      <wfw:comment>http://testdrivendeveloper.com/CommentView,guid,e36a37f3-53c9-460d-8042-ee50090f0ad0.aspx</wfw:comment>
      <wfw:commentRss>http://testdrivendeveloper.com/SyndicationService.asmx/GetEntryCommentsRss?guid=e36a37f3-53c9-460d-8042-ee50090f0ad0</wfw:commentRss>
      <title>Unit Testing and Test Driven Development - a Practical Guide</title>
      <guid isPermaLink="false">http://testdrivendeveloper.com/PermaLink,guid,e36a37f3-53c9-460d-8042-ee50090f0ad0.aspx</guid>
      <link>http://TestDrivenDeveloper.com/2008/11/15/UnitTestingAndTestDrivenDevelopmentAPracticalGuide.aspx</link>
      <pubDate>Sat, 15 Nov 2008 21:08:59 GMT</pubDate>
      <description>&lt;div&gt;Here is a presentation I wrote on what Unit Testing is all about, and how TDD fits into the ATDD cycle.&lt;br&gt;&lt;br&gt;There are specific things here on testing the UI code with Selenium and JSUnit, and recommendations on how to do unit testing on your database code.&lt;br&gt;&lt;br&gt;This presentation is in PDF format, but I can post the PPTX format also if needed.&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;a href="http://testdrivendeveloper.com/content/binary/A%20Practical%20Guide%20to%20Unit%20Testing1.pdf"&gt;A Practical Guide to Unit Testing1.pdf (503.29 KB)&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;img width="0" height="0" src="http://testdrivendeveloper.com/aggbug.ashx?id=e36a37f3-53c9-460d-8042-ee50090f0ad0"/&gt;&lt;/div&gt;</description>
      <comments>http://testdrivendeveloper.com/CommentView,guid,e36a37f3-53c9-460d-8042-ee50090f0ad0.aspx</comments>
      <category>ATDD</category>
      <category>Mocks</category>
      <category>Refactoring</category>
      <category>Selenium</category>
      <category>TDD</category>
      <category>Testing</category>
      <category>Unit Tests</category>
      <category>SQL</category>
    </item>
    <item>
      <trackback:ping>http://testdrivendeveloper.com/Trackback.aspx?guid=5872ed9c-4504-4cef-909d-4e2efe0d7269</trackback:ping>
      <pingback:server>http://testdrivendeveloper.com/pingback.aspx</pingback:server>
      <pingback:target>http://testdrivendeveloper.com/PermaLink,guid,5872ed9c-4504-4cef-909d-4e2efe0d7269.aspx</pingback:target>
      <dc:creator>John E. Boal</dc:creator>
      <wfw:comment>http://testdrivendeveloper.com/CommentView,guid,5872ed9c-4504-4cef-909d-4e2efe0d7269.aspx</wfw:comment>
      <wfw:commentRss>http://testdrivendeveloper.com/SyndicationService.asmx/GetEntryCommentsRss?guid=5872ed9c-4504-4cef-909d-4e2efe0d7269</wfw:commentRss>
      <title>Sample Code for Selenium and WatiN tests</title>
      <guid isPermaLink="false">http://testdrivendeveloper.com/PermaLink,guid,5872ed9c-4504-4cef-909d-4e2efe0d7269.aspx</guid>
      <link>http://TestDrivenDeveloper.com/2008/08/26/SampleCodeForSeleniumAndWatiNTests.aspx</link>
      <pubDate>Tue, 26 Aug 2008 15:03:11 GMT</pubDate>
      <description>&lt;div&gt;I posted a simple sample of accepance test code in Selenium and WatiN along with a sample web site to test. You can download the zip file &lt;a href="http://agilebug.com/ct.ashx?id=f4b673d3-cdfe-4a3d-b740-907c1b2cb362&amp;amp;url=http%3a%2f%2fagilebug.com%2fcontent%2fbinary%2fATDDdemo.zip"&gt;here&lt;/a&gt;.&lt;br&gt;&lt;br&gt;I also have posted a Fitnesse fixture in that zip file that illustrates how we can create a simple test fixture for Fitnesse acceptance testing. The Fitnesse tests aren't in the set, but here is the page wiki code that makes use of the fixture:&lt;br&gt;&lt;br&gt;&lt;font face="Courier New" size="2"&gt;!define COMMAND_PATTERN {%m %p}&lt;br&gt;!define TEST_RUNNER {dotnet\FitServer.exe}&lt;br&gt;!define PATH_SEPARATOR {;}&lt;br&gt;!path dotnet\*.dll&lt;br&gt;&lt;br&gt;Here is an acceptance test using our BusinessObjectTestFixture test class:&lt;br&gt;&lt;br&gt;!|FitnesseFixture.BusinessObjectTestFixture|&lt;br&gt;|UserId|Password|Authenticate()|&lt;br&gt;|administrator|secret0|ADMIN|&lt;br&gt;|admin|secret0|NONE|&lt;br&gt;|administrator|secret|NONE|&lt;br&gt;|user11|secret11|USER|&lt;br&gt;|user11|secret0|NONE|&lt;br&gt;|user|secret|NONE|&lt;br&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;I also created some STIQ tests, here is the code for the tests and components. Extract this zip file under repository\ProjectRoot folder and it should be able to test the sample site also.&lt;br&gt;&lt;br&gt;&lt;a href="http://testdrivendeveloper.com/content/binary/ATDDSTIQ.zip"&gt;ATDDSTIQ.zip (3.57 KB)&lt;/a&gt;&lt;img width="0" height="0" src="http://testdrivendeveloper.com/aggbug.ashx?id=5872ed9c-4504-4cef-909d-4e2efe0d7269"/&gt;&lt;/div&gt;</description>
      <comments>http://testdrivendeveloper.com/CommentView,guid,5872ed9c-4504-4cef-909d-4e2efe0d7269.aspx</comments>
      <category>ATDD</category>
      <category>Automation</category>
      <category>Selenium</category>
      <category>TDD</category>
      <category>Testing</category>
      <category>Tools</category>
      <category>WatiN</category>
    </item>
    <item>
      <trackback:ping>http://testdrivendeveloper.com/Trackback.aspx?guid=d9596525-4a35-4de9-bfb0-23ed923a176d</trackback:ping>
      <pingback:server>http://testdrivendeveloper.com/pingback.aspx</pingback:server>
      <pingback:target>http://testdrivendeveloper.com/PermaLink,guid,d9596525-4a35-4de9-bfb0-23ed923a176d.aspx</pingback:target>
      <dc:creator>John E. Boal</dc:creator>
      <wfw:comment>http://testdrivendeveloper.com/CommentView,guid,d9596525-4a35-4de9-bfb0-23ed923a176d.aspx</wfw:comment>
      <wfw:commentRss>http://testdrivendeveloper.com/SyndicationService.asmx/GetEntryCommentsRss?guid=d9596525-4a35-4de9-bfb0-23ed923a176d</wfw:commentRss>
      <title>Acceptance Criteria: Interview with the Customer</title>
      <guid isPermaLink="false">http://testdrivendeveloper.com/PermaLink,guid,d9596525-4a35-4de9-bfb0-23ed923a176d.aspx</guid>
      <link>http://TestDrivenDeveloper.com/2008/07/17/AcceptanceCriteriaInterviewWithTheCustomer.aspx</link>
      <pubDate>Thu, 17 Jul 2008 04:37:30 GMT</pubDate>
      <description>&lt;div&gt;I often talk of Acceptance Test driven development, and how we can turn acceptance criteria into automated tests that illustrate that our software is doing the job the customer wants. However, sometimes it can be difficult to "extract" these criteria. This is a scenario where a customer needs a web control to take some raw data and turn it into a chart, and stream it to the user on the fly.&lt;br&gt;&lt;br&gt;Conversation (we'll keep track of acceptance criteria in italics)&lt;br&gt;&lt;br&gt;

We need a chart control that will stream an image to the user.&lt;br&gt;What kind of image? PNG for now. Possibly GIF later.&lt;br&gt;&lt;i&gt;1. Needs to produce streaming PNG image. Don't bother with GIF yet, probably &lt;a href="http://en.wikipedia.org/wiki/You_Ain%27t_Gonna_Need_It"&gt;YAGNI&lt;/a&gt; anyway.&lt;br&gt;&lt;br&gt;&lt;/i&gt;Great. Where does the data for the chart come from?&lt;br&gt;A database. SQL? Yes. Is there a stored procedure?&lt;br&gt;Yes, the page can talk directly to the DB. OK, good.&lt;br&gt;I can get specifics and the schema from the DBA? Yes.&lt;br&gt;&lt;i&gt;2. Data is read from calling a stored proc in a SQL database. Talk to DBA.&lt;br&gt;&lt;/i&gt;&lt;br&gt;Ok, what kind of a chart is it? Line, bar, XY, pie, or something else?&lt;br&gt;Basically a line chart. OK.&lt;br&gt;&lt;i&gt;3. Line chart&lt;/i&gt;&lt;br&gt;&lt;br&gt;What are the axes? Time on the horizontal and data on the vertical.&lt;br&gt;&lt;i&gt;4. Data are plotted chronologically.&lt;/i&gt;&lt;br&gt;&lt;br&gt;If the chart is 640x480 pixels, is that OK?&lt;br&gt;No, size needs to be able to vary from 320x240 to 1024x768, depending on the caller.&lt;br&gt;Gotcha - so we'll need to parameterize the size. Yes, that would be good.&lt;br&gt;&lt;i&gt;5. Height and Width need to be specified.&lt;br&gt;6. Min is 320x240, max is 1024x768.&lt;br&gt;&lt;/i&gt;&lt;br&gt;If someone requests over the max or under the min, can we substitute these end values&lt;br&gt;instead of the actual request? Yes.&lt;br&gt;&lt;i&gt;7. if invalid size, substitute valid size.&lt;/i&gt;&lt;br&gt;&lt;br&gt;What color is the background? Doesn't matter. How about the foreground? Don't care.&lt;br&gt;Well, would yellow on white work? No, that isn't enough contrast. I see, OK.&lt;br&gt;&lt;i&gt;8. Contrast between foreground and background.&lt;br&gt;&lt;/i&gt;&lt;br&gt;Back to the line chart, are there markers on the data? Yes, we need tick marks for each point.&lt;br&gt;Should these ticks be a different color than the line? Yes.&lt;br&gt;&lt;i&gt;9. Ticks are a different but still high contrast color from the line.&lt;br&gt;&lt;/i&gt;&lt;br&gt;Are there labels on the axes? Yes, time in HH:00 on each hour for horizontal, and unit values on the vertical.&lt;br&gt;How many unit labels? It varies, has to be speficied. OK, so are the labels on the time axis&lt;br&gt;vertically or horizontally oriented? Normal - horizontal. Oh, and I only want every third hour labeled.&lt;br&gt;OK, got it.&lt;br&gt;&lt;i&gt;10. Horizontal labels on X axis, alternating every third data point.&lt;br&gt;11. Parameterize the number of data labels on the Y axis.&lt;br&gt;&lt;/i&gt;...&lt;br&gt;&lt;br&gt;So you see that in just a few seconds conversation, we can come up with 11 acceptance criteria. Each of these criteria can be written up as a test, so that the customer can press a button and see a scenario that illustrates each of these criteria. We don't need a line of code written to have this conversation, record this criteria, or even to automate it. Of course our tests will fail until we write the code...&lt;br&gt;&lt;br&gt;We can also use tools like &lt;a href="http://fitnesse.org/"&gt;Fitnesse&lt;/a&gt; to show simple criteria and the outcome to a customer. However in the above example, it might be a bit difficult. We could have a "scenario" test that illustrates some of the conditions for the chart, and have the chart image itself in the results, so the customer can see the actual output in that scenario. I might be tempted instead to write an nUnit suite that I could run that would demonstrate the correct behavior in those scenarios. It depends also on the team's skill set, and the customer's expectations.&lt;br&gt;&lt;br&gt;If we do this kind of automation around acceptance criteria, we will make it very easy on our customers, and they will feel very confident that they are getting what they want. While it isn't all that easy to demonstrate automated acceptance criteria in all cases, it is worth an attempt at trying to see what we can do, given our project constraints.&lt;br&gt;&lt;br&gt;We also get the benefit of being able to run our acceptance automation, and in just a few seconds, we can tell if we are really "done" with the story. This kind of assurance gives us a definite advantage in being able to deliver future software down the road, because we can verify that the existing features still work as we add new ones.&lt;br&gt;&lt;br&gt;In practical terms, however, this kind of testing can be expensive - at first. Many customers are much less concerned about testing the software vs. just getting some code. In these cases, customers' expectations need to be set that there is actual value in the work done to verify that the code is going to work. The more critical the code, the easier it will be to sell. Even if the customer finds no value in the tests, they will still be impressed in the demo when they see a button pressed, and all tests come up green. I think there is really a psychological benefit for the customer, showing them a bunch of green tests. After all, they are giving us a bunch of green too, aren't they? They will see this and naturally be more confident, accepting and more trusting of our work.&lt;br&gt;&lt;br&gt;So, be sure to collect this criteria carefully. Make sure both the team and the customer are clear that the criteria is the agreed yard-stick on whether the software is working. Ask probing questions, and clarify the answers. Make sure you document the answers. And even if you find you don't have too much time, make sure to automate at least some of your acceptance criteria each sprint - and be sure to show it off in the demo.&lt;br&gt;&lt;img width="0" height="0" src="http://testdrivendeveloper.com/aggbug.ashx?id=d9596525-4a35-4de9-bfb0-23ed923a176d"/&gt;&lt;/div&gt;</description>
      <comments>http://testdrivendeveloper.com/CommentView,guid,d9596525-4a35-4de9-bfb0-23ed923a176d.aspx</comments>
      <category>Acceptance Criteria</category>
      <category>ATDD</category>
    </item>
    <item>
      <trackback:ping>http://testdrivendeveloper.com/Trackback.aspx?guid=9eda991a-3ada-4e70-84d8-1194fa5edda7</trackback:ping>
      <pingback:server>http://testdrivendeveloper.com/pingback.aspx</pingback:server>
      <pingback:target>http://testdrivendeveloper.com/PermaLink,guid,9eda991a-3ada-4e70-84d8-1194fa5edda7.aspx</pingback:target>
      <dc:creator>John E. Boal</dc:creator>
      <wfw:comment>http://testdrivendeveloper.com/CommentView,guid,9eda991a-3ada-4e70-84d8-1194fa5edda7.aspx</wfw:comment>
      <wfw:commentRss>http://testdrivendeveloper.com/SyndicationService.asmx/GetEntryCommentsRss?guid=9eda991a-3ada-4e70-84d8-1194fa5edda7</wfw:commentRss>
      <title>Acceptance Test Driven Development, Explained</title>
      <guid isPermaLink="false">http://testdrivendeveloper.com/PermaLink,guid,9eda991a-3ada-4e70-84d8-1194fa5edda7.aspx</guid>
      <link>http://TestDrivenDeveloper.com/2008/04/02/AcceptanceTestDrivenDevelopmentExplained.aspx</link>
      <pubDate>Wed, 02 Apr 2008 06:10:03 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;
&lt;table border="0" cellpadding="10" cellspacing="0" width="100%"&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;font color="#052230" face="Arial" size="2"&gt;Acceptance criteria should be our 
measuring stick when we write software. These criteria should give us the 
direction to go in writing features, and ultimately the final answer on whether 
the software is "done" or meets the customer's need. When the customer (or the 
customer representative, product owner, or business analyst) gives us a notion 
of what the software is to do for them, it represents a guideline and a goal for 
our development. 
&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;!-- BOF buynow --&gt;&lt;!-- EOF buynow --&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;!-- EOF: ./personal-templates/simple/generic/paragraphs/style.1 --&gt;&lt;/p&gt;
&lt;p&gt;&lt;!-- BOF: ./personal-templates/simple/generic/paragraphs/style.1 --&gt;
&lt;table border="0" cellpadding="10" cellspacing="0" width="100%"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;font color="#052230" face="Arial" size="2"&gt;This article is a discussion of ATDD 
in an Agile development context with Scrum project management and Extreme 
Programming [XP] development methodology. However it does not apply specifically 
to Agile. These same techniques can be applied with almost any mechanism. 
&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;!-- BOF buynow --&gt;&lt;!-- EOF buynow --&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;!-- EOF: ./personal-templates/simple/generic/paragraphs/style.1 --&gt;&lt;/p&gt;
&lt;p&gt;&lt;!-- BOF: ./personal-templates/simple/generic/paragraphs/style.1 --&gt;
&lt;table border="0" cellpadding="10" cellspacing="0" width="100%"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;font color="#052230" face="Arial" size="2"&gt;Test-Driven Development [TDD] says 
that we should first write a test before we write the code. This forces us to 
understand clearly what the code is to do, because we have to write the test to 
verify it. Writing the test is usually the hard part - the code next is easier. 
This is where the discipline of TDD is most needed. The test itself should be 
failing when executed, since we don't have the code under test [CUT]. This is a 
good sign - we need to actually "test the test." We then write as little CUT 
code as needed, just to make the test pass. Then, we start all over again - 
write a test, some more code, etc. We refactor the CUT as needed, to make it a 
cohesive, maintainable design, while still keeping all the tests passing. In 
this way, we have a complete test framework wrapped around our high-quality 
code, which makes certain that the code always functions the way we intended no 
matter what kinds of changes we make internally to it. &lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;!-- BOF buynow --&gt;&lt;!-- EOF buynow --&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;!-- EOF: ./personal-templates/simple/generic/paragraphs/style.1 --&gt;&lt;/p&gt;
&lt;p&gt;&lt;!-- BOF: ./personal-templates/simple/generic/paragraphs/style.1 --&gt;
&lt;table border="0" cellpadding="10" cellspacing="0" width="100%"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;font color="#052230" face="Arial" size="2"&gt;This process of TDD as described, is 
the traditional mechanism we now refer to at Unit Test-Driven Development, or 
UTDD. There are higher-level tests that we can write also, that have the same 
impact on our development process. Applying this same concept of a failing test 
driving us to write code is where this discussion now leads, but at one level of 
abstraction higher. We now look to the Acceptance Criteria to drive our TDD, or 
now ATDD. 
&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;!-- BOF buynow --&gt;&lt;!-- EOF buynow --&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;!-- EOF: ./personal-templates/simple/generic/paragraphs/style.1 --&gt;&lt;/p&gt;
&lt;p&gt;&lt;!-- BOF: ./personal-templates/simple/generic/paragraphs/style.1 --&gt;&lt;font color="#052230" face="Arial" size="2"&gt;&lt;font color="#052230" face="Arial" size="2"&gt;&lt;img src="/content/binary/ATDDdiagram.gif" border="0" height="561" width="791"&gt;&lt;/font&gt;&lt;/font&gt;&lt;!-- EOF: ./personal-templates/simple/generic/paragraphs/style.1 --&gt;&lt;/p&gt;
&lt;p&gt;&lt;!-- BOF: ./personal-templates/simple/generic/paragraphs/style.1 --&gt;
&lt;table border="0" cellpadding="10" cellspacing="0" width="100%"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;font color="#052230" face="Arial" size="2"&gt;1. Acceptance Criteria gives us a 
target for writing Automated Acceptance Tests [AAT's] a. Acceptance Criteria 
need to be written into an executable set of automated tests. b. AAT's should be 
able demonstrate to the customer that their criteria for the functionality has 
been met. c. Ideally, this should include as much detail as the requirements 
bear out, and as many tests and checks are necessary to convey that each of the 
criteria has been accounted for. &lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;!-- BOF buynow --&gt;&lt;!-- EOF buynow --&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;!-- EOF: ./personal-templates/simple/generic/paragraphs/style.1 --&gt;&lt;/p&gt;
&lt;p&gt;&lt;!-- BOF: ./personal-templates/simple/generic/paragraphs/style.1 --&gt;
&lt;table border="0" cellpadding="10" cellspacing="0" width="100%"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;font color="#052230" face="Arial" size="2"&gt;2. AAT's give us a reason to write 
code (they are failing - no CUT yet) a. AAT's can be written before writing the 
code, or written one at a time following this process. &lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;!-- BOF buynow --&gt;&lt;!-- EOF buynow --&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;!-- EOF: ./personal-templates/simple/generic/paragraphs/style.1 --&gt;&lt;/p&gt;
&lt;p&gt;&lt;!-- BOF: ./personal-templates/simple/generic/paragraphs/style.1 --&gt;
&lt;table border="0" cellpadding="10" cellspacing="0" width="100%"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;font color="#052230" face="Arial" size="2"&gt;3. We now write the empty framework 
for the CUT. Some AAT's may still be failing, but that's OK. a. This step 
deviates from strict TDD in that we are writing code, but not for the intent of 
passing a test. b. One example is that if a criteria states that a customer is 
able to bring up a web page with a set of information, obviously we need to 
provide a web page. c. This framework concept is creating the empty page or 
container for the code we are going to write. d. The empty framework should not 
cause AAT's to pass, because AAT's should written to test at a higher level of 
functionality. 
&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;!-- BOF buynow --&gt;&lt;!-- EOF buynow --&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;!-- EOF: ./personal-templates/simple/generic/paragraphs/style.1 --&gt;&lt;/p&gt;
&lt;p&gt;&lt;!-- BOF: ./personal-templates/simple/generic/paragraphs/style.1 --&gt;
&lt;table border="0" cellpadding="10" cellspacing="0" width="100%"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;font color="#052230" face="Arial" size="2"&gt;4. To make the AAT's pass, we need to 
start providing the functionality inside the empty framework. Here we need to 
apply the standard TDD concepts, and write a failing unit test. &lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;!-- BOF buynow --&gt;&lt;!-- EOF buynow --&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;!-- EOF: ./personal-templates/simple/generic/paragraphs/style.1 --&gt;&lt;/p&gt;
&lt;p&gt;&lt;!-- BOF: ./personal-templates/simple/generic/paragraphs/style.1 --&gt;
&lt;table border="0" cellpadding="10" cellspacing="0" width="100%"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;font color="#052230" face="Arial" size="2"&gt;5. We now have a failing unit test, so 
we write enough CUT to pass that test. &lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;!-- BOF buynow --&gt;&lt;!-- EOF buynow --&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;!-- EOF: ./personal-templates/simple/generic/paragraphs/style.1 --&gt;&lt;/p&gt;
&lt;p&gt;&lt;!-- BOF: ./personal-templates/simple/generic/paragraphs/style.1 --&gt;
&lt;table border="0" cellpadding="10" cellspacing="0" width="100%"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;font color="#052230" face="Arial" size="2"&gt;6. We repeat at step 4, refactor, and 
continue following the UTDD process as described above. &lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;!-- BOF buynow --&gt;&lt;!-- EOF buynow --&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;!-- EOF: ./personal-templates/simple/generic/paragraphs/style.1 --&gt;&lt;/p&gt;
&lt;p&gt;&lt;!-- BOF: ./personal-templates/simple/generic/paragraphs/style.1 --&gt;
&lt;table border="0" cellpadding="10" cellspacing="0" width="100%"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;font color="#052230" face="Arial" size="2"&gt;7. When the functionality that the 
AAT's require is there, they will be passing, Unit Tests [UT's] are passing, and 
our story (feature) is complete. We now continue to step 1 again for the next 
story. 
&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;!-- BOF buynow --&gt;&lt;!-- EOF buynow --&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;!-- EOF: ./personal-templates/simple/generic/paragraphs/style.1 --&gt;&lt;/p&gt;
&lt;p&gt;&lt;!-- BOF: ./personal-templates/simple/generic/paragraphs/style.1 --&gt;
&lt;table border="0" cellpadding="10" cellspacing="0" width="100%"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;font color="#052230" face="Arial" size="2"&gt;&lt;font size="2"&gt;&lt;span style="font-weight: bold; font-family: Verdana;"&gt;How do I do it? What do I need 
to get started?&lt;/span&gt;&lt;br style="font-weight: bold; font-family: Verdana;"&gt;&lt;br style="font-family: Verdana;"&gt;&lt;span style="font-family: Verdana;"&gt;Acceptance Test 
Driven Development is a practice that can yield good returns on the time 
invested. Customers will be pleased with the software they receive, bugs will be 
fewer, and delivery times will be shorter. However, there are a few things that 
are needed to make this practice effective in an 
organization.&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;/font&gt;
&lt;/font&gt;&lt;ol&gt;&lt;font color="#052230" face="Arial" size="2"&gt;&lt;li&gt;&lt;font size="2"&gt;Buy-in&lt;/font&gt;
&lt;ol&gt;&lt;li&gt;&lt;font size="2"&gt;People must be bought-in to the concept that test driven 
development is a good thing.&lt;/font&gt;
&lt;/li&gt;&lt;li&gt;&lt;font size="2"&gt;Management must support this practice, for if not, it will be a 
much more difficult thing to accomplish.&lt;/font&gt;
&lt;/li&gt;&lt;li&gt;&lt;font size="2"&gt;Developers must be willing to put aside their "classical" 
training and try something new.&lt;br&gt;&lt;/font&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;/li&gt;&lt;li&gt;&lt;font size="2"&gt;Testing Tools&lt;/font&gt;&lt;font color="#052230" face="Arial" size="2"&gt;&lt;/font&gt;
&lt;ol&gt;&lt;li&gt;&lt;font size="2"&gt;If we can't write an automated acceptance test for our product, 
we can't do ATDD. We need a tool designed for testing the particular type of 
product we are shipping.&lt;/font&gt;
&lt;/li&gt;&lt;li&gt;&lt;font size="2"&gt;Story Test IQ [STIQ] is a great tool for automated testing of 
web applications. Straight Selenium RC under C# code, driven by NUnit also works great, in my experience. VSTS has some good tools also, as do Fiddler, and probably 
lots of other products.&lt;/font&gt;
&lt;/li&gt;&lt;li&gt;&lt;font size="2"&gt;The framework must be in place on day 1 of the iteration to 
begin writing acceptance tests. If it isn't available, we won't be able to do 
ATDD.&lt;br&gt;&lt;/font&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;/li&gt;&lt;li&gt;&lt;font size="2"&gt;Skills&lt;/font&gt;
&lt;ol&gt;&lt;li&gt;&lt;font size="2"&gt;Developers need the skills to be able to envision what is to be 
delivered, and be able to write automated test scenarios for the acceptance 
criteria.&lt;br&gt;&lt;/font&gt;
&lt;/li&gt;&lt;li&gt;&lt;font size="2"&gt;Testers need to be able to validate that the tests cover enough 
of the functionality through testing the criteria, and provide other functional, 
integration, load, and performance tests in addition to the developers' unit 
tests and acceptance tests.&lt;br&gt;&lt;/font&gt;
&lt;/li&gt;&lt;li&gt;&lt;font size="2"&gt;Management needs to be able to direct the right resources at 
tasks, no matter whether they are Development or Test tasks. Sometimes it's best 
to blur the lines between the disciplines to make this practice most 
effective.&lt;br&gt;&lt;/font&gt;
&lt;/li&gt;&lt;li&gt;&lt;font size="2"&gt;Customers need to be aware that they are actually going to get 
what they specify (and perhaps ONLY that much). Education on criteria evolution 
is almost always required for customers. Don't be surprised if only 50% of the 
criteria are discovered in sprint planning a&lt;/font&gt;&lt;font size="2"&gt;nd story generation for the first 
couple of iterations.&lt;br&gt;&lt;/font&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;/li&gt;&lt;li&gt;&lt;font size="2"&gt;Experience&lt;/font&gt;
&lt;ol&gt;&lt;li&gt;&lt;font size="2"&gt;TDD takes discipline, and ATDD even more so. This is not a 
practice for an organization just beginning down the road of TDD. Put in at 
least 6 iterations of using strict TDD first before trying ATDD. The experience 
gained with using TDD will naturally flow into ATDD, and the organization and 
the customers will see the benefits.&lt;br&gt;&lt;/font&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;/li&gt;&lt;li&gt;&lt;font size="2"&gt;Perseverance&lt;/font&gt;
&lt;ol&gt;&lt;li&gt;&lt;font size="2"&gt;Good things don't happen instantly. It takes some time to see 
the benefits of ATDD.&lt;/font&gt;
&lt;/li&gt;&lt;li&gt;&lt;font size="2"&gt;Be patient for a few sprints. It should take approximately 
three iterations to get it dialed in.&lt;br&gt;&lt;/font&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;/li&gt;&lt;li&gt;&lt;font size="2"&gt;Customer Cooperation&lt;/font&gt;
&lt;ol&gt;&lt;li&gt;&lt;font size="2"&gt;Customers must be available for providing their criteria for 
acceptance.&lt;/font&gt;
&lt;/li&gt;&lt;li&gt;&lt;font size="2"&gt;Customers generally are not experts in this type of 
"specification" of criteria, and must often be helped through the process at 
first, to generate usable criteria.&lt;br&gt;&lt;/font&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/font&gt;&lt;/ol&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://testdrivendeveloper.com/aggbug.ashx?id=9eda991a-3ada-4e70-84d8-1194fa5edda7"/&gt;&lt;/div&gt;</description>
      <comments>http://testdrivendeveloper.com/CommentView,guid,9eda991a-3ada-4e70-84d8-1194fa5edda7.aspx</comments>
      <category>ATDD</category>
      <category>TDD</category>
      <category>Testing</category>
    </item>
    <item>
      <trackback:ping>http://testdrivendeveloper.com/Trackback.aspx?guid=6a38c2cf-ed78-4deb-8ad3-c3f2afa9c38c</trackback:ping>
      <pingback:server>http://testdrivendeveloper.com/pingback.aspx</pingback:server>
      <pingback:target>http://testdrivendeveloper.com/PermaLink,guid,6a38c2cf-ed78-4deb-8ad3-c3f2afa9c38c.aspx</pingback:target>
      <dc:creator>John E. Boal</dc:creator>
      <wfw:comment>http://testdrivendeveloper.com/CommentView,guid,6a38c2cf-ed78-4deb-8ad3-c3f2afa9c38c.aspx</wfw:comment>
      <wfw:commentRss>http://testdrivendeveloper.com/SyndicationService.asmx/GetEntryCommentsRss?guid=6a38c2cf-ed78-4deb-8ad3-c3f2afa9c38c</wfw:commentRss>
      <title>Testing? Aren't I a Developer?</title>
      <guid isPermaLink="false">http://testdrivendeveloper.com/PermaLink,guid,6a38c2cf-ed78-4deb-8ad3-c3f2afa9c38c.aspx</guid>
      <link>http://TestDrivenDeveloper.com/2008/03/24/TestingArentIADeveloper.aspx</link>
      <pubDate>Mon, 24 Mar 2008 05:47:08 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;
&lt;table border="0" cellpadding="10" cellspacing="0" width="100%"&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;font color="#052230" face="Arial" size="2"&gt;Aren't developers just supposed to 
write their code and let the test team test it? 
&lt;/font&gt;&lt;p&gt;&lt;font color="#052230" face="Arial" size="2"&gt;ahem. 
&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#052230" face="Arial" size="2"&gt;no. 
&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#052230" face="Arial" size="2"&gt;As a developer, I take pride in delivering *working* software. If I don't 
test my own software, I think that I'm really failing to do my job. Testing is 
not just for "testers." 
&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#052230" face="Arial" size="2"&gt;As a professional software engineer, I need have not only unit tests for my 
code (a Development practice by the way), but I also need to write automated 
functional tests to make sure that all the functionality works as I think it 
should. Then, I need to have automated Acceptance tests that tell me if indeed 
the whole system works together to deliver the business solution that the story 
or requirements describe. 
&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;!-- EOF: ./personal-templates/simple/generic/paragraphs/style.1 --&gt;&lt;/p&gt;
&lt;p&gt;&lt;!-- BOF: ./personal-templates/simple/generic/paragraphs/style.1 --&gt;
&lt;table border="0" cellpadding="10" cellspacing="0" width="100%"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td colspan="2" align="center"&gt;&lt;font color="#96372b" face="Arial" size="+1"&gt;Acceptance 
Tests &lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;font color="#052230" face="Arial" size="2"&gt;Why do I start with acceptance tests? 
&lt;/font&gt;&lt;p&gt;&lt;font color="#052230" face="Arial" size="2"&gt;Because... they should drive the entire development process. Test-Driven 
Development doesn't necessarily have to *always* mean Unit Test-Driven 
Development... 
&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#052230" face="Arial" size="2"&gt;The Acceptance tests drive me to write code.&lt;br&gt;In order to write code, I 
need a unit test.&lt;br&gt;Then I can write the code that passes the unit test and the 
acceptance test.
&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#052230" face="Arial" size="2"&gt;job well done. 
&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;!-- EOF: ./personal-templates/simple/generic/paragraphs/style.1 --&gt;&lt;/p&gt;
&lt;p&gt;&lt;!-- BOF: ./personal-templates/simple/generic/paragraphs/style.1 --&gt;
&lt;table border="0" cellpadding="10" cellspacing="0" width="100%"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td colspan="2" align="center"&gt;&lt;font color="#96372b" face="Arial" size="+1"&gt;Unit Tests 
&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;font color="#052230" face="Arial" size="2"&gt;I write enough unit tests to be able 
to make sure that the functionality I write works as I intended. Not too many - 
tests require maintenance as well as the code they test - but enough to ensure 
that it's safe to refactor just about anything in the code and make sure that it 
still works as intended. This is the safety net that unit tests provide. 
&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;!-- BOF buynow --&gt;&lt;!-- EOF buynow --&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;!-- EOF: ./personal-templates/simple/generic/paragraphs/style.1 --&gt;&lt;/p&gt;
&lt;p&gt;&lt;!-- BOF: ./personal-templates/simple/generic/paragraphs/style.1 --&gt;
&lt;table border="0" cellpadding="10" cellspacing="0" width="100%"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td colspan="2" align="center"&gt;&lt;font color="#96372b" face="Arial" size="+1"&gt;Code 
&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;font color="#052230" face="Arial" size="2"&gt;Write some. It should make the tests 
pass. Failure is not an option. &lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;!-- BOF buynow --&gt;&lt;!-- EOF buynow --&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;!-- EOF: ./personal-templates/simple/generic/paragraphs/style.1 --&gt;&lt;/p&gt;
&lt;p&gt;&lt;!-- BOF: ./personal-templates/simple/generic/paragraphs/style.1 --&gt;
&lt;table border="0" cellpadding="10" cellspacing="0" width="100%"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td colspan="2" align="center"&gt;&lt;font color="#96372b" face="Arial" size="+1"&gt;Functional 
Tests &lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;font color="#052230" face="Arial" size="2"&gt;We need to make sure that all the 
pieces of functionality behave in a known way. This is what functional testing 
does. 
&lt;/font&gt;&lt;p&gt;&lt;br&gt;&lt;br&gt;&lt;!-- BOF buynow --&gt;&lt;!-- EOF buynow --&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;!-- EOF: ./personal-templates/simple/generic/paragraphs/style.1 --&gt;&lt;/p&gt;
&lt;p&gt;&lt;!-- BOF: ./personal-templates/simple/generic/paragraphs/style.1 --&gt;
&lt;table border="0" cellpadding="10" cellspacing="0" width="100%"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td colspan="2" align="center"&gt;&lt;font color="#96372b" face="Arial" size="+1"&gt;Integration 
Tests &lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;font color="#052230" face="Arial" size="2"&gt;We need to make sure that all the 
systems co-operate. Integration tests are deeper yet than functional tests, 
these are more like "end-to-end" tests of particular scenarios. Usually these 
scenarios cover all the happy paths of end-to-end, and most likely a couple of 
failure scenarios as well, to illustrate how the system overall behaves in 
failure modes. 
&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;!-- BOF buynow --&gt;&lt;!-- EOF buynow --&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;!-- EOF: ./personal-templates/simple/generic/paragraphs/style.1 --&gt;&lt;/p&gt;
&lt;p&gt;&lt;!-- BOF: ./personal-templates/simple/generic/paragraphs/style.1 --&gt;
&lt;table border="0" cellpadding="10" cellspacing="0" width="100%"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td colspan="2" align="center"&gt;&lt;font color="#96372b" face="Arial" size="+1"&gt;Deployment 
Tests &lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;font color="#052230" face="Arial" size="2"&gt;You DID want to INSTALL the software 
and use it, right? 
&lt;/font&gt;&lt;p&gt;&lt;font color="#052230" face="Arial" size="2"&gt;So... you got a test for that? 
&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#052230" face="Arial" size="2"&gt;Sure you do. 
&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#052230" face="Arial" size="2"&gt;Deployment tests are essential for making sure the software delivers and 
configures the binary bits in a way that's useful to the user. Uninstall is a 
particularly critical issue as well. Make sure that you have complete testing 
around these critical fundamental features of the software. &lt;/font&gt;&lt;br&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://testdrivendeveloper.com/aggbug.ashx?id=6a38c2cf-ed78-4deb-8ad3-c3f2afa9c38c"/&gt;&lt;/div&gt;</description>
      <comments>http://testdrivendeveloper.com/CommentView,guid,6a38c2cf-ed78-4deb-8ad3-c3f2afa9c38c.aspx</comments>
      <category>ATDD</category>
      <category>TDD</category>
      <category>Testing</category>
    </item>
    <item>
      <trackback:ping>http://testdrivendeveloper.com/Trackback.aspx?guid=36f87b85-6fba-404d-86e9-9c069b081688</trackback:ping>
      <pingback:server>http://testdrivendeveloper.com/pingback.aspx</pingback:server>
      <pingback:target>http://testdrivendeveloper.com/PermaLink,guid,36f87b85-6fba-404d-86e9-9c069b081688.aspx</pingback:target>
      <dc:creator>John E. Boal</dc:creator>
      <wfw:comment>http://testdrivendeveloper.com/CommentView,guid,36f87b85-6fba-404d-86e9-9c069b081688.aspx</wfw:comment>
      <wfw:commentRss>http://testdrivendeveloper.com/SyndicationService.asmx/GetEntryCommentsRss?guid=36f87b85-6fba-404d-86e9-9c069b081688</wfw:commentRss>
      <title>ATDD - Acceptance Test Driven Development</title>
      <guid isPermaLink="false">http://testdrivendeveloper.com/PermaLink,guid,36f87b85-6fba-404d-86e9-9c069b081688.aspx</guid>
      <link>http://TestDrivenDeveloper.com/2008/03/14/ATDDAcceptanceTestDrivenDevelopment.aspx</link>
      <pubDate>Fri, 14 Mar 2008 05:39:09 GMT</pubDate>
      <description>&lt;div&gt;&lt;div id="TopicBody"&gt;
&lt;p&gt;Use ATDD as an advanced extension of TDD, keeping the software's development 
guided by the principles of satisfying the customer's needs through acceptance 
criteria and automated testing.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;BDD, ATDD, UTDD, DSL's&lt;/b&gt; ... when will it all end...&lt;/p&gt;
&lt;p&gt;The drive toward business-driven testing has never been stronger. Developers 
are seemingly now finding a higher and higher bar when it comes to customers' 
expectations of quality and features. Our tools are getting better, and we can 
deliver more software, faster. But, our methodologies haven't necessarily 
changed enough to satisfy today's customer expectations.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Enter Business-Driven Design...&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Business driven design is a concept that enables us to take business 
requirements and current priorities and turn them into a software design through 
Acceptance Test-Driven Development. The business requirements that drive the 
need for the software are turned into specific criteria that allow the business 
to decide what the criteria are that will allow them to use a feature and have 
it meet their business need. Rather than the old-school way of gathering 
requirements, and having a requirements document and a functional specification, 
we now turn to individual small criteria that decide if the software is 
acceptable to meet the need. Some of the criteria map directly from functional 
requirements, and others may not have been captured in a traditional 
requirements gathering and specifying model.&lt;/p&gt;
&lt;p&gt;Domain-Specific Languages (DSL's) are key to success in Acceptance 
Test-Driven Development. DSL's give us a way to communicate with the customer 
and domain experts in their terms. When we capture criteria in this manner, it 
becomes quite clear to those with domain knowledge, what is meant and what is 
desired. There is no need for a "translator" between the customer and the 
developers (this used to be called "Business Analyst"). The developers model the 
code in terms of the language the customer already uses. This mechanism leads to 
better communication, better encapsulation, and better object-oriented 
development.&lt;/p&gt;
&lt;p&gt;Acceptance Test-Driven Development [ATDD] gives us a mechanism to use DSL's and direct customer involvement in making sure 
the software we deliver meets the needs. When we take the criteria and turn them 
into automated acceptance tests, it is far easier for the customers to see that 
they are getting what they asked for. It's also easier for the developers to 
have a target to shoot for, and have a goal to meet. This way, they are more 
focused on delivering a specific unit of functionality that the customer needs 
rather than (as so often happens) some "new feature" that they thought might be 
useful.&lt;/p&gt;
&lt;p&gt;Much care needs to be put into the way that acceptance criteria are gathered 
and then automated. If there is something that is missed, it could critically 
affect the design. This is an opportunity for customers and developers to 
collaborate and get it right. The customer needs to understand that if it isn't 
on the acceptance criteria list, it isn't going to be in the software... 
Performance criteria, interoperability with other systems, and other criteria 
like these are often missed. Customers should have many opportunities to review 
and re-review the criteria before they are approved. Even still, sometimes 
things are missed. This is why it is important for the customer to be involved 
at all stages of the development process. The customer shouldn't just be 
involved in the criteria gathering, then come back later for their product. If 
things are missed, they will likely become apparent and turn up in daily work. 
If the customer is there to be consulted, decisions can be made about how to 
integrate missed criteria, and how to capture these better in the future.&lt;/p&gt;
&lt;p&gt;Business-Driven Design is a business-centric, collaborative, agile mechanism 
for delivering quality software to today's demanding customer.&lt;/p&gt;&lt;/div&gt;
&lt;div class="Border" id="RightBorder"&gt;
&lt;table class="TableClass" cellpadding="2" cellspacing="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="TableCell" style="white-space: nowrap;" colspan="2"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;img width="0" height="0" src="http://testdrivendeveloper.com/aggbug.ashx?id=36f87b85-6fba-404d-86e9-9c069b081688"/&gt;&lt;/div&gt;</description>
      <comments>http://testdrivendeveloper.com/CommentView,guid,36f87b85-6fba-404d-86e9-9c069b081688.aspx</comments>
      <category>TDD</category>
      <category>ATDD</category>
    </item>
  </channel>
</rss>