Jún 24, 2010

Neviditeľnosť softvéru je závažný problém

Už ste si skúsili postaviť vlastný hadrónový urýchľovač? Takú stavbu si aspoň niekto všimne.

V softvérarskom svete sme na tom horšie. Môžete postaviť kompletné vesmírne stredisko a nikto si toho ani nevšimne. Ľudia vidia zo softvéru len jeho rozhranie. V tom bežnejšom prípade si ho všimnú iba keď nefunguje. Prípadne vtedy, keď im zlé zaoukrúhľovanie zožerie polku výplaty.

Skúsme sa na to pozrieť inak. Poznáte také mestá ako Košice (234 000 obyvateľov), Brno (383 000 obyvateľov), Považská (42 000 obyvateľov)? Prípadne dedinky ako Šanghaj (9 000 000 obyvateľov)?

Mesto má svoju štruktúru. Sú v ňom budovy s architektúrou, ale aj bez architektúry. Mesto rastie a mení sa. Tu ľudia niečo zbúrajú, tu niečo postavia.

A tak je to aj so softvérom. Vývojári zistia, že 10 rokov starý kód nevyhovuje požiadavkam, tak sa ho rozhodnú odstrániť. Musia postupovať opatrne. Celý proces je zložitý, pretože na tom kóde žije niekoľko stoviek klientských aplikácií. Jednoducho si nemôžu dovoliť len tak prísť a zdemolovať kus centra. Teda môžu, ale bude to mať svoje dôsledky a cenu.

Softvér so sebou nesie jeden veľký problém a tým je práve jeho neviditeľnosť. Ľudia si ho nedokážu predstaviť tak jednoducho ako mesto. Mestom sa stačí prejsť a človek získa aspoň chabý pocit, že sa tam vyzná.

Koľko vývojárskych hodín sa stratilo v uliciach systémov, pretože nikto nenechal prichádzajúcim turistom/vývojárom mapu? Veľa, veľmi veľa. Pritom každé väčšie mesto má nejakú tú turistickú kanceláriu 😉

Tak ako mesto je živé, len pokiaľ sú tam ľudia, tak aj softvér žije, keď sa oň niekto stará. Existujú aj softvérové mestá duchov. Nič netušiaci okoloidúci vývojár do nich vlezie, pretože videl ceduľu: “Navštívte naše Sedmikráskovo, mesto kde zabudnete na pomalé web services.” Nadšený prísľubom lepších zajtrajškov vlezie do mesta. Scéna ako z westernu. Prázdne bloky modulov sa týčia okolo cesty. Napravo stojí rozpadnutý a hrdzavý message bus, ktorý už určite nikam nepôjde. Ľadový vietor si kotúľa po ceste kus balíka so slamou z XMLouvníku.

Vývojár nesmelo zavolá: “Hello world!” a najbližší blok modulov sa rozsype a zrúti sa strašným zadunením stack tracu. Strhne so sebou aj kus starého koloniálu s vývesným štítom: “Vedma G11 (TM), viem všetko aj o vašich skrytých dátach.”

Takto nejako by vyzeralo veľa softvérových produktov.

Dávnejšie som písal o jednej vizualizačnej metóde pomocou CodeCity. Zaujímalo by ma, či náhodou niekto nevie o nejakej ďalšej metóde. Myslím si, že keby bolo možné lepšie zviditeľniť softvér do obrazov reálneho sveta, tak by sa ľahšie odhadovala pracnosť a nebezpečnosť zmien.

Jún 25, 2009

Vizualizácia kódu

Zorientovať sa vo veľkých softvérových projektoch, ktoré človek doteraz nevidel a žil v šťastnej nevedomosit o ich existencii, nie je vôbec jednoduchá úloha. Vo veľkom projekte sa môže stratiť nie len náhodný cudzinec, ale aj príslušníci kmeňa vývojárov, ktorý sa o projekt starajú. No a z hlavného architekta sa stane kmeňový šaman, veštiaci architektúru z rozhádzaných kostí. Pri projektoch, ktoré rastú a rozvíjajú sa, môže tento problém nastať veľmi rýchlo.

Na pomoc s orientáciou v kóde sa používa vizualizácia pomocou diagramov a schém. Prvý nápad ako vizualizovať kód napríklad C++ servera je nakreslenie tried do UML. Pokiaľ má projekt niekoľko stoviek až tisícok súborov so zdrojovým kódom, nie je to veľmi šťastný nápad. Existujú nástroje, ktoré vám pomocou Reverse engineeringu zostavia UML schému.

UML je síce pekné, ale takéto zobrazenie nemá takmer žiadnu vyjadrovaciu silu. Dôležité informácie zapadnú v kvante ďalších informácií a k reverse engineeringu musíte pripojit steganografiu a datamining.

Existujú projekty, ktoré vedia zanalyzovať kód a vytiahnuť z neho veľmi zaujímavé informácie. Pokiaľ sa pohybujeme v dvojrozmernom svete, tak stojí za to zmieniť dva z nich.

CodeCrawler prehľadáva kód a zobrazuje ho vo forme jednoduchého grafu. Projekt je určený primárne pre Scheme.

Zaujímavjším je projekt X-Ray. Jedná sa o plugin do Eclipse. Analýza je omnoho interaktívnejšia, takže priamo v prostredí IDE, je vývojár schopný vidieť, kde sa mu v projekte vytvárajú príliš veľké triedy alebo God objekty.

Tu len pripojím malú poznámku: god objekt v projekte, je ten, ktorý toho vie príliš veľa a robí príliš veľa. Typicky vzniká postupnou kumuláciu funkcií v singletonoch. Jedná sa o antipattern.

Trojrozmerný svet prináša novú dimenziu 🙂 Pomocou nástroja CodeCity je možné kód vizualizovať vo forme mesta. Na základe relatívne jednoduchej vizualizácie dokážete  v kóde identifikovať “budovy”, ktoré sú príliš veľké alebo tenké a vysoké. Tieto krajné prípady predstavujú zdroj potenciálnych problémov pri ďalšom vývoji.

Argo UML v024-coarse

Dobrý podcast na tému vizualizácia kódu nájdete na stránkach Software Engineering Radio.