Anar al contingut

Error de software

De L'Enciclopèdia, la wikipedia en valencià

Un error de software, error o simplement fallo (també conegut per l'anglés, bug) és un problema en un programa de computadora o sistema de software que desencadena un resultat indeseado. Els programes que ajuden a la detecció i eliminació d'errors de software són denominats depuradorés (en inglés: debuggers).

Entre les numeroses incidències notables causades per este tipo d'error estan la màquina de radioteràpia Therac-25 en la década de 1980, la destrucció de la sonda espacial Mariner 1 en 1962,[1] del Ariane 5 501 en 1996,[2] i l'Airbus A400M en 2015.[3] També varen ser famosos els incidents de la ret d'AT&T en 1990, o els accidents del Boeing 737 MAX en 2018 i 2019 que varen dur a la suspensió dels seus vols durant mesos per fallos en el software MCAS.[4]

En 2002 un estudi encarregat pel Institut Nacional d'Estàndarts i Tecnologia del Departament de Comerç d'Estats Units va concloure que els errors informàtics costaven a l'economia nortamericana 59 500 millons d'USD a l'any, un 0.6% del PIB.[5]

Orígens del terme

Erro al crear miniatura:
Foto de l'orige de la llegenda sobre el primer bug informàtic conegut.

El 9 de setembre de 1947, la física i matemàtica Grace Murray Hopper i uns atres que treballaven en l'Universitat d'Harvard en el Mark II varen informar de que l'ordenador va sofrir un fallo en el relé electromagnètic #70 del panel F. Quan es va investigar eixe relé, l'equip va trobar una arna (bug) electrificada que va provocar que el relé quedara obert. Hopper va pegar l'insecte en cinta adhesiva en la bitàcola en el comentari:[6]

‘First actual case of bug being found.‘ ‘Primer cas real de «bug» trobat.’

Este incident és erròneament referit com l'orige de l'utilisació del terme anglés bug («bicho») per a indicar un problema en un aparat o sistema.[7][8] En realitat, el terme bug ya formava part de l'idioma anglés, a lo manco des de que Thomas Alva Edison ho va utilisar en les seues notes en 1872, en una carta en 1878 per a referir-se a defectes mecànics o elèctrics,[9] i en 1889 referint-se a interferències i mal funcionament en un fonógraf.[10] És possible que Hopper lo haja associat per primera volta a l'informàtica, en este cas, relacionat en un insecte real. Per una atra part, encara que durant els anys 50 d'el XX, Hopper també va amprar en anglés el terme debug en parlar de la depuració d'errors en els còdics de programació. El primer us registrat del terme es troba en la Journal of the Royal Aeronautical Society de 1945:

[11]

‘It ranged from the pre-design development of essential components, through the stage of type test and flight test and ‘debugging’ right through to later development of the engine.‘ ‘Anava des del desenroll previ del disseny dels components essencials, passant per l'etapa de prova, vol de prova i «debugging» i terminant en el desenroll del motor.’

Errors de programació comunes

  • Errors tipogràfics varis, per eixemple confondre el dígit "0" en la vocal "O", confondre el dígit "1" en la lletres "I" o "l", o escriure "," en lloc de "." com a part de noms de variables en llenguages a on no és necessari declarar les variables abans d'usar-les. Per eixemple, en Fortran IV els espais no conten, per lo que canviar una menge per un punt en un bucle equival a l'assignació que per ser una instrucció vàlida no la reporta el compilador.
  • Usar constants màgiques, és dir que en lloc de definir una variable o macro per a definir un paràmetro que pot canviar, posar el valor en el còdic. Per eixemple, declarar un apany i usar-la en bucles en vàries parts del programa en lloc de definir una constant i usar , en lo que s'eviten omissions quan es canvie la dimensió de X, ya que n'hi ha prou en en canviar en lloc de buscar en tot el còdic les constants màgiques 10 per a canviar-les per 20.
  • Accedir a memòria no permesa (Violació d'accés)
  • Errors de sintaxis, per eixemple, no terminar una instrucció en un punt i menge ( ; ) en un llenguage de programació que ho requerix.
  • No documentar correctament el programa, provoca el no entendre qué fa, lo que carreja errors per no tindre clar lo que fa.
  • Condició de carrera (race condition)
  • Us incorrecte d'API.
  • Incompatibilitat de sistemes.

Defectes d'instalació o programació

Erro al crear miniatura:
Pantalla d'ordenador en error de software en la Porta 11 del Aeroport de Santiago-Pudahel
  • Eliminació o substitució de biblioteques comunes a més d'un programa o del sistema (DLL Hell).
  • Reiniciar arbitrariamente la sessió d'un usuari per a que l'instalació tinga efecte.
  • Supondre que l'usuari té una conexió permanent a internet.
  • Utilisar com a font enllaços simbòlics a fichers que poden canviar d'ubicació.

Còdics d'errors de llenguages de programació

La major part dels llenguages de programació presenten a lo manco dos tipos d'errors que permeten als programadors manejar les falles dels programes d'una manera eficient i que no resulte agressiva en l'usuari final. Dits errors són de compilació i errors en temps d'eixecució.

Els errors de compilació normalment inhibixen que el còdic font derive en un programa eixecutable, mentres que els errors en temps d'eixecució són situacions específiques en les que un event extern al programa impedix la seua eixecució. Regularment un programador eficient deu intentar imaginar com deu respondre davant eixos events de manera que siga el programa i no l'usuari o el sistema operatiu els que resolguen el problema. Per eixemple, un bloc d'error no manejat podria fer lo següent:

Obri l'archiu "miarchivo" per a escritura
comença a escriure senyes en el meu archiu
tanca l'archiu

Si "miarchivo" no existix (o el programa o l'usuari no tenen privilegis suficients per a obrir-ho), el sistema operatiu retornarà un error que el programa no atraparà i tindrem un mensage com "L'archiu "miarchivo" no pot ser obert per a escritura" i botons per a reintentar, cancelar i abortar (en el sistema operatiu Windows), que no tindran una atra acció que repetir-se indefinidament sense possibilitat d'eixir d'eixe cicle com no siga donant per terminat violentament el programa. Un còdic que permetera atrapar l'error en temps d'eixecució seria:

Obri l'archiu "miarchivo" per a escritura
Si el sistema operatiu ho permet
 comença a escriure senyes en "miarchivo"
si no ho va permetre
 informa a l'usuari de lo que succeïx
 retorna a l'usuari a un punt a on no hi haja conflicte (el menú principal, per eixemple)
Continua operant normalment

Els diferents llenguages de programació permeten diferents construccions llògiques als programadors per a atrapar i resoldre errors en temps d'eixecució, com poden ser les sentències assert, try i on error en diferents llenguages de programació.

Defectes de disseny de programes

  • Dissenys en colors inapropiats per a les persones que patixen daltonisme
  • Dissenys que usen texts en tipografies de difícil llectura pel seu tamany o dissenye
  • Dissenys que forcen l'us del rata sense deixar alternatives de teclat per a persones en disfuncions motrius
  • Estimar que l'equip a on s'instalarà té determinades característiques (com la resolució de la pantalla, la velocitat del processador, la cantitat de memòria o conectivitat a Internet) pròpies d'un equip de gama alta, en lloc de dissenyar el software per a la seua eixecució en equips normals

Implicacions

El tipo i cantitat de dany produït per un error de software pot afectar els processos de pren de decisió i la política sobre la calitat del software. En aplicacions per al viage espacial tripulat i per a l'automòvil els controls de calitat del software deuen ser superiors.

Casos notables

I2K

Erro al crear miniatura:
I2K
Artícul principal → Problema de l'any 2000.


el problema de l'any 2000 (I2K) va poder aplegar a ser un colapse econòmic perque molts programes interpretarien l'any 2000 com si fora l'any 1900. Els treballs d'adaptació i correcció de programes varen evitar problemes greus.

Knight Capital

Disrupción de la bossa de Nova York en 2012. L'1 d'agost de 2012 Knight Capital va provocar una disrupción del mercat de bossa que li va dur a perdre en dos dies el 75% de la seua capitalisació bossística. Knight Capital disponia del software SMARS que gestionava de forma automatizado, a alta velocitat i de forma algorítmica les órdens per a eixecutar en el mercat. Dins del còdic tenia la funcionalitat «Power Peg», que ya no usava des de 2003. No s'havia borrat i estava disponible si li la cridava. El contador de les accions venudes en cada orde va passar a realisar-la una atra part del còdic fòra de «Power Peg» des de 2005. Començant el 27 de juliol de 2012 es va iniciar l'instalació del nou software SMARS per fases en els servidors durant varis dies. El nou software contenia una etiqueta que en l'antic activava «Power Peg».

Un tècnic va oblidar realisar una còpia del nou còdic RLP a un dels huit servidors SMARS que gestionaven les órdens de compra i venda d'accions automatizado. L'1 d'agost de 2012 el servidor no actualisat en eixecutar l'antic còdic «Power Peg» va manar millons d'órdens perque el contador d'accions eixecutades en cada orde no es comunicava a SMARS i llavors el procés de compra no es parava mai. En un intent de solucionar el problema desinstalaron el nou còdic RLP dels sèt servidors que funcionaven correctament, lo que va agravar el problema. En 45 minuts va eixecutar 4 millons d'operacions en 154 valors movent 397 millons d'accions, quan en el seu lloc deuria haver eixecutat 212 órdens de chicoteta entitat. Knight Capital va perdre 460 millons d'USD i la SEC li va impondre una multa de 12 millons d'USD per violar regulacions de bossa.[12]

Boeing 737 MAX

Artícul principal → Boeing 737 MAX.


Erro al crear miniatura:
Boeing 737 MAX 8

Dos accidents de l'avió Boeing 737 MAX en 2018 i 2019 varen dur a que el 13 de març de 2019 la FAA iniciara la Suspensió de vol del Boeing 737 MAX durant mesos per fallos en el software MCAS (Sistema d'Aument de Característiques de Maniobra, en anglés, Manoeuvring Characteristics Augmentation System).[4] Varen fallir 346 persones en els accidents. La FAA permetia a fabricants com Boeing emetre certificats de vol per als seus avions. En novembre de 2019 la FAA va suspendre la capacitat de Boeing per a emetre certificats per als avions MAX.

El MCAS en el MAX es va dissenyar per a activar-se usant la senyal d'un dels dos sensors d'àngul d'atac de l'avió, fent-ho susceptible al punt únic de fallo (Single point of failure). Quan MCAS detecta que l'avió està en modo manual en els flaps dalt i en un àngul d'atac elevat, ajusta l'estabilisador horisontal per a baixar el morro i que el pilot no puge massa ràpit i produïxca una caiguda en pèrdua. Encara que el sistema MCAS podia causar picats no intencionats, no es mencionava en els manuals de vol i entrenament, per lo que els pilots ho desconeixien.[13] En març de 2019 varen quedar en terra 387 avions MAX que realisaven 8600 vols semanals per a 59 companyies aérees. En giner de 2020 Boeing va calcular que en 2019 va perdre 18 400 millons d'USD i li varen cancelar 183 demanats de MAX. En 2019 el preu d'un Boeing 737 MAX anava de 100 a 135 millons d'USD.

Therac-25

Artícul principal → Therac-25.


Erro al crear miniatura:
Simulació de la pantalla d'entrada d'un Therac-25.
Erro al crear miniatura:
Simulació de la pantalla d'entrada d'un Therac-25 en l'error 54.
Erro al crear miniatura:
Desbordament d'una variable octet (8 bits).

la Therac-25 va ser una màquina de radioteràpia produïda per AECL, successora dels models Therac-6 i Therac-20 (les unitats anteriors varen ser produïdes en associació en CGR). L'aparat va estar compromés en a lo manco sis accidents entre 1985 i 1987, en els que varis pacients varen rebre sobredosis de radiació. Tres dels pacients varen morir com a conseqüència directa. Estos accidents varen posar en dubte la fiabilitat del control per software de sistemes de seguritat crítica, convertint-se en cas d'estudi en l'informàtica mèdica i en l'ingenieria de software.

La comissió investigadora va concloure que les causes primàries dels accidents varen ser mals pràctiques de desenroll, anàlisis de requeriments i un mal disseny de software, i no per errors aïllats en el còdic font. En particular, el programa de la Therac-25 va ser dissenyat de tal manera que era casi impossible trobar i subsanar fallos automàticament.

El sistema no usava un sistema operatiu estàndart. En el seu lloc operava en un sistema operatiu propi escrit en llenguage ensamblador PDP-11 per a funcionar en l'ordenador 32K PDP-11/23.[14] Quan el sistema notificava un error i detenia els rajos X, solament mostrava el mensage «MALFUNCTION» (error de funcionament) seguit d'un número de l'1 al 64. El manual de la màquina no explicava el problema ni mostrava els còdics d'error, i per lo tant l'operari acabava per tancar l'advertència i procedir en el tractament. El personal d'AECL i els operadors de les màquines inicialment no varen creure en les queixes dels pacients per l'alta confiança que tenien en la màquina.

L'ingenieria havia reutilisat còdic de models més antics (Therac-6 i Therac-20), que sí que contaven en sistemes de seguritat mecànics.

El fallo solament ocorria quan s'introduïa ràpidament una seqüència particular de tecles en la terminal VT100, que controlava la computadora PDP-11 de la Therac-25. L'operador havia reblit totes les caselles i estava en la casella d'órdens quan es donava conte que hi havia un error en la casella del tipo de fes que contenia una X (Rajos X) quan devia contindre una I (fes d'Electrons). Per a corregir-ho usava el cursor Plantilla:Key press fins a pujar a la casella, escriure una I i baixar en el cursor Plantilla:Key press fins a la casella d'órdens, escriure una B i pulsar Plantilla:Key press. La seqüència completa era Plantilla:Key press Plantilla:Key press Plantilla:Key press Plantilla:Key press Plantilla:Key press Plantilla:Key press Plantilla:Key press Plantilla:Key press Plantilla:Key press Plantilla:Key press Plantilla:Key press Plantilla:Key press Plantilla:Key press Plantilla:Key press Plantilla:Key press Plantilla:Key press Plantilla:Key press Plantilla:Key press Plantilla:Key press Plantilla:Key press Plantilla:Key press Plantilla:Key press Plantilla:Key press. Si esta seqüència es realisava en menys de 8 segons la màquina produïa una radiació que podia aplegar a ser fins a 1000 voltes la que es pretenia aplicar.

Açò ocorria molt rarament i es desconeixia que existira tal error de condició de carrera (race condition) en el que l'eixida o estat d'un procés és depenent d'una seqüència d'events que s'eixecuten en orde arbitrari i van a treballar sobre un mateix recurs compartit. Es pot produir un error quan dits events no apleguen (s'eixecuten) en l'orde que el programador esperava.

