Tillförlitlighet (datavetenskap)

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 19 maj 2021; kontroller kräver 4 redigeringar .

Inom datavetenskap (informatik) är tillförlitlighet  ett datorsystems förmåga att klara av felaktiga data och fel under utförandet av uppgifter [1] [2] . Tillförlitlighet kan täcka många områden inom datavetenskap , till exempel pålitlig programmering, pålitlig maskininlärning och pålitlig nätverkssäkerhet. Formella metoder som fuzzy testning är viktiga för att visa tillförlitlighet eftersom denna typ av testning involverar felaktiga eller oväntade indata. Alternativt kan ett körande systemfel användas för att testa stabiliteten. Olika kommersiella produkter utför tillförlitlighetstester genom mjukvaruanalys [3] .

Inledning

Generellt sett är det svårt att skapa tillförlitliga system som täcker varje punkt av möjliga fel på grund av det enorma antalet möjliga indata och deras kombinationer [4] . Eftersom det skulle ta för lång tid att testa alla indata och deras kombinationer, kan utvecklare inte uttömmande undersöka alla fall. Istället kommer utvecklaren att försöka generalisera sådana fall [5] . Tänk dig till exempel att du anger heltalsvärden . Vissa valda ingångar kan bestå av ett negativt tal, noll och ett positivt tal. Genom att använda dessa siffror för att testa programvara på detta sätt generaliserar utvecklaren uppsättningen av alla fall till tre siffror. Detta är en mer effektiv och hanterbar metod, men mer benägen att misslyckas. Testfallsgeneralisering är ett exempel på bara en metod för att hantera ett felproblem, nämligen ett fel på grund av ogiltig användarinmatning. System kan vanligtvis också misslyckas av andra orsaker, som att kopplas bort från nätet.

Trots detta måste komplexa system hantera eventuella fel. Det finns många exempel på sådana framgångsrika system. Några av de mest robusta systemen är under utveckling och kan lätt anpassas till nya situationer [4] .

Problem

Program och mjukvara är verktyg inriktade på en mycket specifik uppgift och är därför inte generaliserade och flexibla [4] . Observationer av system som Internet eller biologiska system visar dock en så viktig egenskap som anpassning till miljön . Ett sätt att anpassa biologiska system till miljön är att använda redundans [4] . Många organ är funktionellt överflödiga i en biologisk organism. Till exempel är njuren ett sådant exempel. Människor behöver vanligtvis bara en njure, men att ha en andra njure bevarar kroppens förmåga när den första misslyckas. Samma princip kan tillämpas på programvara, men det finns några problem. När principen om redundans tillämpas på datavetenskap avråds tillägg av blind kod. Att blindt lägga till kod leder till fler buggar, komplicerar systemet och gör det svårare att förstå [6] . Kod som inte ger förstärkning för redan befintlig kod är inte önskvärd. Istället måste den nya koden ha motsvarande funktionalitet så att om en funktion går sönder kan kod som ger samma funktion ersätta den med manuellt eller automatiskt programavstånd. För att göra detta måste den nya koden veta hur och när man ska beakta punkten för fel [4] . Detta innebär att mer logik måste läggas till i systemet. Men när systemet lägger till mer logik, komponenter och växer i storlek, blir det mer och mer komplext. När man bygger ett mer redundant system blir det alltså också mer komplext, och designers måste överväga att balansera redundans med komplexitet.

För närvarande syftar datorteknik inte till att skapa tillförlitliga system [4] . Snarare tenderar de att fokusera på skalbarhet och effektivitet. En av huvudorsakerna till att reliabilitet försummas idag är att det är svårt att göra det på ett generellt sätt [4] .

Områden

Tillförlitlig programmering

tillförlitlig programmering är en programmeringsstil som fokuserar på att hantera oväntad uppsägning och oväntade åtgärder [7] . Specialkod används för att på ett elegant sätt hantera dessa slutföranden och åtgärder genom att visa exakta och entydiga felmeddelanden. Dessa felmeddelanden gör det lättare för användaren att anpassa programmet.

Principer

Paranoia - När man skapar mjukvara utgår programmeraren från att användare vill bryta sin kod. Programmeraren antar också att hans egen skrivna kod kanske inte fungerar eller fungerar felaktigt.

Dumhet - programmeraren antar att användare kommer att försöka skriva in felaktiga, falska och felaktiga data. Som en konsekvens returnerar programmeraren ett entydigt, intuitivt felmeddelande till användaren som inte behöver söka efter felkoder. Felmeddelandet ska vara så korrekt som möjligt utan att vilseleda användaren så att problemet enkelt kan åtgärdas.

