Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 13725|Svar: 1

[C++] Vinger - Lad enhedstests genereres intelligent og automatisk

[Kopier link]
Opslået på 06/08/2018 14.30.37 | | | |
Vinger-Gør enhedstests intelligente og fuldt automatiseredeforord
Enhedstest er en meget effektiv metode til at sikre softwarekvalitet, hvad enten det er ud fra konceptet tidlig intervention i testning eller fra karakteristika ved enhedstests, der kan verificeres ved høj hastighed uden at blive påvirket af brugergrænsefladen, så den testdrevne udvikling, som industrien anbefaler, den testdriver, der nævnes her, refererer mere til enhedstestdriveren. Dog udfører det generelle udviklingsteam stadig sjældent enhedstests systematisk, og testen af applikationssoftware udføres i højere grad af professionelle testteams til at udføre black box-tests. Den største udfordring ved enhedstest er ikke, at input og output ikke kan bestemmes, da det trods alt allerede er bestemt i moduludviklingsfasen, men at skrivningen af enhedstestcases vil kræve mange udviklerarbejdstimer, og ifølge relevante statistikker vil tiden for enhedstestcases endda langt overstige selve funktionens udviklingstid. Her er nogle af de mest almindelige grunde til, at udvikling ikke skriver enhedstests:
●Kravene er altid uendelige, og der er stadig funktionelle krav, der skal realiseres i næste fase, og der er ikke tid til at fylde enheden
●Der er for mange enhedstests til at supplere, og der er ingen måde at starte på, så jeg modstår subjektivt.
● Enhedstests er svære at skrive. På den ene side kan grunden være, at implementeringen af funktionelle funktioner ikke er rimelig nok, og på den anden side findes der ingen (eller ukendte) nyttige enhedstest-rammeværk og mock-rammeværk.
● Enhedstests er ikke inkluderet i arbejdsbyrden.
For det andet er de funktionelle krav stadig ustabile, og omkostningsydelsen ved at skrive enhedstests er ikke høj. Med andre ord, hvis kravene ændres i morgen, vil ikke kun den funktionelle kode blive skrottet, men også enhedstestene. Hvis du ikke skriver enhedstests, vil denne del af indsatsen ikke være forgæves.
Faktisk er rodårsagen til ovenstående punkter, at enhedstestskrivningen tager for meget tid, hvilket til sidst fører til tab af kraft i den testdrevne motor, hvilket får den smukke vision for testdrevet udvikling til at gå i stå i det virkelige scenarie, fordi det er for svært og dyrt at bygge motoren til denne kørsel. De forskellige "x"-enheder på markedet og enhedstest-rammeværk løser kun problemet med at generere testdrevne ydre rammer, uden nogen brugslogik og datagenereringsmuligheder baseret på dyb programforståelse. Derfor gør det udviklere modstandsdygtige i forskellige udviklingsrelaterede scenarier. Udgivelsen af Wings (i øjeblikket for C) løser et af de største problemer for programmører og har potentiale til fundamentalt at ændre status quo for enhedstest, hvilket effektivt vil lette presset fra systemniveau black box-testning og automatiseret test baseret på massive menneskelige ressourcer.
Begrænsningstestcases genereres automatisk af programmer, og den mest kritiske underliggende teknologi er kompleks parameterparsing-teknologi. Det vil sige, at den vilkårligt kan definere indlejret niveau rekursiv parsing på compiler-niveau for vilkårligt komplekse typer. Uden dette gennembrud inden for denne kritiske teknologi ville det automatiske testcase-genereringssystem enten være kommercielt inkompetent eller udvikle sig til at producere kompatible testdata med meget lav effektivitet. For eksempel kan det berømte fuzzing-værktøj American Fuzzy Lop ikke identificere den type struktur, som brugerens program kræver, og skal udvikle søgealgoritmen baseret på det yderste lag. Programmets karakteristika er, at inputtet på grænsefladeniveau og datakravene for et internt modul er langt væk, og de eksterne data transformeres normalt lag for lag af kompleks transformation for at blive den datastrukturtype, der kræves af det interne modul, så mængden af beregning og tid, der kræves for at udforske fra det ydre lag, vil være utænkelig. Baseret på American Fuzzy Lop skal det interne modul i programmet udforskes på dage for at kunne generere en legitim SQL-sætning, langt fra minutter eller timer. En anden begrænsning er, at de input, som hvert program kan overtage, er omhyggeligt strukturerede og kompilerede data med et stort antal regler, og det er meget urealistisk og ekstremt tidskrævende at generere disse data gennem tilfældige + udforskende metoder. Derfor er det ikke muligt at generere auto-genererede use cases både fra black box og det yderste input.
Hvis den anvendelsesbaserede form genereres ud fra analysen af softwarens interne struktur, er det nødvendigt at have en dyb forståelse af softwarens kompileringsstruktur. Et levedygtigt system til generering af testcases bør baseres på midten af programmet (nøgleindgangspunktet) som det mest passende testindgangspunkt. Inputtene fra disse moduler har omdannet fuzzy input til højt strukturerede parametre. Så længe disse komplekse strukturer kan identificeres, kan de komplekse datatyper nedbrydes til simple datatyper trin for trin, og parameterkonstruktionen kan færdiggøres samtidig, kan genereringen af drivende anvendelsestilfælde automatisk gennemføres.
Modulbaseret testning, som kan klassificeres som traditionel enhedstest, er den bedste måde at finde og indeholde fejl i F&U-fasen. Dog er der behov for udvikling af et stort antal drivere på grund af begrænsningerne ved enhedstest, og promovering og anvendelse i branchen er stærkt begrænset. Selvfølgelig kan enhedstests også udføres efter at systemet er integreret for at undgå at bygge virtuelle stubprogrammer.
Nebulas Testings Wings-produkt, som blev lanceret i verden for første gang for få dage siden, er et intelligent og fuldt automatiseret system til generering af enhedstestcases, som har undersøgt og løst følgende vanskeligheder, og som nu deles med dig.
(1) Dybdegående analyse af programparametre
Wings bruger compilerens underliggende teknologi til at danne modulobjekter baseret på inputkildefilen i henhold til funktionen. Objektet indeholder inputparametrene for funktionen, returværditypen og anden information, som kan bruges af driverfunktionsmodulet og testcasemodulet. Hver fil er en enhed, der udfører dybdegående analyse af hver parameter i hver funktion i den, og kan opnå præcis parsing og dekomponering for indlejrede typer, komplekse typer osv., forklare komplekse typer lag for lag som grundlæggende datatyper og generere en beskrivelsesfil (PSD) af parameterstrukturen.
(2) Funktionsdrev automatisk generering af moduler
Ifølge formatoplysningerne i PSD-filen genereres alle driverfunktioner i kildeprogrammet under test automatisk, og enhedstestprocessen er ikke længere afhængig af, at udviklerne manuelt skriver testfunktioner, men behøver kun at kompilere de genererede driverfunktioner og de testfiler samlet, og testresultaterne kan udføres og testresultaterne kan ses. Testdriveren genererer automatisk programmet baseret på PSD-beskrivelsen, bygger fuldt automatisk alle parametre og nødvendige globale variable, der driver testen under test, og kan generere en struktureret testdriver i henhold til hierarkiet af komplekse variable, hvilket kan spare meget tid ved at skrive enhedstestcases.
(3) Automatisk generering og styring af testdata
Den bruges til automatisk at generere testdata, som svarer til de oplysninger, der udtrækkes af testfunktionen, og dataene gemmes i en JSON-fil med en bestemt hierarkisk logisk relation. Dataene og datatypen efter dekomposition og udvidelse svarer til hinanden. Brugere kan vilkårligt marginalisere disse data efter forretningskrav og bruge JSON-filer til at vise dem på en struktureret og hierarkisk måde, hvilket er meget tydeligt. Testdataene inkluderer værdierne af globale variable og parameterværdierne, når den testede funktion kaldes.
Wings tilbyder en enhedstestmetode til automatisk generering af driverfunktioner, som hovedsageligt omfatter følgende trin:
Figur 1: Enhedstestdrevet byggeflow
1   Udtrækning af informationen fra det testede program
Strukturinformationen i det testede program omfatter hovedsageligt de globale variable og funktionsinformation i programmet, og funktionsinformationen omfatter hovedsageligt antallet af parametre, parametertyper og returværdityper for funktionen. Det vigtigste er at udtrække symbolinformation og typeinformation for nogle komplekse typer og analysere dem til grundlæggende datatyper lag for lag for at fuldføre konstruktionen af globale variable og funktionsparametre.
Typerne af variable er generelt opdelt i grundtyper, konstruktionstyper, pointertyper og nulltyper. Wings bruger den underliggende kompilationsteknologi til at håndtere forskellige variabeltyper på forskellige måder.
(1) Grundlæggende typer, såsom usigneret int u_int=20, Wings vil parse navnet på variablen til u_int og datatypen til usigneret int.
(2) Konstruktionstyper, konstruktionstyper opdeles groft i arrays, structs, commons og enumerationstyper.
● Arraytype, såsom intarray[2][3], arraynavnet er array, type int og længde af 2D-array, adfærd 2, kolonne 3.
●Strukturtype, for strukturer som arrays, struktur-linkede lister osv., forskellige markører er opdelt.
(3) Pointertype, f.eks. int **ptr = 0; , parser pointeren som en niveau 2-pointer af int-type.
(4) Null-type, som opløses til at være NULL.
(5) Systemtyper, såsom Fil, size_t osv., markeres som systemtyper og tilføjes til skabelonen og tildeles af brugeren.
(6) Funktionspointertype, analyser returværditypen, parametertypen og antallet af parametre for funktionen
For hver kompileringsenhed i kildeprogrammet under test gemmes den parsede funktionsinformation i den tilsvarende PSD-struktur, og følgende kildekodeeksempler beskrives:
   

