Channels ▼
RSS

Tools

Bug Opportunity Levels


Bug Opportunities

Here are the five classes of bug opportunities:

Level 0: There is no opportunity to make a mistake. This is the ideal situation, and the one you should always strive for. It does not simply mean that there is not a mistake. It means there cannot be a mistake, because you never have an opportunity to make a mistake. It is not a "bug opportunity" at all, which is why I call it level 0 instead of 1.

For example, consider the "enhanced for loop" introduced in Java 5. Suppose you have two arrays of objects. You need to compare every element of the first array to every element of the second one, and take some action when you find a match. Prior to Java 5, you might have written it like this:


for (int i = 0; i < array1.length; i++)
{
  Object obj1 = array1[i];
  for (int j = 0; j < array2.length; j++)
  {
    Object obj2 = array2[i];
    if (obj1 == obj2)
      // We found a match, so do something.
  }
}

Using the enhanced for loop, it can be written more concisely:


for (Object obj1 : array1)
{
  for (Object obj2 : array2)
  {
    if (obj1 == obj2)
      // We found a match, so do something.
  }
}

The second version is a bit faster to type. That's a nice bonus, but not really a big deal. Somewhat more importantly, it is easier to read and understand. That will make your code easier to maintain in the future.

The really big difference, though, is that the second version works, while the first one does not. Did you spot the bug? In the sixth line, I used i as the index into array2 when I should have used j. This kind of indexing error is very common. With the enhanced for loop, there is no opportunity to use the wrong index because no index variable ever appears in the code. By taking advantage of a language construct, we have eliminated any danger of a major class of error.


Related Reading


More Insights






Currently we allow the following HTML tags in comments:

Single tags

These tags can be used alone and don't need an ending tag.

<br> Defines a single line break

<hr> Defines a horizontal line

Matching tags

These require an ending tag - e.g. <i>italic text</i>

<a> Defines an anchor

<b> Defines bold text

<big> Defines big text

<blockquote> Defines a long quotation

<caption> Defines a table caption

<cite> Defines a citation

<code> Defines computer code text

<em> Defines emphasized text

<fieldset> Defines a border around elements in a form

<h1> This is heading 1

<h2> This is heading 2

<h3> This is heading 3

<h4> This is heading 4

<h5> This is heading 5

<h6> This is heading 6

<i> Defines italic text

<p> Defines a paragraph

<pre> Defines preformatted text

<q> Defines a short quotation

<samp> Defines sample computer code text

<small> Defines small text

<span> Defines a section in a document

<s> Defines strikethrough text

<strike> Defines strikethrough text

<strong> Defines strong text

<sub> Defines subscripted text

<sup> Defines superscripted text

<u> Defines underlined text

Dr. Dobb's encourages readers to engage in spirited, healthy debate, including taking us to task. However, Dr. Dobb's moderates all comments posted to our site, and reserves the right to modify or remove any content that it determines to be derogatory, offensive, inflammatory, vulgar, irrelevant/off-topic, racist or obvious marketing or spam. Dr. Dobb's further reserves the right to disable the profile of any commenter participating in said activities.

 
Disqus Tips To upload an avatar photo, first complete your Disqus profile. | View the list of supported HTML tags you can use to style comments. | Please read our commenting policy.
 

Video