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] .
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] .
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] .
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.
PrincipperParanoia - 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 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 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.
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] .
Software kvalitet | |||||
---|---|---|---|---|---|
Egenskaber |
| ||||
Standarder og anbefalinger |
| ||||
Processer og organisationer |
|