W dużym projekcie nie da się pamiętać, że gdzieś już jest funkcja licząca to samo – więc pisze się ją drugi i trzeci raz. To nie lenistwo, to koszt pamięci. Problem w tym, że kopie z czasem się rozchodzą: ta sama najlepsza próba ucznia potrafiła być inna na ekranie i w PDF-ie, a w aplikacji mobilnej ten sam egzamin pokazywał czas raz jako 12:05, raz jako 12 min 5 s. Ta sama choroba złapała niezależnie backend Django i aplikację w React Native. O tym, dlaczego duplikacja to fabryka takich rozjazdów, i jak posprzątać ją bezpiecznie: najpierw dopisać testy, potem scalać, a zielona suita ma świecić tak samo przed i po.
Po serii o testowaniu czas na dowód z produkcji, policzony co do sztuki: backend Django z ponad 100 tysiącami linii kodu i 6,6 tysiąca testów, mobilka React Native z 44 tysiącami linii i ponad 1600 testami, do tego 298 testów Playwright, 7 przepływów Maestro i bramka w GitHub Actions, która nie raz zatrzymała zepsute wdrożenie przed produkcją. Z metodą liczenia, proporcjami kodu do testów i uczciwym rozdziałem o tym, czego wciąż nie pokrywam.
Skoro testować, to co dokładnie i na którym poziomie? Piramida testów opowiedziana po ludzku: testy jednostkowe w pytest, integracyjne z bazą i widokami Django, testy przepływów na samej górze. Skąd naprawdę biorą się luki w pokryciu, dlaczego sto procent pokrycia niczego nie gwarantuje – i dlaczego moje testy pilnują nie tylko kodu, ale też treści tego bloga.
Studium przypadku z zawodowe.edu.pl: platforma ruszyła na początku 2025 na Bootstrapie 5, po roku miałem w planach jego usunięcie, po półtora – było zrobione. Nie przez wielki przepis, tylko szablon po szablonie, z bezpiecznym przełącznikiem i testami pilnującymi, żeby Bootstrap nie wrócił tylnymi drzwiami. Co go zastąpiło: details, dialog, :has(), natywne selecty i garść vanilla JS.
Nie ranking z internetu, tylko moja droga: Flask, gdy chciałem najszybciej wystawić HTML; FastAPI, gdy potrzebowałem szybkiego API z walidacją i /docs; Django, gdy chciałem użytkowników, panel i ORM z pudełka. Trzy frameworki przez pryzmat roboty, do której po nie sięgałem – z kodem i szczerą tabelą decyzyjną.