El programa canviava la variable bandera «Class3» incrementant-la cada volta que eixecutava la rutina de prova d'ajust, en lloc d'assignar-li un valor fix. La variable «Class3» tenia 1 byte de llongitut i els seus valors possibles anaven de 0 a 255. Quan el valor era 255 i se sumava 1, la variable «Class3» passava a valdre 0. Quan la variable «Class3» valia 0 indicava que es podia llançar el fes d'electrons i no es comprovava la posició del colimador.[14]

La rutina de prova d'ajust s'eixecutava centenars de voltes en cada sessió per a un pacient. Una volta de cada 256 eixecucions de la rutina, la variable «Class3» tenia el valor 0 (no intencionat), el colimador no es comprovava i qualsevol fallo en el colimador no es detectava. La sobredosis es produïa si l'operador apretava el botó Plantilla:Key press en el precís moment en que la variable «Class3» passava de 255 a 0 (desbordament). Llavors el software aplicava la màxima potència de 25 MeV sense tindre l'objectiu en el seu lloc i sense escanejar. AECL va corregir este problema assignant a la variable «Class3» un valor distint de 0 cada volta que passava per la rutina de prova d'ajust, en lloc d'incrementar-la.[14][15]

OpenSSL

Erro al crear miniatura:
Explicació simplificada de l'error «Heartbleed».

