Bug

Na Galipedia, a wikipedia en galego.

Un bug é un erro, problema, falta ou fallo nun programa informático que lle impide funcionar correctamente ou produce un resultado incorrecto.

Os bugs suceden por erros producidos ben cando se escrebe o programa informático, ou ben cando se interconectan varios deles dun xeito incorrecto, posiblemente debido a un fallo no deseño software, por exemplo na arquitectura software. Asúmese que en todo programa informático contén erros, mais canto mellor escritos (técnicas de programacion) estexan os programas (normalmente despois duna serie de correccions e testes), menos bugs terán por liña de código, o que fará que tais programas que sexan suficientemente estables e se poidan utilizar nas tarefas para as que foron deseñados. Os informes (“reports”) de erros chámanse “informes de erros” e ás veces usase a terminoloxia inglesa de PRs (problem reports), TTR (test trouble reports). O resultado da analese de tais informes convertese nunha petición de cambio CRs (change requests).

Índice

[editar] Descrición

Os bugs poden ter unha ampla variedade de efectos, a nivel cualitativo e cuantitativo. Algúns poden tardar moito tempo en provocar un fallo (por exemplo se o programa tardase moito en executar a parte do código na que se localiza ese bug). Os bugs mais serios poden provocar que se caia o programa ou que se quede bloqueado (“frozen” = conxelado), ou inclusive que se “caia” o computador enteiro (i.e., todos os seus programas).

Os resultados dos bugs poden ser cualitativamente moi serios, por exemplo bugs que ocorreron en computadores Therac-25 que controlan unha terapia radiactiva, causando mortes de pacientes, ou os bugs que causaron que se destruise o foguete Ariane 5 en 1996, en menos dun minuto despois do lanzamento.

[editar] Dous aspectos de seguridade informática (safety vs security)

En informática en inglés, distínguese entre Safety e mais security: Safety reférese ao estudo da seguridade dos programas informaticos no senso de evitar que danen aos seres humanos, mentres que se lle chama security cando trata de evitar que se acceda (hackers, etc) a un sistema informatico con fines non lexítimos, causando danos económicos ou doutras índoles.

[editar] Etimoloxía

Aínda que en inglés "bug" significa comunmente “bicho”, xa se lle chamaba “bugs” na época da Segunda guerra mundial aos erros no hardware dos radares electrónicos.

A invencion atribueselle erróneamente a Grace Hopper, cando fixo publica a causa dun malfuncionamento nun computador electromecánico.


[editar] Prevención de bugs

Non é doado psicoloxicamente para alguns enxeñeiros aceptar que o seu código tén bugs. Irónicamente chamaselle ás veces aos erros "características non planexadas". Ténse chegado, eufemísticamente a chamarlle "mellora da fiabilidade" á corrección dun bug.

Os bugs son intrínsecos á natureza humana da tarefa de programación, polo tanto non se pode evitar que se produzan, mais si se pode disminuir o seu numero medio e importancia, ben a priori con técnicas e metodoloxías de programacion apropiadas, ben durante a actividade de produccion de código co análese de calidade do codigo en produccion, ben a posteriori coas probas (ou testes) do código que se produciu.

Hai que ter en conta a case obvia consideración de que, canto mais tarde no ciclo de produccion/probas se detecta un bug, mais costosa resulta a súa corrección.

[editar] Debugging

A atopar e reparar os bugs chamaselle "depurar" ("debugging"), unha das partes mais importantes da programación. A cotío, os programadores gastan tanto tempo e esforzo en atopar e correxer os bugs que en escreber novo código.

Normalmente, é moito mais dificil atopar o problema no código fonte que correxélo. Úsanse programas coñecidos como depuradores ( debuggers) para axudar la localización do bug.

Tipicamente, o primeiro paso é tentar de reproducir o problema/fallo e así atopar o bug. Unha vez reproducido o fallo, o programador usará o debugger ou outra ferramenta para monitorizar a execución do programa na rexión fallida e, finalmente, atopar o problema.

Non sempre é doado reproducir o problema. Dáse incluso o caso de haber erros que non se reproducen ao monitorizar o programa co debugger, a isto chamaselle humorísticamente heisenbugs (con relacion ao principio de incertidume de Heisenberg.)

[editar] bugs famosos

[editar] Na exploracion espacial

  • NASA Mariner 1 saiu fóra de rumbo no lanzamento, debido a un carácter "barra" que faltaba no seu software FORTRAN (1962).[1]
  • NASA Apollo 11 problema no lanzamento (1969).
  • NASA Voyager 2 ( 1986).
  • Phobos 1 perdido (10de setembro, 1988).
  • ESA Ariane 5 voo 501 autodestrucion 40 segundos despois do lanzamento (June 4, 1996).
  • NASA Mars Climate Orbiter destruiuse debido unha introducion de orbita incorrecta ( 1999).
  • Mars Polar Lander perdida o (3 de decembro do 1999).
  • NASA Mars Rover conxelado debido a excesivo numero de ficheiros abertos (21 de xaneiro do2004).

[editar] Médicos

  • Os accidentes no Therac-25 (1985-1987), posiblemente o fallo mais serio (perda de vidas humanas) relacionado cun computador.

[editar] En Computadores

  • bug no Pentium FDIV, resultando en imprecision na division en coma flotante
  • bug no Pentium F0, causando que se "conxelase" o procesador baixo certas instruccions.
  • O popular problema do ano 2000

[editar] En Telecomunicacións

[editar] No Exército

[editar] Tipos comúns de erros causados por bugs

  • División por cero
  • bucles infinitos
  • Desdordamento aritmético, ben overflow aritmético ou underflow aritmético
  • Saída dos límites dun array
  • Usar variables non inicializadas
  • Acceso a zones de memoria non accesibeis (Access violation)
  • Escorremento de memoria (Memory leak)
  • Desdordamento do Stack (overflow ou underflow)
  • desbordamento dun buffer
  • Punto morto (Deadlock)
  • condición de carreira (“race condition”)
  • Perda de precisión na conversión de tipos

[editar] Vexase tamén

  • ISO 9126, clasifica un bug como un defecto ou unha non-conformidade
  • Workaround
  • Debugger
  • Bugzilla
  • Schroedinbug
  • Heisenbug
  • Bohr bug
  • Mandelbug

[editar] Ligazóns externas (en inglés)