7.3.2018

Určitě se vám to už stalo. Stáhli jste si novou verzi nějaké aplikace a vaše oblíbená funkce najednou nefunguje. Někdy se software rozbije i bez aktualizace, sám od sebe. Zkusím zde netechnickým jazykem popsat proč se to děje a jak se tomuto negativnímu jevu snažíme předcházet.

Software nemá díly, které by se mohly opotřebovat, proto se nikdy nerozbije sám o sobě, ale vždy na základě nějakého vnějšího vlivu.

repari hammer

Aktualizace operačního systému nebo jiného softwaru

Výrobci operačních systémů se snaží, aby nová verze systému byla vždy kompatibilní se staršími aplikacemi. Ne vždy se to povede a i operační systémy píšou jenom lidé a tak v každé nové verzi přibudou vždy nějaké nové chyby.

Připravit se na tyto nechtěné efekty aktualizace systému příliš nelze. My aplikační vývojáři zkrátka spoléháme, že nám systém dodá nějakou službu a nemáme možnost se jednoduše chránit proti jejímu náhlému selhání. Je to podobné jako když doma očekáváme, že i zítra poteče z kohoutku pitná voda. Pokud poteče rezavá, teprve pak to začínáme řešit. Vlastní zásoby na týden dopředu má doma málokdo.

Nezbývá tedy než s každou novou verzí operačního systému aplikaci otestovat, jestli nedošlo k nějaké změně, která ji negativně ovlivnila.

Problém s daty

Další způsob jak aplikaci rozbít je zadat do ní data, se kterými programátor nepočítal. Samozřejmě snahou každého vývojáře je co nejlépe vstupy do aplikace ošetřit. Vždy se ale najde nějaká skulinka, integrací s produkty třetích stran se pravděpodobnost netěsnosti ještě zvyšuje.

Jako prevenci vždy zkoušíme do aplikací zadávat nesmyslné věci a ověřujeme, jestli takové vstupy aplikace korektně odmítne. Měla by totiž nejenom vyhodit hlášku “Chyba 34569” a tak se zachránit před spadnutím, ale především vysvětlit uživateli jak má formulář vyplnit správně.

Programátorská chyba

Chyby jsou smutná realita softwarového průmyslu. Každý software nějaké chyby obsahuje, snad s výjimkou opravdu kritických systémů řízení jaderných elektráren, vesmírných družic a zbraňových systémů. Jediná možnost jak zajistit 100% správnou funkčnost software totiž znamená zkonstruovat matematický důkaz jeho správnosti, což je u většiny softwarových produktů díky jejich rozsahu nereálné.

I během vytváření nových funkcí může vzniknout chyba, která poškodí už existující funkcionalitu. Proč se ti programátoři ale hrabou v něčem co už fungovalo, když mají pracovat na něčem novém?

Krabičky

Moderní software si můžeme představit jako spoustu krabiček, které mezi sebou vzájemně komunikují. Představme si, že píšeme jednoduchou kalkulačku. Už nám hezky sčítá, odčítá, dělí a násobí. Rozhodneme se přidat podporu pro závorky. Z pohledu uživatele jenom přibudou tlačítka levé a pravé závorky a správně se spočítá výsledek.

Programátor ale musí upravit krabičku vykreslující zadaný příklad na displej, krabičku provádějící výpočet, krabičku klávesnice kalkulačky a krabičku hlídající správnost zadaného příkladu, například abychom nemohli zadat příklad „1(+)2“.

Jak vidíte, všechny tyhle krabičky už existovaly, něco dělaly a nyní se musí zasáhnout do jejich funkcionality a zásadně je upravit. Je pak snadné omylem rozbít například funkci sčítání. Už na takto triviálním příkladu je vidět, jak snadno chyba vznikne. Teď si představte systém s desítkami nebo stovkami krabiček a jejich štěbetání.

Automatizované testy

Nejefektivnější obranou proti tomuto problému jsou automatizované testy. Můžeme si je představit jako dozorce, kteří hlídají, že krabička vyhodnocující příklad umí správně počítat „1+1“, že si poradí i s „-2+3“ a nově budeme hlídat i „-(-2+3)“ atp.

Před vydáním nové verze pak vždy spustíme tuto sadu testů a víme, že se nic nerozbilo. Tedy nerozbilo se to, co testujeme a tady je právě kámen úrazu. Nikdy nepokryjeme úplně všechny případy, které mohou nastat a některé chyby proto proklouznou. Druhou nevýhodou je poměrně vysoká časová náročnost psaní testů.

I přes výše uvedené nedostatky jsou automatizované testy v současné době to nejlepší co umí programátoři proti chybám nasadit. Následovat by ale vždy mělo ruční testování a beta testing.

 

Více o tom, jak se snažíme předcházet chybám, se můžete dozvědět v našem článku o testování.

 

Vladislav Skoumal
SKOUMAL CEO