    <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  :: Editorial - Software Quality</title>
        <link>https://members.accu.org/index.php/journals/377</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 #51 - Oct 2002 + Project Management + Journal Editorial</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/c194/">51</a>
                    (8)
<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/c66/">Management</a>
                    (95)
<br />

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

                     &gt;                         <a href="https://members.accu.org/index.php/journals/c184/">Journal Columns</a>

                     &gt;                         <a href="https://members.accu.org/index.php/journals/c185/">Editorial</a>
                    (221)
<br />

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

                    -                        <a href="https://members.accu.org/index.php/journals/c194+66+185/">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;Editorial - Software Quality</h1>
<p><strong>Author:</strong>&nbsp;</p>
<p>
<strong>Date:</strong> 02 October 2002 22:58:12 +01:00 or Wed, 02 October 2002 22:58:12 +01:00</p>
<p><strong>Summary:</strong>&nbsp;</p>
<p><strong>Body:</strong>&nbsp;<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e18" id="d0e18"></a></h2>
</div>
<p>I'm dreadful at testing code, as I rarely bother to do it. Yeah,
yeah, I know that I should. It's just a mental blind spot that I
have.</p>
<p>Have you ever experienced the phenomenon of reading what you
intended to write instead of what you have actually written? It's
the same situation when you have a piece of broken code that you
stare and stare at but can't see any errors. You then show it to a
peer, claiming that the compiler is busted, the microprocessor is
messing up, and the laws of physics no longer hold true. They look
at it for ten seconds, go 'ugh', and point at 'if(x=y)...'. I've
extrapolated this mental assumption upwards from the level of
syntactic correctness to the level of semantic correctness. I
assume that because I intended the code to work, it must actually
work. Thankfully, due to some introspection, and a few people
politely, and not so politely, pointing out that it would be nice
if I tested my code properly, I am aware of my short-comings in
this area.</p>
<p>But, I'm not the only person who is bad at testing; the majority
of development organizations are bad at it too. I have never
discovered a development organization that conducts excellent
testing. Most organizations are content to test to the 'good
enough' level. I don't believe the individuals involved intend to
build a shoddy product, there's just something wrong with the way
most people conduct testing.</p>
<p>Testing has always been a hard problem that few software
engineering organizations put much intellectual effort into
solving. In evidence, we have the fact that most test groups spend
much of their time executing test cases by hand. I've experienced
developer groups where the prevailing attitude was that all
responsibility for testing lay with the Quality Assurance group.
The developers throw the release candidate over a wall; the testers
kick it about for a while, and then throw it back if they find
something wrong with it. The cycle then continues, seemingly
endlessly, until the QA manager and the engineering manager resolve
their differences over a drunken fistfight in the carpark
<sup>[<a name="d0e28" href="#ftn.d0e28" id=
"d0e28">1</a>]</sup>.</p>
<p>A common solution to poor product quality is to throw more
testers at the problem. Microsoft demonstrates that this doesn't
work. They have a very high ratio of testers to developers, yet
still produce 'good enough' quality products. Are they unwilling to
produce quality products? I don't think so.</p>
<p>Another problem is that the role of test engineer is not well
regarded by the software engineering profession at large. Most
testers I've worked with don't want to be test engineers. They want
to be developers. For them the test group is a steppingstone into
the sustaining engineering, or development engineering groups. I'm
in favour of career progression, but when everybody wants out and
nobody wants in there's a problem.</p>
<p>Is the software quality problem due to testers just not being
very good at testing? I don't think so. I've encountered some very
smart and highly productive, dedicated and motivated testers.</p>
<p>I've talked to colleagues with an Electrical Engineering
background about their experience of testing in hardware
development organizations. They have told me that test engineering
is a well-respected role that is staffed by engineers who are just
as qualified as engineers in the development organization, and that
testers are involved in all phases of the development process to
ensure that the product can be efficiently tested for
correctness.</p>
<p>The point to learn here is that testability has to be designed
into the system, and the engineering group bears the responsibility
for doing that. Typically the development engineering team doesn't
think much further than unit testing. More upfront thought needs to
be put into integration and system testing at the specification and
design stages of development.</p>
<p>I've tried to reflect this lesson into my current project. I've
thought about testing right from the beginning of the development
process. There's a line item on the product requirements that
states that the product must be easy to test. The design and
implementation follow through against this by exposing interfaces
specifically for testing. In this case our user interface is a C++
API, so the test interface we chose was a scripting language. The
scripting API includes methods that expose some of the internals as
text strings, so that the test cases can make assertions about the
internal state of the system.</p>
<p>I don't know the solution to the software quality problem, and
I'm not sure if anyone really does, but there are a few small
things that we could be doing to improve matters. In summary,
designing testability into the system allows us to fully leverage
the QA group and therefore improve software quality.</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e46" id="d0e46"></a>Apologies</h2>
</div>
<p>In Overload 50 I mistakenly published a draft version of Pete
Goodliffe's STL-style Circular Buffers article. There were a few
minor errors in the text, which have been corrected in the online
version, which can be found on Pete's website. <sup>[<a name=
"d0e51" href="#ftn.d0e51" id="d0e51">2</a>]</sup></p>
</div>
<div class="footnotes"><br>
<hr class="c2" width="100">
<div class="footnote">
<p><sup>[<a name="ftn.d0e28" href="#d0e28" id=
"ftn.d0e28">1</a>]</sup> That's a slight exaggeration.</p>
</div>
<div class="footnote">
<p><sup>[<a name="ftn.d0e51" href="#d0e51" id=
"ftn.d0e51">2</a>]</sup> <a href=
"http://cthree.org/pete/circularbuffer.1.pdf" target=
"_top">http://cthree.org/pete/circularbuffer.1.pdf</a></p>
</div>
</div>
</p>
<p><strong>Notes:</strong>&nbsp;</p>
<p><em>More fields may be available via dynamicdata ..</em></p>
</div>
</channel>
</rss>
