<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Unstated Requirements</title>
	<atom:link href="http://lostechies.com/chadmyers/2010/07/23/unstated-requirements/feed/" rel="self" type="application/rss+xml" />
	<link>http://lostechies.com/chadmyers/2010/07/23/unstated-requirements/</link>
	<description>Software development, testing, and techie life</description>
	<lastBuildDate>Thu, 08 Mar 2012 22:19:00 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
	<item>
		<title>By: Carsten</title>
		<link>http://lostechies.com/chadmyers/2010/07/23/unstated-requirements/#comment-1173</link>
		<dc:creator>Carsten</dc:creator>
		<pubDate>Tue, 27 Jul 2010 11:58:58 +0000</pubDate>
		<guid isPermaLink="false">/blogs/chad_myers/archive/2010/07/23/unstated-requirements.aspx#comment-1173</guid>
		<description>Shouldn’t your conclusion be that you should first make it a ”Stated Requirement”?

If you build or change software, it needs to be tested. That’s not breathtaking news. Testing can be done in many different ways; automated testing is one way and it might be a very efficient way depending on the individual case.

If you say testing is a requirement then you need to treat is as a requirement like any other feature request. It’s not something that you simply do because you want to be “professional”. Instead, you should choose your appropriate testing strategy depending on aspects of the requested feature like criticality (risk), triviality (trivial things don’t need to be tested extensively) or maintainability. In any case, you would need to make the requirement “stated”.

