<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
		>
<channel>
	<title>Comments on: Using defence in depth to produce high quality software</title>
	<atom:link href="http://successfulsoftware.net/2008/07/09/using-defence-in-depth-to-produce-high-quality-software/feed/" rel="self" type="application/rss+xml" />
	<link>http://successfulsoftware.net/2008/07/09/using-defence-in-depth-to-produce-high-quality-software/</link>
	<description>Successful software requires more than just good programming.</description>
	<lastBuildDate>Sun, 13 May 2012 08:40:11 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
	<item>
		<title>By: The case for Test-Driven Development &#171; The Art of Software Development</title>
		<link>http://successfulsoftware.net/2008/07/09/using-defence-in-depth-to-produce-high-quality-software/#comment-13977</link>
		<dc:creator><![CDATA[The case for Test-Driven Development &#171; The Art of Software Development]]></dc:creator>
		<pubDate>Sat, 03 Apr 2010 00:17:37 +0000</pubDate>
		<guid isPermaLink="false">http://successfulsoftware.net/?p=61#comment-13977</guid>
		<description><![CDATA[[...] doesn&#8217;t mean a design review isn&#8217;t valuable, just that it&#8217;s not enough. We need defense in depth all the way [...]]]></description>
		<content:encoded><![CDATA[<p>[...] doesn&#8217;t mean a design review isn&#8217;t valuable, just that it&#8217;s not enough. We need defense in depth all the way [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Outsourcing software testing &#171; Successful Software</title>
		<link>http://successfulsoftware.net/2008/07/09/using-defence-in-depth-to-produce-high-quality-software/#comment-13524</link>
		<dc:creator><![CDATA[Outsourcing software testing &#171; Successful Software]]></dc:creator>
		<pubDate>Wed, 09 Dec 2009 23:09:31 +0000</pubDate>
		<guid isPermaLink="false">http://successfulsoftware.net/?p=61#comment-13524</guid>
		<description><![CDATA[[...] it isn&#8217;t sufficient to do all your own testing on software you wrote, no matter how hard you try. You will tend to see what you intended to program, not what you actually programmed. Furthermore [...]]]></description>
		<content:encoded><![CDATA[<p>[...] it isn&#8217;t sufficient to do all your own testing on software you wrote, no matter how hard you try. You will tend to see what you intended to program, not what you actually programmed. Furthermore [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Anna-Jayne Metcalfe</title>
		<link>http://successfulsoftware.net/2008/07/09/using-defence-in-depth-to-produce-high-quality-software/#comment-10912</link>
		<dc:creator><![CDATA[Anna-Jayne Metcalfe]]></dc:creator>
		<pubDate>Sun, 24 Aug 2008 18:01:25 +0000</pubDate>
		<guid isPermaLink="false">http://successfulsoftware.net/?p=61#comment-10912</guid>
		<description><![CDATA[&quot;I would try to convince myself, through testing using the assert, that the assertion can never be violated. If I think it could be, then I wouldn’t bother with an assert. I would add proper error handling instead.&quot;

That&#039;s always been my understanding too. I use asserts liberally to test whether my initial assumptions about &quot;things which should never go wrong&quot; are correct. That includes checking virtually all method/function call return values using ATLVERIFY() or equivalent (which keeps PC-Lint warning 534 out of my hair ;) ).

Any assumptions which turn out to be invalid (or could be influenced by user or system behaviour) are then looked at in more detail and release build error checking added if necessary.

If a failed assumption would cause a crash (e.g. an unguarded pointer or a divide by zero) I will also usually back up the assert with a following conditional - call me paranoid, if you like, but I&#039;d rather be sure that an unguarded pointer etc. I&#039;ve missed isn&#039;t going to cause a crash at runtime.

FWIW I&#039;m hoping to do a session on PC-Lint at next year&#039;s ACCU Conference. :)]]></description>
		<content:encoded><![CDATA[<p>&#8220;I would try to convince myself, through testing using the assert, that the assertion can never be violated. If I think it could be, then I wouldn’t bother with an assert. I would add proper error handling instead.&#8221;</p>
<p>That&#8217;s always been my understanding too. I use asserts liberally to test whether my initial assumptions about &#8220;things which should never go wrong&#8221; are correct. That includes checking virtually all method/function call return values using ATLVERIFY() or equivalent (which keeps PC-Lint warning 534 out of my hair ;) ).</p>
<p>Any assumptions which turn out to be invalid (or could be influenced by user or system behaviour) are then looked at in more detail and release build error checking added if necessary.</p>
<p>If a failed assumption would cause a crash (e.g. an unguarded pointer or a divide by zero) I will also usually back up the assert with a following conditional &#8211; call me paranoid, if you like, but I&#8217;d rather be sure that an unguarded pointer etc. I&#8217;ve missed isn&#8217;t going to cause a crash at runtime.</p>
<p>FWIW I&#8217;m hoping to do a session on PC-Lint at next year&#8217;s ACCU Conference. :)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: S. Tanna</title>
		<link>http://successfulsoftware.net/2008/07/09/using-defence-in-depth-to-produce-high-quality-software/#comment-10585</link>
		<dc:creator><![CDATA[S. Tanna]]></dc:creator>
		<pubDate>Thu, 10 Jul 2008 11:39:43 +0000</pubDate>
		<guid isPermaLink="false">http://successfulsoftware.net/?p=61#comment-10585</guid>
		<description><![CDATA[Yes that&#039;s the argument against putting in the extra code - it should never be needed if you do everything right.

The argument for putting in extra code is - we don&#039;t always do everything right, and a reasonable (but incorrect in some minor way perhaps) result or recovery may be better than a crash or a wild result.

Obviously circumstances vary.

If the circle function is in a screensaver or a game background graphic, drawing a million circles, the consequences of an incorrect radius circle are minor, and a badly drawn circle is better than a crash.

If the circle function is calculating something your life depends on, maybe a recovery to an incorrect result is worse than a crash.

And so on...]]></description>
		<content:encoded><![CDATA[<p>Yes that&#8217;s the argument against putting in the extra code &#8211; it should never be needed if you do everything right.</p>
<p>The argument for putting in extra code is &#8211; we don&#8217;t always do everything right, and a reasonable (but incorrect in some minor way perhaps) result or recovery may be better than a crash or a wild result.</p>
<p>Obviously circumstances vary.</p>
<p>If the circle function is in a screensaver or a game background graphic, drawing a million circles, the consequences of an incorrect radius circle are minor, and a badly drawn circle is better than a crash.</p>
<p>If the circle function is calculating something your life depends on, maybe a recovery to an incorrect result is worse than a crash.</p>
<p>And so on&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Andy Brice</title>
		<link>http://successfulsoftware.net/2008/07/09/using-defence-in-depth-to-produce-high-quality-software/#comment-10584</link>
		<dc:creator><![CDATA[Andy Brice]]></dc:creator>
		<pubDate>Thu, 10 Jul 2008 11:32:35 +0000</pubDate>
		<guid isPermaLink="false">http://successfulsoftware.net/?p=61#comment-10584</guid>
		<description><![CDATA[I would try to convince myself, through testing using the assert, that the assertion can never be violated. If I think it could be, then I wouldn&#039;t bother with an assert. I would add proper error handling instead. 

I watched a very moving documentary a while back about the battle of Prokhorovka (part of Kursk). I think it was a BBC &#039;Timewatch&#039; documentary. Well worth watching. Especially when the bits where they interviewed the veterans.]]></description>
		<content:encoded><![CDATA[<p>I would try to convince myself, through testing using the assert, that the assertion can never be violated. If I think it could be, then I wouldn&#8217;t bother with an assert. I would add proper error handling instead. </p>
<p>I watched a very moving documentary a while back about the battle of Prokhorovka (part of Kursk). I think it was a BBC &#8216;Timewatch&#8217; documentary. Well worth watching. Especially when the bits where they interviewed the veterans.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: S. Tanna</title>
		<link>http://successfulsoftware.net/2008/07/09/using-defence-in-depth-to-produce-high-quality-software/#comment-10582</link>
		<dc:creator><![CDATA[S. Tanna]]></dc:creator>
		<pubDate>Thu, 10 Jul 2008 10:59:43 +0000</pubDate>
		<guid isPermaLink="false">http://successfulsoftware.net/?p=61#comment-10582</guid>
		<description><![CDATA[One of the interesting questions, is whether you should put in code in the release-version to handle the kind of thing that fails an assert.

e.g.

void Circle::setRadius( double radius )
{
    assert( radius &gt; 0.0 );

   // if radius &lt;= 0.0 then program must be badly fubar&#039;ed
   // should I try to recover, or just continue in release?
  if ( radius &lt;= 0.0 )
  {
    m_radius = 1.0 ; // reasonable value that won&#039;t crash the program
    Log( &quot;Bad Radius...&quot;,  etc... ) ;
    return ;
  }

    m_radius = radius;
}



BTW, I have a site about the Battle of Kursk. Only has a couple of real pages on it, because I never got round to adding more, but if interested it&#039;s

http://www.operationcitadel.com/]]></description>
		<content:encoded><![CDATA[<p>One of the interesting questions, is whether you should put in code in the release-version to handle the kind of thing that fails an assert.</p>
<p>e.g.</p>
<p>void Circle::setRadius( double radius )<br />
{<br />
    assert( radius &gt; 0.0 );</p>
<p>   // if radius &lt;= 0.0 then program must be badly fubar&#8217;ed<br />
   // should I try to recover, or just continue in release?<br />
  if ( radius &lt;= 0.0 )<br />
  {<br />
    m_radius = 1.0 ; // reasonable value that won&#8217;t crash the program<br />
    Log( &#8220;Bad Radius&#8230;&#8221;,  etc&#8230; ) ;<br />
    return ;<br />
  }</p>
<p>    m_radius = radius;<br />
}</p>
<p>BTW, I have a site about the Battle of Kursk. Only has a couple of real pages on it, because I never got round to adding more, but if interested it&#8217;s</p>
<p><a href="http://www.operationcitadel.com/" rel="nofollow">http://www.operationcitadel.com/</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Andy Brice</title>
		<link>http://successfulsoftware.net/2008/07/09/using-defence-in-depth-to-produce-high-quality-software/#comment-10573</link>
		<dc:creator><![CDATA[Andy Brice]]></dc:creator>
		<pubDate>Wed, 09 Jul 2008 13:40:22 +0000</pubDate>
		<guid isPermaLink="false">http://successfulsoftware.net/?p=61#comment-10573</guid>
		<description><![CDATA[I definitely wouldn&#039;t recommend asserts instead of proper error/exception handling. But I find them very useful for finding problems during testing.]]></description>
		<content:encoded><![CDATA[<p>I definitely wouldn&#8217;t recommend asserts instead of proper error/exception handling. But I find them very useful for finding problems during testing.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tony Edgecombe</title>
		<link>http://successfulsoftware.net/2008/07/09/using-defence-in-depth-to-produce-high-quality-software/#comment-10572</link>
		<dc:creator><![CDATA[Tony Edgecombe]]></dc:creator>
		<pubDate>Wed, 09 Jul 2008 13:18:55 +0000</pubDate>
		<guid isPermaLink="false">http://successfulsoftware.net/?p=61#comment-10572</guid>
		<description><![CDATA[I stopped using asserts, I&#039;d rather throw an exception then if that unexpected condition does occur in the field I stand a good chance of finding out about it.]]></description>
		<content:encoded><![CDATA[<p>I stopped using asserts, I&#8217;d rather throw an exception then if that unexpected condition does occur in the field I stand a good chance of finding out about it.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

