Robustnost (počítačová věda) - Robustness (computer science)

Ve výpočetní technice je robustnost schopnost počítačového systému vypořádat se s chybami během provádění a vypořádat se s chybným vstupem. Robustnost může zahrnovat mnoho oblastí počítačové vědy, jako je robustní programování , robustní strojové učení a Robust Security Network . K prokázání robustnosti jsou nezbytné formální techniky, jako je testování fuzz , protože tento typ testování zahrnuje neplatné nebo neočekávané vstupy. Alternativně lze k testování robustnosti použít injektování poruch . Různé komerční produkty provádějí testování robustnosti softwarové analýzy.

Úvod

Obecně je budování robustních systémů, které zahrnují každý bod možného selhání, obtížné z důvodu velkého množství možných vstupů a kombinací vstupů. Protože by všechny vstupy a kombinace vstupů vyžadovaly příliš mnoho času na testování, vývojáři nemohou všechny případy vyčerpávat. Místo toho se vývojář pokusí takové případy zobecnit. Představte si například zadání některých celočíselných hodnot . Některé vybrané vstupy se mohou skládat ze záporného čísla, nuly a kladného čísla. Při použití těchto čísel k testování softwaru tímto způsobem vývojář zobecní množinu všech realů na tři čísla. Jedná se o efektivnější a zvládnutelnější metodu, ale náchylnější k neúspěchu. Zobecnění testovacích případů je příkladem pouze jedné techniky řešení selhání - konkrétně selhání v důsledku neplatného vstupu uživatele. Systémy obecně mohou selhat také z jiných důvodů, například z odpojení od sítě.

Bez ohledu na to by složité systémy měly všechny chyby, s nimiž se setkají ladně, stále zvládnout. Existuje mnoho příkladů takových úspěšných systémů. Některé z nejrobustnějších systémů lze vyvíjet a lze je snadno přizpůsobit novým situacím.

Výzvy

Programy a software jsou nástroje zaměřené na velmi konkrétní úkol, a proto nejsou zobecněné a flexibilní. Pozorování v systémech, jako je internet nebo biologické systémy, však ukazují adaptaci na jejich prostředí. Jedním ze způsobů, jak se biologické systémy přizpůsobují prostředí, je využití redundance. Mnoho orgánů je u lidí nadbytečných. Ledvin je jeden takový příklad. Lidé obecně potřebují pouze jednu ledvinu, ale mít druhou ledvinu poskytuje prostor pro selhání. Stejný princip lze použít i pro software, ale jsou zde určité výzvy. Při aplikaci principu redundance na informatiku se slepé přidávání kódu nedoporučuje. Slepé přidání kódu přináší více chyb, dělá systém složitějším a ztěžuje pochopení. Kód, který neposkytuje žádné posílení již existujícího kódu, je nežádoucí. Nový kód musí místo toho mít ekvivalentní funkčnost , takže pokud dojde k porušení funkce, může ji nahradit jiný poskytující stejnou funkci pomocí manuální nebo automatické softwarové rozmanitosti . Aby to bylo možné, musí nový kód vědět, jak a kdy se má přizpůsobit bodu selhání. To znamená, že do systému je třeba přidat více logiky . Ale jak systém přidává více logiky, komponent a zvyšuje velikost, stává se složitějším. Při vytváření redundantnějšího systému se tedy systém také stává složitějším a vývojáři musí zvážit vyvážení redundance se složitostí.

V současné době se postupy počítačové vědy nezaměřují na budování robustních systémů. Spíše se zaměřují na škálovatelnost a efektivitu . Jedním z hlavních důvodů, proč se dnes nezaměřuje na robustnost, je to, že je těžké to udělat obecně.

Oblasti

Robustní programování

Robustní programování je styl programování, který se zaměřuje na zpracování neočekávaného ukončení a neočekávaných akcí. Vyžaduje kód pro řádné zpracování těchto zakončení a akcí zobrazením přesných a jednoznačných chybových zpráv . Tyto chybové zprávy umožňují uživateli snadnější ladění programu.

Zásady

Paranoia
Při vytváření softwaru programátor předpokládá, že uživatelé budou porušovat svůj kód. Programátor také předpokládá, že jeho vlastní psaný kód může selhat nebo fungovat nesprávně.
Hloupost
Programátor předpokládá, že se uživatelé pokusí o nesprávné, falešné a chybně zadané vstupy. V důsledku toho programátor vrátí uživateli jednoznačnou a intuitivní chybovou zprávu, která nevyžaduje vyhledávání chybových kódů. Chybová zpráva by se měla snažit být co nejpřesnější, aniž by byla pro uživatele zavádějící, aby bylo možné problém snadno vyřešit.
Nebezpečné nářadí
Uživatelé by neměli získávat přístup do knihoven , datových struktur nebo ukazatelů na datové struktury. Tyto informace by měly být uživateli skryty, aby je uživatel omylem nezměnil a nezavedl chybu v kódu. Když jsou taková rozhraní správně sestavena, uživatelé je používají, aniž by našli mezery pro úpravu rozhraní. Rozhraní by již mělo být správně implementováno, takže uživatel nemusí provádět žádné úpravy. Uživatel se proto zaměřuje výhradně na svůj vlastní kód.
To se nemůže stát
Kód je velmi často upravován a může představovat možnost, že dojde k „nemožnému“ případu. Nemožné případy se proto považují za vysoce nepravděpodobné. Vývojář přemýšlí o tom, jak řešit případ, který je vysoce nepravděpodobný, a podle toho implementuje zpracování.

Robustní strojové učení

Robustní strojové učení se obvykle týká robustnosti algoritmů strojového učení. Aby byl algoritmus strojového učení považován za robustní, musí být chyba testování konzistentní s chybou tréninku, nebo je výkon stabilní po přidání nějakého šumu do datové sady.

Robustní design sítě

Robustní návrh sítě je studium návrhu sítě tváří v tvář proměnným nebo nejistým požadavkům. V jistém smyslu je robustnost v návrhu sítě široká, stejně jako robustnost v designu softwaru, a to kvůli velkým možnostem změn nebo vstupů.

Robustní algoritmy

Existují algoritmy, které tolerují chyby na vstupu nebo během výpočtu. V takovém případě výpočet nakonec konverguje na správný výstup. Tento jev byl nazýván „přitažlivost správnosti“.

Viz také

Reference