În informatică (informatică), fiabilitatea este capacitatea unui sistem informatic de a face față datelor eronate și erorilor în timpul executării sarcinilor [1] [2] . Fiabilitatea poate acoperi multe domenii ale informaticii , cum ar fi programarea fiabilă, învățarea automată fiabilă și securitatea rețelei de încredere. Metodele formale, cum ar fi testarea neclară, sunt importante în demonstrarea fiabilității, deoarece acest tip de testare implică intrări incorecte sau neașteptate. Alternativ, o defecțiune a sistemului care rulează poate fi utilizată pentru a testa stabilitatea. Diverse produse comerciale efectuează teste de fiabilitate prin analiza software [3] .
În general, crearea unor sisteme fiabile care să acopere fiecare punct de posibilă defecțiune este dificilă din cauza numărului mare de intrări posibile și a combinațiilor acestora [4] . Deoarece ar dura prea mult timp pentru a testa toate intrările și combinațiile acestora, dezvoltatorii nu pot investiga în mod exhaustiv toate cazurile. În schimb, dezvoltatorul va încerca să generalizeze astfel de cazuri [5] . De exemplu, imaginați-vă că introduceți valori întregi . Unele intrări selectate pot consta dintr-un număr negativ, zero și un număr pozitiv. Folosind aceste numere pentru a testa software -ul în acest fel, dezvoltatorul generalizează setul tuturor cazurilor la trei numere. Aceasta este o metodă mai eficientă și mai ușor de gestionat, dar mai predispusă la eșec. Generalizarea cazului de testare este un exemplu de o singură metodă de rezolvare a unei probleme de eșec, și anume o eroare datorată unei intrări nevalide de utilizator. De obicei, sistemele pot eșua și din alte motive, cum ar fi deconectarea de la rețea.
Chiar și așa, sistemele complexe trebuie să gestioneze orice erori. Există multe exemple de astfel de sisteme de succes. Unele dintre cele mai robuste sisteme evoluează și pot fi adaptate cu ușurință la situații noi [4] .
Programele și software-ul sunt instrumente concentrate pe o sarcină foarte specifică și, prin urmare, nu sunt generalizate și flexibile [4] . Cu toate acestea, observațiile unor sisteme precum internetul sau sistemele biologice arată o caracteristică atât de importantă precum adaptarea la mediu . O modalitate de a adapta sistemele biologice la mediu este utilizarea redundanței [4] . Multe organe sunt redundante funcțional într-un organism biologic. De exemplu, rinichiul este un astfel de exemplu. Oamenii au nevoie de obicei doar de un singur rinichi, dar un al doilea rinichi păstrează capacitățile organismului atunci când primul eșuează. Același principiu poate fi aplicat software-ului, dar există unele probleme. Atunci când se aplică principiul redundanței la informatică, adăugarea codului oarbă este descurajată. Adăugarea orbește de cod duce la mai multe erori, complică sistemul și îl face mai greu de înțeles [6] . Codul care nu oferă consolidare pentru codul deja existent nu este de dorit. În schimb, noul cod trebuie să aibă o funcționalitate echivalentă, astfel încât, dacă o funcție se rupe, codul care oferă aceeași funcție să o poată înlocui folosind spațierea manuală sau automată a software-ului. Pentru a face acest lucru, noul cod trebuie să știe cum și când să ia în considerare punctul de eșec [4] . Aceasta înseamnă că trebuie adăugată mai multă logică sistemului. Dar pe măsură ce sistemul adaugă mai multă logică, componente și crește în dimensiune, devine din ce în ce mai complex. Astfel, atunci când se construiește un sistem mai redundant, acesta devine și mai complex, iar designerii trebuie să ia în considerare echilibrarea redundanței cu complexitatea.
În prezent, tehnologiile informatice nu au ca scop crearea de sisteme fiabile [4] . Mai degrabă, ei tind să se concentreze pe scalabilitate și eficiență. Unul dintre principalele motive pentru care fiabilitatea este neglijată astăzi este că este dificil să o faci într-un mod general [4] .
programarea de încredere este un stil de programare care se concentrează pe gestionarea încetării neașteptate și a acțiunilor neașteptate [7] . Codul special este folosit pentru a gestiona cu grație aceste completări și acțiuni prin afișarea unor mesaje de eroare precise și lipsite de ambiguitate. Aceste mesaje de eroare facilitează personalizarea programului de către utilizator.
PrincipiiParanoia - Când creează software, programatorul presupune că utilizatorii doresc să-și spargă codul. De asemenea, programatorul presupune că propriul său cod scris poate să nu funcționeze sau să funcționeze incorect.
Prostia - programatorul presupune că utilizatorii vor încerca să introducă date incorecte, false și incorecte. În consecință, programatorul returnează utilizatorului un mesaj de eroare clar, intuitiv, care nu necesită căutarea codurilor de eroare. Mesajul de eroare ar trebui să fie cât mai precis posibil, fără a induce utilizatorul în eroare, astfel încât problema să poată fi rezolvată cu ușurință.
Instrumente periculoase - Utilizatorii nu trebuie să acceseze biblioteci, structuri de date sau pointeri către structuri de date. Aceste informații ar trebui să fie ascunse utilizatorului, astfel încât utilizatorul să nu le modifice accidental și să nu introducă o eroare în cod. Când astfel de interfețe sunt construite corect, utilizatorii le folosesc fără să găsească lacune pentru a schimba interfața. Interfața ar trebui să fie deja implementată corespunzător, astfel încât utilizatorul nu trebuie să facă modificări. Prin urmare, utilizatorul se concentrează numai pe codul său.
Nu se poate întâmpla - foarte des codul este modificat și poate duce la cazul „imposibil”. Prin urmare, cazurile imposibile sunt considerate a fi extrem de improbabile. Dezvoltatorul înțelege cum să gestioneze cazurile care sunt extrem de puțin probabile și implementează designul în consecință.
Învățarea automată robustă se referă, în general, la robustețea algoritmilor de învățare automată. Pentru ca un algoritm de învățare automată să fie considerat fiabil, fie eroarea de testare trebuie să se potrivească cu eroarea de antrenament, fie performanța trebuie să rămână stabilă după adăugarea unui zgomot la setul de date [8] .
Proiectarea robustă a rețelei este studiul proiectării rețelei în condiții variabile sau incerte [9] . Într-un fel, fiabilitatea în proiectarea rețelei este la fel de largă ca și în proiectarea software-ului, datorită posibilităților vaste de schimbare sau intrare.
Există algoritmi care fac erori în datele de intrare [10] sau în timpul calculelor [11] . În acest caz, calculele ajung în cele din urmă la concluzia corectă. Acest fenomen a fost numit „correctness attraction” (atractie de corectitudine în engleză) [11] .
Calitatea software-ului | |||||
---|---|---|---|---|---|
Caracteristici |
| ||||
Standarde și recomandări |
| ||||
Procese și organizații |
|