Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 13725|Odpowiedź: 1

[C++] Skrzydła – Pozwól, by testy jednostkowe były generowane inteligentnie i automatycznie

[Skopiuj link]
Opublikowano 06.08.2018 14:30:37 | | | |
Skrzydła-Spraw, by testy jednostkowe były inteligentne i w pełni zautomatyzowaneprzedmowa
Testowanie jednostkowe jest bardzo skutecznym sposobem zapewnienia jakości oprogramowania, niezależnie od tego, czy chodzi o koncepcję wczesnej interwencji w testach, czy o cechy testów jednostkowych, które można zweryfikować z dużą prędkością bez wpływu na interfejs użytkownika, dlatego w rozwoju opartym na testach promowanych przez branżę, wspomniany w tym sterowniku testowym odnosi się bardziej do sterownika testów jednostkowych. Jednak ogólny zespół deweloperski rzadko przeprowadza testy jednostkowe w sposób systematyczny, a testy oprogramowania aplikacyjnego są częściej wykonywane przez profesjonalne zespoły testowe, aby wykonywać testy czarnej skrzynki. Największą trudnością testów jednostkowych nie jest to, że nie można określić wejścia i wyjścia – w końcu są one już określone na etapie rozwoju modułu, lecz fakt, że pisanie przypadków testowych jednostek pochłonie wiele roboczogodzin dla programistów, a według odpowiednich statystyk czas testów jednostkowych będzie nawet znacznie wyższy niż czas rozwoju samej funkcji. Oto kilka najczęstszych powodów, dla których programowanie nie pisze testów jednostkowych:
●Wymagania są zawsze nieograniczone, a w kolejnym etapie wciąż są wymagania funkcjonalne do zrealizowania i nie ma czasu na wypełnienie jednostki
●Jest zbyt wiele testów jednostkowych do uzupełnienia i nie ma jak zacząć, więc subiektywnie się opieram.
● Testy jednostkowe są trudne do napisania. Z jednej strony powodem może być to, że implementacja funkcji funkcjonalnej nie jest wystarczająco rozsądna, a z drugiej strony brak (lub nieznany) użyteczny framework testów jednostkowych ani ramy mock.
● Testy jednostkowe nie są uwzględniane w obciążeniu.
Po drugie, wymagania funkcjonalne są nadal niestabilne, a kosztowość pisania testów jednostkowych nie jest wysoka. Innymi słowy, jeśli wymagania zmienią się jutro, nie tylko kod funkcjonalny zostanie usunięty, ale także testy jednostkowe. Jeśli nie piszesz testów jednostkowych, ta część wysiłku nie pójdzie na marne.
W rzeczywistości główną przyczyną powyższych punktów jest zbyt czasochłonne pisanie testów jednostkowych, co ostatecznie prowadzi do utraty mocy silnika sterowanego testami, powodując, że piękna wizja rozwoju testowego zostaje zablokowana w rzeczywistym scenariuszu, ponieważ budowa silnika do tego napędu jest zbyt trudna i kosztowna. Różne jednostki "x" dostępne na rynku oraz ramy testów jednostkowych rozwiązują jedynie problem generowania zewnętrznych ramek sterowanych testami, bez logiki przypadków użycia i możliwości generowania danych opartych na głębokim zrozumieniu programu. W związku z tym sprawia, że deweloperzy są odporni na różne scenariusze związane z rozwojem. Wydanie Wings (obecnie w wersji C) rozwiązuje jeden z największych problemów programistów i ma potencjał, by zasadniczo zmienić status quo testów jednostkowych, co skutecznie złagodzi presję systemowego testowania czarnej skrzynki oraz testów automatycznych opartych na ogromnych zasobach ludzkich.
Przypadki testowe z ograniczeniami są automatycznie generowane przez programy, a najważniejszą technologią leżącą u podstaw jest złożona technologia parsowania parametrów. Oznacza to, że może dowolnie definiować zagnieżdżone parsowanie rekurencyjne na poziomie kompilatora dla dowolnie złożonych typów. Bez tego przełomu w tej kluczowej technologii automatyczny system generowania przypadków testowych byłby albo komercyjnie niezdolny, albo ewoluowałby do generowania zgodnych danych testowych z bardzo niską wydajnością. Na przykład słynne narzędzie do fuzzingu American Fuzzy Lop nie potrafi zidentyfikować typu struktury wymaganej przez program użytkownika i musi ewoluować algorytm wyszukiwania na podstawie najbardziej zewnętrznej warstwy. Cechą programu jest to, że dane wejściowe na poziomie interfejsu oraz wymagania dotyczące danych modułu wewnętrznego są bardzo odległe, a dane zewnętrzne są zwykle przekształcane warstwa po warstwie złożonej transformacji, aby stać się typem struktury danych wymaganym przez moduł wewnętrzny, więc ilość obliczeń i czasu potrzebnego do eksploracji z zewnętrznej warstwy będzie nie do pomyślenia. Opierając się na amerykańskim Fuzzy Lop, aby wygenerować prawidłowe wyrażenie SQL, wewnętrzny moduł programu musi być eksplorowany w dniach, daleko od minut czy godzin. Kolejnym ograniczeniem jest to, że dane wejściowe, które każdy program może przejąć, są starannie ustrukturyzowane i skompilowane z dużą liczbą reguł, a generowanie tych danych metodami losowymi + eksploracyjnymi jest bardzo nierealistyczne i czasochłonne. Dlatego nie jest możliwe generowanie automatycznie generowanych przypadków użycia zarówno z czarnej skrzynki, jak i najbardziej zewnętrznego wejścia.
Jeśli przypadek użycia jest generowany na podstawie analizy wewnętrznej struktury oprogramowania, konieczne jest dogłębne zrozumienie struktury kompilacji oprogramowania. Realny system generowania przypadków testowych powinien opierać się na środku programu (kluczowym punkcie wejścia) jako najbardziej odpowiednim punkcie wejścia testu. Wejścia tych modułów przekształciły rozmyte wejścia w wysoce ustrukturyzowane parametry. Dopóki te złożone struktury są identyfikowane, złożone typy danych można stopniowo rozkładać na proste typy danych, a konstrukcja parametrów może być realizowana równocześnie, generowanie przypadków użycia napędowych może być automatycznie zakończone.
Testowanie modułowe, które można zaklasyfikować jako tradycyjne testy jednostkowe, jest najlepszym sposobem na wykrycie i ograniczenie wad w fazie badań i rozwoju. Jednak ze względu na ograniczenia testów jednostkowych konieczne jest opracowanie dużej liczby sterowników, a promocja i zastosowanie w branży są znacznie ograniczone. Oczywiście testy jednostkowe można również wykonać po integracji systemu, aby uniknąć tworzenia wirtualnych programów stub.
Produkt Wings firmy Nebulas Testing, który po raz pierwszy pojawił się na świecie kilka dni temu, to inteligentny i w pełni zautomatyzowany system generowania przypadków testowych jednostkowych, który przeanalizował i rozwiązał następujące trudności, a obecnie jest udostępniony Państwu.
(1) Dogłębna analiza parametrów programu
Wings wykorzystuje technologię kompilatora do tworzenia obiektów modułów na podstawie pliku źródłowego wejściowego zgodnie z daną funkcją. Obiekt zawiera parametry wejściowe funkcji, typ wartości zwrotnej oraz inne informacje, które mogą być wykorzystywane przez moduł funkcji sterownika oraz moduł przypadku testowego. Każdy plik to jednostka, która przeprowadza dogłębną analizę każdego parametru każdej funkcji w nim zawartej i może uzyskać dokładne parsowanie oraz dekompozycję dla typów zagnieżdżonych, złożonych itd., wyjaśniać typy złożone warstwa po warstwie jako podstawowe typy danych oraz generować plik opisu (PSD) struktury parametrów.
(2) Automatyczne generowanie modułów przez napęd funkcjonalny
Zgodnie z informacjami o formacie pliku PSD, wszystkie funkcje sterownika testowanego programu źródłowego są generowane automatycznie, a proces testów jednostkowych nie polega już na ręcznym pisaniu funkcji testowych przez deweloperów, lecz wystarczy skompilować wygenerowane funkcje sterownika i pliki źródłowe poddane testom razem, a wyniki testów można wykonywać i przeglądać. Sterownik testu automatycznie generuje program na podstawie opisu PSD, w pełni automatycznie buduje wszystkie parametry i niezbędne globalne zmienne sterujące testowanym testem oraz może wygenerować ustrukturyzowany sterownik testowy zgodnie z hierarchią zmiennych złożonych, co pozwala zaoszczędzić dużo czasu przy pisaniu przypadków testów jednostkowych.
(3) Automatyczne generowanie i zarządzanie danymi testowymi
Służy do automatycznego generowania danych testowych, które odpowiadają informacjom wyekstrahowanym przez funkcję testową, a dane te są przechowywane w pliku JSON o określonej hierarchicznej relacji logicznej. Dane oraz typ danych po dekompozycji i rozwinięciu odpowiadają sobie nawzajem. Użytkownicy mogą dowolnie marginalizować te dane zgodnie z wymaganiami biznesowymi i używać plików JSON do ich wyświetlania w sposób uporządkowany i hierarchiczny, co jest bardzo jasne. Dane testowe zawierają wartości zmiennych globalnych oraz wartości parametrów w momencie wywoływania testowanej funkcji.
Wings oferuje metodę testów jednostkowych do automatycznego generowania funkcji kierowcy, która obejmuje głównie następujące kroki:
Rysunek 1: Build flow oparty na testach jednostkowych
1   Ekstrakcja informacji z testowanego programu
Informacje o strukturze testowanego programu obejmują głównie zmienne globalne i informacje o funkcjach w programie, a informacje o funkcjach to głównie liczba parametrów, typów parametrów oraz typów wartości zwracanych funkcji. Najważniejsze jest wyodrębnienie informacji o symbolach i typach dla niektórych złożonych typów i analiza ich na podstawowe typy danych warstwa po warstwie, aby ukończyć konstrukcję zmiennych globalnych i parametrów funkcji.
Typy zmiennych dzieli się zazwyczaj na typy podstawowe, konstrukcyjne, wskaźnikowe i zerowe. Wings wykorzystuje podstawową technologię kompilacji do obsługi różnych typów zmiennych na różne sposoby.
(1) Podstawowe typy, takie jak unsigned int u_int=20, Wings przetworzy nazwę zmiennej na u_int oraz typ danych na unsigned int.
(2) Typy konstrukcji, typy konstrukcji są w przybliżeniu podzielone na tablice, struktury, wspólne i typy wyliczania.
● Typ tablicy, taki jak intarray[2][3], nazwa tablicy to tablica, typ int oraz długość tablicy 2D, zachowanie 2, kolumna 3.
●Typ struktury, dla struktur jako tablice, listy strukturalne powiązane itp., różne znaczniki są podzielone.
(3) Typ wskaźnika, np. int **ptr = 0; , analizuje wskaźnik jako wskaźnik poziomu 2 typu int.
(4) Typ null, który jest rozwiązywany jako NULL.
(5) Typy systemów, takie jak File, size_t itp., są oznaczane jako typy systemowe i dodawane do szablonu oraz przypisywane przez użytkownika.
(6) Typ wskaźnika funkcji, analiza typu wartości zwrotnej, typu parametrów oraz liczby parametrów funkcji
Dla każdej jednostki kompilacyjnej testowanego programu źródłowego informacje o funkcji są zapisywane w odpowiadającej strukturze PSD, a opisane są następujące przykłady kodu źródłowego:
   

