Skoro polovica projektov, ktoré v poslednom čase preberáme, prichádza po inom dodávateľovi. Niekedy klient nie je spokojný so servisom, niekedy pôvodný vendor zanikol, niekedy sa projekt jednoducho prerástol. Nech je dôvod akýkoľvek, naša prvá fáza je vždy rovnaká: dôkladný audit. Toto je náš zoznam krokov a postup.

Prvé stretnutie — diagnostika

Pred akýmkoľvek kódom potrebujeme rozumieť kontextu:

  • Aký bol pôvodný účel projektu a ako sa za roky zmenil?
  • Aké sú aktuálne bolesti — výkon, chyby, chýbajúce funkcionality, bezpečnosť?
  • Čo počas refactoru absolútne nesmie prestať fungovať?
  • Existuje dokumentácia? Sada testov? Staging prostredie?

Rozhovor trvá typicky 60-90 minút. Po ňom už máme prvé hypotézy o tom, kde leží hlavný problém.

Audit kódu — postup

Po získaní prístupu do repozitára prechádzame technickou kontrolou:

  1. PHP verzia a kompatibilita — beží projekt na PHP, ktoré je ešte podporované?
  2. Framework verzia — Nette/Symfony/Laravel/WordPress aktuálne, alebo niekoľko hlavných verzií pozadu?
  3. Závislosti v Composeri — koľko balíčkov má známe CVE? composer audit dá rýchlu odpoveď
  4. Statická analýza — PHPStan na úrovni 5+ alebo Psalm odhalí typické chyby
  5. Pokrytie testami — existujú vôbec testy? Aký je pomer pokrytia?
  6. Architektúra — oddelenie zodpovedností, MVC vs spaghetti, biznisová logika v controlleroch?

Infraštruktúra — server, databáza, dependencies

Audit kódu nestačí, kontrolujeme aj prevádzku:

  • Konfigurácia servera — Apache/Nginx, PHP-FPM, OPcache, pamäťový limit, logovanie chýb
  • Databáza — verzia MySQL/Postgres, stratégia záloh, indexy, log pomalých dotazov
  • HTTPS — platný certifikát, HSTS, redirect z HTTP
  • Bezpečnostné hlavičky — CSP, X-Frame-Options, Referrer-Policy
  • E-mail — SPF, DKIM, DMARC pre transakčné e-maily

Bezpečnostné slabiny

Toto je najčastejšie najtmavšia časť auditu. Bežne nachádzame:

  • SQL injekcie cez priame skladanie SQL reťazcov
  • XSS chyby z neošetreného výstupu v starých šablónach
  • Prihlasovanie bez obmedzenia počtu pokusov — otvorené dvere pre brute force útok
  • Riziká kradnutia session — session_id v URL, chýbajúce secure cookies
  • Súbory nahrávané do verejného adresára bez kontroly typu
  • Heslá natvrdo v zdrojovom kóde

Pri každom náleze hodnotíme zneužiteľnosť a dopad. Kritické (RCE, SQL injection na admin endpointe) riešime okamžite, ostatné plánujeme do sprintov refactoru.

Refactor plán — čo prepísať a čo nechať

Najčastejšia chyba pri preberaní projektu je „prepíšeme to celé od nuly". Žije z toho ego programátora, nie biznis klienta. My pristupujeme inak:

  1. Stabilizácia (1-4 týždne) — opraviť kritické bezpečnostné a stabilitné problémy bez zmeny funkcionality
  2. Modernizácia infraštruktúry (2-4 týždne) — aktualizácia PHP, menšia aktualizácia frameworku, aktualizácia závislostí
  3. Postupný refactor (priebežne) — pri každej novej funkcionalite alebo oprave chyby refactorovať dotknutú časť kódu
  4. Strategický refactor (ak treba) — len špecifické moduly, ktoré sú architektonicky beznádejné

Plné prepísanie je posledná možnosť — len keď náklady na údržbu starého kódu prevyšujú náklady na nové riešenie.

Komunikácia s pôvodným dodávateľom

Toto je jemná téma. Keď je klient nespokojný, neznamená to, že pôvodný dodávateľ robil zle — niekedy sú medzi nimi nereálne očakávania alebo zlá komunikácia. My sa nikdy nepouštíme do hodnotenia ich práce verejne. Pri preberaní projektu žiadame:

  • Prístupy do repozitára a serverov
  • Dokumentáciu, ak existuje
  • Kontakt na konzultáciu k nejasným častiam (často platenú)
  • Súhlas s ukončením predošlého servisu na konkrétny dátum

Profesionálny dodávateľ odovzdá projekt bez problémov. Ak sa stretneme s obštrukciami, vieme to riešiť právne, ale za 25+ rokov to nebol veľmi častý scenár.

Záver

Audit zdedeného projektu je investícia 5-15 hodín seniórneho času, ale dáva klientovi presnú odpoveď, čo má a čo s tým robiť. Bez auditu sa rozhodnutia robia v hmle a typicky vedú k zbytočnému prepísaniu. Ak preberáte projekt po inom dodávateľovi, ozvite sa nám — vieme audit urobiť za pevnú cenu so záväzným reportom.