$$\rightleftharpoonup{xx}$$
$$\longleftharp{xx}$$,
$$\longrightharp{xx}$$,
Architektura systemu i podsumowanie prototypu:
Badania te przedstawiają ulepszony i elastyczny system prototypowy PreventativeTestPro, który jest przykładem proaktywnego podejścia inżynieryjnego jakości, wykorzystującego dane obserwacji i duże modele językowe (LLM) do dalszego rozwiązywania problemów ze wsparciem. System dąży do rozwiązania nowoczesnych problemów dostarczania oprogramowania poprzez automatyzację wykrywania anomalii, analizy przyczyn źródłowych oraz inteligentnego wykonywania i opracowywania przypadków testowych dla nierozwiązanego pokrycia, wykorzystując syntetyczne monitorowanie, dane obserwacji oraz integrację z GenAI. Architektura jest modułowa i składa się z trzech kluczowych komponentów: Zbieracza i Analizatora Danych Obserwacji, Warstwy Inteligencji Napędzanej GenAI oraz Silnika Orkiestracji i Wykonania Testów, zgodnie ze szczegółami przedstawionymi na Rysunku 1.

Rysunek 1: Wejście-wyjście proponowanego systemu. Dane obserwacji, wraz z wyjściem obserwatora, repozytorium testów i regułami mapowania, są dostarczane jako dane wejściowe obok stanowisk testowych BHRAMARI, które tworzą środowiska testowe oparte na AI, aby zwiększyć odporność przypadków testowych. Proponowany system generuje instrumentację anomalii, rekomendacje generowane przez AI, realizację odpowiednich przypadków testowych, dokumentację i raportowanie, a także identyfikację i tworzenie brakujących przypadków testowych. Proszę kliknąć tutaj, aby zobaczyć większą wersję tej figurki.
Rysunek 2 przedstawia architekturę sugerowanego podejścia. Rysunek ilustruje wejście, przetwarzanie i wyjście systemu. Zapewnia również kompleksowy obraz systemu, który następnie jest tłumaczony na wyjaśnienie poprawiające zrozumienie podstawowych cech.

