Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 13725|Odpověď: 1

[C++] Křídla – Nechte jednotkové testy generovat inteligentně a automaticky

[Kopírovat odkaz]
Zveřejněno 06.08.2018 14:30:37 | | | |
Křídla-Udělejte jednotkové testy inteligentními a plně automatizovanýmipředmluva
Jednotkové testování je velmi účinný způsob, jak zajistit kvalitu softwaru, ať už z pohledu konceptu včasného zásahu do testování, nebo z charakteristik jednotkových testů, které lze ověřit vysokou rychlostí bez ovlivnění uživatelským rozhraním, takže testem řízený vývoj prosazovaný průmyslem se zmíněný testovací ovladač více vztahuje na jednotkový testovací ovladač. Nicméně obecný vývojový tým stále zřídka systematicky provádí jednotkové testy a testy aplikačního softwaru provádějí spíše profesionální testovací týmy pro černé skříňky. Největší obtíží jednotkového testování není v tom, že nelze určit vstup a výstup, koneckonců je to již určeno ve fázi vývoje modulu, ale že psaní jednotkových testovacích případů zabere vývojářům mnoho pracovních hodin a podle relevantních statistik doba jednotkových testovacích případů dokonce výrazně přesahuje dobu vývoje samotné funkce. Zde je několik nejčastějších důvodů, proč vývoj nepíše jednotkové testy:
●Požadavky jsou vždy nekonečné a stále existují funkční požadavky, které je třeba realizovat v další fázi, a není čas jednotku naplnit
●Je příliš mnoho jednotkových testů na doplnění a není způsob, jak začít, takže subjektivně odolávám.
● Jednotkové testy se píší obtížně. Na jedné straně může být důvodem to, že implementace funkční funkce není dostatečně rozumná, a na druhé straně neexistují (nebo neznámé) užitečné jednotkové testovací rámce a mock frameworky.
● Jednotkové testy nejsou zahrnuty do pracovní zátěže.
Za druhé, funkční požadavky jsou stále nestabilní a nákladová výkonnost psaní jednotkových testů není vysoká. Jinými slovy, pokud se požadavky zítra změní, nebude zrušen jen funkční kód, ale i jednotkové testy. Pokud nepíšete jednotkové testy, tato část úsilí nebude zbytečná.
Ve skutečnosti je hlavní příčinou výše uvedených bodů příliš časově náročné psaní jednotkových testů, což nakonec vede ke ztrátě výkonu testem řízeného enginu, což způsobuje, že krásná vize testem řízeného vývoje je v reálném scénáři zablokována, protože je příliš obtížné a drahé vytvořit engine pro tento disk. Různé "x" jednotky na trhu a rámce pro jednotkové testování řeší pouze problém generování testovaných vnějších rámců, bez jakýchkoli logických a datových schopností založených na hlubokém porozumění programům. Proto činí vývojáře odolnými v různých scénářích souvisejících s vývojem. Vydání Wings (aktuálně pro C) řeší jeden z největších problémů programátorů a má potenciál zásadně změnit status quo jednotkového testování, což efektivně zmírní tlak systémového black box testování a automatizovaného testování založeného na obrovských lidských zdrojích.
Testovací případy omezení jsou automaticky generovány programy a nejdůležitější základní technologií je technologie pro komplexní parsování parametrů. To znamená, že může libovolně definovat vnořené rekurzivní parsování na úrovni kompilátoru pro libovolně složité typy. Bez tohoto průlomu v této klíčové technologii by automatický systém generování testovacích případů buď komerčně nezpůsobil, nebo by se vyvinul tak, aby produkoval splňující testovací data s velmi nízkou účinností. Například slavný fuzzovací nástroj American Fuzzy Lop nedokáže určit typ struktury požadované uživatelským programem a musí vyvíjet vyhledávací algoritmus na základě vnější vrstvy. Charakteristikou programu je, že vstup na úrovni rozhraní a požadavky na data interního modulu jsou vzdálené, a externí data jsou obvykle vrstva po vrstvě transformována složitými transformacemi, aby se stala typem datové struktury požadovaným pro interní modul, takže množství výpočtů a času potřebného k průzkumu z vnější vrstvy bude nepředstavitelné. Na základě amerického Fuzzy Lop, aby bylo možné generovat legitimní SQL příkaz, je nutné prozkoumat interní modul programu v dnech, daleko od minut nebo hodin. Dalším omezením je, že vstupy, které může každý program převzít, jsou pečlivě strukturovaná a zkompilovaná data s velkým počtem pravidel, a je velmi nereálné a časově náročné generovat tato data náhodnými + průzkumnými metodami. Proto není možné generovat automaticky generované případy použití z černé skříňky i z nejvzdálenějšího vstupu.
Pokud je případ použití generován analýzou vnitřní struktury softwaru, je nutné mít hluboké porozumění kompilační struktuře softwaru. Životaschopný systém generování testovacích případů by měl být založen na středu programu (klíčovém vstupním bodě) jako nejvhodnějším vstupním bodě testu. Vstupy těchto modulů proměnily fuzzy vstupy v vysoce strukturované parametry. Pokud lze tyto složité struktury identifikovat, lze složité datové typy postupně degradovat na jednoduché datové typy a současně dokončit konstrukci parametrů, generování řídicích případů použití lze automaticky dokončit.
Testování založené na modulech, které lze klasifikovat jako tradiční jednotkové testování, je nejlepší způsob, jak najít a omezit vady ve fázi výzkumu a vývoje. Kvůli omezením jednotkového testování je však nutné vyvinout velké množství ovladačů a propagace a aplikace v oboru jsou značně omezené. Samozřejmě lze po integraci systému provádět i jednotkové testy, aby se předešlo vytváření virtuálních stub programů.
Produkt Wings od Nebulas Testing, který byl před několika dny poprvé uveden na svět, je inteligentní a plně automatizovaný systém generování případů jednotkových testů, který studoval a vyřešil následující obtíže a nyní je s vámi sdílen.
(1) Hloubková analýza parametrů programu
Wings využívá základní technologii kompilátoru k vytváření modulových objektů na základě vstupního zdrojového souboru podle funkce. Objekt obsahuje vstupní parametry funkce, typ vrácené hodnoty a další informace, které mohou využít modul ovladače funkce a modul testovacího případu. Každý soubor je jednotka, která provádí hloubkovou analýzu každého parametru každé funkce v něm a dokáže dosáhnout přesné parsace a dekompozice pro vnořené typy, komplexní typy atd., vysvětlovat komplexní typy vrstvu po vrstvě jako základní datové typy a generovat popisný soubor (PSD) struktury parametrů.
(2) Automatické generování modulů pomocí funkčního pohonu
Podle formátových informací v souboru PSD jsou všechny funkce ovladačů testovaného programu automaticky generovány a proces jednotkového testování již nezávisí na tom, aby vývojáři ručně psali testovací funkce, ale stačí, aby společně zkompilovali vygenerované funkce ovladače a testované soubory, přičemž lze výsledky testu spustit a výsledky testu zobrazit dohromady. Testovací ovladač automaticky generuje program na základě popisu PSD, plně automaticky vytváří všechny parametry a potřebné globální proměnné, které řídí testovaný test, a dokáže vytvořit strukturovaný testovací ovladač podle hierarchie komplexních proměnných, což může ušetřit spoustu času při psaní jednotkových testovacích případů.
(3) Automatické generování a správa testovacích dat
Používá se k automatickému generování testovacích dat, která odpovídají informacím extrahovaným testovací funkcí, a data jsou uložena v JSON souboru s určitým hierarchicky logickým vztahem. Data a datový typ po rozkladu a rozšíření si navzájem odpovídají. Uživatelé mohou tato data libovolně marginalizovat podle obchodních požadavků a používat JSON soubory k jejich zobrazení strukturovaně a hierarchicky, což je velmi jasné. Testovací data zahrnují hodnoty globálních proměnných a hodnoty parametrů při volání testované funkce.
Wings poskytuje metodu jednotkového testování pro automatické generování funkcí řidiče, která zahrnuje především následující kroky:
Obrázek 1: Build flow řízený jednotkovými testy
1   Extrakce informací z testovaného programu
Informace o struktuře testovaného programu zahrnují především globální proměnné a informace o funkci v programu, zatímco informace o funkcích zahrnují především počet parametrů, typy parametrů a typy návratových hodnot funkce. Nejdůležitější je extrahovat informace o symbolech a typech pro některé komplexní typy a analyzovat je do základních datových typů vrstva po vrstvě, aby byla dokončena konstrukce globálních proměnných a funkčních parametrů.
Typy proměnných se obecně dělí na základní typy, typy konstrukcí, typy ukazatelů a nulové typy. Wings využívá základní kompilační technologii k řešení různých typů proměnných různými způsoby.
(1) Základní typy, jako je unsigned int u_int=20, Wings parsuje název proměnné na u_int a datový typ na unsigned int.
(2) Typy konstrukcí, typy konstrukcí jsou zhruba rozděleny na pole, struktury, společné a typy výčtu.
● Typ pole, například intarray[2][3], název pole je pole, typ int a délka 2D pole, chování 2, sloupec 3.
●Typ struktury, pro struktury jako pole, strukturované propojené seznamy atd., jsou různé značky rozděleny.
(3) Typ ukazatele, např. int **ptr = 0; , parsuje ukazatel jako ukazatel úrovně 2 typu int.
(4) Nulový typ, který je vyřešen jako NULL.
(5) Systémy typy, jako File, size_t atd., jsou označeny jako systémové typy a jsou přidány do šablony a přiřazeny uživatelem.
(6) Typ ukazatele funkce, analýza typu návratové hodnoty, typu parametru a počtu parametrů funkce
Pro každou kompilační jednotku testovaného zdrojového programu jsou informace o parsované funkci uloženy v odpovídající struktuře PSD a jsou popsány následující příklady zdrojového kódu:
   

