Priča iz SD Worxa: Rješavanje problema legacy koda

Autor: Milivoj Bošnjak, SD Worx

Legacy kod. Dvije riječi koje mogu izazvati valove nelagode i kod najiskusnijih programera. Održavanje i razvoj na legacy aplikacijama često su kao borba s nevidljivim neprijateljem. Ovo je jedan od razloga zbog kojega ne želimo legacy aplikacije, a drugi je to da zdravstveno osiguranje nije dovoljno kada se netko iz tima sruši zbog slabosti i vrtoglavice nakon višesatnog hrvanja s našim legacy mamutima. Ako ste ikad radili s kodom starim više od deset godina, znate o čemu pričam.

Ali što podrazumijevamo pod “tri enterprise-level aplikacije”? Naš razvojni tim, podijeljen u dva squada s ukupno deset ljudi, održava i razvija tri glavne HRnet aplikacije: V20, V4 i Core aplikaciju. To su samo glavne, ali vjerujte, imamo ih još… Svaka od ovih aplikacija ima svoju povijest i svoju priču.

V20 je počeo svoj razvoj 2003. godine na .NET 1.1. Prošao je kroz niz nadogradnji, uključujući prelazak na .NET 2.0 i kasnije na .NET 4.0. Godine 2016. započeo je port na HTML5. V4 je krenuo 2009. na .NET Framework 3.5 i već 2011. prebačen je na .NET 4.0.

Ali odlučili smo da je dosta. Početkom 2023. godine započeli smo projekt prepisivanja V20 i V4 aplikacija u novu Core aplikaciju. Novi ekrani moraju imati moderan dizajn i ne smiju se jednostavno prebaciti “as-is”, već je neke stranice potrebno doraditi s novom funkcionalnošću. Prvo smo se fokusirali na ekrane koje najviše koriste obični korisnici, što smo uspješno završili. Administratorski ekrani su kompleksniji i zahtijevaju puno više resursa. Regularan posao nije dopuštao previše slobodnog vremena, pa taj dio cilja nismo uspjeli ispuniti.

Početkom 2024. godine krenuli smo s drugačijim pristupom – prepisujemo aplikacije bez novih funkcionalnosti, replicirajući postojeću funkcionalnost dok u isto vrijeme ažuriramo dizajn tako da bude u skladu s ostatkom aplikacije. Krenuli smo s V20 aplikacijom.

Koje su nam opcije? Imamo nekoliko mogućnosti za prepisivanje aplikacija:

Prepisivanje svega u novi projekt (ručno): Ovo je najtemeljitija opcija, ali i najzahtjevnija. Svaki ekran, svaka funkcionalnost se mora ručno prepisati i testirati.

Prepisivanje samo onoga što se koristi (ručno): Fokusiramo se na prepisivanje samo onih dijelova aplikacije koje korisnici najčešće koriste. Ovo je brža opcija, ali postoji rizik da nešto važno ostane neprepisano.

Automatizirano prepisivanje (AI): Tehnologija napreduje, a s njom i mogućnost korištenja AI alata za prepisivanje koda. Iako zvuči kao idealno rješenje, realnost je da AI još nije dovoljno pouzdan za ovako kompleksne zadatke.

Svaka opcija ima svoje prednosti i nedostatke. Ručno prepisivanje svega osigurava temeljitost, ali zahtijeva puno vremena i resursa. Prepisivanje samo korištenih dijelova je brže, ali može dovesti do problema kasnije. Automatizirano prepisivanje može ubrzati proces, ali trenutno nije dovoljno precizno za naše potrebe.

—-

Milivoj Bošnjak

Odlučili smo se za kombinaciju ručnog prepisivanja i fokusa na najčešće korištene dijelove aplikacija. Kako to izgleda? Naš razvojni inženjer prvo analizira ekran razvijen u starim aplikacijama (V20 i V4 – napisan u Visual Basicu), te istu funkcionalnost replicira u novom .NET 8 projektu koristeći moderni C#. Valja napomenuti da iako ovu strategiju ima smisla primijeniti u našem slučaju, za Vas možda i neće biti najpametniji odabir.

Želim pohvaliti naš razvojni tim. Ovo nije, niti će postati jednostavnije. U ovih nekoliko godina sam vidio kako kao tim prelazimo iz “… ajme samo nemoj da je V4/V20 …” u “… ma samo mi reci da ne moram čekat’ nekoga i ide …” – nema ponosnije osobe od mene. Bravo tim.

I naravno, kad god se pojavi neki veći problem na V20 i V4 aplikacijama, hodnicima se čuje Stankovo ime. Stanko, naš veteran, je osoba koju uvijek želite imati pored sebe kada niste sigurni u što gledate, što se događa ili pak kada zaželite saznati više o povijesti HRnet-a. Kada netko ima problem s V20 i V4 – Stankovo ime smiruje. Hvala ti, Stanko, što si naš svjetionik u oluji legacy koda.