Praktyczne przykłady wykorzystania ChatGPT w testowaniu. Część 1

Praktyczne przykłady wykorzystania ChatGPT w testowaniu. Część 1
Wykorzystanie AI może usprawnić wiele etapów procesu testowania. W jaki sposób? Część pierwsza przykładów.
testerzy+

Zidentyfikowaliśmy obszary, w których ChatGPT może dostarczyć wsparcie, wraz z opisem konkretnych funkcjonalności i praktycznymi przykładami zastosowań dla różnych etapów procesu.

Analiza i interpretacja wymagań

Jak AI może pomóc?
  1. AI pomaga zrozumieć i wyciągnąć kluczowe informacje z dokumentacji projektowej.
  2. Wskazuje, które wymagania biznesowe można przetestować.
  3. Wykrywa niejasności i sprzeczności w wymaganiach.
Jak współpracować z AI?
  • nakreśl kontekst i przedstaw AI zwięzły opis projektu, jego celów oraz obszarów, na których chcesz się skupić podczas testowania
Przykładowe zapytanie:

"Analizuję wymagania dla systemu bankowości internetowej. Najważniejsze dla mnie są funkcje przelewów i zarządzania kontami. Czy możesz zidentyfikować kluczowe elementy, które wymagają przetestowania?". 

Przykładowa odpowiedź GPT:

Oczywiście, mogę pomóc zidentyfikować kluczowe elementy, które wymagają przetestowania w systemie bankowości internetowej, ze szczególnym uwzględnieniem funkcji przelewów i zarządzania kontami. Oto one:

Funkcje przelewów

  1. Tworzenie przelewu:
    • Możliwość utworzenia przelewu krajowego i międzynarodowego.
    • Obsługa przelewów natychmiastowych, jednorazowych oraz zleceń stałych.
    • Weryfikacja danych odbiorcy (numer konta, nazwa odbiorcy).
    • Weryfikacja dostępności środków na koncie.
    • Uwzględnienie limitów dziennych i miesięcznych.
  2. Edycja i anulowanie przelewów:
    • Możliwość edytowania przelewów zaplanowanych.
    • Opcje anulowania przelewu przed realizacją.
  3. Historia przelewów:
    • Wyświetlanie historii wykonanych przelewów.
    • Filtracja i sortowanie przelewów według daty, kwoty, odbiorcy itp.
    • Pobieranie potwierdzeń przelewów w formacie PDF.
  4. Powiadomienia:
    • Powiadomienia SMS i e-mail o wykonanych przelewach.
    • Powiadomienia o nieudanych próbach przelewów.
  5. Bezpieczeństwo:
    • Uwierzytelnianie dwuskładnikowe (2FA) przy wykonywaniu przelewów.
    • Zabezpieczenia przed atakami phishingowymi i malware.
    • Szyfrowanie danych w trakcie przesyłania.

Zarządzanie kontami

  1. Wyświetlanie stanu konta:
    • Aktualny stan konta i dostępne środki.
    • Historia transakcji z możliwością sortowania i filtrowania.
  2. Tworzenie i zarządzanie subkontami:
    • Możliwość otwierania nowych rachunków (oszczędnościowych, walutowych itp.).
    • Przenoszenie środków pomiędzy własnymi kontami.
  3. Personalizacja:
    • Nadawanie nazw kontom.
    • Ustawianie domyślnego konta do przelewów.
  4. Wyciągi bankowe:
    • Generowanie wyciągów miesięcznych w formacie PDF.
    • Pobieranie wyciągów za określony okres.
  5. Zmiana danych osobowych:
    • Aktualizacja danych kontaktowych (adres, telefon, e-mail).
    • Zmiana ustawień dotyczących powiadomień.
  6. Zarządzanie kartami płatniczymi:
    • Podgląd aktywnych kart płatniczych.
    • Aktywacja, blokowanie i zamawianie nowych kart.
    • Ustawianie limitów transakcji kartami.

Testy funkcjonalne i niefunkcjonalne

Oprócz wymienionych funkcji, ważne jest przeprowadzenie testów funkcjonalnych i niefunkcjonalnych, takich jak:

  1. Testy wydajnościowe:
    • Obciążeniowe, aby sprawdzić, jak system działa pod dużym obciążeniem.
    • Stresowe, aby zidentyfikować punkt, w którym system zaczyna zawodzić.
  2. Testy użyteczności:
    • Ocena intuicyjności interfejsu użytkownika.
    • Badania user experience (UX) z udziałem rzeczywistych użytkowników.
  3. Testy bezpieczeństwa:
    • Penetracyjne, aby wykryć potencjalne luki w zabezpieczeniach.
    • Audyty zgodności z regulacjami prawnymi i standardami branżowymi (np. RODO, PCI DSS).
  4. Testy integracyjne:
    • Sprawdzenie integracji z innymi systemami bankowymi i zewnętrznymi usługami (np. systemy płatności).

Powyższe elementy stanowią podstawę do przeprowadzenia kompleksowej analizy i testowania systemu bankowości internetowej, co pozwoli na zapewnienie jego niezawodności, bezpieczeństwa i satysfakcji użytkowników.

Komentarz do odpowiedzi GPT:

Można odnieść wrażenie, że AI ślizga się po temacie. Z jednej strony zadaliśmy dość precyzyjne pytanie, ale z drugiej strony odpowiedź na nie to minimum 500 stron instrukcji testerskiej. Można uznać, że odpowiedź jest dobrym wstępniakiem do dalszych zapytań. 

