GH GambleHub

Strategia testowania jądra

1) Zasady

Bilans piramidy-trofeum. Podstawa - szybkie testy modułowe i kontraktowe; powyżej - komponent i integracja; na wierzchołku jest minimalna, ale cenna warstwa e2e.
Zmiana w lewo. Im wcześniej złapiemy wadę (liniowiec, analiza statyczna, nieruchomość), tym taniej.
Deterministyczny z projektowania. Zarządzamy czasem, siecią, losowymi i zewnętrznymi zależnościami.
Ekonomia jakości. Każdy test to „ubezpieczenie”: celem jest zminimalizowanie kosztów całkowitych (wady + konserwacja testów).
Orientacja ryzyka. Zasięg koncentruje się na stałych firmach i protokołach (umowy, idempotencja, spójność).

2) Poziomy badań i obszary odpowiedzialności

2. 1 Jednostka (modułowa)

Sprawdź czystą logikę bez I/O.
Moczymy tylko granice (port/adapter), używamy fabryk do danych.
Szybki (≤ 50 -100 ms/test), równoległy.

2. 2 Umowa (dostawca i konsument)

Naprawić umowy API (HTTP/gRPC/event) między usługami.
Stosujemy podejście konsumenckie: umowy są przechowywane w VCS, sprawdzane w CI dostawcy.
Zmniejszenie kruchości integracji e2e.

2. 3 Komponent (powyżej modułu, z rzeczywistym przechowywaniem)

Uruchamiamy część usługi z prawdziwą bazą danych/pamięci podręcznej w kontenerze (Testcontainers).
Sprawdzamy schematy migracji, indeksy, transakcje, zamki.

2. 4 Integracja/system (ścieżki end-to-end między usługami)

Podnosimy zestaw usług w odizolowanym środowisku.
Sprawdzamy trwałości od końca do końca: transakcyjność, retrai, idempotencja, obsługa błędów.

2. 5 E2E (minimalna warstwa „wartościowa”)

Prawdziwe protokoły i środowisko „jak w sprzedaży”, ale ograniczony zestaw scenariuszy: płatność → potwierdzenie → delegowanie; rejestracja → weryfikacja → wpis.
Wykorzystujemy funkcje wysokiego ryzyka do uwolnienia i regresji.

3) Sprawdzalna architektura

Porty/adaptery (sześciokątne). Jądro biznesowe nie wie o HTTP/SQL; zależności są realizowane poprzez interfejsy.
Wstrzyknięcie czasu/losowo. „zegar”, „losowy” - zależności; w testach, które naprawiamy.
Konfigurowalna abstrakcja we/wy. Kolejki, DB, KMS - poprzez interfejsy z implementacjami testowymi.
Niezmienne funkcje. Formułujemy wprost postkonditcje i predykaty - są one łatwiejsze do przetestowania i monitorowania.

4) Dane do badań

Fabryki/budownicze zamiast statycznych opraw JSON: mniej kruchości.
Idempotentne nasiona i zresetować hak DB przed testem (migracje → obciąć → nasiona).
Katalogi przypadków: „normy”, „krawędzie”, „błędy”, „chaos”.
Syntetyka zamiast prawdziwej PD: generatory, maskowanie, profile prywatności.

5) Konkurencja i idempotencja

Testy wyścigowe: Konkurencyjne wpisy/rezerwy/zamki.
Sprawdzanie kluczy idempotentnych (na przykład '(operacja, external_id)'): powtarzane połączenia nie zmieniają stanu.
Retrai i timeouts: gwarantujemy poprawność w przypadku tymczasowych błędów.

Pseudokoda (idempotencja):

dedupe_key = hash(op + external_id)
if exists(executions, dedupe_key): return previous_result else:
reserve(dedupe_key)
result = do_operation()
store(executions, dedupe_key, result)
return result

6) Czas, godziny, strefy czasowe

Wszystkie przechowywane czasy to UTC; W testach używamy 'Zegara ".
Testujemy przypadki DST (duplikaty/brakuje zegara), okna „lokalnego dnia”.
Sprawdzamy timeouts z monotonicznym zegarem; symulować NTP jitter.

7) Odporność i chaos

Wtrysk usterki: błędy sieciowe, 5xx, opóźnienia, częściowa degradacja (pamięć podręczna niedostępna).
Testy chaosu w środowisku preprd: odłączanie węzłów, kolejki przeciążania, łamanie BGP/Anycast (emulacja).
Polityka awaryjna i degradacja UX: testy muszą potwierdzić prawidłową „wdzięczną degradację”.

8) Wydajność

Mikro wartości odniesienia dla algorytmów krytycznych (z utrwaleniem procesora/stopu).
Profile obciążenia: linia wyjściowa (p50/p95), naprężenie (szczyt), rozszerzenie (moczenie) dla wycieków pamięci.
Bramki regresowe: budowa nie powiodła się, jeśli opóźnienie p95 jest gorsze niż wartość wyjściowa> X%.

9) Bezpieczeństwo i zgodność

SAST/Lint: wyszukiwanie luk/antypaterii.
DAST/IAST: podstawowe scenariusze na stoisku (próbki XSS/SQLi/SSRF).
Sekrety-skanowanie: brak kluczy/haseł w kodzie i artefakcie.
Testy prywatności: brak danych PD w logach/śladach, zgodność z „zarządzania zgodą”, profile anonimizacji przesyłania.

10) Wskaźniki jakości i SLO

Szybkość przejścia testu i wskaźnik błędów.

Zasięg docelowy:
  • 90-100% dla modułów jądra krytycznego,
  • 70-80% dla obwodu (ze szczególnym uwzględnieniem stałych).
  • Ocena ryzyka uwolnienia: całość: zmiany w plikach krytycznych × spadające wartości odniesienia × nowe płatki.
  • Błędny budżet: połączenie prod-SLO (uptime/errors) z eksperymentami i częstotliwością uwalniania.

11) CI/CD i bramy

Macierz etapowa:

1. Wskazówka/Format/Sprawdź

2. Jednostka + Nieruchomości

3. Dostawca/konsument

4. Komponent (Testcontainers)

5. Integracja + dym perfowy

6. Bezpieczeństwo (SAST/Secrets)

7. Budowa/pakiet + SBOM

8. Wdrożyć do pre-prod + e2e + dym chaosu

Bramy: zatrzymać się na spadku kontraktów, rosnące opóźnienia, nowe krytyczne słabości.

Cache i shading: przyspieszyć rurociąg z powodu równoległości i przebiegów przyrostowych (dla modułów zmodyfikowanych).

12) Testy płatkowe: wykrywanie i leczenie

Autorun + Quorum (2/3 biegów).
Wykrywacz płatków: zależność od czasu/losowych/domyślnych oczekiwań.
Kwarantanna z SLA: badanie nie blokuje uwolnień, ale musi być skorygowane/przepisane w dniach N.
Zerowa tolerancja na strumienie w „rdzeniu” szlaku krytycznego.

13) Badanie własności, mutacja i faza

Właściwości oparte: formułujemy właściwości (komutacyjność, idempotencja, monotonia), generatory danych granicznych.
Badanie mutacji: mierzymy „siłę” testów (czy zabijają wprowadzone mutacje).
Fuzzing: protokoły/parsery/formaty (JSON, Protobuf, CSV), zwłaszcza na granicach bezpieczeństwa.

Właściwość przykładowa (pseudokoda):

prop "serialize/deserialize roundtrip":
forAll(randomModel()):
decode(encode(model)) == model

14) Obserwowalność i powiązanie z badaniami

Ślady testowe (ślad-id w dziennikach): wygodne jest replikowanie w preprd.
Migawki metryki podczas wykonywania są przechowywane jako artefakt.
Kontrola dziennika: brak pól wrażliwych, rozmiar dziennika w SLO.

15) Dokumentacja i procedury

Podręcznik testów: gdzie uruchomić, które testy, jak pisać fabryki, jak aktualizować kontrakty.
Książki startowe: powtórka incydent, szybka diagnoza, zwolnienie rollback.
Niezmienny katalog: wykaz gwarancji systemowych i odniesień do odpowiednich testów/wpisów.

16) Lista kontrolna architekta

1. Jądro niezmienne i krytyczne ścieżki opisane?
2. Czy istnieje macierz poziomów testów i ich SLO (czas, stabilność)?
3. Umowy są weryfikowane i zatwierdzane w CI u dostawcy i konsumenta?
4. Czas/losowy/sieć kontrolowana w testach (zegar, wtryskiwacz usterki)?
5. Skonfigurowane Testcontainers/izolowana baza danych, czy migracje są sprawdzone?
6. Czy istnieją granice i bramy regresji?
7. Czy SAST/Secrets-skanowanie i sprawdzanie dziennika prywatności są włączone?
8. Flaky jest nagrywany i jest SLA do korekty?
9. Czy związek między testami a prod-SLO a błędnym budżetem jest przejrzysty?
10. Czy książka startowa i niezmienny katalog są udokumentowane?

Wniosek

Strategia testowania jądra nie jest listą narzędzi, ale umiejętnością architektoniczną: sprawdzalna konstrukcja, ścisła hierarchia poziomu, zarządzane dane, tolerancja błędów i metryki wbudowane w płytę CI/CD. Zgodnie z opisanymi praktykami zespół otrzymuje szybkie i niezawodne informacje zwrotne, a wydania stają się przewidywalne i bezpieczne.

Contact

Skontaktuj się z nami

Napisz do nas w każdej sprawie — pytania, wsparcie, konsultacje.Zawsze jesteśmy gotowi pomóc!

Telegram
@Gamble_GC
Rozpocznij integrację

Email jest wymagany. Telegram lub WhatsApp są opcjonalne.

Twoje imię opcjonalne
Email opcjonalne
Temat opcjonalne
Wiadomość opcjonalne
Telegram opcjonalne
@
Jeśli podasz Telegram — odpowiemy także tam, oprócz emaila.
WhatsApp opcjonalne
Format: kod kraju i numer (np. +48XXXXXXXXX).

Klikając przycisk, wyrażasz zgodę na przetwarzanie swoich danych.