<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>&#62;kloctalk&#187; General Coding</title>
	<atom:link href="http://www.klocwork.com/blog/category/general-coding/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.klocwork.com/blog</link>
	<description>&#62;kloctalk is a blog and a community for software development professionals who create and maintain mission-critical software and the challenges they face on a daily basis.</description>
	<lastBuildDate>Wed, 08 Feb 2012 13:45:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>Golden rules of AST checker development</title>
		<link>http://www.klocwork.com/blog/2012/01/golden-rules-of-ast-checker-development/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=golden-rules-of-ast-checker-development</link>
		<comments>http://www.klocwork.com/blog/2012/01/golden-rules-of-ast-checker-development/#comments</comments>
		<pubDate>Tue, 24 Jan 2012 14:57:10 +0000</pubDate>
		<dc:creator>Patti Murphy</dc:creator>
				<category><![CDATA[Coding Standards]]></category>
		<category><![CDATA[General Coding]]></category>
		<category><![CDATA[Software Quality]]></category>
		<category><![CDATA[Static Analysis]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[coding standards]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[source code analysis]]></category>

		<guid isPermaLink="false">http://www.klocwork.com/blog/?p=1427</guid>
		<description><![CDATA[In my previous post, It&#8217;s time to create a custom checker&#8230;, we looked at the considerations involved in deciding which checker to create&#8211;AST or path? In this post, we&#8217;re going to use a custom checker to enforce an internal coding standard that extends the default set of checkers in our source code analysis tool. To [...]]]></description>
			<content:encoded><![CDATA[<p>In my previous post, <a href="http://www.klocwork.com/blog/2011/11/its-time-to-create-a-custom-checker-but-what-kind/" target="_blank">It&#8217;s time to create a custom checker&#8230;</a>, we looked at the considerations involved in deciding which checker to create&#8211;AST or path?</p>
<p>In this post, we&#8217;re going to use a custom checker to enforce an internal coding standard that extends the default set of checkers in our source code analysis tool.</p>
<p>To do this, I&#8217;ve called upon Steve Howard, our head of Partner Support in Europe, to get us started with an AST checker to accomplish our goal.</p>
<p>Steve has coached many customers through the checker creation process. In his experience, the appeal of custom checkers lies in their ability  to <a href="http://www.klocwork.com/blog/2011/01/in-standards-we-unite-in-agile-we-diverge/" target="_blank">enforce naming conventions and code constructions across organizations</a>.</p>
<p>The standard we want to enforce is the use of a compound statement block rather than single statements as the body of a <em>for loop</em>. An AST checker is the way to go because detection depends solely on the syntax of the code itself and not runtime behavior.</p>
<p>See the example below:</p>
<table>
</table>
<table cellspacing="5" cellpadding="2">
<tbody>
<tr>
<td><strong>Incorrect:</strong></td>
<td><strong>Correct:</strong></td>
</tr>
<tr>
<td>for( i &#8211; 0; i &lt; 10; i++ )<br />
 doSomething( );</td>
<td>for( i &#8211; 0; i &lt; 10; i++ ) {<br />
 doSomething();<br />
 }</td>
</tr>
</tbody>
</table>
<p>To flag this violation, we need to instruct the checker to find all instances of <em>for loop</em> nodes that contain a <em>Statement </em>node as an immediate descendant.</p>
<p>A tool that shows you a visual representation of the AST for the test case is quite helpful in the checker creation process. Here at Klocwork, we use <a href="http://www.klocwork.com/products/documentation/current/Tutorial_1_-_Introducing_Checker_Studio" target="_blank">Checker Studio</a> to:</p>
<ul>
<li>browse the AST structure of test cases,</li>
<li>identify nodes of interest, and </li>
<li>test XPath-like expressions that identify node types, qualifiers, conditions and variables to traverse the AST and flag the defect.</li>
</ul>
<p><strong>Note</strong>: If we wanted to enforce the compound statement rule in all loops, then we’d need to have one pattern (created using the XPath-like expression) for each possible kind, such as <em>while loops</em> and <em>do while  loops</em>.</p>
<p>Armed with the test case, Checker Studio, and a <a href="http://www.klocwork.com/products/documentation/current/All_about_C/C%2B%2B_KAST_expressions" target="_blank">syntax guide</a>, Steve identified the following expression that flags the infraction:</p>
<p>// ForStmt [not (Stmt::CompoundStmt)]</p>
<p>Here&#8217;s how the test case and expression appear in Checker Studio:</p>
<p><a href="http://www.klocwork.com/blog/wp-content/uploads/2012/01/GoldenRules_Studio2.png"><img class="aligncenter size-full wp-image-1436" title="GoldenRules_Studio" src="http://www.klocwork.com/blog/wp-content/uploads/2012/01/GoldenRules_Studio2.png" alt="" width="623" height="516" /></a></p>
<p><strong>Golden rules</strong></p>
<p>Based on his experience, Steve has a number of golden rules that get you from idea to defect detection faster:</p>
<ul>
<li><strong>Start simple</strong>: Use a simple test case that contains the defect you want to detect and work with one simple pattern at a time. Add more complexity as you go along</li>
<li><strong>Start rough and refine later:</strong> Don&#8217;t worry about false positives at first. In some cases it may even be easier to search for  instances that are OK and then negate the rule at the end</li>
<li><strong>Divide and conquer:</strong> With a more complex checker, work separately on each aspect of the defect you want to detect and then bring it all together at the end for testing in Checker Studio</li>
<li><strong>Watch your levels:</strong> Make the highlighting as relevant as possible for the issue you&#8217;re trying to find. For example, “// ClassType [MemberDecls[*]::MemberDecl]” will highlight classes that match, whereas “// ClassType/MemberDecls[*]::MemberDecl”  will highlight class members that match. The rule is the same, but the focus is different</li>
<li><strong>Weed out false negatives:</strong> Add negative examples (good code) to check for false negatives</li>
</ul>
<p>For more information about our custom AST checkers, watch our <a href="http://www.klocwork.com/resources/video/tag/insight-9.5/static-analysis-custom-checkers/display" target="_blank">Checker Studio video</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.klocwork.com/blog/2012/01/golden-rules-of-ast-checker-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>It&#8217;s been a while since our last post, but we&#8217;ve been busy&#8230;</title>
		<link>http://www.klocwork.com/blog/2012/01/its-been-a-while-since-our-last-post-but-weve-been-busy/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=its-been-a-while-since-our-last-post-but-weve-been-busy</link>
		<comments>http://www.klocwork.com/blog/2012/01/its-been-a-while-since-our-last-post-but-weve-been-busy/#comments</comments>
		<pubDate>Tue, 17 Jan 2012 16:54:31 +0000</pubDate>
		<dc:creator>Gwyn Fisher</dc:creator>
				<category><![CDATA[General Coding]]></category>

		<guid isPermaLink="false">http://www.klocwork.com/blog/?p=1430</guid>
		<description><![CDATA[So it&#8217;s that time again, when our team finally gets to sleep for a day or two and get their lives back in order. What am I talking about? Answer: Klocwork Insight 9.5 releases today and boy are we ever happy to see it go live &#8212; we&#8217;re &#8220;out there Jerry&#8221; and yes, of course [...]]]></description>
			<content:encoded><![CDATA[<p>So it&#8217;s that time again, when our team finally gets to sleep for a day or two and get their lives back in order. What am I talking about?</p>
<p>Answer: <a title="Klocwork Insight 9.5" href="http://www.klocwork.com/products/klocwork-insight-95-whats-new/">Klocwork Insight 9.5</a> releases today and boy are we ever happy to see it go live &#8212; we&#8217;re &#8220;out there Jerry&#8221; and yes, of course we&#8217;re loving every minute of it.</p>
<p>This has been a long release, taking significant research and development to bring to fruition, all the while continuing to release more traditional shipments as we went, but finally culminating in a new, game-changing technology for source code analysis. On-the-fly, as-you-type, instant-like-for-reals, call it what you like&#8230; full-on, in-depth C/C++ analysis performed as the developer enters their code, using the &#8220;squiggly line&#8221; usability metaphor created by spell checkers. It&#8217;s one of those &#8220;why would you do it any other way&#8221; moments and we&#8217;re happy to be unique.</p>
<p>Not to be outdone, our web tools team has done amazing stuff with a complete redesign of our Review and Inspect tools, showcasing an awesome look and feel that leverages the toys that come with HTML5 and, amongst many other new capabilities, brings drag/drop pivot report design to the web for on-the-fly metrics and trending analysis that managers and development leads will just eat up.</p>
<p>To our customers, our partners and our friends in the industry, we&#8217;d like to say Welcome to Insight 9.5, hope you enjoy it.</p>
<p><br class="spacer_" /></p>
<p><a href="http://www.klocwork.com/blog/wp-content/uploads/2012/01/kw-insight.png"><img class="aligncenter size-full wp-image-1432" title="kw-insight" src="http://www.klocwork.com/blog/wp-content/uploads/2012/01/kw-insight.png" alt="Klocwork Insight Logo" width="450" height="79" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.klocwork.com/blog/2012/01/its-been-a-while-since-our-last-post-but-weve-been-busy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>It&#8217;s time to create a custom checker, but what kind?</title>
		<link>http://www.klocwork.com/blog/2011/11/its-time-to-create-a-custom-checker-but-what-kind/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=its-time-to-create-a-custom-checker-but-what-kind</link>
		<comments>http://www.klocwork.com/blog/2011/11/its-time-to-create-a-custom-checker-but-what-kind/#comments</comments>
		<pubDate>Tue, 15 Nov 2011 14:56:15 +0000</pubDate>
		<dc:creator>Patti Murphy</dc:creator>
				<category><![CDATA[General Coding]]></category>
		<category><![CDATA[Static Analysis]]></category>
		<category><![CDATA[custom checkers]]></category>

		<guid isPermaLink="false">http://www.klocwork.com/blog/?p=1388</guid>
		<description><![CDATA[You&#8217;ve been using source code analysis on your integration build or your desktop, or (ideally) both. And then there&#8217;s &#8220;a situation&#8221;. The situation Either you: Noticed a false negative you want detected, or Need a way to enforce a corporate coding standard, such as the requirement for the use of  a compound statement block rather [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.klocwork.com/blog/wp-content/uploads/2011/09/checkers.gif"><img class="alignright size-full wp-image-1390" title="checkers" src="http://www.klocwork.com/blog/wp-content/uploads/2011/09/checkers.gif" alt="" width="369" height="254" /></a></p>
<p>You&#8217;ve been using source code analysis on your integration build or your desktop, or (ideally) both. And then there&#8217;s &#8220;a situation&#8221;.</p>
<p><strong>The situation</strong></p>
<p>Either you:</p>
<ul>
<li>Noticed a false negative you want detected, or </li>
<li>Need a way to enforce a corporate coding standard, such as the requirement for the use of  a compound statement block rather than single statements as the body of a loop.</li>
</ul>
<p><strong>Now what?</strong></p>
<p>Time to create a custom checker, that&#8217;s what. But what kind of checker?</p>
<p>Source code analysis involves two families of checkers, those that involve:</p>
<ul>
<li>Abstract Syntax Tree (AST) validation, and </li>
<li>Code path analysis.</li>
</ul>
<p>An AST provides a tree-based structural representation of the source code. An AST checker allows you to pinpoint problematic syntax using XPath or XPath-derived grammar to define the problem you&#8217;re looking for. AST checkers (our version is called Klockwork AST checkers, or KAST for short) don&#8217;t require program execution to run; they detect defects right away on source code.</p>
<p>Code path analysis, on the other hand, targets defects related to value tracking at program execution time. Instead of style violations, you&#8217;d use a path checker to answer questions such as:</p>
<ul>
<li>Is this newly-created object released before all aliases to it are removed from scope?</li>
<li>Is this data object ever range-checked before being passed to an OS function?</li>
<li>Is this string checked for special characters before being submitted as an SQL query?</li>
</ul>
<p>To create a path checker, you don&#8217;t need to know how data is tracked by the checker. What you do need to know are the function types and values you want to track for the analysis starting point and the analysis end point where the defect (or event) is recognized and reported.</p>
<p><strong>Which checker when?</strong></p>
<p>Create an AST checker when the problem you want to detect:</p>
<ul>
<li>is a local defect</li>
<li>does not involve program execution</li>
<li>has to do with the way the program was written</li>
<li>does not involve tracking a value</li>
<li>does not involve a path</li>
</ul>
<p>Create a path checker when the problem you want to detect:</p>
<ul>
<li>involves tracking a value</li>
<li>has a starting point (where the analysis starts) and end point (where the defect is detected)</li>
<li>involves program execution</li>
</ul>
<p>Stay tuned for the next post in this series on best practices for AST checker creation.</p>
<p>For more information, see <a href="http://www.klocwork.com/products/documentation/current/Writing_custom_checkers_with_Klocwork_Extensibility" target="_blank">Writing custom checkers with Klocwork Extensibility</a> or check out our member discussions in the <a href="http://developer.klocwork.com/community/forums/customization/cc-checkers" target="_blank">C/C++ custom checkers forum</a>.</p>
<p><em>&#8211;With files from CTO Gwyn Fisher</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.klocwork.com/blog/2011/11/its-time-to-create-a-custom-checker-but-what-kind/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Security Issues with Apple iOS?</title>
		<link>http://www.klocwork.com/blog/2011/11/security-issues-with-apple-ios/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=security-issues-with-apple-ios</link>
		<comments>http://www.klocwork.com/blog/2011/11/security-issues-with-apple-ios/#comments</comments>
		<pubDate>Tue, 08 Nov 2011 18:01:04 +0000</pubDate>
		<dc:creator>Todd Landry</dc:creator>
				<category><![CDATA[General Coding]]></category>
		<category><![CDATA[Software Security]]></category>
		<category><![CDATA[software security]]></category>

		<guid isPermaLink="false">http://www.klocwork.com/blog/?p=1419</guid>
		<description><![CDATA[As a pretty avid Apple user (2 iPhones, 1 iPad2, iMac, iPod Touch, MacBook Pro, etc.), and the fact that I work in the business of software quality and security, I must admit that this article caught my attention. The article outlines how a well-known security researcher, who focuses on Apple, has found a software [...]]]></description>
			<content:encoded><![CDATA[<p>As a pretty avid Apple user (2 iPhones, 1 iPad2, iMac, iPod Touch, MacBook Pro, etc.), and the fact that I work in the business of software quality and security, I must admit that this <a href="http://ca.reuters.com/article/technologyNews/idCATRE7A708Q20111108">article</a> caught my attention. The article outlines how a well-known security researcher, who focuses on Apple, has found a software flaw in the iPhone and iPad, which could allow hackers to build malicious apps.What makes this even more scary is that the Apple Store may not catch these malicious apps.<a href="http://www.klocwork.com/blog/wp-content/uploads/2011/11/download.jpeg"><img class="alignright size-full wp-image-1422" title="download" src="http://www.klocwork.com/blog/wp-content/uploads/2011/11/download.jpeg" alt="" width="254" height="198" /></a></p>
<p>To add another twist to this story, the researcher in question has been ejected from participating in Apple&#8217;s developer programs. Read about that <a href="http://news.cnet.com/8301-27076_3-57320190-248/apple-boots-security-guru-who-exposed-iphone-exploit/">here</a>.</p>
<p>Are we now getting to the point where hackers are going to start trying more aggressively to exploit Apple products? In a <a href="http://news.cnet.com/8301-27080_3-10444561-245.html">survey</a> done in 2010, over 50% of respondents thought Windows was either &#8220;very&#8221; or &#8220;extremely&#8221; vulnerable compared to only 20% for Apple. I wonder if that has changed? More importantly, do I need to start worrying about my daughter downloading the Archie comic app from the App Store?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.klocwork.com/blog/2011/11/security-issues-with-apple-ios/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What&#8217;s the Right Iteration Length?</title>
		<link>http://www.klocwork.com/blog/2011/11/whats-the-right-iteration-length/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=whats-the-right-iteration-length</link>
		<comments>http://www.klocwork.com/blog/2011/11/whats-the-right-iteration-length/#comments</comments>
		<pubDate>Tue, 01 Nov 2011 13:00:44 +0000</pubDate>
		<dc:creator>Todd Landry</dc:creator>
				<category><![CDATA[Agile Development]]></category>
		<category><![CDATA[General Coding]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[software development]]></category>

		<guid isPermaLink="false">http://www.klocwork.com/blog/?p=1410</guid>
		<description><![CDATA[The question of &#8220;what&#8217;s the right iteration length&#8221; may not be as interesting as any of the questions found here (gum really doesn&#8217;t stay in you for 7 years. Who knew?), but it is a common question from organizations moving to agile development. You can certainly get a lot of different opinions on this from [...]]]></description>
			<content:encoded><![CDATA[<p>The question of &#8220;what&#8217;s the right iteration length&#8221; may not be as interesting as any of the questions found <a href="http://www.telegraph.co.uk/news/newstopics/howaboutthat/4696372/Greatest-101-questions-of-all-time-1-20.html">here</a> (gum really doesn&#8217;t stay in you for 7 years. Who knew?), but it is a common question from organizations moving to agile development. You can certainly get a lot of different <a href="http://www.mountaingoatsoftware.com/articles/30-selecting-the-right-iteration-length-for-your-software-development-process">opinions</a> on this from a Google search, but since you&#8217;re reading this now, I&#8217;ll give you mine, based on personal experience.</p>
<p>A number of years ago, one of the projects I was PM on decided to try out Scrum. I had attended some Product Owner <a href="http://www.mountaingoatsoftware.com/certified-product-owner-training">training</a>, and our soon-to-be Scrum Master had been on some training as well, but we were very green and decided to approach things with a &#8220;let&#8217;s see what works best for us&#8221; mentality. At the time, we thought the best way for us to get immersed and efficient with Scrum was lots of repetitions. We went with 1-week iterations, thinking that by having a rapid and regular cycle of sprint planning meetings, demo meetings, retrospective meetings, etc. we would learn more quickly the &#8220;proper&#8221; way of doing development with Scrum.</p>
<p>We certainly did learn a lot during our first 3 or 4 sprints, mainly that having this regular weekly cycle of meetings was just too much overhead, and the actual amount of value produced at the end of each sprint was too little. Next on our list, the 2-week sprint.<a href="http://www.klocwork.com/blog/wp-content/uploads/2011/10/monkey.jpeg"><img class="alignright size-full wp-image-1411" title="monkey" src="http://www.klocwork.com/blog/wp-content/uploads/2011/10/monkey.jpeg" alt="" width="259" height="194" /></a></p>
<p>The 2-week sprints worked great for us, and we saw the differences from the 1-week sprints almost immediately. We were producing what we thought was a good amount of value from each sprint, but with a better and more balanced level of overhead. We hit our groove and established a good cadence with these 2-week sprints, and from the looks of the burn-down chart, we were becoming a more efficient team with every sprint.</p>
<p>The team definitely was cruising and enjoying the pace, but the holiday season snuck up on us and we thought that it might make sense to make some adjustments to deal with the vacation time various team members would be taking.</p>
<p>After collecting everyone&#8217;s vacation schedule, we were able to determine a start and finish date for our &#8220;holiday sprint&#8221; that would essentially start when everyone was still in the office, and finish when everyone returned from their vacation. Call it either luck or good management, but we had planned a 4-week sprint. I won&#8217;t go through all the gory details, but let&#8217;s just say that upon reflection, the 4-week iteration just felt wrong.</p>
<p>The initial planning session felt harder to estimate the amount of work we could do. The cadence we developed didn&#8217;t show itself, and it really felt like we never gained any momentum during the 4 weeks. Now I&#8217;m sure that the whole holiday season thing played a role in this, but it was our least effective iteration ever, and by a lot. We never tried the 4-week iteration again.</p>
<p>The bottom line is that all teams are different and need to go with the iteration length that feels right for them. For us, the 2-week one was best.</p>
<p>For the record, I have always wondered if the 7-year rule for chewing gum was true. Glad to hear it isn&#8217;t.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.klocwork.com/blog/2011/11/whats-the-right-iteration-length/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Is Pure Agile Always an Option?</title>
		<link>http://www.klocwork.com/blog/2011/10/is-pure-agile-always-an-option/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=is-pure-agile-always-an-option</link>
		<comments>http://www.klocwork.com/blog/2011/10/is-pure-agile-always-an-option/#comments</comments>
		<pubDate>Tue, 04 Oct 2011 13:50:27 +0000</pubDate>
		<dc:creator>Todd Landry</dc:creator>
				<category><![CDATA[Agile Development]]></category>
		<category><![CDATA[Embedded]]></category>
		<category><![CDATA[General Coding]]></category>
		<category><![CDATA[General Industry]]></category>
		<category><![CDATA[Medical Device Software]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[medical device software]]></category>
		<category><![CDATA[software development]]></category>

		<guid isPermaLink="false">http://www.klocwork.com/blog/?p=1397</guid>
		<description><![CDATA[Over the past few years I’ve talked to a number of customers in the embedded software and medical devices industries, and I continue to see a significant number of these organizations either moving to, or planning on moving to agile development processes. With all of the inherent challenges for agile in these organizations such as [...]]]></description>
			<content:encoded><![CDATA[<p>Over the past few years I’ve talked to a number of customers in the embedded software and medical devices industries, and I continue to see a significant number of these organizations either moving to, or planning on moving to agile development processes.</p>
<p>With all of the inherent challenges for agile in these organizations such as standards/regulatory compliance, hardware changes and integration, security issues, etc. I must say that I’m a little shocked that customers are moving away from their current processes towards something like agile. Add to this the fact that the Agile Manifesto specifically states “Working software over comprehensive documentation” and it doesn’t exactly sound like agile is a great fit for embedded systems in general, let alone medical device.</p>
<p>Now, don’t get me wrong, I am a huge proponent of agile, and I certainly realize that there are many pros for moving to agile, and these have been well <a href="http://www.objectmentor.com/omSolutions/agile_why.html">documented</a>, but I have to wonder just how agile are these specific industries going?  I would bet that most (all?) of these organizations are adopting some of the key fundamentals of agile, but to say they are going “all in” would be a bit of a stretch.</p>
<p><br class="spacer_" /></p>
<div id="attachment_1400" class="wp-caption alignright" style="width: 310px"><a href="http://www.klocwork.com/blog/wp-content/uploads/2011/10/whales-10.jpg"><img class="size-medium wp-image-1400" title="whales-10" src="http://www.klocwork.com/blog/wp-content/uploads/2011/10/whales-10-300x193.jpg" alt="" width="300" height="193" /></a><p class="wp-caption-text">Even industries heavy on process (because of regulatory requirements) are taking the leap into agile. How agile are they?</p></div>
<p>Looking at the <a href="http://agilemanifesto.org/">manifesto</a> a little closer, some of the principles are fairly generic and feel more like common sense than anything revolutionary, so they probably apply to any industry. There are a few principles however that are fairly easy to imagine in these industries, such as:</p>
<ul>
<li> getting all stakeholders involved in defining requirements (Principle #4), or </li>
<li>embracing more face-to-face conversations (Principle #6), and </li>
<li>simplicity, or minimizing the amount of work not done (Principle #10). </li>
</ul>
<p>But do people really think that Principles #1 (early and often delivery of software), and #2 (welcome changing requirements) really apply to the embedded or medical devices industries? Personally I don’t see it.</p>
<p>So what do you think? Are the embedded software or medical devices industries capable of going full out Agile?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.klocwork.com/blog/2011/10/is-pure-agile-always-an-option/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Secure Coding eLearning Resource</title>
		<link>http://www.klocwork.com/blog/2011/09/secure-coding-elearning-resource/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=secure-coding-elearning-resource</link>
		<comments>http://www.klocwork.com/blog/2011/09/secure-coding-elearning-resource/#comments</comments>
		<pubDate>Thu, 15 Sep 2011 14:49:13 +0000</pubDate>
		<dc:creator>Brendan Harrison</dc:creator>
				<category><![CDATA[General Coding]]></category>
		<category><![CDATA[Software Security]]></category>
		<category><![CDATA[elearning]]></category>
		<category><![CDATA[Microsoft Security Development Lifecycle]]></category>
		<category><![CDATA[OWASP]]></category>
		<category><![CDATA[software security]]></category>

		<guid isPermaLink="false">http://www.klocwork.com/blog/?p=1382</guid>
		<description><![CDATA[One of the common challenges we hear from customers regarding their software security assurance programs is developer education. Sure, there are many great tools out there that can help with security, but when it comes down to it, if you&#8217;re going to truly build a culture of secure software (and not just audit your system [...]]]></description>
			<content:encoded><![CDATA[<p>One of the common challenges we hear from customers regarding their <a title="Software Security Assurance" href="http://www.klocwork.com/solutions/software-security-assurance/" target="_blank">software security assurance</a> programs is developer education. Sure, there are many great tools out there that can help with security, but when it comes down to it, if you&#8217;re going to truly build a culture of secure software (and not just audit your system now and then), your development team needs to be well versed on key security concepts, defensive coding principles, common attack vectors, not to mention the ins and outs of specific coding vulnerabilities like <a title="Buffer Overflow" href="http://www.klocwork.com/products/documentation/current/Checkers:ABR" target="_blank">buffer overflows</a>.</p>
<p><a href="http://www.klocwork.com/blog/wp-content/uploads/2011/09/secure-coding-ccxx1.png"><img class="alignright size-full wp-image-1384" title="secure-coding-ccxx" src="http://www.klocwork.com/blog/wp-content/uploads/2011/09/secure-coding-ccxx1.png" alt="Secure Coding for C/C++ Course" width="697" height="560" /></a></p>
<p>Well, we agree. That&#8217;s why we&#8217;ve partnered with our friends at <a title="Security Innovation" href="http://www.securityinnovation.com/" target="_blank">Security Innovation</a> to make some of their developer eLearning courses available for free on the new, revamped <a title="Klocwork University" href="http://developer.klocwork.com/klocwork-university" target="_blank">Klocwork University</a>. I encourage you to check out the <a title="Secure Coding for C/C++" href="http://developer.klocwork.com/klocwork-university/security-innovation/secure-coding" target="_blank">Secure Coding for C/C++</a> course &#8211; it&#8217;s approx 60 minutes in length, features interactive material, and is a great introductory course into many of the key concepts required to build secure software. We also have a course on Microsoft&#8217;s Secure SDL and the OWASP Top 10. Check it out!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.klocwork.com/blog/2011/09/secure-coding-elearning-resource/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Klocwork University consolidates learning resources into a single roster</title>
		<link>http://www.klocwork.com/blog/2011/09/klocwork-university-consolidates-learning-resources-into-a-single-roster/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=klocwork-university-consolidates-learning-resources-into-a-single-roster</link>
		<comments>http://www.klocwork.com/blog/2011/09/klocwork-university-consolidates-learning-resources-into-a-single-roster/#comments</comments>
		<pubDate>Wed, 07 Sep 2011 16:42:48 +0000</pubDate>
		<dc:creator>Patti Murphy</dc:creator>
				<category><![CDATA[General Coding]]></category>
		<category><![CDATA[Static Analysis]]></category>
		<category><![CDATA[e-learning]]></category>
		<category><![CDATA[Klocwork Developer Network]]></category>
		<category><![CDATA[software development]]></category>

		<guid isPermaLink="false">http://www.klocwork.com/blog/?p=1368</guid>
		<description><![CDATA[Klocwork Developer Network presents Klocwork University, which consolidates all our online learning resources onto a single page. Klocwork University is your one stop for self-paced online learning and how-tos about: Setting up and using our static analysis tools on your desktop or integration build The latest trends in software security Agile coding practices and how [...]]]></description>
			<content:encoded><![CDATA[<p>Klocwork Developer Network presents <a href="http://developer.klocwork.com/klocwork-university/" target="_blank">Klocwork University</a>, which consolidates all our online learning resources onto a single page.</p>
<p><a href="http://developer.klocwork.com/klocwork-university/"><img class="alignright size-full wp-image-1379" title="KlocU3" src="http://www.klocwork.com/blog/wp-content/uploads/2011/09/KlocU31.png" alt="" width="381" height="207" /></a></p>
<p>Klocwork University is your one stop for self-paced online learning and how-tos about:</p>
<ul>
<li>Setting up and using our static analysis tools on your desktop or integration build </li>
<li>The latest trends in software security</li>
<li>Agile coding practices and how they intersect with static analysis</li>
<li>Klocwork product overviews</li>
</ul>
<p>At Klocwork University you&#8217;ll see helpful descriptions of:</p>
<ul>
<li> In-house and partner-generated e-learning courses</li>
<li>Video how-tos</li>
<li>Webinars</li>
</ul>
<p>After you  browse our offerings on the Klocwork University page, click your  selection and access your resource. If you&#8217;re not already logged in to  the Klocwork Developer Network, you&#8217;ll be prompted to log in or register  to use these free resources.</p>
<p>This change  pulls the course content descriptions from behind the login wall to  provide a searchable list for members and non-members alike.</p>
<p>At Klocwork  University, you get the information up front and you can schedule your  pub breaks when and where you want. Join today. There&#8217;s no free beer  though.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.klocwork.com/blog/2011/09/klocwork-university-consolidates-learning-resources-into-a-single-roster/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Squeezing max from the  &#8216;try/finally&#8217; blocks</title>
		<link>http://www.klocwork.com/blog/2011/08/squeezing-max-from-the-tryfinally-blocks/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=squeezing-max-from-the-tryfinally-blocks</link>
		<comments>http://www.klocwork.com/blog/2011/08/squeezing-max-from-the-tryfinally-blocks/#comments</comments>
		<pubDate>Tue, 23 Aug 2011 15:22:31 +0000</pubDate>
		<dc:creator>Mikhail Ksenzov</dc:creator>
				<category><![CDATA[General Coding]]></category>

		<guid isPermaLink="false">http://www.klocwork.com/blog/?p=1362</guid>
		<description><![CDATA[I often hear that closing resources properly is way too verbose in Java, especially considering that resource freeing methods such as ‘close()&#8217; are often throwing some type of an exception. However, if you handle resources properly it might turn out to be less of a burden than one might think. Let&#8217;s start with the following [...]]]></description>
			<content:encoded><![CDATA[<p>I often hear that closing resources properly is way too verbose in Java, especially considering that resource freeing methods such as ‘close()&#8217; are often throwing some type of an <a href="http://download.oracle.com/javase/1.5.0/docs/api/java/io/Closeable.html#close%28%29">exception</a>. However, if you handle resources properly it might turn out to be less of a burden than one might think. Let&#8217;s start with the following snippet, where I use an SQL driver to retrieve the list of “codes” matching the given “id”:</p>
<pre><span style="font-size: small;">09 List&lt;String&gt; requestCodes(String dbUrl, String id) {
10   List&lt;String&gt; result = <strong>new</strong> ArrayList&lt;String&gt;();
11   <strong>try</strong> {
12     Connection conn = DriverManager.getConnection(dbUrl);
13     PreparedStatement stmt = conn.prepareStatement("SELECT * FROM customers WHERE id = ?");
14     stmt.setString(1, id);
15     ResultSet rs = stmt.executeQuery();
16     <strong>while</strong> (rs.next()) {
17       result.add(rs.getString("code"));
18     }
19   } <strong>catch</strong> (SQLException e) {
20      e.printStackTrace();
21   }
22   <strong>return</strong> result;
23 }</span></pre>
<p>The problem with the code above is that it allocates SQL server resources but fails to properly release them. More specifically:</p>
<ul>
<li>Line 12: SQL connection &#8216;conn&#8217; is not closed on exit. </li>
<li>Line 13: SQL object &#8216;stmt&#8217; is not closed on exit. </li>
<li>Line 16: SQL object &#8216;rs&#8217; is not closed on exit. </li>
</ul>
<p>The next snippet illustrates how one can fix the defects listed above:</p>
<pre><span style="font-size: small;">09 List&lt;String&gt; requestCodes(String dbUrl, String id) {
10   List&lt;String&gt; result = new ArrayList&lt;String&gt;();
11   Connection conn = <strong>null</strong>;
12   PreparedStatement stmt = <strong>null</strong>;
13   ResultSet rs = <strong>null</strong>;
14   <strong>try</strong> {
15     conn = DriverManager.getConnection(dbUrl);
16     stmt = conn.prepareStatement("SELECT * FROM customers WHERE id = ?");
17     stmt.setString(1, id);
18     rs = stmt.executeQuery();
19     <strong>while</strong> (rs.next()) {
20       result.add(rs.getString("code"));
21     }
22   } <strong>catch</strong> (SQLException e) {
23     e.printStackTrace();
24   } <strong>finally</strong> {
25     <strong>if</strong> (rs != <strong>null</strong>) {
26       <strong>try</strong> {
27         rs.close();          // close() throws an exception...
28       } <strong>catch</strong> (SQLException e) {
29         e.printStackTrace(); // ...have to catch it to free 'stmt'
30       }
31     }
32     <strong>if</strong> (stmt != <strong>null</strong>) {
33       <strong>try</strong> {
34         stmt.close();        // again, close() throws an exception...
35       } <strong>catch</strong> (SQLException ignore) {
36         e.printStackTrace(); // ...have to catch it to free 'conn'
37       }
38     }
39     <strong>if</strong> (conn != <strong>null</strong>) {
30       <strong>try</strong> {
41         conn.close();
42       } <strong>catch</strong> (SQLException ignore) {
43         e.printStackTrace();
44       }
45     }
46   }
47   <strong>return</strong> result;
48 }</span></pre>
<p><span style="font-size: small;">T</span>he code above is correct but extremely verbose. However, it can be improved without sacrifices in semantics&#8230;</p>
<p><strong>Tip #1</strong>: It is better to allocate a resource before the &#8216;try/finally&#8217; block, not inside it. Let&#8217;s start with the following code:</p>
<pre><span style="font-size: small;">Connection conn = <strong>null</strong>;<strong>
try</strong> {
  conn = DriverManager.getConnection(dbUrl);
  // use conn
} <strong>finally</strong> {<strong>
  if</strong> (conn != <strong>null</strong>) {
    conn.close();
  }
}</span>
</pre>
<p>can be rewritten as:</p>
<pre><span style="font-size: small;">Connection conn = DriverManager.getConnection(dbUrl);<strong>
try</strong> {
  // use conn
} <strong>finally</strong> {
  conn.close();
}</span></pre>
<p><strong>Tip #2</strong>: Use nested &#8216;try/finally&#8217; blocks if you allocate a sequence of resources. Let’s start with a snippet:</p>
<pre><span style="font-size: small;"><strong>try</strong> {
  Connection conn = DriverManager.getConnection(dbUrl);
  PreparedStatement stmt = conn.prepareStatement("SELECT * FROM customers WHERE id = ?");<strong>
  try</strong> {
    // use conn
    // use stmt
  } <strong>finally</strong> {<strong>
    try</strong> {
      conn.close();
    } <strong>catch</strong> (SQLException e) {
      e.printStackTrace();
    }
<strong>    try</strong> {
       stmt.close();
    } <strong>catch</strong> (SQLException e) {
      e.printStackTrace();
    }
  }
} <strong>catch</strong> (SQLException e) {
  e.printStackTrace();
}</span></pre>
<p>How many problems have you noticed in the snippet above? I found three:</p>
<ul>
<li>Allocation of resource &#8216;stmt&#8217; can throw an exception before we enter the outer &#8216;try/catch/finally&#8217;. If happens &#8216;conn&#8217; will never be freed.</li>
<li>We duplicate code for the SQLException handling. We were lucky to have only one line of code replicated, but it in general cases exception handling can be a bit more involved that we see here&#8230;</li>
<li>The order of resource allocation does not match the order of deallocation: here the order of deallocation should be reversed to be correct.</li>
</ul>
<p>The only robust way to handle resource allocation/deallocation and to address the issues listed above is to use nested try/finally blocks:</p>
<pre><span style="font-size: small;"><strong>try</strong> {
  Connection conn = DriverManager.getConnection(dbUrl);
<strong>  try</strong> {
    // use conn
    PreparedStatement stmt = conn.prepareStatement("SELECT * FROM customers WHERE id = ?");<strong>
    try</strong> {<strong>
</strong>      // use stmt
    } <strong>finally</strong> {
      stmt.close();
    }
  } <strong>finally</strong> {
    conn.close();
  }
} <strong>catch</strong> (SQLException e) {
  e.printStackTrace();
}</span>
</pre>
<p>Let’s apply tips #1 and #2 to our original method and fix the resource leaks on lines 12, 13, 16:</p>
<pre><span style="font-size: small;">09 List&lt;String&gt; requestCodes(String dbUrl, String id) {
10   List&lt;String&gt; result = new ArrayList&lt;String&gt;();
11   <strong>try</strong> {
12     Connection conn = DriverManager.getConnection(dbUrl);
13     <strong>try</strong> {
14       PreparedStatement stmt = conn.prepareStatement("SELECT * FROM customers WHERE id = ?");
15       <strong>try</strong> {
16         stmt.setString(1, id);
17         ResultSet rs = stmt.executeQuery();
18         <strong>try</strong> {
19           <strong>while</strong> (rs.next()) {
20             result.add(rs.getString("code"));
21           }
22         } <strong>finally</strong> {
23           rs.close();
24         }
25       } <strong>finally</strong> {
26          stmt.close();
27       }
28     } <strong>finally</strong> {
29       conn.close();
30     }
31   } <strong>catch</strong> (SQLException e) {
32     e.printStackTrace();
33   }
34   <strong>return</strong> result;
35 }</span>
</pre>
<p>This is way shorter than the original solution!</p>
<p><strong>Tip #3</strong>: If after applying tip #2 you feel that all your code drifted way too close to the right page margin it means that you probably have too much nested &#8216;try/finally&#8217; blocks and that is time to check if you actually want to have all the resources allocated at the same time. Chances are that you do not need them all; otherwise use the <a href="http://c2.com/cgi/wiki?ExtractMethod">Extract Method</a> refactoring pattern to move out some of the resource access logic.</p>
<p><strong>Tip #4</strong>: Know specific behavior of resources you are dealing with. While tips #1 &#8211; #3 provide a robust and compact approach for dealing with resource allocation/deallocation <em>in general</em>, in certain cases you can make code even more compact. In our example: <a href="http://download.oracle.com/javase/6/docs/api/java/sql/Statement.html#close%28%29">Statement.close()</a> closes its current ResultSet object if one exists. Likewise <a href="http://download.oracle.com/javase/6/docs/api/java/sql/Connection.html#close%28%29">Connections.close()</a> releases JDBC resources. It means that if you deal specifically with JDBC it would be sufficient to close the ‘parent’ resource to be sure that all ‘subresources’ will be properly released:</p>
<pre><span style="font-size: small;">09 List&lt;String&gt; requestCodes(String dbUrl, String id) {
10   List&lt;String&gt; result = new ArrayList&lt;String&gt;();
11   <strong>try</strong> {
12     Connection conn = DriverManager.getConnection(dbUrl);
13     <strong>try</strong> {
14       PreparedStatement stmt = conn.prepareStatement("SELECT * FROM customers WHERE id = ?");
15       stmt.setString(1, id);
16       ResultSet rs = stmt.executeQuery();
17       <strong>while</strong> (rs.next()) {
18         result.add(rs.getString("code"));
19       }
20     } <strong>finally</strong> {
21       conn.close();
22     }
23   } <strong>catch</strong> (SQLException e) {
24     e.printStackTrace();
25   }
26   <strong>return</strong> result;
27 }</span></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.klocwork.com/blog/2011/08/squeezing-max-from-the-tryfinally-blocks/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>He crossed the line&#8211;testing to development</title>
		<link>http://www.klocwork.com/blog/2011/07/he-crossed-the-line-testing-to-development/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=he-crossed-the-line-testing-to-development</link>
		<comments>http://www.klocwork.com/blog/2011/07/he-crossed-the-line-testing-to-development/#comments</comments>
		<pubDate>Tue, 12 Jul 2011 13:21:01 +0000</pubDate>
		<dc:creator>Patti Murphy</dc:creator>
				<category><![CDATA[General Coding]]></category>
		<category><![CDATA[Software Career]]></category>
		<category><![CDATA[Software Testing]]></category>
		<category><![CDATA[testers and developers can get along]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[vampires]]></category>
		<category><![CDATA[werewolves]]></category>

		<guid isPermaLink="false">http://www.klocwork.com/blog/?p=1349</guid>
		<description><![CDATA[Instead of fomenting dissent (that barely exists) in a brazen attempt to boost readership, I&#8217;m changing tactics to look at ways in which testing and development are complementary, beyond their common goal of releasing quality software products. What can I say? After my previous post, How developers drive testers nuts–let’s count the ways, I&#8217;m clearly getting [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_1353" class="wp-caption alignright" style="width: 489px"><a href="http://www.klocwork.com/blog/wp-content/uploads/2011/07/Michail_vampire.png"><img class="size-full wp-image-1353 " title="Michail_vampire" src="http://www.klocwork.com/blog/wp-content/uploads/2011/07/Michail_vampire.png" alt="" width="479" height="358" /></a><p class="wp-caption-text">Michail the friendly, programming vampire.</p></div>
<p>Instead of fomenting dissent (that barely exists) in a brazen attempt to boost readership, I&#8217;m changing tactics to look at ways in which testing and development are complementary, beyond their common goal of releasing quality software products.</p>
<p>What can I say? After my previous post, <a href="http://www.klocwork.com/blog/2011/02/how-developers-drive-testers-nuts-lets-count-the-ways/" target="_blank">How developers drive testers nuts–let’s count the ways</a>, I&#8217;m clearly getting less edgy.</p>
<p>I approached our newest addition to the Klocwork development team, Michail Greshishchev. While he&#8217;s a new full-timer, Greshishchev is not a new face around here.</p>
<p>The recent Carleton University engineering graduate did two co-op terms here&#8211;one in professional services and the other in testing.</p>
<p>So I asked Greshishchev how his stint in testing affected his development. Here&#8217;s exactly what he said:</p>
<ol>
<li>Writing short, efficient unit tests comes naturally after dealing with mammoth testing frameworks. Most of the code I write are tests – the techniques and skills I&#8217;ve learned in testing are fully applicable to development.</li>
<li>Developers have no idea how to execute a test in our automated test system (I don&#8217;t blame them&#8211;the test machine is a large, well-oiled beast distributed over dozens of operating environments). Having the knowledge to run test team tests on developer builds means I don&#8217;t need to wait for nightly build test results to address issues. More importantly, I can add my own tests to the test team&#8217;s automated test system.</li>
<li>It&#8217;s common for a developer to request more information about a tester&#8217;s problem report. My experience with the test team allows me to access the information on test machines myself, saving time for everyone.</li>
<li>The test report pages actually make sense. This allows me to investigate test failures in the nightly build before a tester comes to my desk to tell me I broke something.</li>
</ol>
<p>His experience as part of the test team has been win-win for him and his colleagues. Testing and development sound like allies, don&#8217;t they? Well, as much as <a href="http://www.klocwork.com/blog/2011/02/how-developers-drive-testers-nuts-lets-count-the-ways/" target="_blank">werewolves</a> and vampires can be allies, I suppose. And he was such a nice guy too, but the change is upon him.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.klocwork.com/blog/2011/07/he-crossed-the-line-testing-to-development/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>New programs for software security</title>
		<link>http://www.klocwork.com/blog/2011/07/new-programs-for-software-security/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=new-programs-for-software-security</link>
		<comments>http://www.klocwork.com/blog/2011/07/new-programs-for-software-security/#comments</comments>
		<pubDate>Tue, 05 Jul 2011 17:48:52 +0000</pubDate>
		<dc:creator>Alen Zukich</dc:creator>
				<category><![CDATA[General Coding]]></category>

		<guid isPermaLink="false">http://www.klocwork.com/blog/?p=1350</guid>
		<description><![CDATA[The U.S. Department of Homeland Security, in conjunction with the SANS Institute and Mitre have been hard at work again.  See the article.  There are two new programs called the Common Weakness Risk Analysis Framework (CWRAF) and the Common Weakness Scoring System (CWSS).  Using these two in conjunction will help users identify the most important [...]]]></description>
			<content:encoded><![CDATA[<p>The U.S. Department of Homeland Security, in conjunction with the SANS  Institute and Mitre have been hard at work again.  See the <a href="http://www.scmagazineus.com/dhs-unveils-new-programs-for-software-security/article/206253/" target="_blank">article</a>.  There are two new programs called the <a href="http://cwe.mitre.org/cwraf/index.html#overview" target="_blank">Common Weakness Risk Analysis Framework</a> (CWRAF) and the <a href="http://cwe.mitre.org/cwss/index.html">Common Weakness Scoring System</a> (CWSS).  Using these two in conjunction will help users identify the most   important weaknesses for their business.  It will be interesting to see adoption in the upcoming weeks.</p>
<p>In addition to CWRAF and CWSS the <a href="http://cwe.mitre.org/top25/" target="_blank">2011 CWE/SANS Top 25</a> list has been updated.  There has been a number of position changes and a few that have been knocked out and replaced by <a href="http://cwe.mitre.org/data/definitions/250.html" target="_blank">CWE-250</a>, <a href="http://cwe.mitre.org/data/definitions/676.html" target="_blank">CWE-676</a>, <a href="http://cwe.mitre.org/data/definitions/134.html" target="_blank">CWE-134</a>, and <a href="http://cwe.mitre.org/data/definitions/759.html" target="_blank">CWE-759</a>.  Not too many surprises but I never really noticed CWE-134 not in the list before.  That certainly makes sense.  However it does shock me that <a href="http://cwe.mitre.org/data/definitions/129.html" target="_blank">CWE-129</a> (Improper Validation of Array Index) didn&#8217;t make the list this year.  Certainly a problem that I&#8217;ve seen a ton, although it was close (#27).  To see Klocwork&#8217;s coverage of 2011 CWE/SANS Top 25 go <a href="http://www.klocwork.com/products/documentation/current/2011_CWE-SANS_Top_25_Most_Dangerous_Software_Errors_mapped_to_Klocwork_checkers" target="_blank">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.klocwork.com/blog/2011/07/new-programs-for-software-security/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Evolution of Static Code Analysis &#8211; Part 3: The Present Day</title>
		<link>http://www.klocwork.com/blog/2011/06/the-evolution-of-static-code-analysis-part-3-the-present-day/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=the-evolution-of-static-code-analysis-part-3-the-present-day</link>
		<comments>http://www.klocwork.com/blog/2011/06/the-evolution-of-static-code-analysis-part-3-the-present-day/#comments</comments>
		<pubDate>Wed, 08 Jun 2011 20:10:37 +0000</pubDate>
		<dc:creator>Todd Landry</dc:creator>
				<category><![CDATA[General Coding]]></category>
		<category><![CDATA[General Industry]]></category>
		<category><![CDATA[Software Quality]]></category>
		<category><![CDATA[Software Security]]></category>
		<category><![CDATA[code analysis]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[source code analysis]]></category>
		<category><![CDATA[Static Analysis]]></category>

		<guid isPermaLink="false">http://www.klocwork.com/blog/?p=1322</guid>
		<description><![CDATA[My first 2 posts looked at 2 different eras of Static Code Analysis, the Early Years and the Early 21st Century. The SCA solutions of these times were revolutionary, and helped software development teams a great deal. But they had their warts. In the final post in this series, I’m going to introduce you to [...]]]></description>
			<content:encoded><![CDATA[<p>My first 2 posts looked at 2 different eras of Static Code Analysis, the <a href="http://www.klocwork.com/blog/2011/05/the-evolution-of-static-code-analysis-part-1-the-early-years/">Early Years</a> and the <a href="http://www.klocwork.com/blog/2011/05/the-evolution-of-source-code-analysis-part-2-the-early-21st-century/">Early 21</a><sup><a href="http://www.klocwork.com/blog/2011/05/the-evolution-of-source-code-analysis-part-2-the-early-21st-century/">st</a></sup><a href="http://www.klocwork.com/blog/2011/05/the-evolution-of-source-code-analysis-part-2-the-early-21st-century/"> Century</a>. The SCA solutions of these times were revolutionary, and helped software development teams a great deal. But they had their warts.</p>
<p>In the final post in this series, I’m going to introduce you to the present day Static Code Analysis technology and how it is impacting developers.</p>
<p><strong>The Present Day</strong></p>
<p>I’m a huge fan of Reece’s Peanut Butter Cups. I love them. I keep active so I don&#8217;t feel guilty eating them. In a strange, convoluted way, the 3<sup>rd</sup> generation of static code analysis tools are like this delicious combination of chocolate and peanut butter. Let me explain.</p>
<p><a href="http://www.klocwork.com/blog/wp-content/uploads/2011/05/reeces.jpeg"><img class="size-full wp-image-1323 alignright" title="reeces" src="http://www.klocwork.com/blog/wp-content/uploads/2011/05/reeces.jpeg" alt="" width="259" height="194" /></a></p>
<div class="mceTemp">I’m sure you remember from my previous posts how the 1<sup>st</sup> generation tools (i.e. Lint) gave questionable results but was still considered by developers as a tool exclusively for them, and the 2<sup>nd</sup> generation tools gave really good results but moved away from being a developer tool.</div>
<div class="mceTemp">The 3<sup>rd</sup> generation tools recognized that the developer must be an integral part of the process of identifying, fixing and preventing bugs from reaching the code stream and so, they took the proven results from the 2<sup>nd</sup> gen tools and delivered them right to the developer’s desktop.</div>
<p>Eureka! Now developers are able to perform an analysis locally, using their development environment of choice, while still getting the high accuracy and consistency that was previously only possible by checking in their code and waiting for the integration build to take place.</p>
<p>Think about the ramifications of this:</p>
<ul>
<li>cleaner code is being checked in </li>
<li>the ‘rinse-repeat’ vicious cycle of rework is drastically reduced</li>
<li>quality teams are now able to focus on testing the product’s functionality rather than spending cycles uncovering something that could easily and quickly be found by automated tools. </li>
</ul>
<p>Mmmm-mmmm good. Sounds like a win-win-win to me!</p>
<p>I think the best thing about these 3rd generation tools is simply the fact that developers are now able to resume ownership of the quality and security of the code they are producing.</p>
<p>Well, I hope you enjoyed this walk down memory lane. I sure did. Now I&#8217;m looking for spare change because I see a trip to the vending machine in my immediate future.</p>
<p>If you want to know more about the 3rd Generation tools, feel free to drop me a line.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.klocwork.com/blog/2011/06/the-evolution-of-static-code-analysis-part-3-the-present-day/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Evolution of Source Code Analysis &#8211; Part 2: The Early 21st Century</title>
		<link>http://www.klocwork.com/blog/2011/05/the-evolution-of-source-code-analysis-part-2-the-early-21st-century/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=the-evolution-of-source-code-analysis-part-2-the-early-21st-century</link>
		<comments>http://www.klocwork.com/blog/2011/05/the-evolution-of-source-code-analysis-part-2-the-early-21st-century/#comments</comments>
		<pubDate>Thu, 26 May 2011 13:17:27 +0000</pubDate>
		<dc:creator>Todd Landry</dc:creator>
				<category><![CDATA[General Coding]]></category>
		<category><![CDATA[Software Quality]]></category>
		<category><![CDATA[Static Analysis]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[source code analysis]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://www.klocwork.com/blog/?p=1313</guid>
		<description><![CDATA[In my last post, I took us back in time to an era of bad fashion, questionable music, legendary television shows, and source code analysis tools that were made specifically for software developers. It was the 1970s. In this post, I fast forward to just after the turn of the century to discuss the next [...]]]></description>
			<content:encoded><![CDATA[<p>In my <a href="http://www.klocwork.com/blog/2011/05/the-evolution-of-static-code-analysis-part-1-the-early-years/">last post</a>, I took us back in time to an era of bad fashion, questionable music, legendary television shows, and source code analysis tools that were made specifically for software developers. It was the 1970s. In this post, I fast forward to just after the turn of the century to discuss the next evolution of static analysis tools.</p>
<p><strong>The Early 21</strong><sup><strong>st</strong></sup><strong> Century</strong></p>
<p>Not long after we first viewed hairy-footed <a href="http://en.wikipedia.org/wiki/The_Lord_of_the_Rings">Hobbits</a> on the silver screen, and the sham that was affectionately known as <a href="http://en.wikipedia.org/wiki/Year_2000_problem">Y2K</a>, a new generation of source code analysis tools emerged to cure the errors of the first-generation tools.</p>
<p>These new tools looked beyond the syntactical analysis of previous tools, and instead provided inter-procedural and data-flow analysis. Low hanging fruit was definitely not the target for these tools.</p>
<p>These new techniques were serious&#8211;finding complex defects that could impact code quality and security, and they did that while ensuring that the “noise” (i.e. false positive rate) was greatly reduced compared to the first-generation tools. In addition to local defects, they were now identifying resource management issues, security vulnerabilities, concurrency issues, and so on. These were serious defects that,  if left undetected and unfixed, had the potential for massive problems to the code stream.<a href="http://www.klocwork.com/blog/wp-content/uploads/2011/04/hobbit_feet.jpg"><img class="alignright size-medium wp-image-1314" title="hobbit_feet" src="http://www.klocwork.com/blog/wp-content/uploads/2011/04/hobbit_feet-300x258.jpg" alt="" width="300" height="258" /></a></p>
<p>In order to perform this much deeper analysis, a fundamental change in the analysis techniques had to occur. These engines needed an unfiltered view of the entire code stream, and so they became tightly integrated with the integration build process.</p>
<p>Umm, Houston, we have a problem. If the analysis takes place at integration build time, then that means the analysis is no longer being initiated by the developers. Source code analysis tools became centralized and moved into a more downstream process such as part of a code audit function.</p>
<p>Developers were now being <em>told</em> they created bugs well after they actually checked in the code. They had already moved onto something entirely different, so now bringing them these day-old, or week-old defects was certainly not the most productive use of their time. It is well documented that the earlier you find defects in your code, the more cost effective it is to fix them, so you can clearly see the problems with these second-generation tools.</p>
<p>If only there was a way to bring these second-generation analysis capabilities to the developer desktop. More about that in my next entry.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.klocwork.com/blog/2011/05/the-evolution-of-source-code-analysis-part-2-the-early-21st-century/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The Evolution of Static Code Analysis &#8211; Part 1: The Early Years</title>
		<link>http://www.klocwork.com/blog/2011/05/the-evolution-of-static-code-analysis-part-1-the-early-years/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=the-evolution-of-static-code-analysis-part-1-the-early-years</link>
		<comments>http://www.klocwork.com/blog/2011/05/the-evolution-of-static-code-analysis-part-1-the-early-years/#comments</comments>
		<pubDate>Tue, 17 May 2011 13:45:09 +0000</pubDate>
		<dc:creator>Todd Landry</dc:creator>
				<category><![CDATA[General Coding]]></category>
		<category><![CDATA[General Industry]]></category>
		<category><![CDATA[Static Analysis]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[source code analysis]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://www.klocwork.com/blog/?p=1306</guid>
		<description><![CDATA[Our marketing people here at Klocwork like to see me racking up frequent flyer miles and expending CO2 at roadshows, conferences and tradeshows. Whenever I’m out speaking, I always like to gauge audience familiarity with Static Code Analysis. I’m happy to say that SCA knowledge has definitely increased over the years, but it is still [...]]]></description>
			<content:encoded><![CDATA[<p>Our marketing people here at Klocwork like to see me racking up frequent flyer miles and expending CO2 at roadshows, conferences and tradeshows. Whenever I’m out speaking, I always like to gauge audience familiarity with Static Code Analysis.</p>
<p>I’m happy to say that SCA knowledge has definitely increased over the years, but it is still not up to levels enjoyed by unit testing or integration testing.</p>
<p>What I plan to do over the next three weeks is to provide you with a history lesson on how Static Code Analysis has evolved over the past few decades (yes, it has been around that long!). The three different eras I will be addressing are The Early Years, The Early 21<sup>st</sup> Century, and  The Present Day.</p>
<p><strong><em>The Early Years</em></strong></p>
<p>As I mentioned earlier, Static Code Analysis has actually been around since the time of <a href="http://en.wikipedia.org/wiki/Bell-bottoms">bell bottoms</a>, <a href="http://www.youtube.com/watch?v=JlzlNpttvVM">disco music</a>, and <a href="http://www.spaceinvaders.de/">Space Invaders</a> (check out the Space Invaders link)&#8211;yes, the good ole 1970s. Who out there has heard of <a href="http://en.wikipedia.org/wiki/Lint_(software)">Lint</a> (and no, I’m not talking about the fluff coming from your old bell bottoms pockets)?</p>
<p><a href="http://www.klocwork.com/blog/wp-content/uploads/2011/04/space-invaders-videogame.jpg"><img class="alignright size-medium wp-image-1312" title="space-invaders-videogame" src="http://www.klocwork.com/blog/wp-content/uploads/2011/04/space-invaders-videogame-173x300.jpg" alt="" width="173" height="300" /></a></p>
<p>Lint was one of these first-generation SCA tools introduced in the late 70s. These tools targeted low hanging fruit in C code, such as missing or extra semi-colons, missing curlicues, potentially dangerous <a href="http://publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp?topic=/com.ibm.sqls.doc/sqls169.htm">implicit casts</a>, and so on.</p>
<p>These tools were closely integrated with the compile and link process, and so this <em>seemed</em> like the best time to show its errors and warnings, while the developer was actually “in process” and fixing problems found by the compiler. Since these tools delivered its warnings at compile time, it quickly became a tool that was adopted and owned by the developers themselves.</p>
<p>Life was good. Well, until the bugs that were being found were deemed to be relatively trivial or completely erroneous (the dreaded false positive). The problem was that these tools were only able to see one file at a time, but for accurate static analysis there is a strong need to know everything that&#8217;s going on within the entire stream.</p>
<p>Without that vision of the entire stream, no matter how sophisticated the analysis tools are, they will make incorrect assumptions most of the time. Because of these inaccuracies, these first-generation tools never gained the widespread acceptance of software developers.</p>
<p>Next up will be a look at static analysis tools during a time when “<a href="http://www.youtube.com/watch?v=ikkg4NobV_w">Whassssuuuupp</a>” became a household term.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.klocwork.com/blog/2011/05/the-evolution-of-static-code-analysis-part-1-the-early-years/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>IDE vs text editor</title>
		<link>http://www.klocwork.com/blog/2011/05/ide-vs-text-editor/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ide-vs-text-editor</link>
		<comments>http://www.klocwork.com/blog/2011/05/ide-vs-text-editor/#comments</comments>
		<pubDate>Tue, 10 May 2011 13:44:26 +0000</pubDate>
		<dc:creator>Alen Zukich</dc:creator>
				<category><![CDATA[General Coding]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[emacs]]></category>
		<category><![CDATA[Static Analysis]]></category>
		<category><![CDATA[vi]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.klocwork.com/blog/?p=1303</guid>
		<description><![CDATA[I&#8217;m sure this topic has been discussed a million times, but hey, here we go again.  A recent question came up on whether people liked their experience of Eclipse vs. Visual Studio.  Of course this brought up the advantages of one versus the other.  But is that really a fair comparison? It really depends.  What [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m sure this topic has been discussed a million times, but hey, here we go again.  A recent <a href="http://www.linkedin.com/groupItem?view=&amp;srchtype=discussedNews&amp;gid=1973349&amp;item=37110180&amp;type=member&amp;trk=eml-anet_dig-b_pd-ttl-cn" target="_blank">question</a> came up on whether people liked their experience of Eclipse vs. Visual Studio.  Of course this brought up the advantages of one versus the other.  But is that really a fair comparison? It really depends.  What type of application are you building &#8212; a native Windows application?  Surely going with Visual Studio makes sense. But if the goal is cross-platform, then you might look at Eclipse.</p>
<p><a href="http://www.klocwork.com/blog/wp-content/uploads/2011/04/Beginner-039-s-Vi-Editor-Guide-2.png"><img class="size-full wp-image-1305 alignleft" title="Beginner-039-s-Vi-Editor-Guide-2" src="http://www.klocwork.com/blog/wp-content/uploads/2011/04/Beginner-039-s-Vi-Editor-Guide-2.png" alt="" width="400" height="330" /></a>Glad to see people are thinking about IDEs, but what really intrigues me about this conversation of one IDE versus another is that someone always has to add their two cents about the ancient text editors of the world.   Something like &#8220;real programmers use vi&#8221;.  Hold the phone.  Are we talking about the same text editor that requires you to memorize a gazillion key bindings?</p>
<p>I don&#8217;t get this.  I understand legacy use, as vi was the only available built-in text editor at the time and still is the only choice of hackers today.  But times have changed.  Anyone I&#8217;ve talked to who is using vi (or other known text editors like emacs) always seems very proud of it.  Maybe knowing how to use such a complex tool provides some self-worth.  I just don&#8217;t know.  Seems like it would be the same as me bragging about my portable Walkman or the 8-track player in my car.</p>
<p>Don&#8217;t the features of Visual Studio or Eclipse make you faster?  With a click of a button you can refactor your code.  With simple auto-completion the IDE eliminates simple typing (or even mistakes).  Plus with built-in tools for static analysis, test generation, etc., what are you waiting for?</p>
<p>So you vi/vim/emacs coders out there &#8212; tell me why on earth you are sticking with it. What makes you a better programmer using vi/vim or emacs?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.klocwork.com/blog/2011/05/ide-vs-text-editor/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Toughen up your code with software security best practices</title>
		<link>http://www.klocwork.com/blog/2011/04/toughen-up-your-code-with-software-security-best-practices/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=toughen-up-your-code-with-software-security-best-practices</link>
		<comments>http://www.klocwork.com/blog/2011/04/toughen-up-your-code-with-software-security-best-practices/#comments</comments>
		<pubDate>Thu, 28 Apr 2011 14:06:47 +0000</pubDate>
		<dc:creator>Patti Murphy</dc:creator>
				<category><![CDATA[Coding Standards]]></category>
		<category><![CDATA[General Coding]]></category>
		<category><![CDATA[General Industry]]></category>
		<category><![CDATA[Software Security]]></category>
		<category><![CDATA[Microsoft Security Development Lifecycle]]></category>
		<category><![CDATA[OWASP]]></category>
		<category><![CDATA[SDL]]></category>
		<category><![CDATA[XSS]]></category>

		<guid isPermaLink="false">http://www.klocwork.com/blog/?p=1302</guid>
		<description><![CDATA[Crying into your wadded Kleenex about how your vulnerabilities were exploited may make for compelling TV, but when it comes to software security, they’ll cost you a lot more than your personal dignity. Or maybe they&#8217;ll cost you millions of dollars in lost business and your personal dignity. Why not toughen up your code by [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.klocwork.com/blog/wp-content/uploads/2011/04/cope-crying-baby-800x800.jpg"><img class="alignright size-full wp-image-1309" title="cope-crying-baby-800x800" src="http://www.klocwork.com/blog/wp-content/uploads/2011/04/cope-crying-baby-800x800.jpg" alt="" width="360" height="239" /></a>Crying into your wadded Kleenex about how your vulnerabilities were exploited may make for compelling TV, but when it comes to software security, they’ll cost you a lot more than your personal dignity. Or maybe they&#8217;ll cost you millions of dollars in lost business <em>and </em>your personal dignity.</p>
<p>Why not toughen up your code by implementing software security best practices that prevent or mitigate the risks?</p>
<p>That’s why you should head on over to the<a href="http://developer.klocwork.com/browse/free-courses-security-innovation" target="_blank"> Klocwork Developer Network</a> and check out the free eLearning courses provided by <a href="https://teamprofessor.securityinnovation.com/ed/Portal/default.asp?location=&amp;selectedIndex=1-" target="_blank">Security Innovation</a>, an industry leader in software security and cryptography. To view learning resources, just log in or register.</p>
<p>Here&#8217;s a brief description of each course:</p>
<ul>
<li><a href="http://developer.klocwork.com/members/security-innovations/owasp-top-ten-threats-and-mitigations" target="_blank"><strong> </strong></a><strong><a href="http://developer.klocwork.com/members/security-innovations/owasp-top-ten-threats-and-mitigations">OWASP Top 10 – Threats and Mitigations</a> </strong></li>
</ul>
<p style="padding-left: 30px;">Learn strategies and best practices for understanding, identifying and mitigating the risk of vulnerabilities and attacks within the OWASP Top 10.</p>
<ul>
<li><a href="http://developer.klocwork.com/members/security-innovations/intro-microsoft-security-development-lifecycle-sdl" target="_blank"><strong>Intro to the Microsoft Security Development Lifecycle (SDL) </strong></a></li>
</ul>
<p style="padding-left: 30px;">The Security Development Lifecycle (SDL), a key security engineering process that was spawned from Microsoft’s Trustworthy Computing Initiative. Learn the necessary steps to meet SDL requirements, and identify the appropriate tools required by the SDL.</p>
<ul>
<li><a href="http://developer.klocwork.com/members/security-innovations/cross-site-scripting-aspnet" target="_blank"><strong>Intro to XSS – Asp.Net examples </strong></a></li>
</ul>
<p style="padding-left: 30px;">Learn to understand the mechanisms behind cross-site scripting vulnerabilities, describe cross-site scripting vulnerabilities and their consequences, and apply secure coding best practices to prevent cross-site scripting vulnerabilities.</p>
<ul>
<li><a href="http://developer.klocwork.com/members/security-innovations/cross-site-scripting-jsp" target="_blank"><strong>Intro to XSS – Java </strong></a></li>
</ul>
<p style="padding-left: 30px;">Learn to understand the mechanisms behind cross-site scripting vulnerabilities, describe cross-site scripting vulnerabilities and their consequences, and apply secure coding best practices to prevent cross-site scripting vulnerabilities.</p>
<p style="padding-left: 30px;">Have fun, code safely and put that Kleenex away (unless it&#8217;s allergy season).</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;"><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves /> <w:TrackFormatting /> <w:PunctuationKerning /> <w:ValidateAgainstSchemas /> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF /> <w:LidThemeOther>EN-CA</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables /> <w:SnapToGridInCell /> <w:WrapTextWithPunct /> <w:UseAsianBreakRules /> <w:DontGrowAutofit /> <w:SplitPgBreakAndParaMark /> <w:DontVertAlignCellWithSp /> <w:DontBreakConstrainedForcedTables /> <w:DontVertAlignInTxbx /> <w:Word11KerningPairs /> <w:CachedColBalance /> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> <m:mathPr> <m:mathFont m:val="Cambria Math" /> <m:brkBin m:val="before" /> <m:brkBinSub m:val="&#45;-" /> <m:smallFrac m:val="off" /> <m:dispDef /> <m:lMargin m:val="0" /> <m:rMargin m:val="0" /> <m:defJc m:val="centerGroup" /> <m:wrapIndent m:val="1440" /> <m:intLim m:val="subSup" /> <m:naryLim m:val="undOvr" /> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"   DefSemiHidden="true" DefQFormat="false" DefPriority="99"   LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Normal" /> <w:LsdException Locked="false" Priority="9" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="heading 1" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9" /> <w:LsdException Locked="false" Priority="39" Name="toc 1" /> <w:LsdException Locked="false" Priority="39" Name="toc 2" /> <w:LsdException Locked="false" Priority="39" Name="toc 3" /> <w:LsdException Locked="false" Priority="39" Name="toc 4" /> <w:LsdException Locked="false" Priority="39" Name="toc 5" /> <w:LsdException Locked="false" Priority="39" Name="toc 6" /> <w:LsdException Locked="false" Priority="39" Name="toc 7" /> <w:LsdException Locked="false" Priority="39" Name="toc 8" /> <w:LsdException Locked="false" Priority="39" Name="toc 9" /> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption" /> <w:LsdException Locked="false" Priority="10" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Title" /> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font" /> <w:LsdException Locked="false" Priority="11" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtitle" /> <w:LsdException Locked="false" Priority="22" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Strong" /> <w:LsdException Locked="false" Priority="20" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Emphasis" /> <w:LsdException Locked="false" Priority="59" SemiHidden="false"    UnhideWhenUsed="false" Name="Table Grid" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text" /> <w:LsdException Locked="false" Priority="1" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="No Spacing" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 1" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 1" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 1" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 1" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision" /> <w:LsdException Locked="false" Priority="34" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="List Paragraph" /> <w:LsdException Locked="false" Priority="29" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Quote" /> <w:LsdException Locked="false" Priority="30" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Quote" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 1" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 1" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 1" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 1" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 1" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 2" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 2" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 2" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 2" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 2" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 2" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 2" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 2" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 3" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 3" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 3" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 3" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 3" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 3" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 3" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 3" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 3" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 4" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 4" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 4" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 4" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 4" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 4" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 4" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 4" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 4" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 5" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 5" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 5" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 5" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 5" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 5" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 5" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 5" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 5" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 6" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 6" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 6" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 6" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 6" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 6" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 6" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 6" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 6" /> <w:LsdException Locked="false" Priority="19" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis" /> <w:LsdException Locked="false" Priority="21" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis" /> <w:LsdException Locked="false" Priority="31" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference" /> <w:LsdException Locked="false" Priority="32" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Reference" /> <w:LsdException Locked="false" Priority="33" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Book Title" /> <w:LsdException Locked="false" Priority="37" Name="Bibliography" /> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading" /> </w:LatentStyles> </xml><![endif]--><!--[if gte mso 10]> <mce:style><!   /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Table Normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin-top:0cm; 	mso-para-margin-right:0cm; 	mso-para-margin-bottom:10.0pt; 	mso-para-margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-fareast-theme-font:minor-fareast; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi;} --> <!--[endif]--></p>
<p><br class="spacer_" /></p>
<p><br class="spacer_" /></p>
<p><br class="spacer_" /></p>
<p><br class="spacer_" /></p>
<p><br class="spacer_" /></p>
<p><br class="spacer_" /></p>
<p><br class="spacer_" /></p>
<p><br class="spacer_" /></p>
<p><br class="spacer_" /></p>
<p><br class="spacer_" /></p>
<p class="MsoNormal">Crying into your wadded Kleenex about how your vulnerabilities were exploited may make for compelling TV, but when it comes to software security, they’ll cost you a lot more than your personal dignity.</p>
<p class="MsoNormal">That’s why you should head on over to our Developer Network and check out free eLearning security courses provided by Security Innovations, an industry leader in software security and cryptography.</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal"> </p>
<p class="MsoNormal"> </p>
<p class="MsoNormal">You can wail and gnash your teeth over your exploited vulnerabilitiesSoftware security isn’t just finding your soft spots that attackers can exploit, it’s preventing them in the first place.</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal">OWASP Top 10 – Threats and Mitigations</p>
<p class="MsoNormal">There are hundreds of risks to web applications.<span> </span>Each year, the Open Web Application Security Project (OWASP) publishes its Top Ten list, representing its opinion of the most critical web application security flaws. Mitigating these flaws will help an organization greatly reduce the risk of a web application being compromised.<span> </span>Regulatory bodies, including PCI-DSS and the Federal Trade Commission, recommend addressing the OWASP Top 10 as part of an organization’s best practices.<span> </span>This course will provide personnel with strategies and best practices for understanding, identifying and mitigating the risk of vulnerabilities and attacks within the OWASP Top 10. Prerequisite: none.</p>
<p class="MsoNormal">Intro to the Microsoft Security Development Lifecycle (SDL)</p>
<p class="MsoNormal">This course introduces the Security Development Lifecycle (SDL), a key security engineering process that was spawned from Microsoft’s Trustworthy Computing Initiative.<span> </span>Students will learn how to design and implement products that meet an organization’s security needs.<span> </span>Upon completion of this course, the participant will be able to identify the benefits of the Security Development Lifecycle, recognize the importance of the Final Security Review, follow the necessary steps to meet SDL requirements, and identify the appropriate tools required by the SDL.<span> </span>Prerequisite: basic knowledge of the software development lifecycle.</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal">Intro to XSS – Asp.Net examples</p>
<p class="MsoNormal">In this course, students will learn to understand the mechanisms behind cross-site scripting vulnerabilities, describe cross-site scripting vulnerabilities and their consequences, and apply secure coding best practices to prevent cross-site scripting vulnerabilities.<span> </span>Prerequisite:<span> </span>Basic knowledge of Web technologies, ASP.NET, and C# programming language.</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal">Intro to XSS – Java</p>
<p class="MsoNormal">In this course, students will learn to understand the mechanisms behind cross-site scripting vulnerabilities, describe cross-site scripting vulnerabilities and their consequences, and apply secure coding best practices to prevent cross-site scripting vulnerabilities.<span> </span>Prerequisite:<span> </span>Basic knowledge of Web technologies, and Java Server Pages (JSP).</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.klocwork.com/blog/2011/04/toughen-up-your-code-with-software-security-best-practices/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Will source code analysis change developer culture?</title>
		<link>http://www.klocwork.com/blog/2011/04/will-source-code-analysis-change-developer-culture/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=will-source-code-analysis-change-developer-culture</link>
		<comments>http://www.klocwork.com/blog/2011/04/will-source-code-analysis-change-developer-culture/#comments</comments>
		<pubDate>Tue, 26 Apr 2011 15:49:58 +0000</pubDate>
		<dc:creator>Alen Zukich</dc:creator>
				<category><![CDATA[General Coding]]></category>
		<category><![CDATA[source code analysis]]></category>
		<category><![CDATA[Static Analysis]]></category>

		<guid isPermaLink="false">http://www.klocwork.com/blog/?p=1287</guid>
		<description><![CDATA[Will source code analysis (SCA) or static analysis change developer culture? The answer really depends on the developer&#8217;s skill set. In my experience, there are developers who are excellent at what they do (visionaries), and then there are some that just don&#8217;t get it (fence posts). I&#8217;m not here to talk about the visionaries &#8212; they already [...]]]></description>
			<content:encoded><![CDATA[<p>Will source code analysis (SCA) or static analysis change developer culture? The answer really depends on the developer&#8217;s skill set. In my experience, there are developers who are excellent at what they do (visionaries), and then there are some that just don&#8217;t get it (fence posts).</p>
<p>I&#8217;m not here to talk about the visionaries &#8212; they already get it.  They know that SCA techniques help find critical issues early in the development cycle. Sometimes SCA finds great stuff, sometimes it doesn&#8217;t. But it&#8217;s always worth the time, because it makes developers better at what they do. In fact, it&#8217;s the visionaries who demand SCA from the outset.</p>
<p>Nor am I here to talk about the fence posts; they won&#8217;t last long at what they&#8217;re doing anyway.</p>
<p>I&#8217;m mostly concerned with the majority, the ones that fall in between. Do they find value in SCA? Will it change the way they develop code?  These developers are quite valued and extremely important to the organization &#8212; so much so that they have a full workload and tons of commitments. It&#8217;s because of this workload that you typically won&#8217;t see a shift in their work culture. When they&#8217;re asked to run SCA as part of their development process, they&#8217;ll probably accept this and give their honest opinion. They will wait to see whether it finds the so-called &#8220;silver bullet&#8221; to decide whether they are getting value out of it. In other words, if SCA finds a super-juicy bug that would have been catastrophic, it&#8217;s a winner. If not, then you&#8217;re probably not going to convince them that SCA is right for them. On top of that, they have a pretty big workload, and SCA is throwing false positives, making them spend more time.</p>
<p>The reality is that with SCA you may never find the silver bullet. The reality is that SCA tools throw false positives. The reality is that it will take some time up front to be proficient with the tools. Yes, these realities suck. But don&#8217;t lose focus on the prize. SCA will always pay off in the end. The value of SCA is quite clear these days (see <a href="http://swreflections.blogspot.com/2009/06/value-of-static-analysis-tools.html" target="_blank">here</a>, <a href="http://www.computer.org/portal/web/csdl/doi/10.1109/TSE.2006.38" target="_blank">here</a> and <a href="http://codeintegrity.blogspot.com/2010/07/static-analysis-typically-results-in-85.html" target="_blank">here</a>).</p>
<p><a href="http://www.klocwork.com/blog/wp-content/uploads/2011/04/surprised_baby_2.jpg"><img class="size-full wp-image-1289 alignleft" title="surprised_baby_2" src="http://www.klocwork.com/blog/wp-content/uploads/2011/04/surprised_baby_2.jpg" alt="" width="267" height="269" /></a>Okay, so there&#8217;s some value despite the realities, but there&#8217;s also a hidden value: training. Even though SCA may show you a defect you don&#8217;t care about, it gives you food for thought. Coding best practices are a good example. A memory-constrained shop will tell you they always need to check for NULL with memory allocation:</p>
<p><br class="spacer_" /></p>
<p><code>void *blah = malloc(10);<br />
if (blah != NULL){<br />
   /* Do something here with blah */<br />
}else{<br />
 /* Do something here if it fails */<br />
}</code></p>
<p><br class="spacer_" /></p>
<p>Surprisingly, others will tell you that the likelihood of running out of memory is very low. So why place the unnecessary checks? This and many other arguments will go on forever. But these type of questions make you think twice: should I be checking for NULL, or should I rewrite my code? So in the end, SCA gets you thinking.</p>
<p><br class="spacer_" /></p>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.klocwork.com/blog/2011/04/will-source-code-analysis-change-developer-culture/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building a Software Security Threat Model</title>
		<link>http://www.klocwork.com/blog/2011/04/building-a-software-security-threat-model/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=building-a-software-security-threat-model</link>
		<comments>http://www.klocwork.com/blog/2011/04/building-a-software-security-threat-model/#comments</comments>
		<pubDate>Wed, 20 Apr 2011 19:34:44 +0000</pubDate>
		<dc:creator>Brendan Harrison</dc:creator>
				<category><![CDATA[General Coding]]></category>
		<category><![CDATA[Software Security]]></category>
		<category><![CDATA[Static Analysis]]></category>

		<guid isPermaLink="false">http://www.klocwork.com/blog/?p=1291</guid>
		<description><![CDATA[We&#8217;ve talked at length before regarding software security assurance and the role static analysis can play in ensuring code is written securely. We&#8217;ve got a bunch of great resources for anyone looking to dive into this particular aspect of software security: Summary of various secure coding standards, including links to specific checkers supported by Klocwork [...]]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve talked at length before regarding <a title="Software Security Assurance" href="http://www.klocwork.com/solutions/software-security-assurance/" target="_blank">software security assurance</a> and the role static analysis can play in ensuring code is written securely. We&#8217;ve got a bunch of great resources for anyone looking to dive into this particular aspect of software security: <br />
 <a href="http://www.klocwork.com/blog/wp-content/uploads/2011/04/lock1.jpg"><img class="alignright size-full wp-image-1294" title="lock" src="http://www.klocwork.com/blog/wp-content/uploads/2011/04/lock1.jpg" alt="Lock" width="219" height="230" /></a></p>
<ul>
<li>Summary of various <a title="Secure Coding Standards" href="http://www.klocwork.com/solutions/security-coding-standards/" target="_blank">secure coding standards</a>, including links to specific checkers supported by Klocwork</li>
<li><a title="Free Secure Coding e-Learning" href="http://developer.klocwork.com/browse/free-courses-security-innovation" target="_blank">Free secure coding e-learning</a> courses, including an intro to Microsoft&#8217;s secure development lifecycle</li>
<li>A &#8216;buyer&#8217;s guide&#8217; to <a title="Selecting a Static Analysis Tool" href="http://www.klocwork.com/resources/download.php?file=klocwork-case-study-aci">selecting a static analysis tool </a>as part of a secure coding program authored by a major payment software company</li>
</ul>
<p>To build on this, next month our CTO Gwyn Fisher and the CTO of Security Innovation, Jason Taylor will be hosting a talk that expands the discussion beyond secure coding strategies alone. Jason will be talking at length on how to build a threat model for software, in particular embedded software. Gwyn will then walk through how customers should be building their software with this threat model in mind &#8211; everything from code reviews to static analysis and testing strategies. I urge you to <a title="Webinar Registration" href="https://www.techwebonlineevents.com/ars/eventregistration.do?mode=eventreg&amp;F=1003124&amp;K=CAA1CC" target="_blank">register for the webinar</a> and check it out &#8211; there will be lots of good information being discussed.</p>
<ul>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.klocwork.com/blog/2011/04/building-a-software-security-threat-model/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Memory overflows</title>
		<link>http://www.klocwork.com/blog/2011/04/memory-overflows/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=memory-overflows</link>
		<comments>http://www.klocwork.com/blog/2011/04/memory-overflows/#comments</comments>
		<pubDate>Tue, 12 Apr 2011 13:53:58 +0000</pubDate>
		<dc:creator>Alen Zukich</dc:creator>
				<category><![CDATA[General Coding]]></category>
		<category><![CDATA[Nasty Bugs]]></category>
		<category><![CDATA[memory overflows]]></category>
		<category><![CDATA[source code analysis]]></category>
		<category><![CDATA[stack corruption]]></category>

		<guid isPermaLink="false">http://www.klocwork.com/blog/?p=1279</guid>
		<description><![CDATA[A few years back a customer said they had all kinds of trouble with bugs corrupting their stack.  Even though they asked if source code analysis tools could help find stack corruption, once we got an example, we found that they were really looking for was memory overflows.  So what on earth is a memory [...]]]></description>
			<content:encoded><![CDATA[<p>A few years back a customer said they had all kinds of trouble with bugs corrupting their stack.  Even though they asked if source code analysis tools could help find stack corruption, once we got an example, we found that they were really looking for was memory overflows.  So what on earth is a memory overflow?  Does that even exist?</p>
<p>Yes, except it is probably not what you&#8217;re thinking, it&#8217;s not the same as a <a href="http://en.wikipedia.org/wiki/Memory_leak" target="_blank">memory leak</a>;  a memory overflow is quite <a href="http://www.blurtit.com/q551100.html" target="_blank">different</a>.  A memory overflow is really just a form of a <a href="http://en.wikipedia.org/wiki/Buffer_overflow" target="_blank">buffer overflow</a>.  The impact of memory overflow is unexpected behavior or program failure.   Take this example:</p>
<pre class="brush: cpp; title: ;">
#include &lt;stdio.h&gt;
typedef struct s1_ {
   int i;
   int j;
   char arr[10];
}s1;

typedef struct s2_ {
   char b[20];
   char c[40];
}s2;

main()
{
   s1 block1;
   memset(&amp;block1, 0, sizeof(s2));
   block1.i =1;
}
</pre>
<p>Here we have the case of incorrectly using &#8216;memset&#8217; at line 16 where &#8216;sizeof(s2)&#8217; is bigger than &#8216;block1&#8242;.  In fact, going back to this customer revealed that the issue was due to memset clearing much more area than intended.  If you&#8217;re using static analysis or source code analysis tools then you are probably covered by this.  You will find this type of issue usually in the &#8220;buffer overflow&#8221; category.</p>
<p>So, are you free of your memory overflows?</p>
<p style="text-align: center;"><a href="http://www.klocwork.com/blog/wp-content/uploads/2011/04/2009-08-17-memory-corruption.png"><img class="aligncenter size-full wp-image-1282" title="2009-08-17-memory-corruption" src="http://www.klocwork.com/blog/wp-content/uploads/2011/04/2009-08-17-memory-corruption.png" alt="" width="900" height="364" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.klocwork.com/blog/2011/04/memory-overflows/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Klocwork Developer Network Set to Go Live</title>
		<link>http://www.klocwork.com/blog/2011/03/klocwork-developer-network-set-to-go-live/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=klocwork-developer-network-set-to-go-live</link>
		<comments>http://www.klocwork.com/blog/2011/03/klocwork-developer-network-set-to-go-live/#comments</comments>
		<pubDate>Tue, 22 Mar 2011 16:55:18 +0000</pubDate>
		<dc:creator>Alan Weekes</dc:creator>
				<category><![CDATA[Code Review]]></category>
		<category><![CDATA[Coding Standards]]></category>
		<category><![CDATA[General Coding]]></category>
		<category><![CDATA[Software Quality]]></category>
		<category><![CDATA[Static Analysis]]></category>
		<category><![CDATA[User Documentation]]></category>
		<category><![CDATA[code analysis]]></category>
		<category><![CDATA[coding standards]]></category>
		<category><![CDATA[developer productivity]]></category>
		<category><![CDATA[software development]]></category>

		<guid isPermaLink="false">http://www.klocwork.com/blog/?p=1269</guid>
		<description><![CDATA[Our dilemma: How do we remove the barriers to knowledge about Klocwork's toolset, and developer best practices for creating high-quality code?
The answer: Klocwork Developer Network--a new online portal designed for learning, sharing and discussing all things source code analysis. ]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.klocwork.com/blog/wp-content/uploads/2011/03/DN_Home.png"><img class="alignright size-medium wp-image-1271" title="DN_Home" src="http://www.klocwork.com/blog/wp-content/uploads/2011/03/DN_Home-300x242.png" alt="Klocwork Developer Network" width="300" height="242" /></a><strong>Our dilemma:</strong> How do we remove the barriers to knowledge about Klocwork&#8217;s toolset and developer best practices for creating high-quality code?</p>
<p><strong>The answer:</strong> Klocwork Developer Network&#8211;a new online portal designed for learning, sharing and discussing all things source code analysis. We have had a lot of fun and a few sleepless nights as we assembled industry knowledge, online forums, computer-based training, best practices from industry experts, and lots of reference and learning resources.</p>
<p>A significant portion of the content on the Developer Network is open for public consumption. By registering and logging in, you get additional videos, demos, CBT and more.</p>
<p>We have a lot of fresh content to add to the site in the upcoming weeks and months, and we want to hear from you about what you would like to see. Why not register now at developer.klocwork.com? Then tell other Klocwork users about the portal too.</p>
<p>Visit Klocwork&#8217;s Developer Network at <a href="http://developer.klocwork.com">developer.klocwork.com</a>.</p>
<p>Already a my.klocwork.com user? Access the Klocwork Developer Network using your existing my.klocwork.com login. (But note that my.klocwork.com remains the place to go for support tickets and for FTP access to the latest software releases.)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.klocwork.com/blog/2011/03/klocwork-developer-network-set-to-go-live/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Static analysis cures all ills?</title>
		<link>http://www.klocwork.com/blog/2011/03/static-analysis-cures-all-ills/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=static-analysis-cures-all-ills</link>
		<comments>http://www.klocwork.com/blog/2011/03/static-analysis-cures-all-ills/#comments</comments>
		<pubDate>Thu, 17 Mar 2011 20:20:29 +0000</pubDate>
		<dc:creator>Alen Zukich</dc:creator>
				<category><![CDATA[General Coding]]></category>
		<category><![CDATA[dynamic testing]]></category>
		<category><![CDATA[Static Analysis]]></category>

		<guid isPermaLink="false">http://www.klocwork.com/blog/?p=1273</guid>
		<description><![CDATA[There was a recent article from Mark Pitchford titled: &#8220;Think static analysis cures all ills? Think again.&#8221; Obviously being biased working here at Klocwork, I take a major exception to what Mark has to say. This article makes ridiculous claims. About the only thing Mark got right was that static analysis has been around for a [...]]]></description>
			<content:encoded><![CDATA[<p>There was a recent article from Mark Pitchford titled: &#8220;<a href="http://www.eetimes.com/design/embedded/4213633/Think-static-analysis-cures-all-ills--Think-again-?Ecosystem=embedded" target="_blank">Think static analysis cures all ills? Think again.&#8221;</a> Obviously being biased working here at Klocwork, I take a major exception to what Mark has to say.</p>
<p><a href="http://www.klocwork.com/blog/wp-content/uploads/2011/03/484dumb-computer.gif"><img class="alignleft size-full wp-image-1274" title="484dumb-computer" src="http://www.klocwork.com/blog/wp-content/uploads/2011/03/484dumb-computer.gif" alt="" width="250" height="252" /></a>This article makes ridiculous claims. About the only thing Mark got right was that static analysis has been around for a long time. However it&#8217;s ludicrous to think that they&#8217;re the same as they were in the past. That&#8217;s like saying computers from decades ago are the same as today. The advancement has been huge for static analysis tools, especially in the last couple of years.</p>
<p>The author is really selling the merits of dynamic testing, which is great. Everyone should have the proper testing procedures in place. But static analysis is complementary&#8211;it&#8217;s another tool that will help you go through ALL the paths of your code to help you find bugs you&#8217;d otherwise miss.</p>
<p>One of the biggest reasons static analysis tools have taken off, in my opinion, is the level of integration. It&#8217;s quite simple to get results with static analysis tools with little effort. Especially compared with dynamic analysis tools.</p>
<p>Paul Anderson, a fellow competitor, sums it up very nicely in the comments. Check it out.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.klocwork.com/blog/2011/03/static-analysis-cures-all-ills/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>All static analysis tools are not created equal</title>
		<link>http://www.klocwork.com/blog/2011/03/all-static-analysis-tools-are-not-created-equal/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=all-static-analysis-tools-are-not-created-equal</link>
		<comments>http://www.klocwork.com/blog/2011/03/all-static-analysis-tools-are-not-created-equal/#comments</comments>
		<pubDate>Tue, 08 Mar 2011 16:14:13 +0000</pubDate>
		<dc:creator>Brendan Harrison</dc:creator>
				<category><![CDATA[General Coding]]></category>
		<category><![CDATA[Static Analysis]]></category>
		<category><![CDATA[evaluating static analysis tools]]></category>

		<guid isPermaLink="false">http://www.klocwork.com/blog/?p=1259</guid>
		<description><![CDATA[Yes, it’s true (!) and as anyone in this space knows there is a huge difference between static analysis tools, their level of sophistication, and their approach to developer adoption. Gary McGraw &#38; John Steven from Cigital describe their views on this topic including ‘5 pitfalls’ that customers should avoid when evaluating tools. These pitfalls mostly [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_1261" class="wp-caption alignright" style="width: 135px"><a href="http://www.klocwork.com/blog/wp-content/uploads/2011/03/not-equal1.png"><br />
 <img class="size-medium wp-image-1261 " title="Static Analysis Tools Not Created Equal" src="http://www.klocwork.com/blog/wp-content/uploads/2011/03/not-equal1-228x300.png" alt="Static Analysis Tools Not Created Equal" width="125" height="164" /></a><p class="wp-caption-text">Static Analysis Tools Not Created Equal</p></div>
<p>Yes, it’s true (!) and as anyone in this space knows there is a huge difference between <a title="Static Analysis" href="http://www.klocwork.com/products/insight/klocwork-truepath/" target="_blank">static analysis</a> tools, their level of sophistication, and their approach to developer adoption. <a title="InformIT Static Analysis Article" href="http://www.informit.com/articles/article.aspx?p=1680863" target="_blank">Gary McGraw &amp; John Steven from Cigital</a> describe their views on this topic including ‘5 pitfalls’ that customers should avoid when evaluating tools. These pitfalls mostly amount to the fact that analysis results across different tools, code bases, and tool operators can make results vary significantly, so be aware of this fact when conducting your benchmarking. Their overall recommendation:</p>
<blockquote><p>&#8220;The upshot? Use your own code instead of a pre-fab evaluation suite. You probably have the makings of a good set of tests within your own organization&#8217;s application base&#8230;.&#8221;</p>
</blockquote>
<p>I agree with this and can honestly say we rarely, if ever, run into evaluations where customers exclusively use pre-fab test suites instead of their own code for many of the reasons outlined in their article. So, I’d say the market is (and has been for some time) embracing this recommendation wholeheartedly. So, beyond this recommendation, what else should customers consider when evaluating these tools? Here are a couple other significant areas to consider where you’ll find that, yes, all tools aren’t created equal.</p>
<ul>
<li><strong>Environment support.</strong> In particular in the embedded software space, considerations such as integration with your build environments, compiler support, ability to work with<a title="Managing Branches with Static Analysis" href="http://codeintegrity.blogspot.com/2011/01/managing-branches-in-static-analysis.html" target="_blank"> multiple software branches</a>, are all crucial considerations for a successful deployment. Not all tools have good support in these areas, but these capabilities can often make or break a deployment.</li>
<li><strong>Developer adoption.</strong> This is everything frankly, and a big part of achieving developer adoption is the quality of the analysis issues raised in the article. Obviously, a tool that generates accurate, useful results will get you well on your way to strong developer adoption, but that’s not everything. How are the defects described to developers, including the <a title="Static Analysis Traceback" href="http://www.klocwork.com/blog/2011/03/another-resource-leak/" target="_blank">trace info</a>? Do developers want to run their own <a title="Desktop Static Analysis" href="http://www.klocwork.com/products/insight/continuous-desktop-analysis/" target="_blank">desktop static analysis</a> rather than fetching results periodically from the integration build? If so, how smart is the vendor&#8217;s desktop analysis?</li>
</ul>
<p>So basically, picking a tool boils down to assessing: quality &amp; flexibility of the analysis, support for your dev environment (not just the one you&#8217;re using in the eval!), and thinking ahead to developer adoption issues. Assess these three areas thoroughly and you&#8217;ll end-up picking the tool that&#8217;s right for your needs.</p>
<p><br class="spacer_" /></p>
<ul>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.klocwork.com/blog/2011/03/all-static-analysis-tools-are-not-created-equal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How developers drive testers nuts&#8211;let&#8217;s count the ways</title>
		<link>http://www.klocwork.com/blog/2011/02/how-developers-drive-testers-nuts-lets-count-the-ways/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=how-developers-drive-testers-nuts-lets-count-the-ways</link>
		<comments>http://www.klocwork.com/blog/2011/02/how-developers-drive-testers-nuts-lets-count-the-ways/#comments</comments>
		<pubDate>Thu, 17 Feb 2011 15:08:15 +0000</pubDate>
		<dc:creator>Patti Murphy</dc:creator>
				<category><![CDATA[Embedded]]></category>
		<category><![CDATA[General Coding]]></category>
		<category><![CDATA[Software Testing]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[communication]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://www.klocwork.com/blog/?p=1239</guid>
		<description><![CDATA[At daily standup meetings, they eye each other from opposite sides of the room. Sitting on the same side of the cubicle wall is unthinkable. They’re united only by their desire to produce quality software products and their appreciation for coffee and energy drinks. What’s good to one side can be anathema to the other [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_1241" class="wp-caption aligncenter" style="width: 691px"><a href="http://www.klocwork.com/blog/wp-content/uploads/2011/02/Jonathan_wolf1.png"><img class="size-full wp-image-1241" title="Jonathan_wolf" src="http://www.klocwork.com/blog/wp-content/uploads/2011/02/Jonathan_wolf1.png" alt="" width="681" height="245" /></a><p class="wp-caption-text">The two sides of testing team lead Jonathan Patchell.</p></div>
<p>At daily standup meetings, they eye each other from opposite sides of the room. Sitting on the same side of the cubicle wall is unthinkable.</p>
<p>They’re united only by their desire to produce quality software products and their appreciation for coffee and energy drinks. What’s good to one side can be anathema to the other when it comes to code.</p>
<p>I’m talking, of course, about testing and development teams. In the interests of <del datetime="2011-02-15T20:38:05+00:00">generating more comments </del>improving dialogue between two very important functions in a software organization, our marketing director asked me to interview our testing team lead, Jonathan Patchell, about the ways in which developers drive his team nuts.</p>
<p>Patchell, a computer systems engineer, has been with Klocwork for five years and a team lead for two. He struck a fairly conciliatory tone for this interview, which sorta ruins the adversarial approach, but don’t let his diplomacy fool you. I’ve seen him suffering as the release date approaches and his demeanour changes completely.</p>
<p><strong>Here are Patchell&#8217;s top dev peeves:</strong></p>
<div id="_mcePaste">
<div id="_mcePaste">
<ol>
<li> <strong>Terse or no information about new features. </strong><br />
 It’s hard to be thorough with test cases when there’s little or no information about what the feature is, important scenarios, potential problems, and impact to existing related and unrelated systems, Patchell says. <br />
 <em>The fix:</em> &#8220;We have to ask the right questions during meetings and developers need to make clear what needs to be tested.&#8221; An information dump to a wiki page, casual conversation, or an email is always appreciated, he says. As Patchell puts it, “Both dev and testing need the feature to be well tested.&#8221;</li>
<li><strong>Changing things in the product that break automated testing. </strong><br />
 When hundreds of automated test cases fail overnight, they can cause momentary panic, requiring investigation and wasting time.<br />
 <em>The fix: </em>Let the test team know ahead of time if something will break automated testing. The sooner the team knows about these changes, the sooner they can begin updating the test scripts, Patchell says.</li>
<li> <strong>Solving problem reports without describing what was done.</strong><br />
 <em>The fix: </em>Information about how the developer fixed the problem to make expected behaviour clearer.</li>
<li><strong> Not getting a build .</strong><br />
 Once upon a time, only weekly builds were tested. Now, in keeping with the agile model, builds occur nightly, unless a critical feature breaks and then there’s no build.  Almost always there are bug fixes that need to be tested. Broken builds delay confirmation that they are in fact fixed and impede the finding of new problems.  This is especially important at the end of the release cycle.<br />
 <em>The fix: </em>Stop doing that.</li>
<li><strong>Not wanting to fix stuff.<br />
 </strong>Problem reports that are gated Would Be Nice (WBN) or Future by development indicate that testing and development aren’t aligning properly over what’s important. Sure it may mean adding a “bit of polish to make a feature look more finished,” Patchell says, “but it can go a long way towards improving usability.”<br />
 <em>The fix: </em>Fix these issues if time truly permits.</li>
<li><strong>Lack of clarity about limitations or feature done-ness.</strong><br />
 Patchell likes upfront information about what’s expected to work and what isn’t with new features, so the work can be scoped properly. With agile, partial features are often tested. A lack of this type of information can lead to frustration on both sides—developers because Problem Reports are being logged against aspects of the feature not yet implemented and testers who have little information about what’s testable and what isn’t.<br />
 <em>The fix:</em> “Everything can change in a day,” Patchell says. “I want to know what’s different with that feature today.”</li>
</ol>
</div>
<div id="_mcePaste">I guess the obvious sequel to this is how testers drive developers nuts. I see a whole series: how marketing drives sales nuts, how sales drive development nuts, and how technical writers irritate everyone. Then, I can use pictures of vampires and witches too. This could be an infinite loop of posts.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.klocwork.com/blog/2011/02/how-developers-drive-testers-nuts-lets-count-the-ways/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Dealing with a different type of backlog&#8230;your bug backlog</title>
		<link>http://www.klocwork.com/blog/2011/02/dealing-with-a-different-type-of-backlog-your-bug-backlog/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=dealing-with-a-different-type-of-backlog-your-bug-backlog</link>
		<comments>http://www.klocwork.com/blog/2011/02/dealing-with-a-different-type-of-backlog-your-bug-backlog/#comments</comments>
		<pubDate>Thu, 03 Feb 2011 14:00:53 +0000</pubDate>
		<dc:creator>Todd Landry</dc:creator>
				<category><![CDATA[General Coding]]></category>
		<category><![CDATA[Nasty Bugs]]></category>
		<category><![CDATA[Software Quality]]></category>
		<category><![CDATA[backlog]]></category>
		<category><![CDATA[bugs]]></category>
		<category><![CDATA[defect detection]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[source code analysis]]></category>
		<category><![CDATA[Static Analysis]]></category>

		<guid isPermaLink="false">http://www.klocwork.com/blog/?p=1230</guid>
		<description><![CDATA[As a product manager, the only backlog I typically care about is my product backlog. Do I have the right stories in there? Do the stories have enough detail? Are they properly prioritized? You know, that kind of stuff. Today, however, I&#8217;m going to write about a very different backlog, that is the static analysis defect [...]]]></description>
			<content:encoded><![CDATA[<p>As a product manager, the only backlog I typically care about is my <a href="http://www.mountaingoatsoftware.com/scrum/product-backlog">product backlog</a>. Do I have the right stories in there? Do the stories have enough detail? Are they properly prioritized? You know, that kind of stuff. Today, however, I&#8217;m going to write about a very different backlog, that is the <a href="http://codeintegrity.blogspot.com/2009/06/cost-of-static-analysis-backlogs.html">static analysis defect backlog</a>.</p>
<p>A static analysis backlog is created when you run a static analysis product on your code base for the very first time. Chances are pretty good that the first analysis is going to list a large number of defects, some that are without question real, and some that perhaps are not. Do not freak out! This is the first time that analysis engine has &#8216;laid eyes&#8217; upon your code and it is going to flex its muscles and show you any weaknesses it believes exist. So how does one deal with this? Here are a few strategies to help you:</p>
<p>1) Don&#8217;t <a href="http://www.urbandictionary.com/define.php?term=%22boiling%20the%20ocean%22">boil the ocean</a>. Before you even run that first analysis, don&#8217;t have a &#8220;wouldn&#8217;t it be cool&#8221; moment, where you decide to turn on every single rule the analysis engine has. There is a reason why static analysis tools haven&#8217;t turned on everything.  They are showing the most accurate and critical issues first.  So unless you have unlimited time and resources, your best bet is to start with a core set of rules and run the analysis based on that set. This core set of rules should include things such as memory/resource leaks, buffer overruns, null pointer dereferences, uninitialized variables, and so on. Add other rules once you have this core set under control.</p>
<div id="attachment_1237" class="wp-caption alignright" style="width: 310px"><a href="http://www.klocwork.com/blog/wp-content/uploads/2011/02/opossum.png"><img class="size-medium wp-image-1237" title="opossum" src="http://www.klocwork.com/blog/wp-content/uploads/2011/02/opossum-300x190.png" alt="" width="300" height="190" /></a><p class="wp-caption-text">Is your issue backlog making you cross eyed? Try these coping strategies.</p></div>
<p><br class="spacer_" /></p>
<p>2) Baseline your defects. Consider that first analysis your baseline and choose to &#8216;park&#8217; them for the time being. Chances are the product that the analysis was run on is one that has already been released to the public, and in good working order. Zero out these defects for now, and start to triage them, which leads into strategy #3.</p>
<p>3) This is going to sound pretty obvious, but when it comes to <a href="http://www.klocwork.com/products/documentation/current/Managing_your_issue_backlog_in_Klocwork_Review">managing your issue backlog</a> start looking at the most critical issues first. These are the ones that are most likely to cause a failure of some sort, so determine if these issues are real, and if so, fix them immediately. Once you&#8217;re done with the most critical issues, move to the next level of severity, and continue on that way.</p>
<p>4) Finally, tune your analysis. Any good vendor will allow you to tune your analysis. The benefits of tuning are twofold; 1) you can find code issues that would otherwise go undetected and, 2) reduce the number of issues that the engine reports incorrectly in the context of your source code. You should think of ways to give the tool more context about your code base to increase accuracy.</p>
<p>If you follow these suggestions, you&#8217;ll definitely have a better grasp of your bug backlog, and you&#8217;ll be able to execute on reducing that backlog quickly and efficiently. If you don&#8217;t, then at some point, you may feel a little like the critter pictured here.</p>
<p>If there are any other strategies you&#8217;ve tried to deal with your bug backlog, leave a comment or two. I&#8217;d love to hear about them.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.klocwork.com/blog/2011/02/dealing-with-a-different-type-of-backlog-your-bug-backlog/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Pre-Branding in Mobile</title>
		<link>http://www.klocwork.com/blog/2011/02/pre-branding-in-mobile/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=pre-branding-in-mobile</link>
		<comments>http://www.klocwork.com/blog/2011/02/pre-branding-in-mobile/#comments</comments>
		<pubDate>Wed, 02 Feb 2011 15:08:38 +0000</pubDate>
		<dc:creator>Vahid Jozi</dc:creator>
				<category><![CDATA[Android Development]]></category>
		<category><![CDATA[General Coding]]></category>
		<category><![CDATA[J2ME development]]></category>
		<category><![CDATA[Static Analysis]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Branding]]></category>
		<category><![CDATA[J2ME]]></category>
		<category><![CDATA[Mobile development]]></category>
		<category><![CDATA[software development]]></category>

		<guid isPermaLink="false">http://www.klocwork.com/blog/?p=1235</guid>
		<description><![CDATA[The year 2008 was a key year for mobile applications. In that year, Apple released its iOS SDK in March and launched the App Store with the release of iOS 2.0 in July. Let’s call it the start of the Mobile Gold Rush. Now in this mobile gold rush, there are hundreds of thousands of [...]]]></description>
			<content:encoded><![CDATA[<p>The year 2008 was a key year for mobile applications. In that year, Apple released its <a href="http://en.wikipedia.org/wiki/IOS_%28Apple%29">iOS </a>SDK in March and launched the App Store with the release of iOS 2.0 in July. Let’s call it the start of the Mobile Gold Rush. Now in this mobile gold rush, there are hundreds of thousands of applications and amongst them many are bound to have the same idea and the same purpose. How does one app shine, while others won’t even get visits to their description pages?</p>
<p>Let me tell you about an experience I had. I used to own a smartphone running <a href="http://en.wikipedia.org/wiki/Windows_Mobile#Windows_Mobile_6.1">Windows Mobile 6.1</a>. I loved the phone when I only used it as a phone, but simply hated it when it came to applications. There were thousands of issues I could have pointed out. The end result is that I am not going to purchase another Windows smartphone. Do you see where I am going with this?</p>
<p>Consumers always rely on their memory associations, whether conscious or<a href="http://www.klocwork.com/blog/wp-content/uploads/2011/02/Overcome-Frustration.jpg"><img class="alignright size-medium wp-image-1236" title="Overcome-Frustration" src="http://www.klocwork.com/blog/wp-content/uploads/2011/02/Overcome-Frustration-300x201.jpg" alt="" width="233" height="157" /></a> unconscious, when it comes to purchasing new products. I would say almost everyone would not go back to using a product they’ve had a bad experience with when there are so many other options around. This goes the same for mobile application developers and development firms. I have uninstalled so many applications from my Nexus One within the first few minutes of their lives. It wasn’t because of the features they didn’t have or how horrid the GUI was. The main reason was they weren’t working the way they were expected to. Some users even kiss applications goodbye altogether according to this <a href="http://www.tuaw.com/2010/11/11/bad-app-experiences-mark-the-whole-platform-according-to-survey/">survey</a> based on such experiences. Let me put it this way:</p>
<p><br class="spacer_" /></p>
<p><strong>“If your code is not flawless, you will lose your market share and never be able to recover it.” </strong></p>
<p><br class="spacer_" /></p>
<p>Application developers strive to develop new features giving them the competitive advantage or as my friend and mentor, <a href="http://www.dramatispersonae.org/ShortFormResumeParsed.htm">Bruce Firestone</a>, calls it “<a href="http://www.dramatispersonae.org/PixieDustResults.htm">Pixie Dust</a>”. This is completely the right thing to do; however, they should focus more on their apps’ perfect functional execution. Having a limited number of features that work exactly as the user expects is better than having more numerous, but buggy features. I know it sounds like a no brainer, but the success of a small number of apps as opposed to the thousand other ones doing the same thing should serve as sufficient evidence that it is easier said than done.</p>
<p>Buggy code hurts the application and the developing company’s brand. Making sure your code is near perfect would be a strategy I would like to call the Pre-Branding Protection Plan. With the abundance of competitors in the mobile gold rush, bad apps will almost permanently prevent market recovery and destroy sales.</p>
<p>One method I use to make sure my brand would be protected is using J2ME static analysis tools. There are various paid and free tools, but I am very happy with the <a href="http://www.klocwork.com/products/solo">Klocwork Solo</a>, which is geared for J2ME developers. I had never used such tools and only started using them when I joined the company. I don’t know what I would do without them now. In my next posts, I will discuss some of the issues the tool caught that improved my productivity and the efficiency of my code.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.klocwork.com/blog/2011/02/pre-branding-in-mobile/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