I ovenstående program annulleres StructTypeTest3(myy_struct mm_struct[2])Den gemte PSD-struktur er som følger:

Betydningerne af hver node i PSD-filen er som følger:
●StructTypeTest3 repræsenterer funktionsnavnet, parmType0 repræsenterer parametertypen, og parmNum repræsenterer antallet af parametre
●mm_struct repræsenterer symbolet for funktionsparameteren, baseType1 repræsenterer klassifikationen af typer (grundlæggende datatype, konstruktionstype, pointertype, nulltype), type repræsenterer specifikke typer, herunder int, char, short, long, double, float, bool, og disse typer usignerede typer og andre grundlæggende typer, og der findes nogle specielle typer såsom: ZOA_FUN type repræsenterer funktionstype, StructureOrClassType repræsenterer struct-typen osv., og navnet repræsenterer navnet på struct-, union- og enum-typen
●i_int repræsenterer basistypen, som er den mindste tildelingsenhed
●array_one repræsenterer array-typen, RowSize repræsenterer længden af arrayet, og arrayet kan opdeles i endimensionelle arrays, todimensionale arrays osv
●point repræsenterer pointertypen, pointeren er opdelt i første niveau pointer, anden-niveau pointer osv., og den generelle pointer bruges som en funktionsparameter som et array, så for den grundlæggende type peger bruges den dynamiske allokeringsarray-metode til at tildele værdier, og brugeren kan ændre den tilsvarende værdifil efter behov.
● w repræsenterer typen af bitfelt, og bitfileld repræsenterer antallet af cifre
●functionPtr repræsenterer funktionspegertypen, som analyserer henholdsvis parametertypen, antallet af parametre og returværdiinformationen
●Dem står for consortium type
● dy repræsenterer enum-typen, og værdien repræsenterer værdien af enum-typen
●fil repræsenterer strukturtypen, SystemVar repræsenterer, at denne variabel tilhører variablen i systemheaderfilen, for denne type variabel tilføjer Wings skabelonvariabler til skabelonbiblioteket, brugere kan tildele særlige værdier efter specifikke behov. For eksempel håndteres filtypen som følger:

