<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Object Mentor Blog: Ruining your Test Automation Strategy.</title>
    <link>http://blog.objectmentor.com/articles/2009/09/29/ruining-your-test-automation-strategy</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description></description>
    <item>
      <title>Ruining your Test Automation Strategy.</title>
      <description>&lt;p&gt;&lt;img src="http://butunclebob.com/files/images/test_plan_toc.jpg" width="300" align="left" hspace="10"&gt;
Everybody wants a test automation strategy nowadays.  The reason is clear.  It take a &lt;em&gt;lot&lt;/em&gt; of effort to run a suite of manual tests; and that effort has be be repeated several times per year.&lt;/p&gt;


	&lt;p&gt;Consider the fate of this poor customer of mine.  The picture you see here is simply the &lt;em&gt;Table of Contents&lt;/em&gt; of his manual test plan.  That plan has tens of thousands of individual manual tests.  It costs them millions of dollars to execute, and they must execute it many times each year.&lt;/p&gt;


	&lt;p&gt;To make matters worse, in these difficult times, management has told the QA manager that he must cut 50% from his manual testing budget.  The question he asked me was: &amp;#8220;Which 40,000 of these 80,000 tests should I delete?&amp;#8221;&lt;/p&gt;


	&lt;p&gt;So, as you can probably imagine, this poor guy really wished his tests were automated.  Runnning automated tests does not cost six figures several times a year.  Running automated tests does not need to be cut in half when budgets get tight.  Running automated tests are the way to go.&lt;/p&gt;


	&lt;p&gt;One common strategy to get your tests automated is to outsource the problem.  You hire some team of test writers to transform your manual tests into automated tests using some automation tool.  These folks execute the manual test plan while setting up the automation tool to record their actions.  Then the tool can simply play the actions back for each new release of the system; and make sure the screens don&amp;#8217;t change.&lt;/p&gt;


	&lt;p&gt;Sounds great doesn&amp;#8217;t it?  Sounds like just the ticket!  Sounds like a simple way to convert manual tests into automated tests!&lt;/p&gt;


	&lt;p&gt;Yeah, and it&amp;#8217;s a sure fire way to make sure you utterly ruin your strategy for test automation!...&lt;/p&gt;


