<?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>Bits 'n Widgets - testing</title>
    <link>http://bitsnwidgets.com/</link>
    <description>&amp;nbsp;&amp;nbsp;Thoughts on real-world, practical, common-sense approaches to Agile software development using Scrum and XP</description>
    <language>en-us</language>
    <copyright>John E. Boal</copyright>
    <lastBuildDate>Fri, 22 Aug 2008 04:21:44 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.0.7226.0</generator>
    <managingEditor>webmaster@bitsnwidgets.com</managingEditor>
    <webMaster>webmaster@bitsnwidgets.com</webMaster>
    <item>
      <trackback:ping>http://bitsnwidgets.com/Trackback.aspx?guid=378af5de-9e67-49a0-8b4d-cbd81713eca6</trackback:ping>
      <pingback:server>http://bitsnwidgets.com/pingback.aspx</pingback:server>
      <pingback:target>http://bitsnwidgets.com/PermaLink,guid,378af5de-9e67-49a0-8b4d-cbd81713eca6.aspx</pingback:target>
      <dc:creator>John Boal</dc:creator>
      <wfw:comment>http://bitsnwidgets.com/CommentView,guid,378af5de-9e67-49a0-8b4d-cbd81713eca6.aspx</wfw:comment>
      <wfw:commentRss>http://bitsnwidgets.com/SyndicationService.asmx/GetEntryCommentsRss?guid=378af5de-9e67-49a0-8b4d-cbd81713eca6</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">"Obviously, Development should be responsible
for the acceptance tests. The developers are the ones on the team who are the best
at writing good code. The developers are best able to turn the acceptance criteria
into valid executable specifications. Development then can use the automated acceptance
tests to drive the development TDD cycle."<br /><p></p><br />
"In QA, we never totally trust the developers. We do trust them to do the right thing.
However, we have a saying in QA - Trust but Verify. QA should be responsible for the
acceptance tests. At the end of the day, it is our job to make sure that the software
meets the criteria for acceptance, so it's really a QA ballpark. Dev's should focus
on unit tests."<br /><br />
Two strong opinions, and really I think both are right. Development should be using
acceptance tests to drive an ATDD cycle. Developers are (usually) better at writing
code than SDETs, so they do a more efficient job on acceptance tests. But QA probably
has a more even overall view of the software, and from a different and more independent
perspective, so they should be writing the acceptance tests as well as the other test
automation. QA also has the responsibility of signing off on the code, so they should
be writing the acceptance tests.<br /><br />
So, this may be one way to resolve the issue. Have developers and testers both work
on automated acceptance tests for the first story. When the tests are completed, developers
are free to begin working on the unit tests and code to satisfy the acceptance tests.
QA can then begin test case generation and automation implementation.<br /><br />
I believe that this solution is the best of both worlds, because Development and QA
will be completely in sync and on the same page for all of the stories where the acceptance
tests are co-developed. There won't be any ambiguity on whether the software meets
criteria, and both teams will be in agreement as to what is passing and what isn't.
The tests will be well-written, and they will run as efficiently and accurately as
possible. They will be written with multiple perspectives - the customer (who supplied
the acceptance criteria), QA who makes sure that the test accurately guarantees the
outcome, and Development, who makes automation quicker to implement and more efficient.<br /><br />
With automated acceptance tests co-written by dev and test, we have a great common
point of communication, and a good example of how teamwork can really help software
shine and inspire confidence and trust in the eye of the customer.<br /><img width="0" height="0" src="http://bitsnwidgets.com/aggbug.ashx?id=378af5de-9e67-49a0-8b4d-cbd81713eca6" /></body>
      <title>Automated Acceptance Tests - Who Should Write Them, Dev or QA?</title>
      <guid isPermaLink="false">http://bitsnwidgets.com/PermaLink,guid,378af5de-9e67-49a0-8b4d-cbd81713eca6.aspx</guid>
      <link>http://BitsNWidgets.com/2008/08/22/AutomatedAcceptanceTestsWhoShouldWriteThemDevOrQA.aspx</link>
      <pubDate>Fri, 22 Aug 2008 04:21:44 GMT</pubDate>
      <description>"Obviously, Development should be responsible for the acceptance tests. The developers are the ones on the team who are the best at writing good code. The developers are best able to turn the acceptance criteria into valid executable specifications. Development then can use the automated acceptance tests to drive the development TDD cycle."&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;br&gt;
"In QA, we never totally trust the developers. We do trust them to do the right thing.
However, we have a saying in QA - Trust but Verify. QA should be responsible for the
acceptance tests. At the end of the day, it is our job to make sure that the software
meets the criteria for acceptance, so it's really a QA ballpark. Dev's should focus
on unit tests."&lt;br&gt;
&lt;br&gt;
Two strong opinions, and really I think both are right. Development should be using
acceptance tests to drive an ATDD cycle. Developers are (usually) better at writing
code than SDETs, so they do a more efficient job on acceptance tests. But QA probably
has a more even overall view of the software, and from a different and more independent
perspective, so they should be writing the acceptance tests as well as the other test
automation. QA also has the responsibility of signing off on the code, so they should
be writing the acceptance tests.&lt;br&gt;
&lt;br&gt;
So, this may be one way to resolve the issue. Have developers and testers both work
on automated acceptance tests for the first story. When the tests are completed, developers
are free to begin working on the unit tests and code to satisfy the acceptance tests.
QA can then begin test case generation and automation implementation.&lt;br&gt;
&lt;br&gt;
I believe that this solution is the best of both worlds, because Development and QA
will be completely in sync and on the same page for all of the stories where the acceptance
tests are co-developed. There won't be any ambiguity on whether the software meets
criteria, and both teams will be in agreement as to what is passing and what isn't.
The tests will be well-written, and they will run as efficiently and accurately as
possible. They will be written with multiple perspectives - the customer (who supplied
the acceptance criteria), QA who makes sure that the test accurately guarantees the
outcome, and Development, who makes automation quicker to implement and more efficient.&lt;br&gt;
&lt;br&gt;
With automated acceptance tests co-written by dev and test, we have a great common
point of communication, and a good example of how teamwork can really help software
shine and inspire confidence and trust in the eye of the customer.&lt;br&gt;
&lt;img width="0" height="0" src="http://bitsnwidgets.com/aggbug.ashx?id=378af5de-9e67-49a0-8b4d-cbd81713eca6" /&gt;</description>
      <comments>http://bitsnwidgets.com/CommentView,guid,378af5de-9e67-49a0-8b4d-cbd81713eca6.aspx</comments>
      <category>Team</category>
      <category>testing</category>
      <category>Acceptance Testing</category>
    </item>
    <item>
      <trackback:ping>http://bitsnwidgets.com/Trackback.aspx?guid=c6618fc9-440e-432c-9a83-05ae28fba06b</trackback:ping>
      <pingback:server>http://bitsnwidgets.com/pingback.aspx</pingback:server>
      <pingback:target>http://bitsnwidgets.com/PermaLink,guid,c6618fc9-440e-432c-9a83-05ae28fba06b.aspx</pingback:target>
      <dc:creator>John Boal</dc:creator>
      <wfw:comment>http://bitsnwidgets.com/CommentView,guid,c6618fc9-440e-432c-9a83-05ae28fba06b.aspx</wfw:comment>
      <wfw:commentRss>http://bitsnwidgets.com/SyndicationService.asmx/GetEntryCommentsRss?guid=c6618fc9-440e-432c-9a83-05ae28fba06b</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">I have posted the acceptance test code
