Pålidelighed (datalogi)

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 19. maj 2021; checks kræver 4 redigeringer .

I datalogi (informatik) er pålidelighed  et computersystems evne til at klare fejlagtige data og fejl under udførelsen af ​​opgaver [1] [2] . Pålidelighed kan dække mange områder inden for datalogi , såsom pålidelig programmering, pålidelig maskinlæring og pålidelig netværkssikkerhed. Formelle metoder såsom fuzzy test er vigtige for at demonstrere pålidelighed, fordi denne type test involverer forkerte eller uventede input. Alternativt kan en kørende systemfejl bruges til at teste stabiliteten. Forskellige kommercielle produkter udfører pålidelighedstest gennem softwareanalyse [3] .

Introduktion

Generelt er det vanskeligt at skabe pålidelige systemer, der dækker alle mulige fejlpunkter på grund af det enorme antal mulige input og deres kombinationer [4] . Da det ville tage for lang tid at teste alle input og deres kombinationer, kan udviklere ikke udtømmende undersøge alle sager. I stedet vil udvikleren forsøge at generalisere sådanne tilfælde [5] . Forestil dig for eksempel, at du indtaster heltalsværdier . Nogle valgte input kan bestå af et negativt tal, nul og et positivt tal. Ved at bruge disse tal til at teste software på denne måde, generaliserer udvikleren sættet af alle sager til tre tal. Dette er en mere effektiv og håndterbar metode, men mere tilbøjelig til at fejle. Testcase-generalisering er et eksempel på blot én metode til at håndtere et fejlproblem, nemlig en fejl på grund af ugyldigt brugerinput. Systemer kan normalt også svigte af andre årsager, såsom at blive afbrudt fra nettet.

Alligevel skal komplekse systemer håndtere eventuelle fejl. Der er mange eksempler på sådanne succesfulde systemer. Nogle af de mest robuste systemer er under udvikling og kan nemt tilpasses nye situationer [4] .

Problemer

Programmer og software er værktøjer, der fokuserer på en meget specifik opgave, og er derfor ikke generaliserede og fleksible [4] . Imidlertid viser observationer af systemer såsom internettet eller biologiske systemer en så vigtig egenskab som tilpasning til miljøet . En måde at tilpasse biologiske systemer til miljøet er at bruge redundans [4] . Mange organer er funktionelt overflødige i en biologisk organisme. For eksempel er nyren et sådant eksempel. Folk har normalt kun brug for én nyre, men at have en nyre bevarer kroppens evner, når den første svigter. Det samme princip kan anvendes på software, men der er nogle problemer. Når princippet om redundans anvendes på datalogi, frarådes blind kodetilføjelse. Blind tilføjelse af kode fører til flere fejl, komplicerer systemet og gør det sværere at forstå [6] . Kode, der ikke giver forstærkning til allerede eksisterende kode, er uønsket. I stedet skal den nye kode have tilsvarende funktionalitet, så hvis en funktion går i stykker, kan kode, der giver den samme funktion, erstatte den ved hjælp af manuel eller automatisk softwareafstand. For at gøre dette skal den nye kode vide, hvordan og hvornår man skal overveje fejlpunktet [4] . Det betyder, at der skal tilføjes mere logik til systemet. Men efterhånden som systemet tilføjer mere logik, komponenter og vokser i størrelse, bliver det mere og mere komplekst. Når man bygger et mere redundant system, bliver det således også mere komplekst, og designere skal overveje at balancere redundans med kompleksitet.

I øjeblikket er computerteknologier ikke rettet mod at skabe pålidelige systemer [4] . De har snarere en tendens til at fokusere på skalerbarhed og effektivitet. En af hovedårsagerne til, at pålidelighed negligeres i dag, er, at det er svært at gøre det på en generel måde [4] .

Områder

Pålidelig programmering

pålidelig programmering er en programmeringsstil, der fokuserer på at håndtere uventet afslutning og uventede handlinger [7] . Speciel kode bruges til elegant at håndtere disse fuldførelser og handlinger ved at vise præcise og utvetydige fejlmeddelelser. Disse fejlmeddelelser gør det nemmere for brugeren at tilpasse programmet.

Principper

Paranoia - Når man laver software, antager programmøren, at brugerne ønsker at bryde deres kode. Programmøren antager også, at hans egen skrevne kode muligvis ikke virker eller virker forkert.

Dumhed - programmøren antager, at brugere vil forsøge at indtaste forkerte, falske og forkerte data. Som en konsekvens returnerer programmøren en utvetydig, intuitiv fejlmeddelelse til brugeren, som ikke kræver søgning efter fejlkoder. Fejlmeddelelsen skal være så nøjagtig som muligt uden at vildlede brugeren, så problemet let kan løses.

