<?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>Gurock Software Blog &#187; Software Quality</title>
	<atom:link href="http://blog.gurock.com/postings/category/software-quality/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.gurock.com</link>
	<description>Our products, programming &#38; business.</description>
	<lastBuildDate>Thu, 22 Jul 2010 14:01:41 +0000</lastBuildDate>
	
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Optimizing Memory Consumption with String Pools</title>
		<link>http://blog.gurock.com/postings/optimizing-memory-consumption-with-string-pools/450/</link>
		<comments>http://blog.gurock.com/postings/optimizing-memory-consumption-with-string-pools/450/#comments</comments>
		<pubDate>Thu, 05 Mar 2009 21:48:44 +0000</pubDate>
		<dc:creator>Dennis Gurock</dc:creator>
				<category><![CDATA[Gurock Software]]></category>
		<category><![CDATA[SmartInspect]]></category>
		<category><![CDATA[Software Quality]]></category>

		<guid isPermaLink="false">http://blog.gurock.com/?p=450</guid>
		<description><![CDATA[For those of you who haven&#8217;t yet subscribed to our new software quality blog, here are links to an interesting post series Tobias has recently written and published on No bug left behind. Tobias explains how to reduce memory usage by making use of string pools and shows how we integrated this technique into the [...]]]></description>
			<content:encoded><![CDATA[<p>For those of you who haven&#8217;t yet subscribed to our new <a href="http://nobugleftbehind.com/">software quality blog</a>, here are links to an interesting post series Tobias has recently written and published on <em>No bug left behind</em>. Tobias explains how to reduce memory usage by making use of string pools and shows how we integrated this technique into the <a href="http://www.gurock.com/products/smartinspect/">SmartInspect</a> Console:</p>
<ul>
<li><a href="http://nobugleftbehind.com/optimizing-memory-consumption-with-string-pools-part-i/">Optimizing Memory Consumption with String Pools: Part I</a></li>
<li><a href="http://nobugleftbehind.com/optimizing-memory-consumption-with-string-pools-part-ii/">Optimizing Memory Consumption with String Pools: Part II</a></li>
<li><a href="http://nobugleftbehind.com/optimizing-memory-consumption-with-string-pools-part-iii/">Optimizing Memory Consumption with String Pools: Part III</a></li>
</ul>
<p>Integrating string pools into the SmartInspect Console means that you will be able to open and analyze even larger log files, as string pools can reduce memory usage by 40% and more. If you haven&#8217;t yet subscribed to our new blog and are interested in software quality, testing, usability and related topics, make sure to subscribe:</p>
<p><a href="http://feeds.nobugleftbehind.com/nblb">&raquo; No bug left behind Feed</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gurock.com/postings/optimizing-memory-consumption-with-string-pools/450/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Our new software quality blog</title>
		<link>http://blog.gurock.com/postings/our-new-software-quality-blog/408/</link>
		<comments>http://blog.gurock.com/postings/our-new-software-quality-blog/408/#comments</comments>
		<pubDate>Wed, 04 Feb 2009 19:55:05 +0000</pubDate>
		<dc:creator>Dennis Gurock</dc:creator>
				<category><![CDATA[DelphiFeeds.com]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Gurock Software]]></category>
		<category><![CDATA[Software Quality]]></category>

		<guid isPermaLink="false">http://blog.gurock.com/?p=408</guid>
		<description><![CDATA[We&#8217;ve been planning to post more general content related to software quality on this blog for some time now, but have instead decided to launch a completely new blog dedicated to software quality. We feel that a lot of readers who would be interested in a general software quality blog would be put off by [...]]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve been planning to post more general content related to software quality on this blog for some time now, but have instead decided to launch a completely new blog dedicated to <a href="http://nobugleftbehind.com/">software quality</a>. We feel that a lot of readers who would be interested in a general software quality blog would be put off by our regular product news, <a href="http://www.gurock.com/products/smartinspect/">SmartInspect</a> postings and the occasional business article we post here.</p>
<p>So instead of publishing all the different things here on this blog, we&#8217;ve just launched <em><a href="http://nobugleftbehind.com/">No bug left behind</a></em>, our new blog with the stupid name about software quality, testing and related topics. We have quite a few plans for the new blog and are also looking for guest postings, relevant links and articles. So if you have something interesting to share, please <a href="mailto:team@nobugleftbehind.com">let us know</a>!</p>
<p><strong>If you are interested in software quality, usability, testing and other related topics, make sure to subscribe to <a href="http://feeds.nobugleftbehind.com/nblb">our new feed</a>.</strong></p>
<p><strong><a href="http://nobugleftbehind.com/">No bug left behind &raquo;</a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gurock.com/postings/our-new-software-quality-blog/408/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>12 Practical Tips for Building Bug-Free Software</title>
		<link>http://blog.gurock.com/postings/12-practical-tips-for-building-bug-free-software/262/</link>
		<comments>http://blog.gurock.com/postings/12-practical-tips-for-building-bug-free-software/262/#comments</comments>
		<pubDate>Sun, 24 Jun 2007 20:09:01 +0000</pubDate>
		<dc:creator>Dennis Gurock</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software Quality]]></category>
		<category><![CDATA[Virtualization]]></category>

		<guid isPermaLink="false">http://blog.gurock.com/postings/12-practical-tips-for-building-bug-free-software/262/</guid>
		<description><![CDATA[Does your software application have bugs? Of course it has, every software application that&#8217;s out there has bugs and bug-free software is a myth. But it&#8217;s still possible to greatly minimize bugs, security problems and errors in your application by following a few tips and techniques I outline in this posting.
Recent studies show that up [...]]]></description>
			<content:encoded><![CDATA[<p>Does your software application have bugs? Of course it has, every software application that&#8217;s out there has bugs and bug-free software is a myth. But it&#8217;s still possible to greatly minimize bugs, security problems and errors in your application by following a few tips and techniques I outline in this posting.</p>
<p>Recent studies show that up to 40% of system failures are caused by software bugs and that common memory and concurrency related bugs account for 60% of system vulnerabilities and security problems. So reducing software bugs in your application is the best way to increase the stability, reliability and security of your software.</p>
<p>During the development of our logging tool <a href="http://www.gurock.com/products/smartinspect/">SmartInspect</a>, we used many techniques to keep the quality of our product high and this list contains some of the techniques we use. So without further ado, here is my list of 12 practical tips for building bug-free software (or at least software with <em>fewer</em> bugs):</p>
<h2>1. Code Reviews</h2>
<p>Four eyes see more than two. That&#8217;s why you should let other developers review your source code on a regular basis. Pair programming on the other hand, a technique where two developers write code together for longer periods, isn&#8217;t for everyone and is often not needed. But complicated, important or security related code greatly benefits from code reviews and will improve your code quality a lot.</p>
<h2>2. Beta Tests</h2>
<p>Beta tests play an important role with keeping your software&#8217;s quality high. But most times, it doesn&#8217;t make sense to release beta versions of your software for minor updates. Major releases on the other hand, should be tested by end-users and customers before going gold. You can test your software as much as you want, if you cannot control the execution environment, the chance is high that end-users will find bugs and problems with all the different computer configurations out there. Also make sure that your software reached a high quality standard before giving it to beta testers. You don&#8217;t want to waste the testers&#8217; time by letting them find and report bugs that you already know about.</p>
<h2>3. Automated Tests</h2>
<p>Automated tests like unit tests or automated GUI tests can be used to guarantee the functionality of application modules, application programming interfaces (APIs) and user interfaces. You don&#8217;t have to be a test-driven development wizard to make good use of automated tests. Using unit tests for key parts of your application can go a long way towards building more reliable software. There are tons of unit testing frameworks, web and GUI testing tools out there that you can utilize.</p>
<h2>4. Logging</h2>
<p>Using log files or live logging during development and production usage is an important and useful technique to identify bugs, find concurrency problems and to analyze and find out why an application crashed. Advanced logging tools are also able to log complete objects, trace threads and distributed systems and offer rich viewer tools to monitor your application. Instead of writing your own basic logging framework, you should use proven and advanced libraries and tools. Many open-source and even some commercial offerings have been released over the years, including our own .NET, Java and Delphi logging tool <a href="http://www.gurock.com/products/smartinspect/">SmartInspect</a>.</p>
<h2>5. Error Reporting</h2>
<p>To find and resolve errors and exceptions, you first have to know what kind of errors your users and customers are experiencing. Many users of trial software won&#8217;t get in touch with you to report any errors. Instead, they will just uninstall your application and test a competing product. To make error reporting for end-users easier and more useful to you, you should use automated error and exception reporting techniques. When an unhandled exception occurs, your application should show a friendly dialog offering the user to send an error report back to the developer. Error reports should contain all kind of information to help you identify the problem, including error messages, call stacks, version numbers and log files.</p>
<h2>6. Customer Feedback</h2>
<p>Similar to error reporting, you should make giving feedback as easy as possible for your users and customers. In SmartInspect, for example, we have buttons in the menu and toolbars to send feedback and questions. You can also use a short (optional) survey when a user uninstalls your application. This survey should only have a few questions and besides other things ask why the user uninstalled your software. If a lot of users report that they uninstalled your software because of stability problems, you will know that your application isn&#8217;t as high-quality as you have thought.</p>
<h2>7. Use Proven Code</h2>
<p>You should build the core functionality and main features of your applications yourself, because only then are you able to easily and quickly modify and improve it. But for many other parts you can reuse existing and proven code. It will take you years to build a stable, easy-to-use and feature complete reporting engine or setup builder, for example. Often times it&#8217;s better to use proven existing code, either from internal libraries, third-party companies or open source solutions if the license permits this.</p>
<h2>8. Dedicated Testers</h2>
<p>If possible, you should have dedicated testers in your organization for quality assurance. In fact, you should have lots of them. For simple standard applications, one tester per developer is a good rule of thumb. For applications that are complicated and time-consuming to test, two or more testers per developer are needed. Many small organizations cannot afford dedicated testers. If this is the case, developers should test each others&#8217; code. It&#8217;s important that others test your code and functionality, because general wisdom says that developers do a really bad job testing software that they wrote themselves.</p>
<h2>9. Virtual Machines</h2>
<p>To test your software on as many different environments and operating systems as possible, you should use virtual machines with tools like <a href="http://www.vmware.com/">VMware</a>, <a href="http://www.microsoft.com/windows/products/winfamily/virtualpc/default.mspx">Virtual PC</a> or other available virtualization software. Besides allowing you to test your software on all kinds of configurations, you will save tons of time because you can easily copy, share and reset the virtual machines. It&#8217;s a good idea to create many different standard images for all the operating systems you regular test on and put them on a file server. When you need a specific configuration to test something, you can then start with one of your base images without installing the operating system, drivers and required software and so on.</p>
<h2>10. Write a Specification</h2>
<p>Many bugs are caused by badly designed class hierarchies, inaccurate interfaces, wrongly understood requirements and the therefore required workarounds. That&#8217;s why an experienced developer or architect should write a specification with all the collected requirements and technical implementation details before writing the first line of code. But as always, requirements change during the lifetime of a software application. That&#8217;s why it&#8217;s important to keep the specification up-to-date and plan the architecture changes for any new or altered requirements.</p>
<h2>11. Use a Good Debugger</h2>
<p>If you use an IDE like Visual Studio, Eclipse or Delphi, you already have access to a powerful debugger that you should use. But with many development environments and development platforms like PHP, Windows Scripting, Python and Ruby, many developers aren&#8217;t using a debugger. In those scripting environments, developers often try to squish bugs by try and error, changing code parts, adding a few print statements and so on. This is not only a very cumbersome and time-consuming way of identifying and solving bugs, it&#8217;s also very dangerous if you don&#8217;t fully understand your code and are able to step through it with a debugger. Do yourself a favor and get a good debugger for your development platform (and there are debuggers for almost everything).</p>
<h2>12. Debug and Strict Options</h2>
<p>Many development environments allow you to enable special debugging options like range checking, overflow checking and memory corruption checking. Such options should be enabled during development and sometimes even during quality assurance to identify hard to find bugs. Many script languages like Perl or PHP on the other hand allow you to enable certain rules and warnings that will force you to declare variables before using them. This is especially useful if a script language is case-sensitive and it&#8217;s easy to make typos.</p>
<p>As I already said, these tips won&#8217;t make your software magically bug-free, but they allow you to make your software much more stable, reliable and usable if you put the work into it. And on top of it, it will make you a better developer, too.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gurock.com/postings/12-practical-tips-for-building-bug-free-software/262/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>How do you rate on the Joel Test?</title>
		<link>http://blog.gurock.com/postings/how-do-you-rate-on-the-joel-test/187/</link>
		<comments>http://blog.gurock.com/postings/how-do-you-rate-on-the-joel-test/187/#comments</comments>
		<pubDate>Mon, 09 Oct 2006 22:15:24 +0000</pubDate>
		<dc:creator>Dennis Gurock</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software Quality]]></category>

		<guid isPermaLink="false">http://software.gurock.com/postings/how-do-you-rate-on-the-joel-test/187/</guid>
		<description><![CDATA[Joel Spolsky laid out the Joel Test back in 2000 as a highly irresponsible, sloppy test to rate the quality of a software team as he calls it himself. Being a MicroISV, I didn&#8217;t expect us to rate that high on the test as some of the &#8220;rules&#8221; are obviously more appropriate for bigger teams. [...]]]></description>
			<content:encoded><![CDATA[<p>Joel Spolsky laid out the <a href="http://www.joelonsoftware.com/articles/fog0000000043.html">Joel Test</a> back in 2000 as a <em>highly irresponsible, sloppy test to rate the quality of a software team</em> as he calls it himself. Being a MicroISV, I didn&#8217;t expect us to rate that high on the test as some of the &#8220;rules&#8221; are obviously more appropriate for bigger teams. But see below for our rating.</p>
<p><strong>1. Do you use source control?</strong><br />
We have been using a source control system from day one and wouldn&#8217;t develop even the most simple program without it. It&#8217;s just so convenient to have backups of every single version we ever checked into the source control system. Another important feature for us are <a href="http://software.ericsink.com/scm/scm_branches.html">branches</a>. When we have to fix a bug in the currently released version and when we made changes to our code that we don&#8217;t want to ship right now, we create a new branch and fix the bug in it. We use Subversion as our source control tool and although it could be faster, it&#8217;s the best source control system I ever used.</p>
<p><strong>2. Can you make a build in one step?</strong><br />
As Tobias outlined in the <a href="http://blog.gurock.com/postings/explaining-our-build-system-part-i/13/">Explaining our build system</a> blog posting, we use <a href="http://www.cygwin.com/">Cygwin</a> and Makefiles for our build setup. We can make a build in one single step by executing the main Makefile. The scripts do everything from getting the sources, building the applications, help files, libraries, setups and so on. It has been a great timesaver for us.</p>
<p><strong>3. Do you make daily builds?</strong><br />
We don&#8217;t have scheduled daily builds as it doesn&#8217;t really make sense for us at this stage. We start builds by hand when we check in some bigger changes into the source control system. But since we have days without a single source code change, we don&#8217;t need to have the build machine running 24/7. Besides, breaking the build is very rare as we are just 2 developers and the chances of breaking something is much smaller.</p>
<p><strong>4. Do you have a bug database?</strong><br />
We use <a href="http://trac.edgewall.org/">Trac</a> as our bug database (and wiki). So far it&#8217;s been okay but it could be better. One thing I&#8217;m missing in Trac is a hierarchical overview of projects, bugs and feature requests (we had that in our home-grown bug database). Since our home-grown bug database was desktop based and we needed something web-enabled, we switched to Trac. We haven&#8217;t switched to something else because Trac has such a great Subversion integration and a built-in wiki and we haven&#8217;t found a good alternative for it yet.</p>
<p><strong>5. Do you fix bugs before writing new code?</strong><br />
Most of the times we do fix bugs before writing new code. But there are some situations where this is not true. Take Windows Vista, for example. We tested <a href="http://www.gurock.com/products/smartinspect/">SmartInspect</a> on Vista and fixed most of the problems immediately. For some problems we decided to wait for later RC versions or the final Vista version as we aren&#8217;t sure if the problems are bugs of Vista or of SmartInspect. So in general I would say that we adhere to this rule but I don&#8217;t think this rule should be enforced strictly for every case.</p>
<p><strong>6. Do you have an up-to-date schedule?</strong><br />
We do have an up-to-date schedule and are very strict about keeping SmartInspect in a ready-to-ship state. So if we have to release a new version of SmartInspect, we can do so pretty quickly. We set us milestones with planned features and release dates and try to stay close to the schedule. We have been pretty bad about this with SmartInspect 1.0, but improved considerable since we released the first version.</p>
<p><strong>7. Do you have a spec?</strong><br />
Strictly speaking, we have to say &#8216;no&#8217; to this one. We do talk a lot about planned features, their implementation and the best design. We also write down use cases and user stories when we plan a new release. But we don&#8217;t write 50-page documents with detailed discussions about every single feature that we want to put into a new release and I doubt that it would be worth it. We do write small specs about planned future products when we find a good new idea and want to preserve it for the future, but we don&#8217;t have specs for new versions of SmartInspect.</p>
<p><strong>8. Do programmers have quiet working conditions?</strong><br />
I&#8217;m happy to say that this one is true for us. As we are just two developers and both of us have a quiet private office, it&#8217;s pretty easy to confirm this.</p>
<p><strong>9. Do you use the best tools money can buy?</strong><br />
I would say &#8216;yes&#8217; on this one. We have <a href="http://blog.gurock.com/postings/our-dual-screen-setups-here-at-gurock-software/41/">multiple monitors</a>, good desks and good chairs, all the software that we need and up-to-date machines. We joined the <a href="http://blog.gurock.com/articles/taking-advantage-of-microsofts-empower-for-isvs-program/">Empower Program</a>, for example, to get all the operating systems for testing and production usage that we need. We also have other not-so-cheap tools that make it easier for us to generate the SmartInspect library documentation which saves us a lot of time.</p>
<p><strong>10. Do you have testers?</strong><br />
We obviously don&#8217;t have any dedicated testers but we compensate this by having a huge number of <a href="http://blog.gurock.com/postings/testing-software-on-multiple-platforms/12/">automated test cases</a> for the SmartInspect libraries and comprehensive test plans. We execute the test cases and test plans on a regular basis and keep the bug count surprisingly low (our customers confirm this).</p>
<p><strong>11. Do new candidates write code during their interview?</strong><br />
As we haven&#8217;t interviewed any candidates, this one doesn&#8217;t really apply to us. I guess this one doesn&#8217;t apply to most of the MicroISVs out there and is more appropriate for bigger teams.</p>
<p><strong>12. Do you do hallway usability testing?</strong><br />
We did quick usability test of SmartInspect in the past and plan on doing it in the future. It has helped us a lot and we changed some of the features and changed default settings after seeing people having problems with the GUI. One of the things that the usability testing made us realize is that many people have problems with docking windows. That&#8217;s why we disabled docking in the SmartInspect Console by default and added a Reset Docking feature to undo any docking with one click.</p>
<p>All in all we rate 8 out of 12 on Joel&#8217;s Test with 2-3 rules not really appropriate for a very small ISV like us. That&#8217;s not too bad I guess and we are pretty happy about our development system. How do you rate on the test with your MicroISV?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gurock.com/postings/how-do-you-rate-on-the-joel-test/187/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Multi-monitor programming pitfalls</title>
		<link>http://blog.gurock.com/postings/multi-monitor-programming-pitfalls/31/</link>
		<comments>http://blog.gurock.com/postings/multi-monitor-programming-pitfalls/31/#comments</comments>
		<pubDate>Tue, 23 Aug 2005 14:01:42 +0000</pubDate>
		<dc:creator>Dennis Gurock</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[SmartInspect]]></category>
		<category><![CDATA[Software Quality]]></category>

		<guid isPermaLink="false">http://software.gurock.com/postings/multi-monitor-programming-pitfalls/31/</guid>
		<description><![CDATA[&#8220;I will highlight two problem areas where many programs, including popular ones, make wrong assumptions and therefore contain bugs on multi-monitor machines. In fact, we have been affected by one of these problems ourselves. A customer reported that the SmartInspect Console isn&#8217;t restored correctly when it&#8217;s closed on a non-primary monitor in maximized state. We [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;I will highlight two problem areas where many programs, including popular ones, make wrong assumptions and therefore contain bugs on multi-monitor machines. In fact, we have been affected by one of these problems ourselves. A customer reported that the <a href="http://www.gurock.com/products/smartinspect/">SmartInspect</a> Console isn&#8217;t restored correctly when it&#8217;s closed on a non-primary monitor in maximized state. We tested it, could reproduce the annoyance and wondered why we never noticed it before, especially since we use two monitors, too.&#8221;</p>
<p><a href="http://blog.gurock.com/articles/multi-monitor-programming-pitfalls/">Multi-Monitor Programming Pitfalls</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gurock.com/postings/multi-monitor-programming-pitfalls/31/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Creating custom exception in .NET</title>
		<link>http://blog.gurock.com/postings/creating-custom-exception-in-net/26/</link>
		<comments>http://blog.gurock.com/postings/creating-custom-exception-in-net/26/#comments</comments>
		<pubDate>Tue, 16 Aug 2005 17:12:28 +0000</pubDate>
		<dc:creator>Tobias Gurock</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software Quality]]></category>

		<guid isPermaLink="false">http://software.gurock.com/postings/creating-custom-exception-in-.net/26/</guid>
		<description><![CDATA[&#8220;Although the .NET framework contains all kinds of exception types which are sufficient in most cases, it can make sense to define custom exceptions in your own applications. They can greatly simplify and improve the error handling and thus increase the overall code quality. Whatever your reasons are for using custom exceptions, this article shows [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;Although the .NET framework contains all kinds of exception types which are sufficient in most cases, it can make sense to define custom exceptions in your own applications. They can greatly simplify and improve the error handling and thus increase the overall code quality. Whatever your reasons are for using custom exceptions, this article shows you how to create them and what to pay attention to when it comes to serialization, .NET guidelines and analysis tools.&#8221;</p>
<p><a href="http://blog.gurock.com/articles/creating-custom-exceptions-in-dotnet/">Creating Custom Exceptions in .NET</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gurock.com/postings/creating-custom-exception-in-net/26/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
