Chapter - 2 Taxonomy of Bugs
Chapter - 2 Taxonomy of Bugs
Chapter - 2 Taxonomy of Bugs
IMPORTANCE OF BUGS:
The importance of bugs depends on frequency, correction cost, installation cost, and consequences.
1. Frequency: How often does that kind of bug occur? Pay more attention to the more frequent bug
types.
2. Correction Cost: What does it cost to correct the bug after it is found? The cost is the sum of 2 factors:
(1) the cost of discovery (2) the cost of correction. These costs go up dramatically later in the
development cycle when the bug is discovered. Correction cost also depends on system size.
3. Installation Cost: Installation cost depends on the number of installations: small for a single user
program but more for distributed systems. Fixing one bug and distributing the fix could exceed the entire
system's development cost.
4. Consequences: What are the consequences of the bug? Bug consequences can range from mild to
catastrophic.
CONSEQUENCES OF BUGS:
The consequences of a bug can be measure in terms of human rather than machine. Some consequences of a
bug on a scale of one to ten are:
1. Mild: The symptoms of the bug offend us aesthetically (gently); a misspelled output or a misaligned
printout.
2. Moderate: Outputs are misleading or redundant. The bug impacts the system's performance.
3. Annoying: The system's behavior because of the bug is dehumanizing. E.g. Names are truncated
orarbitarily modified.
4. Disturbing: It refuses to handle legitimate (authorized / legal) transactions. The ATM wont give you
money. My credit card is declared invalid.
5. Serious: It loses track of its transactions. Not just the transaction itself but the fact that the
transaction occurred. Accountability is lost.
6. Very Serious: The bug causes the system to do the wrong transactions. Instead of losing your
paycheck, the system credits it to another account or converts deposits to withdrawals.
7. Extreme: The problems aren't limited to a few users or to few transaction types. They are frequent
and arbitrary instead of sporadic infrequent) or for unusual cases.
8. Intolerable: Long term unrecoverable corruption of the database occurs and the corruption is not
easily discovered. Serious consideration is given to shutting the system down.
9. Catastrophic: The decision to shut down is taken out of our hands because the system fails.
10. Infectious: What can be worse than a failed system? One that corrupt other systems even though it
does not fall in itself ; that erodes the social physical environment; that melts nuclear reactors and
starts war.
o Quality can be measured as a combination of factors, of which number of bugs and their severity is only
one component.
o Many organizations have designed and used satisfactory, quantitative, quality metrics.
o Because bugs and their symptoms play a significant role in such metrics, as testing progresses, you
see the quality rise to a reasonable value which is deemed to be safe to ship the product.
o The factors involved in bug severity are:
1. Correction Cost: Not so important because catastrophic bugs may be corrected easier and
small bugs may take major time to debug.
2. Context and Application Dependency: Severity depends on the context and the
application in which it is used.
3. Creating Culture Dependency: What’s important depends on the creators of software and
their cultural aspirations. Test tool vendors are more sensitive about bugs in their software
then games software vendors.
4. User Culture Dependency: Severity also depends on user culture. Naive users of PC
software go crazy over bugs whereas pros (experts) may just ignore.
5. The software development phase: Severity depends on development phase. Any bugs
gets more severe as it gets closer to field use and more severe the longer it has been
around.
There is no universally correct way categorize bugs. The taxonomy is not rigid.
A given bug can be put into one or another category depending on its history and the programmer's state of mind.
Bug Definitions: It refers to fault/error in the program code that caused the malfunctioning and the desired
output is not reached.
The major categories are:
DATA BUGS:
o Data bugs include all bugs that arise from the specification of data objects, their formats, the number of such
objects, and their initial values.
o Data Bugs are at least as common as bugs in code, but they are often treated as if they did not exist at all.
o Code migrates data: Software is evolving towards programs in which more and more of the control and
processing functions are stored in tables.
o Because of this, there is an increasing awareness that bugs in code are only half the battle and the data
problems should be given equal attention.
o Dynamic Data Vs Static data:
Dynamic data are transitory. Whatever their purpose their lifetime is relatively short, typically the
processing time of one transaction. A storage object may be used to hold dynamic data of different
types, with different formats, attributes and residues.
Dynamic data bugs are due to leftover garbage in a shared resource. This can be handled in one of
the three ways: (1) Clean up after the use by the user (2) Common Cleanup by the resource manager
(3) No Clean up
Static Data are fixed in form and content. They appear in the source code or database directly or
indirectly, for example a number, a string of characters, or a bit pattern.
Compile time processing will solve the bugs caused by static data.
o Information, parameter, and control: Static or dynamic data can serve in one of three roles, or in
combination of roles: as a parameter, for control, or for information.
o Content, Structure and Attributes: Content can be an actual bit pattern, character string, or number put into
a data structure. Content is a pure bit pattern and has no meaning unless it is interpreted by a hardware or
software processor. All data bugs result in the corruption or misinterpretation of content. Structure relates
to the size, shape and numbers that describe the data object, that is memory location used to store the
content. (e.g A two dimensional array). Attributes relates to the specification meaning that is the semantics
associated with the contents of a data object. (e.g. an integer, an alphanumeric string, a subroutine). The
severity and subtlety of bugs increases as we go from content to attributes because the things get less formal
in that direction.
CODING BUGS:
o Coding errors of all kinds can create any of the other kind of bugs.
o Syntax errors are generally not important in the scheme of things if the source language translator has
adequate syntax checking.
o If a program has many syntax errors, then we should expect many logic and coding bugs.
o The documentation bugs are also considered as coding bugs which may mislead the maintenance
programmers.
Testing: testers have no immunity to bugs. Tests require complicated scenarios and databases.
They require code or the equivalent to execute and consequently they can have bugs.
Test criteria: if the specification is correct, it is correctly interpreted and implemented, and a proper test has
been designed; but the criterion by which the software's behavior is judged may be incorrect or impossible.
So, a proper test criteria has to be designed. The more complicated the criteria, the likelier they are to have
bugs.
Remedies: The remedies of test bugs are:
1. Test Debugging: The first remedy for test bugs is testing and debugging the tests. Test debugging,
when compared to program debugging, is easier because tests, when properly designed are simpler than
programs and do not have to make concessions to efficiency.
2. Test Quality Assurance: Programmers have the right to ask how quality in independent testing is
monitored.
3. Test Execution Automation: The history of software bug removal and prevention is indistinguishable
from the history of programming automation aids. Assemblers, loaders, compilers are developed to reduce
the incidence of programming and operation errors. Test execution bugs are virtually eliminated by various
test execution automation tools.
4. Test Design Automation: Just as much of software development has been automated, much test
design can be and has been automated. For a given productivity rate, automation reduces the bug count -
be it for software or be it for tests.