Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 13725|Odgovoriti: 1

[C++] Krila - Naj se enotski testi generirajo inteligentno in samodejno

[Kopiraj povezavo]
Objavljeno na 6. 08. 2018 14:30:37 | | | |
Krila-Naj bodo enotni testi inteligentni in popolnoma avtomatiziranipredgovor
Enotsko testiranje je zelo učinkovit način za zagotavljanje kakovosti programske opreme, bodisi z vidika koncepta zgodnje intervencije v testiranju ali iz značilnosti enotskih testov, ki jih je mogoče preverjati z visoko hitrostjo brez vpliva uporabniškega vmesnika, zato se testni gonilnik, omenjen v tem testu, bolj nanaša na gonilnik enotskega testa. Vendar pa splošna razvojna ekipa še vedno redko sistematično izvaja enotske teste, testiranje aplikacijske programske opreme pa večinoma izvajajo profesionalne testne ekipe za črne skrinjice. Največja težava enotskega testiranja ni v tem, da vhoda in izhoda ni mogoče določiti, saj je to že določeno v fazi razvoja modula, temveč v tem, da pisanje enotskih testnih primerov zahteva veliko delovnih ur razvijalca, in glede na ustrezne statistike bo čas enotskih testnih primerov celo bistveno presegel čas razvoja same funkcije. Tukaj je nekaj najpogostejših razlogov, zakaj razvoj ne piše enotskih testov:
●Zahteve so vedno neskončne, še vedno obstajajo funkcionalne zahteve, ki jih je treba uresničiti v naslednji fazi, in ni časa za polnjenje enote
●Preveč je enotnih testov, ki bi jih lahko dopolnili, in ni načina, da bi začeli, zato se subjektivno upiram.
● Enotski testi so zahtevni za pisanje. Po eni strani je razlog morda ta, da implementacija funkcionalnih funkcij ni dovolj razumna, po drugi strani pa ni (ali ni znanih) uporabnih enotskih testnih okvirjev in simulacij.
● Enotski testi niso vključeni v delovno obremenitev.
Drugič, funkcionalne zahteve so še vedno nestabilne, stroškovna učinkovitost pisanja enotskih testov pa ni visoka. Z drugimi besedami, če se zahteve jutri spremenijo, ne bo odstranjena le funkcionalna koda, ampak tudi enotski testi. Če ne pišete enotnih testov, ta del truda ne bo zaman.
Pravzaprav je glavni vzrok zgornjih točk, da je pisanje enotskih testov preveč časovno zahtevno, kar na koncu vodi do izgube moči testno vodenega pogona, zaradi česar se čudovita vizija testno vodenega razvoja v resničnem scenariju ustavi, saj je izdelava pogona za ta pogon pretežka in draga. Različne "x" enote na trgu in ogrodja za enotsko testiranje rešujejo le problem generiranja testno vodenih zunanjih okvirjev, brez kakršnekoli logike primerov uporabe in zmožnosti generiranja podatkov, ki temeljijo na globokem razumevanju programa. Zaradi tega so razvijalci odporni v različnih razvojnih scenarijih. Izdaja Wings (trenutno za C) rešuje eno največjih težav za programerje in ima potencial, da temeljito spremeni status quo enotskega testiranja, kar bo učinkovito olajšalo pritisk sistemskega črnega skrinjskega testiranja in avtomatiziranega testiranja, ki temelji na ogromnih človeških virih.
Testni primeri omejitev se samodejno generirajo s strani programov, najpomembnejša osnovna tehnologija pa je tehnologija za kompleksno razčlenjevanje parametrov. To pomeni, da lahko poljubno definira gnezdeno rekurzivno razčlenjevanje na ravni prevajalnika za poljubno kompleksne tipe. Brez tega preboja v tej ključni tehnologiji bi bil sistem za samodejno generiranje testnih primerov bodisi komercialno nesposoben bodisi bi se razvil v doseganje skladnih testnih podatkov z zelo nizko učinkovitostjo. Na primer, znano orodje za zamegljevanje American Fuzzy Lop ne more prepoznati vrste strukture, ki jo zahteva uporabniški program, in mora razviti iskalni algoritem glede na zunanjo plast. Značilnosti programa so, da so vhodni podatki na ravni vmesnika in podatkovne zahteve notranjega modula zelo oddaljeni, zunanji podatki pa se običajno plast za plastjo kompleksne transformacije transformirajo, da postanejo tip podatkovne strukture, ki ga zahteva notranji modul, zato je količina izračuna in časa, potrebnega za raziskovanje iz zunanje plasti, nepredstavljiva. Na podlagi ameriškega Fuzzy Lop je za generiranje legitimne SQL izjave treba notranji modul programa raziskati v dneh, daleč od minut ali ur. Druga omejitev je, da so vhodni podatki, ki jih lahko vsak program prevzame, skrbno strukturirani in prevedeni z velikim številom pravil, zato je zelo nerealno in izjemno časovno potratno generirati te podatke z naključnimi + raziskovalnimi metodami. Zato ni izvedljivo generirati samodejno generiranih primerov uporabe tako iz črne skrinjice kot iz najbolj zunanjega vhoda.
Če je uporaba zasnovana na analizi notranje strukture programske opreme, je potrebno imeti globoko razumevanje strukture prevajanja programske opreme. Izvedljiv sistem za generiranje testnih primerov bi moral temeljiti na sredini programa (ključni vstopni točki) kot najprimernejši vstopni točki testa. Vhodi teh modulov so zamegljene vhode spremenili v zelo strukturirane parametre. Dokler je mogoče te kompleksne strukture identificirati, se lahko kompleksni podatkovni tipi postopoma razgradijo v preproste podatkovne tipe, hkrati pa se lahko dokonča konstrukcija parametrov, generiranje gonilnih primerov uporabe pa se lahko samodejno zaključi.
Testiranje na osnovi modulov, ki ga lahko uvrstimo med tradicionalno enotsko testiranje, je najboljši način za odkrivanje in zadrževanje napak v fazi raziskav in razvoja. Vendar pa je zaradi omejitev enotnega testiranja treba razviti veliko število gonilnikov, promocija in uporaba v industriji pa sta močno omejeni. Seveda se lahko enotski testi izvedejo tudi po integraciji sistema, da se izognemo gradnji virtualnih stub programov.
Izdelek Wings podjetja Nebulas Testing, ki je bil prvič predstavljen na svetu pred nekaj dnevi, je inteligenten in popolnoma avtomatiziran sistem za generiranje enotnih testnih primerov, ki je preučil in rešil naslednje težave ter je zdaj deljen z vami.
(1) Poglobljena analiza parametrov programa
Wings uporablja osnovno tehnologijo prevajalnika za oblikovanje modulskih objektov na podlagi vhodne izvorne datoteke glede na funkcijo. Objekt vsebuje vhodne parametre funkcije, tip vrnjene vrednosti in druge informacije, ki jih lahko uporabita modul funkcije gonilnika in modul testnega primera. Vsaka datoteka je enota, ki izvaja poglobljeno analizo vsakega parametra vsake funkcije v njej in lahko doseže natančno razčlenjevanje in razčlenjevanje za gnezdene tipe, kompleksne tipe itd., razlaga kompleksne tipe plast za plastjo kot osnovne podatkovne tipe ter generira opisno datoteko (PSD) strukture parametrov.
(2) Samodejna generacija modulov s funkcijskim pogonom
Glede na formatne informacije PSD datoteke se vse funkcije gonilnika izvornega programa, ki se testira, samodejno generirajo, proces enotnega testiranja pa ne potrebuje več ročnega pisanja testnih funkcij razvijalcev, temveč mora le skupaj prevesti generirane funkcije gonilnika in izvorne datoteke pod testiranjem, pri čemer se lahko rezultati testa izvedejo in si jih lahko ogledajo. Testni gonilnik samodejno generira program na podlagi opisa PSD, popolnoma samodejno gradi vse parametre in potrebne globalne spremenljivke, ki poganjajo testni test, ter lahko ustvari strukturiran testni gonilnik glede na hierarhijo kompleksnih spremenljivk, kar lahko prihrani veliko časa pri pisanju enotskih testnih primerov.
(3) Samodejno generiranje in upravljanje testnih podatkov
Uporablja se za samodejno generiranje testnih podatkov, ki ustrezajo informacijam, pridobljenim s testno funkcijo, podatki pa so shranjeni v JSON datoteki z določenim hierarhičnim logičnim odnosom. Podatki in podatkovni tip po razčlenitvi in razširitvi se medsebojno ujemata. Uporabniki lahko te podatke poljubno marginalizirajo glede na poslovne zahteve in uporabijo JSON datoteke za strukturiran in hierarhičen prikaz, kar je zelo jasno. Testni podatki vključujejo vrednosti globalnih spremenljivk in vrednosti parametrov, ko je funkcija pod testom poklicana.
Wings ponuja metodo enotnega testiranja za samodejno generiranje funkcij voznika, ki večinoma vključuje naslednje korake:
Slika 1: Potek gradnje, ki temelji na enotskih testih
1   Pridobivanje informacij iz programa, ki ga testiramo
Informacije o strukturi programa, ki ga testiramo, vključujejo predvsem globalne spremenljivke in informacije o funkcijah v programu, informacije o funkcijah pa predvsem število parametrov, tipov parametrov in vrst povratnih vrednosti funkcije. Najpomembneje je, da izluščimo informacije o simbolih in tipih za nekatere kompleksne tipe ter jih analiziramo v osnovne podatkovne tipe plast za plastjo, da dokončate gradnjo globalnih spremenljivk in funkcijskih parametrov.
Vrste spremenljivk so na splošno razdeljene na osnovne tipe, konstrukcijske tipe, kazalce in ničelne tipe. Wings uporablja osnovno tehnologijo prevajanja za različne vrste spremenljivk na različne načine.
(1) Osnovni tipi, kot je unsigned int u_int=20, Wings bo razčlenil ime spremenljivke v u_int in podatkovni tip v unsigned int.
(2) Vrste konstrukcij, vrste konstrukcij so približno razdeljene na matrike, strukture, skupne in vrste za naštevanje.
● Tip polja, kot je intarray[2][3], ime polja je polje, tip int in dolžina 2D polja, vedenje 2, stolpec 3.
●Tip strukture, za strukture kot tabele, povezane sezname struktur itd., se različni označevalci delijo.
(3) tip kazalec, npr. int **ptr = 0; , razčlenjuje kazalec kot kazalnik stopnje 2 int tipa.
(4) Ničelni tip, ki se razreši kot NULL.
(5) Sistemske vrste, kot so File, size_t itd., so označene kot sistemske vrste in jih uporabnik doda v predlogo ter jim dodeli.
(6) Tip kazalca funkcije, analiziraj tip vrnjene vrednosti, tip parametra in število parametrov funkcije
Za vsako prevajalno enoto izvornega programa, ki ga testiramo, se informacije o razčlenjeni funkciji shranijo v ustrezno strukturo PSD, opisani pa so naslednji primeri izvorne kode:
   