in both Selenium and WatiN on the <a href="http://agilebug.com/2008/08/21/MeetingTonightOwlThistleSeattle5PM.aspx">AgileBUG.com</a> site.
This code is a short demo and example of how we can do acceptance testing using both
tools. The presentation is a short one on what ATDD is, and why we should do it. It
serves as a prelude to the tools demo.<br /><br />
Join us at the Owl and Thistle tonight in person for a pint and some good agile discussions!<br /><p></p><br /><img width="0" height="0" src="http://bitsnwidgets.com/aggbug.ashx?id=c6618fc9-440e-432c-9a83-05ae28fba06b" /></body>
      <title>Selenium and WatiN code examples, ATDD presentation</title>
      <guid isPermaLink="false">http://bitsnwidgets.com/PermaLink,guid,c6618fc9-440e-432c-9a83-05ae28fba06b.aspx</guid>
      <link>http://BitsNWidgets.com/2008/08/21/SeleniumAndWatiNCodeExamplesATDDPresentation.aspx</link>
      <pubDate>Thu, 21 Aug 2008 17:22:20 GMT</pubDate>
      <description>I have posted the acceptance test code in both Selenium and WatiN on the &lt;a href="http://agilebug.com/2008/08/21/MeetingTonightOwlThistleSeattle5PM.aspx"&gt;AgileBUG.com&lt;/a&gt; site.
This code is a short demo and example of how we can do acceptance testing using both
tools. The presentation is a short one on what ATDD is, and why we should do it. It
serves as a prelude to the tools demo.&lt;br&gt;
&lt;br&gt;
Join us at the Owl and Thistle tonight in person for a pint and some good agile discussions!&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;br&gt;
&lt;img width="0" height="0" src="http://bitsnwidgets.com/aggbug.ashx?id=c6618fc9-440e-432c-9a83-05ae28fba06b" /&gt;</description>
      <comments>http://bitsnwidgets.com/CommentView,guid,c6618fc9-440e-432c-9a83-05ae28fba06b.aspx</comments>
      <category>ABN</category>
      <category>TDD</category>
      <category>testing</category>
    </item>
    <item>
      <trackback:ping>http://bitsnwidgets.com/Trackback.aspx?guid=c879d61c-bc2b-41e9-b25d-2f3b39f0fde5</trackback:ping>
      <pingback:server>http://bitsnwidgets.com/pingback.aspx</pingback:server>
      <pingback:target>http://bitsnwidgets.com/PermaLink,guid,c879d61c-bc2b-41e9-b25d-2f3b39f0fde5.aspx</pingback:target>
      <dc:creator>John Boal</dc:creator>
      <wfw:comment>http://bitsnwidgets.com/CommentView,guid,c879d61c-bc2b-41e9-b25d-2f3b39f0fde5.aspx</wfw:comment>
      <wfw:commentRss>http://bitsnwidgets.com/SyndicationService.asmx/GetEntryCommentsRss?guid=c879d61c-bc2b-41e9-b25d-2f3b39f0fde5</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">Security has always been a challenge in
software development. Being in an environment that has rapid ship cycles and iterative
development does add challenges of its own when it comes to security.<br /><br />
Here are a few of the key concepts I intend to flesh out in the next few weeks:<br /><ul><li>
Security Requirements</li><ul><li>
how to come up with security stories</li><li>
how much is enough?</li><li>
how much is too much?<br /></li></ul><li>
Using automated tools</li><ul><li>
what tools are available</li><ul><li>
MetaSploit - multiple vulnerabilities: <a href="http://www.metasploit.com/">http://www.metasploit.com/</a></li><li>
Fiddler - HTTP/S proxy, inspector, injector, manipulator. Fun for the whole family. <a href="http://www.fiddlertool.com/">http://www.fiddlertool.com/</a><br /></li><li>
WireShark - network protocol analyzer and sniffer: <a href="http://www.wireshark.org/">http://www.wireshark.org/</a><br /></li><li>
various other network tools like Snort, RetinA, NetStumbler can be automated and scripted.<br /></li></ul><ul><li>
use static code analysis tools, and pay attention to their results.</li><li>
I recommend also doing file and network fuzzing on system entry points, but don't
have any good tool recommendations. Got some? Please leave comments!<br /></li></ul><li>
web site testing vs web service testing</li><li>
application testing<br /></li><li>
how do the fit into automation frameworks<br /></li></ul><li>
Security Documentation (Threat Models)</li><ul><li>
Designing in Security as Feature 0</li><li>
Iterative Threat Modeling</li><li>
Who Reads the Threat Model?</li><li>
How do we turn threat models into automated acceptance tests?</li></ul><li>
security testing strategies</li><ul><li>
white route (internal folks, given the internals of the system)<br /></li><li>
black route (for-hire hackers, given only an objective to accomplish, and no system
information)</li></ul><li>
security-oriented code reviews</li><ul><li>
how to train developers and testers to look for security defects<br /></li></ul><li>
security vs. performance</li><ul><li>
Sometimes mitigations incur a performance hit. How do we avoid this, and what are
some alternatives?<br /></li></ul></ul><p></p><br />
This is an Agile blog, so this is the first production release of this article ...
More features (content) will become available over time, so stay tuned to this RSS
feed for updates and new content, as they emerge.<br /><img width="0" height="0" src="http://bitsnwidgets.com/aggbug.ashx?id=c879d61c-bc2b-41e9-b25d-2f3b39f0fde5" /></body>
      <title>How to Implement Software Security on an Agile Team</title>
      <guid isPermaLink="false">http://bitsnwidgets.com/PermaLink,guid,c879d61c-bc2b-41e9-b25d-2f3b39f0fde5.aspx</guid>
      <link>http://BitsNWidgets.com/2008/05/10/HowToImplementSoftwareSecurityOnAnAgileTeam.aspx</link>
      <pubDate>Sat, 10 May 2008 19:54:11 GMT</pubDate>
      <description>Security has always been a challenge in software development. Being in an environment that has rapid ship cycles and iterative development does add challenges of its own when it comes to security.&lt;br&gt;
