Co to jest testowanie wątków w testowaniu oprogramowania?

⚡ Inteligentne podsumowanie

Testowanie wątków weryfikuje kluczowe możliwości funkcjonalne pojedynczego zadania biznesowego w trakcie jego realizacji w ramach zintegrowanego systemu. Jest ono przeprowadzane na wczesnym etapie testowania integracyjnego, a nie dopiero po zakończeniu realizacji każdego komponentu.

  • 🧵 Główna idea: Wątek to pojedyncza transakcja biznesowa obejmująca cały proces, a test przebiega tą ścieżką przez zintegrowane moduły.
  • ⏱️. Kiedy działa: Na wczesnym etapie fazy testów integracyjnych, w ramach strategii stopniowej integracji systemów.
  • 🔀 Dwa smaki: Testowanie jednowątkowe sprawdza jedną transakcję na raz, testowanie wielowątkowe wykonuje wiele transakcji równocześnie.
  • 🐞 Co łapie: Warunki wyścigu, blokady, konflikty współdzielonych zasobów i uszkodzenia danych, których nie można wykryć podczas testowania jednościeżkowego.
  • 🧰 Jak to uruchomić: Powtarzaj przebiegi z różnymi kombinacjami aplikacji, wieloma instancjami, różnym sprzętem i kontrolą kodu.
  • 📉 Uczciwy limit: Powtarzalne testy jednostkowe kodu wielowątkowego pozostają trudne, dlatego defekty czasowe mogą pojawiać się sporadycznie.

Czym jest testowanie wątków w testowaniu oprogramowania z typami jedno- i wielowątkowymi?

Co to jest testowanie wątków?

Testowanie wątków to rodzaj testowania oprogramowania, który weryfikuje kluczową funkcjonalność konkretnego zadania, zwanego wątkiem. Zwykle przeprowadza się go na wczesnym etapie. testy integracyjne Faza. Testowanie oparte na wątkach to jedna ze strategii przyrostowych stosowanych podczas testowania integracji systemów. Z tego powodu test wątków jest bardziej poprawnie opisany jako test interakcji wątków.

Wątek tutaj nie jest tylko wątkiem systemu operacyjnego. Inżynieria oprogramowania W terminologii wątek to jedna kompletna transakcja biznesowa — na przykład „klient składa zamówienie” — tracPrzechodzi przez każdy moduł, którego dotyka. Testowanie wątków polega na sprawdzeniu, czy ta pojedyncza ścieżka nadal zachowuje się poprawnie po połączeniu modułów.

Poniższy diagram pokazuje, w jaki sposób poszczególne wątki są integrowane i uruchamiane jako podsystem przed zmontowaniem całego systemu.

Diagram testowania wątków pokazujący wątki stopniowo integrowane w podsystemie, a następnie w całym systemie

Rodzaje testowania gwintów

Testowanie oparte na wątkach dzieli się na dwie kategorie. Rozróżnienie to decyduje zarówno o danych testowych, jak i o tym, jakie defekty można znaleźć.

  • Testowanie pojedynczego wątku: Test jednowątkowy obejmuje jedną transakcję aplikacji na raz. Obsługiwane jest tylko jedno żądanie, więc zachowanie odpowiedzi jest przewidywalne, a test można łatwo napisać i powtórzyć.
  • Testowanie wielowątkowe: Test wielowątkowy obejmuje kilka jednocześnie aktywnych transakcji. Dla tej samej usługi przygotowywane są oddzielne wątki, co pozwala na obserwację responsywności i obsługi stanu współdzielonego przy jednoczesnym obciążeniu.

Transakcja, która pomyślnie przeszła testowanie jednowątkowe, może nadal zakończyć się niepowodzeniem w teście wielowątkowym, ponieważ drugi przebieg powoduje konflikt o te same rekordy, połączenia i pamięć.

Jak przeprowadzić testowanie wątków

Proces wątkowy koncentruje się na działaniach integracyjnych, a nie na całym cyklu rozwoju. W praktyce podejście to wygląda następująco.

  • Testowanie oparte na wątkach to uogólniona forma testowania opartego na sesji, w tym sensie, że sesje są formą wątku, ale wątek niekoniecznie jest sesją.
  • Wątek lub program (niewielka funkcjonalność) jest integrowany i testowany stopniowo jako podsystem, a następnie wykonywany w całym systemie.
  • Na najniższym poziomie zapewnia integratorom lepszą wiedzę na temat zakresu testów.
  • Zamiast testować bezpośrednio komponenty oprogramowania, integratorzy muszą skupić się na testowaniu logicznych ścieżek wykonania w kontekście całego systemu.