Inne przykłady zapytań do AI:
  • "Przejrzyj załączoną dokumentację projektową i wskaż najważniejsze funkcjonalności do przetestowania. Zwróć uwagę na wszelkie szczególne wymagania lub ograniczenia."
  • "Mam plik PDF z wymaganiami dla naszej aplikacji e-commerce. Proszę o listę głównych funkcji do przetestowania oraz wszelkich specjalnych kryteriów dotyczących bezpieczeństwa lub wydajności."

Formułowanie strategii testowej

Jak AI może pomóc?
  1. Rekomenduje najlepsze podejścia do testowania, dopasowane do projektu.
  2. Doradza w wyborze odpowiednich typów testów (np. jednostkowe, integracyjne).
  3. Pomaga zaplanować testy oparte na analizie ryzyka.
Jak współpracować z AI:
  • przedstaw AI rodzaj oprogramowania, jego przeznaczenie oraz wszelkie szczególne kwestie, które mogą wpłynąć na strategię testów (np. wymagania dotyczące wydajności, bezpieczeństwa, zgodności z przepisami)
Przykładowe zapytanie:

"Tworzymy grę online dla dużej liczby użytkowników. Jak zaplanować testy wydajnościowe, aby upewnić się, że gra działa płynnie pod dużym obciążeniem?".

Przykładowa odpowiedź GPT:

Aby zapewnić płynne działanie gry online dla dużej liczby użytkowników, ważne jest przeprowadzenie dokładnych testów wydajnościowych. Oto kroki, które należy podjąć, aby zaplanować i wykonać takie testy:

  1. Zdefiniowanie celów i wymagań
    • Określenie liczby użytkowników: Ustal maksymalną liczbę jednoczesnych użytkowników, jaką gra ma obsługiwać.
    • Wymagania wydajnościowe: Zdefiniuj, jakie są akceptowalne czasy odpowiedzi dla różnych operacji (np. logowanie, ładowanie poziomów, interakcje w grze).
    • Zidentyfikowanie kluczowych funkcji: Określ, które funkcje gry są najważniejsze i najbardziej obciążające.
  2. Przygotowanie środowiska testowego
    • Symulacja produkcyjnego środowiska: Upewnij się, że środowisko testowe jest jak najbliższe rzeczywistemu środowisku produkcyjnemu.
    • Konfiguracja infrastruktury: Przygotuj serwery, bazy danych i inne komponenty infrastruktury, które będą używane podczas testów.
  3. Wybór narzędzi do testowania wydajności
    • Narzędzia do generowania obciążenia: Wybierz narzędzia takie jak JMeter, Gatling, Locust lub inne, które pozwalają symulować obciążenie.
    • Monitorowanie i analiza: Użyj narzędzi do monitorowania wydajności serwerów, takich jak Grafana, Prometheus, New Relic lub inne.
  4. Tworzenie scenariuszy testowych
    • Scenariusze użytkowników: Zdefiniuj różne scenariusze użytkowników, np. nowi użytkownicy, aktywni gracze, gracze wracający do gry.
    • Różne poziomy obciążenia: Przygotuj scenariusze dla różnych poziomów obciążenia, od normalnego po ekstremalne.
  5. Wykonanie testów wstępnych
    • Testy jednostkowe i integracyjne: Przed testami obciążeniowymi upewnij się, że wszystkie komponenty aplikacji działają poprawnie.
    • Testy dymne (smoke tests): Szybkie testy, aby upewnić się, że podstawowe funkcjonalności działają pod małym obciążeniem.
  6. Przeprowadzenie testów obciążeniowych
    • Testy obciążeniowe (load testing): Symuluj rosnącą liczbę użytkowników, aby znaleźć punkty krytyczne.
    • Testy przeciążeniowe (stress testing): Przetestuj aplikację poza przewidywanymi limitami, aby zobaczyć, jak radzi sobie z ekstremalnym obciążeniem.
    • Testy trwałości (soak testing): Przetestuj aplikację pod dużym obciążeniem przez dłuższy czas, aby wykryć problemy z wydajnością w długim okresie.
  7. Analiza wyników
    • Zbieranie metryk: Zbierz dane dotyczące czasu odpowiedzi, obciążenia procesora, pamięci, przepustowości sieci, itp.
    • Identyfikacja wąskich gardeł: Zlokalizuj i zidentyfikuj wąskie gardła i problemy z wydajnością.
    • Raportowanie: Przygotuj raport z wynikami testów i rekomendacjami.
  8. Optymalizacja
    • Usprawnienie kodu: Wprowadź poprawki w kodzie aplikacji, aby zwiększyć jej wydajność.
    • Skalowanie infrastruktury: Zoptymalizuj konfigurację serwerów, dodaj więcej zasobów, jeśli to konieczne.
    • Cache'owanie: Wprowadź mechanizmy cache'owania, aby zmniejszyć obciążenie bazy danych i serwerów aplikacji.
  9. Powtórne testy
    • Weryfikacja poprawek: Po wprowadzeniu optymalizacji ponownie przeprowadź testy, aby upewnić się, że problemy zostały rozwiązane.
    • Regularne testy: Planuj regularne testy wydajnościowe, aby monitorować działanie gry po wdrożeniu nowych funkcji lub aktualizacji.
  10. Przygotowanie planu awaryjnego
    • Monitorowanie w czasie rzeczywistym: Implementuj systemy monitorowania, aby na bieżąco śledzić wydajność aplikacji po wdrożeniu.
    • Plany reagowania na awarie: Przygotuj plany na wypadek przeciążenia lub awarii, aby minimalizować wpływ na użytkowników.

Przeprowadzenie dokładnych i przemyślanych testów wydajnościowych pozwoli zidentyfikować potencjalne problemy przed wdrożeniem gry i zapewnić jej płynne działanie pod dużym obciążeniem.

Komentarz do odpowiedzi GPT:

Dobrze sformułowane pytanie daje naprawdę dobry rezultat. Podobnie jak we wcześniejszym zapytaniu mamy dobre otwarcie do tematu, ale to co pozostaje to użycie wskazanych narzędzi. Jeśli do tej pory nie mieliśmy wiedzy o testach wydajności to teraz mamy już solidne podstawy.

Inne przykłady zapytań do AI:
  • "Pracujemy nad aplikacją mobilną do monitorowania zdrowia, która musi być zarówno funkcjonalna, jak i bezpieczna. Czy możesz zaproponować strategię testów uwzględniającą te aspekty?"
  • "Nasza aplikacja webowa przetwarza dane finansowe, więc bezpieczeństwo jest priorytetem. Jakie podejście do testów bezpieczeństwa byłoby najlepsze w tym przypadku?"

Opracowywanie przypadków testowych

Jak AI może pomóc?
  1. Generuje szczegółowe scenariusze testowe na podstawie wymagań.
  2. Tworzy przypadki testowe uwzględniające konkretne dane.
  3. Oferuje szablony i formaty do dokumentowania przypadków testowych.
Jak współpracować z AI:
  • podaj konkretne wymagania lub scenariusze, które chcesz przetestować. Im bardziej precyzyjne informacje dostarczysz, tym lepsze przypadki testowe przygotuje AI.
Przykładowe zapytanie:

"Jedno z wymagań mówi, że system musi obsłużyć 10 000 jednoczesnych użytkowników. Czy możesz wygenerować przypadki testowe, aby to zweryfikować, uwzględniając zarówno standardowe, jak i ekstremalne sytuacje?"

Przykładowa odpowiedź GPT:

Aby zweryfikować, czy system jest w stanie obsłużyć 10 000 jednoczesnych użytkowników, należy stworzyć przypadki testowe, które uwzględniają zarówno standardowe, jak i ekstremalne scenariusze. Poniżej przedstawiam zestaw przypadków testowych, które mogą pomóc w ocenie wydajności systemu.

Standardowe przypadki testowe

Przypadek 1: Jednoczesne logowanie

  • Opis: 10 000 użytkowników próbuje zalogować się do systemu w tym samym czasie.
  • Oczekiwany rezultat: Wszyscy użytkownicy powinni móc się zalogować bez znaczących opóźnień.
  • Kroki:
    1. Przygotuj 10 000 kont użytkowników.
    2. Uruchom skrypt logujący wszystkich użytkowników jednocześnie.
    3. Monitoruj czas logowania i sprawdź ewentualne błędy.

Przypadek 2: Jednoczesne wykonywanie operacji CRUD

  • Opis: 10 000 użytkowników wykonuje operacje Create, Read, Update, Delete w bazie danych w tym samym czasie.
  • Oczekiwany rezultat: Wszystkie operacje powinny zostać zakończone pomyślnie i w rozsądnym czasie.
  • Kroki:
    1. Przygotuj skrypty do wykonywania operacji CRUD.
    2. Uruchom wszystkie skrypty jednocześnie.
    3. Monitoruj czas wykonania operacji i sprawdź poprawność wyników.

Przypadek 3: Jednoczesne przesyłanie plików

  • Opis: 10 000 użytkowników przesyła pliki do systemu w tym samym czasie.
  • Oczekiwany rezultat: Wszystkie pliki powinny zostać przesłane bez błędów i w rozsądnym czasie.
  • Kroki:
    1. Przygotuj pliki do przesłania dla każdego użytkownika.
    2. Uruchom skrypty przesyłające pliki jednocześnie.
    3. Monitoruj czas przesyłania i sprawdź poprawność przesłanych plików.

Ekstremalne przypadki testowe

Przypadek 4: Nagły wzrost obciążenia

  • Opis: W krótkim czasie (np. w ciągu 1 minuty) do systemu dołącza 10 000 użytkowników.
  • Oczekiwany rezultat: System powinien być w stanie obsłużyć nagły wzrost obciążenia bez awarii.
  • Kroki:
    1. Przygotuj skrypt do logowania użytkowników w krótkim czasie.
    2. Uruchom skrypt i monitoruj wydajność systemu.

Przypadek 5: Długotrwałe obciążenie

  • Opis: 10 000 użytkowników korzysta z systemu przez dłuższy czas (np. 8 godzin).
  • Oczekiwany rezultat: System powinien utrzymać stabilność i wydajność przez cały czas trwania testu.
  • Kroki:
    1. Przygotuj skrypty symulujące długotrwałe korzystanie z systemu.
    2. Uruchom skrypty i monitoruj wydajność systemu przez 8 godzin.

Przypadek 6: Jednoczesne wykonywanie różnych operacji

  • Opis: 10 000 użytkowników wykonuje różne operacje (logowanie, CRUD, przesyłanie plików) w tym samym czasie.
  • Oczekiwany rezultat: System powinien obsłużyć różnorodne operacje bez znaczących opóźnień i błędów.
  • Kroki:
    1. Przygotuj skrypty do logowania, wykonywania operacji CRUD i przesyłania plików.
    2. Uruchom skrypty jednocześnie i monitoruj wydajność systemu.

Narzędzia do testowania wydajności

Aby przeprowadzić powyższe testy, można użyć następujących narzędzi:

  • JMeter: Do testowania wydajności web aplikacji.
  • Locust: Do obciążeniowych testów systemów rozproszonych.
  • Gatling: Do wysokowydajnych testów aplikacji.

Każde z tych narzędzi pozwoli na symulację dużej liczby jednoczesnych użytkowników i monitorowanie wydajności systemu.

Monitorowanie i analiza

Podczas testów należy monitorować:

  • Zużycie CPU i pamięci.
  • Czas odpowiedzi na zapytania.
  • Liczbę błędów i niepowodzeń.
  • Stabilność i dostępność systemu.

Analiza wyników testów pozwoli na zidentyfikowanie potencjalnych wąskich gardeł i obszarów wymagających optymalizacji.

Komentarz do odpowiedzi GPT:

Solidna odpowiedź. Praktycznie gotowe rozwiązania do implementacji, przykłady narzędzi oraz podpowiedzi na co warto zwrócić uwagę. Mid tester po takiej informacji powinien już móc startować z testami. 

Inne przykłady zapytań do AI:
  • "Na podstawie analizy wymagań stwórz przypadki testowe, które sprawdzą zarówno poprawne działanie systemu (warunki pozytywne), jak i jego reakcję na nieprawidłowe dane (warunki negatywne) oraz sytuacje graniczne (warunki brzegowe)."
  • "Funkcja logowania użytkownika jest kluczowa. Przygotuj przypadki testowe obejmujące udane logowanie, próby logowania z błędnymi danymi, a także przypadki takie jak puste pola logowania czy próby włamania (np. atak SQL injection)."

Generowanie danych testowych

Jak AI może pomóc?
  1. Tworzy różnorodne dane testowe, symulujące różne sytuacje.
  2. Pomaga chronić dane wrażliwe.
  3. Przygotowuje dane do testowania wartości granicznych i podziału na klasy równoważności.
Jak współpracować z AI:
  • sprecyzuj swoje potrzeby i określ dokładnie, jakiego rodzaju dane są potrzebne do testów oraz jakie scenariusze powinny być uwzględnione. Podaj przykłady, aby AI lepiej zrozumiało Twoje oczekiwania.
Przykładowe zapytanie:

"Potrzebujemy danych testowych do formularza rejestracji użytkowników. Przygotuj przykłady danych poprawnych, niepoprawnych (np. błędny format adresu e-mail) oraz wartości granicznych (np. maksymalna długość hasła)."

Przykładowa odpowiedź GPT:

Oto przykłady danych testowych dla formularza rejestracji użytkowników:

Pola formularza rejestracji:

  1. Imię
  2. Nazwisko
  3. Adres e-mail
  4. Hasło
  5. Numer telefonu
  6. Data urodzenia

Poprawne dane:

  1. Imię: Jan
  2. Nazwisko: Kowalski
  3. Adres e-mail: jan.kowalski@example.com
  4. Hasło: Haslo123!
  5. Numer telefonu: +48123123123
  6. Data urodzenia: 1990-01-01

Niepoprawne dane:

  1. Imię: J@an (zawiera niedozwolone znaki)
  2. Nazwisko: Kowalski123 (zawiera cyfry)
  3. Adres e-mail: jan.kowalski@com (brak domeny najwyższego poziomu)
  4. Hasło: haslo (brak wielkich liter, cyfr i znaków specjalnych)
  5. Numer telefonu: 123-456-789 (niepoprawny format)
  6. Data urodzenia: 2025-01-01 (data w przyszłości)

Wartości graniczne:

Imię:

  • Minimalna długość: 1 znak
    • Poprawne: A
    • Niepoprawne: (puste pole)
  • Maksymalna długość: 50 znaków
    • Poprawne: Aleksandrowicz-Kowalski-Zygmuntowicz-Karol-Władysław-Jan
    • Niepoprawne: Aleksandrowicz-Kowalski-Zygmuntowicz-Karol-Władysław-Janek

Nazwisko:

  • Minimalna długość: 1 znak
    • Poprawne: B
    • Niepoprawne: (puste pole)
  • Maksymalna długość: 50 znaków
    • Poprawne: Nowak-Kowalski-Zygmuntowicz-Karol-Władysław-Janek
    • Niepoprawne: Nowak-Kowalski-Zygmuntowicz-Karol-Władysław-Janek-Janek

Adres e-mail:

  • Minimalna długość: 5 znaków
    • Poprawne: a@b.c
    • Niepoprawne: a@b
  • Maksymalna długość: 254 znaki
    • Poprawne: bardzo-dlugi-adres-email12345678901234567890@example.com
    • Niepoprawne: bardzo-dlugi-adres-email12345678901234567890@example12345678901234567890.com

Hasło:

  • Minimalna długość: 8 znaków
    • Poprawne: Haslo123
    • Niepoprawne: Haslo1
  • Maksymalna długość: 128 znaków
    • Poprawne: BardzoDlugieHaslo1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234!
    • Niepoprawne: BardzoDlugieHaslo1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234!@

Numer telefonu:

  • Minimalna długość: 9 znaków
    • Poprawne: 123456789
    • Niepoprawne: 12345678
  • Maksymalna długość: 15 znaków
    • Poprawne: +48123456789012
    • Niepoprawne: +4812345678901234

Data urodzenia:

  • Minimalna data: 1900-01-01
    • Poprawne: 1900-01-01
    • Niepoprawne: 1899-12-31
  • Maksymalna data: dzisiejsza data
    • Poprawne: data dzisiejsza (np. 2024-06-13)
    • Niepoprawne: data jutrzejsza (np. 2024-06-14)

Te przykłady mogą pomóc w testowaniu poprawności i odporności formularza rejestracji użytkowników na różnego rodzaju dane wejściowe.

Komentarz do odpowiedzi GPT:

Odpowiedź częściowo niepoprawna. AI nie potrafi w liczenie i zdarza jej się źle wygenerować dane dla wartości brzegowych.  Warto ją w tym obszarze kontrolować. 

Inne przykłady zapytań do AI:
  • "Na podstawie przygotowanych przypadków testowych, stwórz zbiory danych, które pozwolą nam przetestować zarówno typowe, jak i nietypowe sytuacje."
  • "Proces realizacji zamówienia to kluczowy element naszej aplikacji. Wygeneruj dane testowe obejmujące różne numery kart kredytowych (poprawne i niepoprawne), różne ilości produktów w koszyku oraz różnorodne adresy dostawy."

Planowanie wykonania testów

Jak AI może pomóc?
  1. Proponuje harmonogram testów, uwzględniając terminy projektu.
  2. Podpowiada, jakie narzędzia do automatyzacji testów mogą być przydatne.
  3. Pomaga określić priorytety testów na podstawie ich ryzyka i wpływu.
Jak współpracować z AI:
  • dostarcz informacji o projekcie, np. podaj harmonogram projektu, kluczowe funkcjonalności, które wymagają szczególnej uwagi, oraz historię wcześniejszych testów (jeśli jest dostępna).
Przykładowe zapytanie:

"Nasz projekt zbliża się do końca, a kluczowe funkcje, takie jak przetwarzanie płatności, muszą być dokładnie przetestowane. Jak zaplanować wykonanie testów, aby te funkcje miały najwyższy priorytet?"

Przykładowa odpowiedź GPT:

Planowanie wykonania testów dla kluczowych funkcji, takich jak przetwarzanie płatności, wymaga odpowiedniej strategii, aby upewnić się, że te funkcje są dokładnie przetestowane i działają bezbłędnie przed zakończeniem projektu. Oto kroki, które można podjąć, aby zorganizować ten proces:

  1. Identyfikacja kluczowych funkcji
    • Zidentyfikuj wszystkie kluczowe funkcje związane z przetwarzaniem płatności, takie jak autoryzacja transakcji, przetwarzanie zwrotów, zarządzanie subskrypcjami itp.
  2. Priorytetyzacja testów
    • Przypisz najwyższy priorytet testom związanym z przetwarzaniem płatności.
    • Ustal priorytety na podstawie ryzyka biznesowego, częstotliwości użycia funkcji oraz potencjalnych konsekwencji awarii.
  3. Tworzenie planu testów
    • Opracuj szczegółowy plan testów, który obejmuje zakres testowania, harmonogram, zasoby i kryteria zakończenia.
    • Upewnij się, że plan zawiera zarówno testy funkcjonalne, jak i niefunkcjonalne (np. testy wydajnościowe, bezpieczeństwa).
  4. Tworzenie przypadków testowych
    • Opracuj przypadki testowe dla każdej funkcji przetwarzania płatności. Każdy przypadek testowy powinien zawierać:
      • Opis testowanego scenariusza
      • Krok po kroku instrukcje wykonania testu
      • Oczekiwane wyniki
    • Uwzględnij testy pozytywne (scenariusze prawidłowe) oraz testy negatywne (scenariusze błędne).
  5. Automatyzacja testów
    • Jeśli to możliwe, zautomatyzuj testy funkcji przetwarzania płatności, aby zapewnić powtarzalność i dokładność.
    • Wykorzystaj narzędzia do automatyzacji testów, takie jak Selenium, JUnit, czy narzędzia specyficzne dla testowania płatności.
  6. Wykonanie testów w środowisku testowym
    • Przeprowadź testy w bezpiecznym środowisku testowym, które jest jak najbardziej zbliżone do produkcyjnego.
    • Upewnij się, że dane używane do testów są realistyczne, ale nie zawierają informacji poufnych.
  7. Monitorowanie i dokumentowanie wyników
    • Śledź wszystkie wykonane testy i dokumentuj wyniki.
    • Zgłaszaj i kategoryzuj wszelkie znalezione defekty.
  8. Retest i regresja
    • Po naprawieniu błędów wykonaj ponownie testy, aby upewnić się, że problemy zostały rozwiązane.
    • Wykonaj testy regresji, aby sprawdzić, czy wprowadzone zmiany nie wpłynęły na inne funkcje.
  9. Ostateczne zatwierdzenie
    • Po zakończeniu wszystkich testów, przygotuj raport końcowy, który podsumowuje wyniki testów i ocenę ryzyka.
    • Przeprowadź przegląd z zespołem oraz interesariuszami w celu zatwierdzenia wyników.
  10. Planowanie wsparcia po wdrożeniu
    • Ustal plan wsparcia po wdrożeniu, aby szybko reagować na ewentualne problemy w środowisku produkcyjnym.
    • Przygotuj zasoby i narzędzia do monitorowania wydajności i dostępności systemu po wdrożeniu.

Przestrzeganie tych kroków pomoże zapewnić, że funkcje przetwarzania płatności będą dokładnie przetestowane i gotowe do działania przed zakończeniem projektu.

Komentarz do odpowiedzi GPT:

Odpowiedź inna niż oczekiwana. Pytający wie jaka funkcja jest najważniejsza, a chciałby wiedzieć w jaki sposób może zapewnić, że będzie to dobrze przetestowane. Odpowiedź AI tylko częściowo do tego nawiązuje. 

Inne przykłady zapytań do AI:
  • "Przeanalizuj raporty błędów z naszych ostatnich trzech projektów, które dotyczyły usług internetowych. Zidentyfikuj typowe problemy i przewiduj potencjalne obszary wysokiego ryzyka w naszym nowym projekcie REST API, szczególnie w zakresie walidacji danych i obsługi błędów."
  • "Pomóż mi ustalić optymalną kolejność wykonywania przypadków testowych dla naszej aplikacji mobilnej. Priorytetem są kluczowe funkcje, takie jak uruchomienie aplikacji, nawigacja i logowanie użytkowników, zwłaszcza te, które były ostatnio aktualizowane."
  • "Na podstawie ostatnich zmian w kodzie, historii błędów i innych dostępnych danych, wskaż obszary w oprogramowaniu, które mogą wymagać szczególnej uwagi podczas testów."

Analiza i raportowanie defektów

Jak AI może pomóc?
  1. Wspiera klasyfikację i ustalanie priorytetów znalezionych błędów.
  2. Sugeruje możliwe przyczyny defektów.
  3. Tworzy podsumowania błędów dla osób zaangażowanych w projekt.
Jak współpracować z AI:
  • dostarcz szczegółowe informacje, podaj konkretne rodzaje defektów, które napotkałeś, lub opisz obszary, w których defekty występują najczęściej. Im więcej szczegółów, tym lepsza będzie analiza AI.
Przykładowe zapytanie:

"Mamy problem z częstymi awariami aplikacji podczas dużych obciążeń. Czy możesz pomóc nam zidentyfikować potencjalne przyczyny tych awarii?"

Przykładowa odpowiedź GPT:

Aby zidentyfikować potencjalne przyczyny częstych awarii aplikacji podczas dużych obciążeń, warto rozważyć kilka aspektów i przeprowadzić analizę na kilku poziomach. Oto kroki, które można podjąć:

  1. Analiza logów
    Przeglądanie logów aplikacji, serwera, bazy danych i systemu operacyjnego może dostarczyć cennych informacji o przyczynach awarii. W szczególności zwróć uwagę na:
    • Błędy i wyjątki w logach aplikacji.
    • Informacje o przeciążeniu CPU, pamięci RAM i dysków w logach systemowych.
    • Błędy w komunikacji z bazą danych.
  2. Monitorowanie zasobów
    Regularne monitorowanie zasobów serwera (CPU, pamięć RAM, I/O dysków) może ujawnić, które zasoby są przeciążane podczas szczytowego obciążenia. Narzędzia takie jak:
    • Prometheus i Grafana do monitorowania metryk.
    • New Relic lub Datadog do monitorowania wydajności aplikacji.
  3. Testy obciążeniowe
    Przeprowadzanie testów obciążeniowych pozwala na symulowanie dużych obciążeń i identyfikację problemów przed ich wystąpieniem w środowisku produkcyjnym. Narzędzia takie jak:
    • JMeter
    • Locust
    • Gatling
  4. Optymalizacja kodu
    Sprawdzenie, czy kod aplikacji jest zoptymalizowany pod kątem wydajności, może pomóc w redukcji zużycia zasobów. Zwróć uwagę na:
    • Algorytmy o wysokiej złożoności obliczeniowej.
    • Niekontrolowane pętle i rekurencje.
    • Zbyt duże lub źle zoptymalizowane zapytania do bazy danych.
  5. Skalowanie poziome i pionowe
    Rozważ, czy infrastruktura jest odpowiednio skalowana. Możliwości to:
    • Skalowanie pionowe: Dodawanie większej ilości zasobów (CPU, RAM) do istniejących serwerów.
    • Skalowanie poziome: Dodawanie kolejnych serwerów w klastrze.
  6. Zarządzanie połączeniami
    Problemy z zarządzaniem połączeniami do bazy danych lub innych usług mogą prowadzić do awarii. Sprawdź:
    • Czy używasz puli połączeń (connection pooling).
    • Limity połączeń w bazie danych.
    • Timeouty i retry logic w kodzie aplikacji.
  7. Analiza śladów (tracing)
    Narzędzia do śledzenia żądań mogą pomóc zrozumieć, gdzie dokładnie występują opóźnienia i awarie w aplikacji. Popularne narzędzia to:
    • Jaeger
    • Zipkin
  8. Profilowanie aplikacji
    Profilowanie aplikacji w czasie rzeczywistym może pomóc w identyfikacji wąskich gardeł i obszarów do optymalizacji. Narzędzia takie jak:
    • YourKit
    • VisualVM

Jeśli dostarczysz więcej szczegółów na temat aplikacji i jej środowiska, mogę spróbować bardziej precyzyjnie zidentyfikować potencjalne problemy i zaproponować rozwiązania.

Komentarz do odpowiedzi GPT:

Udzielona odpowiedź jest trochę obok zapytania. Duża część koncentruje się na metodach kontroli, a nie na szukaniu przyczyny źródłowej. Z drugiej strony GPT dostał za mało danych aby określić jakie są przyczyny. Mógłby więc bardziej wskazać jakie są typowe źródła problemów wydajności. 

Inne przykłady zapytań do AI:
  • "W naszej aplikacji e-commerce zauważyliśmy wiele błędów podczas finalizacji transakcji. Czy możesz przeanalizować te defekty i wskazać główne obszary, na których powinniśmy się skupić, aby poprawić ten proces?"
  • "Zauważyliśmy, że użytkownicy zgłaszają problemy z logowaniem. Czy możesz przeanalizować te zgłoszenia i wskazać, czy istnieje jakiś wspólny wzorzec lub przyczyna tych problemów?"

Konfiguracja środowiska testowego

Jak AI może pomóc?
  1. Doradza w konfiguracji środowiska, w którym będą przeprowadzane testy.
  2. Podpowiada, jak wykorzystać wirtualizację i konteneryzację.
  3. Rekomenduje narzędzia do monitorowania i zarządzania środowiskiem testowym.
Jak współpracować z AI:
  • opisz technologię i środowisko, podaj informacje o technologiach użytych w aplikacji, docelowym środowisku wdrożenia oraz wszelkich specyficznych wymaganiach konfiguracyjnych.
Przykładowe zapytanie:

"Nasza aplikacja korzysta z mikrousług i kontenerów Docker. Jakie są najlepsze praktyki w zakresie konfiguracji środowiska testowego w takiej architekturze?"

Przykładowa odpowiedź GPT:

Konfiguracja środowiska testowego dla aplikacji korzystających z mikrousług i kontenerów Docker wymaga uwzględnienia kilku najlepszych praktyk, aby zapewnić efektywne i wiarygodne testowanie. Oto kilka kluczowych zaleceń:

  1. Izolacja środowisk
    • Oddzielne środowiska: Upewnij się, że środowiska deweloperskie, testowe i produkcyjne są oddzielone. Dzięki temu zmiany wprowadzane w jednym środowisku nie wpływają na pozostałe.
    • Izolacja kontenerów: Każda mikrousługa powinna działać w swoim własnym kontenerze, co umożliwia łatwe zarządzanie zależnościami i konfiguracjami.
  2. Automatyzacja
    • CI/CD: Zaimplementuj potoki CI/CD (Continuous Integration/Continuous Deployment) do automatycznego budowania, testowania i wdrażania mikrousług. Narzędzia takie jak Jenkins, GitLab CI, Travis CI, czy GitHub Actions mogą pomóc w automatyzacji tych procesów.
    • Automatyzacja testów: Automatyzuj testy jednostkowe, integracyjne i e2e (end-to-end) w ramach potoków CI/CD.
  3. Testy jednostkowe i integracyjne
    • Testy jednostkowe: Skoncentruj się na testowaniu pojedynczych komponentów mikrousług. Wykorzystuj mocki do zależności.
    • Testy integracyjne: Testuj interakcje pomiędzy mikrousługami. Można to zrobić za pomocą narzędzi takich jak Docker Compose do symulowania środowiska z wieloma usługami.
  4. Środowisko testowe za pomocą Docker Compose
    • Docker Compose: Używaj Docker Compose do definiowania i uruchamiania wielokontenerowych aplikacji. Możesz zdefiniować całą architekturę mikrousług w jednym pliku YAML, co ułatwia uruchamianie całego środowiska testowego.
  5. Obserwowalność i logowanie
    • Centralne logowanie: Skonfiguruj centralne logowanie, np. za pomocą ELK Stack (Elasticsearch, Logstash, Kibana) lub Grafana Loki, aby zbierać i analizować logi ze wszystkich mikrousług.
    • Monitoring: Używaj narzędzi takich jak Prometheus i Grafana do monitorowania wydajności mikrousług i zdrowia systemu.
  6. Baza danych i zarządzanie danymi
    • Mockowanie danych: Używaj mockowanych danych w testach, aby uniezależnić się od rzeczywistych baz danych.
    • Migawki baz danych: Twórz migawki (snapshots) bazy danych, które mogą być łatwo przywrócone w środowisku testowym.
  7. Bezpieczeństwo
    • Separacja danych: Upewnij się, że dane testowe są oddzielone od danych produkcyjnych.
    • Bezpieczeństwo kontenerów: Regularnie aktualizuj obrazy kontenerów, aby zapobiegać lukom bezpieczeństwa.
  8. Testy końcowe (End-to-End)
    • Symulacja rzeczywistego ruchu: Używaj narzędzi takich jak Selenium, Cypress lub Postman do symulacji rzeczywistego ruchu użytkowników i testowania całości aplikacji.
    • Środowiska zbliżone do produkcji: Upewnij się, że środowisko testowe jest jak najbardziej zbliżone do produkcyjnego, aby testy były jak najbardziej realistyczne.
  9. Kontenery lekkie i minimalne
    • Minimalne obrazy Docker: Twórz lekkie obrazy Docker z minimalnymi zależnościami, aby zmniejszyć ryzyko wystąpienia problemów związanych z różnicami w środowisku.
  10. Testowanie w chmurze
    • Chmurowe środowiska testowe: Rozważ korzystanie z rozwiązań chmurowych do uruchamiania i testowania kontenerów, co może być szczególnie przydatne przy dużej skali mikrousług.

Implementacja tych najlepszych praktyk pomoże w skutecznym zarządzaniu środowiskiem testowym dla aplikacji opartej na mikrousługach i kontenerach Docker, co z kolei przyczyni się do wyższej jakości oprogramowania i sprawniejszego procesu deweloperskiego.

Komentarz do odpowiedzi GPT:

Udzielona odpowiedź jest dostateczna, choć mogłaby rzeczywiście pokazywać wprost dobre praktyki konfiguracji środowiska. 

Inne przykłady zapytań do AI:
  • "Konfigurujemy środowisko testowe dla aplikacji webowej opartej na Django. Na co zwrócić szczególną uwagę, zwłaszcza w kontekście konfiguracji baz danych i serwerów?"
  • "Chcemy stworzyć środowisko testowe, które będzie jak najbardziej zbliżone do produkcyjnego. Jakie narzędzia i techniki mogą nam w tym pomóc?"

Optymalizacja procesu testowego

Jak AI może pomóc?
  1. Analizuje obecny proces testowania i wskazuje obszary do poprawy.
  2. Sugeruje narzędzia AI i uczenia maszynowego, które mogą usprawnić testy.
  3. Rekomenduje metodyki ciągłego testowania i integracji.
Jak współpracować z AI:
  • przedstaw szczegółowo, jak obecnie wygląda proces testowania, jakie narzędzia są używane i w jakich obszarach chcesz wprowadzić ulepszenia.
Przykładowe zapytanie:
  • "Chcemy skrócić czas trwania testów regresji. Czy są jakieś narzędzia lub techniki, które mogą nam w tym pomóc?"
Przykładowa odpowiedź GPT:

Skracanie czasu trwania testów regresji to kluczowy element utrzymania efektywności w procesie rozwoju oprogramowania. Istnieje kilka narzędzi i technik, które mogą pomóc w osiągnięciu tego celu:

Narzędzia

  1. Testowanie równoległe (Parallel Testing)
    • Selenium Grid: Umożliwia równoległe wykonywanie testów na różnych przeglądarkach i systemach operacyjnych.
    • BrowserStack: Narzędzie chmurowe do testowania aplikacji na różnych urządzeniach i przeglądarkach.
    • JUnit (Parallel Execution): W JUnit 5 istnieje możliwość konfiguracji testów do równoległego wykonywania.
  2. Testowanie w chmurze
    • Sauce Labs: Umożliwia uruchamianie testów automatycznych na różnych przeglądarkach i urządzeniach mobilnych.
    • AWS Device Farm: Testowanie aplikacji na fizycznych urządzeniach w chmurze Amazon.
  3. CI/CD
    • Jenkins: Z dobrze skonfigurowanym potokiem Jenkins można uruchamiać testy równolegle oraz integrować z innymi narzędziami do testowania.
    • GitLab CI: GitLab CI/CD oferuje łatwą integrację i wsparcie dla równoległego uruchamiania testów.
  4. Optymalizacja testów
    • TestNG: Framework, który umożliwia równoległe wykonywanie testów, grupowanie oraz priorytetyzowanie.
    • pytest-xdist: Dodatek do pytest, który pozwala na równoległe uruchamianie testów na wielu procesorach.

Techniki

  1. Selekcja testów (Test Selection)
    • Test Impact Analysis: Technika polegająca na analizie kodu źródłowego i wybieraniu tylko tych testów, które są bezpośrednio związane ze zmianami w kodzie.
  2. Priorytetyzacja testów (Test Prioritization)
    • Ustalanie priorytetów dla testów na podstawie ich znaczenia oraz częstości występowania błędów.
  3. Testowanie równoległe
    • Konfiguracja testów do równoległego wykonywania na różnych wątkach lub maszynach.
  4. Mocking i stubbing
    • Używanie mocków i stubów do testowania komponentów w izolacji, co może przyspieszyć testy integracyjne.
  5. Testowanie na poziomie modułów
    • Koncentracja na testach jednostkowych, które są szybsze niż testy integracyjne czy systemowe.

Praktyki

  1. Continuous Integration/Continuous Deployment (CI/CD)
    • Integracja testów automatycznych w potokach CI/CD pozwala na ich regularne uruchamianie i szybkie wykrywanie błędów.
  2. Refaktoryzacja testów
    • Regularna analiza i refaktoryzacja zestawu testów w celu eliminacji zbędnych lub duplikujących się testów.
  3. Inkrementalne testowanie
    • Dodawanie testów stopniowo, zgodnie z rozwojem funkcji, co pozwala na utrzymanie zestawu testów na odpowiednim poziomie.

Stosowanie powyższych narzędzi i technik może znacznie skrócić czas trwania testów regresji i poprawić efektywność procesu testowania.

Komentarz do odpowiedzi GPT:

Odpowiedź koncentruje się jedynie na automatyzacji testów i w tym zakresie można ją uznać za wyczerpującą. Nie ma za to pokazanych alternatyw i innych metod prowadzanie testów regresji. 

Inne przykłady zapytań do AI:
  • "Nasze testy aplikacji webowej są przeprowadzane ręcznie i zajmują dużo czasu. Jak możemy usprawnić ten proces, np. poprzez wprowadzenie automatyzacji?"
  • "Szukamy sposobów na lepsze wykorzystanie danych z testów. Jak możemy analizować te dane, aby wyciągnąć wnioski i usprawnić proces testowania?"
     

To powinno Cię zainteresować