Jakość
Zielone testy to dopiero początek
Tysiące testów jednostkowych, testy mutacyjne sprawdzające, czy testy w ogóle łapią błędy, wizualny smoke w czystej przeglądarce i porównanie pikseli z bazą. Na końcu i tak gra właściciel.
5.1 Bramki przed scaleniem
Każda bramka odpowiada na inne pytanie. Testy jednostkowe: czy kod robi to, co deklaruje. Mutacje: czy testy w ogóle by zauważyły, gdyby nie robił. Czysty eksport: czy to, co działa w katalogu roboczym, działa też z samego repozytorium. Smoke: czy gra się uruchamia i wygląda jak trzeba. Wydajność: czy mieści się w budżecie. Playtest: czy jest dobra.
5.2 Testy mutacyjne
Recenzent celowo psuje kod – odwraca warunek, zmienia stałą, przywraca stary błąd – i sprawdza, czy któryś test to zauważy. Mutant, który przeżywa, oznacza dziurę w testach, nawet jeśli wszystkie świecą na zielono.
Po TRAM-1 do zestawu mutacji trafił m.in. dawny, błędny winding korytarza D5. Test zwykłego meczu wykrywa go od razu – ten sam błąd nie wróci po cichu.
Osobno sprawdzane jest wersjonowanie: zmiana reguły generatora musi zmienić wersję, a zmiana wejścia, które na wynik nie wpływa, nie może jej ruszyć – 15 z 15 prób zgodnych z oczekiwaniem.
| Mutacja | Wynik |
|---|---|
| Przywrócony dawny winding D5 | wykryta |
| Zamienione strony drzwi lewe/prawe | wykryta |
| Obrażenia od stojącego tramwaju | wykryta |
| Brak limitu „raz na przejazd” | wykryta |
| Najkrótsze trasy zamiast najdłuższych | wykryta |
5.3 Smoke wizualny i kryterium pikseli
Smoke uruchamia produkcyjny build z czystego eksportu repozytorium w headless Chrome, z lokalnym Workerem i bez dostępu do sieci poza komputerem. Każdy błąd w konsoli i każda odpowiedź 404 to porażka. Znane problemy środowiska są wypisywane w raporcie, a nie maskowane.
Zrzuty powstają w macierzy okien – od telefonu 667×375 po monitor 2560×1080, w dzień i w nocy, w jakości Wysokiej i Niskiej. Gdy zmiana ma nie ruszać dotychczasowego trybu, obowiązuje twarde kryterium: 0,000 % pikseli różniących się o więcej niż 8/255 względem bazy.
5.4 Bramki wydajności
| Pomiar | Wynik | Próg |
|---|---|---|
| Tick symulacji, p95 (scenariusz PLAY-1) | 1,344 ms | 3 ms |
| Pole przeciwników, p95 | 0,744 ms | 1,5 ms |
| Łódź r600, 3 tramwaje w ruchu, 60+ botów, p95 | 1,047 ms | 3 ms |
| LocalServer: 169,0 → 40,9 ms | 4,13× | ≥ 3× |
Pomiary mają warunki: zasilanie sieciowe, ciche okno i obciążenie procesora poniżej progu. Gdy warunek nie jest spełniony, pomiar jest pomijany i opisany w raporcie – nieudanych pomiarów nie zastępuje się zerami ani starszymi wynikami.
5.5 Praca w liczbach
- 869commitów w 15 iteracjach (klient + backend)
- 179raportów zadań w repozytoriach
- 1634 + 937testów backendu i klienta, 0 błędów
- 4,13×przyspieszenie LocalServer (próg: 3×)
Pokaż dane w tabeli
| Iteracja | klient | backend | razem |
|---|---|---|---|
| iteracja 1 | 15 | 12 | 27 |
| iteracja 2 | 21 | 14 | 35 |
| iteracja 3 | 23 | 25 | 48 |
| iteracja 4 | 13 | 10 | 23 |
| iteracja 5 | 12 | 10 | 22 |
| iteracja 6 | 12 | 4 | 16 |
| iteracja 7 | 47 | 6 | 53 |
| iteracja 8 | 40 | 7 | 47 |
| iteracja 9 | 107 | 29 | 136 |
| iteracja 10 | 48 | 43 | 91 |
| iteracja 11 | 45 | 41 | 86 |
| iteracja 12 | 18 | 23 | 41 |
| iteracja 13 | 39 | 30 | 69 |
| iteracja 14 | 57 | 9 | 66 |
| iteracja 15 | 86 | 23 | 109 |
| Σ | 583 | 286 | 869 |
Liczby zagregowane z historii git (wszystkie gałęzie) i raportów zadań; bez nazw gałęzi i treści commitów.


