A | B | C | D | E | F | G | H | CH | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Softwarová chyba je chyba nebo nedostatek v počítačovém programu nebo softwarové části počítačového systému, která způsobuje, že program nebo systém produkuje nesprávné nebo neočekávané výsledky nebo se chová nežádoucím způsobem.
Softwarové chyby zahrnují velmi široký rozsah chování, jako je vyprodukování chybného výstupu, chování v rozporu s uživatelskými požadavky nebo standardy, havárie programu, zacyklení programu, poškození, přepsání, smazání dat, souborů, programů nebo částí operačního systému, narušení bezpečnosti programu nebo systému, vyčerpání prostředků systému, ignorování událostí, selhání komunikace, nevyhovující rychlost nebo ovládání programu, nedostatečná nebo matoucí komunikace programu s uživatelem, neadekvátní signalizace chyb nebo stavu programu, nemožnost spustit program. Chování, které je u určitého druhu programů nebo v určitém prostředí žádoucí, může být u jiného programu nebo v jiném prostředí považováno za závažnou chybu.
Mnoho softwarových chyb je způsobeno programátorskými chybami, softwarové chyby však mohou být způsobeny i nevhodným použitím programu nebo jeho nasazením v prostředí, se kterým jeho původní návrh nepočítal.
Programátorská chyba
Programátorská chyba je druh softwarové chyby, kterou udělal programátor při vytváření počítačového programu. Programátorskou chybu, která v software způsobí bezpečnostní problém, označujeme jako zranitelnost. Program využívající zranitelnost je exploit.
Programátorskou chybu často i v češtině označujeme anglickým výrazem bug a proces jejího hledání a odstraňování (ladění softwaru) výrazem debugování/debugging.
Zdroje chyb
Chyba může být syntaktická, sémantická a vznik neočekávané události.
Syntaktická
Taková chyba spočívá v narušení syntaxe gramatiky použitého programovacího jazyka. U kompilovaných programů ji překladač zahlásí přímo při překladu během syntaktické analýzy.
Sémantická
Program se bez problému přeloží, ale nedělá co má. Například skončí v nekonečném cyklu, spadne (je násilně ukončen operačním systémem pro porušení přidělených práv) nebo vydá naprosto špatný výsledek (což je většinou ta nejhorší možná varianta). Ve složitějším programu (například operačním systému) se může stát, že program pozná, že se dostal do chybné situace, ale není schopen pokračovat ve funkci a proto se zastaví nebo ukončí, obvykle se specifickým chybovým hlášením.
Neočekávaná událost
Při běhu programu nastane situace, se kterou programátor nepočítal a na kterou neumí program správně zareagovat. Může to být situace vnitřní (například se pokouší psát do souboru na disku, ale disk je plný) nebo neočekávaná hodnota vstupu.
Velmi často způsobí chybu obyčejný překlep, například ve jméně proměnné, použití 1 místo 0 nebo < místo <=
. Takové chyby se zvlášť špatně hledají.
Dalším zdrojem chyb je chybné nebo nedostatečné použití synchronizačních primitiv při přístupu ke sdíleným zdrojům. Taková chyba může v programu vydržet velmi dlouho a projevit se teprve při specifickém pořadí naplánování vláken na procesoru nebo procesorech. Podmnožinou těchto chyb je deadlock.
Typy programátorských chyb
Existují dva základní typy programátorských chyb: opomenutí kontroly, logická chyba, překlep a použití nebezpečných funkcí.
Tento typ chyby může být velmi nebezpečný ve chvíli, kdy náš program začne zpracovávat nedůvěryhodné vstupy. Pokud jsou vstupy důvěryhodné, data si připravujeme my sami. Jedná se o menší problém, než kdybychom dostávali vstupy z vnějšku a kdokoliv nám mohl cokoliv podvrhnout. V současné době vzniká v tomto ohledu veliký problém, protože většina programů přijímá výhradně nedůvěryhodné vstupy, jejich zdroji je hlavně internet a programy zpracovávají vše, co obdrží. Což může vést k tomu, že například v protokolu SMB se nic neděje do té doby pokud mezi sebou komunikují dva počítače navzájem. Naopak se můžeme do počítače prolomit v okamžiku, kdy můžeme počítači něco podvrhnout.
Příklad: Data přicházející z počítačové sítě nebo z Internetu, webový prohlížeč nebo e-mailový klient.
Nejvíce se ovšem vyskytují u složitých implementací jako je vzdálené volání procedur RPC. Když napíšu proceduru, která čte data z disku a následně ji přizpůsobím tak, aby byla schopná přijímat požadavky ze sítě, dostávám nově vytvořený síťový souborový systém, který je jednoduchý a primitivní. Poté lze využít sdílení v síti SMB nebo NFS.
Síťové servery Apache a PHP jsou bezpečné z hlediska toho co jsou, jenomže když do nich píší své kódy nevzdělaní programátoři, dostáváme se do situace, kdy už vše není tak bezpečné.
Použití nebezpečných funkcí
Při použití nebezpečných funkcí vzniká chyba tím, že si programátor něco nastudoval, ale nedodržel doporučení.
Příklad: Funkce strcpy()
z jazyka C. Jedná se o systematickou chybu, protože to co dostane v parametru kopíruje někam do paměti a neexistuje žádné omezení na délku. Bezpečnostní problém je tedy v tom, že může dojít k přemazání námi neznámého obsahu paměti.
Počet chyb v programu
Staticky podchytitelné chyby
V analýzách, které jsou veřejně k dispozici se píše o možných 20 až 30 chybách na 1000 řádcích zdrojového kódu, což je velké číslo. V jádře Linuxu je 0,5 chyby na 1000 řádků zdrojového kódu. Už od konce 90. let se na spoustě univerzitách vyučující v předmětech zabývající se touto problematikou zabývali na cvičeních hledáním systémových chyb v jádře. Existuje i automatický nástroj, který tyto chyby v kódu hledá. Naopak třeba ve Windows není tato statistika nijak známa, protože Microsoft nikdy nedal své zdrojové kódy k dispozici.
Horší stav v běžných aplikacích
Prohlížeče nebo editory. Čím je software méně používán, tím je v něm více chyb.
Pád aplikace je hrozba
Každý neočekávaný pád aplikace je hrozba a může být potenciálně zneužitelná. Jakmile se aplikace dostane do stavu kdy tzv. "spadne" dostává se do stavu potenciálního zneužití, protože se jedná o stav, který by neměl nastat a tento pád se dá většinou konkrétním způsobem zneužít. V případě kdy nemáme k dispozici zdrojové kódy, tak je testovaní pádů aplikace nejjednodušší způsob jak přijít na chybu.
Význam pojmu Bug
Anglické slovo bug znamená doslova moucha, štěnice nebo obecně brouk. V angličtině se ve významu chyba (například konstruktérská) používá už velmi dlouho – použil ho například Thomas Edison roku 1878, když mluvil o svých vynálezech. S počítači pak pronikl do mnoha dalších jazyků.
Traduje se, že původem tohoto významu je problém způsobený skutečným hmyzem. Známá je třeba historka o molu zachyceném na relé počítače Mark II dne 9. září 1947. Mol byl pečlivě vyproštěn a nalepen do záznamu s poznámkou „první skutečný případ nalezeného bugu“. Je ovšem zřejmé nejen to, že se nejedná o první výskyt termínu, ale také to, že operátoři o konstruktérském použití věděli.
Efekty softwarových chyb
Těchto chyb je několik druhů a mohou mít na následek dominový efekt s různými následky pro uživatele. Některé chyby mají na funkčnost minimální vliv a jsou proto neobjeveny. Vážnější chyby mohou vést k zamrznutí programu a následné ztratě dat. Ty nejvážnější chyby lze využít k neoprávněnému přístupu k datům. V roce 1996 v Evropské kosmické agentuře byla zničena nosná raketa Ariane 5, která nesla družice Cluster za 500 milionů amerických dolarů, minutu po startu, kvůli chybě v programu řídícího počítače velení.[1] Ze studie, zadané v Americe, vyšel závěr, že softwarové chyby připravily americkou ekonomiku o cca 59 miliard USD, nebo o 0,6 % HDP.[2]
Možné chyby
Chyby v programech jsou důsledkem lidského faktoru. Vznikají přehlédnutím, nebo vzájemným nepochopením ve vývojovém týmu během specifikace kódování a dokumentace.
Například: Při vytváření relativně jednoduchého programu na řazení slov podle abecedy, co stane, když se ve slově nachází '-', mohlo by se stát, že při kódování do programovacího jazyka by mohla být vytvořena off-by-one chyba. Jiný příklad, při kódování výpisu do seznamu by mohlo dojít k záměně '<' a '>' a následně by došlo k vypsání v opačném abecedním pořadí.
Složitější chyby mohou vzniknout v případě, že na jednom programu pracuje více lidí a v horším případě tomu tak je ještě během delšího období, to pak mohou mezi částmi programů vznikat nežádoucí interakce, které je složité nalézt, za účelem předejít této situaci vznikají podrobné dokumentace jednotlivých částí i celků.
Další kategorie chyb se vztahuje k vláknům, když je proces zpracovávaný ve více než jednom vlákně, a ta nejsou správně synchronizována.
Ladění
Najít a opravit chybu, neboli "debugování", byla vždy důležitá část programování. Se zvyšující se složitostí programů stoupá počet chyb a také obtížnost je zachytit a opravit. Často se stává, že programátoři stráví více času hledáním a opravováním chyb, než psaním nového kódu. Softwaroví testeři jsou profesionálové, jejichž jediným úkolem je najít a opravit chyby, nebo napsat kód pro testování. U některých projektů je více prostředků vynaloženo na testování než na vývoj.
Obvykle nejtěžší část ladění je najít chybu v kódu. Jakmile je odhalena, její oprava nebývá obvykle problém. Jednou z pomůcek při debugování je tzv. krokování programu, při tomto procesu je program procházen po jednotlivých příkazech při neustálém sledování proměnných. Bez této možnosti se používá jiný postup, v různých částech programu jsou proměnné vypisovány např. do konzole, což napomáhá k lokalizaci chyb. Nicméně i těmito pomůckami je někdy lokalizace chyb umění, zpravidla se stává, že chyby v jedné části programu způsobí pád v úplně jiné části.
Některé chyby jsou způsobeny špatným myšlením nebo plánováním ze strany programátora. Takovéto chyby vyžadují přepsání části kódu.
Od roku 1990 a zejména v návaznosti na incident s Ariane 5 je kladeno značné úsilí na vývoj pomůcek pro automatické ladění kódů, např. metody statické analýzy kódu.
Posledním typem chyb jsou chyby, které nemají s kódem nic společného. Pokud se programátor spoléhá na dokumentaci k hardwaru a ta není přesná, může byt program napsaný dobře s ohledem na dokumentaci ale už ne s ohledem na skutečný hardware.
Odkazy
Reference
- ↑ KEN, Robinson. Ariane 5 Flight 501 Failure—A Case Study of Errors . 1996-12-16, rev. 2012-03-18 . Dostupné online. (anglicky)
- ↑ Software bugs cost US economy dear. www.nist.gov . . Dostupné v archivu pořízeném z originálu dne 10-06-2009.
Související články
- Bug tracking system
- Debugger
- Extrémní programování
- Identifikace hrozeb
- Objektově orientované programování
- Paralelní programování
Externí odkazy
- Obrázky, zvuky či videa k tématu softwarová chyba na Wikimedia Commons
- Seznam 25 nejnebezpečnějších programátorských chyb podle SANS a MITRE (anglicky)
Text je dostupný za podmienok Creative Commons Attribution/Share-Alike License 3.0 Unported; prípadne za ďalších podmienok. Podrobnejšie informácie nájdete na stránke Podmienky použitia.
Antény
Chemické zdroje elektriny
Chladenie v elektrotechnike
Elektrická sústava automobilu
Elektrická trakcia
Elektrické prístroje
Elektrické súčiastky
Elektrické spotrebiče
Elektrické stroje
Čítanie (elektrotechnika)
Činný výkon
Štatistická dynamika
Živý vodič
Admitancia
Antiparalelné zapojenie
Asynchrónny motor
Blúdivý prúd
Bočník (elektrotechnika)
Diak (polovodičový prvok)
Displej s kvapalnými kryštálmi
Elektrická inštalácia
Elektrická rezonancia
Elektrická sila
Elektrická vodivosť
Elektrické zariadenie
Elektrický obvod
Elektrický zvonec
Elektroenergetika
Elektromer
Elektrometer
Elektromobil
Elektromotor
Elektromotorické napätie
Elektrotechnický náučný slovník
Elektrotechnika
Elektrotechnológia
Fázor
Faradayova klietka
Frekvencia (fyzika)
Graetzov mostík
Impedancia
Indukčnosť
Induktancia
Istič
Izolácia (elektrotechnika)
Izolant
Jadro vodiča
Jednobran
Jednosmerný prúd
Joulovo teplo
Katóda
Koaxiálny kábel
Kompenzácia účinníka
Konduktometria
Konektor (elektrotechnika)
Korónový výboj
Lanko (elektrotechnika)
Leptanie
Logické hradlo
Magnetická susceptibilita
Magnetizácia (veličina)
Merný elektrický odpor
Mobilné zariadenie
Napájací zdroj
Napäťový chránič
Napäťový násobič
Nortonova veta
Odpínač
Odpojovač
OLED
Olovený akumulátor
Paralelné zapojenie
Peltierov článok
Plošná hustota elektrického prúdu
Poistka (elektrotechnika)
Posuvný prúd
Prúdový chránič
Prenosové médium
Prieletový klystrón
Primárny elektrochemický článok
Reaktancia
Rekuperácia (dopravný prostriedok)
Relé
Reproduktorová výhybka
Rezistancia
Rozhranie (interface)
Sériové zapojenie
Seebeckov jav
Sekundárny elektrochemický článok
Settopbox
Skrat
Sonar
Spínač
Spínaný zdroj
Straty v mikropásikových vedeniach
Striedavý prúd
Stupeň ochrany krytom
Svetelná výbojka
Symetrizačný člen
Technická normalizácia
Tepelné relé
Tepelne vodivostný detektor
Termočlánok
Théveninova veta
Transformátor
Transformátor s fázovou reguláciou
Trojfázová sústava
Tuhá fáza (elektronika)
Tyratrón
Usmerňovač (elektrotechnika)
Uzemnenie
Uzol (vodiče)
Vírivý prúd
Výbojka
Varistor
Ventilátor
Vodič (elektrotechnika)
Voltov stĺp
Vstavaný systém
Zásuvka (elektrotechnika)
Zdroj (elektrotechnika)
Zisk antény
Text je dostupný za podmienok Creative
Commons Attribution/Share-Alike License 3.0 Unported; prípadne za ďalších
podmienok.
Podrobnejšie informácie nájdete na stránke Podmienky
použitia.
www.astronomia.sk | www.biologia.sk | www.botanika.sk | www.dejiny.sk | www.economy.sk | www.elektrotechnika.sk | www.estetika.sk | www.farmakologia.sk | www.filozofia.sk | Fyzika | www.futurologia.sk | www.genetika.sk | www.chemia.sk | www.lingvistika.sk | www.politologia.sk | www.psychologia.sk | www.sexuologia.sk | www.sociologia.sk | www.veda.sk I www.zoologia.sk