V zgornjem programu void StructTypeTest3(myy_struct mm_struct[2])Shranjena struktura PSD je naslednja:

Pomen vsakega vozlišča v PSD datoteki je naslednji:
●StructTypeTest3 predstavlja ime funkcije, parmType0 predstavlja tip parametra, parmNum pa število parametrov
●mm_struct predstavlja simbol parametra funkcije, baseType1 predstavlja klasifikacijo tipov (osnovni tip podatkov, tip konstrukcije, tip kazalec, ničelni tip), tip predstavlja specifične tipe, vključno z int, char, short, long, double, float, bool in te vrste tipov brez predznaka ter drugimi osnovnimi tipi, obstajajo pa tudi posebni tipi, kot so: ZOA_FUN tip predstavlja tip funkcije, StructureOrClassType predstavlja tip strukture itd., ime pa predstavlja ime vrste strukture, unije in enuma
●i_int predstavlja osnovni tip, ki je najmanjša enota dodelitve
●array_one predstavlja vrsto polja, RowSize predstavlja dolžino polja, polje pa lahko razdelimo na enodimenzionalne, dvodimenzionalne polja itd
●Točka predstavlja tip kazalca, kazalec je razdeljen na kazalec prve ravni, kazalec druge ravni itd., splošni kazalec pa se uporablja kot funkcijski parameter kot polje, tako da se za osnovni tip kazalca uporablja metoda dinamičnega polja za dodeljevanje vrednosti, uporabnik pa lahko ustrezno datoteko prilagodi glede na potrebe.
● w predstavlja vrsto bitnega polja, bitfileld pa število števk
●funkcijPtr predstavlja tip kazalca funkcije, ki analizira tip parametra, število parametrov in informacije o vrnitvi vrednosti
●Dem pomeni consortium type
● dy predstavlja tip enuma, vrednost pa vrednost tipa enuma
●datoteka predstavlja tip strukture, SystemVar predstavlja, da ta spremenljivka pripada spremenljivki v datoteki sistemske glave, za to vrsto spremenljivke Wings doda predloge spremenljivk v knjižnico predlog, uporabniki lahko dodelijo posebne vrednosti glede na specifične potrebe. Na primer, tip datoteke se obravnava takole:

