Robert Važan

Softvérové chyby požierajú svet

Pred niekoľkými rokmi som napísal príspevok o tom, že softvér je čoraz pomalší. Teraz sa na tie roky pozerám s nostalgiou, ako na staré dobré časy, keď bol výkon najviditeľnejším problémom. Výkon sa časom samozrejme len zhoršoval, ale do centra pozornosti sa dostalo niečo oveľa horšie: chyby. Všadeprítomné chyby.

Dnes bol dogfoodový festival. Mal som priamu skúsenosť s produktmi svojej profesie, neslávne známych programátorov. Početné chyby v týchto produktoch v podstate zhltli celý môj deň, a tak tu teraz premýšľam, čo sa pokazilo v softvérovom biznise.

Samozrejme, keď som sa chystal o tom napísať a otvoril som Eclipse (moje texty píšem priamo do kódu, úplne vážne), Eclipse ma privítal niekoľkými prekrývajúcimi sa chybami. Ale na to som si už zvykol a za ten čas, čo Eclipse používam, som si už spravil katalóg návodov, ako sa s takými chybami vysporiadať. Skutočný problém je ale v tom, ako sa chyby vkrádajú do reálneho, fyzického sveta, ako sa stávajú neoddeliteľnou súčasťou každodenných produktov, ktoré používajú milióny ľudí.

Prípad č. 1: Počítačový hardvér

Kúpil som si počítač, pretože zvyšovanie energetickej efektívnosti nových počítačov postupne mení môj starý počítač na drahý elektrický radiátor. To je zatiaľ všetko v poriadku. Potom som začal testovať. Zadný konektor mikrofónu nefunguje, zatiaľ čo predný áno. Zostal som na pochybách, či je to zlý kus alebo skôr zlozvyk výrobcov vkladať konfiguráciu audio portov do Windowsových ovládačov namiesto toho, aby ju uložili do samotného hardvéru, kde ju môžu nájsť aj iné operačné systémy. To je dôvod, prečo je hdajackretask taký populárny. Ale toto je zatiaľ len otravná maličkosť.

Pripojil som monitor HDMI. Funguje. Potom som pripojil ďalší monitor cez DP. Funguje, ale monitor HDMI prestal fungovať. Ukázalo sa, že je to bežný problém mnohých (väčšiny?) základných dosiek. Tak som sa pohral s nastaveniami BIOSu podľa návodu Asusu. Bez efektu. (Mimochodom, táto časť BIOSu sa nazýva "Konfigurácia NB". NB znamená "notebook"? Čo to robí v základnej doske stolného počítača?) Ešte som sa s tým nejaký čas hral a potom som prišiel na nápad odpojiť a potom pripojiť monitor pri spustenom operačnom systéme. A je to! Dva monitory fungujú! Prečo to fungovalo až po hotplugovaní je pre mňa záhadou. Nechápem však, prečo to výrobcovia neurobia tak, aby to fungovalo štandardne bez nastavovania, ako to robí moja stará základná doska? Prečo sa musíme hrať v nastaveniach BIOSu a potom robiť nejaké triky s hot-plugom? Mať viaceré monitory nie je nič exotické. FullHD monitory stoja ~100 €. Je úplne normálne, že ich ľudia majú niekoľko.

Ale poďme ďalej. Keď som testoval novú zostavu, všimol som si, že chladič CPU (AMD Wraith Stealth) bzučí/vrčí ako malá motorová píla. Prekvapuje ma, že niečo tak jednoduché a masovo vyrábané sa nedá vyrobiť s konzistentnou kvalitou, ale o výrobe toho veľa neviem. Čo viem určite, je, že chlapík, ktorý to robil moju zostavu (50 € len za prácu, o nič menej) v Alza eshope musel ten hluk počuť a aj tak si povedal, že zostavu odošle. Pritom testovanie zostavy má byť v cene. Teraz ju musím poslať späť, aby mi ventilátor vymenili. Keby to bolo podchytené pri montáži, mohol chlapík jednoducho siahnuť po náhradnom chladiči a ušetriť všetkým čas.

