Gównokód a programozásban: mi ez, jelei és hogyan írjunk tisztábban

Szerző: IT Sectr Megjelenés: 2026-07-26 Olvasási idő: 10 perc

Gównokód — ez az alacsony minőségű forráskód szleng elnevezése: olvashatatlan, rosszul strukturált és nehezen karbantartható. A Stripe (2022) jelentése szerint a fejlesztők munkaidejük akár 40%-át is a rosszul megírt kód olvasásával és megértésével töltik. Az orosz nyelvű közösségben a kifejezés annyira elterjedt, hogy létezik egy govnokod.ru nevű specializált weboldal, ahol a fejlesztők különösen kirívó esetek példáit teszik közzé.

Lényeg

  • Gównokód — olyan kód, amelyet nehéz olvasni, érteni és módosítani a funkcionalitás megtörésének kockázata nélkül
  • jelek: copy-paste, értelmetlen nevek, varázsszámok, mély beágyazás
  • A gównokód karbantartási költsége 3–4-szer magasabb, mint a minőségi kódé
  • Refaktorálás és kódellenőrzés — a gównokód elleni küzdelem fő eszközei
  • A DRY, KISS és SOLID elvek segítenek megelőzni a rossz kód megjelenését

Mi az a gównokód a programozásban

Gównokód — a kód szubjektív, de általánosan elfogadott jellemzője, amely nem felel meg a minimális minőségi szabványoknak. Robert Martin „Tiszta kód” (2008) című könyvében a rossz kódot olyan kódként határozza meg, amely „megakadályozza annak megértését, hogy mit csinál”. A gównokód lehet szintaktikailag helyes és működhet is, de karbantartása rémálommá válik a csapat számára.

A gównokód kifejezés az orosz nyelvű közösségben elterjedt. Az angolban formálisabb kifejezéseket használnak: spaghetti code, dirty code, technical debt code. A „gównokód” érzelmi töltete azonban pontosabban adja át a fejlesztők hozzáállását az ilyen kódhoz — az irritáltság, undor és szakmai felháborodás keverékét.

A McKinsey (2023) kutatása szerint a magas technikai adóssággal rendelkező vállalatok — és a gównokód ennek fő összetevője — 20–40%-kal több erőforrást költenek új funkciók fejlesztésére. A kódminőség közvetlenül befolyásolja az üzleti mutatókat, és ez nem metafora, hanem megerősített tény.

A határ a gównokód és a normális kód között

Objektív mérőszámok nem léteznek, de vannak gyakorlati kritériumok: ha egy fejlesztő több mint 5 percet tölt egy 20 soros függvény megértésével — ez gównokód. Ha egy sor módosítása három nem kapcsolódó modult tör el — ez gównokód. Ha a kód nem fedhető le tesztekkel teljes átírás nélkül — ez gównokód.

A gównokód fő jelei

Copy-paste (copy-paste programozás) — az egyik legszembetűnőbb és könnyen észlelhető jel. Amikor ugyanaz a kódblokk több helyen ismétlődik minimális változtatásokkal, ez nem csak gównokód, hanem a jövőbeli hibák forrása is. Javítás az egyik helyen és kihagyás a másikon — tipikus helyzet.

Értelmetlen változónevek — klasszikus. Az `a`, `b`, `x`, `data`, `temp`, `tmp`, `result`, `list`, `obj` nevű változók nem hordoznak semmilyen információt a céljukról. A kód olvasójának az egész függvényt elemeznie kell, hogy megértse, mi van a változóban tárolva. Robert Martin ezt „hazugságnak a névben” nevezi — a név ígéri az információt, de nem adja.

Mély beágyazás — amikor a feltételek, ciklusok és hibakezelés 5+ behúzási szintű konstrukciót hoz létre. Az ilyen kód olvashatatlan oldalirányú görgetés vagy az összes szint mentális követése nélkül. Ez egyenes út a hibákhoz: a logikai operátorok könnyen összetéveszthetők, a záró zárójelek átsiklása pedig könnyen előfordul.

