<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress/2.3.3" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>
<channel>
	<title>Comments on: Should Developers Test the Product First?</title>
	<link>http://www.satisfice.com/blog/archives/54</link>
	<description>The Consulting Software Tester</description>
	<pubDate>Sat, 05 Jul 2008 09:12:08 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.3</generator>
		<item>
		<title>By: Chris</title>
		<link>http://www.satisfice.com/blog/archives/54#comment-115024</link>
		<dc:creator>Chris</dc:creator>
		<pubDate>Fri, 21 Mar 2008 17:52:01 +0000</pubDate>
		<guid>http://www.satisfice.com/blog/archives/54#comment-115024</guid>
		<description>I agree, all things considered, I probably want the software sooner rather than later. 

However, with some developers, this can encourage an attitude that the testers are there to "clean up" after the developers. Any bugs that make it through to customers are the tester's fault because they didn't catch them. It seems to erode the shared responsibility for quality by skewing the responsibility toward testing rather than  balancing it with development. I've seen this happen a number of times.

Every time I get a build with new functionality, say a new dialog window, and I press the one button on the dialog and it crashes the software, I wonder about this issue. Am I encouraging the developer in a way that diminishes their responsibility for bugs and hurts the overall quality effort?
&lt;em&gt;
[James' Reply: These are common problems, and they matter. But I find that they can be managed easily without denying me what I need to get my own work done.

Blaming testers for bugs is literally laughable. I don't take it seriously. It doesn't happen, though, because I don't accept the role of quality gatekeeper. Testers must avoid that trap by being clear with everyone what their mission is: discover and report relevant information, NOT make the product work or prove that the product works.

We want to encourage programmers to have a high standard in their work by the time that it gets out the door. This doesn't mean we isolate them until they guarantee it's a clean product. We are working with them to help them make it clean. Of course working with a team means that people will lean on each other. But we also learn from each other. Leaning and learning are not bad things.]&lt;/em&gt;</description>
		<content:encoded><![CDATA[<p>I agree, all things considered, I probably want the software sooner rather than later. </p>
<p>However, with some developers, this can encourage an attitude that the testers are there to &#8220;clean up&#8221; after the developers. Any bugs that make it through to customers are the tester&#8217;s fault because they didn&#8217;t catch them. It seems to erode the shared responsibility for quality by skewing the responsibility toward testing rather than  balancing it with development. I&#8217;ve seen this happen a number of times.</p>
<p>Every time I get a build with new functionality, say a new dialog window, and I press the one button on the dialog and it crashes the software, I wonder about this issue. Am I encouraging the developer in a way that diminishes their responsibility for bugs and hurts the overall quality effort?<br />
<em><br />
[James&#8217; Reply: These are common problems, and they matter. But I find that they can be managed easily without denying me what I need to get my own work done.</p>
<p>Blaming testers for bugs is literally laughable. I don&#8217;t take it seriously. It doesn&#8217;t happen, though, because I don&#8217;t accept the role of quality gatekeeper. Testers must avoid that trap by being clear with everyone what their mission is: discover and report relevant information, NOT make the product work or prove that the product works.</p>
<p>We want to encourage programmers to have a high standard in their work by the time that it gets out the door. This doesn&#8217;t mean we isolate them until they guarantee it&#8217;s a clean product. We are working with them to help them make it clean. Of course working with a team means that people will lean on each other. But we also learn from each other. Leaning and learning are not bad things.]</em></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Stan James</title>
		<link>http://www.satisfice.com/blog/archives/54#comment-968</link>
		<dc:creator>Stan James</dc:creator>
		<pubDate>Thu, 17 Aug 2006 22:17:27 +0000</pubDate>
		<guid>http://www.satisfice.com/blog/archives/54#comment-968</guid>
		<description>Thanks, that makes great sense. I have found the "by example" technique to shine a light on some ambiguities in the customer's textual description of the requirement. A field that "shall be 8 characters" was really a max of 8 and the test example of "7 characters fails" got the right people's attention. There are many ways to seek out such ambiguities, none of them 100% reliable. We can hope the combination of several will get most of them.

There is certainly a need for judgement in probing the risks without making an overwhelming number of tests. I read your posts to say those are important human tester skills, along with an expectation that we likely won't define all the most interesting tests up front.

&lt;em&gt;[James' Reply: Yes, you seem to get it. Thanks. BTW, the best book on requirements I have seen is Exploring Requirements: Quality Before Design, by Gause and Weinberg. It deals with the need to use a variety of methods to get at the real issues.]&lt;/em&gt;</description>
		<content:encoded><![CDATA[<p>Thanks, that makes great sense. I have found the &#8220;by example&#8221; technique to shine a light on some ambiguities in the customer&#8217;s textual description of the requirement. A field that &#8220;shall be 8 characters&#8221; was really a max of 8 and the test example of &#8220;7 characters fails&#8221; got the right people&#8217;s attention. There are many ways to seek out such ambiguities, none of them 100% reliable. We can hope the combination of several will get most of them.</p>
<p>There is certainly a need for judgement in probing the risks without making an overwhelming number of tests. I read your posts to say those are important human tester skills, along with an expectation that we likely won&#8217;t define all the most interesting tests up front.</p>
<p><em>[James&#8217; Reply: Yes, you seem to get it. Thanks. BTW, the best book on requirements I have seen is Exploring Requirements: Quality Before Design, by Gause and Weinberg. It deals with the need to use a variety of methods to get at the real issues.]</em></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Stan James</title>
		<link>http://www.satisfice.com/blog/archives/54#comment-697</link>
		<dc:creator>Stan James</dc:creator>
		<pubDate>Tue, 08 Aug 2006 22:02:52 +0000</pubDate>
		<guid>http://www.satisfice.com/blog/archives/54#comment-697</guid>
		<description>I'm late to this thread, but just found your site. I love your attitude. I find it challenging some ideas that I held. For example, I've been known to say some set of requirements and some set of test cases contain exactly the same information, so we could define a development task by the tests it must pass. I wouldn't claim that's a sufficient set of test cases, and you've emphasized that testing beyond or without the requirements or any test cases is something humans can do with great effect. Still, is that set of tests useful? Something you might want the developer to do?

&lt;em&gt;[James' Reply: Thanks, Jim (or is it Stan? James?). You raise an interesting issue that has a strong role in the philosophy of knowledge: How to distinguish, if at all, between the instrument by which we recognize a "truth" and truth itself?&lt;/em&gt;

&lt;em&gt;A short answer is: it gets easier when you consider evidence and risk, rather than truth. &lt;/em&gt;

&lt;em&gt;When sorting this out, I find it useful to imagine testing a square root function. Let's say you have square root function for a 32-bit floating point value. The specification for square roots is clear, and you even have a heuristic oracle, in the form of re-multiplying the square root to arrive at the original value (you still have to deal with rounding errors, but there are algorithms for handling that).&lt;/em&gt;

&lt;em&gt;Does a "test suite" that consists of a single test of, say, taking the square root of 4, contain exactly the same information as the definition of square root itself? Clearly it doesn't, unless square roots are just the same as dividing by 2. Will passing that one test be equivalent to satisfying the requirement of performing square roots? Clearly it won't. Passing that test suite only tells us that the product is capable of performing square roots in some situation. It's a question of can vs. will. We will know it can (in some situation); we cannot know it will (in every situation that matters).&lt;/em&gt;

&lt;em&gt;If you imagine adding tests to that test suite, the evidence of capability that we are collecting speaks more and more to the question of reliability. The trick in testing is to gather enough of the right kind of evidence to make a well grounded leap of inference from capability to reliability. In the square root case, we must run 2 to the 32 square root cases to have done nearly exhaustive testing (not really exhaustive, but pretty close in some respects). We will then have a pretty strong idea of the reliability of that algorithm, at least with respect to direct input data. We might get away with running fewer tests, depending on the risks we care about.
&lt;/em&gt;

&lt;em&gt;Problems with specification-by-example and subsequent confusion of examples with tests include accidental inclusion of irrelevant details in the spec and accidental omission of important details. I believe examples are powerful and in most cases necessary, but it's important to remember that an example is an instance, whereas our software exists to serve vast families of instances.
&lt;/em&gt;

&lt;em&gt;Quality is equivalent to passed tests only when the tests represent the only input, the only sequence of input, the only combinations of states, the only platform, the only user, the only...{add every other factor here} that you or anyone else who matters cares about.&lt;/em&gt;

&lt;em&gt;Coming back to your question: An excellent test process can conceivably stand in for a requirements spec. However, we must always recognize that this our testing is focusing on some things and not others. There is never a perfect alignment. The excellent tester strives to understand the real requirements and seek the real risk, while remaining wary of complacency and lax assumptions.]
&lt;/em&gt;

&lt;em&gt; &lt;/em&gt;</description>
		<content:encoded><![CDATA[<p>I&#8217;m late to this thread, but just found your site. I love your attitude. I find it challenging some ideas that I held. For example, I&#8217;ve been known to say some set of requirements and some set of test cases contain exactly the same information, so we could define a development task by the tests it must pass. I wouldn&#8217;t claim that&#8217;s a sufficient set of test cases, and you&#8217;ve emphasized that testing beyond or without the requirements or any test cases is something humans can do with great effect. Still, is that set of tests useful? Something you might want the developer to do?</p>
<p><em>[James&#8217; Reply: Thanks, Jim (or is it Stan? James?). You raise an interesting issue that has a strong role in the philosophy of knowledge: How to distinguish, if at all, between the instrument by which we recognize a &#8220;truth&#8221; and truth itself?</em></p>
<p><em>A short answer is: it gets easier when you consider evidence and risk, rather than truth. </em></p>
<p><em>When sorting this out, I find it useful to imagine testing a square root function. Let&#8217;s say you have square root function for a 32-bit floating point value. The specification for square roots is clear, and you even have a heuristic oracle, in the form of re-multiplying the square root to arrive at the original value (you still have to deal with rounding errors, but there are algorithms for handling that).</em></p>
<p><em>Does a &#8220;test suite&#8221; that consists of a single test of, say, taking the square root of 4, contain exactly the same information as the definition of square root itself? Clearly it doesn&#8217;t, unless square roots are just the same as dividing by 2. Will passing that one test be equivalent to satisfying the requirement of performing square roots? Clearly it won&#8217;t. Passing that test suite only tells us that the product is capable of performing square roots in some situation. It&#8217;s a question of can vs. will. We will know it can (in some situation); we cannot know it will (in every situation that matters).</em></p>
<p><em>If you imagine adding tests to that test suite, the evidence of capability that we are collecting speaks more and more to the question of reliability. The trick in testing is to gather enough of the right kind of evidence to make a well grounded leap of inference from capability to reliability. In the square root case, we must run 2 to the 32 square root cases to have done nearly exhaustive testing (not really exhaustive, but pretty close in some respects). We will then have a pretty strong idea of the reliability of that algorithm, at least with respect to direct input data. We might get away with running fewer tests, depending on the risks we care about.<br />
</em></p>
<p><em>Problems with specification-by-example and subsequent confusion of examples with tests include accidental inclusion of irrelevant details in the spec and accidental omission of important details. I believe examples are powerful and in most cases necessary, but it&#8217;s important to remember that an example is an instance, whereas our software exists to serve vast families of instances.<br />
</em></p>
<p><em>Quality is equivalent to passed tests only when the tests represent the only input, the only sequence of input, the only combinations of states, the only platform, the only user, the only&#8230;{add every other factor here} that you or anyone else who matters cares about.</em></p>
<p><em>Coming back to your question: An excellent test process can conceivably stand in for a requirements spec. However, we must always recognize that this our testing is focusing on some things and not others. There is never a perfect alignment. The excellent tester strives to understand the real requirements and seek the real risk, while remaining wary of complacency and lax assumptions.]<br />
</em></p>
<p><em> </em></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Paul Sinnett &#187; Blog Archive &#187; The best tester I ever worked with</title>
		<link>http://www.satisfice.com/blog/archives/54#comment-391</link>
		<dc:creator>Paul Sinnett &#187; Blog Archive &#187; The best tester I ever worked with</dc:creator>
		<pubDate>Thu, 27 Jul 2006 09:35:03 +0000</pubDate>
		<guid>http://www.satisfice.com/blog/archives/54#comment-391</guid>
		<description>[...] Reading an entry on James Bach&#8217;s blog reminded me of the best tester I ever worked with. It got me thinking about how he did it. [...]</description>
		<content:encoded><![CDATA[<p>[&#8230;] Reading an entry on James Bach&#8217;s blog reminded me of the best tester I ever worked with. It got me thinking about how he did it. [&#8230;]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jos Berends</title>
		<link>http://www.satisfice.com/blog/archives/54#comment-326</link>
		<dc:creator>Jos Berends</dc:creator>
		<pubDate>Tue, 25 Jul 2006 13:25:05 +0000</pubDate>
		<guid>http://www.satisfice.com/blog/archives/54#comment-326</guid>
		<description>James,

I agree that there is little use in postponing a product release to test. As long as there is agreement over how to work on or work around unfinished parts.
However, I do wonder what kind of testing you expect to be performed in a project.

&lt;em&gt;[James' Reply: Guess!]&lt;/em&gt;

You say that you do not demand a programmer to do any unit testing. Does this mean that it is sufficient to perform high level functional testing (both black and white box testing).

&lt;em&gt;[James' Reply: What is sufficient depends on the situation. It may be sufficient to do no testing at all. I don't prejudge what is needed. I read the situation and solve the problems that I find there.]&lt;/em&gt;

Or should code-level testing of e.g. modules, interfaces etc. also be performed, though not by the programmer but by the tester?
The latter would probably demand quite advanced programming skills from a tester.

&lt;em&gt;[James' Reply: I have experimented with independent unit-level whitebox testing. The experiment convinced me that it would be very hard to do that productively. It isn't just a programming skills issue, although there is that. It's also an issue of keeping the tests up to date with the code, learning the code, and staying coordinated with the programmer. In general, I wouldn't recommend independent unit-level whitebox testing, but perhaps there are contexts where someone has made it work.]&lt;/em&gt;</description>
		<content:encoded><![CDATA[<p>James,</p>
<p>I agree that there is little use in postponing a product release to test. As long as there is agreement over how to work on or work around unfinished parts.<br />
However, I do wonder what kind of testing you expect to be performed in a project.</p>
<p><em>[James&#8217; Reply: Guess!]</em></p>
<p>You say that you do not demand a programmer to do any unit testing. Does this mean that it is sufficient to perform high level functional testing (both black and white box testing).</p>
<p><em>[James&#8217; Reply: What is sufficient depends on the situation. It may be sufficient to do no testing at all. I don&#8217;t prejudge what is needed. I read the situation and solve the problems that I find there.]</em></p>
<p>Or should code-level testing of e.g. modules, interfaces etc. also be performed, though not by the programmer but by the tester?<br />
The latter would probably demand quite advanced programming skills from a tester.</p>
<p><em>[James&#8217; Reply: I have experimented with independent unit-level whitebox testing. The experiment convinced me that it would be very hard to do that productively. It isn&#8217;t just a programming skills issue, although there is that. It&#8217;s also an issue of keeping the tests up to date with the code, learning the code, and staying coordinated with the programmer. In general, I wouldn&#8217;t recommend independent unit-level whitebox testing, but perhaps there are contexts where someone has made it work.]</em></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Dave Nicolette</title>
		<link>http://www.satisfice.com/blog/archives/54#comment-305</link>
		<dc:creator>Dave Nicolette</dc:creator>
		<pubDate>Mon, 24 Jul 2006 22:34:15 +0000</pubDate>
		<guid>http://www.satisfice.com/blog/archives/54#comment-305</guid>
		<description>Lots of interesting perspectives here. Seems to me some of the discussion overlooks the context of testing. Let's say you are running an agile development project. There's going to be some up front planning before the iterative development starts. As part of the release process, there's going to be (in any corporate IT environment of appreciable size, anyway) a formal testing phase. Iterative development occurs in between those phases.

Some of the discussion seems to mix up the kind of testing you do during the development phase and the kind of testing you do during the formal testing phase. Agile development teams may include testing specialists, but part of the idea of agile development is that everyone on the team is just "the team", and you don't want to subdivide the work along the lines of professional specializations. Having a testing specialist on the team is good because he/she can infuse the tester's perspective into the development process. Developers can learn to write more-testable code, and to think a little bit more like testers. Testers, for their part, can pick up some development skills and gain an appreciation for what, how, and why certain things can go wrong, giving them good information for creating more effective tests. But none of that is the same thing as the formal, after-the-fact testing phase.

&lt;em&gt;[James' Reply: I'm not convinced that what you are describing is an agile project, Dave. You may be describing an "Agile" project, but that isn't the same thing. Agility (I'm talking about the English word, not the word made up by some programming consultants that is spelled and pronounced the same) may be served by many approaches and ideas. Personally, I find the "no specialists" rule bizarre. It's just another way of saying that a homogenous workforce is better than a diversified workforce. It denies education and temperament. It denies experience. I urge you to rethink it. &lt;/em&gt;

&lt;em&gt;I like the idea of working as a team. "No specialists" doesn't mean that. My experience discussing this with Agilists is that "no specialists", in practice, means that only programming skills are valued.]&lt;/em&gt;

At our company, the real value-add of the testing group comes during the formal testing phase that precedes a production release. They are equipped to carry out testing at a level the developers are not. For example, they can test the new or changed solution in the context of a shared server environment alongside the other applications that "live" in that environment. A development team usually is not set up to perform that kind of testing. Their development environment doesn't mirror the production environment completely, and they don't have other applications installed there. The testing group is also best equipped to perform comprehensive system testing for performance, maximum load, security, and other factors. Testers also have an objective perspective about the application and won't make any assumptions about what "should" work.

&lt;em&gt;[James' Reply: I wonder what role testing skill plays in this. You don't seem to be talking about it.] &lt;/em&gt;

To enable the testing group to do its job, it's incumbent on development teams to deliver code that will, at least, run. When development teams deliver code that hasn't even been unit tested, quite often the testing group has to spend all the time allocated in the project schedule to running unit, integration, and functional tests to expose defects that really should not exist by the time they receive the code. They need to spend their time doing the kind of testing the development team just can't do.  Otherwise they'll run out of time before they get around to the level of testing they're really supposed to be doing.

&lt;em&gt;[James' Reply: It's great when it runs. However, I don't need running code to do certain aspects of my work. I don't want you to delay giving me access to the product because you are concerned about running code. I think I have a different view of my job than you do. If we worked together, I would try to open your eyes to the things I can do with a product that don't involve running it. I don't expect you to know much about testing. But I would expect you not to presume to tell me, a tester, what I need in order to do my job. It's for me to tell you that.]&lt;/em&gt;

However you want to divvy up the work is fine, as long as everyone is engaged in a constructive way and doesn't have a confrontational attitude. I think this is far more important than specific procedures or techniques for development or testing. James' original post states, "I worry that anything that may cause the programmers to avoid working with me is toxic to rapid, excellent testing." A negative attitude toward others who are working in different roles than yourself certainly qualifies as "toxic." Insectivorous' comments illustrate this point very succinctly. He doesn't sound like a person I would want to work with, whether as a tester or a developer or in any other role. People with that sort of attitude can destroy a project, whether they are working as developers, testers, managers, or whatever.&lt;em&gt; &lt;/em&gt;

&lt;em&gt;[James' Reply: I think Insectivorous was not talking to you, a programmer. He was talking to his fellow testers. The spirit of Insectivorous' words, I think, has to do with recognizing what a testing specialist brings to the table. You seem like a nice guy, Dave, so I'd like you to consider that your views on testing may come across as patronizing to those of us who like being testers and take our testing skills seriously. I bet that is not your intention. &lt;/em&gt;

&lt;em&gt;In case you didn't know, I also am a programmer. I am not a programmer-philosopher, though, and I don't write about how programmer's should do their work. I don't feel qualified to do that. I'm surprised at how many programmers feel qualified to tell me how to do testing, not having ever studied the subject, and having no experience beyond intuitive plunking. I'm not sure if you are one of those; I hope you're not.]&lt;/em&gt;</description>
		<content:encoded><![CDATA[<p>Lots of interesting perspectives here. Seems to me some of the discussion overlooks the context of testing. Let&#8217;s say you are running an agile development project. There&#8217;s going to be some up front planning before the iterative development starts. As part of the release process, there&#8217;s going to be (in any corporate IT environment of appreciable size, anyway) a formal testing phase. Iterative development occurs in between those phases.</p>
<p>Some of the discussion seems to mix up the kind of testing you do during the development phase and the kind of testing you do during the formal testing phase. Agile development teams may include testing specialists, but part of the idea of agile development is that everyone on the team is just &#8220;the team&#8221;, and you don&#8217;t want to subdivide the work along the lines of professional specializations. Having a testing specialist on the team is good because he/she can infuse the tester&#8217;s perspective into the development process. Developers can learn to write more-testable code, and to think a little bit more like testers. Testers, for their part, can pick up some development skills and gain an appreciation for what, how, and why certain things can go wrong, giving them good information for creating more effective tests. But none of that is the same thing as the formal, after-the-fact testing phase.</p>
<p><em>[James&#8217; Reply: I&#8217;m not convinced that what you are describing is an agile project, Dave. You may be describing an &#8220;Agile&#8221; project, but that isn&#8217;t the same thing. Agility (I&#8217;m talking about the English word, not the word made up by some programming consultants that is spelled and pronounced the same) may be served by many approaches and ideas. Personally, I find the &#8220;no specialists&#8221; rule bizarre. It&#8217;s just another way of saying that a homogenous workforce is better than a diversified workforce. It denies education and temperament. It denies experience. I urge you to rethink it. </em></p>
<p><em>I like the idea of working as a team. &#8220;No specialists&#8221; doesn&#8217;t mean that. My experience discussing this with Agilists is that &#8220;no specialists&#8221;, in practice, means that only programming skills are valued.]</em></p>
<p>At our company, the real value-add of the testing group comes during the formal testing phase that precedes a production release. They are equipped to carry out testing at a level the developers are not. For example, they can test the new or changed solution in the context of a shared server environment alongside the other applications that &#8220;live&#8221; in that environment. A development team usually is not set up to perform that kind of testing. Their development environment doesn&#8217;t mirror the production environment completely, and they don&#8217;t have other applications installed there. The testing group is also best equipped to perform comprehensive system testing for performance, maximum load, security, and other factors. Testers also have an objective perspective about the application and won&#8217;t make any assumptions about what &#8220;should&#8221; work.</p>
<p><em>[James&#8217; Reply: I wonder what role testing skill plays in this. You don&#8217;t seem to be talking about it.] </em></p>
<p>To enable the testing group to do its job, it&#8217;s incumbent on development teams to deliver code that will, at least, run. When development teams deliver code that hasn&#8217;t even been unit tested, quite often the testing group has to spend all the time allocated in the project schedule to running unit, integration, and functional tests to expose defects that really should not exist by the time they receive the code. They need to spend their time doing the kind of testing the development team just can&#8217;t do.  Otherwise they&#8217;ll run out of time before they get around to the level of testing they&#8217;re really supposed to be doing.</p>
<p><em>[James&#8217; Reply: It&#8217;s great when it runs. However, I don&#8217;t need running code to do certain aspects of my work. I don&#8217;t want you to delay giving me access to the product because you are concerned about running code. I think I have a different view of my job than you do. If we worked together, I would try to open your eyes to the things I can do with a product that don&#8217;t involve running it. I don&#8217;t expect you to know much about testing. But I would expect you not to presume to tell me, a tester, what I need in order to do my job. It&#8217;s for me to tell you that.]</em></p>
<p>However you want to divvy up the work is fine, as long as everyone is engaged in a constructive way and doesn&#8217;t have a confrontational attitude. I think this is far more important than specific procedures or techniques for development or testing. James&#8217; original post states, &#8220;I worry that anything that may cause the programmers to avoid working with me is toxic to rapid, excellent testing.&#8221; A negative attitude toward others who are working in different roles than yourself certainly qualifies as &#8220;toxic.&#8221; Insectivorous&#8217; comments illustrate this point very succinctly. He doesn&#8217;t sound like a person I would want to work with, whether as a tester or a developer or in any other role. People with that sort of attitude can destroy a project, whether they are working as developers, testers, managers, or whatever.<em> </em></p>
<p><em>[James&#8217; Reply: I think Insectivorous was not talking to you, a programmer. He was talking to his fellow testers. The spirit of Insectivorous&#8217; words, I think, has to do with recognizing what a testing specialist brings to the table. You seem like a nice guy, Dave, so I&#8217;d like you to consider that your views on testing may come across as patronizing to those of us who like being testers and take our testing skills seriously. I bet that is not your intention. </em></p>
<p><em>In case you didn&#8217;t know, I also am a programmer. I am not a programmer-philosopher, though, and I don&#8217;t write about how programmer&#8217;s should do their work. I don&#8217;t feel qualified to do that. I&#8217;m surprised at how many programmers feel qualified to tell me how to do testing, not having ever studied the subject, and having no experience beyond intuitive plunking. I&#8217;m not sure if you are one of those; I hope you&#8217;re not.]</em></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Toby</title>
		<link>http://www.satisfice.com/blog/archives/54#comment-181</link>
		<dc:creator>Toby</dc:creator>
		<pubDate>Sun, 16 Jul 2006 15:09:38 +0000</pubDate>
		<guid>http://www.satisfice.com/blog/archives/54#comment-181</guid>
		<description>James

The catch with your way of working is that it will only work with highly skilled testers that at the same time know a lot about programming. That leaves some 99 percent of the testers I have come in contact with including myself. Yes, I did some programming a long time ago but do not know enough to throw myself over half-baked products. That would for me to sped my time badly. However I would like to share what works for me. "My process"

Early involvment in the project: I start reading any piece of information that exists so far on the project and start analysing. Sometimes i visualise it by creating some sort of model. Then I start asking questions regarding what is unclear to me. This way a lt of missing or wrong requirements are noticed and updated. Sometimes I read through the program spec. It really depends on how readable it is for me. Formulas and logic I can understand. language specifics I leave alone. I do find some stuff, mostly due to sloppy work.

Next thing is to volonteer to create test cases for each module, program or whatever piece of code there is on a level that I can understand. Few programmers do any "real testing" other than the most obvious things. Then I  hand these test cases over to the programmer so they can run them in THEIR own environment when THEY feel ready to do so. This way nobody has to know whatever embarrassing bugs they put in the code, no defect reports are written, no statistics saved. However I know that they have actually run some pretty good tests AND corrected the defects they found. which means that when they hand over their code to the test team we will find less simple bugs and are allowed to concentrate on more hogh level tests.  They look good, testers are happy, management are thrilled.

Then I create test cases for higher levels as System and acceptance test. Some are fairly detailed but i tend to write down less information nowadays. Fully detailed test cases can be handed over to customers, testers with low skills and also the developers themselves. test cases with less detail are run be me or other highly skilled testers who does not want or need too much control. I think they are closer to what you call "charters" than they way they are described in the books you dislike. Developers often run some of the system test cases just to ensure that they will continue looking good, not creating broken builds etc. Like a smoke test on each build. How it works? Great! The test team find fewer bugs, but since we know it is because there are less to be found we are still happy, customers find almost no bugs at all in their acceptance test, if they find any they are usually due to bad requirements...

So I too feel the need to cooperate with developers using my superior skills in testing together with their superior skills in programming. Like you say yourself -"testers must add value". I think that your way of working works for you and a few other "blingual" tester-developers but my way will work for a larger part - but not all - of the current tester community. Or maybe it can be described on a scale like exploratory-scripted, where you are on the far end of the scale and I am closer to the middle and the certification people and other famous authors are on the other end?

/Toby

PS: How did you spend your spare time before you had comments turned on to your blog :-)

&lt;em&gt;[James' Reply: If all comments were like this, I would have more spare time. Good points.]&lt;/em&gt;</description>
		<content:encoded><![CDATA[<p>James</p>
<p>The catch with your way of working is that it will only work with highly skilled testers that at the same time know a lot about programming. That leaves some 99 percent of the testers I have come in contact with including myself. Yes, I did some programming a long time ago but do not know enough to throw myself over half-baked products. That would for me to sped my time badly. However I would like to share what works for me. &#8220;My process&#8221;</p>
<p>Early involvment in the project: I start reading any piece of information that exists so far on the project and start analysing. Sometimes i visualise it by creating some sort of model. Then I start asking questions regarding what is unclear to me. This way a lt of missing or wrong requirements are noticed and updated. Sometimes I read through the program spec. It really depends on how readable it is for me. Formulas and logic I can understand. language specifics I leave alone. I do find some stuff, mostly due to sloppy work.</p>
<p>Next thing is to volonteer to create test cases for each module, program or whatever piece of code there is on a level that I can understand. Few programmers do any &#8220;real testing&#8221; other than the most obvious things. Then I  hand these test cases over to the programmer so they can run them in THEIR own environment when THEY feel ready to do so. This way nobody has to know whatever embarrassing bugs they put in the code, no defect reports are written, no statistics saved. However I know that they have actually run some pretty good tests AND corrected the defects they found. which means that when they hand over their code to the test team we will find less simple bugs and are allowed to concentrate on more hogh level tests.  They look good, testers are happy, management are thrilled.</p>
<p>Then I create test cases for higher levels as System and acceptance test. Some are fairly detailed but i tend to write down less information nowadays. Fully detailed test cases can be handed over to customers, testers with low skills and also the developers themselves. test cases with less detail are run be me or other highly skilled testers who does not want or need too much control. I think they are closer to what you call &#8220;charters&#8221; than they way they are described in the books you dislike. Developers often run some of the system test cases just to ensure that they will continue looking good, not creating broken builds etc. Like a smoke test on each build. How it works? Great! The test team find fewer bugs, but since we know it is because there are less to be found we are still happy, customers find almost no bugs at all in their acceptance test, if they find any they are usually due to bad requirements&#8230;</p>
<p>So I too feel the need to cooperate with developers using my superior skills in testing together with their superior skills in programming. Like you say yourself -&#8221;testers must add value&#8221;. I think that your way of working works for you and a few other &#8220;blingual&#8221; tester-developers but my way will work for a larger part - but not all - of the current tester community. Or maybe it can be described on a scale like exploratory-scripted, where you are on the far end of the scale and I am closer to the middle and the certification people and other famous authors are on the other end?</p>
<p>/Toby</p>
<p>PS: How did you spend your spare time before you had comments turned on to your blog <img src='http://www.satisfice.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><em>[James&#8217; Reply: If all comments were like this, I would have more spare time. Good points.]</em></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: SB</title>
		<link>http://www.satisfice.com/blog/archives/54#comment-167</link>
		<dc:creator>SB</dc:creator>
		<pubDate>Fri, 14 Jul 2006 22:46:33 +0000</pubDate>
		<guid>http://www.satisfice.com/blog/archives/54#comment-167</guid>
		<description>I was spoiled by the last company I worked for as we had great testers there. They were great to work with and very understanding. Unfortunately, now we have testers that are so bad it is better to test it myself. They are too busy playing solitare to find even the obvious bugs....

&lt;em&gt;[James' Reply: On behalf of skilled and diligent testers everywhere, please accept my apologies. Indeed, a skill-free tester is not able to do much with a partly-baked product. My heuristic of instant release applies to me, testers who work for me, and testers who are like me, but not to every tester. It is something I'm suggesting that testers say to their programmer counterparts; something I hope we aspire to, in any case. I'd like to see no distinction between the testing phase and the programming phase. The whole concept of separate phases seems to me based on a myopic and defensive idea of what programming and testing can be.]&lt;/em&gt;</description>
		<content:encoded><![CDATA[<p>I was spoiled by the last company I worked for as we had great testers there. They were great to work with and very understanding. Unfortunately, now we have testers that are so bad it is better to test it myself. They are too busy playing solitare to find even the obvious bugs&#8230;.</p>
<p><em>[James&#8217; Reply: On behalf of skilled and diligent testers everywhere, please accept my apologies. Indeed, a skill-free tester is not able to do much with a partly-baked product. My heuristic of instant release applies to me, testers who work for me, and testers who are like me, but not to every tester. It is something I&#8217;m suggesting that testers say to their programmer counterparts; something I hope we aspire to, in any case. I&#8217;d like to see no distinction between the testing phase and the programming phase. The whole concept of separate phases seems to me based on a myopic and defensive idea of what programming and testing can be.]</em></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alejandro Ramirez</title>
		<link>http://www.satisfice.com/blog/archives/54#comment-163</link>
		<dc:creator>Alejandro Ramirez</dc:creator>
		<pubDate>Thu, 13 Jul 2006 18:11:51 +0000</pubDate>
		<guid>http://www.satisfice.com/blog/archives/54#comment-163</guid>
		<description>I agree with you James.

This topic creates a gray area for delimiting the end of development testing and the start of system testing.

We need to make sure that the acceptance criteria is clearly defined for everyone throughout our development effort so that the developers not only test the technicalities and architectural side of code (conformance to specifications), but also that their code implements the desired functionality for the end users (conformance to user needs and wants).

&lt;em&gt;[James' Reply: I'm interested in where this need comes from, for you, since I have not experienced a context where this need exists. I find that acceptance criteria is not a pre-requisite for testing, but rather that testing is a process of refining acceptance criteria. By the end of testing, ideally, we know what we are accepting and why we are accepting it. &lt;/em&gt;

&lt;em&gt;Also, as I've already written, I don't particularly need the programmers to do any testing. I appreciate it when they do, just as a paramedic appreciates when people on the scene render CPR to a heart attack victim, but don't delay calling me in because you feel like you should test. Don't delay. That's my message to the programmers I work with.]
&lt;/em&gt;

This knowledge can be leveraged by jointly reviewing all documents directly derived from requirements: use cases, design specifications, functional specifications, technical specifications, test cases, and of course, the requirements specification document itself.

Developers must be completely aware of what is expected of their code, and to achieve this, cross-functional meetings can be organized before and after every phase of the SDLC to: prevent defect injection, identify defect predictability patterns, and minimize heavy reliance on quality control to find bugs.

By doing this, we are empowering the creators of every deliverable in the SDLC with the knowledge to produce the best quality interim products in terms of compliance to standards, and customer satisfaction (and yes, that includes code).

&lt;em&gt;[James' Reply: In general, I don't find that quality software comes from extensive planning and documentation. I think that's because so much of the extensive planning is bad planning, and so much documentation is bad documentation. I suppose, like cocaine, it's possible to indulge in that stuff and not get in trouble, but mostly I just see people get in trouble with it. I prefer a more agile and incremental approach to achieve excellent quality software.] &lt;/em&gt;

We are together in this software development thing; let everybody do what they do best and remember that everybody else can learn something from it.</description>
		<content:encoded><![CDATA[<p>I agree with you James.</p>
<p>This topic creates a gray area for delimiting the end of development testing and the start of system testing.</p>
<p>We need to make sure that the acceptance criteria is clearly defined for everyone throughout our development effort so that the developers not only test the technicalities and architectural side of code (conformance to specifications), but also that their code implements the desired functionality for the end users (conformance to user needs and wants).</p>
<p><em>[James&#8217; Reply: I&#8217;m interested in where this need comes from, for you, since I have not experienced a context where this need exists. I find that acceptance criteria is not a pre-requisite for testing, but rather that testing is a process of refining acceptance criteria. By the end of testing, ideally, we know what we are accepting and why we are accepting it. </em></p>
<p><em>Also, as I&#8217;ve already written, I don&#8217;t particularly need the programmers to do any testing. I appreciate it when they do, just as a paramedic appreciates when people on the scene render CPR to a heart attack victim, but don&#8217;t delay calling me in because you feel like you should test. Don&#8217;t delay. That&#8217;s my message to the programmers I work with.]<br />
</em></p>
<p>This knowledge can be leveraged by jointly reviewing all documents directly derived from requirements: use cases, design specifications, functional specifications, technical specifications, test cases, and of course, the requirements specification document itself.</p>
<p>Developers must be completely aware of what is expected of their code, and to achieve this, cross-functional meetings can be organized before and after every phase of the SDLC to: prevent defect injection, identify defect predictability patterns, and minimize heavy reliance on quality control to find bugs.</p>
<p>By doing this, we are empowering the creators of every deliverable in the SDLC with the knowledge to produce the best quality interim products in terms of compliance to standards, and customer satisfaction (and yes, that includes code).</p>
<p><em>[James&#8217; Reply: In general, I don&#8217;t find that quality software comes from extensive planning and documentation. I think that&#8217;s because so much of the extensive planning is bad planning, and so much documentation is bad documentation. I suppose, like cocaine, it&#8217;s possible to indulge in that stuff and not get in trouble, but mostly I just see people get in trouble with it. I prefer a more agile and incremental approach to achieve excellent quality software.] </em></p>
<p>We are together in this software development thing; let everybody do what they do best and remember that everybody else can learn something from it.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: kumar</title>
		<link>http://www.satisfice.com/blog/archives/54#comment-162</link>
		<dc:creator>kumar</dc:creator>
		<pubDate>Thu, 13 Jul 2006 12:17:42 +0000</pubDate>
		<guid>http://www.satisfice.com/blog/archives/54#comment-162</guid>
		<description>Its true that testers need to test their product, but again, we should also achieve enough isolation so that the realtime bugs are exposed. I have personally as a test engineer found the following benefits by absolutely isolating testing from development environment.
1. The real time bugs are exposed
2. unseen and unvisualised dimensions of the product are exposed, this further leads to reverting to design stage make better desing decesions
3.Product gets good marketing
4.Leads to healthy criticism and discussion
5.provides a chance to developers to think from a wider and wiser perspective.
At the same time unit testing should be left to developers, team and management together must be able to decide what needs to go to developers and what must be left to test engineers (substantial part of end user testing must be left to test engineers).
In case of parallel testing its a good idea that both test engineers and developers test the product together as this saves lot of time, effort and cost.

&lt;em&gt;[James' Reply: I don't follow your reasoning on this. But anyway, have you considered the downside of total independence? There's always a tradeoff, don't you think?]
&lt;/em&gt;</description>
		<content:encoded><![CDATA[<p>Its true that testers need to test their product, but again, we should also achieve enough isolation so that the realtime bugs are exposed. I have personally as a test engineer found the following benefits by absolutely isolating testing from development environment.<br />
1. The real time bugs are exposed<br />
2. unseen and unvisualised dimensions of the product are exposed, this further leads to reverting to design stage make better desing decesions<br />
3.Product gets good marketing<br />
4.Leads to healthy criticism and discussion<br />
5.provides a chance to developers to think from a wider and wiser perspective.<br />
At the same time unit testing should be left to developers, team and management together must be able to decide what needs to go to developers and what must be left to test engineers (substantial part of end user testing must be left to test engineers).<br />
In case of parallel testing its a good idea that both test engineers and developers test the product together as this saves lot of time, effort and cost.</p>
<p><em>[James&#8217; Reply: I don&#8217;t follow your reasoning on this. But anyway, have you considered the downside of total independence? There&#8217;s always a tradeoff, don&#8217;t you think?]<br />
</em></p>
]]></content:encoded>
	</item>
</channel>
</rss>