Uporabniki lahko dodajo tudi svoje metode dodeljevanja. Za sistemske tipe lahko Wings ločimo od običajnih uporabniško določenih tipov, in ko se razčlenjuje na vgrajeni tip sistema, lahko rekurzivno analizo ustavi navzdol.
●g_int predstavlja globalne spremenljivke, globalType pa globalne spremenljivke
●next predstavlja strukturo povezanega seznama, NodeType pa predstavlja to strukturo kot povezani seznam
●returnType predstavlja tip vrnjene vrednosti funkcije.
2   Samodejna generacija gonilnikov
V zgornjem članku so analizirane in izluščene strukturne informacije globalnih spremenljivk in funkcij, naslednje informacije pa se uporabijo za shranjevanje v PSD, da se dokonča celotna generacija pogonskega okvira izvornega programa, ki ga testiramo.
Proizvodnja je večinoma razdeljena na naslednje vidike:
Ø Deklaracija globalnih spremenljivk
Ø Operacija dodeljevanja funkcijskih parametrov, glede na število funkcijskih parametrov, dodeli vrednosti zaporedoma
Ø Dodelitev globalnih spremenljivk se izvaja zaporedno glede na število globalnih spremenljivk, uporabljenih v analizi
Ø Klic izvirne funkcije
Nekatere točke, ki jih je treba izpostaviti, so naslednje:
●Med postopkom generiranja gonilnikov nekatere posebne funkcije, kot so glavne funkcije, statične funkcije itd., začasno niso obdelane, ker do njih zunanji svet ne more dostopati.
● Za vsako testno izvorno datoteko se ustvari ustrezna gonilna datoteka.
● V Driver_main.cpp je vključen nadzor pogona za samodejno konfiguracijo števila testov funkcije preko makrov
Gonilna funkcija, ki jo generira zgornji izvorni program, je naslednja:
● Vse spremenljivke so poimenovane pred imenom izvirne spremenljivke, dodamo _
●Z dobivanjem ustreznih testnih podatkov se spremenljivke dodelijo zaporedoma
●Za vgrajene parametre sistema in posebne parametre uporabnika je metoda dodeljevanja enotno konfigurirana preko metode predloge.
●Dodelite in pokličite parametre funkciji, ki jo testiramo.
3   Testni podatki se samodejno generirajo
Naslednji nabor podatkov je generiran v PSD formatu na sliki 3, vsak nabor podatkov je shranjen v JSON formatu, kar olajša pregled hierarhičnega odnosa podatkov.