&lt;br&gt;
Here are a few of the key concepts I intend to flesh out in the next few weeks:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
Security Requirements&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
how to come up with security stories&lt;/li&gt;
&lt;li&gt;
how much is enough?&lt;/li&gt;
&lt;li&gt;
how much is too much?&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
Using automated tools&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
what tools are available&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
MetaSploit - multiple vulnerabilities: &lt;a href="http://www.metasploit.com/"&gt;http://www.metasploit.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Fiddler - HTTP/S proxy, inspector, injector, manipulator. Fun for the whole family. &lt;a href="http://www.fiddlertool.com/"&gt;http://www.fiddlertool.com/&lt;/a&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
WireShark - network protocol analyzer and sniffer: &lt;a href="http://www.wireshark.org/"&gt;http://www.wireshark.org/&lt;/a&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
various other network tools like Snort, RetinA, NetStumbler can be automated and scripted.&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
use static code analysis tools, and pay attention to their results.&lt;/li&gt;
&lt;li&gt;
I recommend also doing file and network fuzzing on system entry points, but don't
have any good tool recommendations. Got some? Please leave comments!&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
web site testing vs web service testing&lt;/li&gt;
&lt;li&gt;
application testing&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
how do the fit into automation frameworks&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
Security Documentation (Threat Models)&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
Designing in Security as Feature 0&lt;/li&gt;
&lt;li&gt;
Iterative Threat Modeling&lt;/li&gt;
&lt;li&gt;
Who Reads the Threat Model?&lt;/li&gt;
&lt;li&gt;
How do we turn threat models into automated acceptance tests?&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
security testing strategies&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
white route (internal folks, given the internals of the system)&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
black route (for-hire hackers, given only an objective to accomplish, and no system
information)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
security-oriented code reviews&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
how to train developers and testers to look for security defects&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
security vs. performance&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
Sometimes mitigations incur a performance hit. How do we avoid this, and what are
some alternatives?&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;br&gt;
This is an Agile blog, so this is the first production release of this article ...
More features (content) will become available over time, so stay tuned to this RSS
feed for updates and new content, as they emerge.&lt;br&gt;
&lt;img width="0" height="0" src="http://bitsnwidgets.com/aggbug.ashx?id=c879d61c-bc2b-41e9-b25d-2f3b39f0fde5" /&gt;</description>
      <comments>http://bitsnwidgets.com/CommentView,guid,c879d61c-bc2b-41e9-b25d-2f3b39f0fde5.aspx</comments>
      <category>Security</category>
      <category>Team</category>
      <category>testing</category>
    </item>
    <item>
      <trackback:ping>http://bitsnwidgets.com/Trackback.aspx?guid=e6cc7b08-ce35-427b-8d8f-2eb0cc16bd27</trackback:ping>
      <pingback:server>http://bitsnwidgets.com/pingback.aspx</pingback:server>
      <pingback:target>http://bitsnwidgets.com/PermaLink,guid,e6cc7b08-ce35-427b-8d8f-2eb0cc16bd27.aspx</pingback:target>
      <dc:creator>John Boal</dc:creator>
      <wfw:comment>http://bitsnwidgets.com/CommentView,guid,e6cc7b08-ce35-427b-8d8f-2eb0cc16bd27.aspx</wfw:comment>
      <wfw:commentRss>http://bitsnwidgets.com/SyndicationService.asmx/GetEntryCommentsRss?guid=e6cc7b08-ce35-427b-8d8f-2eb0cc16bd27</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
