Baco (informatică)

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Notă despre dezambiguizare.svg Dezambiguizare - "Bug" se referă aici. Dacă căutați alte semnificații, consultați Bug (dezambiguizare) .

Bugul [1] sau, de asemenea, în limba engleză bug ( / bʌg / ), în contextul programării computerului , este o anomalie care duce la funcționarea defectuoasă a software - ului , de exemplu prin producerea unui rezultat neașteptat sau incorect, de obicei datorită unei erori în scris codul sursă al unui program . Un bug, în esență, este un defect funcțional al software-ului.

Un program care conține un număr mare de bug-uri care interferează cu funcționalitatea sa este spus în jargon buggy (buggy în engleză), în timp ce actul de corecție din greșeli se spune debug sau remedierea bug-urilor.

Istorie

Fotografie a ceea ce este primul bug adevărat găsit pe un computer, 9 septembrie 1947

Utilizarea pe scară largă a termenului bug , care în engleză indică generic o mică insectă , este legată de o anecdotă curioasă datând din vremurile pionierilor în informatică : la 9 septembrie 1947 , locotenentul Grace Hopper și grupul ei au căutat cauza funcționarea defectuoasă a unui computer Mark II când, spre uimirea lor, au realizat că o molie s-a blocat între circuite. După îndepărtarea insectei (la 15:45), locotenentul a lipit molia îndepărtată de jurnalul computerului și a notat: „1545. Releul # 70 Panoul F (molie) în releu. Primul caz real de detectare a unei erori ". Această evidență este păstrată la Muzeul Național de Istorie Americană Smithsonian . [2]

De fapt, termenul bug în sensul de problemă tehnică a fost folosit cel puțin din 1870 : este menționat în acest sens într-o scrisoare de la Edison din 1878 , probabil că această utilizare a termenului este de origine scoțiană.

( EN )

„A fost așa în toate invențiile mele. Primul pas este o intuiție și vine cu o explozie, apoi apar dificultăți - acest lucru se dă și [atunci] „Bug-urile” - așa cum sunt numite astfel de mici defecte și dificultăți - se arată și lunile de supraveghere intensă, studiu iar forța de muncă este necesară înainte ca succesul sau eșecul comercial să fie atins cu siguranță. "

( IT )

„A fost așa pentru toate invențiile mele. Primul pas este o intuiție și vine ca o aprindere, apoi dificultățile cresc ... lucrurile nu mai merg și atunci „bug-urile” - așa cum se numesc aceste mici eșecuri și dificultăți - se manifestă și este nevoie luni de observație intensă, studiu și muncă înainte ca succesul sau eșecul comercial să fie atins cu siguranță. "

( Scrisoarea lui Edison către Puskas [3] )

Tipuri de erori

În timpul dezvoltării și executării unui cod sursă, pot apărea așa-numitele "erori de programare" care pot fi esențial împărțite în trei categorii principale: erori de sintaxă, erori de execuție sau de execuție și erori în logica programului.

  • Erorile de sintaxă sunt erori care sunt comise în faza de scriere a programului în limba aleasă, o fază care urmează proiectării algoritmului. De obicei, acestea sunt ortografiate greșit atunci când scrieți codul sau utilizați instrucțiunile. Erorile de sintaxă împiedică compilarea programului de către compilator, care apoi raportează de obicei prezența erorii. Acest tip de eroare este adesea raportat programatorului direct de editorul mediului de dezvoltare integrat (IDE) utilizat, facilitând astfel identificarea și rezolvarea acestuia.
  • Erorile de execuție sunt erori care pot apărea în etapa în care programul este executat (în engleză rulează ), chiar dacă algoritmul este corect și codul este compilat corect. Adesea acestea sunt legate de utilizarea memoriei de către programul însuși, care, de exemplu, încearcă să scrie într-o locație de memorie la care nu are acces. Aceste erori apar în principal în indexarea matricelor și în utilizarea pointerelor . Un alt exemplu: un set de date dă naștere la operațiuni ilegale (de exemplu, în unele limbi, o divizare la zero). Excepțiile și construcțiile lor de manipulare sunt unul dintre instrumentele principale pe care limbajele de programare le pun la dispoziție pentru a face față erorilor în timpul rulării.
  • Erorile logice (sau semantice) sunt erori făcute în faza de proiectare sau mai des în implementarea algoritmului : pot fi cauzate de o lipsă de înțelegere a problemei de calculat sau a constrângerilor pe care datele de intrare trebuie să le respecte sau în evaluarea testului algoritmului, sau din nou, pur și simplu, printr-o utilizare incorectă a limbajului care, totuși, nu dă naștere la erori de sintaxă. Aceste erori conduc în mod obișnuit la proiectarea unui algoritm care nu furnizează ieșirea necesară în una sau mai multe cazuri ale problemei de rezolvat sau la un program care nu se potrivește cu algoritmul dorit. Acestea sunt dificil de identificat și depanarea trebuie făcută adesea cu un depanator , un program care este de obicei integrat și în IDE.

