Programvarefeil

En programvarefeil , feil eller ganske enkelt feil (også kjent som en feil ) er et problem i et dataprogram eller programvaresystem som utløser et uønsket resultat. Programmer som hjelper til med å oppdage og eliminere programvarefeil kalles debuggere .

Blant de mange bemerkelsesverdige hendelsene forårsaket av denne typen feil er strålebehandlingsmaskinen Therac-25 på 1980- tallet, ødeleggelsen av romsonden Mariner 1 i 1962, [ 1 ] Ariane 5501 i 1996, [ 2 ] og Airbus A400M i 2015 [ 3 ] Også kjent var AT&T - nettverkshendelsene i 1990, eller Boeing 737 MAX -ulykkene i 2018 og 2019 som førte til at flyvningene deres ble suspendert i flere måneder på grunn av feil i MCAS-programvaren. [ 4 ]

I 2002 fant en studie på oppdrag fra det amerikanske handelsdepartementets National Institute of Standards and Technology at datafeil koster den amerikanske økonomien 59,5 milliarder dollar i året, eller 0,6 % av BNP. [ 5 ]

Opprinnelsen til begrepet

Den 9. september 1947 rapporterte fysiker og matematiker Grace Murray Hopper og andre som jobbet ved Harvard University på Mark II at datamaskinen hadde en feil i elektromagnetisk relé #70 på panel F. Da reléet ble undersøkt fant elektrifisert feil som førte til at reléet holdt seg åpent. Hopper tapet feilen til loggen med kommentaren: [ 6 ]

'Første faktiske tilfelle av feil ble funnet.' 'Første virkelige tilfelle av «bug» funnet.'

Denne hendelsen blir feilaktig referert til som opprinnelsen til bruken av det engelske uttrykket bug ("bug") for å indikere et problem i en enhet eller et system. [ 7 ] ​[ 8 ]​ Faktisk var begrepet insekt allerede en del av det engelske språket, i det minste siden Thomas Alva Edison brukte det i notatene sine i 1872, i et brev i 1878 for å referere til mekaniske eller elektriske defekter, [ 9 ] og i 1889 med henvisning til interferens og funksjonsfeil i en fonograf. [ 10 ] Hopper kan først ha assosiert det med informatikk, i dette tilfellet relatert til et ekte insekt. På den annen side, selv på 50- tallet av 1900-tallet , brukte Hopper også begrepet debug på engelsk når han snakket om feilsøkingsfeil i programmeringskoder. Den første registrerte bruken av begrepet er i 1945 Journal of the Royal Aeronautical Society : [ 11 ]

"Det varierte fra pre-design utvikling av essensielle komponenter, gjennom stadiet med typetest og flytest og "feilsøking" til senere utvikling av motoren." "Det gikk fra forhåndsutvikling av essensielle komponentdesign, gjennom testing, testflyging og feilsøking og endte med motorutvikling."

Vanlige programmeringsfeil

Installasjons- eller programmeringsfeil

Programmeringsspråk feilkoder

De fleste programmeringsspråk har minst to typer feil som lar programmerere håndtere programfeil på en effektiv måte som ikke er aggressiv mot sluttbrukeren. Disse feilene er kompileringsfeil og kjøretidsfeil .

Kompileringsfeil forhindrer vanligvis kildekoden i å komme inn i et kjørbart program , mens kjøretidsfeil er spesifikke situasjoner der en hendelse utenfor programmet forhindrer kjøringen. Regelmessig må en effektiv programmerer prøve å finne ut hvordan han skal reagere på disse hendelsene, slik at det er programmet og ikke brukeren eller operativsystemet som løser problemet. For eksempel kan en ubehandlet feilblokk gjøre følgende:

Åpne filen "minfil" for skriving begynne å skrive data til filen min lukk filen

Hvis "minfil" ikke eksisterer (eller programmet eller brukeren ikke har tilstrekkelige rettigheter til å åpne den), vil operativsystemet returnere en feil som programmet ikke vil fange opp, og vi vil få en melding som "Filen "minfil" kan ikke åpnes for skriving" og knapper for å prøve på nytt, avbryte og avbryte (i Windows-operativsystemet), som ikke har noen annen handling enn å gjenta seg selv på ubestemt tid uten mulighet for å forlate den syklusen annet enn å avslutte programmet med vold. En kode som vil fange opp feilen ved kjøretid vil være:

Åpne filen "minfil" for skriving Hvis operativsystemet tillater det begynn å skrive data til "min fil" hvis du ikke tillot det informerer brukeren om hva som skjer returnerer brukeren til et punkt der det ikke er noen konflikt (hovedmenyen, for eksempel) fortsette å fungere normalt

Ulike programmeringsspråk tillater forskjellige logiske konstruksjoner for programmerere å fange opp og løse feil under kjøring, for eksempel assert , try , og på feilsetninger i forskjellige programmeringsspråk.

Programdesignfeil

Implikasjoner

Typen og mengden skade forårsaket av en programvarefeil kan påvirke beslutningsprosesser og retningslinjer for programvarekvalitet. I applikasjoner for bemannet romfart og for bil, må kvalitetskontroller av programvare være overlegne.

Viktige tilfeller

Y2K

Problemet med år 2000 (Y2K) kan bli en økonomisk kollaps fordi mange programmer ville tolke år 2000 som om det var år 1900. Tilpasnings- og korrigeringsarbeidet til programmer unngikk alvorlige problemer.

Knight Capital

Forstyrrelse av New York-børsen i 2012. 1. august 2012 forårsaket Knight Capital en forstyrrelse av aksjemarkedet som førte til at den mistet 75 % av markedsverdien på to dager. Knight Capital hadde SMARS-programvaren som automatisk administrerte, i høy hastighet og algoritmisk, ordrene som skulle utføres i markedet. Inne i koden hadde jeg «Power Peg»-funksjonaliteten, som jeg ikke hadde brukt siden 2003. Den var ikke fjernet og var tilgjengelig hvis den ble kalt. Telleren av aksjene solgt i hver ordre ble tilfeldigvis utført av en annen del av koden utenfor "Power Peg" siden 2005. Fra og med 27. juli 2012 begynte installasjonen av den nye SMARS-programvaren i faser på serverne over flere dager. Den nye programvaren inneholdt en tag som i den gamle aktiverte "Power Peg." En tekniker glemte å sikkerhetskopiere den nye RLP-koden til en av de åtte SMARS-serverne som håndterte de automatiserte aksjekjøps- og salgsordrene. 1. august 2012 sendte den ikke-oppdaterte serveren som kjørte den gamle «Power Peg»-koden millioner av bestillinger fordi telleren av handlinger utført i hver ordre ikke ble kommunisert til SMARS, og derfor stoppet kjøpsprosessen aldri. I et forsøk på å fikse problemet avinstallerte de den nye RLP-koden fra de syv serverne som fungerte riktig, noe som gjorde problemet verre. På 45 minutter utførte den 4 millioner handler på 154 aksjer som flyttet 397 millioner aksjer, mens den i stedet burde ha utført 212 små ordrer. Knight Capital tapte 460 millioner dollar og ble bøtelagt 12 millioner dollar av SEC for brudd på børsbestemmelser. [ 12 ]

Boeing 737 MAX

To ulykker med Boeing 737 MAX-flyene i 2018 og 2019 førte til at FAA initierte Flight Suspension av Boeing 737 MAX i flere måneder den 13. mars 2019 på grunn av feil i MCAS (Maneuvering Characteristics Augmentation System) programvare. Characteristic Augmentation Augmentation. System). [ 4 ] 346 mennesker omkom i ulykkene. FAA tillot produsenter som Boeing å utstede flysertifikater for sine fly. I november 2019 suspenderte FAA Boeings mulighet til å utstede sertifikater for MAX-fly.

MCAS i MAX ble designet for å aktiveres ved å bruke signalet fra en av flyets to angrepsvinkelsensorer, noe som gjør det mottakelig for enkeltpunktsfeil . Når MCAS oppdager at flyet er i manuell modus med klaffene oppe og høy angrepsvinkel, justerer den den horisontale stabilisatoren for å senke nesen slik at piloten ikke klatrer for fort og forårsaker stopp. Selv om MCAS-systemet kunne forårsake utilsiktede dykk, ble det ikke nevnt i fly- og treningsmanualene, så pilotene var ikke klar over det. [ 13 ] I mars 2019 ble 387 MAX-fly satt på bakken, og utførte 8600 ukentlige flyvninger for 59 flyselskaper. I januar 2020 estimerte Boeing at de i 2019 tapte 18,4 milliarder dollar og fikk kansellert 183 MAX-ordrer. I 2019 varierte prisen på en Boeing 737 MAX fra 100 til 135 millioner USD.

Therac-25

Therac -25 var en strålebehandlingsmaskin produsert av AECL, etterfølgeren til Therac-6 og Therac-20-modellene (tidligere enheter ble produsert i samarbeid med CGR). Enheten ble kompromittert i minst seks ulykker mellom 1985 og 1987, der flere pasienter fikk overdoser med stråling. Tre av pasientene døde som en direkte konsekvens. Disse ulykkene stilte spørsmål ved påliteligheten til programvarekontroll av kritiske sikkerhetssystemer, og ble en casestudie innen medisinsk informatikk og programvareteknikk. Undersøkelseskommisjonen konkluderte med at de primære årsakene til ulykkene var dårlig utviklingspraksis, kravanalyse og dårlig programvaredesign, og ikke isolerte feil i kildekoden. Spesielt Therac-25-programmet ble designet på en slik måte at det var nesten umulig å finne og fikse feil automatisk.

Systemet brukte ikke et standard operativsystem. I stedet kjørte den et proprietært operativsystem skrevet i PDP-11 assembly-språk for å kjøre på 32K PDP-11 /23-datamaskinen. [ 14 ]​ Når systemet rapporterte en feil og stoppet røntgenbildene, viste det bare meldingen "FEIL" etterfulgt av et tall fra 1 til 64. Maskinhåndboken forklarte ikke problemet eller viste kodefeil, og derfor operatøren endte opp med å lukke advarselen og fortsette behandlingen. AECL-ansatte og maskinoperatører trodde i utgangspunktet ikke på pasientklager på grunn av deres høye tillit til maskinen.

Engineering hadde gjenbrukt kode fra eldre modeller (Therac-6 og Therac-20), som hadde mekaniske sikkerhetssystemer.

Feilen oppsto bare når en bestemt sekvens av nøkler raskt ble lagt inn i VT100 -terminalen , som kontrollerte Therac-25s PDP-11- datamaskin. Operatøren hadde fylt ut alle boksene og var i bestillingsboksen da han skjønte at det var en feil i stråletypeboksen som inneholdt en X (røntgen) når den skulle inneholde en E (elektronstråle). For å rette det brukte jeg -markøren for å gå opp til boksen, skrive en E og gå ned med -markøren til kommandoboksen, skrive en B og trykke Enter . Den komplette sekvensen var E B Enter . Hvis denne sekvensen ble utført på mindre enn 8 sekunder, produserte maskinen en stråling som kunne være opptil 1000 ganger den som var ment å bli påført.

Dette skjedde svært sjelden, og det var ukjent at det var en slik rasebetingelsesfeil der utgangen eller tilstanden til en prosess er avhengig av en sekvens av hendelser som blir utført i vilkårlig rekkefølge og kommer til å fungere på samme ressurs. En feil kan oppstå når slike hendelser ikke kommer (utføres) i den rekkefølgen planleggeren forventet.

Programmet endret flaggvariabelen "Class3" ved å øke den hver gang den kjørte tilpasningstestrutinen, i stedet for å tilordne den en fast verdi. Variabelen "Class3" var 1 byte lang og dens mulige verdier varierte fra 0 til 255. Når verdien var 255 og 1 ble lagt til, ble variabelen "Class3" lik 0. Når variabelen "Class3" var lik 0, indikerte det at elektronstrålen kunne utløses og kollimatorens posisjon ble ikke kontrollert. [ 14 ]

Tilpasningstestrutinen ble kjørt hundrevis av ganger hver økt for én pasient. En gang i hver 256 utførelse av rutinen hadde variabelen "Class3" verdien 0 (utilsiktet), kollimatoren ble ikke sjekket, og eventuelle kollimatorfeil ble ikke oppdaget. Overdosen skjedde hvis operatøren trykket på Set -knappen akkurat i det øyeblikket variabelen "Class3" endret seg fra 255 til 0 (overløp). Programvaren brukte deretter den maksimale effekten på 25 MeV uten å ha målet på plass og uten skanning. AECL korrigerte dette problemet ved å sette variabelen "Class3" til en annen verdi enn 0 hver gang den gikk gjennom tilpasningstestrutinen, i stedet for å øke den. [ 14 ]​ [ 15 ]

OpenSSL

En bruker av Debian OpenSSL-pakken rapporterte en melding om retting. I ferd med å fikse problemet, rotet en programmerer tilfeldig tallgeneratoren. Den mangelfulle oppdateringen ble utgitt i september 2006 med OpenSSL versjon 0.9.8c-1. Før april 2008 ble ikke problemet oppdaget. Alle kryptografiske nøkler generert med den versjonen er kompromittert fordi "tilfeldige" tall er lett forutsigbare, og data kryptert med dem er også sårbare. Dette utgjorde en trussel for mange applikasjoner som er avhengige av kryptering som S/MIME , Tor , tilkoblinger beskyttet av SSL eller TLS og SSH . Rettet i OpenSSL versjon 0.9.8c-4etch3. [ 16 ]

Heartbleed ( spansk : hemorrhage of heart) er et programvaresikkerhetshull i OpenSSL open source - biblioteket , kun sårbart i versjon 1.0.1f , som lar en angriper lese minnet til en server eller en klient, slik at det for eksempel kan hentes SSL private nøkler fra en server. [ 17 ]

Den sårbare koden ble bredt tatt i bruk og brukt med utgivelsen av OpenSSL versjon 1.0.1 14. mars 2012. Heartbeat-støtte ble aktivert som standard, noe som førte til at berørte versjoner var sårbare som standard. [ 18 ]​ [ 19 ]​ [ 20 ]

RFC 6520 Heartbeat Extension tester sikre TLS/DTLS-kommunikasjonskoblinger ved å tillate en datamaskin i den ene enden av en tilkobling å sende en "Heartbeat Request"-melding, som består av en nyttelast , typisk en tekststreng, sammen med lengden på nevnte nyttelast som et 16-bits heltall. Den mottakende datamaskinen må da sende nøyaktig samme nyttelast tilbake til avsenderen. Berørte versjoner av OpenSSL tildeler en minnebuffer for meldingen som skal returneres basert på lengdefeltet i forespørselsmeldingen, uten hensyn til den faktiske nyttelaststørrelsen til den meldingen. På grunn av denne unnlatelsen av å kontrollere riktige grenser, består den returnerte meldingen av nyttelasten, muligens etterfulgt av alt annet som er tildelt i minnebufferen . Canada Revenue Agency rapporterte tyveri av personnummer som tilhører 900 skattebetalere, og opplyser at de ]21[ble åpnet gjennom å utnytte feilen over en seks-timers periode 8. april 2014. [ 22 ] Den første faste versjonen, 1.0.1g, ble utgitt 7. april 2014.

Cyberpunk 2077

Cyberpunk 2077 var en flott sak om feil, spillet på tidspunktet for utgivelsen var fullt av feil og bugs, over tid fikset de det, men først ga de det kallenavnet: ''cyberbugs''

I populærkulturen

Se også

Referanser

  1. " Historiens verste programvarefeil." Side 1. Kablet . Hentet 20. mars 2014.
  2. " Historiens verste programvarefeil." Side 2. Kablet . Hentet 20. mars 2014.
  3. ^ " Airbus siterer monteringsproblem i A400M-krasj." Hentet 22. juni 2015.
  4. ^ a b O'Kane, Sean (6. februar 2020). "Boeing finner et annet programvareproblem på 737 Max" . The Verge (på engelsk) . Hentet 16. mai 2020 . 
  5. ^ "Programvarefeil koster amerikansk økonomi dyrt" . 10. juni 2009. Arkivert fra originalen 10. juni 2009 . Hentet 16. mai 2020 . 
  6. ^ " Rear Admiral Grace Murray Hopper, USNR, (1906-1992)": Bilde: Foto #: NH 96566-KN. Sjøhistorie- og kulturarvkommandoen. Hentet 20. mars 2014.
  7. feil
  8. Møllen som fløy inn i en datamaskin og opprinnelsen til "datafeil" | Microserfs (Urban Legends)
  9. ^ Magoun, Alexander B. (1. august 2013). "Visste du? Edison laget begrepet "Bug"» . IEEE Spectrum (på engelsk) . Hentet 16. mai 2020 . 
  10. "Var den første datamaskinens 'feil' et ekte insekt?" (html) . Oxford Living Dictionaries (på en-uk) . Arkivert fra originalen 2. april 2017 . Hentet 15. juli 2018 . «Begrepet kommer faktisk ikke fra datapionerer, men fra ingeniører fra en mye tidligere generasjon. Det første eksemplet sitert i den historiske Oxford English Dictionary med 20 bind er fra Pall Mall Gazette av 11. mars 1889: "Mr. Edison, ble jeg informert om, hadde vært oppe de to foregående nettene og oppdaget "en feil" i sin fonograf - en uttrykk for å løse en vanskelighet, og antyde at et eller annet imaginært insekt har skilt seg ut på innsiden og forårsaker alle problemer." Det virker klart ut fra dette at den opprinnelige 'feilen', selv om den faktisk var et insekt, faktisk var imaginær. » 
  11. "Bug" . Verdensomspennende ord . Hentet 16. mai 2020 . 
  12. SEC, red. (16. oktober 2013). "SECURITIES EXCHANGE ACT OF 1934 Release No. 70694 / October 16, 2013" . SEC (på engelsk) . Hentet 16. mai 2020 . 
  13. Graham Dunn (13. mars 2020). "Tidslinje for vendingene i grunnstøtingen til Boeing 737 Max" . Flightglobal . 
  14. abc Nancy Leveson (1995). "Medisinske enheter: Therac-25 (PDF)" . I Addison-Wesley, red. Sikkerhet: Systemsikkerhet og datamaskiner . Arkivert fra originalen 16. februar 2008 . Hentet 16. mai 2020 . 
  15. ^ "Computerized Radiation Therapy (PDF) rapportert av TROY GALLAGHER" . Hentet 12. februar 2011 .  
  16. ^ "DSA-1571-1 openssl - forutsigbar tilfeldig tallgenerator" . Hentet 16. mai 2020 .  
  17. ^ Goodin, Dan (7. april 2014). "Kritisk kryptofeil i OpenSSL åpner to tredjedeler av nettet for avlytting" . ArsTechnica.com (på engelsk) . Hentet 24. april 2014 . 
  18. Codenomicon Ltd (8. april 2014). Heartbleed Bug . 
  19. Goodin, Dan (8. april 2014). "Kritisk kryptofeil i OpenSSL åpner to tredjedeler av nettet for avlytting" . Ars Technica . 
  20. Hagai Bar-El (9. april 2014). "OpenSSL "Heartbleed"-feil: hva er i faresonen på serveren og hva er det ikke" . Arkivert fra originalen 13. april 2014 . Hentet 18. mai 2020 . 
  21. Heartbleed-feil: 900 SIN-er stjålet fra Revenue Canada , CBC News , 14. april 2014  .
  22. ^ Canada Revenue Agency skyver skattefristen til 5. mai etter Heartbleed bug , Vancouver Sun , 13. april 2014, arkivert fra originalen 16. juni 2014 , hentet 9. juni 2014  .
  23. Ulman, Ellen (2004). Pushkin Press, Limited, red. The Bug . ISBN 9781908968142 .   
  24. "Kontroller Alt Delete" . IMDB (på engelsk) . Hentet 17. mai 2020 . 

Eksterne lenker