Farlige værktøjer - Brugere bør ikke få adgang til biblioteker, datastrukturer eller henvisninger til datastrukturer. Denne information skal være skjult for brugeren, så brugeren ikke ved et uheld kan ændre den og indføre en fejl i koden. Når sådanne grænseflader er bygget korrekt, bruger brugerne dem uden at finde smuthuller til at ændre grænsefladen. Grænsefladen skal allerede være korrekt implementeret, så brugeren behøver ikke at foretage ændringer. Derfor fokuserer brugeren udelukkende på deres kode.

Kan ikke ske  - meget ofte bliver koden ændret og kan føre til det "umulige" tilfælde. Derfor antages umulige tilfælde at være yderst usandsynlige. Udvikleren forstår, hvordan man håndterer sager, der er ekstremt usandsynlige, og implementerer designet i overensstemmelse hermed.

Robust maskinlæring

Robust maskinlæring refererer generelt til robustheden af ​​maskinlæringsalgoritmer. For at en maskinlæringsalgoritme kan anses for pålidelig, skal testfejlen enten matche træningsfejlen, eller ydeevnen skal forblive stabil efter tilføjelse af noget støj til datasættet [8] .

Robust netværksdesign

Robust netværksdesign er studiet af netværksdesign under variable eller usikre krav [9] . I en vis forstand er pålidelighed i netværksdesign lige så bred som i softwaredesign, på grund af de enorme muligheder for forandring eller input.

Pålidelige algoritmer

Der er algoritmer, der laver fejl i inputdata [10] eller under beregninger [11] . I dette tilfælde konvergerer beregningerne til sidst til den korrekte konklusion. Dette fænomen er blevet kaldt "correctness attraction" (engelsk correctness attraction) [11] .

Noter

  1. En modelbaseret tilgang til robusthedstestning  // Dl.ifip.org. Hentet 2016-11-13. Arkiveret 24. november 2020.
  2. 1990. IEEE Standard Glossary of Software Engineering Terminology, IEEE Standard 610.12-1990, definerer pålidelighed som "i hvilken grad et system eller en komponent kan fungere korrekt i nærvær af forkert input eller stressende miljøforhold."
  3. Jack W. Baker, Matthias Schubert, Michael H. Faber. Om vurdering af robusthed  // Strukturel sikkerhed 30. - 2008. - Nr. 30 . — S. 253–267 . - doi : 10.1016/j.strusafe.2006.11.004 . Arkiveret 25. november 2020.
  4. ↑ 1 2 3 4 5 6 7 Gerald Jay Sussman. Building Robust Systems et essay  // Groups.csail.mit.edu. Hentet 2016-11-13.. - 13. januar 2007. Arkiveret fra originalen 12. august 2017.
  5. Joseph, Joby. Vigtigheden af ​​at lave generaliserede testcases - Software Testing Club - Et online softwaretestfællesskab  // Software Testing Club. Hentet 2016-11-13.. - 2009-09-21. Arkiveret fra originalen den 24. juni 2016.
  6. Building Robust Systems et essay  // Agenter på nettet: Robust software: Cse.sc.edu. Hentet 2016-11-13. Arkiveret fra originalen den 25. januar 2020.
  7. Robust programmering . Nob.cs.ucdavis.edu. (Hentet 2016-11-13.). Hentet 18. februar 2020. Arkiveret fra originalen 17. februar 2020.
  8. El Sayed Mahmoud. Hvad er definitionen af ​​robustheden af ​​en maskinlæringsalgoritme? . researchgate. Hentet 2016-11-13. Hentet 23. februar 2020. Arkiveret fra originalen den 14. november 2020.
  9. Robust netværksdesign (downlink) . Math.mit.edu. Hentet 2016-11-13. Hentet 24. februar 2020. Arkiveret fra originalen 9. september 2016. 
  10. Carbin, Michael; Rinard, Martin C. Automatisk identifikation af kritiske inputregioner og kode i applikationer  // Proceedings of the 19th international symposium on Software testing and analysis - ISSTA '10. — s. 37–48 . — ISBN 9781605588230 . - doi : 10.1145/1831708.1831713 . Arkiveret fra originalen den 13. november 2019.
  11. ↑ 1 2 Danglot, Benjamin; Preux, Philippe; Baudry, Benoit; Monperrus, Martin. Korrekthedsattraktion: en undersøgelse af stabiliteten af ​​softwareadfærd under runtime perturbation  // Empirical Software Engineering. 23(4). - 21. december 2017. - S. 2086-2119 . - doi : 10.1007/s10664-017-9571-8 . - arXiv : 1611.09187 . Arkiveret fra originalen den 24. februar 2020.