    <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/">
     <channel>
        <title>ACCU  :: Non-Superfluous People: Testers</title>
        <link>https://members.accu.org/index.php/journals/2041</link>
        <description>Professionalism in Programming</description>
        <dc:language>en-us</dc:language> 
        <dc:creator>Administrator</dc:creator> 
        <admin:generatorAgent rdf:resource="http://www.xaraya.org" /> 
        <admin:errorReportsTo rdf:resource="mailto:webeditor@accu.org" />
       <sy:updatePeriod>hourly</sy:updatePeriod>
       <sy:updateFrequency>1</sy:updateFrequency>
       <docs>http://backend.userland.com/rss</docs>


        <h2>Journal Articles</h2>


<div class="xar-mod-head"><span class="xar-mod-title">Overload Journal #124 - December 2014 + Programming Topics</span></div>

<table border="0" cellpadding="1" cellspacing="0">
    <tbody>
    <tr>
        <td valign="top">
            Browse in :
       </td>
       <td valign="top">

                                            <a href="https://members.accu.org/index.php/journals/">All</a>

                     &gt;                         <a href="https://members.accu.org/index.php/journals/c76/">Journals</a>

                     &gt;                         <a href="https://members.accu.org/index.php/journals/c78/">Overload</a>

                     &gt;                         <a href="https://members.accu.org/index.php/journals/c344/">o124</a>
                    (7)
<br />

                                            <a href="https://members.accu.org/index.php/journals/">All</a>

                     &gt;                         <a href="https://members.accu.org/index.php/journals/c13/">Topics</a>

                     &gt;                         <a href="https://members.accu.org/index.php/journals/c65/">Programming</a>
                    (877)
<br />

                                            <a href="https://members.accu.org/index.php/journals/c344-65/">Any of these categories</a>

                    -                        <a href="https://members.accu.org/index.php/journals/c344+65/">All of these categories</a>
<br />
</td>
   </tr>
   </tbody>
</table>




<div class="xar-error">
   <p>
 <strong>Note:</strong> when you create a new publication type,
the articles module will automatically use the templates
<em>user-display-[publicationtype].xt</em>
and <em>user-summary-[publicationtype].xt</em>.
If those templates do not exist when you try to preview or display a new article,
you'll get this warning :-)  Please place your own templates in themes/<em>yourtheme</em>/modules/articles . The templates will get the extension .xt there. </p>
</div>
<div class="xar-norm xar-standard-box-padding">
   <h1><strong>Title:</strong>&nbsp;Non-Superfluous People: Testers</h1>
<p><strong>Author:</strong>&nbsp;Martin Moene</p>
<p>
<strong>Date:</strong> 04 December 2014 19:10:36 +00:00 or Thu, 04 December 2014 19:10:36 +00:00</p>
<p><strong>Summary:</strong>&nbsp;Software development needs a team of supporting players. Sergey Ignatchenko takes a look at the role of professional testers.

</p>
<p><strong>Body:</strong>&nbsp;<p class="quote">The superfluous man (Russian: Ð»Ð¸ÑˆÐ½Ð¸Ð¹ Ñ‡ÐµÐ»Ð¾Ð²ÐµÐº, lishniy chelovek) is an 1840s and 1850s Russian literary concept derived from the Byronic hero. It refers to an individual, perhaps talented and capable, who does not fit into social norms.<br /><em>~ Wikipedia</em></p>

<p class="EditorIntro">Disclaimer: as usual, opinions within this article are those of â€˜No Bugsâ€™ Bunny, and do not necessarily coincide with the opinions of the translator or <em>Overload</em> editors; please also keep in mind that translation difficulties from Lapine (like those described in [<a href="#[Loganberry04]">LoganBerry04</a>]) might have prevented from providing an exact translation. In addition, both the translator and <em>Overload</em> expressly disclaim all responsibility from any action or inaction resulting from reading this article.</p>

<p>This article intends to open a mini-series on the people whoâ€™re often seen as â€˜superfluousâ€™ either by management or by developers (and often by both); this includes, but is not limited to, such people as testers, UX (User eXperience) specialists, and BA (Business Analysts). However, in practice, they are very useful â€“ that is, if you can find a good person for the job (which admittedly can be difficult). This article tries to discuss the role of testers in the development flow.</p>

<h2>Hey, we already have test-driven development, testers are so XX century!</h2>

<p class="quote">Assumption is a mother of all screw-ups<br /><em>~ Wethernâ€™s Law of Suspended Judgment</em></p>