Za vsako enoto prevajanja se privzeto generira nabor testnih podatkovnih datotek, ki ustrezajo vsem funkcijam, generiranje vrednosti pa je mogoče prilagoditi glede na število konfiguracij.
4 MysqlPrikazani so rezultati testov programa
Kako dokončati generiranje ogrodja gonilnikov, spodaj je podrobna razlaga celotnega procesa generiranja odprtokodnega programa MySQL.
Spodaj je glavni diagram vmesnika, ki ga Wings testira pri MySQL:
Kliknite gumb Datoteka, da nastavite mapo projekta izvornega programa, ki ga testirate. Ko so nastavitve zaključene, kliknite na funkcijo, ki večinoma vključuje razčlenjevanje parametrov, generiranje gonilnikov, generiranje vrednostnih datotek in dodajanje predlog. Za analizo se generirajo naslednje mape:
Med njimi modul za razčlenjevanje parametrov generira FunXML in GlobalXml, ki shranjujeta informacije o funkciji in globalne spremenljivke vsake izvlečene enote prevajanja.
Modul za generiranje gonilnikov bo generiran Wings_Projects ustrezni mapo, ki hrani gonilniške datoteke za vsako prevajalno enoto
Modul za generiranje vrednosti shranjuje generirane testne podatke za vsako enoto.
Naslednja slika prikazuje informacije o strukturi datoteke gonilnika, ki jih naloži Mysql, navigacijsko drevo na levi pa je generirana datoteka gonilnika, ki vsebuje funkcije vsake prevajalne enote ter parametre in globalne spremenljivke funkcij. Kliknite na eno od kompilacijskih enot, da naložite ustrezno datoteko gonilnika in ustrezno datoteko z vrednostmi.
Zgoraj je datoteka gonilnika in datoteka z vrednostjo, ki ustrezata celotni generaciji Mysql, datoteka gonilnika pa je podrobno opisana v naslednji kodi.
● Za vsako prevajalno enoto je referenca globalne spremenljivke po extern.
●Funkcija gonilnika je enotno poimenovana kot Driver_XXX metoda, JSON se uporablja za pridobivanje testnih podatkov, časi pa predstavljajo število testov posamezne funkcije.
●Za vsako operacijo dodeljevanja parametrov se uporablja razčlenjen PSD format za shranjevanje, ki dodeli vrednosti vsaki strukturi plasti posebej.
Uporaba Wings je zelo preprosta, spodaj je statistični indeks generiranih testnih podatkov z uporabo Mysql kode, ki jo je mogoče normalno prevesti v Visual Studio 2015, na primer, celoten proces generiranja ne zahteva ročne intervencije, potrebno je le oblikovati pot izvorne kode, ki jo je treba generirati in voditi.
mysqlTestni podatki
  
Mysqlrazličica
  
5.5
CŠtevilo datotek kode jezika
578Posamezniki
Čas, potreben za analizo (PSDGeneracijski čas)
149.099s
Čas, potreben za pogon proizvodnje
27.461s
Vrednost je ustvarjena s časom, ki je potreben za njeno ustvarjanje
84.974s
Navodila za konfiguracijo računalnika:
  
Operacijski sistem
  
Windows7
procesor
Inter(R) jedro(TM) i7-7700 CPU 3,60GHz
Spomin
8,00GB
Vrsta sistema
64bit
Spodaj so rezultati, pridobljeni z orodjem za statistiko izvorne kode, pri čemer Wings popolnoma samodejno generira več kot 4 milijone vrstic veljavne enotske testne kode. Še bolj zanimivo je, da je videti, da stroški ročnega razvoja teh kod znašajo tudi do 1.079 delovnih mesecev, stroški pa do 10,79 milijona.
Wings je izvedel prvi korak raziskovanja programa za samodejno generiranje programa, prva različica je trenutno izdana, zainteresirani razvijalci jo lahko prenesejo neposredno na platformo Code Cloud (https://gitee.com/teststars/wings_release), komercialno licenciranje omogoča enomesečno obdobje neomejene funkcionalnosti, hitro lahko izkusite čarobno moč Wings, različica Wings v jeziku C podpira več platform, kot je Visual Studio, vxworks, gcc, qt itd. Wings je zasnovan in razvit s strani ekipe za testiranje Nebulas (www.teststar.cc), zainteresirani razvijalci pa lahko stopijo v stik s testno ekipo Nebulas prek interaktivne platforme Codecloud, da prispevajo svoje ideje za oblikovanje in povratne informacije o uporabi izdelka (za odlične predloge lahko Nebulas podaljša obdobje brezplačne uporabe za vsaj tri mesece). Wings ima močan, temeljni gen za močno izboljšanje kakovosti programske opreme, v prihodnosti pa bo Wings močno optimiziral berljivost samodejno napisanih programov (bližje ravni pisanja dobrih programerjev) in podporo jeziku C++.





Prejšnji:Razvoj Ethereum pametnih pogodb preko Nethereum in .NET
Naslednji:Okvara oblačnega diska Tencent, zaradi katere uporabniki "popolnoma izgubijo podatke"
Objavljeno na 6. 08. 2018 15:39:42 |
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com