Channels ▼


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


<br> Defines a single line break

<hr> Defines a horizontal line

Matching tags


<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