JelGównokód példaTiszta kód
Copy-pasteEgy blokk 5-ször másolvaFüggvénybe kiemelve
Nevek`var a = getData()``var userList = getData()`
Beágyazás6 szint if/for2–3 szint return early-vel
Függvények300 soros függvény3–5 módszerre bontva
Megjegyzések`i++ // increment i`Érthető kód megjegyzések nélkül

Rejtett jelek

Dead code — függvények, változók, osztályok, amelyeket sehol sem használnak. Ez növeli a kód terjedelmét, eltereli a fejlesztő figyelmét és hamis képet kelt a rendszer képességeiről. Magic numbers — számok kontextus nélkül. God-osztályok — osztályok, amelyek mindent egyszerre csinálnak, megsértve az egységes felelősség elvét (SOLID: S).

Miért jelenik meg a gównokód

Időhiány — a leggyakoribb ok. Amikor a határidők szorítanak, a fejlesztők a minőséget áldozzák fel a sebesség oltárán. Taktikailag ez indokolható, de stratégiailag — ez a technikai adósság felhalmozása. A probléma az, hogy az „ideiglenes” gównokódot ritkán térnek vissza javítani.

A kódellenőrzés hiánya — a második legfontosabb ok. Amikor a kódot egyedül írják kollégák általi ellenőrzés nélkül, a rossz minták megerősödnek és elszaporodnak. A code review nem csak minőségellenőrzés, hanem tudásmegosztás is a csapaton belül. Az áttekintés nélküli projektek elkerülhetetlenül gównokóddá válnak.

Alacsony fejlesztői képesítés vagy mentorálás hiánya. A felügyelet nélkül hagyott junior fejlesztők természetesen gównokódot írnak — ez a tanulási folyamat része. A probléma akkor jelentkezik, amikor ez a kód áttekintés és refaktorálás nélkül éles célba kerül.

Kulturális tényezők

Azokban a csapatokban, ahol a „működik — és ez elég” a mottó, a gównokód virágzik. A kódolási szabványok, tesztelési követelmények és áttekintési folyamatok hiánya olyan környezetet teremt, ahol a kódminőség senkit sem érdekel. Az ilyen projektek gyorsan „legacy” válnak — kóddá, amelyhez félnek hozzányúlni.

A rossz kód következményei a projektre

A gównokód fő következménye a fejlesztés lelassulása. A rossz kód paradoxona, hogy lehetővé teszi az első verzió gyors megírását, de minden későbbi módosítás egyre több időt vesz igénybe. A fejlesztési sebesség és a kódminőség közötti összefüggés grafikonja exponenciális — egy bizonyos küszöb után az új funkciók hozzáadása gyakorlatilag lehetetlenné válik.

Fluktuáció — közvetett, de súlyos következmény. A fejlesztők, különösen a tapasztaltak, nem akarnak gównokóddal dolgozni. A Stack Overflow Developer Survey 2024 szerint a fejlesztők 47%-a a kódbázis minőségét nevezi meg a munkahelyválasztás egyik kulcstényezőjeként. A rossz kódú projektek elveszítik legjobb munkatársaikat.

Biztonság — a gównokód másik áldozata. A rosszul megírt kód több sebezhetőséget tartalmaz: kezeletlen kivételek, SQL-injection, XSS, memóriaszivárgás. A minőségi kód unit tesztekkel és code review-val észleli a legtöbb ilyen problémát éles célba kerülés előtt.

Technikai adósság metrikaként

A SonarQube és hasonló eszközők képesek a technikai adósságot emberórákban vagy napokban becsülni. Például 500 figyelmeztetés a copy-paste-ről, 200 a varázsszámokról és 50 a mély beágyazásról 30 nap technikai adósságot jelez. Ezeket a számokat meg lehet és kell mutatni a vezetésnek a refaktorálás indokolására.

Hogyan írjunk tiszta kódot gównokód helyett

A DRY (Don't Repeat Yourself) elv — az első, amit be kell vezetni. A logika minden részének egy példányban kell léteznie. Copy-paste helyett — emelje ki az ismétlődő kódot egy külön függvénybe, osztályba vagy modulba. Varázsszámok helyett — nevesített konstansek. Hosszú függvények helyett — több kicsi.

A KISS (Keep It Simple, Stupid) elv véd a túlzott bonyolultságtól. Ha egy feladat 10 sorban megoldható — ne írjon 50-et. Ha egy ciklus egyszerűbb, mint egy stream — használja a ciklust. Ha egy egyszerű függvény érthetőbb, mint egy dekorátor — írjon függvényt. Az egyszerűség a könnyen karbantartható kód fő jellemzője.

A Boy Scout Rule elv — „hagyd a kódot jobban, mint ahogy találtad”. Még a kis javítások is minden változtatásnál idővel a gównokódot tisztességes kóddá alakítják. Változó átnevezése, nagy függvény felosztása, teszt hozzáadása — minden javítás számít.

javascript
// rossz kód — copy-paste, varázsszámok, rossz nevek
function calc(a, b, c) {
  let x = a * 0.85;
  if (b > 1000) { x = x * 0.9; }
  let y = c * 0.85;
  if (b > 1000) { y = y * 0.9; }
  return x + y;
}

// tiszta kód — világos nevek, DRY, konstansek
const DISCOUNT_RATE = 0.85;
const BULK_THRESHOLD = 1000;
const BULK_DISCOUNT = 0.9;

function applyDiscount(amount, quantity) {
  let price = amount * DISCOUNT_RATE;
  if (quantity > BULK_THRESHOLD) {
    price = price * BULK_DISCOUNT;
  }
  return price;
}

function calculateTotal(items, quantity) {
  return items.reduce((sum, item) => {
    return sum + applyDiscount(item, quantity);
  }, 0);
}

Példák a gównokód refaktorálására

Vizsgáljunk meg egy tipikus példát Pythonban. A függvény megrendeléseket dolgoz fel, de rosszul: 80 sor, mély beágyazás, varázsszámok, duplikálódás. A refaktorálás után a kód olvashatóvá, tesztelhetővé és könnyen karbantarthatóvá válik.

python
# rossz kód — egyetlen függvény mindent csinál
def process_order(order):
    if order.get("type") == "premium":
        if order["amount"] > 100:
            discount = 0.8
        else:
            discount = 0.9
    else:
        discount = 1.0
    total = order["amount"] * discount
    return total

# tiszta kód — kiemelt függvények és konstansek
class OrderProcessor:
    PREMIUM_DISCOUNT_HIGH = 0.8
    PREMIUM_DISCOUNT_LOW = 0.9
    PREMIUM_THRESHOLD = 100

    def get_discount(self, order):
        if order.type == "premium" and order.amount > self.PREMIUM_THRESHOLD:
            return self.PREMIUM_DISCOUNT_HIGH
        return self.PREMIUM_DISCOUNT_LOW

    def calculate_total(self, order):
        return order.amount * self.get_discount(order)

A három sor szabálya függvényekhez

Egy jó függvény egy dolgot csinál és azt jól csinálja. Ha egy függvény három különböző műveletet végez — bontsa fel. Ha egy függvény több mint 20 sort tartalmaz — valószínűleg felosztható. Ha egy függvényben több mint két behúzási szint van — refaktorálás szükséges.

Eszközök a gównokód felismerésére

Statikus kódelemzők — az első védelmi vonal a gównokód ellen. Az ESLint (JavaScript), Pylint (Python), SonarQube (többnyelvű), Checkstyle (Java) automatikusan észleli a copy-paste-t, varázsszámokat, üres catch blokkokat, túl hosszú függvényeket és más száz antimintát.

Code style és formázók — a második védelmi szint. A Prettier, Black, gofmt automatikusan formázza a kódot, kiküszöbölve a szóközökkel, behúzásokkal és zárójelekkel kapcsolatos problémákat. Egységes stílus a csapatban olvashatóvá teszi a kódot, függetlenül attól, ki írta. A formázással kapcsolatos vitákat automatizálni kell.

Code review — a harmadik és legfontosabb szint. Egyetlen elemző sem helyettesíthet egy embert, aki észreveszi, hogy a megoldás architektúrája hibás, vagy hogy a fejlesztő rossz megközelítést választott. A hatékony áttekintés időt igényel, de megtérül a gównokód mennyiségének többszörös csökkenésével.

  • ESLint — JavaScript és TypeScript számára complexity, max-lines, max-nested-callbacks szabályokkal
  • Pylint — Python számára kódmetrikákkal és minőségi értékeléssel (-10-től 10-ig)
  • SonarQube — a technikai adósság dinamikus nyomon követéséhez
  • CodeClimate — az egyes fájlok karbantarthatósági indexének értékeléséhez
  • Better Code Hub — a tiszta kód 10 elvének való megfelelés ellenőrzéséhez

Gyakran Ismételt Kérdések

Lehet-e a gównokód indokolt?

Rendkívül ritkán. Prototípus készítésnél vagy hackathonokon a sebesség fontosabb, mint a minőség, de az ilyen kódot ideiglenesként kell megjelölni és nem kerülhet éles célba refaktorálás nélkül. Éles célban nincs mentség a gównokódra — minden időmegtakarítás most többszörös veszteséggé válik a jövőben.

Hogyan különböztethető meg a gównokód a kezdő kódjától?

A kezdő kódja tapasztalatlan, de gyakran őszinte kód, amely a készségek növekedésével javul. A gównokód a minőség tudatos vagy közömbös elhanyagolása. Egy kezdő írhat nem optimális, de olvasható kódot. A gównokód viszont elvileg olvashatatlan — íróját nem érdekli, hogy mások megértik-e.

Érdemes a gównokódot a nulláról átírni?

Átírás — végső intézkedés. A lépcsőzetes refaktorálás biztonságosabb: elkülöníti a modult, lefedi tesztekkel, részenként átírja. A teljes átírás kockázatos — elveszítheti a régi kódban felhalmozódott üzleti logikát, beleértve a határesetek kezelését, amelyeket senki sem dokumentált.

Hogyan győzzük meg a menedzsert a refaktorálásra szánt idő elkülönítéséről?

Használjon metrikákat: a SonarQube megmutatja a technikai adósságot órákban. Mutassa meg, mennyi időt töltenek a régi kód hibáival. Hasonlítsa ösßze új funkciók fejlesztési sebességét a projekt „tiszta” és „piszkos” részeiben. Fordítsa le üzleti nyelvre: az idő pénz, és a gównokód pénzbe kerül.

Mi a fő könyv a tiszta kódról?

„Tiszta kód” Robert Martin (2008) — a minőségi programozás bibliája. Leírja a névadás, formázás, hibakezelés és tesztelés elveit. Ezenkívül: „Tökéletes kód” Steve McConnelltől, „Refaktorálás” Martin Fowlertől, „Négyek bandája” a tervezési mintákról. Ezeket a könyveket minden fejlesztőnek el kell olvasnia.

Összefoglaló

  • Gównokód — alacsony minőségű kód, amelyet nehéz olvasni, karbantartani és módosítani
  • jelek: copy-paste, értelmetlen nevek, varázsszámok, mély beágyazás
  • Okai — határidők, code review hiánya és alacsony képesítés
  • Következmények — fejlesztés lelassulása, technikai adósság növekedése és csapat elvesztése
  • DRY, KISS és SOLID elvek — a tiszta kód alapjai
  • Statikus elemzőeszközök automatikusan észlelik a gównokódot
  • Code review — a leghatékonyabb módszer a rossz kód megelőzésére

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is