Posts Tagged ‘defects’

Improving Coding Standards? Start with Customer-Reported Defects

February 15th, 2011 by AccuRev

Agile teams have a focus of interest- to continuously improve product quality.  In pursuit of this end result, teams often develop and agree upon engineering process changes. And when assessing potential process changes, stricter coding standards usually make the cut. Development teams are asked to abide by a certain set of guidelines in the code they generate, refactor, or maintain.  In practice, sometimes these guidelines end up improving product quality as desired, but sometimes these guidelines have no affect on quality at all. Or worse, sometimes these guidelines add only non-beneficial incremental overhead to the development process.

While most software engineers would agree that coding standards make sense in a group programming environment, the success or failure of these standards is a function of which standards are adopted.  While popular coding standards of the day or team members previous work experiences guide this decision making process, another alternative is for customer-reported defects to guide the process.  When a root cause analysis is performed on the customer defects incurred by a software development team over time, a few prominent causes are bound to occur again and again. These causes can usually be avoided through process changes, and in particular, through coding standard changes.

Customer-Reported Defects

Looking internally at our customer-reported defects over time, we certainly discovered some recurring technical themes.  For example, there were many defects that were associated with the programmer selecting recursion over iteration in cases where the problem depth was potentially unbounded.  The result was a sleeping time-bomb for stack overflow.

Another example, there were many performance-related defects involving the selection of an inappropriate container abstraction, given the expected data access patterns and performance requirements of the problem at hand.  (Your mileage may vary, but you get the idea.)  If the same group of people is evolving a code base over time, it is likely that over time, similar mistakes will be.

Agile software development puts the accountability for product quality squarely on the shoulders of the team.  Accordingly, self-managed software teams should be continuously evaluating possible improvements to the team’s behaviors, and coding standards is a great place to start.  If you want to avoid the pitfalls of choosing the wrong standards, take a closer look at your customer-reported defects.

Is Defect Tracking Dead in an Agile World?

January 2nd, 2008 by damonpoole

by Damon Poole

There are some who recommend against using a defect tracking system. Instead, it is recommended that when a bug is found, it is fixed immediately. While that is certainly one way of preventing an ever growing inventory of defects, the tracking of an inventory of defects is one of the smallest benefits of a defect tracking system. Overall, a defect tracking system serves as a facilitator. It simplifies the collection of defect reports from all sources. It isn’t just the developers responsible for fixing the defects that find problems. Customers, developers working on dependent systems, and testers also find defects. Even if you have a policy of fixing defects as soon as they are found, it isn’t always logistically possible to do so. For instance, if you are currently working on fixing a defect and in the process of doing so you find another one, you don’t want to lose track of it. Thus, a defect tracking system coordinates the collection of defect reports in a standard way and collects them in a well known location, insuring that important information about the functioning of your system is not lost. The problem of creating a defect inventory is completely orthogonal to the user of a defect tracking system.

A defect tracking system also manages the progress of work through the development life cycle from reporting, to triaging, to assignment, to test development, to completion, to test, to integration, to delivery. It simplifies the answering of customer questions such as “what is fixed in this release” and “what release will the fix appear in.” A defect tracking system also allows for the collection of metrics which aids in the spotting of trends. I have heard from multiple sources that metrics collected from an issue tracking system are worthless because developers will just game the system. That may be true in an unhealthy environment. However, in an environment where developers are actively participating in the improvement of the process, they will want this information in order to help to find and fix problems, including the root cause of individual problems.