Ponieważ jednostką pracy jest ścieżka biznesowa, a nie komponent, testowanie wątków naturalnie znajduje się pomiędzy testowanie modułów i pełne testowanie systemu.

Wskazówki dotyczące testowania wielowątkowego

Defekty wielowątkowe zależą od czasu, więc pojedynczy, czysty przebieg niewiele dowodzi. Poniższe wskazówki zwiększają szansę na ich wykrycie.

  • Przetestuj swój program wielowątkowy, uruchamiając go wielokrotnie przy różnych kombinacjach uruchomionych aplikacji.
  • Przetestuj swój program wielowątkowy, uruchamiając wiele jego instancji jednocześnie.
  • Uruchamiaj wielowątkowe programy na różnych modelach sprzętu przy różnych poziomach obciążenia i obciążenia.
  • Stosuj inspekcję kodu, ponieważ niektóre błędy synchronizacji są łatwiejsze do odczytania niż do odtworzenia.
  • Zbieraj tylko błędy i awarie, które wystąpiły w wątkach innych niż główny.

Typowe defekty wykrywane podczas testowania wątków

Błędy współbieżności rzadko ujawniają się przy użyciu czystego stosu trace. Poniższe kategorie wyjaśniają większość problemów ujawnianych podczas wykonywania wielu wątków, a każda z nich charakteryzuje się odrębnym objawem wartym rozpoznania.

  • Warunki wyścigu: Dwa wątki odczytują i zapisują tę samą wartość bez kolejności, więc wynik końcowy zależy od tego, który wątek zakończył działanie jako pierwszy. Objaw: sumy są poprawne w niektórych przebiegach, a błędne w innych.
  • Impas: Dwa wątki posiadają blokadę, której potrzebuje drugi wątek, i żaden z nich nie kontynuuje działania. Objaw: transakcja zawiesza się na czas nieokreślony, zamiast zakończyć się błędem.
  • Konflikt o zasoby: Wątki ustawiają się w kolejce dla tego samego połączenia, uchwytu pliku lub rekordu, a przepustowość spada na długo przed osiągnięciem limitu sprzętowego.
  • Korupcja danych: Częściowo zapisane struktury współdzielone pozostawiają rekordy w stanie, którego nie mogłaby wygenerować żadna prawidłowa transakcja.
  • Głód: Wątek o niskim priorytecie nigdy nie uzyska potrzebnego mu zasobu, więc jedna ścieżka użytkownika traci limit czasu, podczas gdy reszta systemu wydaje się być w porządku.

W przypadku każdego z nich konieczne jest odnotowanie nieudanego przebiegu w dziennikach, ponieważ defekt, który odtwarza się raz na pięćdziesiąt prób, w przeciwnym razie nie da się zgłosić za pomocą proces zarządzania defektami.

Testowanie wątków a testowanie współbieżności a testowanie integracji

Te trzy terminy nakładają się na siebie i często są mylone w planach testów. Tabela rozdziela je celowo.

WYGLĄD Testowanie wątków Testowanie współbieżności Testy integracyjne
Jednostka testowana Jedna transakcja biznesowa obejmująca wiele modułów Wielu użytkowników lub wątków działających jednocześnie Interfejsy między dwoma lub więcej komponentami
Główne pytanie Czy ta ścieżka kluczowa działa od początku do końca? Co ulega awarii, gdy dostęp jest jednoczesny? Czy moduły komunikują się ze sobą prawidłowo?
Typowy etap Wczesne testowanie integracyjne Testowanie systemu lub wydajności Po testach jednostkowych
Wady będące celem Zerwane ścieżki wykonania, brakujące przekazania Blokady, warunki wyścigu, rywalizacja o blokady Niedopasowanie interfejsów, nieprawidłowe danetracts
Relacja Wariant wielowątkowy pokrywa się z testowaniem współbieżności Szerszy niż wielowątkowy fragment testowania wątków Testowanie wątków to jedna ze strategii przyrostowych

W skrócie, testowanie współbieżności Testowanie wątków pyta, jaki wpływ na system ma jednoczesny dostęp, podczas gdy testowanie wątków sprawdza, czy jedna ważna ścieżka w ogóle przetrwa integrację. Zespoły, które uruchamiają oba te testy, zazwyczaj planują testowanie wątków w pierwszej kolejności.

Zalety testowania wątków

Technika ta jest przydatna w planie integracji z kilku praktycznych powodów.

  • Kluczowe ścieżki biznesowe są weryfikowane na wczesnym etapie, co oznacza, że ​​wszelkie usterki można wykryć przed zmontowaniem całego systemu.
  • Integratorzy uzyskują jasny obraz zakresu, ponieważ jednostka testowa jest rozpoznawalną transakcją, a nie abstracgranica składowej t.
  • Testowanie logicznych ścieżek wykonania w kontekście systemu ujawnia błędy, które występują w izolacji testowanie komponentów nie widać.
  • W przypadku przebiegów wielowątkowych ujawniają się błędy współbieżności — blokady, wyścigi warunków i konflikty zasobów — które w przeciwnym razie dotarłyby do środowiska produkcyjnego.
  • Przyrostowa integracja sprawia, że ​​powierzchnia debugowania jest niewielka, ponieważ dodawany jest tylko jeden wątek na raz.
  • Wyniki są bezpośrednio przekazywane do testy regresji, ponieważ wątek przejściowy jest oczywistym kandydatem do zestawu regresyjnego.

Wady testowania gwintów

  • W przypadku testowania wielowątkowego największym wyzwaniem jest możliwość zaprogramowania powtarzalnego testu jednostkowego.
  • Pisanie testów jednostkowych dla kodu wielowątkowego jest trudnym zadaniem.
  • Kryteria testowania dla testów wielowątkowych różnią się od kryteriów testowania jednowątkowego. W przypadku testów wielowątkowych czynniki takie jak rozmiar pamięci, pojemność pamięci masowej i problemy z synchronizacją zmieniają się, gdy kod jest wywoływany na innym sprzęcie.
  • Wątków nie można testować, dopóki nie będą dostępne moduły, z którymi się stykają, dlatego harmonogramowanie zależy od kolejności integracji.
  • Sporadyczne awarie można łatwo zignorować, uznając je za hałas otoczenia, dlatego też systematyczne rejestrowanie danych jest niezwykle istotne.

FAQ

Kierownik testów współpracuje z analitykami biznesowymi, aby uszeregować transakcje według wpływu na przychody i częstotliwości użytkowania. Ścieżki o najwyższej wartości są integrowane i wątkowane w pierwszej kolejności, więc krytyczna awaria związana z przekazaniem zadań pojawia się, gdy jeszcze jest czas.

Rejestruje ścieżkę biznesową, przebyte moduły, dane przesyłane między nimi oraz oczekiwany stan końcowy. W przeciwieństwie do komponentu walizka testowa, warunek przejścia następuje na końcu całej transakcji.

Typowym wyborem są generatory obciążeń, które generują konfigurowalnych użytkowników wirtualnych — JMeter to popularna opcja open source. Ustawienia liczby wątków, ramp-up i pętli są bezpośrednio mapowane na scenariusze wielowątkowe.

Modele uczenia maszynowego grupują wzorce logów z tysięcy powtarzanych przebiegów i sygnalizują przeploty poprzedzające zawieszenie lub uszkodzenie rekordu. To zawęża sporadyczny błąd synchronizacji do niewielkiego zestawu podejrzanych sekwencji.

Drugi pilot GitHub Szybko tworzy pule wątków, zatrzaski i pętle obciążające. Tester nadal musi zdecydować, które punkty synchronizacji są istotne, ponieważ wygenerowane testy często przechodzą bez wymuszania rzeczywistego przeplotu.

Nie ma stałej liczby. Zespoły powtarzają przebieg dla różnych obciążeń i sprzętu, aż awarie przestaną się pojawiać, a następnie zachowują scenariusz w pakiecie nocnym, ponieważ defekty czasowe pojawiają się ponownie wraz ze zmianą środowiska.

Każdy wątek priorytetowy wykonuje się od początku do końca bez nierozwiązanego defektu, wątki wielowątkowe są wykonywane w docelowej współbieżności, a żaden otwarty problem nie jest klasą błędu impasu lub uszkodzenia danych w cykl życia testów.

Tak — wątek staje się ścieżką żądania między usługami, a nie modułami. Rozproszone tracing zastępuje lokalny stos wywołań i pojawia się to samo pytanie: czy jedna transakcja biznesowa przetrwa każdy przeskok w nienaruszonym stanie?

Podsumuj ten post następująco: