30 Jan

Vissza a jövőbe - Legacy kódok


A mai nap az egyik facebook csoportban felröppent a kérdés, miszerint óhatatlanul is 'gány'-e minden kód, amit öröklünk. Az eddigi cikkekel ellentétben most nem fogunk hirtelen legacy kódot gyártani, tehát nem lesz semmiféle gyakorlati megvalósítás, így aki copy-paste ügyében jött, azt most el kell keserítsem. Akit viszont érdekel egy hosszabb vélemény a legacy kódokról, az a tovább gomb után megtalálja :)

Akkor jöjjön először is a definíció, hogy mégis mi számít legacy kódnak? A legacy szó magyarul 'örökség, hagyaték', ennélfogva a nevében nincs semmi konkrétum arról, hogy óhatatlanul is szívjunk vele, vagy hogy épp ami nem COBOL vagy FORTRAN, az nem is igazán legacy.

Ha a wikipédia segítségét kérjük, ő már valamivel jobban leírja, miszerint attól lesz egy kódbázis legacy, mert már nem támogatott technológiákkal kapcsolatos, pl. támogatnunk kell a programunkkal a soros portot, windows XP-t, IE7-et, PHP5.2.4-et.  Tehát a Wikipédia a backward kompatibilitást érti ez alatt, amikor túúúl hosszú ideig megtartjuk azt. Ha a Wordpressre gondolunk, akkor meg is van az első ilyen eset, ahol amiatt nem tudnak nagytakarítani, mert akkor biza oda lenne a PHP 5.2.4! kompatibilitása.

Sokszor azonban nem is kell 10 éveket visszautazni az időben, ahhoz, hogy szörnyűségekre bukkanjunk. A programozó szakmát többféleképpen lehet űzni. Ha a PHP-t emeljük ki, akkor lehet multicégnél, kis/nagy cégnél, netán egyéni vállalkozásban is dolgozni. Az, hogy az ember nagy cégnél dolgozik, még önmagában nem egyenlő azzal, hogy együtt is dolgoznak, hiszen sok helyen csak úgy szórják ki a kisebb site-okat. A legtöbb cégnél mostanság egyre divatosabb lett full-stack gurukat alkalmazni, akikre rábízhatják a frontend/backendet egyaránt és gyakran egy maguk visznek végig projekteket, anélkül, hogy bárki mással kooperálni kellene. Egyéni vállalkozásban, kis cégnél ez méginkább igaz. Az ember pedig egyedül dolgozva ellustul. Nincs aki ránézne a kódjára, aki megszólná érte, nincsenek előírások a kódminőségre, viszont egy dolog van:

határidő.


Ha nincsenek minőségi elvárások, akkor bizony mennyiségi elvárások lesznek, mégpedig mindez a menedzsment felől érkezik.

Nézzük meg István történetét:

Full stack fejlesztő barátunk nemrégiben felvételt nyert egy kisebb céghez, ahol biza százával hányják ki a kisebb-nagyobb, de főleg kisebb site-okat. Nem agilisen, hanem az ún. ASAP driven development mentén dolgoznak, úgyhogy mindent a megrendelés napja előtt le kellene szállítani. István egy olyan programozó, akinek elvei vannak, ezért a kódját megpróbálja jól szervezni, a legtöbb esetben gondol a jövőre, a view fájlokban fordítókulcsokat használ, stb.. összességében véve, jó munkát végez. Ezzel a hozzáállással tud is szállítani elég jó tempóban apróbb oldalakat. Ellenben a projekt menedzsernek az a mottója, hogy "addig pakold a melót a parasztra, ameddig bírja, mert addig még van benne kapacitás", ennélfogva István munkáját lassúnak ítéli, többet vár tőle.

István az egyik ilyen státusz meetingen véletlenül elszólja magát: "ha ennél is jobban sietek, akkor nem lesz szép a kód". Több sem kell a PM-nek, aki jól leszidja Istvánt, amiért ilyen, üzletileg jelentéktelen tényezők miatt lassabb, mint a többiek. Lévén a programozók nem éppen az asszertív viselkedésükről híresek, ezért István nem nagyon tudja/akarja megvédeni az igazát, így hát beáll a többi kóder közé a sorba. Mostantól nem ír teszteket, felhagy a SOLID elvekkel, korábbi projektekből másolgat át osztályokat egyesével, composer csomagok belsejébe hekkel, mert nincs idő míg elfogadják a pull requestet és hasonlók. A projektmenedzser örömmel látja, hogy bizony István közel húsz százalékkal jobban teljesít, mint eddig. Ha bármiféle support kellett, akkor mindig azt az embert keresték meg, aki azt az oldalt csinálta, hisz ő írta.