Rysunek 2: Architektura systemowa proponowanego systemu z zbieraczem i analizatorem danych o obserwowalności, warstwą inteligencji napędzaną GenAI oraz silnikiem orkiestracji i wykonywania testów. Ten rysunek ilustruje wewnętrzną architekturę systemu PreventativeTestPro, podzieloną na trzy warstwy: Warstwa Zbieracza Obserwacji agreguje dane z wielu źródeł, w tym zdarzeń przeglądarki, logów, plików HAR (HAR), logów backendowych, metryk i śladów. Warstwa Generative AI Intelligence wykorzystuje te dane do analizy przyczyn źródłowych, priorytetyzacji anomalii oraz autonomicznego tworzenia przypadków testowych (UI, API, manual) i dokumentacji za pomocą LLM. Moduł BHARAMARI ustanawia także nowe platformy testowe. Test Orchestration and Execution Engine mapuje rozbieżności na przypadki testowe, wykonuje testy równocześnie, ocenia wyniki oraz informuje zespoły inżynieryjne, systemy zgłoszeniowe i pulpity do monitorowania i rozwiązywania rozwiązań w czasie rzeczywistym. Proszę kliknąć tutaj, aby zobaczyć większą wersję tej figurki.
Moduł Observability Data Collector and Analyzer pełni funkcję systemu sensorycznego platformy, nieustannie zbierając dane o ocenianej aplikacji na dużą skalę, w wielu aspektach. W przypadku monitorowania frontendu wdrażane są syntetyczne agenty monitorujące do monitorowania zdarzeń po stronie przeglądarki, takich jak struktury Document Object Model (DOM), działania użytkownika, takie jak kliknięcia, najechania i wejścia, a także pliki HAR rejestrujące informacje o żądaniach i odpowiedziach sieci i API. PreventativeTestPro jest również wbudowany w OBSERVER, aby zwiększyć możliwości przeglądarek. Monitorowanie backendu koncentruje się na analizie logów, w której żądane są i przetwarzane informacje o obserwowalności po stronie serwera, w tym logi aplikacji, komunikaty błędów, informacyjne i debug, logi śledzenia stosu i wyjątków, metryki wydajności takie jak czasy odpowiedzi oraz śledzenie za pomocą technologii takich jak OpenTelemetry czy New Relic. System będzie współpracował z syntetycznymi agentami, którzy symulują ruch i interakcje użytkowników, a kolektory logów kondensują przychodzące dane w czasie rzeczywistym. Zebrane dane są następnie normalizowane do formatów strukturalnych i przekazywane innym jednostkom przetwarzającym do dalszej analizy.
Istotą PreventativeTestPro jest warstwa inteligencji napędzana przez GenAI, która wykorzystuje duże modele językowe (LLM), takie jak GPT, do odczytu i analizy danych obserwowalności oraz kontekstualizacji i generowania odpowiedzi. Moduł prowadzi analizę przyczyn źródłowych: proces interpretacji logów i śladów przyczyn źródłowych w celu wyjaśnienia błędów technicznych w sposób zrozumiały, na przykład NullPointerException na konkretnej linii kodu oraz domniemaną przyczynę problemu, na przykład zmienną niezainicjalizowaną. W generowaniu przypadków testowych system wykorzystuje testy automatyczne generowane przez konwersję wzorców wyjątków lub sekwencji zdarzeń na wykonywalne skrypty testowe, np. testy Selenium lub API, ale także generuje czytelne procedury testowe, które pracownicy Kontroli Jakości mogą uruchamiać. Testy API ewoluowały poprzez transformację logów HAR i śledzenia w sekwencję żądań API z oczekiwanymi asercjami, a wszystkie generowane przypadki testowe są dodatkowo wzbogacane o efektywne platformy testowe poprzez integrację z BHRAMARI. W systemie rekomendacji sugeruje się dalsze ulepszenia, ulepszenia pokrycia testami oraz możliwości integracji CI/CD, w zależności od analizowanego zachowania systemu. Silnik AI wykorzystuje ustrukturyzowane dane obserwowalności poprzez inżynierię promptów i wzbogacanie kontekstu, aby prezentować kontekst logów z szablonami promptów, które przekazują strukturalne zapytania do LLM, a ostatecznie generuje wyniki w formie funkcjonalnej, takie jak fragmenty kodu, specyfikacje przypadków testowych oraz dokumentacja w języku naturalnym.
Moduł Test Orchestration and Execution Engine obsługuje priorytet testów, harmonogramowanie i wykonywanie, umożliwiając automatyczną walidację na podstawie szczegółów pokrycia zmian kodu, tagów oraz mapowania anomalii. Mapowanie i wybór testu polegają na powiązaniu anomalii w mapach lub wzorcach instrumentacji z znanymi przypadkami testowymi za pomocą silnika reguł mapowania, a następnie uruchamianie przypadków testowych zgodnie z ustalonym mapowaniem. Funkcje równoczesnego wykonywania testów pozwalają na jednoczesne przeprowadzanie wielu typów testów, takich jak testy funkcjonalne, wydajnościowe lub bezpieczeństwa w różnych środowiskach, oraz koordynację użycia Selenium, JMeter i ZAP jako instrumentów w potokach automatyzacji. Implementacja pętli zwrotnej dba o to, aby wyniki wykonania były rejestrowane, a w przypadku niepowodzenia testu zmiany są przekazywane systemom wsparcia, w tym Jira i Azure DevOps, aby je śledzić i rozwiązać.
Hipoteza:
H1 (Efektywność operacyjna): Zakłada się, że połączenie danych obserwowalności i inteligencji opartej na AI poprawi wskaźniki operacyjne, szczególnie skracając średni czas na rozwiązanie (H1a), średni czas analizy (H1b), średni czas wykrywania problemów produkcyjnych (H1c) oraz średni czas wdrożenia poprawek w produkcji (H1d). Te zmiany powinny ułatwić spełnienie wymagań Service Level Agreement (SLA) (H1e) poprzez przyspieszenie wykrywania, analizy i wdrażania, jednocześnie minimalizując przestoje systemu.
H2 (Skuteczność testowania): Uważa się również, że skuteczność testowania oprogramowania wzrośnie dzięki większemu zasięgowi testów (H2a), prowadzeniu przypadków testowych równolegle (H2b) oraz inteligentnemu priorytetyzowaniu testów (H2c). Rekomendacje generowane przez AI (H2d) również mają pomóc zarówno w testowaniu, jak i w procesie operacyjnym. To pomoże szybciej wykrywać błędy, przyspieszyć pętle informacji zwrotnej oraz wspierać praktyki kontroli jakości, które są zapobiegawcze i długotrwałe.
Zakres i odbiorcy:
Ten prototyp pokazuje ogólny projekt systemu, główną ideę oraz krok po kroku, jak skonfigurować i uruchomić framework PreventativeTestPro. Zawiera też szczegóły dotyczące ustawienia odpowiednich stanowisk testowych/próbek wejściowych oraz daje wskazówki, jak naprawić problemy. Treść jest przeznaczona dla inżynierów jakości oprogramowania, którzy znają już podstawy Javy i chcą nauczyć się stosować testy zapobiegawcze, aby uczynić oprogramowanie bardziej niezawodnym i efektywnym.
Konfiguracja środowiska:
Plik uzupełniający 1 zawiera krok po kroku opis i program wymagany do komunikacji z PreventativeTestPro. Obejmuje to instrukcje dotyczące instalacji niezbędnego środowiska, jak uruchomić i zatrzymać usługi narzędzia oraz jasne wyjaśnienie podstawowego zastosowania narzędzia. Aby uzyskać bardziej szczegółową dokumentację, wraz z instrukcjami obsługi zaawansowanych narzędzi, instrukcjami konfiguracji i innymi szczegółami organizacyjnymi, należy odwołać się do oficjalnych źródeł GitHub dedykowanych projektowi: konkretnej strony Wiki w lokalizacji https://github.com/sohambpatel/PreventativeTests/wiki oraz głównego README w https://github.com/sohambpatel/PreventativeTests?tab=readme-ov-file/readme.
Przykładowe dane wejściowe:
Przykładowe pliki wejściowe można znaleźć w repozytorium GitHub: https://github.com/sohambpatel/PreventativeTests/tree/main/preventativetestframework/Inputs. Framework może natychmiast uruchomić gotowe przypadki testowe i zbiory danych tych plików. Są one używane jako dane referencyjne do sprawdzania ustawień środowiska oraz uzyskania tych samych rezultatów, które opisano w tym protokole.
Przykładowe wyniki:
Repozytorium GitHub (https://github.com/sohambpatel/PreventativeTests/tree/main/preventativetestframework/SampleOutputs) zawiera konkretne próbki danych wyjściowych frameworku testów zapobiegawczych w formacie surowym. Dzięki tym plikom użytkownicy mogą bezpośrednio przeglądać układ i szczegóły generowanych raportów i metryk, co pokazuje rezultaty, jakie narzędzie osiągnęło podczas jego działania. Ten przewodnik jest istotny dla poznania pipeline'u danych oraz potwierdzenia przewidywanego zachowania ram podczas odtwarzania procesu eksperymentalnego.
Prototyp wykonawczy:
Ta sekcja zawiera szczegółowy, krok po kroku przewodnik po tym, jak korzystać z ram PreventativeTestPro. Aby pomóc użytkownikom odtworzyć przepływ pracy, każdy etap jest opisywany w kolejności. Ta sekcja przedstawia kroki wykonania w uporządkowanym formacie, aby ułatwić odtwarzanie wyników, wskazywać ważne punkty kontrolne oraz zapewniać, że ramy PreventativeTestPro mogą być konsekwentnie używane w różnych środowiskach eksperymentalnych lub operacyjnych.
W tym etapie GUI PreventativeTestPro może być użyte do wyboru najlepszego workflow testów profilaktycznych. Rysunek 3 przedstawia pięć opcji, z których każda oznacza inny etap procesu testowania: równoległe uruchamianie testów, tworzenie zestawu testów na podstawie wyników monitorowanych poprzez priorytetyzację istniejących przypadków testowych, tworzenie ręcznych przypadków testowych, tworzenie automatycznych przypadków testowych oraz znalezienie przyczyny źródłowej. Gdy użytkownik dokona wyboru, rozpoczyna się wyznaczony przepływ pracy. Następnie w późniejszych etapach można dodać dodatkowe tryby (takie jak generowanie testów sterowane przez AI lub analiza przyczyn źródłowych). Ten dobrze zorganizowany interfejs umożliwia przeprowadzanie badań profilaktycznych, które można powtarzać i rozkładać na mniejsze części.

Rysunek 3: Interfejs użytkownika 1 systemu. Na tym rysunku przedstawiony jest interfejs użytkownika PreventativeTestPro, który pozwala wybrać spośród pięciu różnych sposobów przeprowadzania testów profilaktycznych: 1. Test zapobiegawczy, wykonywanie równoległe: rozpoczęcie testowania, 2. Test zapobiegawczy, finalizacja zestawu testów na podstawie monitorowania aplikacji syntetycznych, 3. Test zapobiegawczy, generowanie ręcznych przypadków testowych z użyciem GenAI, 4. Test zapobiegawczy, generowanie automatycznych przypadków testowych z użyciem GenAI, 5. Test zapobiegawczy, Analiza przyczyn źródłowych z użyciem GenAI. Można wybrać tylko jedną opcję naraz. Modułowa konstrukcja ułatwia przeprowadzanie testów profilaktycznych i dodaje możliwość tworzenia oraz diagnostyki testów opartych na AI. Proszę kliknąć tutaj, aby zobaczyć większą wersję tej figurki.
Rysunek 4 przedstawia interfejs Parallel Execution frameworka. W tym etapie użytkownik wprowadza adres URL aplikacji, którą chce przetestować, oraz absolutną ścieżkę do pliku właściwości, który zawiera ustawienia konfiguracyjne. Po ustawieniu danych użytkownik może jednocześnie rozpocząć testy, klikając przycisk Start Testing, który również monitoruje stronę testowaną i generuje logi bezpieczeństwa, wydajności, konsoli oraz JavaScript. Można przerwać trwające wykonanie, klikając przycisk Stop Testing. Przycisk Pobierz rekomendację pozwala uzyskać informacje oparte na AI z rejestrowanych logów. Taki projekt zapewnia, że wiele kategorii testów (funkcjonalnych, wydajnościowych i bezpieczeństwa) działa jednocześnie, co ułatwia szybsze wykrywanie problemów.

Rysunek 4: Interfejs użytkownika 2 systemu. Ten rysunek przedstawia tryb Parallel Execution w ramach PreventativeTestPro. Użytkownik określa adres URL docelowej aplikacji oraz ścieżkę do pliku właściwości zawierającego szczegóły konfiguracji. Opcje obejmują Start Testing (do równoległego uruchamiania testów funkcjonalnych, bezpieczeństwa i wydajności oraz zapisywanie logów), Stop Testing (aby zatrzymać wykonywanie) oraz Get Recommendation (aby uzyskać wnioski oparte na AI z logów i metryk). Proszę kliknąć tutaj, aby zobaczyć większą wersję tej figurki.
Rysunek 5 przedstawia interfejs finalizacji testów oparty na monitoringu w ramach PreventativeTestPro. W tym kroku użytkownik ustawia ścieżkę dla pliku wyjściowego monitorowania, zapytania ścieżki JSON, aby uzyskać węzły błędów lub wyjątków, oraz ścieżkę repozytorium testów do zapisu utworzonych przypadków. Po ustawieniu danych wejściowych użytkownik może najpierw uzyskać nazwy klas i metod, które do nich pasują, a następnie posortować przypadki testowe na podstawie znalezionej klasy i metody. Ten etap priorytetyzacji pokazuje, jak wykorzystać dane monitorujące do skutecznego klasyfikowania przypadków testowych.

Rysunek 5: Interfejs użytkownika 3 systemu. Ten rysunek pokazuje, jak priorytetyzować zestaw testów w ramach PreventativeTestPro za pomocą syntetycznych wyników monitoringu. Użytkownik wpisuje ścieżkę do pliku wyjściowego monitoringu, ścieżkę JSON, aby uzyskać wyjątki/błędy, oraz ścieżkę do repozytorium testów (offline). Opcje Get Class/Method Name oraz Get Test Cases mogą być użyte do zamiany anomalii mapowania w przypadki testowe, które można uruchomić. Zapewnia to, że problemy z czasem wykonywania są uwzględniane w procesie testowania. Proszę kliknąć tutaj, aby zobaczyć większą wersję tej figurki.
Rysunek 6 przedstawia interfejs Manual Test Case Generation w PreventativeTestPro. W tym kroku użytkownik informuje program, gdzie znaleźć plik śledzenia stosu pokazujący anomalię, podając bezwzględną ścieżkę do pliku śledzenia stosu oraz ścieżkę do pliku właściwości konfiguracji. Po ustawieniu danych wejściowych można uruchomić opcję Generuj Przypadki Testowe, która zamienia anomalię w ustrukturyzowane ręczne przypadki testowe. Dzięki temu błędy wykonawcze, które wystąpiły wcześniej, są zawsze uwzględniane w procesie testowym. Framework ułatwia tworzenie przypadków testowych poprzez automatyzację procesu. To ogranicza ilość pracy manualnej, poprawia zasięg testów i zwiększa wiarygodność testów, a także zapobiega powtarzaniu się tego samego problemu. Ten krok jest bardzo ważnym łącznikiem między wykrywaniem problemów a zapewnieniem wysokiej jakości, zanim się pojawią.

Rysunek 6: interfejs użytkownika 3 systemu. Ten rysunek pokazuje interfejs generowania przypadków testowych w PreventativeTestPro. Przekształca ślady stosu anomalii w ręczne przypadki testowe w Behavior Driven Development (BDD), które można wykorzystać. Użytkownik podaje ścieżki do pliku śledzenia stosu oraz pliku właściwości, a następnie klika "Generuj przypadki testowe", aby automatycznie tworzyć przypadki odpowiadające znalezionej awarii. Dzięki temu problemy w czasie działania są zawsze zamieniane w testy regresyjne, które można powtarzać. Proszę kliknąć tutaj, aby zobaczyć większą wersję tej figurki.
Rysunek 7 przedstawia interfejs Automated Test Case Generation firmy PreventativeTestPro. W tym kroku użytkownik podaje absolutną ścieżkę do pliku JSON JSON z obserwacji oraz ścieżkę do pliku konfiguracyjnego właściwości. Po kliknięciu przycisku Generuj Automatyczne Przypadki Testowe system przetwarza dane monitorujące i tworzy przypadki testowe, które można uruchomić i pokazać te same problemy, które zaobserwowano.

Rysunek 7: Interfejs użytkownika 4 systemu. Ten rysunek pokazuje zautomatyzowany interfejs generowania przypadków testowych PreventativeTestPro, który tworzy testy uruchamiane na podstawie danych obserwowalności. Użytkownik podaje ścieżkę do pliku właściwości oraz pliku wyjściowego JSON obserwacji. Następnie klikają "Generuj zautomatyzowane przypadki testowe", aby tworzyć skrypty, które można uruchomić (w formatach Selenium i TestNG). Proszę kliknąć tutaj, aby zobaczyć większą wersję tej figurki.

Rysunek 8: Interfejs użytkownika 5 systemu. Ten rysunek przedstawia interfejs instrumentacji anomalii w PreventativeTestPro for Root Cause Analysis (RCA). Użytkownik podaje ścieżkę do pliku właściwości oraz pliku śledzenia stosu, a następnie wybiera RCA, aby rozpocząć analizę opartą na AI. Ten krok zmienia wykryte anomalie w ustrukturyzowane analizy diagnostyczne, co zapewnia, że błędy mogą być naprawiane w sposób powtarzalny i specyficzny dla problemu. Proszę kliknąć tutaj, aby zobaczyć większą wersję tej figurki.
Rozwiązywanie problemów:
Tabela 1 pokazuje najważniejsze punkty rozwiązywania problemów, które dotyczą wyłącznie kodu aplikacji. Te punkty to szybki sposób, aby przypomnieć sobie, jak naprawić problemy na poziomie kodu, które pojawiają się podczas uruchamiania frameworka PreventativeTestPro. Dokumentacja projektu zawiera więcej informacji oraz instrukcje krok po kroku dla czytelników, którzy chcą uzyskać więcej pomocy w rozwiązywaniu problemów wpływających na ogólną funkcjonalność aplikacji. Pełne źródło można uzyskać pod linkiem: https://github.com/sohambpatel/PreventativeTests/wiki/How-to-use%3F. To dodatkowe źródło zapewnia, że użytkownicy nie tylko rozwiązują problemy kodistyczne, ale także uczą się rozwiązywać funkcje diagnostyczne, co pozwala im efektywniej korzystać z frameworka.
| Zachowanie błędu | Przyczyna źródłowa | Jak to naprawić? |
| Aplikacja się nie zaczyna | Ścieżka Java nie jest ustawiona | W zmiennej środowiskowej ustaw JAVA_HOME |
| Serwer zawodzi przy uruchomieniu | Port 8080/9090 w użyciu (szczególnie podczas korzystania z Dockera) | Zaktualizuj mapowanie portów Dockera |
| Treści GenAI są zerowe | Token mógł wygasnąć | Wygeneruj token i zaktualizuj właściwości config.properties zanim poda go jako wejście |
| Instancja przeglądarki generowana przez framework nie łączy się z siecią | Albo serwer ZAP nie działa, albo dane poświadczenia ZAP są nieprawidłowe | WŁĄCZ ZAP przed uruchomieniem aplikacji, jeśli jest uruchomiony i problem nadal występuje, zaktualizuj dane poświadczenia ZAP w config.properties zanim podasz to jako wejście |
Tabela 1: Najczęściej proponowane błędy systemowe i szybkie rozwiązania. Ta tabela przedstawia typowe błędy specyficzne dla aplikacji, metody rozwiązywania problemów oraz szybkie rozwiązania, które można zastosować, aby je naprawić.