|
Krídla-Urobte jednotkové testy inteligentnými a plne automatizovanýmipredhovor Jednotkové testovanie je veľmi efektívny spôsob zabezpečenia kvality softvéru, či už z pohľadu konceptu skorého zásahu pri testovaní, alebo z charakteristík jednotkových testov, ktoré je možné overiť vysokou rýchlosťou bez ovplyvnenia používateľským rozhraním, takže testovací vývoj, ktorý priemysel odporúča, sa spomenutý testovací ovládač viac vzťahuje na jednotkový testovací ovládač. Avšak všeobecný vývojový tím stále zriedka systematicky vykonáva jednotkové testy a testy aplikačného softvéru vykonávajú skôr profesionálne testovacie tímy, aby vykonali tzv. black box testy. Najväčšou ťažkosťou jednotkového testovania nie je to, že nie je možné určiť vstup a výstup, veď už je určený vo fáze vývoja modulu, ale že písanie jednotkových testovacích prípadov zaberie vývojárovi veľa pracovných hodín a podľa relevantných štatistík čas jednotkových testovacích prípadov dokonca výrazne prevýši čas vývoja samotnej funkcie. Tu je niekoľko najčastejších dôvodov, prečo vývoj nepíše jednotkové testy: ●Požiadavky sú vždy nekonečné a stále existujú funkčné požiadavky, ktoré treba splniť v ďalšej fáze, a nie je čas jednotku naplniť ●Je príliš veľa jednotkových testov na doplnenie a nie je spôsob, ako začať, takže subjektívne odolávam. ● Jednotkové testy sa ťažko píšu. Na jednej strane môže byť dôvodom to, že implementácia funkčných funkcií nie je dostatočne rozumná, a na druhej strane neexistujú (alebo neznáme) užitočné jednotkové testovacie rámce a mock frameworky. ● Jednotkové testy nie sú zahrnuté v pracovnej záťaži. Po druhé, funkčné požiadavky sú stále nestabilné a nákladová výkonnosť písania jednotkových testov nie je vysoká. Inými slovami, ak sa zajtra zmenia požiadavky, nielenže funkčný kód bude zrušený, ale aj jednotkové testy. Ak nebudete písať jednotkové testy, táto časť úsilia nebude márna. V skutočnosti je hlavnou príčinou vyššie uvedených bodov to, že písanie jednotkových testov je príliš časovo náročné, čo nakoniec vedie k strate výkonu testom riadeného enginu, čo spôsobuje, že krásna vízia testom riadeného vývoja sa v reálnom scenári zastaví, pretože je príliš ťažké a drahé postaviť engine pre tento disk. Rôzne "x" jednotky na trhu a rámce jednotkového testovania riešia problém generovania testovaných vonkajších rámcov len bez akýchkoľvek logických prípadov použitia a schopností generovania dát založených na hlbokom porozumení programu. Preto robí vývojárov odolnými v rôznych situáciách súvisiacich s vývojom. Vydanie Wings (momentálne pre C) rieši jeden z najväčších problémov programátorov a má potenciál zásadne zmeniť status quo jednotkového testovania, čo efektívne zmierni tlak systémového black box testovania a automatizovaného testovania založeného na obrovských ľudských zdrojoch. Testovacie prípady s obmedzeniami sú automaticky generované programami a najkritickejšou technológiou je technológia komplexného parsovania parametrov. To znamená, že môže ľubovoľne definovať vnorené rekurzívne parsovanie na úrovni kompilátora pre ľubovoľne zložité typy. Bez tohto prelomu v tejto kritickej technológii by automatický systém generovania testovacích prípadov buď komerčne nebol schopný, alebo by sa vyvíjal tak, aby produkoval kompatibilné testovacie dáta s veľmi nízkou efektivitou. Napríklad slávny nástroj na fuzzovanie American Fuzzy Lop nedokáže identifikovať typ štruktúry potrebnej pre používateľský program a musí vyvíjať vyhľadávací algoritmus na základe najvzdialenejšej vrstvy. Charakteristikou programu je, že vstup na úrovni rozhrania a dátové požiadavky interného modulu sú ďaleko, a externé dáta sa zvyčajne transformujú vrstva po vrstve komplexných transformácií, aby sa stali typom dátovej štruktúry požadovaným pre interný modul, takže množstvo výpočtov a času potrebného na preskúmanie z vonkajšej vrstvy bude nepredstaviteľné. Na základe amerického Fuzzy Lop, aby bolo možné generovať legitímny SQL príkaz, je potrebné preskúmať interný modul programu v dňoch, ďaleko od minút či hodín. Ďalším obmedzením je, že vstupy, ktoré môže každý program prevziať, sú starostlivo štruktúrované a skompilované dáta s veľkým počtom pravidiel, a je veľmi nereálne a extrémne časovo náročné generovať tieto dáta náhodnými + prieskumnými metódami. Preto nie je možné generovať automaticky generované prípady použitia z čiernej skrinky rovnako ako z najvzdialenejšieho vstupu. Ak je použitie riadené analýzou vnútornej štruktúry softvéru generované, je potrebné mať hlboké pochopenie štruktúry kompilácie softvéru. Životaschopný systém generovania testovacích prípadov by mal byť založený na strede programu (kľúčovom vstupnom bode) ako najvhodnejšom vstupnom bode testu. Vstupy týchto modulov premenili fuzzy vstupy na vysoko štruktúrované parametre. Pokým je možné tieto zložité štruktúry identifikovať, zložité dátové typy sa môžu postupne degradovať na jednoduché dátové typy a súčasne dokončiť konštrukciu parametrov, pričom generovanie riadiacich prípadov použitia môže byť automaticky dokončené. Testovanie založené na moduloch, ktoré možno klasifikovať ako tradičné jednotkové testovanie, je najlepším spôsobom, ako nájsť a obmedziť chyby vo fáze výskumu a vývoja. Avšak kvôli obmedzeniam jednotkového testovania je potrebné vyvinúť veľké množstvo ovládačov a propagácia a aplikácia v odvetví sú výrazne obmedzené. Samozrejme, jednotkové testy môžu byť vykonané aj po integrácii systému, aby sa predišlo vytváraniu virtuálnych stub programov. Produkt Wings od Nebulas Testing, ktorý bol pred niekoľkými dňami na svete uvedený na trh prvýkrát, je inteligentný a plne automatizovaný systém na generovanie jednotkových testovacích prípadov, ktorý študoval a vyriešil nasledujúce ťažkosti a teraz je s vami zdieľaný. (1) Hĺbková analýza parametrov programu Wings využíva základnú technológiu kompilátora na vytváranie modulových objektov na základe vstupného zdrojového súboru podľa funkcie. Objekt obsahuje vstupné parametre funkcie, typ vrátenej hodnoty a ďalšie informácie, ktoré môžu byť použité modulom riadiacej funkcie a modulom testovacieho prípadu. Každý súbor je jednotka, ktorá vykonáva hĺbkovú analýzu každého parametra každej funkcie v ňom a dokáže dosiahnuť presnú analýzu a dekompozíciu pre vnorené typy, komplexné typy a podobne, vysvetľovať komplexné typy vrstvu po vrstve ako základné dátové typy a generovať popisný súbor (PSD) štruktúry parametrov. (2) Automatická generácia modulov pomocou funkčného pohonu Podľa formátových informácií v PSD súbore sa všetky funkcie ovládačov testovaného programu automaticky generujú a proces jednotkového testovania už nespolieha na manuálny zápis testovacích funkcií vývojárov, ale stačí, aby sa vygenerované funkcie ovládača a zdrojové súbory testované spolu skompilovali, pričom výsledky testu je možné spustiť a výsledky testu si prezerať. Testovací ovládač automaticky generuje program na základe popisu PSD, plne automaticky vytvára všetky parametre a potrebné globálne premenné, ktoré riadia testovaný test, a dokáže vygenerovať štruktúrovaný testovací ovládač podľa hierarchie komplexných premenných, čo môže ušetriť veľa času pri písaní jednotkových testovacích prípadov. (3) Automatické generovanie a správa testovacích údajov Používa sa na automatické generovanie testovacích dát, ktoré zodpovedajú informáciám extrahovaným testovacou funkciou a tieto údaje sú uložené v JSON súbore s určitým hierarchickým logickým vzťahom. Dáta a dátový typ po rozklade a rozšírení si navzájom zodpovedajú. Používatelia môžu tieto údaje ľubovoľne marginalizovať podľa obchodných požiadaviek a používať JSON súbory na ich štruktúrované a hierarchické zobrazenie, čo je veľmi jasné. Testovacie dáta zahŕňajú hodnoty globálnych premenných a hodnoty parametrov pri volaní testovanej funkcie. Wings poskytuje jednotkovú testovaciu metódu na automatické generovanie funkcií jazdca, ktorá zahŕňa najmä nasledujúce kroky: Obrázok 1: Build flow založený na jednotkových testoch 1 Extrahovanie informácií z testovaného programuInformácie o štruktúre testovaného programu zahŕňajú najmä globálne premenné a informácie o funkciách v programe, pričom informácie o funkciách zahŕňajú najmä počet parametrov, typy parametrov a typy návratových hodnôt funkcie. Najdôležitejšie je extrahovať informácie o symboloch a typoch pre niektoré komplexné typy a analyzovať ich do základných dátových typov vrstva po vrstve, aby sa dokončila konštrukcia globálnych premenných a funkčných parametrov. Typy premenných sa zvyčajne delia na základné typy, typy konštrukcie, typy ukazovateľov a nulové typy. Wings využíva základnú kompilačnú technológiu na spracovanie rôznych typov premenných rôznymi spôsobmi. (1) Základné typy, ako napríklad unsigned int u_int=20, Wings parsuje názov premennej na u_int a dátový typ na unsigned int. (2) Typy konštrukcií, typy konštrukcií sa približne delia na polia, štruktúry, spoločné hodnoty a typy výčtukov. ● Typ poľa, napríklad intarray[2][3], názov poľa je pole, typ int a dĺžka 2D poľa, správanie 2, stĺpec 3. ●Typ štruktúry, pre štruktúry ako polia, štruktúrne prepojené zoznamy a podobne sa rozdeľujú rôzne značky. (3) Typ ukazovateľa, napr. int **ptr = 0; , parsuje ukazovateľ ako ukazovateľ úrovne 2 typu int. (4) Nulový typ, ktorý je vyriešený ako NULL. (5) Typy systémov, ako Súbor, size_t a pod., sú označené ako systémové typy a pridávajú sa do šablóny a priraďujú ich používateľom. (6) Typ ukazovateľa funkcie, analýza typu vrátenej hodnoty, typu parametra a počtu parametrov funkcie Pre každú kompilovaciu jednotku testovaného zdrojového programu sú spracované informácie o funkcii uložené v príslušnej štruktúre PSD a sú popísané nasledujúce príklady zdrojového kódu:
V uvedenom programe void StructTypeTest3(myy_struct mm_struct[2])Uložená štruktúra PSD je nasledovná:
Významy každého uzla v PSD súbore sú nasledovné: ●StructTypeTest3 predstavuje názov funkcie, parmType0 predstavuje typ parametra a parmNum predstavuje počet parametrov ●mm_struct predstavuje symbol funkčného parametra, baseType1 predstavuje klasifikáciu typov (základný dátový typ, typ konštrukcie, ukazovateľový typ, nulový typ), typ predstavuje špecifické typy, vrátane int, char, short, long, double, float, bool a tieto typy neznamienkových a ďalších základných typov, a existujú aj niektoré špeciálne typy, ako napríklad: ZOA_FUN typ predstavuje typ funkcie, StructureOrClassType predstavuje typ štruktúry a podobne a názov predstavuje názov typu štruktúry, zjednotenia a enum typu ●i_int predstavuje základný typ, ktorý je najmenšou priraďovacou jednotkou ●array_one predstavuje typ poľa, RowSize predstavuje dĺžku poľa a pole možno rozdeliť na jednorozmerné, dvojrozmerné polia a podobne ●bod predstavuje typ ukazovateľa, ukazovateľ je rozdelený na ukazovateľ prvej úrovne, ukazovateľ druhej úrovne atď., a všeobecný ukazovateľ sa používa ako funkčný parameter v poli, takže pre základný typ ukazovateľa sa používa metóda dynamického alokačného poľa na priraďovanie hodnôt a používateľ môže podľa potreby upraviť príslušný súbor hodnôt. ● w predstavuje typ bitového poľa a bitfileld predstavuje počet číslic ●funkciaPtr predstavuje typ ukazovateľa funkcie, ktorý analyzuje typ parametra, počet parametrov a informácie o vrátenej hodnote ●Dem znamená typ konzorcia ● dy predstavuje typ enum a hodnota predstavuje hodnotu typu enum ●súbor predstavuje typ štruktúry, SystemVar reprezentuje, že táto premenná patrí k premennej v súbore systémovej hlavičky, pre tento typ premennej Wings pridáva šablónové premenné do knižnice šablón, používatelia môžu priradiť špeciálne hodnoty podľa konkrétnych potrieb. Napríklad typ súboru sa spracováva nasledovne:
Používatelia si môžu tiež pridávať vlastné metódy priraďovania. Pre typy systémov možno Wings odlíšiť od bežných používateľom definovaných typov a pri analýze na zabudovaný typ systému môže zastaviť rekurzívnu analýzu smerom nadol. ●g_int reprezentuje globálne premenné a globalType predstavuje globálne premenné ●next predstavuje štruktúru prepojeného zoznamu a NodeType túto štruktúru predstavuje ako prepojený zoznam ●returnType predstavuje typ návratovej hodnoty funkcie. 2 Automatické generovanie vodičovV uvedenom článku sú analyzované a extrahované štrukturálne informácie globálnych premenných a funkcií a nasledujúce informácie sa používajú na uloženie v PSD na dokončenie celkového generovania riadiaceho rámca testovaného zdrojového programu. Generácia sa delí hlavne na nasledujúce aspekty: Ø Deklarácia globálnych premenných Ø Operácia priraďovania parametrov funkcie podľa počtu parametrov funkcie postupne priraďuje hodnoty Ø Priraďovanie globálnych premenných sa vykonáva postupne podľa počtu globálnych premenných použitých analýzou Ø Volanie pôvodnej funkcie Niektoré body, ktoré treba poznamenať, sú nasledovné: ●Počas procesu generovania ovládačov sa niektoré špeciálne funkcie, ako hlavné funkcie, statické funkcie a pod., dočasne nespracovávajú, pretože k nim vonkajší svet nemá prístup. ● Pre každý testovaný zdrojový súbor sa vygeneruje príslušný ovládač. ● Ovládanie disku je zahrnuté v Driver_main.cpp na automatickú konfiguráciu počtu testov funkcie pomocou makier Riadiaca funkcia generovaná vyššie uvedeným zdrojovým programom je nasledovná: ● Všetky premenné sú pomenované pred názvom pôvodnej premennej, pridaj _ ●Získaním príslušných testovacích dát sa premenné postupne priraďujú ●Pre zabudované parametre systému a špeciálne parametre používateľa je metóda priradenia jednotne konfigurovaná pomocou šablónovej metódy. ●Priraďte a volajte parametre testovanej funkcii. 3 Testovacie dáta sa generujú automatickyNasleduje sada dát generovaných vo formáte PSD na obrázku 3, pričom každá sada dát je uložená vo formáte JSON, čo uľahčuje prehľad hierarchických vzťahov medzi údajmi.
Pre každú kompilačnú jednotku sa predvolene generuje sada testovacích dátových súborov zodpovedajúcich všetkým funkciám a generovanie hodnoty môže byť upravené počtom konfigurácií. 4 MysqlZobrazujú sa výsledky testov programuAko dokončiť generovanie ovládačového frameworku, nasleduje podrobné vysvetlenie kompletného procesu generovania open source programu MySQL. Nasleduje hlavný diagram rozhrania Wings testujúceho Mysql: Kliknite na tlačidlo Súbor, aby ste nastavili adresár projektu zdrojového programu, ktorý sa testuje. Po dokončení nastavení kliknite na funkčnú operáciu, ktorá zahŕňa najmä parsovanie parametrov, generovanie ovládačov, generovanie hodnotových súborov a pridávanie šablón. Na analýzu sa generujú nasledujúce priečinky: Medzi nimi modul na parsovanie parametrov generuje FunXML a GlobalXml, ktoré ukladajú informácie o funkcii a globálnych premenných každej extrahovanej kompilačnej jednotky. Modul na generovanie ovládačov bude generovaný Wings_Projects príslušnom priečinku, ktorý uchováva súbory ovládačov pre každú kompilačnú jednotku Modul generovania hodnoty uchováva vygenerované testovacie dáta pre každú kompilačnú jednotku. Nasledujúci obrázok ukazuje informácie o štruktúre súboru ovládača načítané pomocou Mysql a navigačný strom vľavo je vygenerovaný súbor ovládača, ktorý obsahuje funkcie každej kompilačnej jednotky, ako aj parametre a globálne premenné týchto funkcií. Kliknite na jednu z kompilačných jednotiek, aby ste načítali príslušný ovládačový súbor a príslušný hodnotový súbor. Vyššie uvedené je súbor ovládača a hodnotový súbor zodpovedajúci celkovej generácii Mysql a súbor ovládača je podrobne opísaný v nasledujúcom kóde. ● Pre každú kompilovaciu jednotku je referencia globálnej premennej cez extern. ●Riadiaca funkcia je jednotne pomenovaná ako Driver_XXX metóda, JSON sa používa na získanie testovacích dát a časy predstavujú počet testov jednej funkcie. ●Pre každú operáciu priradenia parametrov sa na postupné priraďovanie hodnôt každej vrstvenej štruktúre používa parsovaný PSD formát úložiska. Aplikácia Wings je veľmi jednoduchá, nasleduje štatistický index generovaných testovacích dát pomocou Mysql kódu, ktorý je možné normálne kompilovať vo Visual Studio 2015 ako príklad, celý proces generovania nevyžaduje žiadny manuálny zásah, stačí formulovať cestu zdrojového kódu, ktorý je potrebné vygenerovať a riadiť. mysqlTestovacie údaje | Mysqlverzia | | CPočet jazykových kódových súborov | | Čas potrebný na analýzu (PSDGeneračný čas) | | Čas potrebný na pohon výroby | | Hodnota je generovaná časom potrebným na jej vygenerovanie | |
Pokyny na konfiguráciu počítača: | Operačný systém | | | Inter(R) Core(TM) i7-7700CPU 3,60GHz | | | | |
Nižšie sú uvedené výsledky získané pomocou nástroja na štatistiku zdrojového kódu, pričom Wings vygeneroval plne automaticky viac ako 4 milióny riadkov platného jednotkového testovacieho kódu. Ešte zaujímavejšie je, že je vidieť, že náklady na manuálny vývoj týchto kódov dosahujú až 1 079 pracovných mesiacov a náklady dosahujú až 10,79 milióna.
Wings si uvedomil prvý krok v skúmaní programu na automatické generovanie programu, prvá verzia je momentálne vydaná, záujemcovia vývojári si ju môžu stiahnuť priamo na code cloud platforme (https://gitee.com/teststars/wings_release), komerčné licencovanie poskytuje mesačné obdobie neobmedzeného funkčného zážitku, môžete rýchlo zažiť magickú silu Wings, verzia Wings v jazyku C podporuje viacero platforiem, ako je Visual Studio, vxworks, gcc, qt a podobne. Wings je navrhnutý a vyvíjaný tímom Nebulas testing (www.teststar.cc) a záujemcovia vývojári sa môžu spojiť s tímom Nebulas prostredníctvom interaktívnej platformy Codecloud, aby prispeli svojimi návrhmi a spätnou väzbou o používaní produktu (za vynikajúce prijaté návrhy môže Nebulas predĺžiť svoje bezplatné používanie aspoň o tri mesiace). Wings má silný gén na výrazné zlepšenie kvality softvéru a v budúcnosti Wings výrazne optimalizuje čitateľnosť automaticky písaných programov (bližšie k úrovni písania dobrých programátorov) a podporu jazyka C++.
|