Dipsacales

See also: Bug, Bug

A bug or bug Informatique is an anomaly in a Computer program preventing it from functioning correctly. Its gravity can go from benign (minor defects of posting) to major (explosion of flight 501 of the rocket ARIANE 5).

The bugs are generally due to a problem of design of the software; the error can sometimes be identified (and correction carried out simply), but it can as well come from the design even of the program, which requires a major recasting. More rarely, the bugs in the software can be due to errors in the development tools used by the programmers of the software. Lastly, the material itself can comprise bugs, as it was the case of the Bogue of the division of Pentium which has affected the first versions of this processor.

Origin of the word

The term is derived from the English word bug (insect), coming from the jargon of the engineers of material and representing the errors of material which occurred. The term is sometimes wrongfully allotted to Grace Hopper: an anecdote tells that she would have discovered that an insect ( bug ), wedged between two contacts of the Relais which made function the apparatus, was the reason of the faulty operation of one of the first electromechanical computers.

In 1946, Hopper joined the faculty of Harvard at the laboratory where it continued its work on Harvard Mark II and Harvard Mark III. It allotted an error in Mark  II with a night butterfly taken in a relay, creating the term bug . The insect was removed carefully and was placed in a log book. This first anomaly popularized the expression bug or bug to represent the errors in a program.

In spite of the interest of the anecdote above, it is recognized that the use of the word bug to describe the mechanical defects of systems goes back to at least before the Années 1870. Thomas Edison, inter alia, used the word in its notes. If the precise origin of the word is thus dubious, the bringing together with the dysfunctions due to the presence of an insect in the system seems obvious.

The English term bug comes from “parasitic” French. In France, it was the term used by the electricians for the problems of lines used in the form “the line is parasitized”. Adapted in English it became bug then returned to France in the shape of “bug” (of sweet chestnut?) under the aegis of DGLF. Bug remains very largely used.

In France, the term “bug” is recommended by the General delegation to the French language and the languages of France (DGLF) since a decree published with the Official journal of the December 30th 1983. This word, which wants to be French, does not express an etymology. This is why few people use the francized version. At that time the female kind was recommended.

However at the end of the decade 1990, the dictionaries such as the “the New Petit Robert” and “Petit Larousse illustrated” brought back the use of this term to the masculine, undoubtedly under the Québécois influence where the Québécois Office of the French language (OQLF) preached the use of the male kind for a long time. The French term was popularized with the famous bug of the year 2000 which, without to have involved major visible dysfunction, nevertheless required many alterations of the information systems in the decade 1990.

From now on the DGLF recommends also the male kind for this mot.

Effects

The pessimists say that there are bugs in all the computer programs. On the other hand, the programs of quality contain relatively few errors and generally do not prevent the system from continuing its tasks. On the contrary, the less good programs, sometimes known as bugs , contain many anomalies which often interfere with the operation of the system.

The bugs have effects which vary largely. Some have a subtle effect on operation of the software and can remain unknown for one long period. Others are more severe and can stop the software even blocking the system.

In certain cases, on the operating systems, the bugs of software can make unstable the system until it is reloaded.

Other programming errors can lead to security breaches; the Dépassement of plug is one of the bugs most common making it possible a Hacker to carry out a new program on the target machine.

The bugs can have considerable economic repercussions. Steve McConnell entered several bugs which cost more than 100 million US dollars.

  • One of the most spectacular cases is that of the European rocket ARIANE 5, which cost more than one billion dollar. A few moments after takeoff, it was destroyed because of an error of the computer of embarked guidance on board apparatus. However, in this case, the " term; bogue" is somewhat unsuitable: indeed, " the erreur" consisted in beginning again with identical the computer and the software used on ARIANE 4 for the management of the inertial navigation equipment of guidance, computer and software which functioned perfectly on this rocket. However the remainder of the computing system of ARIANE 5 worked with numbers of 64 bits in Floating decimal point whereas these load-carrying members with numbers of 16 bits in whole signed. At the time of the passage of values from one system to another a material exception appeared (more precisely, an arithmetic going beyond, or the numbers of 64 bits have a too great value to be represented in 16 bits, which made leave the behavior owing to lack of management of error: a autotest), which caused a deviation of the trajectory impossible to rectify since the ground.
  • the probe of Venus Mariner 1 was lost in a similar way in 1962. A hyphen forgotten in a program FORTRAN cost more than 80 million dollars. According to Arthur C. Clarke, it was the “more expensive hyphen of the history”.
  • the famous Bug of the year 2000, enriched the companies by data processing consultant, but made spend fortunes with the companies which were indeed obliged to modify the majority of their software, in fear that those correctly do not treat the four figures of the years and are found in 1900 at January 1st, 2000.

