[Kniha] Refactoring Databases - Evolutionary database design

~ ~

Scott W. Ambler, Pramod J. Sadalage

Vychází v podpisové edici Martina Fowlera který tím jaksi ručí za kvalitu série. Bohužel konkrétně tato kniha je nezajímavá až nudná. Sice může fungovat jako referenční příručka možných databázových refaktorizací ale ani v této oblasti nepřináší nic nového. Je prostě pouhým seznamem.

Pokud máte s databázemi a jejich správou alespoň nějaké zkušenosti je pro vás tato kniha ztrátou času. 

Zelená je louka, testování to je hra

~ ~
Vždycky když přijde nový programátor a nevyzná se v systému a vidí nepořádek v kódu aplikace napsané hurá stylem bez použití moderních metodik jako je například jednotkové testování tak by rád přesvědčil kolegy o nezbytnosti přepsání systémů. Je svěží, má spousty nápadů a zná požadavky na novou verzi systému a věří, že nový začátek na zelené louce je cesta k úspěchu.

Bohužel tohle nikdy nefunguje. Požadavky na software jsou věc která se mění doslova každou minutu. A proto náš čerstvý programátor stojí, aniž by to tušil, na okraji propasti. Nějaký čas stráví návrhem aplikace, datového modelu, grafického rozhraní a dalších subsystémů. Ve chvíli kdy začne programovat už je návrh zastaralý. Každou chvíli dorazí někdo z kolegů s nápadem na další skvělou vlastnost. Jenže náš programátor už má "navrženo" a přidání vlastnosti se kterou původně nepočítal odsouvá do dalších verzí. Až se ta první vypiluje.

A v tuhle chvíli už nová zelená aplikace nevyhovuje aktuální požadavkům a začne vznikat tlak na slavné uvedení první verze. Nastaví se termín. Tlak se zvyšuje a aby se to stihlo některé věci se neudělají ideálně (to ostatně ani nejde) a zelená louka se začíná špinit.

Autor nového systémů ale pořád ještě trpí zbytkovým nadšením a tvrdí, že systém je modulární a chybějící vlastnosti není problém jednoduše dopsat. Ano, ale kdo a kdy to udělá? Když se všichni potýkají s novými chybami nového systému a učí se ho používat. Chyby se navíc opravují v rychlosti a zelená louka začíná vypadat jako po nájezdu nevychovaných turistů. A z obchodního oddělení chodí jízlivé dotazy na téma proč ta nová skvělá verze neumí ani polovinu toho co uměla ta stará "špatná" verze.

A do toho nastoupí nový programátor. A ten má skvělý nápad, protože naprosto přesně zná požadavky na danou aplikaci.

Netvrdím, že psát software znovu nemá smysl, někdy totiž není vyhnutí. Zvláště u aplikací napsaných v roce 2001 v PHP 3.x, později naportovaných do PHP 4.x tím, že se z přípon souborů odstranila trojka. A když čtvrtá řada přestala být podporovaná tak uzavřením tisicířádkových skriptů do jediné metody jediné třídy aby to bylo jakože to emvécé.

V zásadě existují dvě cesty jak se s tím vypořádat. Skutečně začít na zelené louce, využít programování řízené testy a další metodiky na udržení kvality kódu. Nebo využít stávající systém napsat pro něj testy. Výhody jsou jasně na straně prvního pokud máte nekonečně času a peněz. Výhody druhého jsou ty, že v jakýkoliv okamžik vývoje máte minimálně stejně špatně fungující systém který umí všichni používat a dobře ho znají všechny jeho nevýhody.

Nesnesitelná lehkost TDD

~ ~
Když se mi před několika lety dostala do rukou knížka Kenta Becka byl jsem ohromen a nemohl jsem uvěřit, že řešení mých problémů je tak snadné.

Díky xUnit frameworkům můžu testovat výstupy metod/funkcí a porovnávat je s referenčními hodnotami. Testy můžu spouštět opakovaně, automaticky a nemíchám je s produkčním kódem. Obrovský pokrok od špaget zasviněných zakomentovanými var_dumpy.

Nadšení vystřídalo zklamání protože všechny tutoriály se omezily na nejzákladnější příklady typu Napiš si svůj první unittest. Já ale hledal způsob jak testovat svoje existující aplikace přistupující do databáze a generující HTML výstup. Jak testy strukturovat, kde je mít uložené a jak s nimi pracovat v PHP.

Zdálo se, že jediný způsob jak rozjet vývoj řízený testy je začít s novým projektem na zelené louce. To je sice jedno z řešení ale bohužel se ukazuje jako krajně nevhodné pokud nezačínáte s opravdu novým projektem který má dělat věci které jste ještě nikdy neprogramovali. Jinak totiž hrozí riziko, že budete roky a roky psát dokola pořád to samé a při každé iteraci to bude mít stále méně funkcí. Navíc musíte zároveň udržovat starý systém ale už nepřidáváte nové vlastnosti a jenom záplatujete a soutředíte se na systém nový který samozřejmě ještě není hotový a na jeho dokončení je vyvíjen obrovský tlak. Takže některé věci neuděláte tak dobře jak byste chtěli a zelená louka už není tak zelená.

Jako mnohem vhodnější způsob se ukazuje postup někdy nazývaný Mírný pokrok v mezích zákona. Tento způsob je sice možná pomalejší ale výrazně bezpečnější, protože nemusíte řešit přechodný stav kdy se vyvíjí nový systém, netříštíte síly při vývoji dvou systémů a zárověn pracujete se systémem který dobře znáte. Takže tento způsob je ve svěm důsledku paradoxně rychlejší.

A teď, ke strojům.

O testování a lidech

~ ~
Všechno co jsme do této chvíle naprogramovali je špatně. To že to funguje nás neomlouvá.

Tento blog bude o programování. O radosti z programování a snaze udělat ze světa lepší místo. O testování webových aplikací, lepším návrhu, čistém kódu a, fuj, o péhápku.

Když mluvím o testování mám většinou na mysli jednotkový testování, ale hlavně půjde o automatické testování softwaru takže se nevyhneme integračním a akceptačním testům. A v rámci čistoty kódu si povíme i o refaktorování a kvalitě obecně.

Hlavní důvod proč se vrhám na tak něvděčnou činnost jako je psaní o zdánlivých zbytečnostech je, že takhle ke stáru začínám být trochu radikální a doslova doruda mě vytáčí co všechno za paskvily jsou schopni programátoři vyplodit, mě nevyjímaje.

A co mě opravňuje k tomu abych do toho tak ryl? Zkušenosti, milé děti. Webové aplikace v PHP programuju už devátým rokem. Napsal jsem několik CMS i tzv redakčních systémů, webový obchod, dva frameworky... Psal jsem v Jave i C#, embedded i desktopové aplikace v několika asemblerech, v mnoha odrudách basicu včetně nechvalně proslulého VB6. Psal jsem intepretry vlastních jazyků v C i v C++ a pár řádků jsem zanechal i ve zrůdném Pascalu. Teď, po dvaceti letech, už vím jak se to dělat nemá. Vydejte se se mnou za osvícením.

A ano jsem z Prahy, takže jsem dost nafoukanej.