28.4.3. Code review folyamat

2025.10.06.
AI Biztonság Blog

A `git push` utáni pillanatnyi csend. A hozzájárulásod, egy új prompt injekciós támadásokat detektáló modul, útra kelt. Pár órával később pittyen egy értesítés: valaki kommentelt a pull request-edhez. Nem egy „LGTM!” (Looks Good To Me!), hanem egy kérdés: „Szia! Szuper a logika, de mi történik, ha a bemenet egy üres string? Nem kezelted ezt az esetet, és `IndexError`-t dobhat.” Ez a pillanat nem a kritika, hanem az együttműködés kezdete. Ez a code review.

Kapcsolati űrlap

AI Biztonság kérdésed van? Itt elérsz minket:

A négy szem elve a kódban

A code review (vagy kódellenőrzés, kód-felülvizsgálat) egy minőségbiztosítási folyamat, amely során a te kódodat egy vagy több másik fejlesztő átnézi, mielőtt az beolvadna a projekt fő ágába (pl. `main` vagy `develop`). Sokan tévesen csak hibakeresésnek gondolják, pedig a szerepe sokkal összetettebb. Tekints rá úgy, mint egy szakmai párbeszédre, amelynek célja a közösen birtokolt kódbázis jobbá tétele.

A folyamat alapvető céljai a következők:

  • Minőségjavítás: Logikai hibák, elgépelések, teljesítményproblémák és potenciális biztonsági rések kiszűrése, még mielőtt éles környezetbe kerülnének.
  • Tudásmegosztás: A review folyamat során a csapattagok megismerik egymás munkáját, új technikákat tanulnak, és mélyebb rálátást nyernek a rendszer működésére. Egy junior fejlesztő rengeteget tanulhat egy senior review-jából.
  • Konzisztencia fenntartása: Biztosítja, hogy az új kód illeszkedjen a projekt meglévő stílusához, konvencióihoz és architektúrájához. Ez a karbantarthatóság kulcsa.
  • Kollektív felelősségvállalás: A review után a kód már nem csak az eredeti szerzőé, hanem a csapat közös tulajdona és felelőssége.
  • Alternatív megoldások keresése: Egy másik nézőpont gyakran rávilágít egyszerűbb, elegánsabb vagy hatékonyabb megoldási lehetőségekre, amelyekre az eredeti fejlesztő nem gondolt.

A code review életciklusa

Bár minden projektnek lehetnek sajátosságai, a legtöbb nyílt forráskódú projektben a folyamat a következő lépésekből áll:

PR Létrehozás Automata Tesztek Review & Diszkusszió Jóváhagyás Merge Iteráció (kódmódosítás)

  1. Pull Request (PR) megnyitása: A fejlesztő létrehoz egy PR-t, amelyben egyértelműen leírja a változtatások célját, a „miért”-et és a „hogyan”-t.
  2. Automatizált ellenőrzések: A CI/CD (Continuous Integration/Continuous Deployment) pipeline lefut. Ez ellenőrzi, hogy a kód formázása megfelelő-e (linting), és hogy a meglévő tesztek sikeresen lefutnak-e az új kóddal. Ha itt hiba van, a review el sem kezdődik.
  3. Reviewerek hozzárendelése: A PR-hez automatikusan vagy manuálisan hozzárendelnek egy vagy több véleményezőt. Ők felelősek a kód átnézéséért.
  4. Véleményezés és párbeszéd: A reviewerek soronként vagy globálisan kommenteket fűznek a kódhoz: kérdéseket tesznek fel, javaslatokat fogalmaznak meg, hibákra hívják fel a figyelmet. A szerző válaszol, és ha szükséges, módosítja a kódot. Ez a lépés többször is ismétlődhet (iteráció).
  5. Jóváhagyás (Approval): Amikor a reviewerek elégedettek a változtatásokkal, jóváhagyják a PR-t. A legtöbb projektben legalább egy (de gyakran több) jóváhagyás szükséges.
  6. Beolvasztás (Merge): A jóváhagyott PR-t a projekt karbantartója (maintainer) beolvasztja a célágba. A funkció vagy javítás ezzel a projekt részévé vált.

Gyakorlati tanácsok mindkét oldalnak

A hozzájáruló (szerző) szemszögéből

  • Legyenek kicsik a PR-ek: Egy 50 soros változtatást sokkal könnyebb és alaposabb átnézni, mint egy 1000 sorosat. Bontsd a munkád logikai egységekre.
  • Írj informatív leírást: Ne csak annyit írj, hogy „Bugfix”. Magyarázd el, mi volt a probléma, és hogyan oldottad meg. Hivatkozz a kapcsolódó issue-ra, ha van.
  • Véleményezd saját magad: Mielőtt másoknak küldenéd, nézd át te magad a saját változtatásaidat. A legtöbb hibát már ekkor észre fogod venni.
  • Ne vedd személyesnek: A kódodat véleményezik, nem téged. A konstruktív kritika a fejlődésedet szolgálja. Légy nyitott és fogadd meg a tanácsokat.

A véleményező (reviewer) szemszögéből

  • Értsd meg a kontextust: Mielőtt egyetlen sort is kritizálnál, olvasd el a PR leírását és értsd meg, mit akart a szerző elérni.
  • Legyél konstruktív és udvarias: Kerüld az olyan megjegyzéseket, mint „Ez rossz.” Helyette fogalmazz így: „Mit gondolsz, ha ezt a logikát inkább egy külön segédfüggvénybe szerveznénk a jobb olvashatóságért?”
  • Tegyél javaslatokat: Ha hibát találsz, ne csak jelezd, hanem ha tudsz, javasolj egy lehetséges megoldást is.
  • Automatizálj, amit lehet: A kódstílusra vonatkozó megjegyzések unalmasak és frusztrálóak. Használjatok lintert és formázót, hogy ezeket a CI pipeline elkapja, és a review a lényegre, a logikára fókuszálhasson.
  • Dicsérj is: Ha látsz egy különösen okos vagy elegáns megoldást, jelezd! A pozitív visszajelzés ugyanolyan fontos.

Egy példa a gyakorlatból

Tegyük fel, egy új segédfüggvényt adsz a projekthez, ami megtisztítja a felhasználói inputot a speciális karakterektől.

Eredeti kód (Pull Request)

# src/utils/sanitizer.py
def sanitize_input(text):
 # Eltávolítja a nem alfanumerikus karaktereket
 new_text = ""
 for char in text:
 if char.isalnum():
 new_text += char
 return new_text

Reviewer123 írta:

Szia! Köszi a hozzájárulást! Két apró javaslatom lenne:

  1. Nagyobb szövegek esetén ez a string összefűzés (`+=`) elég lassú lehet Pythonban, mert minden alkalommal új string objektumot hoz létre. Hatékonyabb lenne egy list comprehension és a `””.join()` használata.
  2. Mi a helyzet a szóközökkel? A jelenlegi implementáció azokat is eltávolítja. Például a „red team” inputból „redteam” lesz. Ez a kívánt viselkedés? Ha meg akarjuk tartani a szóközöket, akkor a feltételt ki kellene egészíteni.

Javított kód (a review után)

# src/utils/sanitizer.py
def sanitize_input(text, keep_spaces=True):
 # Eltávolítja a nem alfanumerikus karaktereket, opcionálisan megtartja a szóközöket.
 # A .join() metódus használata hatékonyabb, mint a string konkatenáció.
 if not isinstance(text, str):
 # A review során felmerült egy új ötlet: mi van, ha nem string az input? Kezeljük le!
 return ""
 
 allowed_chars = [
 char for char in text 
 if char.isalnum() or (keep_spaces and char.isspace())
 ]
 return "".join(allowed_chars)

Látható, hogy a végeredmény nemcsak hatékonyabb, de egy új funkcióval (szóközök megtartása) és egy hibakezelési ággal (nem string input) is gazdagodott. Ez a code review valódi ereje: a közös gondolkodás jobb kódot eredményez.