Az informatikában (informatikában) a megbízhatóság a számítógépes rendszer azon képessége, hogy megbirkózik a feladatok végrehajtása során fellépő hibás adatokkal és hibákkal [1] [2] . A megbízhatóság a számítástechnika számos területére kiterjedhet , például a megbízható programozásra, megbízható gépi tanulásra és megbízható hálózati biztonságra. Az olyan formális módszerek, mint a fuzzy tesztelés, fontosak a megbízhatóság kimutatásában, mivel az ilyen típusú tesztelés helytelen vagy váratlan bevitelekkel jár. Alternatív megoldásként egy futó rendszerhiba is használható a stabilitás tesztelésére. Különféle kereskedelmi termékek megbízhatósági tesztelést végeznek szoftverelemzés segítségével [3] .
Általánosságban elmondható, hogy a lehetséges meghibásodások minden pontját lefedő megbízható rendszerek létrehozása a lehetséges bemenetek és azok kombinációinak nagy száma miatt nehéz [4] . Mivel túl sokáig tartana az összes bemenet és kombinációik tesztelése, a fejlesztők nem tudnak minden esetet kimerítően megvizsgálni. Ehelyett a fejlesztő megpróbálja általánosítani az ilyen eseteket [5] . Képzelje el például, hogy egész számokat ad meg . Néhány kiválasztott bemenet negatív számból, nullából és pozitív számból állhat. Ha ezeket a számokat használja a szoftver ilyen módon történő tesztelésére, a fejlesztő az összes eset halmazát három számra általánosítja. Ez egy hatékonyabb és kezelhetőbb módszer, de hajlamosabb a kudarcra. A teszteset általánosítása csak egy példa a hibaprobléma kezelésére, nevezetesen az érvénytelen felhasználói bevitelből adódó hiba kezelésére. A rendszerek általában más okok miatt is meghibásodhatnak, például a hálózatról való leválasztás miatt.
Ennek ellenére az összetett rendszereknek kezelniük kell az esetleges hibákat. Számos példa van ilyen sikeres rendszerre. A legrobusztusabb rendszerek némelyike fejlődik, és könnyen adaptálható az új helyzetekhez [4] .
A programok és szoftverek olyan eszközök, amelyek egy nagyon konkrét feladatra összpontosítanak, ezért nem általánosíthatók és nem rugalmasak [4] . Az olyan rendszerek megfigyelései, mint az internet vagy a biológiai rendszerek azonban olyan fontos jellemzőt mutatnak, mint a környezethez való alkalmazkodás . A biológiai rendszerek környezethez igazításának egyik módja a redundancia alkalmazása [4] . Számos szerv funkcionálisan redundáns egy biológiai szervezetben. Például a vese egy ilyen példa. Az embereknek általában csak egy vesére van szükségük, de a második vese megőrzi a szervezet képességeit, ha az első meghibásodik. Ugyanez az elv alkalmazható a szoftverekre is, de vannak problémák. Ha a redundancia elvét alkalmazzuk a számítástechnikában, a vakkód hozzáadása nem ajánlott. A kód vakon történő hozzáadása több hibához vezet, bonyolítja a rendszert és megnehezíti annak megértését [6] . Nem kívánatos olyan kód, amely nem erősíti meg a már meglévő kódot. Ehelyett az új kódnak egyenértékű funkcionalitással kell rendelkeznie, hogy ha egy funkció megszakad, az ugyanazt a funkciót biztosító kód kézi vagy automatikus szoftvertávolsággal helyettesíthesse azt. Ehhez az új kódnak tudnia kell, hogyan és mikor kell figyelembe venni a meghibásodási pontot [4] . Ez azt jelenti, hogy több logikát kell hozzáadni a rendszerhez. De ahogy a rendszer egyre több logikát, komponenseket ad hozzá, és a mérete növekszik, egyre bonyolultabbá válik. Így egy redundánsabb rendszer felépítésekor az is bonyolultabbá válik, és a tervezőknek mérlegelni kell a redundancia és a komplexitás egyensúlyát.
A számítógépes technológiák jelenleg nem a megbízható rendszerek létrehozására irányulnak [4] . Inkább a méretezhetőségre és a hatékonyságra helyezik a hangsúlyt. Az egyik fő ok, amiért manapság elhanyagolják a megbízhatóságot, az az, hogy nehéz általánosan megvalósítani [4] .
A megbízható programozás egy olyan programozási stílus, amely a váratlan leállás és a váratlan műveletek kezelésére összpontosít [7] . Speciális kóddal kecsesen kezeljük ezeket a befejezéseket és műveleteket, pontos és egyértelmű hibaüzenetek megjelenítésével. Ezek a hibaüzenetek megkönnyítik a felhasználó számára a program testreszabását.
AlapelvekParanoia – A szoftver létrehozásakor a programozó feltételezi, hogy a felhasználók meg akarják törni a kódjukat. A programozó azt is feltételezi, hogy a saját írott kódja esetleg nem vagy hibásan működik.
Hülyeség - a programozó azt feltételezi, hogy a felhasználók megpróbálnak helytelen, hamis és helytelen adatokat beírni. Ennek eredményeként a programozó egyértelmű, intuitív hibaüzenetet küld a felhasználónak, amely nem igényli hibakódok keresését. A hibaüzenetnek a lehető legpontosabbnak kell lennie a felhasználó félrevezetése nélkül, hogy a probléma könnyen megoldható legyen.
Veszélyes eszközök – A felhasználók nem férhetnek hozzá könyvtárakhoz, adatstruktúrákhoz vagy adatstruktúrákra mutató mutatókhoz. Ezt az információt el kell rejteni a felhasználó elől, hogy a felhasználó ne tudja véletlenül megváltoztatni és hibát bevinni a kódba. Ha az ilyen interfészek megfelelően vannak megépítve, a felhasználók anélkül használják őket, hogy kiskapukat találnának az interfész megváltoztatásához. A felületnek már megfelelően implementáltnak kell lennie, így a felhasználónak nem kell változtatásokat végrehajtania. Ezért a felhasználó kizárólag a kódjára összpontosít.
Nem történhet meg – nagyon gyakran a kód módosul, és ez a „lehetetlen” esethez vezethet. Ezért a lehetetlen eseteket rendkívül valószínűtlennek tekintjük. A fejlesztő tudja, hogyan kell kezelni a rendkívül valószínűtlen eseteket, és ennek megfelelően hajtja végre a tervezést.
A robusztus gépi tanulás általában a gépi tanulási algoritmusok robusztusságára utal. Ahhoz, hogy egy gépi tanulási algoritmust megbízhatónak lehessen tekinteni, vagy a teszthibának meg kell egyeznie a betanítási hibával, vagy a teljesítménynek stabilnak kell maradnia, miután némi zajt hozzáadott az adatkészlethez [8] .
A robusztus hálózattervezés a hálózattervezés tanulmányozása változó vagy bizonytalan követelmények mellett [9] . Bizonyos értelemben a megbízhatóság a hálózattervezésben ugyanolyan széles, mint a szoftvertervezésben, a változtatás vagy a bevitel hatalmas lehetőségeinek köszönhetően.
Vannak olyan algoritmusok, amelyek hibáznak a bemeneti adatokban [10] vagy a számítások során [11] . Ebben az esetben a számítások végül a helyes következtetéshez konvergálnak. Ezt a jelenséget "korrektségi vonzerőnek" (angolul correctness attraction) [11] nevezték el .
Szoftver minőség | |||||
---|---|---|---|---|---|
Jellemzők |
| ||||
Szabványok és ajánlások |
| ||||
Folyamatok és szervezetek |
|