V uvedeném programu void StructTypeTest3(myy_struct mm_struct[2])Uložená PSD struktura je následující:

Významy každého uzlu v souboru PSD jsou následující:
●StructTypeTest3 představuje název funkce, parmType0 typ parametru a parmNum představuje počet parametrů
●mm_struct představuje symbol funkčního parametru, baseType1 představuje klasifikaci typů (základní datový typ, typ konstrukce, ukazatelový typ, nulový typ), typ reprezentuje specifické typy, včetně int, char, short, long, double, float, bool a tyto typy neznaménkových a dalších základních typů, a existují některé speciální typy, jako například: ZOA_FUN typ představuje typ funkce, StructureOrClassType představuje typ struktury atd. a název představuje název typu struct, union a enum typu
●i_int představuje základní typ, což je nejmenší jednotka přiřazení
●array_one představuje typ pole, RowSize představuje délku pole a pole lze rozdělit na jednorozměrná, dvourozměrná pole atd
●bod představuje typ ukazatele, ukazatel je rozdělen na ukazatel první úrovně, ukazatel druhé úrovně atd., a obecný ukazatel se používá jako funkční parametr jako pole, takže pro základní typ ukazatele se používá metoda dynamického alokačního pole k přiřazení hodnot a uživatel může podle potřeb upravit odpovídající soubor hodnot.
● w představuje typ bitového pole a bitfileld znamená počet číslic
●funkce Ptr představuje typ ukazatele funkce, který analyzuje typ parametru, počet parametrů a hodnotu vrácení
●Dem znamená typ konsorcia
● dy představuje typ enum a hodnota hodnotu typu enum
●soubor představuje typ struktury, SystemVar představuje, že tato proměnná patří k proměnné v souboru systémové hlavičky, pro tento typ proměnné Wings přidává šablonové proměnné do knihovny šablon, uživatelé mohou přiřadit speciální hodnoty podle konkrétních potřeb. Například typ souboru je zpracováván následovně:

Uživatelé si také mohou přidávat vlastní metody přiřazení. U systémových typů lze Wings odlišit od běžných uživatelsky definovaných typů a při parsování na vestavěný typ systému může zastavit rekurzivní analýzu směrem dolů.
●g_int reprezentuje globální proměnné a globalType představuje globální proměnné
●next představuje strukturu propojeného seznamu a NodeType tuto strukturu představuje jako propojený seznam
●returnType představuje typ vrácené hodnoty funkce.
2   Automatické generování jezdců
V uvedeném článku jsou analyzovány a extrahovány strukturální informace globálních proměnných a funkcí a následující informace jsou použity k uložení v PSD za účelem dokončení celkové generace řídicího rámce testovaného zdrojového programu.
Generace se dělí hlavně do následujících oblastí:
Ø Deklarace globálních proměnných
Ø Operace přiřazení parametrů funkce, podle počtu parametrů funkce, postupně přiřazujte hodnoty
Ø Přiřazení globálních proměnných se provádí postupně podle počtu globálních proměnných použitých analýzou
Ø Volání původní funkce
Některé body, které stojí za zmínku, jsou následující:
●Během procesu generování ovladačů nejsou některé speciální funkce, jako hlavní funkce, statické funkce atd., dočasně zpracovávány, protože k nim není přístup pro vnější svět.
● Pro každý testovaný zdrojový soubor je vygenerován odpovídající ovladač.
● Ovládání disku je zahrnuto v Driver_main.cpp pro automatickou konfiguraci počtu testů funkce pomocí maker
Řídicí funkce generovaná výše uvedeným zdrojovým programem je následující:
● Všechny proměnné jsou pojmenovány před názvem původní proměnné, přidej _
●Získáním odpovídajících testovacích dat jsou proměnné postupně přiřazeny
●Pro vestavěné parametry systému a speciální parametry uživatele je metoda přiřazení jednotně konfigurována pomocí šablonové metody.
●Přiřaďte a volejte parametry k testované funkciji.
3   Testovací data jsou generována automaticky
Následuje sada dat generovaných ve formátu PSD na obrázku 3, každá sada dat je uložena ve formátu JSON, což usnadňuje přehled hierarchických vztahů dat.

