Jednostka 9 / 11

Testowanie regresyjne, utrzymanie testów i zwalczanie testów kruchych

Zyski:

  • Zrozumienie celu testów regresyjnych oraz umiejętność wybierania testów i tworzenia przypadków regresji zgodnie ze zmianami wprowadzanymi przez sztuczną inteligencję
  • Umiejętność diagnozowania głównych przyczyn niestabilnych testów (czas, zależność kolejności, stan współdzielony, zależność zewnętrzna) i stosowania trwałych rozwiązań bez tłumienia objawu
  • Możliwość utrzymania dyscypliny związanej z uruchamianiem wersji wstępnej pełnego pakietu, przy jednoczesnym utrzymaniu szybkości, niezależności i niezawodności pakietu regresyjnego poprzez eliminację duplikatów testów

Oprogramowanie stale się zmienia; Każda nowa funkcja, każda poprawka może zepsuć coś, co działało wcześniej. Późniejsze zakłócenie wcześniej działającej funkcji nazywa się regresją. Testowanie regresyjne polega na ponownym testowaniu istniejącej funkcjonalności przy każdej zmianie w celu wykrycia tych degradacji. Z czasem te zestawy testów stają się coraz większe — powstają tysiące testów — i pojawiają się dwa poważne problemy: działanie zestawu zwalnia, a niestabilne testy — zawodne testy, które w tym samym kodzie czasami przechodzą pomyślnie, a czasem ponoszą porażkę — niszczą zaufanie zespołu do wyników testów. Sztuczna inteligencja (AI) to potężna pomoc w utrzymaniu dobrego, szybkiego i niezawodnego pakietu regresyjnego. Jednak główne zastrzeżenie pozostaje: chociaż sztuczna inteligencja może zaoferować „przejście” delikatnego testu, często może stworzyć łatkę, która zakryje prawdziwy błąd. Twoim zadaniem jest znaleźć pierwotną przyczynę niestabilności, a nie tłumić objawy.

Podstawowe przyczyny niestabilności testów

Testowanie delikatne to najbardziej podstępny problem testowania: nie jest pewne, czy zakończy się pomyślnie, czy nie, co wprawia zespół w nawyk „znowu musiał się zawiesić, uruchom go jeszcze raz” — a ten nawyk pewnego dnia zignoruje prawdziwy błąd jako „niestabilny”. Główne przyczyny źródłowe:

  • Warunki czasu/wyścigu: Test sprawdza wynik bez oczekiwania na zakończenie operacji. Najczęstszy powód.
  • Zależność kolejności: Testy zależą od pozostawionych przez siebie danych; Psuje się, gdy zmienia się kolejność.
  • Wspólny przypadek: wiele testów wykorzystuje te same dane testowe/użytkownika, co powoduje konflikt.
  • Zależność zewnętrzna: Sieć rzeczywista, usługa strony trzeciej, czas systemowy, wartość losowa.
  • Różnica w środowisku: Przełącza na tryb lokalny, pozostaje w CI (środowisko ciągłej integracji).
Uwaga: Zaliczenie delikatnego testu poprzez „kilkukrotne ponawianie próby” często maskuje prawdziwy błąd współbieżności. Ponowna próba to narzędzie diagnostyczne, a nie leczenie. Najpierw znajdź pierwotną przyczynę; Ponownej próby używaj tylko w ostateczności w przypadku udokumentowanej, naprawdę zewnętrznej niestabilności.

Konserwacja testów: utrzymywanie opakowania w dobrym stanie

Zestaw regresyjny jest jak ogród; Jeśli nie zadbamy o to, chwasty przejmą kontrolę. Sztuczna inteligencja pomaga w trzech zadaniach konserwacyjnych:

1. Powtórzone/niepotrzebne czyszczenie testowe. Z biegiem czasu gromadzi się duża liczba przypadków testowania tego samego. AI sugeruje grupowanie i łączenie podobnych testów.

2. Diagnostyka testu kruchego. Dajesz AI kod testowy i wzór niestabilności; sugeruje możliwe przyczyny źródłowe i trwałe rozwiązanie.

3. Wybór/priorytetyzowanie testów. Uruchamianie całego pakietu przy każdej zmianie jest kosztowne. Dzięki analizie wpływu testów (wybierając tylko odpowiednie testy na podstawie zmienionego kodu) AI rekomenduje, które testy powinny zostać uruchomione jako pierwsze. Jednakże pełny pakiet przedpremierowy jest koniecznością.

Kwarantanna: właściwe zarządzanie delikatnymi testami

Odkryłeś, że test jest delikatny, ale nie masz czasu, aby od razu naprawić pierwotną przyczynę. Co robić? Istnieją dwa złe sposoby: całkowite usunięcie testu (to zachowanie nie jest już w ogóle zachowywane) lub wyciszenie go i ponowna próba (zatuszowanie prawdziwego błędu). Prawidłowym sposobem jest poddanie kwarantannie (tymczasowe oddzielenie delikatnego testu od głównego opakowania i śledzenie go na osobnej liście). Testowanie poddane kwarantannie nie zapobiega łączeniu wersji, ale pozostaje widocznym długiem i jest regularnie rozwiązywane. Najważniejszy punkt jest następujący: kwarantanna to poczekalnia, a nie kosz na śmieci. Jeśli lista kwarantannowych się wydłuża, jest to alarm, że stan zdrowia zespołu testowego się pogarsza. Sztuczna inteligencja może okresowo przeglądać Twoją listę kwarantanny i grupować ją według wzorców głównych przyczyn; Umożliwia wspólne rozwiązania poprzez ujawnienie wspólnych przyczyn, takich jak „wszystkie 6 testów jest podłączonych do tego samego wspólnego użytkownika testowego”.

Wskazówka: do każdego rekordu kwarantanny dodaj „właściciela” i „datę ostatniego sprawdzenia”. Opuszczona kwarantanna staje się trwałym wysypiskiem; Kruche testy żyją tam na zawsze, bo nikogo to nie obchodzi.

Tabela strategii regresji

Stan

Strategia

Rola sztucznej inteligencji

drobna korekta

Dotknięty obszar + test dymu

Wybierz odpowiednie testy

nowa funkcja

Powiązany moduł + integracja

Zaproponuj nowy przypadek regresji

duży refaktor

Pełny pakiet regresyjny

Analiza luki w pokryciu

wydanie wstępne

Pełny pakiet + eksploracja

Oszacowanie priorytetu i czasu trwania

Pilna poprawka na żywo

Skoncentrowana + ścieżka krytyczna

Minimalny bezpieczny zestaw testowy

Słaba zachęta/silna zachęta

Słabe: „Ten test czasami kończy się niepowodzeniem, napraw to”.
Mocne: „Ten test kończy się niepowodzeniem w 3 na 10 uruchomieniach, kod niezmieniony. Zdiagnozuj pierwotną przyczynę niestabilności: może to być czas/wyścig, zależność od kolejności, stan współdzielony, zależność zewnętrzna lub różnica w środowisku. Pokaż, która linia w teście wskazuje na każdą możliwą przyczynę. Zaproponuj trwałe rozwiązanie; NIE sugeruj rozwiązania eliminującego objawy, takiego jak „dodaj ponowną próbę” — jeśli jest to nieuniknione, napisz wyraźnie powód. Test: [kod]. Ścieżka błędu: [log].

Potężny monit; kieruje diagnozę do pierwotnej przyczyny i wyraźnie zabrania tłumienia objawów.

Cztery szablony do kopiowania

1) Diagnoza testu kruchego:

Ten kod testowy czasami przechodzi pomyślnie, a czasami kończy się niepowodzeniem bez zmian. Wymień główne przyczyny (rasa, zależność od kolejności, stan wspólny, zależność zewnętrzna, zegar/losowość, różnica w środowisku) i pokaż linię dowodów w teście dla każdej z nich. Zaproponuj trwałe rozwiązanie; oznaczyć rozwiązanie tłumiące, takie jak ponowna próba, jako ostateczność i wraz z uzasadnieniem. Test: [kod] / wzorzec niestabilności: [ile razy w ilu seriach]

2) Proponowanie przypadku regresji:

Wprowadzono następującą zmianę: [zmiana/podsumowanie PR]. Wymień BIEŻĄCE zachowania, które ta zmiana zakłóciłaby i zaproponuj dla każdego przypadek testowy regresji. Szczególnie podkreśl obszary skutków ubocznych i wspólnych zależności.

3) Zduplikowane czyszczenie testu:

Sprawdź poniższy zestaw testów. Grupuj zduplikowane lub nakładające się przypadki, które testują to samo zachowanie; Zasugeruj, które z nich powinienem zachować, a które połączyć dla każdej grupy. Ostrzegaj, jeśli istnieje ryzyko utraty ubezpieczenia. Testy: [lista/kod]

4) Wybór efektu testowego:

Zmieniły się następujące pliki/funkcje: [lista]. Z istniejącego zestawu testów wybierz i uzasadnij testy, które muszę przeprowadzić jako pierwsze (te, które są bezpośrednio/pośrednio powiązane ze zmienionym kodem). Uwaga: przypomnij mi, że nadal będę korzystać z pełnego pakietu przedpremierowego.

trzy mini etui

Przypadek 1 — Prawdziwy błąd ukryty przez ponowną próbę. Jeden zespół dodał 3 próby do okazjonalnego testu pozostałych wypłat; Teraz test zawsze „zdawał”. Zastosowanie „diagnostyki testu delikatnego” wykazało, że niestabilność wynikała z rzeczywistych warunków wyścigowych: przy dużym obciążeniu potwierdzenie płatności było czasami przetwarzane dwukrotnie. Przez wiele miesięcy firma Retry ukrywała błąd, który mógł skutkować rzeczywistą utratą pieniędzy na żywo. Główna przyczyna naprawiona, ponowna próba usunięta.

Przypadek 2 — Pakiet skurczył się, prędkość wzrosła. Zestaw regresji składający się z 1400 testów trwał 55 minut. W przypadku „czyszczenia testów zduplikowanych” 380 testów okazało się duplikatami lub zostało pokrytych; połączone. Pakiet został skrócony do 900 testów, czas skrócony do 34 minut, zasięg nie zmniejszył się w sposób wymierny. Szybsza informacja zwrotna zachęciła zespół do częstszych testów.

Przypadek 3 – Zależność od kolejności. Test zawsze przejdzie pomyślnie lokalnie, ale losowo zakończy się niepowodzeniem w CI. Diagnostyka AI wykazała, że ​​test zależał od użytkownika stworzonego przez inny test, w CI się zepsuł, bo testy przebiegały równolegle/w innej kolejności. Każdy test przeprowadzono w celu ustalenia własnych danych; Niezdecydowanie się skończyło.

Typowe błędy

  • Wyciszanie delikatnego testu przy ponownej próbie. Próbuję ponownie bez szukania pierwotnej przyczyny; ukrywanie prawdziwego błędu.
  • Kultura „znowu utknąłem”. Rutynowe ignorowanie czerwonych wyników; Pewnego dnia pomijając prawdziwy błąd.
  • W ogóle nie przycinam pakietu. Umożliwienie zduplikowanych testów kumulowania się i spowalniania pakietu.
  • Zależność pomiędzy testami. Testy opierają się na powszechnych warunkach/sekwencji; źródło niepewności.
  • Testowanie tylko zmienionej części i pominięcie pełnego pakietu. Skrót przedpremierowy; Ukryte skutki uboczne uciekają.
  • Poleganie na zależności zewnętrznej. Testy oparte na rzeczywistej wartości sieci/zegara/losowej; naturalnie niestabilny.

Podsumowując

Testowanie regresyjne wychwytuje zmiany psujące poprzednio działające funkcje; Jednak w miarę wzrostu pakietów powolność i kruchość testowania podważają zaufanie. Podstawowymi przyczynami niestabilnych testów są zwykle czas, zależność kolejności, stan współdzielony i zależności zewnętrzne. Sztuczna inteligencja jest potężną pomocą w diagnozowaniu, czyszczeniu i wyborze testów; Jednak tłumienie niezdecydowania poprzez ponowną próbę zakrywa prawdziwe błędy. Znajdź pierwotną przyczynę, uczyń testy niezależnymi i deterministycznymi, regularnie czyścij pakiet, uruchamiaj pełny pakiet przed wydaniem.

Zadanie aplikacji

Wybierz test z własnego projektu, o którym wiesz, że jest delikatny (lub wydaje się niestabilny). Wyodrębnij potencjalne przyczyny źródłowe i zweryfikuj linie dowodowe w teście za pomocą szablonu „diagnostyki testu delikatnego”. Zidentyfikuj pierwotną przyczynę i wprowadź trwałe rozwiązanie bez ponownych prób. Następnie wybierz 10 testów ze swojego pakietu i znajdź te, które można połączyć z „czyszczeniem duplikatów testów”. Zgłaszaj, ile niestabilności testów rozwiązałeś od ich pierwotnej przyczyny i ile niepotrzebnych przypadków usunąłeś z pakietu.

lista kontrolna

  • [ ] Zdiagnozowałem podstawową przyczynę kruchego testu; Nie stłumiłem objawu.
  • [ ] Uważałem, że ponowna próba jest uzasadnioną ostatecznością, a nie lekarstwem.
  • [ ] Zrobiłem testy niezależne i deterministyczne (odizolowane od zewnętrznych zależności).
  • [ ] Usunąłem zduplikowane/niepotrzebne testy z pakietu regresji.
  • [ ] Zdecydowałem się przetestować w oparciu o zmianę, ale uruchomiłem wersję przedpremierową pełnego pakietu.
  • [ ] Traktowałem każdą czerwoną kartkę poważnie, wbrew kulturze „znowu utknąłem, podałem”.