A
software bug (or "bug") is an error, flaw, mistake, failure, or
fault in a
computer program that prevents it from behaving as intended (e.g., producing an incorrect result). Most bugs arise from mistakes and errors made by people in either a program's
source code or its
design, and a few are caused by
compilers producing incorrect code. A program that contains a large number of bugs, and/or bugs that seriously interfere with its functionality, is said to be
buggy. Reports detailing bugs in a program are commonly known as
bug reports, fault reports, problem reports, trouble reports, change requests, and so forth.
Bugs can have a wide variety of effects, with varying levels of inconvenience to the user of the program. Some bugs have only a subtle effect on the program's functionality, and may thus lie undetected for a long time. More serious bugs may cause the program to
crash or
freeze leading to a
denial of service. Others qualify as
security bugs and might for example enable a
malicious user to bypass
access controls in order to obtain unauthorized privileges.
The results of bugs may be extremely serious. A bug in the code controlling the
Therac-25 radiation therapy machine was directly responsible for some patient deaths in the
1980s. In
1996, the
European Space Agency's US$1 billion
prototype Ariane 5 rocket was destroyed less than a minute after launch, due to a bug in the on-board guidance computer program. In June 1994, a
Royal Air Force Chinook crashed into the
Mull of Kintyre, killing 29. This was initially dismissed as
pilot error, but an investigation by
Computer Weekly uncovered sufficient evidence to convince a
House of Lords inquiry that it may have been caused by a software bug in the aircraft's
FADEC.
[2] [3] Etymology Bugs are a consequence of the nature of the programming task. Some bugs arise from simple oversights made when
computer programmers write
source code carelessly or transcribe data incorrectly. Many
off-by-one errors fall into this category. Other bugs arise from unintended interactions between different parts of a computer program. This happens because computer programs are often complex, often having been programmed by several different people over a great length of time, so that programmers are unable to mentally keep track of every possible way in which different parts can interact. Many
race condition bugs fall into this category.
The computer software industry has put a great deal of effort into finding methods for preventing programmers from inadvertently introducing bugs while writing software. These include:
Bugs are often created by
typos that are not caught by the compiler. Various innovations in
programming style and
defensive programming are designed to make these bugs less likely, or easier to spot.
Bugs often create inconsistencies in the internal data of a running program. Programs can be written to check the consistency of their own internal data while running. If an inconsistency is encountered, the program can immediately halt, so that the bug can be located and fixed. Alternatively, the program can simply inform the user, attempt to correct the inconsistency, and continue running.
There are several schemes for managing programmer activity, so that fewer bugs are produced. Many of these fall under the discipline of
software engineering (which addresses software design issues as well.) For example, formal
program specifications are used to state the exact behavior of programs, so that design bugs can be eliminated.
Programming languages often include features which help programmers deal with bugs, such as
exception handling. In addition, many recently-invented languages have deliberately excluded features which can easily lead to bugs. For example, the
Java programming language does not support
pointer arithmetic.
Prevention Main article: Debugging Debugging It is common practice for software to be released with known bugs that are considered non-critical. While software products contain an unknown number of unknown bugs when shipped, measurements during the testing may provide a statistically reliable estimate of the number of likely bugs remaining. Most big software projects maintain a list of "known bugs". This list inform users about bugs that are not fixed in the current release, or not fixed at all, and often a
workaround is offered additionally.
There are various reasons for such a list:
Given the above, it is often considered impossible to write completely bug-free software of any real complexity. So bugs are categorized by severity, and low-severity non-critical bugs are tolerated, as they do not impact the proper operation of the system, for the majority of users. NASA's
SATC managed to reduce number of errors to fewer than 0.1 per 1000 lines of code (
SLOC) but this was not felt to be feasible for any real world projects.
One school of thought, popularized by
Eric S. Raymond as
Linus's Law, holds that popular
open-source software holds a better chance of being bug-free than other software, because "given enough eyeballs, all bugs are shallow". This assertion has been disputed, however.
The developers often don't have time to fix all non-severe bugs.
The bug could be fixed in a new version or
patch that is not yet released.
The changes to the code required to fix the bug would be large, and would bring with them the chance of introducing other bugs into the system.
Managing bugs Famous computer bugs NASA
Mariner 1 went off-course during launch, due to a missing 'bar' in its
FORTRAN software (
July 22,
1962).
[7] NASA
Apollo 11 landing problem (
July 20,
1969).
NASA
Voyager 2 (
January 25,
1986).
Phobos 1 lost (
September 10,
1988).
ESA
Ariane 5 Flight 501 self-destruction 40 seconds after takeoff (
June 4,
1996).
NASA
Mars Climate Orbiter destroyed due to entry of
momentum data in
imperial units instead of the
metric system (
September 23,
1999).
Mars Polar Lander lost (
December 3,
1999).
NASA
Mars Rover freezes due to too many open files in flash memory (
January 21,
2004).
NASA
Mars Global Surveyor battery failure was the result of a series of events linked to a computer error made five months before (
November 2,
2006).
[8] Space exploration The
Therac-25 accidents (1985-1987), which caused at least five deaths.
A misuse of medical diagnosis software created by
Multidata Systems International, at the National Cancer Society in
Panama City, caused, by different estimates, between five and eight cancer patients to die of over-radiation. (2000)
Medical The
year 2000 problem, popularly known as the "Y2K bug", spawned fears of worldwide economic collapse and an industry of consultants providing last-minute fixes.
The
Pentium FDIV bug.
Computing The
2003 North America blackout was triggered by a local outage that went undetected due to a
race condition in General Electric Energy's XA/21 monitoring software.
Electric power transmission AT&T long distance network crash (
January 15,
1990), documented in
Bruce Sterling's
The Hacker Crackdown.
Telecommunications The
software error of a MIM-104 Patriot, which ultimately contributed to the deaths of 28 Americans in
Dhahran,
Saudi Arabia (
February 25,
1991).
Chinook crash on Mull of Kintyre: the cause of this event remains a mystery, but strong suspicions have been raised that software problems were a contributory factor.
Military The
Missingno. and
Glitch City bugs, found in the
Pokémon series
The
Minus World in NES version of
Super Mario Brothers Video games Malicious software may attempt to exploit known vulnerabilities in a system - which may or may not be bugs. Viruses are
not bugs in themselves - they are typically programs that are doing precisely what they were designed to do. However, viruses are occasionally referred to as such in the popular press.
Security vulnerabilities Divide by zero NULL pointer dereference
Infinite loops Arithmetic overflow or
underflow Exceeding
array bounds
Using an
uninitialized variable Accessing memory not owned (
Access violation)
Memory leak or
Handle leak Stack overflow or underflow
Buffer overflow Deadlock Off by one error Race condition Loss of precision in
type conversion See also
No comments:
Post a Comment