Un usuari del paquet Debian OpenSSL va notificar un avís per a la seua rectificació. En el procés d'apany de l'incidència un programador va estropejar el generador de números aleatoris. El pegat defectuós es va llançar en setembre de 2006 en la versió OpenSSL 0.9.8c-1. Fins a abril de 2008 no es va descobrir el problema. Totes les claus criptogràfiques generades en eixa versió estan compromeses perque els números «aleatoris» són fàcilment predibles, i les senyes encriptades en elles també són vulnerables. Açò va supondre una amenaça en moltes aplicacions que es recolzen en la encriptación com S/MIME, Tor, conexions protegides per SSL o TLS i SSH. Es va corregir en la versió OpenSSL 0.9.8c-4etch3.[16]

Heartbleed (espanyol: hemorràgia de cor) és un forat de seguritat de software en la biblioteca de còdic obert OpenSSL, solament vulnerable en la seua versió 1.0.1f, que permet a un atacant llegir la memòria d'un servidor o un client, permetent-li per eixemple, conseguir les claus privades SSL d'un servidor.[17]

El còdic vulnerable va ser adoptat i usat àmpliament en el llançament de la versió 1.0.1 d'OpenSSL el 14 de març de 2012. El soport d'Heartbeat estava habilitat de forma predeterminada, causant que les versions afectades foren vulnerables per defecte.[18][19][20]

La «RFC 6520 Heartbeat Extension» prova els enllaços de comunicació segura TLS/DTLS en permetre que un ordenador en un extrem d'una conexió envie un mensage de "solicitut de clapit de cor" ("Heartbeat Request"), que consistix en una càrrega útil, típicament una cadena de text, junt en la llongitut de dita càrrega útil com un sancer de 16-bits. L'equip receptor deu llavors enviar la mateixa càrrega exacta de regrés al remitent. Les versions afectades d'OpenSSL assignen un búfer de memòria per al mensage a tornar basat en el camp de llongitut en el mensage de solicitut, sense tindre en conte el tamany real de la càrrega útil d'eixe mensage. Per esta falla de revisió dels llímits apropiats, el mensage tornat consta de la càrrega útil, possiblement seguit de qualsevol atra cosa que siga que estiga assignada en el buffer de memòria.

L'Agència Tributària de Canadà va reportar el robo de números de la Seguritat Social que pertanyen a 900 contribuents, i va declarar que varen ser accedits a través de l'explotació del fallo durant un periodo de sis hores el 8 d'abril de 2014.[21] Quan l'atac es va descobrir, l'agència va tancar el seu lloc web i va ampliar el determini de presentació dels contribuents del 30 d'abril al 5 de maig.[22] La primera versió corregida, 1.0.1g, va ser llançada el dia 7 d'abril de 2014.

  • En la película "Brazil" (1985), un error en un llinage per una mosca caiguda en la capçalera d'un teletipo provoca la detenció errònea d'un ciutadà inocent, en conseqüències fatals per a est; una sòrt de dramatisació basada en el cas de l'arna en l'ordenador Mark II en 1947.
  • La novela d'Ellen Ullman The Bug (2004) tracta de la busca d'error de software per part d'una probadora de software i un programador. El bug és malnomenat «The Jester» per la seua tendència a aparéixer en els moments més inoportunos i amenaçant el destí de la companyia.[23]
  • La película canadenca Control Alt Delete (2008) és una comèdia que tracta d'un programador que a finals de 1999 tracta de corregir errors per a previndre els problemes de l'error 2YK.[24]

Referències

  1. ↑ (en anglés) History's Worst Software Bugs' ' Pág. 1. Wired. Consultat el 20 de març de 2014.
  2. ↑ (en anglés) History's Worst Software Bugs. Pág. 2. Wired. Consultat el 20 de març de 2014.
  3. ↑ (en anglés) Airbus Cites Assembly Problem in A400M Crash. Consultat el 22 de juny de 2015.
  4. ↑ 4,0 4,1 «Boeing finds another software problem on the 737 Max» (en en). The valencià. Consultat el 16 de maig de 2020.
  5. ↑ «archive. org/web/20090610052743/http://www. nist. gov/public_affairs/releases/n02-10. htm Software bugs cost US economy dear». Archivat des d'el original, el 10 de juny de 2009. Consultat el 16 de maig de 2020.
  6. ↑ (en anglés) «Rear Admiral Grace Murray Hopper, USNR, (1906-1992)»: image: Photo #: NH 96566-KN. Naval History and Heritage Command. Consultat el 20 de març de 2014.
  7. ↑ bug
  8. ↑ L'arna que va volar dins d'un ordenador i l'orige de «bug informàtic» | Microsiervos (Llegendes Urbanes)
  9. ↑ «Did You Know? Edison Coined the Term “Bug”» (en en). IEEE Spectrum. Consultat el 16 de maig de 2020.
  10. ↑ «Was the first computer ‘bug’ a real insect?» (en en-uk) (html). Oxford Living Dictionaries. Archivat des d'el original, el 2 d'abril de 2017. Consultat el 15 de juliol de 2018. «The term in fact originates not with computer pioneers, but with engineers of a much earlier generation. The first example cited in the 20-volume historical Oxford English Dictionary is from the Pall Mall Gazette of 11 March 1889: "Mr. Edison, I was informed, had been up the two previous nights discovering 'a bug' in his phonograph - an expression for solving a difficulty, and implying that some imaginary insect has secreted itself inside and is causing all the trouble." It seems clear from this that the original ‘bug’, though it was indeed an insect, was in fact imaginary.»
  11. ↑ «Bug» (en en). World Wide Words. Consultat el 16 de maig de 2020.
  12. ↑ SEC (ed.): «[https://www.sec.gov/litigation/admin/2013/34-70694.pdf SECURITIES EXCHANGE ACT OF 1934 Release No. 70694 / October 16, 2013]» (en en). SEC. Consultat el 16 de maig de 2020.
  13. ↑ Graham Dunn. «Timeline of the twists and turns in the grounding of the Boeing 737 Max». Flightglobal.
  14. ↑ 14,0 14,1 14,2 Nancy Leveson. Addison-Wesley (ed.): «Medical Devices: The Therac-25 (PDF)». Safeware:System Safety and Computers. Archivat des d'el original, el 16 de febrer de 2008. Consultat el 16 de maig de 2020.
  15. ↑ «Computerized Radiation Therapy (PDF) reported by TROY GALLAGHER». Consultat el 12 de febrer de 2011.
  16. ↑ «DSA-1571-1 openssl -- predictable random number generator». Consultat el 16 de maig de 2020.
  17. ↑ «Critical crypto bug in OpenSSL opens two-thirds of the Web to eavesdropping» (en anglés). ArsTechnica. com. Consultat el 24 d'abril de 2014.
  18. ↑ Codenomicon Ltd. «Heartbleed Bug».
  19. ↑ Goodin, Donen. «Critical crypto bug in OpenSSL opens two-thirds of the Web to eavesdropping». Ars Technica.
  20. ↑ Hagai Bar-El. «OpenSSL "Heartbleed" bug: what's at risk on the server and what is not». Archivat des d'el original, el 13 d'abril de 2014. Consultat el 18 de maig de 2020.
  21. ↑ «Heartbleed bug: 900 SINs stolen from Revenue Canada».CBC News.
  22. ↑ «Canada Revenue Agency pushes tax deadline to May 5 after Heartbleed bug».Vancouver Sun.Consultat el 9 de juny de 2014.
  23. ↑ Ullman, Ellen (2004). Pushkin Press, Limited (ed.). The Bug. ISBN 9781908968142.
  24. ↑ «Control Alt Delete» (en en). IMDB. Consultat el 17 de maig de 2020.