Szakmai anyagok
Kódkonvenciók – Jó, rossz vagy csúf?
A kódkonvenciók (amelyek kódmásolás vagy másolás-beillesztéses programozás eredményei) hosszú távon veszélyt jelenthetnek a forráskód karbantarthatóságára. Elsőre ártalmatlannak tűnhetnek, de néhány fejlesztési iteráció után már károkat okozhatnak – pont akkor, amikor már túl késő a könnyű javításra. Ha egy hiba javítása vagy egy funkció fejlesztése során nem kezeljük együtt a klón példányokat, az nagy valószínűséggel a forráskód inkonzisztenciájához vezet.
A klónok támadása
A forráskód klónozása, más néven másolás és beillesztés alapú programozás komoly veszélyt jelent a szoftverrendszerekre, különösen azokra, amelyek még a megvalósítási fázisban vannak. A problémát gyakran figyelmen kívül hagyják, mivel az igazi veszély a klónok hosszú távú fennállásában rejlik, különösen a felügyelet nélküli fejlődésükben – emiatt a közvetlen negatív hatás nem érzékelhető. Ha egy adott metódus klónpéldányát karban kell tartani (például hibajavítás miatt), vagy tovább kell fejleszteni, akkor az esetek többségében ugyanezeket a feladatokat a többi klónpéldány esetében is el kell végezni a konzisztencia fenntartása érdekében.
Szoftverfejlesztés költsége
A fejlesztési költségek becslése problémás feladat lehet. Számos olyan részlet van, amelyet figyelembe kell venni a számítás során, amelyek közül a legfontosabb valószínűleg a forráskód karbantarthatósága. A karbantarthatóság közvetlen hatással van a fejlesztési költségekre, hiszen minél kevésbé karbantartható a szoftverrendszer, annál több költségre van szükség a fejlesztéséhez.
A szoftver karbantarthatóságát befolyásoló tényezők
A szoftver karbantarthatóságát befolyásoló tényezők
Dr. Vanya Ádám
Bevezetés
Előző blogbejegyzésünkben, melynek a címe „Mi a szoftver karbantarthatósága?”, bemutattuk a karbantarthatóság fogalmát, és érveltünk amellett, hogy ez egy olyan tulajdonság, amit irányítani szükséges. Az irányítás azonban csak akkor lehetséges, ha tudjuk, milyen tényezők hatnak rá. Ezen tényezők bemutatása a jelen blogbejegyzés célja. Ha ezeket a tényezőket mérjük és befolyásoljuk, a karbantarthatóság is irányíthatóvá válik.
A befolyásoló tényezők
Az, hogy egy szoftver mennyire könnyen módosítható, alapvetően két nagy tényezőtől függ: a módosítandó forráskód állapotától, illetve a módosítást végző fejlesztőktől. Először nézzük meg a forráskódot. A karbantartási folyamat során a fejlesztők elolvassák a kódot, hogy megértsék, hol és mit szükséges módosítani. Ez a legtöbbször azt jelenti, hogy más fejlesztők által írt kódot kell értelmezni. Ennek hatékonyságát számos forráskód tulajdonság befolyásolja. Egy jól strukturált szoftver, amely kis metódusokat tartalmaz és ezek metódusok kevés döntési pontot tartalmaznak, gyors és hatékony vizsgálatot tesz lehetővé. Ezzel szemben egy rosszul strukturált, hatalmas metódusokkal teletűzdelt monolit jelentősen lassítja a munkát. A forráskód elemzése után a fejlesztők bevezetik a szükséges módosításokat. Ebben a fázisban is meghatározó szerepet játszanak a forráskód jellemzői. Vegyünk például egy olyan helyzetet, ahol egy kódrészlet módosításával együtt egy másik, duplikált szakaszt is módosítani kell a konzisztens változtatás érdekében. Ez a többletmunka csökkenti a karbantartás hatékonyságát. Ráadásul az ilyen szituációk elkerülhetők lennének, ha nem lennének duplikációk: az azonos kódrészek többnyire kiszervezhetők külön metódusokba, amelyek több helyről is meghívhatók. Ha azonban ez elmarad, további problémák lépnek fel. Ha például a fejlesztő elfelejti az összes példányt módosítani, akkor inkonzisztens viselkedés jelenhet meg, hibákhoz vezetve. Ezek javítása többletidőt és extra karbantartási erőfeszítést igényel. Amikor a fejlesztő elkészül egy adott funkcionalitás megvalósításával, elérkezik az idő a tesztelésre. A megfelelő tesztelés lefedi a forráskód összes futási útvonalát, hogy minden lehetőség ellenőrzött legyen a követelmények szerint. Az, hogy egy kódrészlet mennyire tesztelhető és milyen mértékben, szorosan összefügg azzal, hogyan írták azt. A döntési pontok (mint például az if utasítások) növelik a lehetséges futási útvonalak számát. Azokra a metódusokra, amelyek sok döntési pontot tartalmaznak, sok teszteset írása szükséges, így azok tesztelése időigényes. Ebből fakad annak a veszélye, hogy időnyomás miatt csak a legfontosabb útvonalakat fedik le teszttel, és sok más kimarad, növelve annak kockázatát, hogy hibák kerüljenek éles környezetbe, ami elérhetőségi problémákhoz vagy nem kívánt viselkedéshez vezethet. Bizonyos esetekben, a kód felépítése miatt egyes részek nem is tesztelhetők egységként. Vegyünk például egy hosszú metódus fontos részét vagy egy beágyazott SQL utasítást. Az ilyen korlátokat elkerülendő, a metódusok legyenek rövidek, a beágyazott SQL-t pedig ha lehet, kerüljük. E szabályok figyelmen kívül hagyása teszteletlen részeket, kódduplikációt okoz a már korábban ismertetett kockázatokkal. A fent említett karbantartási tevékenységeket részletesebben is tárgyalja az ISO/IEC 14764:2022 szabvány, lásd [1]. A forráskód szintű tulajdonságokat (más néven metrikákat) Zou és Kontogiannis rendszerezetten írja le a [2] publikációban. Most nézzük meg a második fő tényezőt, a fejlesztőt. Ha ugyanazt a feladatot ugyanazon a kódon egy junior és egy senior fejlesztő hajtja végre, azok eltérő idő alatt fognak végezni. Ennek oka az, hogy a senior fejlesztő több szakmai tudással és tapasztalattal rendelkezik. Továbbá nagyobb eséllyel úgy módosítja a kódot, hogy az később könnyebben karbantartható legyen más fejlesztők számára is. A szaktudástól függetlenül, a fejlesztők rendelkeznek bizonyos szintű kognitív képességekkel is. Például: hány dolgot képesek egy időben fejben tartani. Az ilyen képességek hatással vannak arra, mennyi idő szükséges egy hosszú metódus megértéséhez, miközben azt fel-le görgetik a képernyőn. Azoknak a fejlesztőknek, akik kevesebb dolgot tudnak egyszerre fejben tartani, több időbe telik a kód értelmezése és módosítása. Akkor is, ha a fejlesztők rendelkeznek a szükséges képességekkel, hogy jól módosítható kódot írjanak, két további ok miatt ez mégsem mindig történik meg és a karbantarthatóság romlik. Az első ok a motiváció hiánya. Ahogy minden más ember, a fejlesztők is motivációval hajtják végre feladataikat. Egy tapasztalt, önmagára igényes fejlesztő belső motivációval bír, hogy jól strukturált kódot alkosson. Másoknak külső motivációra lehet szükségük: büntetések vagy jutalmak formájában. A büntetés lehet például bónusz csökkentése vagy elbocsátás, míg a jutalom lehet fizetésemelés, előléptetés vagy nagyobb elismerés. A második ok a lehetőség hiánya. Előfordulhat, hogy a fejlesztő képzett, motivált és tapasztalt, de nem kapja meg a szükséges erőforrásokat – például extrém időnyomás alá kerül. Ilyenkor szükségszerűen rövidít utakon halad. Mivel a funkcionalitás a legtöbb cég számára prioritást élvez, így kevesebb energia jut a karbantarthatóságra. Ez a gyors megoldás hosszútávon viszont többletmunkát eredményez, mert a kialakuló karbantarthatósági problémák kompenzálása sok időbe kerül. Nincs menekvés: a technikai adósságot vissza kell fizetni, kamatostul. A technikai adósság fogalmát Ward Cunningham vezette be [3]-ban, amely azóta egyre nagyobb figyelmet kap.
Összefoglalás és következtetések
A szoftver karbantarthatósága valamilyen módon hatással lesz rád. Ha szoftverfejlesztéssel foglalkozol, akkor a karbantarthatóság a karrieredre is jelentős hatással lehet, és ugyanúgy számít, ha egy software cégbe szeretnél befektetni, vagy saját testreszabott szoftvert vásárolsz. Ezért úgy gondoljuk, hogy a karbantarthatóságot meg kell érteni és tudatosan irányítani kell a céljaid elérése érdekében. Az irányítás segítésére ebben a bejegyzésben bemutattuk és megvitattuk a két legfontosabb tényezőt a szoftver karbantarthatóságát illetően: a forráskód állapotát és a fejlesztőket. Azt állítjuk, hogy a megfelelően megírt forráskód és a kellően képzett, kognitívan alkalmas, motivált és lehetőségekkel rendelkező fejlesztők nélkül nem lehet elfogadható szintű karbantarthatóságot elérni. Sorozatunk következő blogbejegyzése a karbantarthatóság lehetséges hatásait tárgyalja bővebben. Célunk ezekkel az írásokkal, hogy növeljük a szoftver karbantarthatóság kapcsán a tudatosságot, segítséget nyújtsunk a kontrollálásában, és elősegítsük a konstruktív párbeszéd kialakulását. Amennyiben e bejegyzés tartalmával kapcsolatban bármilyen észrevételed, kritikai megjegyzésed van, vagy úgy érzed, valamilyen módon tovább lehetne bővíteni, kérlek, vedd fel velünk a kapcsolatot és oszd meg ötleteidet: [email protected]
Hivatkozások [1] ISO/IEC 14764 (2022). ISO/IEC 14764:2022, Szoftvertechnika – Szoftveréletciklus-folyamatok – Karbantartás [2] Zou, Y., & Kontogiannis, K. (2002). Migration to object oriented platforms: a state transformation approach. International Conference on Software Maintenance, 2002. Proceedings., 530–539. [3] Cunningham, W. (1992, December). The WyCash portfolio management system. In Addendum to the proceedings on Object-oriented programming systems, languages, and applications (Addendum) (pp. 29-30).