W powyższym programie void StructTypeTest3(myy_struct mm_struct[2])Zapisana struktura PSD wygląda następująco:

Znaczenia każdego węzła w pliku PSD są następujące:
●StructTypeTest3 oznacza nazwę funkcji, parmType0 typ parametrów, a parmNum liczbę parametrów
●mm_struct reprezentuje symbol parametru funkcji, baseType1 oznacza klasyfikację typów (podstawowy typ danych, typ konstrukcyjny, wskaźnik wskaźnikowy, typ zerowy), typ reprezentuje konkretne typy, w tym int, char, short, long, double, float, bool oraz te typy typów unsigned i innych podstawowych typów, a istnieją też specjalne typy, takie jak: ZOA_FUN typ reprezentuje typ funkcji, StructureOrClassType reprezentuje typ struktury itd., a nazwa oznacza nazwę struktury, typu union i enum
●i_int oznacza typ bazowy, który jest najmniejszą jednostką przypisania
●array_one oznacza typ tablicy, RowSize oznacza długość tablicy, a tablicę można podzielić na tablice jednowymiarowe, dwuwymiarowe itd
●punkt reprezentuje typ wskaźnika, wskaźnik dzieli się na wskaźnik pierwszego poziomu, wskaźnik drugiego poziomu itd., a wskaźnik ogólny służy jako parametr funkcji jako tablica, więc dla podstawowego typu wskaźnika używa się metody dynamicznej tablicy alokacji do przypisywania wartości, a użytkownik może modyfikować odpowiadający plik wartości według potrzeb.
● w oznacza typ pola bitowego, a bitfileld oznacza liczbę cyfr
●funkcjaPtr reprezentuje typ wskaźnika funkcji, który analizuje odpowiednio typ parametru, liczbę parametrów oraz informacje zwracające wartość
●Dem oznacza typ konsorcjum
● dy oznacza typ enum, a wartość wartość typu enum
●plik reprezentuje typ struktury, SystemVar oznacza, że ta zmienna należy do zmiennej w pliku nagłówka systemu, dla tego typu zmiennej Wings dodaje zmienne szablonowe do biblioteki szablonów, użytkownicy mogą przypisywać specjalne wartości według konkretnych potrzeb. Na przykład typ pliku jest obsługiwany w następujący sposób:

Użytkownicy mogą także dodawać własne metody przypisywania. Dla typów systemów Wings można odróżnić od zwykłych typów definiowanych przez użytkownika, a po analizie do wbudowanego typu systemu mogą zatrzymać analizę rekurencyjną w dół.
●g_int reprezentuje zmienne globalne, a globalType reprezentuje zmienne globalne
●next reprezentuje strukturę listy powiązanej, a NodeType reprezentuje tę strukturę jako listę powiązaną
●returnType reprezentuje typ wartości zwrotnej funkcji.
2   Automatyczne generowanie sterowników
W powyższym artykule analizowane i wyodrębniane są informacje strukturalne zmiennych globalnych i funkcji, a poniższe informacje są wykorzystywane do zapisu w PSD, aby zakończyć ogólne generowanie ram sterujących testowanego programu źródłowego.
Generowanie jest głównie podzielone na następujące aspekty:
Ø Deklaracja zmiennych globalnych
Ø Operacja przypisywania parametrów funkcji, zgodnie z liczbą parametrów funkcji, przydzielaj wartości kolejno
Ø Przypisywanie zmiennych globalnych odbywa się sekwencyjnie w zależności od liczby zmiennych globalnych użytych w analizie
Ø Wywołanie funkcji oryginalnej
Kilka kwestii, które warto zwrócić uwagę, to:
●Podczas procesu generowania sterowników niektóre specjalne funkcje, takie jak funkcje główne, statyczne itp., nie są przetwarzane tymczasowo, ponieważ nie mogą być dostępne dla świata zewnętrznego.
● Dla każdego testowanego pliku źródłowego generowany jest odpowiadający mu plik sterownika.
● W Driver_main.cpp jest zawarta kontrola napędu, aby automatycznie konfigurować liczbę testów funkcji za pomocą makr
Funkcja sterownika generowana przez powyższy program źródłowy wygląda następująco:
● Wszystkie zmienne są nazywane przed nazwą oryginalnej zmiennej, dodaj _
●Poprzez uzyskanie odpowiadających danych testowych, zmienne są kolejno przypisywane
●Dla wbudowanych parametrów systemu oraz specjalnych parametrów użytkownika, metoda przypisania jest jednolicie konfigurowana za pomocą metody szablonowej.
●Przypisz i wywołaj parametry do testowanej funkcji.
3   Dane testowe są generowane automatycznie
Poniżej znajduje się zestaw danych wygenerowany w formacie PSD (Rysunek 3), każdy zestaw danych jest zapisany w formacie JSON, co ułatwia dostrzeżenie hierarchicznych relacji danych.

Dla każdej jednostki kompilacyjnej domyślnie generowany jest zestaw plików testowych odpowiadających wszystkim funkcjom, a generowanie wartości można modyfikować o liczbę konfiguracji.
4 MysqlWyświetlane są wyniki testów programu
Jak ukończyć generowanie frameworka sterownika? Poniżej przedstawiono szczegółowe wyjaśnienie pełnego procesu generowania programu open source MySQL.
Poniżej znajduje się główny schemat interfejsu testującego MySQL przez Wings:
Kliknij przycisk Plik, aby ustawić katalog projektu programu źródłowego poddawanego testowi. Po zakończeniu ustawień kliknij operację funkcyjną, która obejmuje głównie parsowanie parametrów, generowanie sterowników, generowanie plików wartości oraz dodawanie szablonów. Do analizy generowane są następujące foldery:
Wśród nich moduł parsowania parametrów generuje FunXML i GlobalXml, które przechowują informacje o funkcji oraz informacje o zmiennych globalnych każdej wyodrębnionej jednostki kompilacyjnej odpowiednio.
Moduł generowania sterowników będzie generowany Wings_Projects odpowiednim folderze, który przechowuje pliki sterowników dla każdej jednostki kompilacyjnej
Moduł generowania wartości przechowuje wygenerowane dane testowe dla każdej jednostki kompilacyjnej.
Poniższy rysunek przedstawia informacje o strukturze pliku sterownika załadowane przez Mysql, a drzewo nawigacyjne po lewej stronie to wygenerowany plik sterownika, który zawiera funkcje każdej jednostki kompilacyjnej oraz parametry i zmienne globalne funkcji. Kliknij na jedną z jednostek kompilacji, aby załadować odpowiadający plik sterownika oraz odpowiadający plik wartości.
Powyższy to plik sterownika i plik wartości odpowiadający całkowitemu generowaniu Mysql, a plik sterownika jest szczegółowo opisany w poniższym kodzie.
● Dla każdej jednostki kompilacyjnej odniesienie zmiennej globalnej to external (extern).
●Funkcja sterująca jest jednolicie nazywana metodą Driver_XXX, JSON służy do pozyskiwania danych testowych, a czas oznacza liczbę testów pojedynczej funkcji.
●Dla każdej operacji przypisania parametrów używany jest parsowany format pamięci PSD, który przydziela wartości każdej strukturze warstw po kolei.
Zastosowanie Wings jest bardzo proste, poniżej znajduje się statystyczny indeks wygenerowanych danych testowych przy użyciu kodu Mysql, który można normalnie skompilować w Visual Studio 2015, na przykład cały proces generowania nie wymaga ręcznej interwencji, wystarczy sformułować ścieżkę kodu źródłowego, który należy wygenerować i sterować.
mysqlDane testowe
  
MysqlWersja
  
5.5
CLiczba plików kodu językowego
578Osoby
Czas potrzebny na analizę (PSDCzas pokoleniowy)
149.099s
Czas potrzebny na napędzanie generacji
27.461s
Wartość jest generowana przez czas potrzebny na jej wygenerowanie
84.974s
Instrukcje konfiguracji komputera:
  
System operacyjny
  
Windows7
procesor
Inter(R) Core(TM) i7-7700 CPU 3.60GHz
Pamięć
8,00GB
Typ systemu
64bit
Poniżej przedstawiono wyniki uzyskane za pomocą narzędzia do statystyk kodu źródłowego, z ponad 4 milionami linii prawidłowego kodu testowego wygenerowanego przez Wings w pełni automatycznie. Co jeszcze ciekawsze, widać, że koszt ręcznego opracowania tych kodów sięga nawet 1 079 roboczo-miesięcznych, a koszt sięga nawet 10,79 miliona.
Wings zrealizowało pierwszy krok eksploracji przez program, aby automatycznie generować program, pierwsza wersja jest obecnie dostępna, zainteresowani deweloperzy mogą pobrać ją bezpośrednio na platformę chmurową kodu (https://gitee.com/teststars/wings_release), licencjonowanie komercyjne zapewnia miesięczny nieograniczony okres doświadczenia funkcji, możesz szybko doświadczyć magicznej mocy Wings, wersja C Wings obsługuje wiele platform, takich jak Visual Studio, vxworks, gcc, qt itd. Wings jest projektowany i rozwijany przez zespół testowy Nebulas (www.teststar.cc), a zainteresowani deweloperzy mogą skontaktować się z zespołem testowym Nebulas za pośrednictwem interaktywnej platformy Codecloud, aby przekazać swoje pomysły projektowe i opinie dotyczące użytkowania produktu (za doskonałe propozycje Nebulas może przedłużyć okres bezpłatnego użytkowania o co najmniej trzy miesiące). Wings posiada silny, podstawowy gen znacząco poprawiający jakość oprogramowania, a w przyszłości Wings będzie głęboko optymalizować czytelność automatycznie pisanych programów (bliższych poziomowi pisania dobrych programistów) oraz wsparcie dla języka C++.





Poprzedni:Tworzenie inteligentnych kontraktów Ethereum za pomocą Nethereum i .NET
Następny:Awaria dysku chmurowego Tencent, powodująca "całkowitą utratę danych" przez użytkowników.
Opublikowano 06.08.2018 15:39:42 |
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com