Vyplatí se refaktorizovat i starý kód?

Každý větší program má v sobě alespoň jeden kus kódu, na který se dlouhou dobu nesahalo, protože to prostě nebylo potřeba – funguje a dělá to, co má. Kvalita takového kódu je ale obvykle nižší než kvalita zbytku programu, protože se mu nedostalo dalšího vývoje a refaktorizací.

Joakim Karlsson si všiml zajímavé věci: pokud do takového kódu z nějakého důvodu po dlouhé době zasáhnete, je vysoká pravděpodobnost, že do něj brzy budete muset zasahovat znovu. Změny mají tendenci se kupit, při testování narazíte na chyby v původním kódu apod. Je to poněkud neintuitivní, ale i dle mé zkušenosti to tak opravdu je.

Co toto pozorování znamená pro praxi? Při zásazích do starého kódu je obvyklé provádět změny způsobem, který se co možná nejméně dotkne stávajícího kódu, a to i za cenu nižší kvality výsledku. Logika velí, že nemá smysl se snažit cokoliv měnit a vylepšovat, když se sem stejně nikdo zase dlouho dívat nebude. Joakimovo pozorování právě tuto logiku narušuje a indikuje, že i starý kód se může vyplatit začišťovat a refaktorizovat – zkrátka aktivně zlepšovat jeho kvalitu, stejně jako u kódu živého – protože ve skutečnosti není tak mrtvý, jak se zdá.

Joakim se snaží své pozorování dokládat na analýze Subversion repository Pythonu a GCC. Jeho metodika je ale velmi sporná – měří intervaly mezi změnami ve všech souborech, nijak neodlišuje starý kód. Dochází tím pádem neodvratně k histogramu s exponenciálním rozdělením, což by předpověděl každý absolvent kurzu pravděpodobnosti a statistiky.

Celý článek je tak třeba brát spíš jako anecdotal evidence a námět na zamyšlení a diskuzi. Vzhledem k tomu, že údržba starého kódu je reálný problém, by se ale myslím vyplatilo problém prozkoumat trochu hlouběji.

Jul 4, 2009 – 9:33

Comments

Marek Soldát
Čistě z pohledu praxe je můj názor víceméně jasný:

- Co funguje jako samostatný celek nechat být a drobné úpravy dělat šetrně.

- Co je součástí většího celku při úpravách refaktorizovat (zejména pak vyhazovat části kódu, které dělají něco, na co už v daném projektu existuje nějaká funkce).
Honza
Dává to smysl. Akorát by mě zajímal rozdíl mezi "refaktorizovat" a "refaktorovat". Refaktorizovat mi přijde jako patvar.

Add comment

It is not possible to add comments to posts older than one month.