I also tend to agree with Louis saying that “a passing automated test does not prove anything”. I have seen projects that put hell of a lot of effort in increasing their CodeConverage but finally found out that what they tested was not what was required. I am probably nearby those dirty hackers saying that functionality is the first thing that matters. Having said that, I don’t intent to say that testing doesn’t matter. It matters and it is an important aspect of software in general. Due to its importance, it needs to be made transparent; it needs to become a “Stated Requirement”.
</description>
		<content:encoded><![CDATA[<p>Shouldn’t your conclusion be that you should first make it a ”Stated Requirement”?</p>
<p>If you build or change software, it needs to be tested. That’s not breathtaking news. Testing can be done in many different ways; automated testing is one way and it might be a very efficient way depending on the individual case.</p>
<p>If you say testing is a requirement then you need to treat is as a requirement like any other feature request. It’s not something that you simply do because you want to be “professional”. Instead, you should choose your appropriate testing strategy depending on aspects of the requested feature like criticality (risk), triviality (trivial things don’t need to be tested extensively) or maintainability. In any case, you would need to make the requirement “stated”.</p>
<p>I also tend to agree with Louis saying that “a passing automated test does not prove anything”. I have seen projects that put hell of a lot of effort in increasing their CodeConverage but finally found out that what they tested was not what was required. I am probably nearby those dirty hackers saying that functionality is the first thing that matters. Having said that, I don’t intent to say that testing doesn’t matter. It matters and it is an important aspect of software in general. Due to its importance, it needs to be made transparent; it needs to become a “Stated Requirement”.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Elroy</title>
		<link>http://lostechies.com/chadmyers/2010/07/23/unstated-requirements/#comment-1172</link>
		<dc:creator>Elroy</dc:creator>
		<pubDate>Mon, 26 Jul 2010 13:57:33 +0000</pubDate>
		<guid isPermaLink="false">/blogs/chad_myers/archive/2010/07/23/unstated-requirements.aspx#comment-1172</guid>
		<description>Nice post Chad.

But, the fact remains that in most cases this will never get through to all people and things will still remain the way they are. I&#039;ve tried hard to make my co-devs write automated unit/functional tests, showing them the benefits time and again. Doesn&#039;t work for the most part. But sometimes I do run across people who share these thoughts and it feels great working with them.</description>
		<content:encoded><![CDATA[<p>Nice post Chad.</p>
<p>But, the fact remains that in most cases this will never get through to all people and things will still remain the way they are. I&#8217;ve tried hard to make my co-devs write automated unit/functional tests, showing them the benefits time and again. Doesn&#8217;t work for the most part. But sometimes I do run across people who share these thoughts and it feels great working with them.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Vitaly Stakhov</title>
		<link>http://lostechies.com/chadmyers/2010/07/23/unstated-requirements/#comment-1171</link>
		<dc:creator>Vitaly Stakhov</dc:creator>
		<pubDate>Sat, 24 Jul 2010 21:07:29 +0000</pubDate>
		<guid isPermaLink="false">/blogs/chad_myers/archive/2010/07/23/unstated-requirements.aspx#comment-1171</guid>
		<description>Unfortunately in some cases The Primary Unstated Requirement is considered as impossible to achieve. And constant finding and fixing the same bugs is treated like a natural process of software development.

I think in many cases it would be hard to understand by somebody being NOT a professional that TPUR is achievable at all.</description>
		<content:encoded><![CDATA[<p>Unfortunately in some cases The Primary Unstated Requirement is considered as impossible to achieve. And constant finding and fixing the same bugs is treated like a natural process of software development.</p>
<p>I think in many cases it would be hard to understand by somebody being NOT a professional that TPUR is achievable at all.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: chadmyers</title>
		<link>http://lostechies.com/chadmyers/2010/07/23/unstated-requirements/#comment-1170</link>
		<dc:creator>chadmyers</dc:creator>
		<pubDate>Fri, 23 Jul 2010 23:39:58 +0000</pubDate>
		<guid isPermaLink="false">/blogs/chad_myers/archive/2010/07/23/unstated-requirements.aspx#comment-1170</guid>
		<description>@Louis:

The idea is to keep the essence of the test (the feature you hope to assert) and the mechanics of the test (the clicking of buttons, selecting drop-downs, clicking links, etc).

So if you&#039;re mixing them both in one test, you&#039;ve got a problem. In our web testing, we have different layers of the test from the &quot;driver&quot; layer (the thing that directly interacts with Selenium) to the fixture/grammar level which is the StoryTeller stuff (which contains the essence of the test expressed in as business-like language as we can get.

So basically, we keep Selenium as far away from our testing code as possible so that we can change how, say, drop-down/selectboxes work in our app without breaking all our tests.

So if you can find a way to isolate how your combo boxes work, then put that in your driver layer. That way your *test* can just say: &quot;Select this value for this field&quot; and your driver will know that &quot;that field&quot; is a combo box and it&#039;ll know how to deal with combo boxes (change values, get the current value, get the list of all the available values, etc).

If that&#039;s simply not possible in silverlight, then that&#039;s a real problem. I find that kind of hard to believe, but I don&#039;t know much about silverlight.</description>
		<content:encoded><![CDATA[<p>@Louis:</p>
<p>The idea is to keep the essence of the test (the feature you hope to assert) and the mechanics of the test (the clicking of buttons, selecting drop-downs, clicking links, etc).</p>
<p>So if you&#8217;re mixing them both in one test, you&#8217;ve got a problem. In our web testing, we have different layers of the test from the &#8220;driver&#8221; layer (the thing that directly interacts with Selenium) to the fixture/grammar level which is the StoryTeller stuff (which contains the essence of the test expressed in as business-like language as we can get.</p>
<p>So basically, we keep Selenium as far away from our testing code as possible so that we can change how, say, drop-down/selectboxes work in our app without breaking all our tests.</p>
<p>So if you can find a way to isolate how your combo boxes work, then put that in your driver layer. That way your *test* can just say: &#8220;Select this value for this field&#8221; and your driver will know that &#8220;that field&#8221; is a combo box and it&#8217;ll know how to deal with combo boxes (change values, get the current value, get the list of all the available values, etc).</p>
<p>If that&#8217;s simply not possible in silverlight, then that&#8217;s a real problem. I find that kind of hard to believe, but I don&#8217;t know much about silverlight.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Louis Salin</title>
		<link>http://lostechies.com/chadmyers/2010/07/23/unstated-requirements/#comment-1169</link>
		<dc:creator>Louis Salin</dc:creator>
		<pubDate>Fri, 23 Jul 2010 21:37:47 +0000</pubDate>
		<guid isPermaLink="false">/blogs/chad_myers/archive/2010/07/23/unstated-requirements.aspx#comment-1169</guid>
		<description>The more I think about it, the more I see how Silverlight is not testable. I&#039;ve been fighting all day to change the value on a combo box through our test. When you&#039;re dealing with HTML, it&#039;s fairly easy to do. Change the value and everything will be fine when you submit the form. With Silverlight, changing the value doesn&#039;t necessarily trigger the right events to update the view model underneath, which forces me to go update the view model directly instead of doing it through the UI. But now, whenever the view models change, tests start breaking... 

It&#039;s just a pain.</description>
		<content:encoded><![CDATA[<p>The more I think about it, the more I see how Silverlight is not testable. I&#8217;ve been fighting all day to change the value on a combo box through our test. When you&#8217;re dealing with HTML, it&#8217;s fairly easy to do. Change the value and everything will be fine when you submit the form. With Silverlight, changing the value doesn&#8217;t necessarily trigger the right events to update the view model underneath, which forces me to go update the view model directly instead of doing it through the UI. But now, whenever the view models change, tests start breaking&#8230; </p>
<p>It&#8217;s just a pain.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Louis Salin</title>
		<link>http://lostechies.com/chadmyers/2010/07/23/unstated-requirements/#comment-1168</link>
		<dc:creator>Louis Salin</dc:creator>
		<pubDate>Fri, 23 Jul 2010 21:23:13 +0000</pubDate>
		<guid isPermaLink="false">/blogs/chad_myers/archive/2010/07/23/unstated-requirements.aspx#comment-1168</guid>
		<description>Our entire UI is in Silverlight, which requires us to create extra methods on our view classes that can then be called by our ruby scripts through Watir. This is where the maintenance cost is high, since we need to revisit those methods whenever the behavior of our app changes. Maybe it&#039;s easier to maintain when you&#039;re working with something as widely used and supported as the DOM. But in Silverlight&#039;s case, UI testing hasn&#039;t been streamlined yet. (or I do not know about a possible solution)

Thanks for your input! I&#039;m really on the fence and still accumulating arguments from both side. I&#039;m glad to hear that you guys are reaping benefits from your automated tests.</description>
		<content:encoded><![CDATA[<p>Our entire UI is in Silverlight, which requires us to create extra methods on our view classes that can then be called by our ruby scripts through Watir. This is where the maintenance cost is high, since we need to revisit those methods whenever the behavior of our app changes. Maybe it&#8217;s easier to maintain when you&#8217;re working with something as widely used and supported as the DOM. But in Silverlight&#8217;s case, UI testing hasn&#8217;t been streamlined yet. (or I do not know about a possible solution)</p>
<p>Thanks for your input! I&#8217;m really on the fence and still accumulating arguments from both side. I&#8217;m glad to hear that you guys are reaping benefits from your automated tests.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: chadmyers</title>
		<link>http://lostechies.com/chadmyers/2010/07/23/unstated-requirements/#comment-1167</link>
		<dc:creator>chadmyers</dc:creator>
		<pubDate>Fri, 23 Jul 2010 19:35:30 +0000</pubDate>
		<guid isPermaLink="false">/blogs/chad_myers/archive/2010/07/23/unstated-requirements.aspx#comment-1167</guid>
		<description>@Louis:

Note that I talked about testing in layers (unit, integration, acceptance).  &quot;100% coverage&quot; at the acceptance level involves a lot fewer tests than 100% coverage at the unit level because there are more seams (interactions) to test.  

If you&#039;re seeing &quot;incredibly high&quot; maintenance cost with tests, then, frankly, you&#039;re doing it wrong.  I&#039;m not sure what tech you&#039;re using, but if it&#039;s using WatiN, WatiR, or Selenium directly, then you&#039;re doing it wrong. Those technologies are important, but they should be driven by something higher level (an acceptance testing framework) like StoryTeller, Fitness, or Slim, etc.

&quot;Keep in mind that a passing test doesn&#039;t prove anything&quot; I disagree with this statement categorically unless you say it&#039;s a poorly written test. Tests are not useful simply because they&#039;re tests. I agree that tests must be written correctly (testing the right thing for the right reason with the right expectation). With this established, then tests prove lots of things and are of great value.

We were able to make rather stark and major changes to our infrastructure and all levels of our application (from redoing our data access entirely, to changing out our MVC framework entirely, to changing out our grid technology entirely, etc) with high confidence due to our bevy of StoryTeller/Selenium tests.

This confidence in change and accuracy of delivery is of immeasurable value to us. Any &quot;incredibly high maintenance cost[s]&quot; were entirely justified on the first time we had to make a major readjustment of our infrastructure. We&#039;ve now done it several times and are reaping the dividends.

I see the automated acceptance tests as something akin to seat belts or railings on stairs. Sure they can be a pain and get in your way, but the first time you need them and don&#039;t have them, you will sorely regret it. Likewise if you need them and have them, all pain or cost becomes moot.

&quot;I find that 99% of automated test failures are the result of an intentional change in the behavior of our app, not that something broke&quot; - Us, too (though maybe not 99%, more like 80%).  If this is the case, then your testing framework should make it easy to change the guts of the test to match the new reality.

For us, we express our (StoryTeller) tests in business language and not implementation language.  The implementation is behind the scenes, in code, close to the actual code of the feature. If the feature changes slightly, so does the underlying implementation of the test.  Thus, the essence of the test is still expressed in StoryTeller and only a slight code change need to happen.

If you&#039;re using record/playback mechanics like Selenium, then you&#039;re in for a world of hurt as even a small change to the application can involve long, tedious changes to the web tests.  Thus you should separate the essence of the test (what to test) from the implementation of the test (how to test it).  This is what, among other things, StoryTeller does for us.</description>
		<content:encoded><![CDATA[<p>@Louis:</p>
<p>Note that I talked about testing in layers (unit, integration, acceptance).  &#8220;100% coverage&#8221; at the acceptance level involves a lot fewer tests than 100% coverage at the unit level because there are more seams (interactions) to test.  </p>
<p>If you&#8217;re seeing &#8220;incredibly high&#8221; maintenance cost with tests, then, frankly, you&#8217;re doing it wrong.  I&#8217;m not sure what tech you&#8217;re using, but if it&#8217;s using WatiN, WatiR, or Selenium directly, then you&#8217;re doing it wrong. Those technologies are important, but they should be driven by something higher level (an acceptance testing framework) like StoryTeller, Fitness, or Slim, etc.</p>
<p>&#8220;Keep in mind that a passing test doesn&#8217;t prove anything&#8221; I disagree with this statement categorically unless you say it&#8217;s a poorly written test. Tests are not useful simply because they&#8217;re tests. I agree that tests must be written correctly (testing the right thing for the right reason with the right expectation). With this established, then tests prove lots of things and are of great value.</p>
<p>We were able to make rather stark and major changes to our infrastructure and all levels of our application (from redoing our data access entirely, to changing out our MVC framework entirely, to changing out our grid technology entirely, etc) with high confidence due to our bevy of StoryTeller/Selenium tests.</p>
<p>This confidence in change and accuracy of delivery is of immeasurable value to us. Any &#8220;incredibly high maintenance cost[s]&#8221; were entirely justified on the first time we had to make a major readjustment of our infrastructure. We&#8217;ve now done it several times and are reaping the dividends.</p>
<p>I see the automated acceptance tests as something akin to seat belts or railings on stairs. Sure they can be a pain and get in your way, but the first time you need them and don&#8217;t have them, you will sorely regret it. Likewise if you need them and have them, all pain or cost becomes moot.</p>
<p>&#8220;I find that 99% of automated test failures are the result of an intentional change in the behavior of our app, not that something broke&#8221; &#8211; Us, too (though maybe not 99%, more like 80%).  If this is the case, then your testing framework should make it easy to change the guts of the test to match the new reality.</p>
<p>For us, we express our (StoryTeller) tests in business language and not implementation language.  The implementation is behind the scenes, in code, close to the actual code of the feature. If the feature changes slightly, so does the underlying implementation of the test.  Thus, the essence of the test is still expressed in StoryTeller and only a slight code change need to happen.</p>
<p>If you&#8217;re using record/playback mechanics like Selenium, then you&#8217;re in for a world of hurt as even a small change to the application can involve long, tedious changes to the web tests.  Thus you should separate the essence of the test (what to test) from the implementation of the test (how to test it).  This is what, among other things, StoryTeller does for us.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Louis Salin</title>
		<link>http://lostechies.com/chadmyers/2010/07/23/unstated-requirements/#comment-1166</link>
		<dc:creator>Louis Salin</dc:creator>
		<pubDate>Fri, 23 Jul 2010 19:01:09 +0000</pubDate>
		<guid isPermaLink="false">/blogs/chad_myers/archive/2010/07/23/unstated-requirements.aspx#comment-1166</guid>
		<description>Good post, Chad!
I&#039;d like to bounce a few ideas off you and see where that takes us. I&#039;ve been starting to form my own opinions on automated tests and I must say that I&#039;m either doing them totally wrong, or they&#039;re just not that useful. Researching the subject, I&#039;ve come across arguments that automated tests: 1) only test the &quot;happy&quot; path through a feature, and 2) a passing automated test does not prove anything.

If you couple that with the incredibly high maintenance cost, are they truly useful? I think it was Brian Marick that had observed that automated tests only allow you to find 30% of the defects in your code base, whereas spending that time doing more traditional QA would result in finding 70% of the defects instead. In my own experience, I find that 99% of automated tests failures are the result of an intentional change in the behavior of our app, not that something broke.

Bob Martin says UI testing should be at no more than 20% coverage, with unit tests and integration tests covering the rest.

However, I do agree that we need to prove our features work. The question I&#039;m having is how? Keep in mind that a passing test doesn&#039;t prove anything. (by the way, I might not do TDD or BDD as often as I ought to, but I fully agree with those methodologies and SOLID principles. Feel free to call me out on those :))</description>
		<content:encoded><![CDATA[<p>Good post, Chad!<br />
I&#8217;d like to bounce a few ideas off you and see where that takes us. I&#8217;ve been starting to form my own opinions on automated tests and I must say that I&#8217;m either doing them totally wrong, or they&#8217;re just not that useful. Researching the subject, I&#8217;ve come across arguments that automated tests: 1) only test the &#8220;happy&#8221; path through a feature, and 2) a passing automated test does not prove anything.</p>
<p>If you couple that with the incredibly high maintenance cost, are they truly useful? I think it was Brian Marick that had observed that automated tests only allow you to find 30% of the defects in your code base, whereas spending that time doing more traditional QA would result in finding 70% of the defects instead. In my own experience, I find that 99% of automated tests failures are the result of an intentional change in the behavior of our app, not that something broke.</p>
<p>Bob Martin says UI testing should be at no more than 20% coverage, with unit tests and integration tests covering the rest.</p>
<p>However, I do agree that we need to prove our features work. The question I&#8217;m having is how? Keep in mind that a passing test doesn&#8217;t prove anything. (by the way, I might not do TDD or BDD as often as I ought to, but I fully agree with those methodologies and SOLID principles. Feel free to call me out on those :))</p>
]]></content:encoded>
	</item>
</channel>
</rss>