&lt;p/&gt;
&lt;p/&gt;
&lt;p/&gt;

	&lt;h2&gt;Why is this so runious?&lt;/h2&gt;


	&lt;p&gt;Automatically testing a system through the &lt;span class="caps"&gt;GUI&lt;/span&gt; &lt;em&gt;couples&lt;/em&gt; the tests to the &lt;span class="caps"&gt;GUI&lt;/span&gt;.  That&amp;#8217;s right, this is a &lt;em&gt;coupling&lt;/em&gt; problem!  A standard, every-day, good ol&amp;#8217; software design &lt;em&gt;coupling&lt;/em&gt; problem.  And the problem with coupling is that when two things are coupled, and you change one of them, the other one breaks.&lt;/p&gt;


	&lt;p&gt;In the case of automated tests, if you change the &lt;span class="caps"&gt;GUI&lt;/span&gt;, the automated tests break.  This was a big enough problem when the test were manual.  You always had to go back and edit the test plans to take &lt;span class="caps"&gt;GUI&lt;/span&gt; changes into account.  Fortunately, since the test were manual, you had &lt;em&gt;human beings&lt;/em&gt; in the loop, and you could expect them to use common sense about simple &lt;span class="caps"&gt;GUI&lt;/span&gt; changes.  The fact that what they saw on the screen differed from what they test plan said they should see would not confound them so long as they understood how the &lt;span class="caps"&gt;GUI&lt;/span&gt; had changed.&lt;/p&gt;


	&lt;p&gt;But an automated tool doesn&amp;#8217;t have that kind of reasoning power.  If the automated tool sees &lt;em&gt;anything&lt;/em&gt; different from what it expects, it simply fails.&lt;/p&gt;


	&lt;p&gt;Now, clearly, automated tools can be made to be clever enough to avoid simple cosmetic issues like the moving of a button, or a change in the spelling of a menu.  But you have to &lt;em&gt;work&lt;/em&gt; at making the tests tolerant of such changes.  Do you think that outsourced team of test writers care much about that?&lt;/p&gt;


	&lt;p&gt;In any case, no tool can deal with changes to the navigation structure, or gross changes to the structure of screens.  Thus, there will always be a class of &lt;span class="caps"&gt;GUI&lt;/span&gt; changes that will cause huge swaths of automated tests to fail.  Unfortunately these kinds of changes are all too common.  What&amp;#8217;s more the cost of re-recording the tests is high, and the re-recording process itself is error-prone.&lt;/p&gt;


	&lt;p&gt;The net result is that &lt;span class="caps"&gt;GUI&lt;/span&gt; driven automated tests are &lt;em&gt;fragile&lt;/em&gt;, and the process of maintaining them is expensive and unreliable.&lt;/p&gt;


	&lt;p&gt;To drive this point home, consider the fate of an old client of mine who had tens of thousands of automated tests driven through the &lt;span class="caps"&gt;GUI&lt;/span&gt;.  Every time anyone changed the &lt;span class="caps"&gt;GUI&lt;/span&gt; a thousand or so tests broke.  The burden of maintaining those tests was so great that this customer added one restrictive policy after another in an effort to prevent changes to the &lt;span class="caps"&gt;GUI&lt;/span&gt;.  In the end, &lt;span class="caps"&gt;GUI&lt;/span&gt; changes became officially prohibited. (This was a &lt;span class="caps"&gt;DOS GUI&lt;/span&gt; in the era of Windows!)&lt;/p&gt;


	&lt;p&gt;Or consider another client who spent a great deal of time and effort creating automated tests through the &lt;span class="caps"&gt;GUI&lt;/span&gt;.  This client could not constrain the &lt;span class="caps"&gt;GUI&lt;/span&gt; against change, so had to live with the burden of re-recording the tests.  But the burden was too great. Trade-offs were made.  Many of the tests de-prioritized, and therefore lost.  Bit by bit this customer lost his investment in automated tests.&lt;/p&gt;


	&lt;p&gt;The bottom line is that automated tests through the &lt;span class="caps"&gt;GUI&lt;/span&gt; are inherently unstable, and will drive you to one or the other of those two undesirable states.&lt;/p&gt;


	&lt;h2&gt;It is hopeless?&lt;/h2&gt;


	&lt;p&gt;Not at all.  First of all, you &lt;em&gt;need&lt;/em&gt; some acceptance tests that go through the &lt;span class="caps"&gt;GUI&lt;/span&gt;.  I think that number is on the order of 5%.  These are integration tests that make sure that the whole system is wired up correctly.&lt;/p&gt;


	&lt;p&gt;You &lt;em&gt;also&lt;/em&gt; need to test the &lt;span class="caps"&gt;GUI&lt;/span&gt; through the &lt;span class="caps"&gt;GUI&lt;/span&gt;, and this might be another 5-10% of the total body of tests.  What does it mean to test the &lt;span class="caps"&gt;GUI&lt;/span&gt;?  It means that you aren&amp;#8217;t testing any &lt;em&gt;business&lt;/em&gt; rules!  You test the &lt;span class="caps"&gt;GUI&lt;/span&gt; and &lt;em&gt;only&lt;/em&gt; the &lt;span class="caps"&gt;GUI&lt;/span&gt;.   My favorite scheme for doing this is to mock out all the business rule code entirely, replacing it with a dummy that simply provides canned answers to all the &lt;span class="caps"&gt;GUI&lt;/span&gt; interfaces.  Imagine, for example, replacing all the servlets in a web system with dummy servlets that pay no attention to their inputs, use no database at all, and simply return canned &lt;span class="caps"&gt;HTML&lt;/span&gt;.&lt;/p&gt;


	&lt;p&gt;By the same token, the &lt;em&gt;business rule&lt;/em&gt; tests should &lt;em&gt;not&lt;/em&gt; use the &lt;span class="caps"&gt;GUI&lt;/span&gt;.  In fact, the &lt;span class="caps"&gt;GUI&lt;/span&gt; shouldn&amp;#8217;t even be turned on.  Rather, your tests should invoke the same business rule APIs that the &lt;span class="caps"&gt;GUI&lt;/span&gt; invokes.  Indeed, the tests become an alternative UI.&lt;/p&gt;


	&lt;p&gt;Preferably the Business Rule &lt;span class="caps"&gt;API&lt;/span&gt; is well below the &lt;span class="caps"&gt;GUI&lt;/span&gt; layer.  In a web system it should be below the servlet layer.  In the best designed systems, it can even be &lt;em&gt;outside&lt;/em&gt; the container.&lt;/p&gt;


	&lt;p&gt;Tools like &lt;a href="http://fitnesse.org"&gt;FitNesse&lt;/a&gt;, &lt;a href="http://cukes.info/"&gt;Cucumber&lt;/a&gt;, &lt;a href="http://code.google.com/p/robotframework/"&gt;RobotFX&lt;/a&gt;, and &lt;a href="http://www.greenpeppersoftware.com/confluence/display/GPW/Home/"&gt;GreenPepper&lt;/a&gt; are designed for just this kind of &lt;span class="caps"&gt;API&lt;/span&gt; testing.&lt;/p&gt;


	&lt;p&gt;Tests that drive the system through the &lt;span class="caps"&gt;API&lt;/span&gt; are entirely decoupled from the &lt;span class="caps"&gt;GUI&lt;/span&gt;.  When the &lt;span class="caps"&gt;GUI&lt;/span&gt; changes, these tests are completely unaffected.  There is no huge burden of test maintenance, and you are not at risk for losing your tests or constraining the &lt;span class="caps"&gt;GUI&lt;/span&gt;.&lt;/p&gt;


	&lt;h2&gt;Summary&lt;/h2&gt;


	&lt;p&gt;Automated testing through the &lt;span class="caps"&gt;GUI&lt;/span&gt; is intuitive, seductive, and almost always &lt;em&gt;wrong&lt;/em&gt;!  A dedicated program of automatically testing your system through the &lt;span class="caps"&gt;GUI&lt;/span&gt; is almost certain to fail.  If you want a robust test automation strategy, plan to use a healthy dose of &lt;span class="caps"&gt;API&lt;/span&gt; testing, and as little &lt;span class="caps"&gt;GUI&lt;/span&gt; testing as possible.&lt;/p&gt;</description>
      <pubDate>Tue, 29 Sep 2009 15:42:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:fc26eb14-7654-49ba-a79c-52a5b8f8bb0c</guid>
      <author>Uncle Bob</author>
      <link>http://blog.objectmentor.com/articles/2009/09/29/ruining-your-test-automation-strategy</link>
      <category>Design Principles</category>
    </item>
    <item>
      <title>"Ruining your Test Automation Strategy." by Michael</title>
      <description>&lt;p&gt;But what if your test department will only give you sign-off if they have tests that are based on the gui. Because the system is so critical that they need to gurantee when they click on a button, the correct business logic is executed. They would not simply accept a bunch of green lights coming from a tool such as Fitnesse where the developers assure them they all is functioning fine.&lt;/p&gt;</description>
      <pubDate>Mon, 26 Jul 2010 21:22:57 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:caa9115a-0c92-4804-bb3d-298f4bc48de1</guid>
      <link>http://blog.objectmentor.com/articles/2009/09/29/ruining-your-test-automation-strategy#comment-17503</link>
    </item>
    <item>
      <title>"Ruining your Test Automation Strategy." by Create a Website</title>
      <description>&lt;p&gt;The aim of most businesses with a website is to successfully market their website and increase sales.&lt;/p&gt;</description>
      <pubDate>Sat, 17 Jul 2010 00:37:22 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:c3c22631-2c89-4a72-a323-2e13107990dd</guid>
      <link>http://blog.objectmentor.com/articles/2009/09/29/ruining-your-test-automation-strategy#comment-16523</link>
    </item>
    <item>
      <title>"Ruining your Test Automation Strategy." by louis vuitton </title>
      <description>&lt;p&gt;*Well , the view of the passage is  totally correct ,your details is really reasonable and you guy give us valuable informative post, I totally agree the standpoint of upstairs . &lt;a href="http://www.precision-mechanical.net" rel="nofollow"&gt;http://www.precision-mechanical.net&lt;/a&gt;  I often surfing on this forum when I m free and I find there are so much good information we can learn in this forum!&lt;/p&gt;</description>
      <pubDate>Tue, 22 Jun 2010 22:58:22 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:d11f1eac-adbc-4809-8d1e-a1b5ea4e4fe2</guid>
      <link>http://blog.objectmentor.com/articles/2009/09/29/ruining-your-test-automation-strategy#comment-13602</link>
    </item>
    <item>
      <title>"Ruining your Test Automation Strategy." by Great Article</title>
      <description>&lt;p&gt;Great stuff about gui tests, use with care and common sense. But at the end of your post you emphasize API-testing, mentioning FitNesse (among others) as a tool with no huge burden of test maintenance.&lt;/p&gt;</description>
      <pubDate>Sat, 12 Jun 2010 05:58:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:c68767bb-f139-49ef-a57e-2ba251a2c2fb</guid>
      <link>http://blog.objectmentor.com/articles/2009/09/29/ruining-your-test-automation-strategy#comment-12994</link>
    </item>
    <item>
      <title>"Ruining your Test Automation Strategy." by Fireworks</title>
      <description>&lt;p&gt;Really a good post!!!!!
