Co to jest testowanie dynamiczne? Rodzaje, techniki i przykłady

⚡ Inteligentne podsumowanie

Podczas testowania dynamicznego uruchamiana jest aplikacja, a następnie obserwowane jest, jak działający kod zachowuje się w przypadku rzeczywistych danych wejściowych. Dzięki temu testerzy mogą sprawdzić funkcjonalność, wydajność i stabilność, czego nie jest w stanie ujawnić żadna dokładna analiza dokumentacji.

  • 🎯 Cel: Dokonuj weryfikacji rzeczywistego zachowania w czasie rzeczywistym, a nie dokumentów je opisujących.
  • 🔀 Dwie gałęzie: Białe pudełko bada kod, czarne pudełko bada zachowanie.
  • 🧱 Cztery poziomy: Testowanie jednostkowe, integracyjne, systemowe i akceptacyjne — wszystkie te testy wykonują kod.
  • ⚙️ Niefunkcjonalny: Tutaj przeprowadzane są kontrole wydajności, odzyskiwania danych, zgodności, bezpieczeństwa i użyteczności.
  • 🔄 Proces: Strategia, projektowanie testów, konfiguracja środowiska, wykonanie i zgłaszanie błędów.
  • ???? Kompromis: Głębsze wykrywanie usterek w zamian za poświęcony czas, mniejsze koszty i lepsze środowisko.

Typy, techniki i przykłady testowania dynamicznego

Co to jest testowanie dynamiczne?

Testowanie dynamiczne to metoda testowania oprogramowania służąca do testowania dynamicznego zachowania kodu. Głównym celem testowania dynamicznego jest badanie zachowania oprogramowania ze zmiennymi dynamicznymi – zmiennymi, które nie są stałe – oraz znajdowanie słabych punktów w środowisku wykonawczym oprogramowania. Aby przetestować dynamiczne zachowanie, kod musi zostać wykonany.

Testowanie jest weryfikacja i walidacja, a do ukończenia testów potrzebne są oba V. Weryfikacja odbywa się poprzez testowanie statyczne, które weryfikuje wymagania, dokumenty projektowe i kod bez ich uruchamiania. Walidacja odbywa się poprzez testowanie dynamiczne, które uruchamia kompilację i porównuje to, co aplikacja faktycznie robi, z tym, co powinna robić.

Poniższa tabela pozwala na szybkie rozróżnienie tych dwóch typów urządzeń.

WYGLĄD Testowanie statyczne (weryfikacja) Testowanie dynamiczne (walidacja)
Code wykonany Nie Tak
Typowe działania Revwidoki, przejścia, inspekcje, analiza statyczna Wykonywanie przypadków testowych na wszystkich poziomach testów
Pytanie odpowiedziało Czy tworzymy produkt prawidłowo? Czy tworzymy właściwy produkt?
Znaleziono usterki Niejednoznaczne wymagania, naruszenia standardów kodowania, martwy kod Nieprawidłowe dane wyjściowe, wycieki pamięci, błędy synchronizacji, błędy integracji
Rozpoczyna Gdy tylko artefakt istnieje Po utworzeniu pliku wykonywalnego
Względny koszt naprawy Niższe, ponieważ wady są wykrywane wcześniej Wyżej, ponieważ wady ujawniają się później

Przykład testu dynamicznego

Krótki przykład pokazuje, jak testowanie dynamiczne wygląda w praktyce.

Załóżmy, że testowana jest strona logowania. Zawiera ona dwa pola: nazwę użytkownika i hasło, przy czym nazwa użytkownika jest ograniczona do znaków alfanumerycznych.

Gdy użytkownik wprowadzi nazwę użytkownika jako „Guru99”, system akceptuje. Po wpisaniu przez użytkownika „Guru99@123”, aplikacja zgłasza komunikat o błędzie. Ten wynik wskazuje, że kod działa dynamicznie, zależnie od danych wprowadzanych przez użytkownika.