Ceea ce a indicat referirea la compilator se aplică în mod natural și programelor interpretate , cum ar fi Python , PHP , Javascript , Matlab , pentru a numi câteva dintre cele mai populare. În aceste cazuri, având în vedere capacitatea de a rula comenzi interactiv , poate fi mai ușor să detectați erorile chiar și fără utilizarea unui depanator, care este încă disponibil în multe cazuri.

Foarte rar se poate întâmpla ca un compilator defect să producă o eroare chiar dacă codul sursă este corect.

Exemple

  • Eroare conceptuală - pseudobug : codul este scris corect, dar programul a fost destinat să facă ceva diferit, de exemplu: în C și C ++ un punct și virgulă izolat indică declarația goală, deci o buclă scrisă ca "pentru (i = 0; i <10; i ++); face ceva (); " va executa declarația nulă de zece ori și va apela o dată funcția „face ceva ()”.
  • Bucle infinite și recursivitate în care nu apare niciodată condiția necesară de oprire, de exemplu: în C sau C ++ "x = 0; în timp ce (0 <= x <= 10) {face ceva (); x ++;}" face nu se poate opri deoarece expresia logică este adevărată pentru orice valoare a lui x.
  • Folosind o variabilă neinițializată .
  • Folosind un tip de variabilă necorespunzător sau de dimensiuni incorecte, de exemplu: utilizați un tip de variabilă semnată de 8 biți întregi (denumită adesea int8) pentru a stoca valori pozitive între 0 și 255.
  • Pierderea resurselor , într-un sistem în care memoria este epuizată din cauza alocării repetate a noilor unități care nu au fost niciodată eliberate.
  • Depășirea bufferului , în care un program continuă să stocheze date chiar și după umplerea zonei de memorie intenționate inițial.
  • Pierderea datorată rotunjirii , de exemplu, a tipului de conversie a unui număr . Un caz tipic apare în expresii care implică operanzi de diferite tipuri, de exemplu: cu ordinea obișnuită de evaluare și conform regulilor comune de conversie de tip implicite, dacă i este o variabilă întreagă mai mică decât N calculați procentajul cu expresia i / N * 100 da zero, spre deosebire de i * 100 / N.

Eroare hardware

Mai puțin frecvent, termenul de eroare se poate referi la un defect de proiectare într-o componentă hardware care îl determină să se comporte în mod neașteptat sau altfel decât cel specificat de producător. De exemplu, o eroare cunoscută într-o componentă hardware este cea care, în 1994, a afectat microprocesorul Pentium nou-născut de atunci, care în anumite situații a dat rezultate incorecte chiar și în simple calcule aritmetice . Primii Pentiums au avut de fapt probleme în FPU ( Floating Point Unit , floating point unit sau coprocesor matematic), din cauza cărora au returnat valori incorecte ca ieșire în unele operații zecimale. La început a fost publicat un program care exclude această unitate; ulterior au fost înlocuite toate microprocesoarele.

Efecte

O eroare poate avea o mare varietate de efecte, unele au un impact redus asupra funcționalității programului și, prin urmare, pot rămâne necunoscute pentru o lungă perioadă de timp. În schimb, în cazul în care bug - ul este suficient de grave, aceasta poate provoca ca programul să se prăbușească sau atarna ceea ce duce la o negare a serviciului solicitat. Alții, calificați drept bug-uri de securitate, ar putea permite unui atacator să ocolească controalele de acces pentru a obține privilegii neautorizate.

Efectele unei erori pot fi extrem de grave: în anii 1980, o eroare în codul de control al unui dispozitiv de radioterapie , Therac-25 , a determinat aparatul să emită o cantitate excesivă de radiații și a fost direct responsabil de moartea unor pacienți. . [4]

În 2002 , Institutul Național de Standarde și Tehnologie a calculat că erorile și erorile software au cauzat o pierdere de 59 miliarde de dolari în SUA , echivalentul a 0,6% din PIB . [5]

Prevenirea

În timpul proiectării software- ului, introducerii datelor sau traducerii ( compilării , interpretării sau asamblării) codului sursă, pot apărea erori (în mare parte provenite din factori umani, cum ar fi neglijări sau inexactități) în executabilul obținut, care trebuie să constituie erorile .

Eroarea care cauzează o eroare este greu o eroare de sintaxă, deoarece compilatorul ar avertiza imediat programatorul oprind procesul de compilare; din acest motiv erorile logice la redactarea algoritmului sunt mult mai „insidioase”.

Industria software-ului este angajată continuu în cercetări privind prevenirea introducerii de bug-uri la scrierea programului, pentru a facilita scrierea și a reduce timpul de dezvoltare. Cele mai comune abordări și metode sunt:

  • Stil de programare

Dacă se constată o neconcordanță a datelor într-un program în timp ce rulează , acesta se poate opri imediat, astfel încât bug-ul să fie localizat. Alternativ, programul poate pur și simplu să informeze utilizatorul, să aștepte remedierea și să ruleze în continuare.

  • Metodologii de dezvoltare

Există mai multe sisteme de gestionare a activităților de programare pentru a vă asigura că numărul de bug-uri produse este cât mai puțin posibil. Această activitate face parte din disciplina de inginerie software și scopul său este de a elimina eroarea aflată deja în faza de proiectare a software-ului .

  • Ajutor pentru limbajul de programare

Limbajele de programare includ adesea caracteristici care îi ajută pe programatori să evite greșelile. De exemplu, dacă un programator folosește o variabilă de tip greșit, codul nu reușește să compileze, chiar dacă este corect din punct de vedere sintactic.

  • Analiza codului

Există instrumente de analiză a codului pentru a ajuta dezvoltatorii să verifice textul programului, cum ar fi compilatorul să poată identifica potențiale probleme.

Depanare

Pictogramă lupă mgx2.svg Același subiect în detaliu: Depanare .

De obicei, primul pas în identificarea unei erori este să găsiți o modalitate de ao reproduce cu ușurință. Odată ce eroarea este reprodusă, programatorul poate folosi un depanator pentru a urmări execuția în regiunea defectă și pentru a găsi unde eșuează programul. Uneori, o eroare nu se referă la o singură afirmație, ci reprezintă o eroare conceptuală din partea programatorului. Odată ce eroarea a fost identificată, se efectuează corectarea sau eliminarea.

Gestionarea erorilor

Este obișnuit să publicați un program cu erori cunoscute care nu sunt considerate grave; mai târziu, bug-ul ar putea fi remediat cu o nouă versiune sau printr-un patch .

Notă

  1. ^ Baco , în Treccani.it - ​​Treccani Vocabulary online , Institute of the Italian Encyclopedia. Adus pe 24 martie 2017 .
  2. ^(EN) Bug la Smithsonian Institution
  3. ^ Thomas P. Huges, American Genesis: A History of the American Genius for Invention , Penguin Books, 1989, p. 75.
  4. ^(EN) Cele mai grave bug-uri ale istoriei
  5. ^(RO) Bug-urile software costă economia SUA 59,6 miliarde USD Arhivat anual la 5 iunie 2012 în Arhiva Internet .

Bibliografie

  • G. Michael Schneider, Judith L. Gersting, Informatica , Apogeo, 2007.

Elemente conexe

Alte proiecte

linkuri externe

Controlul autorității LCCN ( EN ) sh97005329
Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT