A számítástechnikában a robusztusság egy számítógépes rendszer azon képessége, hogy megbirkózzon a végrehajtás során fellépő hibákkal , valamint a hibás bemenettel.1990. IEEE Standard Glossary of Software Engineering Terminology, IEEE Std 610.12-1990 A robusztusság a számítástechnika számos területét felölelheti, például a robusztus programozást, a robusztus gépi tanulást és a robusztus biztonsági hálózatot. A formális technikák, mint például a fuzz tesztelés, elengedhetetlenek a robusztusság bemutatásához, mivel ez a fajta tesztelés érvénytelen vagy váratlan bemeneteket tartalmaz. Alternatív megoldásként a szándékos hibainjektálás is használható a robusztusság tesztelésére. Különböző kereskedelmi termékek végeznek szoftverelemzés robusztussági tesztelését.

Bevezetés Általánosságban elmondható, hogy a minden lehetséges hibapontot lefedő, robusztus rendszerek építése nehéz feladat a lehetséges bemenetek és bemeneti kombinációk hatalmas száma miatt. Mivel az összes bemenet és bemeneti kombináció tesztelése túl sok időt venne igénybe, a fejlesztők nem tudják kimerítően végigvizsgálni az összes esetet. Ehelyett a fejlesztők megpróbálják általánosítani ezeket a szituációkat. Például egész számok bevitele esetén a kiválasztott tesztadatok állhatnak egy negatív számból, a nullából és egy pozitív számból. Amikor a fejlesztő ezeket a számokat használja a szoftver tesztelésére, az összes valós szám halmazát lényegében három számra általánosítja. Ez a módszer hatékonyabb és könnyebben kezelhető, ugyanakkor nagyobb a meghibásodás kockázata. A tesztesetek általánosítása csupán egyetlen példa a hibák – közelebbről az érvénytelen felhasználói bemenetből eredő hibák – kezelésére szolgáló technikákra. A rendszerek természetesen más okokból is meghibásodhatnak, mint például a hálózati kapcsolat megszakadása.

Ettől függetlenül a komplex rendszereknek a felmerülő hibákat megfelelő módon (ahogy az angol informatikai szaknyelv fogalmaz: „elegánsan”) kell kezelniük. Számos példa létezik ilyen sikeres rendszerekre. A legrobusztusabb rendszerek némelyike továbbfejleszthető, és könnyen hozzáigazítható az új helyzetekhez.

Kihívások A programok és szoftverek egy-egy rendkívül specifikus feladatra fókuszáló eszközök, így nem általános célúak és nem rugalmasak. Azonban az olyan rendszerek megfigyelése, mint az internet vagy a biológiai rendszerek, azt mutatja, hogy ezek képesek alkalmazkodni a környezetükhöz. A biológiai rendszerek környezethez való alkalmazkodásának egyik módja a redundancia alkalmazása. Az emberi szervezetben számos szerv redundáns, ilyen például a vese is. Az embereknek általában csak egy vesére van szükségük, de a második vese jelenléte biztonsági tartalékot nyújt egy esetleges szervkárosodás esetén. Ugyanez az elv alkalmazható a szoftverekre is, ez azonban bizonyos kihívásokkal jár. A redundancia elvének informatikai alkalmazásakor a kód vakon történő hozzáadása nem javasolt. A kód átgondolatlan bővítése több hibát eredményez, bonyolultabbá teszi a rendszert, és megnehezíti annak megértését. Az olyan kód, amely nem erősíti meg a már meglévő kódot, nemkívánatos. Ehelyett az új kódnak egyenértékű funkcionalitással kell rendelkeznie, hogy ha egy funkció meghibásodik, egy másik – ugyanazt a funkciót ellátó – kódrészlet helyettesíthesse azt, manuális vagy automatizált szoftveres diverzitás alkalmazásával. Ehhez az új kódnak tudnia kell, hogyan és mikor kell kezelnie a meghibásodási pontot. Ez azt jelenti, hogy több logikát kell beépíteni a rendszerbe. Azonban ahogy a rendszer egyre több logikával és komponenssel bővül, illetve a mérete növekszik, úgy válik egyre összetettebbé is. Így egy redundánsabb rendszer létrehozásakor a rendszer bonyolultsága is megnő, ezért a fejlesztőknek gondoskodniuk kell a redundancia és a komplexitás közötti megfelelő egyensúlyról.

