211service.com
Proč je software tak špatný
Je to jeden z nejstarších vtipů na internetu, nekonečně přeposílaný z e-mailové schránky do e-mailové schránky. Softwarový magnát – obvykle Bill Gates, ale někdy i jiný – pronese řeč. Kdyby se automobilový průmysl vyvíjel jako softwarový průmysl, prohlašuje magnát, všichni bychom jezdili v autech za 25 dolarů, které ujedou 1000 mil na galon. Na což odvětí manažer automobilky, Jo, a kdyby auta byla jako software, bez důvodu by dvakrát denně havarovala, a když byste zavolali servis, řekli by vám, abyste přeinstalovali motor.
Vtip zapouzdřuje jednu z největších hádanek současné technologie. Během neuvěřitelně krátké doby se software stal kritickým pro téměř každý aspekt moderního života. Od bankovních trezorů po městské semafory, od telefonních sítí po DVD přehrávače, od automobilových airbagů po systémy řízení letového provozu, svět kolem nás je regulován kódem. Přesto mnoho softwaru jednoduše nefunguje spolehlivě: zeptejte se kohokoli, kdo sledoval, jak obrazovka počítače rudne do modra a maže hodiny námahy. Softwaroví inženýři říkají, že kód je příliš často nabubřelý, ošklivý, neefektivní a špatně navržený; i když programy fungují správně, uživatelé je považují za příliš těžké na pochopení. Regály knihkupectví po celé zemi sténající pod tíhou manuálů připomínajících cihly svědčí o přetrvávající nefunkčnosti softwaru.
Software je dnes prostě hrozný, říká Watts S. Humphrey, člen Institutu softwarového inženýrství na Carnegie Mellon University, který napsal několik známých knih o kvalitě softwaru. A je to stále horší. Dobrý software je podle Humphreyho použitelný, spolehlivý, bez závad, nákladově efektivní a udržovatelný. A software teď není žádná z těchto věcí. Nemůžete něco vyndat z krabice a vědět, že to bude fungovat. Podle názoru Edsgera W. Dijkstra, emeritního počítačového vědce z Texaské univerzity v Austinu, byl průměrný uživatel počítače v průběhu let obsluhován tak špatně, že očekává, že jeho systém bude neustále padat, a my jsme svědky masivní celosvětová distribuce softwaru s chybami, za který bychom se měli hluboce stydět.
Jim McCarthy je štědřejší. Zakladatel společnosti pro školení kvality softwaru ve Woodinville, WA, se svou ženou Michele, McCarthy věří, že většina softwarových produktů má nezbytné funkce, aby stálo za to je koupit, používat a osvojit si. Ale připouští, že pouze extrémní užitečnost softwaru nám umožňuje tolerovat jeho obrovské nedostatky. McCarthy někdy začíná přednášky ve škole powerpointovou prezentací. První snímek zní: Většina softwaru je na hovno.
Je obtížné přehnaně zdůrazňovat jedinečnost problémů softwaru. Když automobiloví inženýři diskutují o vozech na trhu, neříkají, že dnešní vozidla nejsou o nic lepší než před deseti nebo patnácti lety. Totéž platí pro letecké inženýry: nikdo netvrdí, že Boeing nebo Airbus vyrábí mizerná letadla. Elektroinženýři si také nestěžují, že se čipy a obvody nezlepšují. Jak navrhl inženýr inženýrství Henry Petroski ve své knize z roku 1992 Evoluce užitečných věcí , neustálé zdokonalování je v technologii obvyklým pravidlem. Inženýři si neustále všímají nedostatků ve svých návrzích a postupně je opravují, proces Petroski ironicky popsal jako forma následuje selhání. V důsledku toho se produkty postupně zlepšují.
Software bohužel vypadá jinak. Dalo by se očekávat, že program se 45 miliony řádků, jako je Windows XP, nejnovější operační systém společnosti Microsoft, bude mít několik chyb. A softwarové inženýrství je novější disciplína než strojírenství nebo elektrotechnika; první skutečné programy vznikly teprve před 50 lety. Co je však překvapivé – ve skutečnosti udivující – je, že mnoho softwarových inženýrů věří, že kvalita softwaru se nezlepšuje. Pokud něco, říkají, je to čím dál horší. Jako by vozy vyrobené v Detroitu v roce 2002 byly méně spolehlivé než vozy vyrobené v roce 1982.
Jak se software stává stále důležitějším, potenciální dopad špatného kódu bude podle názoru Petera G. Neumanna, počítačového vědce ze SRI International, soukromého R&D centra v Menlo Park, CA, stále více odpovídat. Jen za posledních 15 let softwarové závady zničily start evropského satelitu, o rok odložily otevření nesmírně drahého letiště v Denveru, zničily misi NASA na Mars, zabily čtyři námořní pěchoty při havárii vrtulníku, přiměly loď amerického námořnictva zničit civilní dopravní letadlo a v Londýně vypnuly sanitní systémy, což vedlo k až 30 úmrtím. A kvůli naší rostoucí závislosti na síti Neumann říká: Jsme na tom mnohem hůř, než jsme byli před pěti lety. Rizika jsou horší a obrana není tak dobrá. Jdeme pozpátku – a to je děsivá věc.
Některé softwarové společnosti reagují na tyto kritiky předěláním svých postupů; Microsoft, zasažen obviněními, že jeho produkty jsou chybné, veřejně vede cestu. Přesto problémy s kvalitou softwaru přetrvávají tak dlouho a zdají se být tak neřešitelně zakořeněny v softwarové kultuře, že si někteří kodéři začínají myslet nemyslitelné. K jejich vlastnímu úžasu tito lidé zjistili, že si kladou otázku, zda skutečný problém se softwarem není v tom, že je zapojeno málo právníků.
Nedostatek logiky
Microsoft vydal Windows XP 25. října 2001. Téhož dne, což může být rekord, společnost zveřejnila 18 megabajtů oprav na svém webu: opravy chyb, aktualizace kompatibility a vylepšení. Dvě záplaty opravily důležité bezpečnostní díry. Nebo spíše jeden z nich ano; druhý patch nefungoval. Společnost Microsoft doporučovala (a stále doporučuje) uživatelům, aby si před instalací oprav zálohovali důležité soubory. Kupující domácí verze Windows XP však zjistili, že systém neposkytuje žádný způsob, jak tyto záložní soubory obnovit, pokud by se něco nepovedlo. Jak nevýrazně vysvětlila online Knowledge Base společnosti Microsoft, speciální zálohovací diskety vytvořené systémem Windows XP Home nefungují se systémem Windows XP Home.
Kritici říkají, že takovéto překlepy jsou pouze povrchové výpadky – známky toho, že vývojáři softwaru byli příliš uspěchaní nebo příliš nedbalí, aby opravili zjevné vady. Skutečné problémy spočívají v základním návrhu softwaru, tvrdí R. A. Downes z Radsoftu, softwarové poradenské firmy. Nebo spíše jeho nedostatek designu. Populární programovací software Visual Studio od Microsoftu je příkladem Downesova způsobu myšlení. Downes zjistil, že pouhé umístění kurzoru nad okno Visual Studio neviditelně zaplaví centrální procesorovou jednotku tisíci zbytečných zpráv, i když program nic nedělá. Je to katastrofální. Je to naprostý chaos, stěžuje si.
Podle Dana Wallacha, počítačového vědce z Rice University, problém nespočívá v nesmyslném vrtění procesoru – koneckonců, poznamenává, výpočetní výkon je levný. Ani software Microsoftu není nijak zvlášť chybný; kritici často používají produkty společnosti jako příklady spíše proto, že jsou známé, než proto, že jsou neobvykle špatné. Místo toho z Wallachova pohledu kvetoucí, bzučící zmatek ve Visual Studiu a mnoha dalších programech prozrazuje, jak techniky psaní softwaru nedokázaly držet krok s explozivním nárůstem jeho složitosti.
Programátoři píší kód v jazycích jako Java, C a C++, které mohou číst lidské bytosti. Specializované programy známé jako kompilátory transformují tento kód na řetězce jedniček a nul používané počítači. Důležité je, že kompilátory odmítají kompilovat kód se zjevnými problémy – místo toho chrlí chybové zprávy. Až do 70. let seděli kompilátoři na velkých sálových počítačích, které byly často rezervovány dny nebo týdny předem. Protože nechtěli, aby chyby způsobovaly zpoždění, kodéři – kteří v počátcích bývali školeni jako matematici nebo fyzici – zůstávali pozdě ve svých kancelářích a důkladně kontrolovali svou práci. Psací software bylo podobné psaní vědeckých prací. Zvykem byla přísnost, dokumentace a peer-review prověřování.
Ale jak se počítače rozšířily, postoje se změnily. Namísto pečlivého plánování kódu zůstávali programátoři v celonočních hackerských relacích s kofeinem a neustále odráželi výsledky od kompilátoru. Překladač znovu a znovu plival chybové zprávy; programátoři opravovali chyby jednu po druhé, dokud se software nezkompiloval správně. Dnešní postoj je takový, že můžete napsat jakýkoli nedbalý kus kódu a kompilátor spustí diagnostiku, říká Neumann ze SRI. Pokud to nevyplivne chybovou zprávu, musí to být provedeno správně, ne?
S rostoucí velikostí a složitostí programů se však limity tohoto přístupu k kódu a opravám staly evidentními. Podle víceleté studie 13 000 programů provedené Humphreyem z Carnegie Mellon dělají profesionální kodéři v průměru 100 až 150 chyb na každých tisíc řádků kódu, který napíší. Při použití Humphreyho čísel by tak obchodní operační systém Windows NT 4 se svými 16 miliony řádků kódu byl napsán s asi dvěma miliony chyb. Většina by byla příliš malá na to, aby měla nějaký účinek, ale některé – mnoho tisíc – by způsobily vážné problémy.
Microsoft samozřejmě před vydáním důkladně testoval NT 4, ale téměř v jakékoli fázi testů najdete méně než polovinu defektů, říká Humphrey. Pokud by Microsoft prošel čtyřmi koly testování, což je nákladný a časově náročný postup, společnost by našla maximálně 15 z 16 chyb. To vám zanechá něco jako pět defektů na tisíc řádků kódu, říká Humphrey. Což je velmi málo – ale software by měl stále až 80 000 chyb.
Softwaroví inženýři vědí, že jejich kód je často prolezlý mezerami, a dlouho hledali nové technologie, jak jim předejít. Ke správě stále více roztažených projektů, jako je například Windows, vyvinuli různé techniky, z nichž asi nejznámější je návrh založený na komponentách. Stejně jako se domy staví se standardizovanými dvěma čtyřmi a elektrickými armaturami, programy založené na komponentách jsou sestaveny z modulárních, vzájemně zaměnitelných prvků: příkladem je téměř identická lišta nabídek na vrcholu každého programu pro Windows nebo Macintosh. Takové standardizované komponenty jsou podle Wallacha nejen dobrou inženýrskou praxí, ale jsou jediným způsobem, jak můžete něco o velikosti Microsoft Office vůbec zprovoznit. Říká, že Microsoft byl raným, agresivním propagátorem tohoto přístupu – je to jediné nejlepší inženýrské rozhodnutí, jaké kdy udělali.
Bohužel, kritici říkají, že součásti jsou často slepeny dohromady bez skutečného centrálního plánu – jako by se dodavatelé snažili postavit velké stavby bez jakýchkoli plánů. Neuvěřitelné, říká Humphrey, design pro velké softwarové projekty někdy není nic jiného než pár bublin na zadní straně obálky. Horší je, že z marketingových důvodů společnosti spojují co nejvíce funkcí do nového softwaru, čímž jsou v rozporu s výhodami modulární konstrukce. Nejrozšířenějším příkladem je samotný Windows, o kterém Bill Gates svědčil na dubnovém zasedání antimonopolního soudu společnosti Microsoft, který by jednoduše nefungoval, pokud by zákazníci odebrali jednotlivé součásti, jako jsou prohlížeče, správce souborů nebo e-mailové programy. To je neuvěřitelné tvrzení, říká Neumann. Znamená to, že ve způsobu, jakým tyto systémy postavili, není žádná struktura, architektura, rým nebo důvod, kromě toho, aby byly co nejvíce spojené, takže pokud odstraníte jakoukoli část, všechno selže.
Neadekvátní design ve finálních produktech, tvrdí kritici, odráží nedostatečné plánování v procesu jejich vytváření. Podle studie Standish Group, konzultační firmy ve West Yarmouth, MA, jsou projekty komerčního softwaru v USA tak špatně plánovány a řízeny, že v roce 2000 byla téměř čtvrtina přímo zrušena a nevznikl žádný konečný produkt. Zrušené projekty stály firmy 67 miliard dolarů; překročení jiných projektů vydělalo dalších 21 miliard dolarů. Ale protože kód a oprava vedou k tak rozsáhlým a nákladným kolům testování, mohou být i úspěšné projekty extrémně neefektivní. Je neuvěřitelné, že softwarové projekty často věnují 80 procent z jejich rozpočtů na opravu nedostatků, které sami vyprodukovali – číslo, které nezahrnuje ještě nákladnější proces poskytování podpory produktu a vývoje záplat pro problémy zjištěné po vydání.
Testování systému trvá téměř polovinu procesu, říká Humphrey. A i když to konečně zprovozní, stále neexistuje žádný design. V důsledku toho nelze software aktualizovat nebo vylepšovat s jistotou, že aktualizace nebo vylepšení nepřinesou závažné chyby. To je způsob, jakým se všude navrhuje a vyrábí software – je to tak i na vesmírných lodích, proboha.
Je software speciální případ?
Potenciální rizika špatného softwaru byla ponuře ilustrována v letech 1985 až 1987, kdy počítačově řízený přístroj na radiační terapii vyrobený vládou podporovanou Atomic Energy of Canada masivně předávkoval pacienty ve Spojených státech a Kanadě a zabil nejméně tři. Při vyčerpávajícím zkoumání Nancy Levesonová, nyní počítačová vědkyně z MIT, přisoudila velkou část viny neadekvátním postupům softwarového inženýrství výrobce. Protože program používaný k nastavení intenzity záření nebyl navržen nebo testován pečlivě, jednoduché překlepy spustily smrtící výbuchy.
Navzdory této tragické zkušenosti podobné stroje se softwarem vyrobeným společností Multidata Systems International ze St. Louis masivně předávkovaly pacienty v Panamě v letech 2000 a 2001, což vedlo k dalším osmi úmrtím. Tým z Mezinárodní agentury pro atomovou energii připsal úmrtí zadávání dat způsobem, který programátoři nepředpokládali. Jak poznamenává Leveson, jednoduché chyby při zadávání dat by neměly mít smrtící následky. Takže i toto selhání může být způsobeno nedostatečným softwarem.
Experti na programování mají tendenci souhlasit s tím, že takové katastrofy jsou zoufale běžné. Vezměme si Mars Climate Orbiter a Polar Lander, oba zničené v roce 1999 známými chybami v kódování, kterým lze snadno předejít. Někteří ale tvrdí, že software prostě nelze posuzovat, měřit a vylepšovat stejným způsobem jako jiné inženýrské produkty. Je prostě fakt, že existují věci, které mohou dělat jiní inženýři a my ne, říká Shari Lawrence Pfleeger, vedoucí výzkumná pracovnice think-tanku Rand ve Washingtonu, DC a autorka svazku z roku 2001. Softwarové inženýrství: Teorie a praxe . Pokud most přežije váhu 500 kilogramů a váhu 50 000 kilogramů, mohou inženýři předpokládat, že unese všechny hodnoty mezi nimi, poznamenává Pfleeger. Se softwarem, říká, nemohu učinit tento předpoklad – nemohu interpolovat.
Výrobci softwaru navíc pracují pod mimořádnými požadavky. Ford a General Motors vyrábějí stejný produkt – čtyřkolovou skříň se spalovacím motorem – po celá desetiletí. V důsledku toho, říká Charles H. Connell, bývalý hlavní inženýr společnosti Lotus Development (nyní součást IBM), byli schopni své produkty postupně zlepšovat. Softwarové společnosti jsou však neustále žádány, aby vytvářely produkty – webové prohlížeče na počátku 90. let, nová rozhraní mobilních telefonů dnes – na rozdíl od čehokoli, co bylo dříve vidět. Je to jako když výrobce automobilů říká: Tento rok vyrobíme místo auta raketovou loď,“ říká Connell. Samozřejmě budou mít problémy.
Klasickým dilematem v softwaru je, že lidé neustále chtějí stále více a více věcí, říká Nathan Myhrvold, bývalý technologický ředitel společnosti Microsoft. Bohužel, poznamenává, že neustálá poptávka po novinkách znamená, že software je vždy ve fázi rozbití, kdy jsou produkty ze své podstaty méně spolehlivé. V roce 1983, říká, měl Microsoft Word pouze 27 000 řádků kódu. Potíž je v tom, že to moc neudělalo – což by dnešní zákazníci nepřijali. Pokud by Microsoft nepřestal doplňovat Word novými funkcemi, produkt by již neexistoval.
Uživatelé si ohromně neuvědomují sami sebe, dodává Myhrvold. V Microsoftu, říká, firemní zákazníci často požadovali, aby společnost současně přidala nové funkce a přestala přidávat nové funkce. Doslova, slyšel jsem to jediným dechem, jedinou větou. Nejsme si jisti, proč bychom měli upgradovat na toto nové vydání – obsahuje všechny ty věci, které nechceme – a kdy tam ty tři věci vložíte?“ A vy říkáte: „Aha?“ Myhrvoldovo sardonické shrnutí: Software naštve, protože to uživatelé vyžadují.
Vyšší standardy
V lednu Bill Gates vyzval zaměstnance Microsoftu, aby učinili ze spolehlivých a bezpečných počítačů jejich nejvyšší prioritu. V tom, co společnost považovala za jednu ze svých nejdůležitějších iniciativ za poslední roky, Gates požadoval, aby Microsoft dramaticky snížil počet defektů ve svých produktech. O měsíc později společnost podnikla bezprecedentní krok a pozastavila veškeré psaní nového kódu na téměř dva měsíce. Místo toho se shromáždilo tisíc programátorů najednou na hromadná školení o spolehlivosti a zabezpečení. Na obrovských obrazovkách v obří posluchárně předváděli manažeři společnosti trapné úryvky chybného kódu vytvořeného těmi v publiku.
Gatesova iniciativa byla zjevně inspirována vlnou kritiky, která zachvátila Microsoft v červenci 2001, kdy přetečení vyrovnávací paměti – dlouho známý typ chyby – v jeho softwaru webového serveru Internet Information Services umožnilo červovi Code Red obětovat tisíce jeho firemních klientů. (Při přetečení vyrovnávací paměti program obdrží více dat, než se očekávalo – jako by se místo pro PSČ vyplnilo 50místným číslem. V počítači se dodatečné informace rozsypou do sousedních částí paměti a poškodí nebo přepíšou o dva měsíce později červ Nimda zneužil další chyby v softwaru k útoku na tisíce dalších strojů.
Poškozeni takovými zkušenostmi, vývojáři softwaru stále více dbají na kvalitu. I když Gates shromažďoval své vojáky, think-tanky jako Kestrel Institute, Palo Alto, CA, vyvíjely sady programovacích nástrojů správných konstrukcí, které téměř nutí kodéry psát spolehlivé programy ( viz První pomoc při chybném kódu ). V samotném Microsoftu, podle Amitabha Srivastavy, vedoucího firemního Centra pro výzkum produktivity programátorů, kodéři pracují s novými jazyky vyšší úrovně, jako je C#, které neumožňují určité chyby. A v květnu Microsoft spolu s NASA a 16 dalšími firmami založil konsorcium pro udržitelný rozvoj (Sustainable Computing Consortium) v hodnotě 30 milionů dolarů se sídlem v Carnegie Mellon s cílem propagovat standardizované způsoby měření a zlepšování spolehlivosti softwaru. Úsilí o kontrolu kvality se může bohatě vyplatit: Praxis Critical Systems z Bath v Anglii, která pomohla společnosti Lockheed Martin předělat software ve svém letadle C130J, použila tyto metody ke snížení nákladů na vývoj o 80 procent při výrobě softwaru, který prošel přísnými zkouškami Federálního úřadu pro letectví. velmi málo chyb.