<?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>Software Integrity Blog</title>
	<atom:link href="http://blog.coverity.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.coverity.com</link>
	<description>All about software integrity</description>
	<lastBuildDate>Thu, 02 Sep 2010 14:31:42 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Addressing the threat of security vulnerabilities in network systems</title>
		<link>http://blog.coverity.com/uncategorized/addressing-the-threat-of-security-vulnerabilities-in-network-systems/</link>
		<comments>http://blog.coverity.com/uncategorized/addressing-the-threat-of-security-vulnerabilities-in-network-systems/#comments</comments>
		<pubDate>Thu, 02 Sep 2010 14:31:42 +0000</pubDate>
		<dc:creator>Rutul Dave</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[telcommunications]]></category>

		<guid isPermaLink="false">http://blog.coverity.com/?p=115</guid>
		<description><![CDATA[In a previous post, I discussed security in networking systems. We looked at the possible vulnerabilities that a device on the network is exposed to and discussed how these exploits are possible due to some of the basic features of C and C++, the languages of choice in building such systems.
Take stake overflows as an [...]]]></description>
			<content:encoded><![CDATA[<p>In a <a href="http://blog.coverity.com/security_category/identifying-security-vulnerabilities-in-network-systems-2/" target="_blank">previous post</a>, I discussed security in networking systems. We looked at the possible vulnerabilities that a device on the network is exposed to and discussed how these exploits are possible due to some of the basic features of C and C++, the languages of choice in building such systems.</p>
<p>Take stake overflows as an example. Harmful as they are in potentially crashing a system, an equally severe issue is that they lay the foundation for a security vulnerability. By exploiting a stack overflow, an intruder can execute instructions in the software that are possible only after an authentication.</p>
<p>The following is a simple C program that simulates the authentication logic of a device.</p>
<p><span style="color: blue;">#define</span> PASSWORD <span style="color: #a31545;">&#8220;secret&#8221;</span></p>
<p>main (<span style="color: blue;">int</span> argc, <span style="color: blue;">char</span> **argv)<br />
{<br />
&nbsp;&nbsp;<span style="color: blue;">if</span> (1 == password(argv[1]))<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;printf(<span style="color: #a31545;">&#8220;Congratulations, right password\n&#8221;</span>);<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: green">/*<br />
&nbsp;&nbsp;&nbsp;&nbsp;* User authenticaed, do work here<br />
&nbsp;&nbsp;&nbsp;&nbsp;*/</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">return</span>;<br />
&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;printf(<span style="color: #a31545;">&#8220;Access Denied, wrong password!\n&#8221;</span>);<br />
&nbsp;&nbsp;<span style="color: green">/*<br />
&nbsp;&nbsp;* User login unsuccessful!<br />
&nbsp;&nbsp;* Exit<br />
&nbsp;&nbsp;*/</span><br />
}<br />
</p>
<p>The password() function is as follows:</p>
<p><span style="color: blue;">int</span> password (<span style="color: blue;">char</span> *buf)<br />
{<br />
&nbsp;&nbsp;<span style="color: blue;">char</span> var[16];<br />
&nbsp;&nbsp;strcpy(var,buf);<br />
&nbsp;&nbsp;<span style="color: blue;">if</span> (password_compare(var, PASSWORD))<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">return</span> 1;</p>
<p>&nbsp;&nbsp;<span style="color: blue;">return</span> 0;<br />
}</p>
<p>To exploit the potential overflow in the 16-character &#8216;var[]&#8216; buffer, on a 32-bit system, one can simply pass 20 characters followed by the address of any instruction in the program. This overflows the stack, bypasses the authentication check and gives the attacker access.</p>
<p>If a similar piece of code was part of the authentication logic for a command line interface (CLI), your network system is at a very high risk of being severely compromised.</p>
<p>Fortunately, as developers, without having to be security experts, we have ways to mitigate such risks. Automated code analysis can allow you to take the guesswork out of finding security problems in code while you focus on adding features and functionality. Defects such as resource leaks, uninitialized variables, and memory management problems can all serve as a basis for eventual vulnerabilities such as unauthorized access, arbitrary code execution and denial of service. Automated analysis using static analysis checkers that find the resource leaks, uninitialized variables, buffer overflows and much more, should be a part of the development process if we care about security within the telecommunications and networking systems we build.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.coverity.com/uncategorized/addressing-the-threat-of-security-vulnerabilities-in-network-systems/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The business case of sound software development.</title>
		<link>http://blog.coverity.com/development/the-business-case-of-sound-software-development/</link>
		<comments>http://blog.coverity.com/development/the-business-case-of-sound-software-development/#comments</comments>
		<pubDate>Wed, 25 Aug 2010 14:35:47 +0000</pubDate>
		<dc:creator>Rutul Dave</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[software development]]></category>

		<guid isPermaLink="false">http://blog.coverity.com/?p=111</guid>
		<description><![CDATA[&#8220;I call it my billion-dollar mistake.&#8221; &#8211; 2009, C.A.R. Hoare, inventor of nullable references.
Recently Matt Hayward from Coverity and Todd Morley, Product Architect at Pitney Bowes, hosted a webinar discussing the business value of software quality.  Whether you realize it or not, common programming mistakes &#8211; errors, bugs, defects, whatever you call it &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;<i>I call it my billion-dollar mistake.</i>&#8221; &ndash; 2009, C.A.R. Hoare, inventor of nullable references.</p>
<p>Recently Matt Hayward from Coverity and Todd Morley, Product Architect at Pitney Bowes, hosted a <a href="http://softwareintegrity.coverity.com/Aug2010-ROIWebinar.html" target="_blank">webinar</a> discussing the business value of software quality.  Whether you realize it or not, common programming mistakes &ndash; errors, bugs, defects, whatever you call it &ndash; have a dollar-value, a business value associated with them that cannot be ignored.</p>
<p>There is an expectation of greater reliability of programs we create and the languages in which they are expressed. The languages have evolved to a certain extent, with Java and more recently C#. However, there are enough elements in all languages that are potential billion dollar mistakes. It could be the buffer overflow, the memory corruption, the resource leak or something that might on surface is just a simple uninitialized variable.</p>
<p>When we start thinking about the impact a single software glitch might have on the mobile phone that the software runs on, or the embedded system that is controlled by the software, or on that networking device that manages data across networks, we start to see how one defect can translate to a high cost for a business, both in dollars and public image.</p>
<p>Take the case of Motorola and Nextel Communications. A software glitch in Motorola cell phones left millions of Nextel customers without a safety feature that gave 911 operators their precise location.  The mishap caused Nextel to <a href="http://www.fiercewireless.com/story/sprint-alltel-usc-fined-missed-e911-deadline/2007-08-31" target="_blank">miss</a> a year-end 2005 deadline, set by the Federal Communications Commission (FCC), to equip 95% of its phones with technology that lets emergency workers pinpoint the location of customers who make 911 calls. More importantly, the business failure as a result of this glitch didn&#8217;t help Motorola&#8217;s effort to mend relationship with Nextel and was a big blow to Motorola&#8217;s effort to differentiate its product from their competitors.</p>
<p>Fortunately, there are solutions and technology that help. The key is <a href="http://www.coverity.com/products/static-analysis.html" target="_blank">static analysis</a>, which needs to be integrated into existing development process and proactively utilized as part of the development cycle in order to prevent these potential billion-dollar defects.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.coverity.com/development/the-business-case-of-sound-software-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fixing Software Security</title>
		<link>http://blog.coverity.com/uncategorized/fixing-software-security/</link>
		<comments>http://blog.coverity.com/uncategorized/fixing-software-security/#comments</comments>
		<pubDate>Fri, 20 Aug 2010 14:24:15 +0000</pubDate>
		<dc:creator>Andy Chou</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[armorize]]></category>
		<category><![CDATA[software integrity]]></category>
		<category><![CDATA[software security]]></category>

		<guid isPermaLink="false">http://blog.coverity.com/?p=107</guid>
		<description><![CDATA[What does HP&#8217;s acquisition of Fortify mean for the static analysis security testing market?
First, it&#8217;s high time there was real competition in this space.  Coverity is now the largest standalone static analysis company, and we are best of breed in every sense: product, services, and ability to execute and deliver to even the most [...]]]></description>
			<content:encoded><![CDATA[<p>What does HP&#8217;s acquisition of Fortify mean for the static analysis security testing market?</p>
<p>First, it&#8217;s high time there was real competition in this space.  Coverity is now the largest standalone static analysis company, and we are best of breed in every sense: product, services, and ability to execute and deliver to even the most demanding customers.  This news should open up an opportunity for customers to reconsider what they should expect of a static analysis security vendor.</p>
<p>Second, I predict this will be the end of the period when security teams try to use tools to hammer on development to fix issues.  This purchase shows security for what it is &ndash; a step that will be integrated into the application lifecycle process.  Fortunately, this is a perspective that Coverity understands.  We know what it takes to get defects actually <i>fixed</i>, not just <i>found</i>.  We also have a vendor-neutral approach to integration with third party tools, and that matters in the heterogeneous environments most enterprises have.</p>
<p>Coverity has always been dedicated to providing the most accurate and actionable static analysis products on the market.  Developers must end up adopting static analysis tools, because only developers can fix the software.  This fact won&#8217;t change no matter how many tools are marketed and sold to security teams.</p>
<p>That&#8217;s why we <a href="http://www.coverity.com/armorize/" target="_blank">partnered</a> with Armorize on web application security.  Armorize shares this vision of getting security into development in a natural way.  Combined with Coverity&#8217;s static analysis for quality issues, we bring the market something it really needs: software security analysis that actually works for developers.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.coverity.com/uncategorized/fixing-software-security/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Coverity Armorize Partnership</title>
		<link>http://blog.coverity.com/news/coverity-armorize-partnership/</link>
		<comments>http://blog.coverity.com/news/coverity-armorize-partnership/#comments</comments>
		<pubDate>Tue, 13 Jul 2010 10:00:27 +0000</pubDate>
		<dc:creator>Andy Chou</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[armorize]]></category>
		<category><![CDATA[coverity]]></category>
		<category><![CDATA[integration]]></category>
		<category><![CDATA[secure development]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[software integrity]]></category>

		<guid isPermaLink="false">http://blog.coverity.com/?p=102</guid>
		<description><![CDATA[We’re really excited to announce our new partnership with Armorize.  The reception by customers, analysts, and industry experts has been very positive, and everyone seems to see the problems that security has had in not only finding issues, but also getting them fixed. This is about making security easy for developers, as easy as [...]]]></description>
			<content:encoded><![CDATA[<p>We’re really excited to announce our new partnership with Armorize.  The reception by customers, analysts, and industry experts has been very positive, and everyone seems to see the problems that security has had in not only finding issues, but also getting them fixed. This is about making security easy for developers, as easy as dealing with defects that they already know.</p>
<p>More on this later – but for now, read more in this <a href="http://www.coverity.com/html/press/coverity-and-armorize-to-unify-quality-and-security.html">press release</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.coverity.com/news/coverity-armorize-partnership/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Identifying security vulnerabilities in network systems</title>
		<link>http://blog.coverity.com/security_category/identifying-security-vulnerabilities-in-network-systems-2/</link>
		<comments>http://blog.coverity.com/security_category/identifying-security-vulnerabilities-in-network-systems-2/#comments</comments>
		<pubDate>Mon, 21 Jun 2010 13:41:14 +0000</pubDate>
		<dc:creator>Rutul Dave</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[telecommunications]]></category>

		<guid isPermaLink="false">http://blog.coverity.com/?p=92</guid>
		<description><![CDATA[In a recent discussion with VDC analyst Christopher Rommel, we covered challenges in software for telecommunications and networking industry and the effective solutions. An area that often gets overlooked when discussing networking system software issues is security vulnerabilities. This probably has to do with comfort in knowing that the various layers of the network stack [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_96" class="wp-caption aligncenter" style="width: 560px"><a href="http://blog.coverity.com/wp-content/uploads/2010/06/michaud.png"><img src="http://blog.coverity.com/wp-content/uploads/2010/06/michaud.gif" alt="Errors, Defects, and Vulnerabilities" title="michaud" width="550" height="288" class="size-full wp-image-96" /></a><p class="wp-caption-text">Source: http://www.osbr.ca/ojs/index.php/osbr/article/view/610/571</p></div>
<p>In a recent discussion with VDC analyst Christopher Rommel, we covered <a href="https://event.on24.com/eventRegistration/EventLobbyServlet?target=registration.jsp&#038;eventid=196877&#038;sessionid=1&#038;key=7CEFE762B267336CA4A126392238B6A3&#038;partnerref=coverityarchive1&#038;sourcepage=register" target="_blank">challenges in software for telecommunications and networking industry and the effective solutions</a>. An area that often gets overlooked when discussing networking system software issues is security vulnerabilities. This probably has to do with comfort in knowing that the various <a href="http://en.wikipedia.org/wiki/OSI_model" target="_blank">layers of the network stack</a> present barriers to the intruder. That might be a misguided sense of safety.</p>
<p>To start off, an intruder needs an access point, a connection end point that is reachable over the network. Most telecom/networking devices have a Command Line Interface (CLI) access through a telnet port or a secured SSH port. Very often, these are open ports that are reachable through an IP address that is not behind a VPN or is accessible without a secure tunnel. Even devices that are within the corporate network, such as load balancers, firewalls and WAN optimization appliances, have a reachable IP address that SNMP management clients can get to.</p>
<p>Once a connection point is identified, the exploit is usually related to a stack buffer overflow. By exploiting a buffer overflow in the authentication logic for example, an intruder can execute program instructions without a valid login. Through malicious user inputs and CLI commands, it is possible to cause a stack buffer overflow that results in root access on the device. At the very least, by exploiting a buffer overflow and crashing the system, one can cause a denial of service attack.</p>
<p>One other area of weakness is in use of temporary files on the system to store critical data. If temporary files are used to store logins, a hacker can exploit that weakness to get to and misconfigure the device. The magnitude of such an attack is potentially very large. For example, one can configure a router such that all data-plane traffic (data that the application is communicating between the server and the client application) is routed to insecure and hacker-compromised devices. With the shift to the Software-as-a-Service model for business-critical applications, the integrity of data going through the networking and telecommunications devices is even more essential.</p>
<p>The challenge in preventing such vulnerabilities in C/C++, the languages of choice for most networking systems, is due to some of the language&#8217;s features. As discussed in this <a href="http://www.osbr.ca/ojs/index.php/osbr/article/view/610/571" target="_blank">article on language insecurity in Open Source Business Resource</a>, these are:</p>
<ul>
<li>Lack of type safety
<ul>
<li>Execution of C/C++ programs does not stop as a result of an error making unauthorized access possible.</li>
</ul>
</li>
<li>&#8221;	Pointer arithmetic
<ul>
<li>o	Programmers can change the value of a pointer, and thus read and write anywhere in the process memory space making arbitrary execution of code possible.</li>
</ul>
</li>
<li>&#8221;	Static buffers
<ul>
<li>o	Such buffers do not grow and the access to buffers is not checked for bounds resulting in overflows and overwrites of memory regions.</li>
</ul>
</li>
<li>&#8221;	Lack of robust string type
<ul>
<li>o	C has no native type for character strings, meaning static buffers with potential overflow problems are used instead. In C++, programs can use a String type, though the usage is not very often.</li>
</ul>
</li>
</ul>
<p>An <a href="http://www.coverity.com/services/integrity-rating.html" target="_blank">audit of software</a> at various layers of the network stack is essential to ensure that devices and systems handling enormous amounts of data are not compromised at any layer.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.coverity.com/security_category/identifying-security-vulnerabilities-in-network-systems-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>When &#8216;no news is good news&#8217; is no longer the case</title>
		<link>http://blog.coverity.com/uncategorized/when-no-news-is-good-news-is-no-longer-the-case/</link>
		<comments>http://blog.coverity.com/uncategorized/when-no-news-is-good-news-is-no-longer-the-case/#comments</comments>
		<pubDate>Tue, 11 May 2010 14:31:51 +0000</pubDate>
		<dc:creator>Rutul Dave</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[software integrity]]></category>
		<category><![CDATA[telecommunications]]></category>

		<guid isPermaLink="false">http://blog.coverity.com/?p=87</guid>
		<description><![CDATA[If a tree falls in an empty forest, does it make a sound?
Telecommunications and networking devices are designed with a strong emphasis on redundancy. On top of that, the network architectures created using these systems are designed with multiple paths and redundant links.
This has an interesting implication on the software running on these systems. When [...]]]></description>
			<content:encoded><![CDATA[<p>If a tree falls in an empty forest, does it make a sound?</p>
<p>Telecommunications and networking devices are designed with a strong emphasis on redundancy. On top of that, the network architectures created using these systems are designed with multiple paths and redundant links.</p>
<p>This has an interesting implication on the software running on these systems. When software fails due to defects in code, it doesn&#8217;t make the news. At least it doesn&#8217;t make the news like the latest <a href="http://news.cnet.com/8301-27080_3-10435232-245.html" target="_blank">security breach in a browser</a> or <a href="http://news.discovery.com/tech/toyota-recall-software-code.html">software problem in a car</a>.</p>
<p>However, can no news of software failures be assumed to be good news? Dig a bit deeper into the system logs and you will get some answers.</p>
<p>The major issue is that network architects are forced to design by taking failures into account. This not only increases the complexity of the networks, but financially this means higher costs for equipment, management, maintenance and services.</p>
<p>The systems are designed to minimize downtime through two basic approaches:</p>
<ul>
<li>Recoverable systems &ndash; No human intervention, but downtime and outage till the problem is rectified.</li>
<li>Highly available systems &ndash; Keep running even during failures with hot backups.</li>
</ul>
<p>For recoverable systems, the main issue will be the downtime with the impact being that the systems are unable to meet the 99,999% (&#8220;five nines&#8221;) high availability SLAs. The highly available systems on the other hand require replicating information which is directly proportional to cost and complexity.</p>
<p>The best solution is then to ensure the integrity of software that runs on these systems. Ensure that code is defect-free; avoid crash causing errors such as illegal memory accesses, null pointer dereferences, performance degrading problems such as memory leaks and prevent security vulnerabilities through buffer overflows and insecure handling of data.</p>
<p>We recently discussed the value of <a href="https://event.on24.com/eventRegistration/EventLobbyServlet?target=registration.jsp&amp;eventid=196877&amp;sessionid=1&amp;key=7CEFE762B267336CA4A126392238B6A3&amp;partnerref=coverityarchive1&amp;sourcepage=register" target="_blank">effective software analysis for telecommunications systems</a> based on the current development trends in complex telecommunications and networking systems.</p>
<p>For software failures in telecommunications systems, no news is not good news; it probably just means that sooner or later, <a href="http://www.v3.co.uk/vnunet/news/2145336/software-bug-crashes-japanese" target="_blank">it will be news</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.coverity.com/uncategorized/when-no-news-is-good-news-is-no-longer-the-case/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>These are exciting times to be in software development</title>
		<link>http://blog.coverity.com/development/these-are-exciting-times-to-be-in-software-development/</link>
		<comments>http://blog.coverity.com/development/these-are-exciting-times-to-be-in-software-development/#comments</comments>
		<pubDate>Fri, 09 Apr 2010 22:42:50 +0000</pubDate>
		<dc:creator>Rutul Dave</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Products]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[software integrity]]></category>

		<guid isPermaLink="false">http://blog.coverity.com/?p=82</guid>
		<description><![CDATA[Tom
Back in 2001, I worked at a telecom company in the routing software group. Besides the fact that I was writing code that would be running in systems in the Internet backbone, the most enjoyable part were my lunches with Tom where he shared war stories from his illustrious career. Most of Tom&#8217;s stories began [...]]]></description>
			<content:encoded><![CDATA[<p><b>Tom</b></p>
<p>Back in 2001, I worked at a telecom company in the routing software group. Besides the fact that I was writing code that would be running in systems in the Internet backbone, the most enjoyable part were my lunches with Tom where he shared war stories from his illustrious career. Most of Tom&#8217;s stories began with, &#8220;<i>Back in those days&#8230;</i>&#8220;.</p>
<p>Tom was a veteran software developer. More importantly though, Tom was the best software developer I have worked with. What made him best was not just his knowledge and skills, but also a knack for   quickly adopting and integrating the latest software development techniques into his work. His ability to adopt and integrate new ideas and methods has always allowed him to be efficient and excel at what he does.</p>
<p><b>Evolution</b></p>
<p>We unleashed <a href="http://www.coverity.com/products/" target="_blank">Coverity 5</a> this week. When discussing the salient features of this version of the product with a potential customer, I thought of Tom and the evolution of software development techniques.</p>
<p>As software professionals, our challenges are vast. Delivering stable, scalable, high-performing mission-critical products under ever-shrinking schedules is what we need to do day-in and day-out.</p>
<p>On our side, fortunately, is the evolution of software development tools and technologies. We are not in the stone age of software development. Single file text editors have evolved into feature-rich IDEs. Simple functional programming has developed into object-oriented methodologies. Templates in the C++ standard library have made it unnecessary to rewrite functions and classes for every data type in your code.</p>
<p>The Coverity 5 solution suite is an example of the evolution in the technology to achieve software integrity. Features such as deep analysis that finds critical defects, intuitive code navigation, and project impact mapping, allows developers to easily find and understand defects and their impact to all projects and products sharing the same code. Development managers now have a way to understand the business context for prioritization and remediation of defects based on impact to the business.</p>
<p>These are features that allow us to be efficient in what we do well &#8212; write software that adds functionality, design and code algorithms that are optimal and deliver stable, scalable, high-performing mission-critical products. Tom would adopt this in a heartbeat.</p>
<p><b>Exciting Times</b></p>
<p>As we face new, unique and large challenges in software development, we&#8217;re also very lucky that there are new and emerging technologies to lean on.  Quality, simplicity and ease-of-use are features that our customers expected us to deliver. We demand the same from the technologies we adopt. These are indeed exciting times to be in software development.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.coverity.com/development/these-are-exciting-times-to-be-in-software-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Do bugs matter?  We’re going to find out.</title>
		<link>http://blog.coverity.com/news/do-bugs-matter-we%e2%80%99re-going-to-find-out/</link>
		<comments>http://blog.coverity.com/news/do-bugs-matter-we%e2%80%99re-going-to-find-out/#comments</comments>
		<pubDate>Mon, 22 Mar 2010 20:14:09 +0000</pubDate>
		<dc:creator>Andy Chou</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[software bugs]]></category>
		<category><![CDATA[software integrity]]></category>

		<guid isPermaLink="false">http://blog.coverity.com/?p=77</guid>
		<description><![CDATA[Recently one of our sales engineers came back from a customer and relayed a familiar story.  The engineers are using the product and fixing some bugs but not as much as they should.  Our champion explains that there is just &#8220;not enough glory&#8221; in fixing defects.  In most places there is far [...]]]></description>
			<content:encoded><![CDATA[<p>Recently one of our sales engineers came back from a customer and relayed a familiar story.  The engineers are using the product and fixing some bugs but not as much as they should.  Our champion explains that there is just &#8220;not enough glory&#8221; in fixing defects.  In most places there is far more glory in fixing a problem that&#8217;s occurred in production than there is in preventing it.  The saddest part was that this was a company that has high standards in most of its activities.</p>
<p>Why does this happen?  The pain caused by software defects are mostly outside of the development organization &ndash; downstream there is QA, docs, support people, field representatives, and much more.  When something goes wrong, these people form a human exception handling network that deals with the problem at great expense.  But the cost to the development organization may be nothing more than reproducing and fixing the defect &ndash; expensive to be sure, but nothing compared with the cost of throwing an exception to the &#8220;flesh and bone&#8221; catch clause.</p>
<p>Worse, defects can damage the reputation of the product.  Customers lose trust.  Risks are introduced to the business that can go undetected for months or even years.  The problems may be hard to stamp out completely, leading to strained customer relationships.</p>
<p>Part of the problem is that defects aren&#8217;t visible when software is delivered. Business leaders need to know the answers to two critical questions before the product is released:</p>
<ul>
<li>&#8220;Are there safety-critical software defects shipping in my products?&#8221;</li>
<li>&#8220;Are there safety-critical software defects in my supplier&#8217;s products?&#8221;</li>
</ul>
<p>This is one of the reasons we&#8217;ve launched the <a href="http://www.coverity.com/services/coverity-software-integrity-audit.html">Coverity Integrity Report</a>.  It provides answers to those who care about the downstream costs of buggy software and the risks to the business that they can cause.  The report shines a spotlight on the defects in software, how software compares with industry averages from open source code, and what the implications the defects might have on the application or system.  In short, bugs can no longer hide.</p>
<p>Once the spotlight is put on bugs, will they matter?  We&#8217;re going to find out.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.coverity.com/news/do-bugs-matter-we%e2%80%99re-going-to-find-out/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Open source and the auto software assembly line</title>
		<link>http://blog.coverity.com/news/open-source-and-the-auto-software-assembly-line/</link>
		<comments>http://blog.coverity.com/news/open-source-and-the-auto-software-assembly-line/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 15:38:47 +0000</pubDate>
		<dc:creator>Rutul Dave</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[automotive]]></category>
		<category><![CDATA[dynamic analysis]]></category>
		<category><![CDATA[static analysis]]></category>

		<guid isPermaLink="false">http://blog.coverity.com/?p=73</guid>
		<description><![CDATA[There&#8217;s been a lot of coverage about the Toyota recalls and the role of software in automobiles. One of the most interesting headlines, in my opinion, was this one from Techdirt, which echoes a call from the Software Freedom Law Center for automakers like Toyota to open source their software code.
These both demonstrate a lack [...]]]></description>
			<content:encoded><![CDATA[<p>There&#8217;s been a lot of coverage about the Toyota recalls and the role of software in automobiles. One of the most interesting headlines, in my opinion, was this one from <a href="http://www.techdirt.com/articles/20100217/1208458199.shtml">Techdirt</a>, which echoes a <a href="http://www.softwarefreedom.org/blog/2010/feb/19/toyota-recall-and-case-open-auditable-source-code/">call</a> from the Software Freedom Law Center for automakers like Toyota to open source their software code.</p>
<p>These both demonstrate a lack of understanding with the automotive software assembly line. Likewise, this <a href="http://news.cnet.com/8301-13924_3-10454331-64.html">CNET</a> article cites a vehicle tester at Edmunds.com who equates auto software to simple calculators. Again, not an engineer or programmer with a clear understanding of what goes on under the hood.</p>
<p>Two things stand out here:</p>
<p>First, auto software is not a standalone package. It is comprised of up to <a href="http://spectrum.ieee.org/green-tech/advanced-cars/this-car-runs-on-code">100 million lines of code</a> that come from multiple suppliers. In the Toyota case, it&#8217;s not clear whether the faulty brake software in the Prius was coded by Toyota engineers or by a supplier down the chain. And even if each individual code base was 100% bug free, there&#8217;s no guarantee that when the different pieces are glued together into a vehicle, there won&#8217;t be &#8216;glitches.&#8217; To borrow from the Edmunds.com tester, it&#8217;s more accurate to say that auto software is more like different calculators duct-taped together.</p>
<p>Secondly, the Software Freedom Law Center&#8217;s call for Toyota to open source its code isn&#8217;t a realistic step. By its name, I get that the center promotes free software, and as such, are proponents of Linus&#8217; Law that with enough eyeballs, code is better and more secure. Logically, this makes sense. But just how many eyeballs are enough? At a rough estimate, 50 lines of code are equal to one printed page. That means 100 million lines of code runs to about 2,000,000 pages.</p>
<p>The ingenuity and excellence of open source software development has created a wealth of excellent software. But as detailed in the <a href="http://scan.coverity.com/">2009 Scan Open Source Report</a>, there is a lot more to gain by using static analysis to improve the quality, security and integrity of software. Shawn Herman, a Microsoft programmer, <a href="http://blogs.msdn.com/shawnhernan/archive/2010/02/13/microsoft-s-many-eyeballs-and-the-security-development-lifecycle.aspx">wrote a very thoughtful piece</a> on this subject looking at where human code review (eyeballs) stops and where automated analysis (<a href="http://coverity.com/products/static-analysis.html">static analysis</a> and <a href="http://coverity.com/products/dynamic-analysis.html">dynamic analysis</a>) picks up. He explains that &#8220;a static analysis tool looks at source code the same way a compiler does, and so it has much more knowledge of what will happen than a human does.&#8221;</p>
<p>Instead of just open sourcing the software, the real effort needs to focus on <a href="http://blog.coverity.com/news/digital-deming-for-the-new-software-assembly-line/">Deming-like quality control</a> for the automotive software assembly line. At a minimum, we believe that automated analysis needs to be part of this new software assembly line, preferably as early in the development process as possible. Right now vehicles are rolling consumer electronics devices but we expect that they will go through the same production maturity that we&#8217;ve seen in avionics and will be developed under mandated safety quality procedures.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.coverity.com/news/open-source-and-the-auto-software-assembly-line/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C/C++&#8217;s enduring popularity</title>
		<link>http://blog.coverity.com/development/ccs-enduring-popularity/</link>
		<comments>http://blog.coverity.com/development/ccs-enduring-popularity/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 16:47:12 +0000</pubDate>
		<dc:creator>Andy Chou</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[embedded]]></category>
		<category><![CDATA[legacy]]></category>
		<category><![CDATA[ocaml]]></category>

		<guid isPermaLink="false">http://blog.coverity.com/?p=51</guid>
		<description><![CDATA[Last time I promised some more thoughts on the paper that we recently published in CACM.  One area that some readers noticed is that the article spends a lot of time on issues that are specific to C/C++.  Let&#8217;s dive into a question I sometimes hear: why don&#8217;t companies just write software in [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.coverity.com/development/a-few-billion-lines-of-code-later/">Last time</a> I promised some more thoughts on the <a href="http://cacm.acm.org/magazines/2010/2/69354-a-few-billion-lines-of-code-later/fulltext">paper</a> that we recently published in CACM.  One area that some readers noticed is that the article spends a lot of time on issues that are specific to C/C++.  Let&#8217;s dive into a question I sometimes hear: why don&#8217;t companies just write software in a better language where these problems can&#8217;t happen?</p>
<p>Part of the answer is many companies have already switched.  But many more have stuck with C/C++ (see the <a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html">Tiobe data on language popularity for one measure</a>).  A few of the many reasons from observing our customers are:</p>
<ul>
<li><b>Legacy code</b>.  Consider the ton of code written in C/C++ out there.  <a href="http://scan.coverity.com">Coverity Scan</a> analyzes over 300 of the most popular open source projects written in C/C++, including the Linux kernel and Firefox browser.  There are about 60 million lines of code (MLOC) in these projects combined.  In the commercial world, some of our larger customers have over 30 MLOC in a single project.  To give you some perspective, 1 MLOC amounts to a stack of printed paper about 6 feet high.  There would need to be a really, really good reason to consider rewriting anything of that magnitude.</li>
<li><b>Risk aversion</b>.  Code &#8220;hardens&#8221; as it ages and enters repeated production use.  Large code bases are tested over a period of years, if not decades.  The reality is that all production software, no matter what language it&#8217;s written in, needs to be tested for functionality, stability, and performance reasons.  Using a great language might help with stability to some degree, but rarely functionality or performance.  Rewriting a (sub)system reaps certain benefits, but also introduces risks to existing functionality, stability, and performance.  Sometimes, the risk-reward trade-off is worthwhile, but often it is not.</li>
<li><b>Embedded software</b>.  Think mobile phones, cable set-top boxes, internet routers, wireless base stations, firewalls, network-attached storage systems, weapons control systems, and medical devices.  They aren&#8217;t running on commodity PC hardware, processors, and operating systems.  The hardware is often chosen for power-performance and cost reasons, and not infrequently there are large chunks of kernel-mode code.  Sometimes these systems start from the Linux or FreeBSD kernel, or perhaps a commercial offering like Wind River VxWorks.  Specialized hardware devices are common in this world, and low-level direct memory access is frequently necessary.  Much of this software is written in C/C++.</li>
<li><b>Performance and control</b>.  C/C++ compilers generally produce very efficient object code.  Still, the choice of algorithm, and careful tuning and performance evaluation can trump language choice.  However, in my experience, C/C++ provides a degree of flexibility and control that can sometimes help in optimizing the performance of a system in a way that many other languages don&#8217;t allow.  Of course, the same flexibility and control can lead to bugs that are hard to diagnose.</li>
</ul>
<p>When I was a researcher back at Stanford, my favorite programming language was <a href="http://caml.inria.fr/ocaml/index.en.html">O&#8217;Caml</a>.  I felt wonderfully productive writing code in a language that had type safety, type inference, pattern matching, and purely functional data structures (still a novelty at the time). We initially started off writing most of our core functionality in O&#8217;Caml, but eventually,  had to abandon that implementation in favor of one written in C++.  It was just too hard to hire programmers who knew O&#8217;Caml, and we also found that certain features that helped eliminate defects also reduced our control of the program&#8217;s performance, scalability behavior, and flexibility.  Writing in C++ was often more verbose and less elegant, but it was possible to get to the result needed for the business.</p>
<p>At the end of the day, the features of a programming language are only one aspect of what makes it suitable or not for a particular job.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.coverity.com/development/ccs-enduring-popularity/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