The author has done a great research on automation strategy.
Thanks for the information.&lt;/p&gt;</description>
      <pubDate>Fri, 28 May 2010 02:16:27 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:f2d5081f-9b8b-4fa7-af23-0310c2e54eee</guid>
      <link>http://blog.objectmentor.com/articles/2009/09/29/ruining-your-test-automation-strategy#comment-12203</link>
    </item>
    <item>
      <title>"Ruining your Test Automation Strategy." by PDF to epub Converter</title>
      <description>&lt;p&gt;e found on this topic for me, I would like to appreciate your posting style, it&#8217;s really good, keep it up.&lt;/p&gt;</description>
      <pubDate>Wed, 12 May 2010 03:57:45 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:90ba8ebd-af19-4d37-99bb-a2dfbc5eeeed</guid>
      <link>http://blog.objectmentor.com/articles/2009/09/29/ruining-your-test-automation-strategy#comment-11333</link>
    </item>
    <item>
      <title>"Ruining your Test Automation Strategy." by Printing Services</title>
      <description>&lt;p&gt;This information is some of the best I have found on this topic for me, I would like to appreciate your posting style, it&#8217;s really good, keep it up.&lt;/p&gt;</description>
      <pubDate>Fri, 30 Apr 2010 07:43:35 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:d0530d6b-9b1d-4a4a-9177-c2d70d87d4f0</guid>
      <link>http://blog.objectmentor.com/articles/2009/09/29/ruining-your-test-automation-strategy#comment-10842</link>
    </item>
    <item>
      <title>"Ruining your Test Automation Strategy." by Audio Production</title>
      <description>&lt;p&gt;Very Interesting article and really had me thinking will make sure I check your posts more often!&lt;/p&gt;</description>
      <pubDate>Sun, 25 Apr 2010 05:03:32 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:6c83c574-6f16-4d81-9b73-42c2987100ba</guid>
      <link>http://blog.objectmentor.com/articles/2009/09/29/ruining-your-test-automation-strategy#comment-10569</link>
    </item>
    <item>
      <title>"Ruining your Test Automation Strategy." by Endep</title>
      <description>&lt;p&gt;Great research! Thanks.&lt;/p&gt;</description>
      <pubDate>Wed, 17 Feb 2010 07:59:31 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:7edcd4e4-e358-474e-927d-99bc6a71c1c5</guid>
      <link>http://blog.objectmentor.com/articles/2009/09/29/ruining-your-test-automation-strategy#comment-7565</link>
    </item>
    <item>
      <title>"Ruining your Test Automation Strategy." by digital camera brisbane</title>
      <description>&lt;p&gt;Great post! Thanks for the information&lt;/p&gt;</description>
      <pubDate>Wed, 27 Jan 2010 01:42:49 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:b4329119-6327-478f-8c40-b6c71ea5f74c</guid>
      <link>http://blog.objectmentor.com/articles/2009/09/29/ruining-your-test-automation-strategy#comment-7322</link>
    </item>
    <item>
      <title>"Ruining your Test Automation Strategy." by Fabr&#237;cio Lemos</title>
      <description>&lt;p&gt;&amp;#8220;In the case of automated tests, if you change the GUI, the automated tests break&amp;#8221;&lt;/p&gt;


	&lt;p&gt;And in case of unit tests, if you change the method signature, or move, or remove the method, the automated tests also breaks. Does this mean we shouldn&#180;t do unit tests? I don&#180;t think so.&lt;/p&gt;


	&lt;p&gt;I already worked on systems with great unit tests coverage and no system tests and also on systems with great system test coverage and no unit tests. And, in my experience, the cost of change was bigger with unit tests. Having to change a lot of tests just because of little changes at the api level was really making our refactoring more painful. And that is a bigger problem than making UI changes more painful.&lt;/p&gt;


	&lt;p&gt;I still prefer to focus on unit tests, but for a lot of other reasons than the &amp;#8220;cost of change&amp;#8221;, that could be really minimized on system tests with the use of Page Objects.&lt;/p&gt;</description>
      <pubDate>Thu, 19 Nov 2009 13:06:32 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:e6f3c1a7-93fa-48bc-8d51-cff18c14b16b</guid>
      <link>http://blog.objectmentor.com/articles/2009/09/29/ruining-your-test-automation-strategy#comment-5169</link>
    </item>
    <item>
      <title>"Ruining your Test Automation Strategy." by Dean Cornish</title>
      <description>&lt;p&gt;Thanks for your thoughts as always UB :)&lt;/p&gt;


	&lt;p&gt;I do agree with parts of your thoughts, and disagree with others.