Farliga verktyg – Användare ska inte komma åt bibliotek, datastrukturer eller pekare till datastrukturer. Denna information bör döljas för användaren så att användaren inte av misstag kan ändra den och införa ett fel i koden. När sådana gränssnitt är byggda på rätt sätt använder användarna dem utan att hitta kryphål för att ändra gränssnittet. Gränssnittet bör redan vara korrekt implementerat, så användaren behöver inte göra ändringar. Därför fokuserar användaren enbart på sin kod.

Kan inte hända  - mycket ofta ändras koden och kan leda till det "omöjliga" fallet. Därför antas omöjliga fall vara extremt osannolika. Utvecklaren förstår hur man hanterar fall som är extremt osannolika och implementerar designen därefter.

Robust maskininlärning

Robust maskininlärning hänvisar i allmänhet till robustheten hos maskininlärningsalgoritmer. För att en maskininlärningsalgoritm ska anses tillförlitlig måste antingen testfelet matcha träningsfelet, eller så måste prestanda förbli stabil efter att ha lagt till lite brus till datasetet [8] .

Robust nätverksdesign

Robust nätverksdesign är studiet av nätverksdesign under varierande eller osäkra krav [9] . På sätt och vis är tillförlitligheten i nätverksdesign lika bred som i mjukvarudesign, på grund av de stora möjligheterna till förändring eller input.

Pålitliga algoritmer

Det finns algoritmer som gör fel i indata [10] eller under beräkningar [11] . I det här fallet konvergerar beräkningarna så småningom till den korrekta slutsatsen. Detta fenomen har kallats "correctness attraction" (engelsk correctness attraction) [11] .

Anteckningar

  1. En modellbaserad metod för robusthetstestning  // Dl.ifip.org. Hämtad 2016-11-13. Arkiverad 24 november 2020.
  2. 1990. IEEE Standard Glossary of Software Engineering Terminology, IEEE Standard 610.12-1990, definierar tillförlitlighet som "graden till vilken ett system eller en komponent kan fungera korrekt i närvaro av felaktig input eller stressande miljöförhållanden."
  3. Jack W. Baker, Matthias Schubert, Michael H. Faber. Om bedömning av robusthet  // Strukturell säkerhet 30. - 2008. - Nr 30 . — S. 253–267 . - doi : 10.1016/j.strusafe.2006.11.004 . Arkiverad 25 november 2020.
  4. ↑ 1 2 3 4 5 6 7 Gerald Jay Sussman. Bygga robusta system en uppsats  // Groups.csail.mit.edu. Hämtad 2016-11-13.. - 13 januari 2007. Arkiverad från originalet 12 augusti 2017.
  5. Joseph, Joby. Vikten av att göra generaliserade testfall - Software Testing Club - En onlineprogramvarutestgemenskap  // Software Testing Club. Hämtad 2016-11-13.. - 2009-09-21. Arkiverad från originalet den 24 juni 2016.
  6. Bygga robusta system en uppsats  // Agenter på webben: Robust programvara: Cse.sc.edu. Hämtad 2016-11-13. Arkiverad från originalet den 25 januari 2020.
  7. Robust programmering . Nob.cs.ucdavis.edu. (Hämtad 2016-11-13.). Hämtad 18 februari 2020. Arkiverad från originalet 17 februari 2020.
  8. El Sayed Mahmoud. Vad är definitionen av robustheten hos en maskininlärningsalgoritm? . researchgate. Hämtad 2016-11-13. Hämtad 23 februari 2020. Arkiverad från originalet 14 november 2020.
  9. Robust nätverksdesign (nedlänk) . Math.mit.edu. Hämtad 2016-11-13. Hämtad 24 februari 2020. Arkiverad från originalet 9 september 2016. 
  10. Carbin, Michael; Rinard, Martin C. Automatiskt identifiera kritiska indataregioner och kod 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 . Arkiverad från originalet den 13 november 2019.
  11. ↑ 1 2 Danglot, Benjamin; Preux, Philippe; Baudry, Benoit; Monperrus, Martin. Korrekthetsattraktion: en studie av stabiliteten hos mjukvarubeteende under runtime-störning  // Empirical Software Engineering. 23(4). - 21 december 2017. - S. 2086-2119 . - doi : 10.1007/s10664-017-9571-8 . - arXiv : 1611.09187 . Arkiverad från originalet den 24 februari 2020.