Testowanie dynamiczne oznacza zatem pracę na rzeczywistym systemie, dostarczanie danych wejściowych i porównywanie rzeczywistego zachowania aplikacji z zachowaniem oczekiwanym — innymi słowy, pracę z systemem z zamiarem znalezienia błędów.

Testowanie dynamiczne jest zatem procesem walidacji aplikacji programowej tak, jak zrobiłby to użytkownik końcowy w różnych środowiskach, w celu zbudowania odpowiedniego oprogramowania.

Do czego służą testy dynamiczne?

Głównym celem testów dynamicznych jest zapewnienie prawidłowego działania oprogramowania w trakcie i po instalacji, dostarczając stabilną aplikację bez poważnych wad. Żadne oprogramowanie nie jest całkowicie wolne od błędów, a testy mogą wykazać obecność defektów, ale nigdy ich brak.

Testy dynamiczne zapewniają również spójność całego oprogramowania, co pokazuje ten przykład.

W aplikacji bankowej znajduje się kilka ekranów, takich jak Moje konta, Przelewy środków i Bill Zapłać. Wszystkie zawierają pole kwoty.

Załóżmy, że w polu Moje konta wyświetlana jest kwota 25 000, w polu Przelew środków wyświetlana jest kwota 25 000 USD, a w polu Przelew środków Bill Ekran płatności wyświetla 25 000 dolarów. Kwota jest ta sama, ale sposób jej wyświetlania jest inny, co powoduje niespójność oprogramowania.

Spójność nie ogranicza się do funkcjonalności. Obejmuje również standardy takie jak wydajność, użyteczność i kompatybilność, dlatego dynamiczne testowanie jest tak ważne.

Rodzaje testów dynamicznych

Testowanie dynamiczne dzieli się na dwie kategorie.

  • Biały Box Testy
  • Czarny Box Testy

Poniższy diagram ilustruje dwie kategorie w zestawieniu z poziomami testowania, które są im podległe.

Testowanie dynamiczne podzielone na testy białej i czarnej skrzynki z poziomami funkcjonalnymi i niefunkcjonalnymi

Poniżej opisano każdy typ i jego przeznaczenie.

Biały Box Testy — metoda testowania oprogramowania, w której wewnętrzna struktura i projekt są znane testerowi. Jej głównym celem jest sprawdzenie działania systemu na podstawie kodu. Jest ona wykonywana głównie przez programistów lub testerów typu „white box” posiadających wiedzę programistyczną.

Czarny Box Testy — metoda testowania, w której wewnętrzna struktura, kod i projekt NIE są znane testerowi. Jej głównym celem jest weryfikacja funkcjonalności testowanego systemu. Ten typ testowania wymaga wykonania pełnego zestawu testów, jest wykonywany głównie przez testerów i nie wymaga znajomości programowania.

Testowanie metodą czarnej skrzynki dzieli się z kolei na dwa typy.

  • Testy funkcjonalne
  • Testy niefunkcjonalne

Testy funkcjonalne

Testy funkcjonalności przeprowadza się w celu weryfikacji, czy wszystkie opracowane funkcje są zgodne ze specyfikacją funkcjonalną. Przeprowadza się ją poprzez wykonanie testu funkcjonalnego. przypadki testowe Napisany przez zespół ds. zapewnienia jakości. Na tym etapie system jest testowany poprzez dostarczanie danych wejściowych, weryfikację danych wyjściowych i porównanie rzeczywistych wyników z oczekiwanymi.

Istnieją różne poziomy testowania funkcjonalnego. Najważniejsze z nich to cztery przedstawione poniżej.

  • Testów jednostkowych — jednostka to mały, testowalny fragment kodu. Testowanie jednostkowe przeprowadzane jest na pojedynczej jednostce oprogramowania przez programistów.
  • Testy integracyjne — wykonywane po testach jednostkowych, poprzez łączenie poszczególnych testowalnych jednostek. Wykonywane jest przez programistów lub testerów.
  • Testowanie systemu — przeprowadzane w celu zapewnienia, że ​​system działa zgodnie z wymaganiami. Zazwyczaj przeprowadzane jest przez testerów, gdy cały system jest gotowy, po udostępnieniu kompilacji zespołowi ds. zapewnienia jakości.
  • Testy akceptacyjne — przeprowadzane w celu weryfikacji, czy system spełnia wymagania biznesowe i jest gotowy do użycia lub wdrożenia. Zazwyczaj przeprowadzają je użytkownicy końcowi.

Testy niefunkcjonalne

Testy niefunkcjonalne To technika testowania, która nie koncentruje się na aspektach funkcjonalnych, a zamiast tego koncentruje się na niefunkcjonalnych atrybutach systemu, takich jak wycieki pamięci, wydajność czy odporność. Testowanie niefunkcjonalne jest przeprowadzane na wszystkich poziomach testowania.

Istnieje wiele technik testowania niefunkcjonalnego. Pięć najważniejszych z nich przedstawiono poniżej.

  • Test wydajności — sprawdza, czy czas reakcji systemu jest normalny, zgodnie z wymaganiami, przy oczekiwanym obciążeniu sieci.
  • Testowanie odzyskiwania — sprawdza, jak dobrze system odzyskuje sprawność po awariach i usterkach sprzętu.
  • Testowanie kompatybilności — weryfikuje zachowanie systemu w różnych środowiskach.
  • Testowanie bezpieczeństwa — weryfikuje solidność aplikacji, zapewniając, że dostęp do systemu mają wyłącznie autoryzowani użytkownicy i role.
  • Test użyteczności — weryfikuje użyteczność systemu przez użytkowników końcowych i poziom ich komfortu w jego użytkowaniu.

Techniki testowania dynamicznego

Mając już wybrane typy, pojawia się kolejne pytanie: jak właściwie przebiega dynamiczny cykl testowy?

Techniki testowania dynamicznego w STLC Składa się z zadań takich jak analiza wymagań dla testów, planowanie testów, projektowanie i implementacja przypadków testowych, konfiguracja środowiska testowego, wykonanie przypadków testowych, zgłaszanie błędów i wreszcie zamknięcie testów. Każde zadanie w testowaniu dynamicznym zależy od ukończenia poprzedniego zadania w procesie testowania.

W ramach STLC, rzeczywisty proces testowania dynamicznego rozpoczyna się od zaprojektowania przypadku testowego. Poniższy diagram przedstawia sekwencję czynności, z których każda jest opisana po niej.

Dynamiczny przepływ procesu testowania od projektu testu, przez wykonanie, aż po zgłaszanie błędów

Przed rozpoczęciem procesu konieczne jest uzgodnienie strategii, która będzie stosowana w przypadku testów dynamicznych.

Strategia testowania powinna koncentrować się głównie na dostępnych zasobach i ramach czasowych. Na podstawie tych dwóch czynników należy udokumentować cel testowania, zakres testowania, fazy lub cykle testowania, rodzaj środowiska, założenia lub wyzwania, z którymi można się spotkać, oraz ryzyka.

Po zdefiniowaniu strategii i jej zaakceptowaniu przez kierownictwo rozpoczyna się właściwy proces projektowania przypadków testowych.

Projektowanie i wdrażanie testów

Na tym etapie zespół identyfikuje następujące elementy.

  • Funkcje do przetestowania
  • Warunki testowe wyprowadzone z tych cech
  • Elementy pokrycia uzyskane z warunków testowych
  • Przypadki testowe wyprowadzone z elementów pokrycia

Czarna skrzynka techniki projektowania testów takie jak podział równoważnościowy, analiza wartości brzegowych, testowanie tabeli decyzyjnej oraz testowanie przejścia stanu to elementy, które zmieniają warunki testowe w konkretny zestaw możliwych do wykonania przypadków.

Konfiguracja środowiska testowego

Środowisko testowe Powinno być zawsze podobne do środowiska produkcyjnego. Na tym etapie kompilacja jest instalowana, a maszyny testowe są zarządzane i konfigurowane.

Wykonanie testu