Prípad č. 2: AlzaBox

Teraz prichádza vzrušujúca časť. Počítač posielam pomocou služby AlzaBox (automatické schránky vedľa miestneho supermarketu). Vyplním teda záručný formulár a idem do AlzaBoxu. V pokynoch sa píše, že mám naskenovať čiarový kód alebo zadať číslo na formulári. Na vytlačenom formulári je len jeden čiarový kód, tak ho naskenujem, ale je odmietnutý ako neplatný. Hm, dobre, môžem zadať číslo zásielky ručne. Až na to, že sú dve, čo je mätúce, ale vyberám si to pod čiarovým kódom. Terminál skrinky na balíky po zadaní prvých 1-2 číslic zamrzne, potom sa resetuje na hlavnú obrazovku, len aby pri opakovaných pokusoch opäť zamrzol. Toto zariadenie má asi 10 polí používateľského rozhrania, veľmi minimálnu funkčnosť a aj tak dokáže zamrznúť? AlzaBoxy sú po celej krajine a nikto si to ešte nevšimol? Nie že by pri testovaní bolo treba pokryť nejaké enormné množstvo prípadov. Počas volania na technickú podporu (viac o tom nižšie) som našiel online generátor čiarových kódov a vytvoril čiarový kód pre druhé číslo vo formulári. Bez úspechu. Terminál zobrazí číslo na obrazovke, takže ho správne naskenuje, ale odmietne ho. Takže tu vidím tri prekrývajúce sa chyby. Po prvé, záručný formulár je mätúci, pretože obsahuje dve identifikačné čísla a jeden čiarový kód (pravdepodobne ten nesprávny). Po druhé, softvér Alzy nerozpozná ich vlastné reklamačné čísla. Po tretie, pri ručnom zadávaní čísla terminál zamrzne.

Prípad č. 3: Umelo inteligentá technická podpora

Okej, tak volám na číslo zobrazené na termináli. "Dobrý deň, tu je inteligentný asistent spoločnosti Alza. Prosím, stručne popíšte problém." Wow, to je naozaj rýchla adopcia jazykových modelov v biznise. Nanešťastie, čoskoro je bolestne zrejmé, že asistent nerozumie ani pol slova z toho, čo hovorím, a to tak na úrovni rozpoznávania reči, ako aj na kognitívnej a znalostnej úrovni. Som jednoznačne za automatizáciu, ale nasadenie automatizácie má znížiť náklady a zároveň zlepšiť kvalitu. Asistent je úplne nepoužiteľný, tak si pýtam živého operátora. Našťastie vývojári tohto nefunkčného experimentálneho prototypu umelej inteligencie mali dosť rozumu, aby chatbot vyhovel takýmto požiadavkám bez hundrania. Živý operátor reštartuje systém na diaľku (pretože to je to, čo robí technická podpora). a je mi povedané, aby som počkal 15 minút, kým sa reštart dokončí. Moment, čo, 15 minút? Uľaví sa mi, keď sa ukáže, že to bolo prehnané a terminál sa reštartuje za tri minúty. Stále je však rovnako pokazený. Budem musieť počítač odniesť do ich kamennej predajne.

Prípad č. 4: Samoobslužná pokladňa

Vydávam sa teda do supermarketu, aby som z tejto cesty aspoň niečo mal, a tam si spomínam na ďalšiu chybu. Väčšina samoobslužných pokladní je len na platenie kartou. Existujú terminály, ktoré prijímajú hotovosť, ale po použití jedného z nich chápem, prečo je väčšina z nich len na karty. Tie, ktoré prijímajú hotovosť, sú pomalé. Softvér zjavne neustále kontroluje prítomnosť hotovosti. To zahŕňa niekoľko pomalých mechanických operácií, ktoré zrejme neprebiehajú na pozadí, pretože blokujú celé používateľské rozhranie. Terminál nevysvetliteľne kontroluje prítomnosť hotovosti neustále, nielen keď sa chystáte platiť. Keď vás terminál každých pár sekúnd vyruší klikaním, chodom elektromotorov a blikaním diód, naučíte sa takýmto terminálom vyhýbať a vždy používať len tie kartové. Dnes je toto zariadenie, ktoré používa doslova každý. Ako je možné, že to ešte nikto neopravil? Ako je možné, že sa taká očividná (a pravdepodobne drahá) chyba nerieši tak dlho?

Prípad č. 5: Platby v e-shope

Chyby niekedy môžu byť aj pozitívnou skúsenosťou. Nedávno som si kúpil nejaké oblečenie v eshope H&M. Po zadaní karty som nebol vyzvaný na potvrdenie platby, takže som predpokladal, že zaplatím pri prevzatí balíka. V ich kamennom obchode sa ma však na peniaze tiež nikto nepýtal. Bol som vtedy duchom inde, tak som si to uvedomil až cestou domov. Predpokladal som, že mi neskôr z karty strhnú peniaze, čo sa aj stalo, ale potom mi sami vrátili celú sumu. Pravdepodobne ide o chybu, ale dobrú (pre mňa). Dostal som oblečenie v hodnote asi 100 € zadarmo. Určite budem v H&M nakupovať znova. Vedenie H&M ale nebude nadšené, ak sa toto deje vo veľkom.

Záver

Ak to takto pôjde ďalej, príde deň, keď ma nejaká chyba zabije. Možno sa pokazí nejaké zdravotnícke zariadenie. Manuálny reštart bude trvať niekoľko minút, zatiaľ čo ja budem umierať. A reštartovanie problém aj tak neodstráni. Náhradné zariadenie bude mať rovnakú chybu, pretože chyba sa do všetkých dostala nedávnou aktualizáciou na diaľku. Zariadenie od iného výrobcu ju bude mať tiež, pretože chyba je v nejakej knižnici, ktorú všetci používajú. Oprava chyby potrvá päť rokov a za ten čas zomrie oveľa viac pacientov. Nereálne? Zoberte do úvahy, že už dnes niektoré príliš sebavedomé autonómne autá vraždia ľudí a potom ich vláčia po uliciach ako blato na kolesách.

Ako sme sa dostali do tohto stavu? Vidím niekoľko faktorov, ktoré k tomu prispeli. Chyby sú evidované a prioritizované namiesto toho, aby boli hneď opravené. Nové funkcie, ktoré pridávajú ďalšie chyby, sú uprednostňované pred opravou existujúcich chýb. Niekedy je chyba v knižnici alebo inej závislosti a musíte čakať (možno aj donekonečna) na opravu u dodávateľa. Tento problém ešte zhoršuje komerčný kód, ktorý nemôžete sami forknúť a opraviť. Často neexistujú celosystémové automatizované testy, najmä také, ktoré by mohli testovať integrovaný hardvér. Netechnický (a často aj technický) manažment volí opatrenia, ktoré sťažujú produkciu kvality, najmä hodinové sledovanie času vývojárov a týždenné alebo dokonca denné správy o pokroku. A kravaťáci vždy najímajú najlacnejších kandidátov namiesto tých najschopnejších. Dynamické jazyky umožňujú, aby sa hrubé chyby dostali do produkcie, ak kód nemá vysoké pokrytie testami (a to nikdy nemá). Prax udržiavania stabilných vetiev už takmer vymrela. Jediný spôsob, ako získať opravu chyby, je aktualizácia na najnovšiu verziu, ktorá prináša nové chyby. Spoločným menovateľom sú tu náklady. Náklady na vývoj softvéru sa šetria obetovaním kvality. Vzdali sme sa ideálu automatizácie: zvyšovať efektívnosť a kvalitu zároveň.