There has long been an unofficial bug taxonomy, or classification. Nearly all bugs fall into one of the following categories:
Bohrbug : A bug that is repeatable; one that shows itself reliably under a possibly unknown but well-defined set of conditions.
Compoundbug : A bug not found during testing because it is hiding behind another bug. It is quite common for a bug fix to reveal several more bugs hiding behind the original defect. Often, the new bugs appear to be completely unrelated to the original error, although later investigation will usually reveal the subtle links that tie the bugs together. Compoundbugs are one of the main reasons why even correct bug fixes can adversely affect the stability of a program.
Heisenbug : A bug that disappears or alters its behavior when you try to probe or isolate it. This is not unusual, because using a debugger can alter the environmental conditions of a program enough for it to no longer fail. This is particularly common with timing bugs and race conditions found in multithreaded programming.
Mandelbug : A bug whose underlying cause is so complex or obscure that its behavior appears to be chaotic or nondeterministic.
Schroedinbug : This is the strange one ”it's a bug that doesn't manifest itself until someone reading the source or using the program in an unusual way notices that it never should have worked, whereupon the program promptly stops working for everybody until the bug is fixed. This sounds impossible , but I can testify to finding several Schroedinbugs during the last two decades.
To add to the bug dictionary, there are many semi- humorous definitions floating around in cyberspace that somebody ought to collect together for the creation of a Devil's Dictionary of Debugging . Here are some examples:
Dug : A documentation bug.
Fug : A bug that causes you to give up ("Fug it!").
Glug : A bug that drives you to drink.
Hug : A deadly embrace bug (also known as a "deadlock").
Jug : A bug that can get you jailed (such as penetrating security).
Lug : A big, lovable bug (e.g., Unix).
Mug : A bug that makes you feel stupid when you discover its cause.
Pug : A bug that makes you want to climb into a boxing ring with its author.
Plug : A bug that keeps a system going.
Rug : A bug that knocks a system flat.
Slug : A bug that slows everything down, leaves a trail of slime, and eats up your lettuce.
Smug : A bug that you can't find.
Snug : A bug that you put in to ensure job security.
Tug : A bug that you can't forget, no matter how long ago it was.
RIP : An acronym for "rest in peace ," meaning a bug that completely kills an application.
TCB : An acronym for "trouble came back." Usually associated with a developer who claims that a bug went away by itself. A bug that goes away by itself nearly always comes back by itself.
Twiddle : A small and insignificant change to a program. Usually fixes one bug and generates several new ones.
Crawling horror : A program so infested by bugs that it starts to resemble one of H. R. Giger's more imaginative creations.
Nailing the corpse in an upright position : The VB.Classic practice of sprinkling plentiful On Error Resume Next statements throughout the code to stop a program from aborting. In VB .NET, the same effect can be attained by judicious use of Try Catch constructs.