Formal approach: the formal methods

A bug is a non-observance of the specification system, i.e. of the definition of what the system is supposed to do. A specification can be abstract and vague (like: “the software is a word processing which does not cause an error with the execution”), or formal and specifies (“tri ( T ) is a permutation of T such as sorting ( T ) is ordered for the relation <”), including at the point obtaining mathematical formulas. A program bug is a program whose Mise in work does not check the specification.

One can wonder whether there exist universal methods, without fault and automatics which it would be enough to follow to realize if a program is bug or not. The answer is not. Indeed, if such a method existed, it would be possible to automate it by a computer, i.e. by a software of analysis. This analyzer should operate on programs to analyze unspecified and would have, for example, to answer the following question: “the final state of the program can it be a state of error to the execution, or is it inevitably a correct state (or a not-termination)”. However, the Théorème of Rice says that one cannot answer this question about a system in infinite state. More generally, any question of specification carrying about the final state of the program is Indécidable, i.e. a software or an automatic method cannot answer it, except the questions whose answer is always true or always false.

One could object that the computers are systems in finished state: each computer has a finished quantity of memory. However, except for systems of very small size, it is appropriate, at ends of analysis, to regard the computers as systems with not limited memory. Indeed, the techniques of analysis using the finitude of the state go all, in a more or less diverted or optimized way, to seek to enumerate the states of the system. A system with N bits of memory has 2 N states; in a current personal computer, N is about 238. It is thus seen that any attempt at enumeration of the states of the system is dedicated to the failure.

The impossibility of the universal automatic research of the bugs is thus a problem of a fundamental nature, and not a limitation of current technology.

How to make some? How to demolish itself some?

The bugs are a consequence of the nature of the task of programming. Some occur because of simple errors of carelessness of a writing programmer of the Source code. Other bugs are the result of unexpected interferences between various parts of a software, even of unforeseen behaviors of systems external with the software (faulty sensors which turn over whimsical values). Some, finally, concern the not-catch in account of the exact terms of the standards defining the languages and the libraries employed by the programmers (cf example). These situations arrive sometimes when the software becomes too complex so that the programmers can think of all the possibilities of interaction between several parts of a program.

The industry of the made software development of large efforts to find methods of prevention of the errors of the programmers leading to bugs. That includes:

  • rules of programming . One asserts the uniformity of the style of writing (reduced possible confusion for the other developers) and the writing of detailed documentations. Typically, the writing of programs will have to follow a process formalized in successive and documented stages.
  • techniques of programming . A bug can sometimes create inconsistencies in the internal data of a program under operation. The programs can be written to check the coherence of the internal data during their execution. If a problem is found, the software can stop immediately so that the bug can be found and repaired, or simply to inform the user, to try to correct the inconsistency and to continue to function. Moreover, one can prohibit or at least severely regulate the use of functionalities of delicate handling of the computer programming language or system.
  • methodologies of development . There are several methods to manage the activity of the programmers in order to minimize the risks of bugs. Several of these techniques raise of the speciality of the software Génie.
  • the support of the computer programming languages . The languages include sometimes functionalities which help the programmers to treat the bugs, like the Traitement of the exceptions. Moreover, several recent languages deliberately excluded from the advanced functions likely to lead to bugs. For example, the languages Java and Perl does not offer an access of low level to the pointer , preventing that a program does not reach a storage area by inadvertency.
  • the test . The software is tested in various configurations, in particular difficult and “extreme” configurations. One also will try to cover all the functionalities, or all the portions of code of the software, or all the ways in the code (this last criterion is in general impossible to reach). However, the test does not give an insurance on the good performance of the software in all the cases, because it takes account only of one limited number of system requirements, entries of the users or the outside world, etc
  • the formal methods . It is a question here of arriving to a proof, with the mathematical direction, of good performance of the software. The method can provide at least of automation: the assistants of proof help a user to formulate a mathematical proof and check it; the Model checking and the static Analyze by abstract Interprétation are automatic; there exist intermediate gradations. Let us quote for example the Méthode B, used for the line 14 (Meteor) Parisian Métro.