<p>When raising a question about testers in modern developer circles, frequently the first reaction is surprise. As a next step, if developers are kind enough not to take me by my ears and throw me out immediately, they start to explain all the benefits of automated unit testing and/or test-driven development. I can assure all the readers that I know all the benefits of these concepts and sometimes I even use them myself.</p>

<p>Still, even if you have test-driven development (which is often a good thing, there is no argument about it), it still doesnâ€™t mean youâ€™ve got a silver bullet which guarantees that you have zero bugs. Moreover, there are at least four really important reasons why we cannot expect that such tests can possibly cover the whole space of potential bugs.</p>

<p>First of all, we need to mention that usually, the most hard-to-find bugs are integration bugs. How often do you face the following situation: â€œBoth modules are working fine separately, but together they fail; to make things worse, they fail only in 20% of common use cases.â€? Iâ€™m willing to bet all the carrots in the world that for any more-than-single-person-development such a situation is not just â€˜commonâ€™, it is a thing which takes at least 50% of the system debugging time. In the theory of test-driven development, it should be a responsibility of whoever combined these two modules to write test cases for all possible interactions, but it never happens if modules are not-too-trivial. Some tests (often as little as one, to have something to run) are written, sure, but all of them? No way. Why this is the case can be somewhat explained by the next two reasons.</p>

<p>The second reason is related to psychology. The mindset of a developer is usually â€˜to create somethingâ€™, not â€˜to break somethingâ€™. It is especially true when you need to look for ways to break your own creation. â€˜To create a test to demonstrate that your creation is workingâ€™ is one thing (and this is what happens in test-driven development), but â€˜to look for creative ways to break your own creationâ€™ is a <em>very</em> different story. Sometimes this second effect may be mitigated by having developer A write code and developer B write test cases for this code (and vice versa), but such a policy essentially means that each developer works as a half-time tester, thatâ€™s it.</p>

<p>The third reason is related to the observation that when higher-level more-complicated modules are being integrated, the developer whoâ€™s doing it simply does not have enough information to find all the relevant test cases. In practice, module documentation rarely goes beyond doxygen, and never ever describes all the relevant details (not that Iâ€™m saying it can be possibly done at all). It means that unless the developer who performs the integration wrote both modules being integrated, she doesnâ€™t have sufficient information to write an exhaustive set of test cases (not to mention that doing it may be prohibitively expensive). In theory, one shouldnâ€™t rely on anything which has not been tested in module unit tests, but even this is not realistic, and doesnâ€™t guarantee against integration issues. </p>

<p>The fourth reason is related to the same developer at the same time having too much information about the program. Often the developer â€˜knowsâ€™ how it should work, and assumes (!) that it does. Which inevitably leads to test cases being omitted. On the other hand, the developer often doesnâ€™t know all the details about how the code is supposed to be used (and especially those scenarios which are not supposed to happen, but will arise in real life anyway).</p>