We all know what design patterns are in software design and development. These kinds
of patterns also are recognized in unit and other kinds of tests as well.
</p>
        <p>
While it is not necessarily a new idea, it is a good idea. Here are some links
I have found on the subject. Further research should yield a whitepaper soon, if I
ever get time to write it.
</p>
        <p>
Brian Marick's testing.com: <a href="http://www.testing.com/test-patterns/patterns/">http://www.testing.com/test-patterns/patterns/</a></p>
        <p>
A great example at CodeProject: <a href="http://www.codeproject.com/KB/architecture/autp5.aspx">http://www.codeproject.com/KB/architecture/autp5.aspx</a></p>
        <p>
RBSC: <a href="http://www.rbsc.com/pages/TestPatternList.htm">http://www.rbsc.com/pages/TestPatternList.htm</a></p>
        <p>
TypeMock Unit test patterns for .net: <a href="http://www.typemock.com/Docs/TestPatterns.html">http://www.typemock.com/Docs/TestPatterns.html</a></p>
        <p>
Book: <span id="btAsinTitle">xUnit Test Patterns: <a href="http://www.amazon.com/xUnit-Test-Patterns-Refactoring-Addison-Wesley/dp/0131495054/ref=sr_1_2?ie=UTF8&amp;s=books&amp;qid=1207958238&amp;sr=8-2">Refactoring
Test Code</a></span></p>
        <img width="0" height="0" src="http://bitsnwidgets.com/aggbug.ashx?id=e6cc7b08-ce35-427b-8d8f-2eb0cc16bd27" />
      </body>
      <title>Test Patterns - recurrent design patterns in testing</title>
      <guid isPermaLink="false">http://bitsnwidgets.com/PermaLink,guid,e6cc7b08-ce35-427b-8d8f-2eb0cc16bd27.aspx</guid>
      <link>http://BitsNWidgets.com/2008/04/10/TestPatternsRecurrentDesignPatternsInTesting.aspx</link>
      <pubDate>Thu, 10 Apr 2008 20:17:50 GMT</pubDate>
      <description>&lt;p&gt;
