Slavné omyly v historii IT

Obsah

Chyba v programu

Chyba v počítačovém programu (a software bug) brání jeho očekávané činnosti nebo je důvodem špatného výsledku. Chyby dělají lidé, ať už při psaní kódu programu nebo při jeho návrhu (algoritmizaci problému).

Běžné programy obsahují 25 chyb v 1000 řádcích kódu, dobře napsané 2 chyby/1000 řádků. Podle odhadu NIST [4] z roku 2002 stojí USA chyby v programech 60 miliard dolarů ročně (0,6 % HDP).

Termín bug

Termín bug [čti bag, slovo pochází z angličtiny, kde původně znamenalo „obtížný hmyz“] patří do technického žargonu desítky let. Například Edison jej použil v dopise psaném roku 1878.

Mylně bývá označována za původkyni slova ve významu „počítačová chyba“ Grace Hoper, která ráda vyprávěla příhodu, která se udála v roce 1947, když pracovala na počítači Mark II. Operátoři tehdy byly pravděpodobně skutečně první, kteří zaznamenali nefunkčnost počítače zapříčiněnou hmyzem – vlepili noční můru (angl. moth), která uvízla mezi kontakty relé, do provozního deníku.

Obrázek (public domain) pochází z archivu Vojenského námořnictva USA (US Navy).

Y2K

Mediálně velmi známým se stal problém svázaný s přechodem do nového tisíciletí (millennium bug). Mnoho programů, z důvodu úspory paměti, používalo k uchování letopočtu jen poslední dvě cifry. Nuly v čísle 2000 způsobovaly tzv. přetečení a problémy s porovnáváním (rok 00 byl považovaný počítačem za rok 1900).

Strach z přerušení dodávek elektřiny, pádu letadel a možná i vypuknutí 3. světové války živily noviny, které se předháněly v popisu katastrofických scénářů. Lidé kupovali balenou vodu a konzervy.

Prvního ledna a ani později se nic hrozného nestalo. Díky miliardám dolarů, které byly investovány do kontroly a opravy programů, což pozitivně ovlivnilo počítačový průmysl. V ČR bylo vkladem 70 mil. Kč založeno Národní koordinační centrum pro řešení roku 2000.

Nenaplněné očekávání „konce světa“ bylo příčinou označení vážné chyby v návrhu programů za výmysl a důvodem k pochybování o využití vynaložených prostředků. Hned 1. 1. 2000 se v diskuzním pořadu stihli ztrapnit přední polistopadoví politici [2].

Tehdejší premiér Miloš Zeman prohlásil: Prosím vás, to je humbuk počítačových softwarových firem, které si chtějí nakapsovat, a nic hrozného se nestane. Také se nic hrozného nestalo.

A šéf smluvně opoziční ODS kontroval: Plně sdílím názor na bezvadný fór počítačových výrobců, kterým se podařilo vydělat miliardu dolarů tím, že si vymysleli problém počátku roku 2000. Byla to mimořádně úspěšná byznysovská klička.

Asi ani jeden z nich neslyšel o obchodu, kde platba kartou s expirací v roce 2000 způsobila pád celé sítě (firma později vysoudila 260 000 dolarů), o čerstvém zboží určeném k likvidaci, o 104leté důchodkyni pozvané do školky, o japonské jaderné elektrárně, která se zastavila nebo o slepotě amerických špionážních družic.

O tom, kolik by místo prevence stála následná oprava chyb anebo jestli by došlo k řetězové reakci, můžeme jen spekulovat. Za součást Y2K bývá považován i fakt, že rok 2000 byl přestupný, ačkoliv letopočty končící dvěma nulami nebývají (navzdory MS Excelu, který považuje rok 1900 za přestupný).

K podobné situaci by mohlo dojít v roce 2038, pokud bude stále používána 32b POSIX reprezentace času. Tzv. timestamp nebo také Céčkový datový typ time_t udávající počet vteřin od 1. 1. 1970, přeteče 19. ledna 2038 ve 3.14:08 UTC. Protože je reálné, že budeme používat 64b počítače, přesune se tento problém na rok 292 277 026 596 (čili Y10K nás tlačí o trošičku více :).

Strasti dobývání vesmíru

Co do celkové výše škod způsobených chybami v programech pravděpodobně drží rekord NASA (americký Národní úřad pro letectví a kosmonautiku), který bugy provázejí od založení dodnes. Problémy ale postihly i Sověty a Evropskou vesmírnou agenturu.

Mariner 1

Psal se rok 1962 a první pokus o vyslání sondy k Venuši skončil několik minut po startu. Kvůli problémům s anténou, převzal neplánovaně řízení palubní počítač. Naneštěstí musela být raketa krátce nato, přesně po 293 vteřinách, zničena, když se odchýlila od plánovaného kurzu. Příčinou byl chybný přepis vzorce do programu (opomenutí funkce).

Ve stejné době odhalili inženýři jinou chybu, která bývá s touto často zaměňována, ačkoliv nezpůsobila žádnou škodu. V programu pro projekt Mercury byla zaměněna (špatně vyděrována?) tečka na místě čárky. Kód pro cyklus DO 17 I = 1, 10 tak znamenal prosté přiřazení do proměnné DO17I=1.10.

Apollo 11

První přistání na Měsíci se v roce 1969 nezdařilo přesně podle představ. Přistávací modul Eagle se o 4 vteřiny odchýlil od plánované trajektorie a mezi velké kameny poblíž kráteru dosednul pod manuálním řízením Neila Armstronga (míle daleko od zvoleného místa). Na vině byl zapnutý radar, který spotřeboval neplánovaný procesorový čas.

Mars Climate Orbiter

Satelit byl ztracen, když se nepodařilo „zakotvit“ jej na správné oběžné dráze Marsu (v 57 km nebyly vhodné podmínky k jeho provozu, na rozdíl od plánovaných 145 km). Kuriózní je příčina selhání – výpočty v řídícím středisku byly v anglických jednotkách, ale navigační tým očekával podklady v metrických. V roce 1999.

Mars Polar Lander

Dohad je, že vozidlo nedorazilo na povrch planety, protože přistávací trysky byly odstaveny příliš brzy. Software vyhodnotil vibrace jako dosednutí na povrch, i když k němu zbývalo dalších 40 metrů. Jinou uvažovanou příčinou je technická závada trysek („teplotní nestabilita paliva“). Stalo se v roce 1999, snímky z místa nehody se dalším misím zatím nepodařilo udělat. Doufejme, že Phoenix bude úspěšnější…

Spirit Mars Rover

Nejčerstvější známou chybou v projektech NASA je zamrznutí čtvrtého z vozidel Mars Rover. Začátkem roku 2004, po 18 bezproblémových dnech na povrchu rudé planety, náhle Spirit přestal komunikovat s řídícím střediskem. Trvalo 3 dny, než se v neustále se restartujícím systému podařilo odhalit příčinu problémů – příliš mnoho souborů ve flash paměti – a téměř dva týdny, než byla odstraněna. Spirit nakonec, podobně jako jeho bratříčci, překonal předpokládanou dobu funkčnosti a urazil větší vzdálenost, než bylo plánováno.

Phobos

Phobos 1, první ze dvou sovětských družic vyslaných k marsovským měsícům doplatila na chybu v aktualizaci řídícího programu. Špatné postavení vůči Slunci znamenalo vybití baterií. Druhá družice byla úspěšnější, když ke ztrátě kontaktu došlo až v závěrečné části mise, při přiblížení k měsíci Phobos.

ESA Ariane 5

Ariane je nosič satelitů používaný Evropskou vesmírnou agenturu. Vývoj modelu 5 navázal na Ariane 4 a spolykal 7 mld. eur. První testovací let trval pouhých 40 vteřin a v roce 1996 se zařadil k těm nejdražším (zničená raketa měla hodnotu mezi půl a jednou miliardou). Řídící software nezvládl konverzi 64b deset. čísla na 16b celé číslo. Pravděpodobně z důvodu efektivity nebylo ošetření výjimky procesoru v důsledku přetečení napsané v jazyce Ada v jednom z mnoha případů spuštěno.

Problémy provázely nosič i při několika dalších letech (např. při druhém startu nedosáhla raketa požadované orbity, což znamenalo ztrátu jedné z nesených družic).

Hardware

Procesory

Několik chyb v návrhu „mozku počítače“ poškodilo pověst největšího producenta procesorů, společnost Intel. Nejznámější je FDIV chyba [7] v 60–100MHz modelech procesoru Pentium z roku 1994, kdy špatný počet opakováni for cyklu nahrál pro dělící algoritmus neúplnou vyhledávací tabulku. V důsledku toho některé operace dělení v plovoucí řádové čárce vracely nepřesný výsledek (od 4. místa za des. čárkou, průměrně asi jednou za měsíc, ale kritické pro běžného uživatele jednou za tisíce let). Pro Intel více než 400 mil. dolarů škody.

Medicínské přístroje

Zvláštní kapitolou jsou chyby, které zavinily úmrtí. Smutné prvenství patří dobře dokumentovanému [8] případu ozařovacího zařízení Therac-25, jehož nedokonalá funkčnost v letech 1985–1987 stála život nejméně 5 lidí.

V Kanadě vyráběný přístroj byl několikátým modelem v řadě a více než jeho předchůdci spoléhal na řízení počítačem (konkrétně DEC PDP 11). Přístroj uměl ozařovat dvěma typy paprsků (rentgenovými a elektronovými) a k chybě došlo při nastavení všech parametrů operátorem a poté jejich příliš rychlou opravou.

To ovšem nebyl jediný problém. Jedna z bezpečnostních funkcí přístroje kontrolovala určité parametry a jejich správný stav indikovala nulou v registru, při nesprávném nastavení registr inkrementovala. Není těžké uhádnout, co se stalo při 256. neúspěšné kontrole (nápověda: PDP byl 16b počítač).

Bug jako zbraň

Během studené války se staly záměrné chyby v programech nástrojem boje Spojených států proti Sovětům. V roce 1982 schválil Ronald Reagan plán CIA, který reagoval na krádeže západních technologií tím, že podstrčil východním agentům technologie se skrytými chybami. [6]

Největším „úspěchem“ byl výbuch sibiřského plynovodu, po atomových výbuších dosud největší umělá exploze. Kromě materiální škody (údajně bez ztrát na životech) šlo především o ekonomický dopad sabotáže.

A další…

(Ne)slavné výroky

Neuvěřitelně snadné je podcenit technologický vývoj. Vzpomeňme na drobné omyly v předvídání budoucnosti, často od jinak velkých vizionářů. Z dnešního pohledu jde často o vtipná prohlášení slavných:

Nejslavnější chybná předpověď

Traduje se, že Bill Gates, zakladatel a ředitel společnosti Microsoft, se k omezení adresovatelné paměti prvních osobních počítačů IBM vyjádřil takto:

„640k should be enough for anybody.“
640 k by mělo stačit komukoliv.

Dnes jsou programy schopné spolykat stovky megabajtů operační paměti a jejich nároky stále stoupají, takže údajné prohlášení budí čím dál větší úsměv a je velmi známé.

S největší pravděpodobností jde ale o něčí podařený vtip, protože Bill Gates tento výrok nikdy nepronesl. Nejen že to v jednom rozhovoru popřel, ale není možné ani dohledat kdy nebo při jaké příležitosti měl zaznít. (Jen obecná konstatování, že to bylo asi v roce 1981 při vývoji MS DOSu.)

Je ale možné dohledat jiná jeho zajímavá prohlášení: Wikiquote, Bill Gates.

Vynálezce Internetu

Když byl koncem roku 2001 v ČR na návštěvě Bill Gates, Česká televize o tom natočila reportáž, a v ní neváhala označit Billa Gatese za duchovního otce Internetu (pravděpodobně kvůli jeho vizi informační superdálnice).

Za tvůrce Internetu se označil americký viceprezident Al Gore (v březnu 1999). Vznikla z toho dokonce parodie na RFC 3000 Internet History - A Retrospective. Výrok ale byl vytržen z kontextu, Al Gore má nezpochybnitelné zásluhy za podporu ICT ve federální správě.

Vynálezcem byl na Slovensku (nebo na našem Technet.cz) označován také Tim Berners-Lee, který ve skutečnosti stojí za zrodem World Wide Webu. (Spousta odborníků uzavírá své přednášky posledním slidem, na kterém stojí: "Nobel prize for Tim Berners-Lee!")

Jak neopakovat historii?

Vyvarovat se obvyklým programátorským chybám:

Obvykle píše programy více lidí během delší doby, a tak není v jejich silách udržet si přehled o všech částech tak komplexního systému a uvědomit si jejich všechny možné interakce.

Pomoci při psaní bezchybného kódu mohou správné programovací techniky (např. defenzivní programovaní), metodologie vývoje (vedení vývojového týmu, formální specifikace programu, návrhové vzory), podpora programovacího jazyka (např. správa výjimek) a pochopitelně testování.

Ale chybovati je lidské a programátoři jsou pouze lidé. Ačkoliv dnes máme mohutnou podporu v nástrojích, vývojových prostředích a metodách, jak se rozšiřují počítače do dalších oblastí lidské činnosti, můžeme se těšit na další větší či menší problémy.

Zdroje

[1] Software bug, Wikipedia

[2] Neslavné výroky slavných, e-archiv Jiřího Peterky.

[3] Collection of Software Bugs, Prof. Thomas Huckle, Institut für Informatik, TU München

[4] Software Errors Cost..., NIST

[5] History's Worst Software Bugs, Simson Garfinkel, WIRED News

[6] CIA slipped bugs to Soviets, MSNBC.com/The Washington Post

[7] FDIV Replacement Program, Intel Corporation

[8] An Investigation of the Therac-25 Accidents, Nancy Leveson, University of Washington, Clark S. Turner, University of California, Irvine