Robustnost (informatika)
Author
Albert FloresRobustnost je v informatice schopnost počítačového systému vyrovnat se při svém fungování s chybami, zejména s chybnými vstupy. Robustnost může zahrnovat mnoho oblastí informatiky, jako například robustní programování, robustní strojové učení a robustní síťová bezpečnost. Pro prověřování robustnosti jsou důležité formální techniky jako například fuzz testování, které zahrnují používání neplatných vstupů a neočekávaných situací. Pro testování robustnosti se používají například injekce chyb. Některé komerční výrobky provádějí testování robustnosti softwarové analýzy.
Úvod
Obecně platí, že vytváření robustních systémů, které zahrnují každý bod možného selhání, je obtížné kvůli obrovskému množství možných vstupů a jejich kombinací. Protože prověřování všech vstupů a jejich kombinací by vyžadovalo extrémní množství času, není možné, aby vývojáři procházeli všechny případy. +more Místo toho se snaží různé případy zobecnit. Představme si například zadávání celočíselných hodnot. Ze všech vstupů je třeba prověřit chování při zadání záporného čísla, nuly a kladného čísla. Pokud vývojář použije takováto čísla pro testování software, zobecňuje chování na všech vstupech z těchto tří čísel. Tato metoda je efektivnější a zvládnutelnější, ale také náchylnější na selhání. Zobecnění testovacích případů je příkladem pouze jedné oblasti, v niž je třeba řešit selhání - konkrétně selhání způsobené neplatným vstupem od uživatele. Systémy obecně mohou selhat i z jiných příčin, například kvůli odpojení od sítě.
I složité systémy by měly zpracovávat všechny myslitelné chyby elegantně. Existuje mnoho příkladů takových úspěšných systémů. +more Známkou robustnosti systému je to, že je možné jej snadno dále vyvíjet a upravovat pro nové situace.
Problémy
Programy a software jsou nástroje zaměřené na určitý úkol, a proto je jejich obecnost a flexibilita omezená. V systémech, jako je internet nebo biologický systém, lze však pozorovat, jak se přizpůsobují změnám prostředí. +more Jedním ze způsobů, jak se biologické systémy mohou adaptovat na změny prostředí, je použití redundance. V lidském těle jsou důležité orgány zdvojené, například ledviny. Člověku obecně stačí k životu pouze jedna ledvina, ale existence dvou ledvin zvyšuje pravděpodobnost, že případné selhání nebude fatální. Podobný princip lze použít i na software, i když může přinášet určité těžkosti. Slepé přidávání kódu při aplikaci principu redundance v informatice může být nebezpečné, protože obvykle přináší další chyby a činí systém složitějším a obtížnějším na pochopení. Kód, který neposkytuje žádné posílení stávajícího kódu, je nežádoucí. Nový kód musí mít obdobnou funkčnost, takže pokud určitá funkce nefunguje dobře, bude možné ji nahradit využitím jiné funkce, ať již manuálním nebo automatickým přepnutím na jinou funkčnost (tzv. softwarová diverzita). Aby to fungovalo, nový kód musí vědět jak a kdy překlenout selhání. To znamená, že do systému je třeba přidat více logiky. Ale jak se do systému přidává více logiky, komponent a zvyšuje se jeho velikost, stává se komplikovanějším. Zvýšení redundance tedy může vést k robustnějšímu systému, který však bude také komplikovanější, takže vývojáři musí dobře zvažovat vyvážení redundance a složitosti.
Matematická informatika se v současnosti příliš nezaměřuje na vytváření robustních systémů, ale spíše na škálovatelnost a efektivitu algoritmů. Jedním z hlavních důvodů, proč tomu tak je, je komplikovanost to dělat obecně.
Oblasti
Robustní programování
Robustní programování je styl programování, který se zaměřuje na zpracovávání neočekávaných ukončení a neočekávaných akcí. Vyžaduje, aby zpracování těchto ukončení a akcí bylo elegantní zobrazením přesné a jednoznačné chybové zprávy. +more Chybové zprávy by měly vést uživatele k nápravě chyb.
Principy
Paranoia - Při tvorbě softwaru programátor předpokládá, že uživatelé jsou připraveni poškodit jejich kód. Programátor také předpokládá, že jím vytvořený kód může selhat nebo fungovat nesprávně.
Hloupost - Programátor předpokládá, že uživatelé bude zkoušet nesprávný, falešné a poškozené vstupy. V takové situaci musí program vracet uživateli jednoznačné a intuitivní chybové zprávy, které nevyžadují vyhledávání chybových kódů. +more Chybová zpráva by měla být co nejpřesnější a přitom nebýt zavádějící, aby uživateli ulehčila řešení problému.
Nebezpečné nástroje - Uživatelé by neměli získat přístup k knihovnám, datovým strukturám nebo ukazatelům na datové struktury. Takové informace musí být před uživatelem skryty, aby je nebylo možné náhodně měnit a tak zanést do kódu chyby. +more Pokud je takové rozhraní správně vytvořené, uživatelé jej používají bez hledání děr pro jeho modifikace. Rozhraní by mělo být správně implementované, takže uživatel nemusí provádět jeho úpravy. Uživatel se proto zaměřuje výhradně na svůj vlastní kód.
Nemůže nastat - Kód je velmi často dodatečně upravován, takže mohou nastat i situace, které byly původně „nemožné“. Proto je vhodné uvažovat o „nemožných situacích“ jen jako o vysoce nepravděpodobných. +more Vývojář pak musí vymyslet, jak zpracovávat i ty případy, které jsou vysoce nepravděpodobné a toto zpracovávání implementovat.
Robustní strojové učení
Pod robustním strojovým učením se typicky chápe robustnost algoritmů strojového učení. Aby byl algoritmus strojového učení považován za robustní, musí být buď testovací chyby konzistentní s tréninkovými chybami, nebo po přidání určitého šumu do datového souboru musí být zachována výkonnost.
Robustní návrh sítě
Robustní návrh sítě je studie návrhu sítě při proměnných nebo nejistých požadavcích. V jistém smyslu je robustnost v návrhu sítě stejně široká jako robustnost návrhu softwaru kvůli rozsáhlým možnostem změn a vstupů.
Robustní algoritmy
Existují algoritmy, které tolerují chyby vstupu nebo během výpočtu. V tomto případě výpočet nakonec konverguje ke správnému výsledku. +more Tento jev se nazývá „přitažlivost správnosti“ .
Odkazy
Reference
Související články
Defenzivní programování * Nefunkcionální požadavek
Kategorie:Spolehlivostní inženýrství Kategorie:Kvalita softwaru