We all know what design patterns are in software design and development. These kinds
of patterns also are recognized in unit and other kinds of tests as well.
&lt;/p&gt;
&lt;p&gt;
While it is not necessarily a new idea, it is a good&amp;nbsp;idea. Here are some links
I have found on the subject. Further research should yield a whitepaper soon, if&amp;nbsp;I
ever get time to write it.
&lt;/p&gt;
&lt;p&gt;
Brian Marick's testing.com: &lt;a href="http://www.testing.com/test-patterns/patterns/"&gt;http://www.testing.com/test-patterns/patterns/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
A great example at CodeProject: &lt;a href="http://www.codeproject.com/KB/architecture/autp5.aspx"&gt;http://www.codeproject.com/KB/architecture/autp5.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
RBSC: &lt;a href="http://www.rbsc.com/pages/TestPatternList.htm"&gt;http://www.rbsc.com/pages/TestPatternList.htm&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
TypeMock Unit test patterns for .net: &lt;a href="http://www.typemock.com/Docs/TestPatterns.html"&gt;http://www.typemock.com/Docs/TestPatterns.html&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Book: &lt;span id="btAsinTitle"&gt;xUnit Test Patterns: &lt;a href="http://www.amazon.com/xUnit-Test-Patterns-Refactoring-Addison-Wesley/dp/0131495054/ref=sr_1_2?ie=UTF8&amp;amp;s=books&amp;amp;qid=1207958238&amp;amp;sr=8-2"&gt;Refactoring
Test Code&lt;/a&gt; &lt;/span&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://bitsnwidgets.com/aggbug.ashx?id=e6cc7b08-ce35-427b-8d8f-2eb0cc16bd27" /&gt;</description>
      <comments>http://bitsnwidgets.com/CommentView,guid,e6cc7b08-ce35-427b-8d8f-2eb0cc16bd27.aspx</comments>
      <category>TDD</category>
      <category>testing</category>
    </item>
    <item>
      <trackback:ping>http://bitsnwidgets.com/Trackback.aspx?guid=de5bf9ad-211c-4f27-965f-2df7c3959678</trackback:ping>
      <pingback:server>http://bitsnwidgets.com/pingback.aspx</pingback:server>
      <pingback:target>http://bitsnwidgets.com/PermaLink,guid,de5bf9ad-211c-4f27-965f-2df7c3959678.aspx</pingback:target>
      <dc:creator>John Boal</dc:creator>
      <wfw:comment>http://bitsnwidgets.com/CommentView,guid,de5bf9ad-211c-4f27-965f-2df7c3959678.aspx</wfw:comment>
      <wfw:commentRss>http://bitsnwidgets.com/SyndicationService.asmx/GetEntryCommentsRss?guid=de5bf9ad-211c-4f27-965f-2df7c3959678</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <div>BDD, ATDD, UTDD, DSL's ... when will it all end...
</div>
        <div> 
</div>
        <div>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.
</div>
        <div> 
</div>
        <div>Enter Business-Driven Design...
</div>
        <div> 
</div>
        <div>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.
</div>
        <div> 
</div>
        <div>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.
</div>
        <div> 
</div>
        <div>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.
</div>
        <div> 
</div>
        <div>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.
</div>
        <div> 
</div>
        <div>Business-Driven Design is a business-centric, collaborative, agile mechanism
for delivering quality software to today's demanding customer.
</div>
        <img width="0" height="0" src="http://bitsnwidgets.com/aggbug.ashx?id=de5bf9ad-211c-4f27-965f-2df7c3959678" />
      </body>
      <title>BDD, ATDD, DSL's - It's not your father's TDD anymore...</title>
      <guid isPermaLink="false">http://bitsnwidgets.com/PermaLink,guid,de5bf9ad-211c-4f27-965f-2df7c3959678.aspx</guid>
      <link>http://BitsNWidgets.com/2008/03/14/BDDATDDDSLsItsNotYourFathersTDDAnymore.aspx</link>
      <pubDate>Fri, 14 Mar 2008 20:19:07 GMT</pubDate>
      <description>&lt;div&gt;BDD, ATDD, UTDD, DSL's ... when will it all end...
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&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;/div&gt;
&lt;div&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;Enter Business-Driven Design...
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;Business&amp;nbsp;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&amp;nbsp;are
turned into specific criteria that allow the business to decide what the criteria
are that will allow them to use&amp;nbsp;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;/div&gt;
&lt;div&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&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&amp;nbsp;the language the customer
already uses. This mechanism leads to better communication, better encapsulation,
and better object-oriented development.
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&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&amp;nbsp;rather than (as so often happens)&amp;nbsp;some "new feature"
that they thought might be useful.
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&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;/div&gt;
&lt;div&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;Business-Driven Design is a business-centric, collaborative, agile mechanism
for delivering quality software to today's demanding customer.
&lt;/div&gt;
&lt;img width="0" height="0" src="http://bitsnwidgets.com/aggbug.ashx?id=de5bf9ad-211c-4f27-965f-2df7c3959678" /&gt;</description>
      <comments>http://bitsnwidgets.com/CommentView,guid,de5bf9ad-211c-4f27-965f-2df7c3959678.aspx</comments>
      <category>testing</category>
      <category>DSL</category>
      <category>TDD</category>
    </item>
  </channel>
</rss>