<p>In three out of these four cases listed above (#1,#2, and #4) a tester performing high-level testing has a clear advantage over a developer doing unit testing (there are other cases where unit tests have advantage over high-level testing, but this is beyond the scope now as weâ€™re not arguing about unit testing being unnecessary). Based on the reasoning above, and on many years of experience, IMNSHO testers <em>are</em> necessary in most projects developed by more than 1 or 2 people.</p>

<p>With this in mind, weâ€™ve already answered the question, â€œDo we need testers if we have test-driven development?â€ and now can proceed to the next ones: â€œWhat are we trying to achieve?â€, â€œHow to convince management that you need testersâ€, and â€œHow to organize a useful testing team?â€ (even if â€˜teamâ€™ is as small as 1 tester).</p>

<h2>Goals of the testing team</h2>

<p>Each team should have well-defined goals. The goal of a testing team is to improve product quality (some may argue that it is to â€˜assure qualityâ€™, but as a zero-defect product is a non-existing beast, it is better to admit it and make it clear that team should actively look for bugs, rather than passively say, â€œEverything is okâ€).</p>

<p>Improving product quality is a very broad task, and includes at least such things as (with more details on some of these tasks provided below, under â€˜How to organize the testing teamâ€™): </p>

<ul>
	<li>automated regression testing; sure, unit tests should be run by developers themselves, but integration testing should also include automated regression testing</li>
	<li>actively looking for ways to break the program. For example, one thing which a good tester usually does is to look for things like â€œHey, what if a user presses this button now?â€</li>
	<li>if applicable: monitoring end-user feedback and producing reproducible bug reports out of it</li>
	<li>if there is no UX team: reporting â€˜usability defectsâ€™, also (if applicable) from end-user feedback</li>
</ul>

<p>If youâ€™re still sure that you (as developer) want to do all these things yourself â€“ I give up. For the rest of you, letâ€™s proceed to the next question: â€œHow to convince management that you need testersâ€?</p>

<h2>Testers from the management perspective</h2>

<p>Admittedly, convincing management about testers can be really tough. After all, from an accounting perspective, testers are often interpreted as an expense, without producing anything tangible (developers are at least producing code, which can be seen as an asset, but testers, even good ones, donâ€™t produce any assets). The same logic, however, can be extended to say that as code is an asset, a bug in a code (which reduces code quality and user experience) is a liability (in extreme cases â€“ it can be literally a liability in a sense too [<a href="#[Levy89]">Levy89</a>] [<a href="#[Techdirt11]">Techdirt11</a>]). Therefore, while testers indeed do not produce assets, they do remove liabilities, which has a positive impact on the bottom line of the company (provided that the testers are good, but this stands for all kinds of employees).</p>

<p>Throwing in such an all-important thing as improved end-user satisfaction, this should be enough to convince all but the most-stubborn managers to admit that testers are useful; the problem of convincing them that testers are needed â€˜right nowâ€™ (and not â€œyes, sure, maybe, some time laterâ€) is left as an exercise for the reader. </p>

<h2>How NOT to organize a testing team</h2>

<p>At some point in my career, I was working for a really huge company (on the scale of â€œIâ€™m not sure if there is anything larger out thereâ€). There, the testing department for one of the projects consisted of several dozen people, who were given instructions like â€œpress such and such button, you should be shown such and such screen, if it is not â€“ report, if it is â€“ go to the next stepâ€. This is certainly one way not to organize your testing team. </p>

<h2>How to organize a testing team</h2>

<p>As usual, organizing the development process is more art than science, and this applies to testing teams in spades. However, there are some common observations which may help on the way:</p>

<ul>
	<li>never ever position testers as inferior to developers. First, they are not inferior (and if they are, youâ€™ve done a poor job organizing the testing team). Second, it will hurt the process badly. Overall, it is usually better to position testers higher than developers (in a sense that developers should fix the bugs found by the testers instead of arguing that it is not a bug, but a feature); at the very least:
		<ul>
			<li>opened bugs should be processed according to tester-specified severity and priority</li>
			<li>the process of closing bugs as WONTFIX shouldnâ€™t be too easy for developers, and should involve discussions and/or management approval</li>
		</ul>
	</li>
	<li>never ever think of testers as inferior developers. Think of them as of developers with a different mindset. As discussed above, there are things which developers cannot do for objective reasons.</li>
	<li>automated testing tools is are an absolute must. Situations when testers are just pressing buttons according to instructions must be avoided at all costs. Whenever a bug is found and fixed, a test case must be included into a standard regression test set.</li>
	<li>whenever possible, consider writing automated self-testing tools at non-UI level; for example, if your application is a network one, one way to test is not by pressing buttons in the UI client, but by making network requests instead. This may allow testing the system a bit differently (which is always good) and under much heavier stress (which is even better). Such automated self-testing tools are normally written by developers and used by testers.</li>
	<li>it should be clearly stated that normally it is a testerâ€™s responsibility to make a bug reproducible (exceptions for intermittent bugs are possible, but they should stay as exceptions). Having irreproducible bugs in bug tracking is bad for several reasons, including the following two: first, it forces developer to do testerâ€™s job (with most of the argument for having separate testing team applicable); second, it greatly reduces enthusiasm for developers to fix the problem.</li>
	<li>if a product is already released, at least some portion of testersâ€™ time should be dedicated to go through user complaints, try to reproduce them and open bugs if bugs are confirmed. For a product with an active user forum, this can work wonders with regards to product quality. This approach risks starting to deal with singular user complaints (i.e. those which represent a problem only for one single user), but provided that user forum is active enough, simple filtering of â€œat least N complaintsâ€ usually does the trick (see also below about â€œweâ€™ve already got two(!) complaintsâ€ approach â€“ it did work in practice). </li>
	<li>one special area is â€˜Usability defectsâ€™. Strictly speaking, it is better to delegate dealing with such defects to UX specialists (which represent another category of â€˜Non-Superfluous Peopleâ€™ and will be hopefully be discussed in a separate article). However, if you do not have separate UX team (which you should, but probably donâ€™t) â€“ it should be a responsibility of testers to complain about â€˜Usability defectsâ€™ (in other words, about â€˜inconvenient/confusing UIâ€™). At the very least, end-user complaints about â€˜Usability defectsâ€™ should be taken really seriously and fixed whenever there are enough users complaining. After all, it is the end-user whoâ€™s ultimately paying for the development [<a href="#[NoBugs11]">NoBugs11</a>]. In one company with millions of users, Iâ€™ve seen a policy of â€œHey, we already have two (!) complaints from end-users â€“ we should do something about it in the next releaseâ€. Believe it or not, such a policy did result in the company making the best software in the field (and making money out of it too).</li>
	<li>having a testing team does not imply in any way that unit tests and/or test-driven development are not necessary. Ideally, testing teams should work only with stuff which has already been unit-tested and concentrate on (a) automated regression testing; and (b) not-so-obvious ways to break the program.</li>
</ul>

<h2>Hey, where to find good testers?</h2>

<p>Unfortunately, finding good testers is a big problem. However, if you stop thinking about testers as inferior people, and search for them not as an afterthought, but in the same way as youâ€™re looking for developers, it usually becomes possible. Yes, finding a good tester is not easy; however, finding a good developer is also not easy, but every successful team does it (otherwise it wonâ€™t be successful). So, try and find at least one good tester to complement your good developers â€“ the improved quality of your product will almost certainly raise user satisfaction (whether it will raise company profits and developer salaries is a different story, but things such as marketing are beyond the scope of both this article and <em>Overload</em> in general).</p>

<h2>Testing metrics</h2>

<p>When you do have a testing team, the question arises: how to measure its performance? In practice, Iâ€™ve seen two approaches (which can be combined). The first one is to measure how many bugs (and of which severity) were found. This approach has the problem that youâ€™d need somebody (besides testers and developers) to judge severity of bugs; and if this is not done, the metric quickly deteriorates into something as meaningless as the â€˜number of lines of codeâ€™ metric for developers. The second approach only works if you have strong end-user feedback. In such a case, you can estimate both end-user satisfaction, and the percentage of bugs which reach the end-user. While formalizing it further is also not easy (and should be done on case-by-case basis), this approach provides a very reliable way to see how useful the testersâ€™ job is for the product (and eventually for the bottom line of the company).</p>

<h2>Summary</h2>

<ul>
	<li>If you think you donâ€™t need a testing team â€“ think again</li>
	<li>Test-driven development doesnâ€™t mean you donâ€™t need a testing team</li>
	<li>The testing team can be as small as one person</li>
	<li>You do not just need â€˜any testing teamâ€™, you need a good one</li>
	<li>Organization of the testing team and its interaction with developers is all-important</li>
	<li>Finding good testers is as much of a challenge as finding good developers</li>
	<li>All these things are not easy, but do-able</li>
	<li>If done properly, it is worth the trouble and expense</li>
</ul>

<p><img src="http://accu.org/content/images/journals/ol124/Ignatchenko/Ignatchenko-01.png" /></p>

<h2>Acknowledgement</h2>

<p>Cartoon by Sergey Gordeev from Gordeev Animation Graphics, Prague.</p>

<h2>References</h2>

<p class="bibliomixed"><a id="[Levy89]"></a>[Levy89] Levy, L. B., &amp; Bell, S. Y. (1989). <em>Software product liability: understanding and minimizing the risks</em>. High Tech. LJ, 5, 1.</p>

<p class="bibliomixed"><a id="[Loganberry04]"></a>[Loganberry04] David â€˜Loganberryâ€™, Frithaes! â€“ an Introduction to Colloquial Lapine!, <a href="http://bitsnbobstones.watershipdown.org/lapine/overview.html">http://bitsnbobstones.watershipdown.org/lapine/overview.html</a></p>

<p class="bibliomixed"><a id="[NoBugs11]"></a>[NoBugs11] Sergey Ignatchenko. The Guy Weâ€™re All Working For. <em>Overload</em> 103.</p>

<p class="bibliomixed"><a id="[Techdirt11]"></a>[Techdirt11] UK Court Says Software Company Can Be Liable For Buggy Software. <a href="https://www.techdirt.com/blog/innovation/articles/20100513/0053499408.shtml">https://www.techdirt.com/blog/innovation/articles/20100513/0053499408.shtml</a></p>
</p>
<p><strong>Notes:</strong>&nbsp;</p>
<p><em>More fields may be available via dynamicdata ..</em></p>
</div>
</channel>
</rss>
