|
Spārni-Padariet vienību testus inteliģentus un pilnībā automatizētuspriekšvārds Vienības testēšana ir ļoti efektīvs līdzeklis, lai nodrošinātu programmatūras kvalitāti neatkarīgi no tā, vai tas ir no agrīnas iejaukšanās testēšanas koncepcijas viedokļa vai no vienību testu īpašībām, kuras var pārbaudīt lielā ātrumā, neietekmējot lietotāja interfeisu, tāpēc nozares atbalstītā testa virzītā attīstība, tajā minētais testa vadītājs vairāk attiecas uz vienības testa draiveri. Tomēr vispārējā izstrādes komanda joprojām reti sistemātiski veic vienību testus, un lietojumprogrammatūras testu vairāk veic profesionālas testēšanas komandas, lai veiktu melnās kastes testus. Vienības testēšanas lielākās grūtības nav tādas, ka ievadi un izvadi nevar noteikt, galu galā tas jau ir noteikts moduļa izstrādes stadijā, bet gan tas, ka vienības testa gadījumu rakstīšana patērēs daudz izstrādātāja cilvēkstundu, un saskaņā ar attiecīgo statistiku vienības testa gadījumu laiks pat ievērojami pārsniegs pašas funkcijas izstrādes laiku. Šeit ir daži no visbiežāk sastopamajiem iemesliem, kāpēc izstrāde neraksta vienības testus: ● Prasības vienmēr ir bezgalīgas, un nākamajā posmā joprojām ir funkcionālas prasības, un nav laika aizpildīt vienību ● Ir pārāk daudz vienību testu, kas jāpapildina, un nav iespējas sākt, tāpēc es subjektīvi pretojos. ● Vienības testus ir grūti uzrakstīt. No vienas puses, iemesls var būt tas, ka funkcionālo funkciju īstenošana nav pietiekami saprātīga, un, no otras puses, nav (vai nav zināmu) noderīgu vienību testa sistēmu un izdomātu ietvaru. ● Vienības testi nav iekļauti darba slodzē. Otrkārt, funkcionālās prasības joprojām ir nestabilas, un vienības testu rakstīšanas izmaksu efektivitāte nav augsta. Citiem vārdiem sakot, ja prasības rīt mainīsies, tiks atcelts ne tikai funkcionālais kods, bet arī vienību testi. Ja jūs nerakstāt vienības testus, tad šī centienu daļa nebūs veltīga. Faktiski iepriekš minēto punktu galvenais iemesls ir tas, ka vienības testa rakstīšana ir pārāk laikietilpīga, kas galu galā noved pie testa dzinēja jaudas zuduma, izraisot skaisto redzējumu par testa virzītu attīstību reālajā scenārijā, jo ir pārāk grūti un dārgi izveidot dzinēju šim diskam. Dažādas "x" vienības tirgū un vienību testēšanas sistēmas atrisina tikai testa vadītu ārējo rāmju ģenerēšanas problēmu, bez jebkādas lietošanas gadījumu loģikas un datu ģenerēšanas iespējām, pamatojoties uz dziļu programmas izpratni. Tāpēc tas padara izstrādātājus izturīgus dažādos ar izstrādi saistītos scenārijos. Spārnu izlaišana (pašlaik C) atrisina vienu no lielākajām programmētāju problēmām, un tai ir potenciāls fundamentāli mainīt vienības testēšanas status quo, kas efektīvi mazinās sistēmas līmeņa melnās kastes testēšanas un automatizētās testēšanas spiedienu, pamatojoties uz milzīgiem cilvēkresursiem. Ierobežojumu testa gadījumus automātiski ģenerē programmas, un vissvarīgākā pamatā esošā tehnoloģija ir sarežģīta parametru parsēšanas tehnoloģija. Tas nozīmē, ka tas var patvaļīgi definēt ligzdotā līmeņa rekursīvo parsēšanu kompilatora līmenī patvaļīgi sarežģītiem tipiem. Bez šī izrāviena šajā kritiskajā tehnoloģijā automātiskā testa gadījumu ģenerēšanas sistēma būtu vai nu komerciāli nespējīga, vai attīstītos, lai radītu atbilstošus testa datus ar ļoti zemu efektivitāti. Piemēram, slavenais fuzzing rīks American Fuzzy Lop nevar identificēt lietotāja programmai nepieciešamo struktūras veidu, un tam ir jāattīsta meklēšanas algoritms, pamatojoties uz tālāko slāni. Programmas īpašības ir tādas, ka ievade saskarnes līmenī un iekšējā moduļa datu prasības ir tālu, un ārējie dati parasti tiek pārveidoti sarežģītas transformācijas slāni pa slānim, lai kļūtu par datu struktūras tipu, kas nepieciešams iekšējam modulim, tāpēc aprēķinu apjoms un laiks, kas nepieciešams, lai izpētītu no ārējā slāņa, būs neiedomājams. Pamatojoties uz amerikāņu Fuzzy Lop, lai varētu ģenerēt likumīgu SQL paziņojumu, programmas iekšējais modulis ir jāizpēta dienās, tālu no minūtēm vai stundām. Vēl viens ierobežojums ir tas, ka ievades, ko katra programma var pārņemt, ir rūpīgi strukturēti un apkopoti dati ar lielu skaitu noteikumu, un ir ļoti nereāli un ļoti laikietilpīgi ģenerēt šos datus, izmantojot nejaušas + izpētes metodes. Tāpēc nav iespējams ģenerēt automātiski ģenerētus lietošanas gadījumus no melnās kastes, kā arī no tālākās ievades. Ja lietošanas gadījums tiek ģenerēts, analizējot programmatūras iekšējo struktūru, ir nepieciešama dziļa izpratne par programmatūras kompilācijas struktūru. Dzīvotspējīgai testa gadījumu ģenerēšanas sistēmai jābūt balstītai uz programmas vidu (galveno ieejas punktu) kā vispiemērotāko testa ieejas punktu. Šo moduļu ievades ir pārvērtušas izplūdušās ievades ļoti strukturētos parametros. Kamēr šīs sarežģītās struktūras var identificēt, sarežģītos datu tipus soli pa solim var sadalīt vienkāršos datu tipos, un parametru izstrādi var pabeigt vienlaicīgi, braukšanas lietošanas gadījumu ģenerēšanu var automātiski pabeigt. Moduļu testēšana, ko var klasificēt kā tradicionālo vienību testēšanu, ir labākais veids, kā atrast un ierobežot defektus pētniecības un attīstības fāzē. Tomēr vienību testēšanas ierobežojumu dēļ ir jāizstrādā liels skaits draiveru, un veicināšana un pielietojums nozarē ir ļoti ierobežots. Protams, vienību testus var veikt arī pēc sistēmas integrēšanas, lai izvairītos no virtuālo stub programmu veidošanas. Nebulas Testing Wings produkts, kas pasaulē pirmo reizi tika palaists pirms dažām dienām, ir inteliģenta un pilnībā automatizēta vienības testa gadījumu ģenerēšanas sistēma, kas ir pētījusi un atrisinājusi šādas grūtības, un tagad tiek kopīgota ar jums. (1) Programmas parametru padziļināta analīze Wings izmanto kompilatora pamattehnoloģiju, lai veidotu moduļa objektus, pamatojoties uz ievades avota failu atbilstoši funkcijai. Objekts satur funkcijas ievades parametrus, atgrieztās vērtības tipu un citu informāciju, ko var izmantot draivera funkcijas modulis un testa gadījuma modulis. Katrs fails ir vienība, kas veic padziļinātu katra tajā esošās funkcijas parametra analīzi un var panākt precīzu ligzdoto tipu, sarežģītu tipu utt. (2) Funkciju piedziņa automātiska moduļu ģenerēšana Saskaņā ar PSD faila formāta informāciju visas testējamās avota programmas draivera funkcijas tiek automātiski ģenerētas, un vienības testēšanas process vairs nepaļaujas uz izstrādātājiem, lai manuāli rakstītu testa funkcijas, bet tikai jāapkopo ģenerētās draivera funkcijas un testējamie avota faili kopā, un testa rezultātus var izpildīt un testa rezultātus var apskatīt. Testa draiveris automātiski ģenerē programmu, pamatojoties uz PSD aprakstu, pilnībā automātiski veido visus parametrus un nepieciešamos globālos mainīgos, kas vada testējamo testu, un var ģenerēt strukturētu testa draiveri atbilstoši sarežģīto mainīgo hierarhijai, kas var ietaupīt daudz laika, rakstot vienības testa gadījumus. (3) Testēšanas datu automātiska ģenerēšana un pārvaldība To izmanto, lai automātiski ģenerētu testa datus, kas atbilst testa funkcijas iegūtajai informācijai, un dati tiek glabāti JSON failā ar noteiktu hierarhisku loģisku sakarību. Dati un datu tips pēc sadalīšanās un paplašināšanas atbilst viens otram. Lietotāji var patvaļīgi marginalizēt šos datus atbilstoši biznesa prasībām un izmantot JSON failus, lai tos parādītu strukturētā un hierarhiskā veidā, kas ir ļoti skaidrs. Testa dati ietver globālo mainīgo vērtības un parametru vērtības, kad tiek izsaukta testējamā funkcija. Wings nodrošina vienības testēšanas metodi automātiskai vadītāja funkciju ģenerēšanai, kas galvenokārt ietver šādas darbības: 1. attēls: Vienības testa vadīta būvēšanas plūsma 1 Testējamās programmas informācijas iegūšanaTestējamās programmas struktūras informācija galvenokārt ietver globālos mainīgos un funkciju informāciju programmā, un funkcijas informācija galvenokārt ietver funkcijas parametru skaitu, parametru tipus un atgrieztās vērtības tipus. Vissvarīgākais ir iegūt simbolu informāciju un tipa informāciju dažiem sarežģītiem tipiem un analizēt tos pamata datu tipos slāni pa slānim, lai pabeigtu globālo mainīgo un funkciju parametru izveidi. Mainīgo lielumu veidi parasti ir sadalīti pamata tipos, konstrukcijas tipos, rādītāju tipos un nulles tipos. Wings izmanto pamatā esošo kompilācijas tehnoloģiju, lai dažādos veidos apstrādātu dažādus mainīgo veidus. (1) Pamata tipi, piemēram, unsigned int u_int=20, Wings parsēs mainīgā nosaukumu uz u_int un datu tipu uz unsigned int. (2) Būvniecības veidi, būvniecības veidi ir aptuveni sadalīti masīvos, struktūrās, kopīpašumā un uzskaitījuma tipos. ● Masīva tips, piemēram, intarray[2][3], masīva nosaukums ir masīvs, tips int un 2D masīva garums, 2. uzvedība, 3. kolonna. ● Struktūras tips, struktūrām kā masīviem, struktūru saistītiem sarakstiem utt., Dažādi marķieri ir sadalīti. (3) Rādītāja tips, piemēram, int **ptr = 0; , parsē rādītāju kā int tipa 2. līmeņa rādītāju. (4) Null tips, kas ir nolemts kā NULL. (5) Sistēmas tipi, piemēram, fails, size_t utt., tiek atzīmēti kā sistēmas tipi, un lietotājs tos pievieno veidnei un piešķir. (6) Funkcijas rādītāja tips, analizējiet funkcijas atgrieztās vērtības tipu, parametra veidu un parametru skaitu Katrai testējamās avota programmas kompilācijas vienībai parsētās funkcijas informācija tiek glabāta atbilstošajā PSD struktūrā, un ir aprakstīti šādi pirmkoda piemēri:
Iepriekš minētajā programmā anulējiet StructTypeTest3(myy_struct mm_struct[2])Saglabātā PSD struktūra ir šāda:
Katra PSD faila mezgla nozīme ir šāda: ●StructTypeTest3 apzīmē funkcijas nosaukumu, parmType0 apzīmē parametra tipu un parmNum apzīmē parametru skaitu ●mm_struct apzīmē funkcijas parametra simbolu, baseType1 attēlo tipu klasifikāciju (pamata datu tips, konstrukcijas tips, rādītāja tips, nulles tips), tips apzīmē konkrētus tipus, tostarp int, char, short, long, double, float, bool un šāda veida neparakstītus tipus un citus pamata tipus, un ir daži īpaši tipi, piemēram: ZOA_FUN tips apzīmē funkcijas tipu, StructureOrClassType apzīmē struktūras tipu utt., un nosaukums apzīmē struktūras, apvienošanas un uzskaitījuma tipa nosaukumu ●i_int apzīmē bāzes tipu, kas ir mazākā piešķiršanas vienība ●array_one apzīmē masīva tipu, RowSize apzīmē masīva garumu, un masīvu var iedalīt viendimensiju masīvos, divdimensiju masīvos utt ● Punkts apzīmē rādītāja tipu, rādītājs ir sadalīts pirmā līmeņa rādītājā, otrā līmeņa rādītājā utt., un vispārējais rādītājs tiek izmantots kā funkcijas parametrs kā masīvs, tāpēc pamata rādītāja tipam vērtību piešķiršanai tiek izmantota dinamiskā sadales masīva metode, un lietotājs var modificēt atbilstošo vērtību failu atbilstoši vajadzībām. ● w apzīmē bitu lauka tipu, bet bitfileld – ciparu skaitu ●functionPtr apzīmē funkcijas rādītāja tipu, kas attiecīgi analizē parametra tipu, parametru skaitu un atgrieztās vērtības informāciju ● Dem apzīmē konsorcija tipu ● DY apzīmē uzskaitījuma tipu, bet vērtība – uzskaitījuma tipa vērtību ● fails attēlo struktūras tipu, SystemVar pārstāv šo mainīgo pieder mainīgajam sistēmas galvenes failā, šāda veida mainīgajam, Wings pievieno veidnes mainīgos veidnes bibliotēkai, lietotāji var piešķirt īpašas vērtības atbilstoši īpašām vajadzībām. Piemēram, faila tips tiek apstrādāts šādi:
Lietotāji var arī pievienot savas piešķiršanas metodes. Sistēmu tipiem Wings var atšķirt no parastajiem lietotāja definētajiem tipiem, un, analizējot sistēmas iebūvēto tipu, tas var apturēt rekursīvo analīzi uz leju. ●g_int apzīmē globālos mainīgos un globalType apzīmē globālos mainīgos ●Next apzīmē saistīto saraksta struktūru, un NodeType attēlo šo struktūru kā saistītu sarakstu ●returnType ir funkcijas atgrieztās vērtības tips. 2 Automātiska draiveru ģenerēšanaIepriekš minētajā dokumentā tiek analizēta un iegūta globālo mainīgo un funkciju strukturālā informācija, un šāda informācija tiek izmantota, lai saglabātu PSD, lai pabeigtu testējamās avota programmas braukšanas sistēmas vispārējo ģenerēšanu. Paaudze galvenokārt ir sadalīta šādos aspektos: Ø Globālo mainīgo lielumu deklarācija Ø Funkcijas parametru piešķiršanas darbība, atbilstoši funkcijas parametru skaitam, piešķir vērtības pēc kārtas Ø Globālo mainīgo lielumu piešķiršana tiek veikta secīgi atbilstoši analīzē izmantoto globālo mainīgo skaitam Ø Sākotnējās funkcijas izsaukums Daži punkti, kas jāatzīmē, ir šādi: ● Draivera ģenerēšanas procesā dažas īpašas funkcijas, piemēram, galvenās funkcijas, statiskās funkcijas utt., netiek īslaicīgi apstrādātas, jo tām nevar piekļūt ārpasaule. ● Katram testējamajam avota failam tiek ģenerēts atbilstošs draivera fails. ● Piedziņas vadība ir iekļauta Driver_main.cpp, lai automātiski konfigurētu funkcijas testu skaitu, izmantojot makro Iepriekš minētās avota programmas ģenerētā draivera funkcija ir šāda: ● Visi mainīgie ir nosaukti pirms sākotnējā mainīgā nosaukuma, pievienojiet _ ●Iegūstot atbilstošus testa datus, mainīgie tiek piešķirti pēc kārtas ● Sistēmas iebūvētajiem parametriem un lietotāja īpašajiem parametriem piešķiršanas metode tiek vienmērīgi konfigurēta, izmantojot veidnes metodi. ● Piešķiriet un izsauciet parametrus testējamajai funkcijai. 3 Testa dati tiek ģenerēti automātiskiTālāk ir PSD formātā ģenerēto datu kopums 3. attēlā, katra datu kopa tiek saglabāta JSON formātā, atvieglojot datu hierarhiskās attiecības saskatīšanu.
Katrai kompilācijas vienībai pēc noklusējuma tiek ģenerēts testa datu failu kopums, kas atbilst visām funkcijām, un vērtības ģenerēšanu var mainīt pēc konfigurāciju skaita. 4 MysqlTiek parādīti programmas testa rezultātiKā pabeigt draivera ietvara ģenerēšanu, tālāk ir sniegts detalizēts skaidrojums par atvērtā koda programmas MySQL pilnu ģenerēšanas procesu. Tālāk ir galvenā interfeisa shēma Wings, kas testē Mysql: Noklikšķiniet uz pogas Fails, lai iestatītu testējamās avota programmas projekta direktoriju. Kad iestatījumi ir pabeigti, noklikšķiniet uz funkcijas darbības, kas galvenokārt ietver parametru parsēšanu, draivera ģenerēšanu, vērtību failu ģenerēšanu un veidnes pievienošanu. Analīzei tiek ģenerētas šādas mapes: Starp tiem parametru parsēšanas modulis ģenerē FunXml un GlobalXml, kas attiecīgi saglabā katras iegūtās kompilācijas vienības funkciju informāciju un globālo mainīgo informāciju. Draivera ģenerēšanas modulis tiks ģenerēts Wings_Projects atbilstošo mapi, kurā tiek glabāti draivera faili katrai kompilācijas vienībai Vērtību ģenerēšanas modulis saglabā ģenerētos testa datus katrai kompilācijas vienībai. Nākamajā attēlā parādīta MySQL ielādētā draivera faila struktūras informācija, un kreisajā pusē esošais navigācijas koks ir ģenerētais draivera fails, kas satur katras kompilācijas vienības funkcijas, kā arī funkciju parametrus un globālos mainīgos. Noklikšķiniet uz vienas no kompilācijas vienībām, lai ielādētu atbilstošo draivera failu un atbilstošo vērtību failu. Iepriekš minētais ir draivera fails un vērtību fails, kas atbilst kopējai MySQL paaudzei, un draivera fails ir detalizēti aprakstīts nākamajā kodā. ● Katrai kompilācijas vienībai globālā mainīgā atsauce ir extern. ● Draivera funkcija ir vienādi nosaukta kā Driver_XXX metode, JSON tiek izmantots kā testa datu iegūšanas veids, un laiki atspoguļo vienas funkcijas testu skaitu. ● Katrai parametru piešķiršanas operācijai tiek izmantots parsētais PSD glabāšanas formāts, lai pēc kārtas piešķirtu vērtības katrai slāņa struktūrai. Wings pielietojums ir ļoti vienkāršs, tālāk ir ģenerēto testa datu statistiskais indekss, izmantojot Mysql kodu, ko var normāli apkopot Visual Studio 2015 kā piemēru, visam ģenerēšanas procesam nav nepieciešama manuāla iejaukšanās, tikai jāformulē ģenerējamā un vadāmā avota koda ceļš. mysqlTesta dati | MySQLversija | | CValodu kodu failu skaits | | Analīzes laiks (PSDĢenerēšanas laiks) | | Laiks, kas nepieciešams paaudzes virzīšanai | | Vērtība tiek ģenerēta pēc laika, kas nepieciešams tās ģenerēšanai | |
Datora konfigurācijas instrukcijas: | Operētājsistēma | Operētājsistēma Windows 7 | | Inter(R) Core(TM) i7-7700cpu 3.60GHz | | | | |
Zemāk ir rezultāti, kas iegūti, izmantojot pirmkoda statistikas rīku, ar vairāk nekā 4 miljoniem rindu derīga vienības testa koda, ko Wings ģenerē pilnībā automātiski. Vēl interesantāk ir tas, ka var redzēt, ka šo kodu manuālās izstrādes izmaksas ir pat 1,079 cilvēkmēneši, un izmaksas ir pat 10,79 miljoni.
Wings ir realizējis pirmo programmas izpētes soli, lai automātiski ģenerētu programmu, pirmā versija pašlaik ir izlaista, ieinteresētie izstrādātāji to var lejupielādēt tieši koda mākoņa platformā (https://gitee.com/teststars/wings_release), komerciālā licencēšana nodrošina viena mēneša neierobežotu funkciju pieredzes periodu, jūs varat ātri izbaudīt Wings maģisko spēku, Wings c valodas versija atbalsta vairākas platformas, piemēram, vizuālo studiju, vxworks, gcc, qt utt. Spārnus izstrādā un izstrādā Nebulas testēšanas (www.teststar.cc) komanda, un ieinteresētie izstrādātāji var sazināties ar Nebulas testēšanas komandu, izmantojot Codecloud interaktīvo platformu, lai sniegtu savas dizaina idejas un atsauksmes par produktu lietošanu (par lieliskajiem pieņemtajiem ieteikumiem Nebulas var pagarināt bezmaksas lietošanas periodu vismaz par trim mēnešiem). Wings ir spēcīgs, pamatā esošs gēns, kas ievērojami uzlabo programmatūras kvalitāti, un nākotnē Wings pamatīgi optimizēs automātiski rakstīto programmu lasāmību (tuvāk labu programmētāju rakstīšanas līmenim) un atbalstu C++ valodai.
|