I do see great value in testing via the GUI, the issue is how.
The pain in updating the automation is the problem..&lt;/p&gt;


	&lt;p&gt;When you&amp;#8217;re using recorder methods, or lots and lots of redundant code- that pain is amplified significantly.&lt;/p&gt;


	&lt;p&gt;Most automation systems I&amp;#8217;ve seen- just took a nudge towards page object patterning to remove alot of this pain eg. dont change 40,000 tests with exactly the same line, extract it out and change it once to affect all 40,000, then extend and extend..&lt;/p&gt;


	&lt;p&gt;To me, its a fairly natural thing to do, but it isn&amp;#8217;t always obvious to some. (eg. non-technicals &amp;#38; managers)&lt;/p&gt;


	&lt;p&gt;I firmly believe the old school testing approaches (unit -&amp;gt; system/component level testing -&amp;gt; integration testing) should still apply to your automation suite.
I believe my views here correlate with yours thoughts on mocking and testing individual components. That&amp;#8217;s a practice I agree with, its typically fast and gives great feedback- and doesn&amp;#8217;t get killed by crazy integration points that seem to riddle so many projects out there today.
Usually when I see Unit Testing -&amp;gt; Integration testing what I see is pain.&lt;/p&gt;


	&lt;p&gt;Thanks for your thoughts as always UB :)&lt;/p&gt;</description>
      <pubDate>Tue, 06 Oct 2009 20:12:28 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:bb856a1c-0d9b-4362-bafe-65519f5b8a1e</guid>
      <link>http://blog.objectmentor.com/articles/2009/09/29/ruining-your-test-automation-strategy#comment-4416</link>
    </item>
    <item>
      <title>"Ruining your Test Automation Strategy." by Nigel</title>
      <description>&lt;p&gt;If test scripts are well designed and with right tool, GUI automated testing is not only possible, and quite enjoyable experience.&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://www.infoq.com/articles/refactoring-test-scripts" rel="nofollow"&gt;http://www.infoq.com/articles/refactoring-test-scripts&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;We had problems as you described with GUI automated testing before.&lt;/p&gt;</description>
      <pubDate>Sun, 04 Oct 2009 18:37:42 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:bc53ad8d-ca03-4986-b9aa-b0388370d0cf</guid>
      <link>http://blog.objectmentor.com/articles/2009/09/29/ruining-your-test-automation-strategy#comment-4342</link>
    </item>
    <item>
      <title>"Ruining your Test Automation Strategy." by Emily Bache</title>
      <description>&lt;p&gt;Hi,
I don&amp;#8217;t think that GUI tests have to be as expensive and difficult to maintain as Bob makes out in this post. I think we should look beyond the popular tools for GUI testing, which I agree have limitations. I wrote my own blog post outlining my point of view:&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://emilybache.blogspot.com/2009/10/testing-through-gui-costs-less-with.html" rel="nofollow"&gt;http://emilybache.blogspot.com/2009/10/testing-through-gui-costs-less-with.html&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Fri, 02 Oct 2009 14:52:47 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:13b3fa31-919a-4112-8f10-3da03d434eba</guid>
      <link>http://blog.objectmentor.com/articles/2009/09/29/ruining-your-test-automation-strategy#comment-4338</link>
    </item>
    <item>
      <title>"Ruining your Test Automation Strategy." by Vijay Nathani</title>
      <description>&lt;p&gt;I agree 100% with the contents of this blog. I prefer most tests to be Unit Tests written in xUnit. Integration and System tests are also usually in xUnit. Acceptance testing is in Fitnesse or Concordion.
The purpose of GUI testing is only to ensure that values are correctly passed and received. It should never be used to test the business logic.&lt;/p&gt;</description>
      <pubDate>Thu, 01 Oct 2009 19:07:46 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:cd56c925-89a6-4385-8369-6c43a52eba5b</guid>
      <link>http://blog.objectmentor.com/articles/2009/09/29/ruining-your-test-automation-strategy#comment-4335</link>
    </item>
    <item>
      <title>"Ruining your Test Automation Strategy." by perottobc</title>
      <description>&lt;p&gt;&lt;strong&gt;But Uncle Bob, seriously: No huge burden of test maintenance?&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;Great stuff about gui tests, use with care and common sense.  But at the end of your post you emphasize API-testing, mentioning FitNesse (among others) as a tool with no huge burden of test maintenance.&lt;/p&gt;


	&lt;p&gt;I think Curtis Cooley hits the nail spot on: &lt;em&gt;fragility is the number one concern with automated testing in general&lt;/em&gt;. API-testing is a much better concept than gui testing, but there are no silver bullets.&lt;/p&gt;


	&lt;p&gt;Philip Schwarz points out that &lt;em&gt;larger projects can easily have hundreds or thousands of acceptance tests&lt;/em&gt;. I would like to see this with no huge burden of test maintenance, especially with FitNesse out of the box!&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;It is hopeless?&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;Of course not, just like you have to design your system to be testable you have to realize that FitNesse has some missing parts, that your project have to figure out how to solve. Failure to do so will give your project a huge burden of test maintenance.&lt;/p&gt;


	&lt;p&gt;So, what are the missing parts? For the Java implementation I would suggest:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Maven integration (real programmers use maven)&lt;/li&gt;
		&lt;li&gt;Version control system integration (real projects use version controll)&lt;/li&gt;
		&lt;li&gt;A user friendly GUI (real testers deserve a decent gui)&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Of course, it is open source, so we could all fix it. Projects like richness and trinidad gives hope,  but having FitNesse integrated with your environment is no easy task.&lt;/p&gt;


	&lt;p&gt;Instead I&amp;#8217;m more inspired by the a tool well integrated with my development environment, JUnit. Of course it can&amp;#8217;t compete with a web gui for interactive testing, but it can compete on total cost of ownership. For me, putting 100% of the tests in FitNesse sounds like an expensive experiment. Especially since  some essential parts are missing, and you seldom get it right the first time. To help out JUnit with it&amp;#8217;s communication problem I have developed bdoc (bdoc.googlecode.com), that creates documentation out of tests.  It would be interesting to get comments on it, a lightweight approach to automatic acceptance testing.&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;m sorry for my battering on FitNesse, but I feel that it is worth pointing out that any tool needs to be used with care an common sense. A test automation strategy that puts 100% of the tests in FitNesse could be the same as &lt;em&gt;Ruining your Test Automation Strategy&lt;/em&gt;, and end up with a huge burden of test maintenance!&lt;/p&gt;</description>
      <pubDate>Thu, 01 Oct 2009 16:36:13 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:6a34bfd0-47b6-40e5-b57e-d746b67eec05</guid>
      <link>http://blog.objectmentor.com/articles/2009/09/29/ruining-your-test-automation-strategy#comment-4333</link>
    </item>
    <item>
      <title>"Ruining your Test Automation Strategy." by Chuck vdL</title>
      <description>&lt;p&gt;Harold,&lt;/p&gt;


	&lt;p&gt;If you have a good accessable &amp;#8216;api&amp;#8217; just under the UI skin, then you can drive most &amp;#8216;end to end&amp;#8217; behavior at that level, it&amp;#8217;s faster, easier to test, and if you are using TDD/DbE/BDD then the developers are creating those tests to ensure that they are building the right code that does the right things. (and that later changes to the code don&amp;#8217;t break that stuff)&lt;/p&gt;


	&lt;p&gt;At the UI level you then need to verify that