To find and correct the bugs, or déboguer, are a major part of the Programmation of software. Maurice Wilkes, pioneer of data processing, described his achievements of the Years 1940 by saying that the essence of the remainder of its life would be occupied repairing the errors in its personal programs. Whereas the computer programs become increasingly complex, the bugs become more frequent and difficult to correct. Sometimes, the programmers spend more time and efforts to find and correct the bugs that to write new code.

Usually, the most difficult part of debugging is to find the part of the code responsible for the error. Once located, to correct it is often easy. Programs called Débogueur S exist in order to help the programmers to find the bugs. However, even with the assistance of a Debugger, to unearth a bug is a task often very difficult.

Usually, the first stage to find a bug is to find a means of reproducing it easily. Once the bug reproduced, the programmer can use the Débogueur or another tool to observe the execution of the program in its usual context, and to possibly find the problem. On the other hand, it is not always easy to reproduce a bug. Some are caused by entries with the software which can be difficult to reproduce for the programmer. Others can disappear when the program is launched in a Débogueur; those are called Heisenbug S (referring, by joke, to the Principe of uncertainty of Heisenberg). Lastly, the bugs of the parallel programs (compounds of several modules being carried out in a concurrent way, for example on several processors) are often difficult to reproduce if they depend on the precise scheduling of calculations on the machine.

Example

Example of code not bug but being able to cause an error and correction of the code for an operation detecting the errors of the other programs or the machine.
  • the following pseudo code represents a function taking in entry an address memory and incrementing the value which is stored there.

IncPointeur function (pointer) *pointor ++ fine function

  • the problem is that in the computing systems, it is frequent that only a portion of the memory is accessible in writing and that an attempt to make it in a zone protected or non-existent memory, causes a bug, an interruption of the program or in the worst case, a stop of the system.

  • In the complex systems, it is often difficult and tiresome to envisage all the possible case, this is why the total tolerance does not exist. This does not prevent from envisaging a maximum of case to make the program most robust possible.

IncPointeur function (pointer) if EstValide (pointer) *pointor ++ return OK if not return ERROR end if fine function

  • In the Pseudo-code above, the program tests the validity of the address before reaching it, which makes it possible the program to continue even if an erroneous address is transmitted to him.

Humor and famous quotations related to the bugs

  • “It is not a bug, it is a functionality!” (of English It' S not has bug, it' S.A. feature ). - Answer attends developers of software to their users.
  • “Any program not commonplace has at least a bug” (of English not-commonplace Every program has At least one bug ) - Drawn from the Loi of Murphy applied to data processing (cf: external bonds below)
  • “To err is human, but a true disaster requires a computer”
  • “When a software does not have any more any bug, it is usually obsolete”

Video games

The term of bug in the video games has as a significance a first error in the supposed course of an action. The final resultant of the bug will not cause the same embarrassment according to its intensity. A hand of a player crossing a wall in a Jeu of subjective shooting will not have the same harmful effect as an impossibility of achieving the principal search of a Roleplay.

The existence of the bugs do not bring only of the negative points:

  • the search and the correction for bugs shown often allow a correction of other bugs unknown to date and/or an optimization of the Source code, which is very advantageous to the player (improved jouability) as with the developer (the regular customer support of a play is a pledge of famous).
  • the exceptional popularity of a play which knows however bugs is often initiating of a very prolific community able to correct these bugs using various tools. The play more symbolic system of this phenomenon is certainly Fallout 2.
  • Certains bugs can be advantageous with players more or less badly intentioneds. In the parts playable in network (on Internet or in lan), the exploitable bugs are duaux: either they cause destruction of the fair play (in particular in the Jeux of subjective shooting), or they allow a spectacular projection and can, by the fact, to be connected has cheat (cheating).
  • In the contests of Speedrun, unquestionable bugs are very advantageous in order to finish a play or a sequence as soon as possible.

The term of bug includes other less used concepts because of the popularity of the name of bug . It would be judicious to name rather certain errors by lapse of memory than by bug.

4 particular types of bugs

See too

bug

Internal bonds

External bonds

  • http://www.murphys-laws.com/murphy/murphy-computer.html: law of Murphy applied to data processing.

Note

Random links:Arduinna | Roald Hoffmann | Beat-blocking | Simoïs | Jacob van Schuppen | France Blue Country of Savoy