Brugere kan også tilføje deres egne tildelingsmetoder. For systemtyper kan Wings adskilles fra almindelige brugerdefinerede typer, og når man parser til systemets indbyggede type, kan det stoppe rekursiv analyse nedad.
●g_int repræsenterer globale variable, og globalType repræsenterer globale variable
●next repræsenterer den linkede listestruktur, og NodeType repræsenterer denne struktur som en linket liste
●returnType repræsenterer funktionen med returværdien.
2   Automatisk generering af førere
I ovenstående artikel analyseres og udtrækkes de strukturelle oplysninger om globale variable og funktioner, og følgende information bruges til at gemme i PSD for at fuldføre den samlede generering af den styrende ramme for kildeprogrammet under test.
Produktionen er hovedsageligt opdelt i følgende aspekter:
Ø Deklaration af globale variable
Ø Tildelingsoperation af funktionsparametre, ifølge antallet af funktionsparametre, tildel værdier i tur og ordning
Ø Tildelingen af globale variable udføres sekventielt i henhold til antallet af globale variable, der anvendes i analysen
Ø kald af den oprindelige funktion
Nogle punkter at bemærke er som følger:
●Under drivergenereringsprocessen behandles nogle særlige funktioner, såsom hovedfunktioner, statiske funktioner osv., ikke midlertidigt, fordi de ikke kan tilgås af omverdenen.
● For hver kildefil under test genereres en tilsvarende driverfil.
● Drevstyring er inkluderet i Driver_main.cpp for automatisk at konfigurere antallet af tests af funktionen via makroer
Driverfunktionen, der genereres af ovenstående kildeprogram, er som følger:
● Alle variable navngives før navnet på den oprindelige variabel, tilføj _
●Ved at opnå de tilsvarende testdata tildeles variablerne skiftevis
●For systemets indbyggede parametre og brugerens særlige parametre konfigureres tildelingsmetoden ensartet gennem skabelonmetoden.
●Tildel og kald parametre til den funktion, der testes.
3   Testdata genereres automatisk
Følgende er et sæt data genereret i PSD-format i figur 3, hvor hvert datasæt gemmes i JSON-format, hvilket gør det lettere at se den hierarkiske sammenhæng mellem dataene.