1) the proper controls exist on the right pages, in the right places, is visable to the user using the right graphics, etc.   This is hard to automate without the test being fragile, as it requires a lot of &amp;#8216;judgement calls&amp;#8217;
2) CRITICAL. Each and every one of those controls is hooked up to the proper thing just under the skin.  (this can usually be automated).  If testing as Bob is suggesting above, this is really the weakest link where a bug might creap in and be otherwise undetected.  
3) some basic sanity checks that when driven from the UI, everhthing is working, all the buttons and knobs function, etc. (ditto)&lt;/p&gt;


	&lt;p&gt;The &amp;#8216;wrongness&amp;#8217; of driving all your automated testing at the GUI level comes in multiple forms.
 1) if that&amp;#8217;s ALL your automated tests, then you are missing unit tests, which provide tremendous value to developers on so many levels that there&amp;#8217;s no way for me to cover it in a simple comment.
 2) there&amp;#8217;s no fast simple way for a develper that just refactored some code to determine if it&amp;#8217;s broken without fully compiling everything and running the exaustive UI tests
3) The UI is slow, so the tests take a lot longer to run.  Which means you can&amp;#8217;t usually do them as as part of CI, but instead have to do it as some long overnight process.
 4) the tests tend to be fragile, and small tweaks to the UI can break a lot of tests, requiring a lot of work to maintain.  This ties up testers and QA folks doing test maintance of non-bug test breaks instead of doing other testing that could be finding bugs.&lt;/p&gt;</description>
      <pubDate>Thu, 01 Oct 2009 14:43:11 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:ce0f0d7f-297a-4026-88d9-269d783ba3b0</guid>
      <link>http://blog.objectmentor.com/articles/2009/09/29/ruining-your-test-automation-strategy#comment-4330</link>
    </item>
    <item>
      <title>"Ruining your Test Automation Strategy." by Esko Luontola</title>
      <description>&lt;blockquote&gt;
		&lt;p&gt;&lt;strong&gt;Fredrik Bertilsson:&lt;/strong&gt; When writing unit tests my experience is that the time for writing (or modifying) test cases are about the same time, or more, as writing the code itself.&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;p&gt;My experience is that writing a test and a code to pass the test, takes almost the same time as thinking about what code to write and then writing the code. Writing a test is all about thinking &lt;em&gt;what&lt;/em&gt; you want, before deciding &lt;em&gt;how&lt;/em&gt; to do it.&lt;/p&gt;


	&lt;p&gt;Documenting as a formal executable specification (also known as &amp;#8220;a test&amp;#8221;) that what the system should do, does not slow you down because you need to type about twice as much text. If it slows you down, it&amp;#8217;s because you need to &lt;em&gt;think&lt;/em&gt; before acting. Just hacking some code together without that thinking is faster only in the short term (i.e. about 15-60 minutes, until you need to change the code you wrote), and it produces much worse quality.&lt;/p&gt;


	&lt;blockquote&gt;
		&lt;p&gt;&lt;strong&gt;Fredrik Bertilsson:&lt;/strong&gt; Regarding the statement that testing the GUI is only 5-10% of the total testing time, I could only be true for software that lacks any substantial GUI.&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;p&gt;If testing the GUI takes more than 5-10% of all tests, it could only be true if there is &lt;em&gt;barely anything behind&lt;/em&gt; the GUI.&lt;/p&gt;


	&lt;p&gt;Also keep in mind that the logic of the GUI should not be part of the GUI. It should be a layer which is completely decoupled from the GUI using a suitable design pattern (&lt;a href="http://martinfowler.com/eaaDev/ModelViewPresenter.html" rel="nofollow"&gt;http://martinfowler.com/eaaDev/ModelViewPresenter.html&lt;/a&gt;). In a well designed application, the GUI layer will consist only of GUI library components and simple glue code. If the GUI layer contains complex logic, then the design is &lt;em&gt;wrong&lt;/em&gt;.&lt;/p&gt;


	&lt;blockquote&gt;
		&lt;p&gt;&lt;strong&gt;Harold:&lt;/strong&gt; And I still don&#8217;t understand why automated tests through the GUI are wrong, you&#8217;re not giving much evidence for this point (and as a matter of fact, the company I&#8217;m working for is doing fine with 100% of our UI extensively tested every night).&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;p&gt;So you test the GUI &lt;em&gt;every night&lt;/em&gt;? Why is it not tested &lt;em&gt;every time that even a single line of code is changed&lt;/em&gt;? If the developers hesitate to run all tests after changing a single line of code, then the tests are &lt;em&gt;too slow&lt;/em&gt; (&lt;a href="http://agileinaflash.blogspot.com/2009/02/first.html" rel="nofollow"&gt;http://agileinaflash.blogspot.com/2009/02/first.html&lt;/a&gt;).&lt;/p&gt;


	&lt;p&gt;Fast feedback is one of the big benefits of TDD and a good unit test suite. You can change a line, run all tests, and know immediately whether your change broke anything. It totally changes the way that you can approach development.&lt;/p&gt;


	&lt;p&gt;Fear is the path to the dark side. Tests remove the fear. You can change things without fear of breaking things, because you will find out if anything was broken in a few seconds. You can even write some nasty algorithm with nested loops and conditionals by just trying every possible way to write it (if there are only a couple dozen alternatives), until one of them passes all tests, and after that you can digest the algorithm that you wrote and try to understand why it works.&lt;/p&gt;


	&lt;p&gt;Lately I&amp;#8217;ve been dreaming about the near future, when each workstation will have tens or hundreds of CPU cores (after 5-10 years?). Because the available processing power will multiply faster than the number of tests we write per project, sooner or later it will become feasible to run all tests between &lt;em&gt;every keystroke&lt;/em&gt;. I wonder how that fast feedback will change the way we write code&amp;#8230; :)&lt;/p&gt;</description>
      <pubDate>Thu, 01 Oct 2009 14:38:57 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:59a266f4-fa71-44e0-9617-2f3b670ce4fc</guid>
      <link>http://blog.objectmentor.com/articles/2009/09/29/ruining-your-test-automation-strategy#comment-4329</link>
    </item>
    <item>
      <title>"Ruining your Test Automation Strategy." by Marc</title>
      <description>&lt;p&gt;Harold:&lt;/p&gt;


	&lt;p&gt;&amp;gt; Unit tests can pass and yet your product can still have functional bugs.&lt;/p&gt;


	&lt;p&gt;So what?  It sounds like you just discovered a truth known for thousands of years, &amp;#8220;To err is human.&amp;#8221;&lt;/p&gt;


	&lt;p&gt;&amp;gt; Not having functional tests for 100% of your functionalities still sounds like a bad idea.&lt;/p&gt;


	&lt;p&gt;Where did you get the idea that anyone here is advocating not testing 100% of your functionallity?  All Uncle Bob has said is that out of the totality of your automated tests (that is, your unit tests, acceptance tests, gui tests, etc) roughly 10-15% should hit the gui.  The other 85-90% covers the non-gui functionallity.&lt;/p&gt;


	&lt;p&gt;&amp;gt; And I still don&#8217;t understand why automated tests through the GUI are wrong, you&#8217;re not giving much evidence for this point (and as a matter of fact, the company I&#8217;m working for is doing fine with 100% of our UI extensively tested every night).&lt;/p&gt;


	&lt;p&gt;Um, you are commenting in a post encouraging testing the gui; where do you get the idea that anyone things it is &amp;#8220;wrong&amp;#8221; to do so?  All Uncle Bob points out is that there is a cost to doing so, and offers some recomendations to help make it easier and more effective.&lt;/p&gt;</description>
      <pubDate>Thu, 01 Oct 2009 10:39:38 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:fea4e864-cb0b-4313-8259-ec161096eef4</guid>
      <link>http://blog.objectmentor.com/articles/2009/09/29/ruining-your-test-automation-strategy#comment-4327</link>
    </item>
    <item>
      <title>"Ruining your Test Automation Strategy." by Fredrik Bertilsson</title>
      <description>&lt;p&gt;Most shops I have been working for have a ratio of 1/4 to 1/2 between (manual) testers and programmers. One tester tested the code for two to four programmers. When writing unit tests my experience is that the time for writing (or modifying) test cases are about the same time, or more, as writing the code itself. And you would still need manual testers for stuff like GUI etc, that unit tests cant handle.&lt;/p&gt;


	&lt;p&gt;Accordning these metrics you would for example need 4+2 members in the manual case compared to 8+ members in the automatic case. If unit tests should save any time, the metrics must be much different from mine, or? Regarding the statement that testing the GUI is only 5-10% of the total testing time, I could only be true for software that lacks any substantial GUI. In normal enterprise application, I could not imagine that the GUI part of the application is so small.&lt;/p&gt;</description>
      <pubDate>Thu, 01 Oct 2009 00:01:40 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:17c4fb3c-5abc-43d0-8071-8837070240d1</guid>
      <link>http://blog.objectmentor.com/articles/2009/09/29/ruining-your-test-automation-strategy#comment-4323</link>
    </item>
    <item>
      <title>"Ruining your Test Automation Strategy." by Maria Marcano</title>
      <description>&lt;p&gt;Very interesting topic,  I have the following questions:&lt;/p&gt;


	&lt;p&gt;About this statement &#8220;Indeed, in a truly decoupled system most GUI tests seem absurd.&#8221; I understand that we can guarantee that components work well isolated 
but do you think we can guarantee that all pieces are working well together without having a similar coupling issue?. How would you test integration?. Many code I&#8217;ve seen are too coupled to have replaceable pieces to use during tests, how can we live with that?.&lt;/p&gt;


	&lt;p&gt;Does this makes sense to you?&lt;/p&gt;


	&lt;p&gt;&#8226; Have a test collection (classes and methods) that states how the application must work in a High level (how major business process should work, like stating the requirements)&lt;/p&gt;


	&lt;p&gt;?    Major requirements may use more detailed pieces of the applications. For example, the specific GUI being used will be injected to the test collection that runs and verify different business processes (Test Collection doesn&#8217;t know about the details of the GUI)&lt;/p&gt;


	&lt;p&gt;&#8226; Regarding to the GUI it is expressed in objects and provide services to the users (if a particular part of the UI changes, we make the change in only one specific place)&lt;/p&gt;


	&lt;p&gt;I am going to begin doing more research about the last point (hopefully start blogging about this idea I have), and I am interested in having your opinion.&lt;/p&gt;


	&lt;p&gt;Thanks,&lt;/p&gt;</description>
      <pubDate>Wed, 30 Sep 2009 20:35:37 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:b61bfbf2-4a49-4bbb-91e4-5ce9fef37f6b</guid>
      <link>http://blog.objectmentor.com/articles/2009/09/29/ruining-your-test-automation-strategy#comment-4322</link>
    </item>
    <item>
      <title>"Ruining your Test Automation Strategy." by Harold</title>
      <description>&lt;p&gt;Unit tests can pass and yet your product can still have functional bugs. Not having functional tests for 100% of your functionalities still sounds like a bad idea.&lt;/p&gt;


	&lt;p&gt;And I still don&amp;#8217;t understand why automated tests through the GUI are wrong, you&amp;#8217;re not giving much evidence for this point (and as a matter of fact, the company I&amp;#8217;m working for is doing fine with 100% of our UI extensively tested every night).&lt;/p&gt;</description>
      <pubDate>Wed, 30 Sep 2009 18:12:29 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:daf9df4c-95c0-4c27-b5c0-73882d56cbb7</guid>
      <link>http://blog.objectmentor.com/articles/2009/09/29/ruining-your-test-automation-strategy#comment-4321</link>
    </item>
    <item>
      <title>"Ruining your Test Automation Strategy." by Ian4101</title>
      <description>&lt;p&gt;@Harold, That&amp;#8217;s not quite what Bob is suggesting by any means.   I think you are suggesting a black box approach to the problem and in practice a slightly transparent box approach is warranted.  Bob hasn&amp;#8217;t accounted for the other 85-90% &amp;#8211; which is ok, that&amp;#8217;s not the point of the article.  I am curious whether there are metrics for business logic tests and persistence logic tests; tests on the db schema for example.&lt;/p&gt;</description>
      <pubDate>Wed, 30 Sep 2009 17:56:32 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:22e89c33-6b95-433d-b3dc-094799ee005b</guid>
      <link>http://blog.objectmentor.com/articles/2009/09/29/ruining-your-test-automation-strategy#comment-4319</link>
    </item>
    <item>
      <title>"Ruining your Test Automation Strategy." by Uncle Bob</title>
      <description>&lt;blockquote&gt;
		&lt;p&gt;&lt;strong&gt;Harold  about 23 hours later:&lt;/strong&gt;
&lt;br /&gt;
10% of tests will not be enough to test all the functions that your users will be using, so are you basically recommending to ship software that hasn&#8217;t been tested?&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;p&gt;No.  I&amp;#8217;m suggesting you test 5%-10% through the GUI.  Test 100% through APIs.  Test 100% again with unit tests.&lt;/p&gt;</description>
      <pubDate>Wed, 30 Sep 2009 17:02:47 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:f28b3f9d-dbbd-4608-89f3-315acfe3ae28</guid>
      <link>http://blog.objectmentor.com/articles/2009/09/29/ruining-your-test-automation-strategy#comment-4318</link>
    </item>
    <item>
      <title>"Ruining your Test Automation Strategy." by Anthony Bailey</title>
      <description>&lt;p&gt;About five years ago I worked on a well-tested application that was mostly driven through a direct manipulation user interface; a substantial part of the value of the application was in the way that the direct manipulation of rendered objects meshed tightly to the underlying domain. (It was a 3D medical visualization app; think of it as PhotoShop with lots of meaning to the pictures.)&lt;/p&gt;


	&lt;p&gt;We tested in a wide variety of ways. My house of testing has many rooms and I would keep some of every flavor of test, but the tests that proved to have the most value were, oh guess what, those that tested the app just beneath the skin, hooking into careful abstractions of input events and representations of graphics on the screen.&lt;/p&gt;


	&lt;p&gt;Of course testing GUI code can be worthwhile. But I would not test the domain logic through the GUI, nor test the GUI through its results on the domain. I advocate letting the tests get under your skin and crafting a layer primarily for testing purposes. (And being only slightly surprised when in the usual TDDesign fashion that code turns out to have other production clients too, such as the contextual help system, macro recording, etc.)&lt;/p&gt;</description>
      <pubDate>Wed, 30 Sep 2009 16:06:59 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:2b3297b6-2618-4571-ad7b-0dffe7e22808</guid>
      <link>http://blog.objectmentor.com/articles/2009/09/29/ruining-your-test-automation-strategy#comment-4317</link>
    </item>
  </channel>
</rss>