Pro každou kompilační jednotku je výchozí generována sada testovacích datových souborů odpovídajících všem funkcím a generování hodnoty lze upravit podle počtu konfigurací.
4 MysqlZobrazují se výsledky testů programu
Jak dokončit generování frameworku ovladačů, následuje podrobné vysvětlení kompletního procesu generování open source programu MySQL.
Následuje hlavní schéma rozhraní testování Mysql pomocí Wings:
Klikněte na tlačítko Soubor pro nastavení adresáře projektu zdrojového programu, který je testován. Po dokončení nastavení klikněte na funkci, která zahrnuje především parsování parametrů, generování ovladačů, generování hodnotových souborů a přidávání šablon. Pro analýzu jsou generovány následující složky:
Mezi nimi modul pro parsování parametrů generuje FunXML a GlobalXml, které ukládají informace o funkcích a globální proměnné každé extrahované kompilační jednotky.
Modul generování ovladačů bude generován Wings_Projects odpovídající složce, která ukládá soubory ovladačů pro každou kompilační jednotku
Modul generování hodnoty ukládá generovaná testovací data pro každou kompilační jednotku.
Následující obrázek ukazuje informace o struktuře souboru ovladače načtené pomocí Mysql a navigační strom vlevo je vygenerovaný soubor ovladače, který obsahuje funkce každé kompilační jednotky, stejně jako parametry a globální proměnné těchto funkcí. Klikněte na jednu z kompilačních jednotek pro načtení příslušného ovladače a odpovídající hodnotový soubor.
Výše uvedené je soubor ovladače a hodnotový soubor odpovídající celkové generaci Mysql a soubor ovladačů je podrobně popsán v následujícím kódu.
● Pro každou kompilační jednotku je referencí globální proměnné extern.
●Řídicí funkce je jednotně pojmenována jako Driver_XXX metoda, JSON se používá jako způsob získání testovacích dat a časy představují počet testů jedné funkce.
●Pro každou operaci přiřazení parametrů se používá parsovaný formát PSD pro přiřazení hodnot jednotlivým vrstvám.
Aplikace Wings je velmi jednoduchá, následuje statistický index generovaných testovacích dat pomocí Mysql kódu, který lze normálně zkompilovat ve Visual Studio 2015 jako příklad, celý proces generování nevyžaduje žádný ruční zásah, stačí formulovat cestu zdrojového kódu, která je potřeba vygenerovat a řídit.
mysqlTestovací data
  
Mysqlverze
  
5.5
CPočet souborů jazykového kódu
578Jednotlivci
Čas potřebný k analýze (PSDGenerace čas)
149.099s
Čas potřebný k podpoře generace
27,461s
Hodnota je generována časem, který je potřeba k jejímu vytvoření
84.974s
Instrukce pro konfiguraci počítače:
  
Operační systém
  
Windows7
procesor
Inter(R) Core(TM) i7-7700CPU 3.60GHz
Paměť
8,00GB
Typ systému
64bit
Níže jsou uvedeny výsledky získané pomocí nástroje pro statistiku zdrojového kódu, přičemž Wings generuje přes 4 miliony řádků platného jednotkového testovacího kódu plně automaticky. Ještě zajímavější je, že je vidět, že náklady na ruční vývoj těchto kódů dosahují až 1 079 lidských měsíců a náklady dosahují až 10,79 milionu.
Wings realizoval první krok průzkumu programu, aby program automaticky generoval, první verze je právě vydána, zájemci o vývojáře si ji mohou stáhnout přímo na platformě Code Cloud (https://gitee.com/teststars/wings_release), komerční licence poskytuje měsíční neomezené funkční období, můžete rychle zažít magickou sílu Wings, verze Wings C podporuje více platforem, například Visual Studio. vxworks, gcc, qt atd. Wings je navržen a vyvíjen týmem Nebulas testing (www.teststar.cc) a zájemci o Nebulas mohou kontaktovat testovací tým Nebulas prostřednictvím interaktivní platformy Codecloud, aby přispěli svými návrhovými nápady a zpětnou vazbou k používání produktů (za vynikající doporučení může Nebulas prodloužit své bezplatné používání alespoň o tři měsíce). Wings má silný gen pro výrazné zlepšení kvality softwaru a v budoucnu Wings výrazně optimalizuje čitelnost automaticky psaných programů (blíže úrovni psaní dobrých programátorů) a podporu jazyka C++.





Předchozí:Vývoj chytrých kontraktů pro Ethereum prostřednictvím Nethereum a .NET
Další:Selhání cloudového disku Tencent, které způsobuje, že uživatelé "zcela přijdou o data"
Zveřejněno 06.08.2018 15:39:42 |
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com