For hver kompileringsenhed genereres et sæt testdatafiler, der svarer til alle funktioner, som standard, og værdigenereringen kan ændres med antallet af konfigurationer.
4 MysqlProgramtestresultater vises
Hvordan man færdiggør genereringen af driver-rammeværket, følger en detaljeret forklaring af den komplette genereringsproces af open source-programmet MySQL.
Følgende er hovedgrænsefladediagrammet for Wings, der tester Mysql:
Klik på Fil-knappen for at sætte projektmappen for kildeprogrammet under test. Når indstillingerne er færdige, klikker du på funktionsoperationen, som hovedsageligt omfatter parameterparsing, drivergenerering, værdifilgenerering og tilføjelse af skabeloner. Følgende mapper genereres til analysen:
Blandt dem genererer parameterparsing-modulet FunXml og GlobalXml, som gemmer funktionsinformationen og den globale variabelinformation for hver udtrukket kompileringsenhed henholdsvis.
Drivergenereringsmodulet vil blive genereret Wings_Projects tilsvarende mappe, som gemmer driverfilerne for hver kompilationsenhed
Værdigenereringsmodulet gemmer de genererede testdata for hver kompilationsenhed.
Følgende figur viser informationen om driverfilstrukturen, som Mysql indlæser, og navigationstræet til venstre er den genererede driverfil, som indeholder funktionerne for hver kompilationsenhed samt parametrene og globale variable for funktionerne. Klik på en af kompileringsenhederne for at indlæse den tilsvarende driverfil og den tilsvarende værdifil.
Ovenstående er driverfilen og værdifilen, der svarer til den samlede generering af Mysql, og driverfilen beskrives detaljeret i følgende kode.
● For hver kompileringsenhed er referencen for den globale variabel ved ekstern.
●Driverfunktionen kaldes ensartet Driver_XXX-metoden, JSON bruges som metode til at opnå testdata, og gange repræsenterer antallet af tests af en enkelt funktion.
●For hver parametertildelingsoperation bruges det parsede PSD-lagringsformat til at tildele værdier til hver lagstruktur én gang.
Anvendelsen af Wings er meget enkel; følgende er et statistisk indeks over de genererede testdata ved hjælp af Mysql-kode, som kan kompileres normalt i Visual Studio 2015 som eksempel; hele genereringsprocessen kræver ikke manuel indgriben, kun at formulere den vej, kildekoden skal genereres og drives.
MySQLTestdata
  
Mysqlversion
  
5.5
CAntal sprogkodefiler
578Personer
Tid brugt på at analysere (PSDGenerationstid)
149.099
Den tid, det tager at drive produktionen
27,461s
Værdien genereres ud fra den tid, det tager at generere den
84.974
Computerkonfigurationsinstruktioner:
  
Operativsystem
  
Windows7
Processor
Inter(R) Core(TM) i7-7700cpu 3,60GHz
Hukommelse
8,00 GB
Systemtype
64Bit
Nedenfor er resultaterne opnået ved hjælp af kildekode-statistikværktøjet, med over 4 millioner linjer gyldig enhedstestkode genereret fuldt automatisk af Wings. Endnu mere interessant er, at det kan ses, at omkostningerne ved manuel udvikling af disse koder er så høje som 1.079 mand-måneder, og omkostningerne er op til 10,79 millioner.
Wings har realiseret det første skridt i udforskning ved programmet automatisk at generere programmet, den første version er i øjeblikket udgivet, interesserede udviklere kan downloade det direkte på code cloud-platformen (https://gitee.com/teststars/wings_release), kommerciel licensering giver en måneds ubegrænset funktionsperiode, du kan hurtigt opleve Wings' magiske kraft, Wings c-sprogversion understøtter flere platforme, såsom Visual Studio, VXWORKS, GCC, QT osv. Wings er designet og udviklet af Nebulas testteam (www.teststar.cc), og interesserede udviklere kan komme i kontakt med Nebulas testteam via Codeclouds interaktive platform for at bidrage med deres designidéer og feedback på produktbrug (for de fremragende forslag kan Nebulas forlænge sin gratis brugsperiode med mindst tre måneder). Wings har et stærkt, underliggende gen til markant at forbedre softwarekvaliteten, og i fremtiden vil Wings dybt optimere læsbarheden af automatisk skrevne programmer (tættere på skriveniveauet hos dygtige programmører) og understøttelse af C++-sproget.





Tidligere:Udvikling af Ethereum smart contracts gennem Nethereum og .NET
Næste:Tencent Cloud-drevfejl, der får brugere til at "fuldstændig miste data"
Opslået på 06/08/2018 15.39.42 |
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com