Ahogy telnek a hónapok, István még jobban megpörgeti a dolgokat, már a view-ban megy ki az adatbázis felé, eldob mindenféle keretrendszert és projektről projektre egy egyre inkább hízlalt isti_functions.php-t hurcol magával. Mivel mostanra ő lett a legproduktívabb a fejlesztők közül, ezért a vezetés úgy dönt, hogy bizony, ideje lenne Pistánkat egy magasabb pozícióba helyezni. István Senior lesz. Az új munkakör pedig új felelősséggel is jár, mégpedig azzal, hogy az újonnan érkezett gyakornokok és juniorokat neki kell rampupolnia. A kis zöldfülűeket leülteti a gép elé, megnyitja az IDE-ben az egyik már kész projektet és elkezdi mesélni, hogy pontosan mit is csinálnak az egyes függvények az isti_functions.php-ben. A srácok itt tanulják meg, mit is jelent az a legacy kód.

Azonban István változásra vágyik, így továbblép egy másik céghez. Ez a cég nem kis oldalakra, hanem nagyobb webalkalmazásokra specializálódott, ahol egy terméket illetve annak a komponenseit fejlesztik már évek óta. István az onboarding alatt hallgatja a kolléga beszédét arról, hogy pontosan milyen folyamatokon át megy egy-egy feladat/hibaticket:
  • Lefejleszted a kódot. Ami kódhoz nincsenek tesztek, az olyan, mintha a kód se lenne.

  • Ha ez megvan, hívsz egy tesztelőt és vele együtt is átnézitek egy kis demo keretében, hogy minden eshetőséget lefedtél-e.

  • Ha kész vagy, csinálsz róla pull requestet és szólsz, hogy nézzünk rá. Neked is kell más kódját review-zni!

  • Ha kijavítottad a dolgokat, megvitattatok mindent és elfogadták a pull requestet, akkor lehet csak bemergelni.

  • A sprint 15%-át, ha tudod fordítsd tech debt-re.


A hallottak sokként érték Istvánt, hiszen ez a szöges ellentéte annak, mint amit eddig csinálnia kellett. A kódbázis hatalmas volt, százával gyűltek az osztályok, viszont minden publikus interfész, osztály dokumentálva volt, nem volt két különböző formázású fájl. A review során rengeteg újdonságot hallott vagy épp látott, mikor más kódját vizsgálta. Hetente tartottak kis csapatos coding dojo-t, ahol az IDE minden csínját-bínját ellesték egymástól.

Az előrelépés sem a leszállított ticketek alapján történt, a mennyiség itt nem kárpótol a minőségért, hiszen a kódbázist fent kell tartani, ha gyűlik a szenny, az később egyre jobban fájni fog és ezzel, ha nem is ismerték be egymás közt, a menedzserek is tisztában voltak. Ez az a fajta legacy kód volt, ami nem gány, csupán öreg, de a sorozatos refaktorálások alkalmával már-már alig akadt olyan része, amit ne gyúrtak volna kicsit át.

Vegyünk egy másik példát.

Van egy kódbázis, ami ősöreg PHP-ben íródott, közel 10 éve. Akkoriban jött be a JSON kiterjesztés az 5.2-es PHP-val, azonban a hosting szolgáltatók akkor sem voltak mások mint most, lassan tértek át újabb verziókra.

Találkozunk ezzel a kóddal és a sírás kerülget, mert látunk egy olyan függvényt, ami kézzel rak össze JSON stringet. Hát mégis mi a???? Utána nézzük a docblockot a fájl tetején:
Date: 2006.02.11

Utánaszámolunk, megnézzük a php oldalát és látjuk, hogy bizony akkor a legújabb, 5.2-es verzióban volt csak kint a json_encode/decode (és a 4-es PHP még ment!). Ezután esetleg abba is belegondolunk, hogy most is akadnak olyan szolgáltatók, ahol 5.5-ös vagy inkább régebbi PHP van fent és máris más színben tűnik fel a dolog.

Ellenben ha ez a kódrészlet tavalyi lenne, akkor igencsak megkérdőjeleznénk az illető PHP ismereteit. A PHP fejlesztői is azon dolgoznak, hogy minél inkább kibővítsék a rendelkezésre álló eszközkészletet és ezzel hatékonyabb munkát tegyenek lehetővé, így a régi kódoknál ne lepődjünk meg, ha pl. 10 éve nem használták a Java 8 adta lehetőségeket, vagy épp nem volt JSON encode, ha .NET 2.0-t használunk.

A PHP fejlesztés eléggé speciális a tekintetben, hogy elég sokan vannak egyéni vállalkozók, ahol a kulcsszó az 'egyéni'. Ahogy korábban is említettem, ha az ember egyedül dolgozik, akkor ellustul, hanyag lesz, nem lesz kényszer arra, hogy betartson szabályokat, elveket.

Mit tehetünk, hogy mi ne hagyjunk hátra szörnyetegeket?
  • Ha a céged nem tartja fontosnak a kódminőséget, akkor lépj le vagy kalkuláld bele a becslésekbe és ne hagyd, hogy befolyásoljanak ebben. Elvek!

  • Dolgozz össze másokkal. Ha már ott vagytok egy rakáson, tanuljatok egymástól. A másik lehet tud valami olyan billentyűkombinációt az IDE-ben, netán olyan API hívást, amiről gőzöd sincs.

  • Ha a munkaidőben nincs lehetőség összedolgozni, akkor járj el Coding Dojora, netán szervezz egyet a melóhelyen belül.

  • Open-source! Ha főleg egyedül dolgozol, akkor egy githubos projektbe behuppanva lehetőséged nyílik másokkal összedolgozni, hogy tanuljatok egymástól.


Viszont a legfontosabb tanulság: Nem kell egy kódnak réginek lennie ahhoz, hogy sírva fakadj tőle.

Hozzászólások betöltése
2014-2017 © Letscode.hu. Minden jog fenntartva. Build verzió: 1.2.37

Mik azok a sütik?


As is common practice with almost all professional websites this site uses cookies, which are tiny files that are downloaded to your computer, to improve your experience. This page describes what information they gather, how we use it and why we sometimes need to store these cookies. We will also share how you can prevent these cookies from being stored however this may downgrade or 'break' certain elements of the sites functionality.

Áltálnos információkat nyújthat ez a Wikipedia cikk a HTTP sütikről...

Hogy használjuk a sütiket?


We use cookies for a variety of reasons detailed below. Unfortunately is most cases there are no industry standard options for disabling cookies without completely disabling the functionality and features they add to this site. It is recommended that you leave on all cookies if you are not sure whether you need them or not in case they are used to provide a service that you use.

Sütik kikapcsolása


You can prevent the setting of cookies by adjusting the settings on your browser (see your browser Help for how to do this). Be aware that disabling cookies will affect the functionality of this and many other websites that you visit. Disabling cookies will usually result in also disabling certain functionality and features of the this site. Therefore it is recommended that you do not disable cookies.

A sütik amiket mi használunk


This site offers newsletter or email subscription services and cookies may be used to remember if you are already registered and whether to show certain notifications which might only be valid to subscribed/unsubscribed users.

In order to provide you with a great experience on this site we provide the functionality to set your preferences for how this site runs when you use it. In order to remember your preferences we need to set cookies so that this information can be called whenever you interact with a page is affected by your preferences.


Harmadik féltől származó sütik


In some special cases we also use cookies provided by trusted third parties. The following section details which third party cookies you might encounter through this site.

This site uses Google Analytics which is one of the most widespread and trusted analytics solution on the web for helping us to understand how you use the site and ways that we can improve your experience. These cookies may track things such as how long you spend on the site and the pages that you visit so we can continue to produce engaging content.

For more information on Google Analytics cookies, see the official Google Analytics page.

The Google AdSense service we use to serve advertising uses a DoubleClick cookie to serve more relevant ads across the web and limit the number of times that a given ad is shown to you.

For more information on Google AdSense see the official Google AdSense privacy FAQ.

We also use social media buttons and/or plugins on this site that allow you to connect with your social network in various ways. For these to work the following social media sites including; Facebook, will set cookies through our site which may be used to enhance your profile on their site or contribute to the data they hold for various purposes outlined in their respective privacy policies.


More Information


Hopefully that has clarified things for you and as was previously mentioned if there is something that you aren't sure whether you need or not it's usually safer to leave cookies enabled in case it does interact with one of the features you use on our site. However if you are still looking for more information then you can contact us through one of our preferred contact methods.

Email: fejlesztes@letscode.hu

Bezárás