Jelenleg az informatikai gyakorlatok nem a robusztus rendszerek felépítésére összpontosítanak. Ehelyett inkább a skálázhatóságra és a hatékonyságra helyezik a hangsúlyt. Annak az egyik fő oka, hogy napjainkban nem fókuszálnak kellőképpen a robusztusságra, az, hogy ezt általános érvénnyel nagyon nehéz megvalósítani.

Területek

Robusztus programozás A robusztus programozás egy olyan programozási stílus, amely a váratlan leállások és a nem várt műveletek kezelésére összpontosít. Megköveteli, hogy a kód megfelelő módon (elegánsan) kezelje ezeket a leállásokat és műveleteket, mégpedig pontos és egyértelmű hibaüzenetek megjelenítésével. Ezek a hibaüzenetek lehetővé teszik a felhasználó számára a program hibakeresésének és javításának jelentős megkönnyítését.

Alapelvek

Paranoia Szoftverfejlesztéskor a programozó feltételezi, hogy a felhasználók fel akarják törni a kódját.

Hülyeség A programozó feltételezi, hogy a felhasználók helytelen, hamis és hibásan formázott bemeneteket fognak megadni. Ennek következtében a programozó egy egyértelmű, intuitív hibaüzenetet ad vissza a felhasználónak, amelyhez nem kell hibakódokat keresni. A hibaüzenetnek a lehető legpontosabbnak kell lennie anélkül, hogy félrevezető lenne a felhasználó számára, hogy a probléma könnyen megoldható legyen.

Veszélyes eszközök A felhasználóknak nem szabad hozzáférniük a könyvtárakhoz, adatszerkezetekhez vagy az adatszerkezetekre mutató mutatókhoz. Ezeket az információkat el kell rejteni a felhasználó elől, hogy a felhasználó ne módosítsa azokat véletlenül, és ne hozzon létre hibát a kódban. Amikor az ilyen interfészek helyesen vannak felépítve, a felhasználók anélkül használhatják őket, hogy kiskapukat találnának az interfész módosításához. Az interfésznek már helyesen kell implementálódnia, így a felhasználónak nem kell módosításokat végeznie. A felhasználó ezért kizárólag a saját kódjára koncentrálhat.

Nem történhet meg A kódot gyakran módosítják, és ez bevezetheti egy „lehetetlen” eset bekövetkezésének lehetőségét. A lehetetlen eseteket ezért nagyon valószínűtlennek feltételezzük. A fejlesztő átgondolja, hogyan kezelje a nagyon valószínűtlen esetet, és ennek megfelelően valósítja meg a kezelést.

Robusztus gépi tanulás A robusztus gépi tanulás jellemzően a gépi tanulási algoritmusok robusztusságára utal. Ahhoz, hogy egy gépi tanulási algoritmust robusztusnak tekintsünk, vagy a tesztelési hibának konzisztensnek kell lennie a betanítási hibával, vagy a teljesítménynek stabilnak kell lennie némi zaj hozzáadása után az adathalmazhoz. Az utóbbi időben, a népszerűségük növekedésével összhangban, egyre nagyobb az érdeklődés a neurális hálózatok robusztussága iránt. Ez különösen a támadó támadásokkal szembeni sebezhetőségüknek köszönhető.

Robusztus hálózati kialakítás A robusztus hálózattervezés a hálózattervezés tanulmányozása változó vagy bizonytalan igények esetén. Bizonyos értelemben a hálózattervezésben a robusztusság tág, akárcsak a szoftvertervezésben a robusztusság, a változtatások vagy bemenetek hatalmas lehetőségei miatt.

Robusztus algoritmusok Léteznek olyan algoritmusok, amelyek tolerálják a bemeneti hibákat.

Jegyzetek

Fordítás

Kapcsolódó szócikkek Defenzív programozás Nem funkcionális követelmény

Kategória:Számítástechnika