W tej fazie przypadki testowe są faktycznie wykonywane ręcznie lub za pośrednictwem automatyzacja, a rzeczywiste wyniki są rejestrowane w zestawieniu z oczekiwanymi wynikami.

Przechwycono raport o błędzie

Na podstawie wykonania, jeśli oczekiwane i rzeczywiste wyniki nie są takie same, przypadek testowy należy oznaczyć jako niepowodzenie i zarejestrować błąd w systemie. zarządzanie defektami proces.

Zalety testów dynamicznych

  • Testowanie dynamiczne ujawnia defekty, które są uważane za zbyt trudne lub skomplikowane do wykrycia i których analiza statyczna w ogóle nie jest w stanie wykryć.
  • Oprogramowanie jest wykonywane kompleksowo, co podnosi jakość zarówno produktu, jak i projektu.
  • Testowanie dynamiczne jest podstawową metodą wykrywania zagrożeń bezpieczeństwa w działającym systemie.
  • Błędy występujące jedynie w czasie wykonywania, takie jak wycieki pamięci, problemy z synchronizacją i błędy integracji, pojawiają się tylko tutaj i nigdzie indziej.

Wady testów dynamicznych

  • Testowanie dynamiczne jest czasochłonne, ponieważ wykonanie aplikacji lub kodu wymaga dużej ilości zasobów.
  • Podnosi to koszty projektu, ponieważ nie rozpoczyna się odpowiednio wcześnie w cyklu życia oprogramowania, a problemy rozwiązywane na późniejszych etapach są droższe w naprawie.
  • Warunkiem koniecznym jest środowisko przypominające środowisko produkcyjne oraz realistyczne dane testowe. Ich stworzenie i utrzymanie wymaga wysiłku.

FAQ

Programiści odpowiadają za stronę białej skrzynki, przeprowadzając kontrole jednostkowe i komponentowe. Testerzy QA odpowiadają za stronę czarnej skrzynki, począwszy od testów systemowych. Użytkownicy końcowi zamykają cykl testami akceptacyjnymi.

Modele odczytują wymagania i istniejące przypadki, a następnie proponują wartości graniczne, nieprawidłowe dane wejściowe i sekwencje stanów, które zazwyczaj pomija ludzki backlog. Tester nadal potwierdza każdy oczekiwany wynik przed wykonaniem.

Tak. Rusztowanie asercji, obiekty stron i konfiguracja sprzętu to powtarzalny kod, z którym asystent radzi sobie dobrze. Decyzja o tym, co stanowi prawidłowe zachowanie, pozostaje kwestią ludzkiego osądu, opartego na wymaganiach.

Ramy jednostek, takie jak JUnit, TestNG i pytest, a także narzędzia do uruchamiania interfejsu użytkownika i interfejsu API, takie jak Selenium, Cypress oraz Postman. Załaduj narzędzia takie jak JMeter zakryj niefunkcjonalną stronę automatyzacja.

Praca w trybie białej skrzynki raportuje oświadczenia, rozgałęzienia i pokrycie ścieżki z przebiegów zinstrumentowanych. Praca w trybie czarnej skrzynki raportuje wymagania i pokrycie warunków testowych. Żadna z tych liczb sama w sobie nie dowodzi, że kompilacja została odpowiednio przetestowana.

Nie. Testowanie dynamiczne opisuje wykonywanie kodu, niezależnie od tego, kto lub co nim steruje. Skrypt podręcznik Zarówno uruchomienie, jak i zautomatyzowany zestaw narzędzi regresyjnych są testami dynamicznymi.

Tak. Dynamiczne testowanie bezpieczeństwa aplikacji bada działającą aplikację z zewnątrz, dokładnie tak, jak czarna skrzynka testy bezpieczeństwa tak, i raportuje luki, które ujawniają się dopiero w czasie wykonywania.

To kręgosłup jednego. Jednostki i zestawy API są bramą dla każdego zatwierdzenia, podczas gdy dłuższe regresja a testy wydajnościowe są wykonywane co noc w oparciu o wdrożoną kompilację.

Podsumuj ten post następująco: