Integracijsko testiranje na primjeru stvarnog projekta. Integracijsko testiranje

Pretplatite se
Pridružite se zajednici “koon.ru”!
U kontaktu sa:

Pedagoški test

Pedagoški test se definiše kao sistem zadataka određenog sadržaja, sve veće težine, određene forme, koji omogućava da se kvalitetno i efikasno izmeri nivo i oceni struktura pripremljenosti učenika. U pedagoškom testu zadaci su poređani prema rastućoj težini - od najlakših do najtežih.

Integrativni test

Integrativnim testom možemo nazvati test koji se sastoji od sistema zadataka koji ispunjavaju zahtjeve integrativnog sadržaja, forme testa i sve veće težine zadataka usmjerenih na generalnu konačnu dijagnozu pripremljenosti diplomca obrazovne ustanove.

Dijagnostika se sprovodi prezentovanjem ovakvih zadataka, za čije tačne odgovore su potrebna integrisana (generalizovana, jasno međusobno povezana) znanja iz oblasti dve ili više akademskih disciplina. Izrada ovakvih testova je data samo onim nastavnicima koji imaju znanje o nizu akademskih disciplina i razumiju važnu ulogu interdisciplinarno povezivanje u učenju, umeju da kreiraju zadatke za čije tačne odgovore je potrebno od učenika da poseduju znanja iz različitih disciplina i sposobnost primene tih znanja. Integrativnom testiranju prethodi organizacija integrativne obuke. Nažalost, sadašnji razredno-nastavni oblik izvođenja nastave, u kombinaciji s pretjeranom fragmentacijom akademskih disciplina, zajedno s tradicijom predavanja pojedinačnih disciplina (a ne generaliziranih predmeta), dugo će kočiti implementaciju integrativnog pristupa u procesima. učenja i praćenja pripremljenosti.

Prednost integrativnih testova u odnosu na heterogene je u većoj informativnosti svakog zadatka i u manjem broju samih zadataka.

Metodologija izrade integrativnih testova slična je metodologiji za izradu tradicionalnih testova, sa izuzetkom rada na utvrđivanju sadržaja zadataka. Za odabir sadržaja integrativnih testova obavezna je upotreba ekspertskih metoda.

Adaptivni test

Adaptivni test radi kao dobar ispitivač. Prvo, on "postavlja" pitanje umjerene težine, a rezultirajući odgovor se odmah procjenjuje. Ako je odgovor tačan, onda se povećava procjena sposobnosti ispitanika. U ovom slučaju postavlja se teže pitanje. Ako učenik uspješno odgovori na pitanje, sljedeće se bira kao teže, a ako nije uspjelo, lakše se bira sljedeće.

Glavna prednost adaptivnog testa u odnosu na tradicionalni je efikasnost. Adaptivni test može utvrditi nivo znanja ispitanika sa manje pitanja (ponekad se dužina testa smanjuje i do 60%).

U adaptivnom testu, u prosjeku, imate više vremena za razmišljanje o svakom pitanju nego u običnom testu. Na primjer, umjesto da odvoji 2 minute po pitanju, polaznik adaptivnog testa može završiti sa 3 ili 4 minute (u zavisnosti od toga na koliko pitanja treba da odgovori).

Pouzdanost rezultata adaptivnog testa poklapa se sa pouzdanošću testova fiksne dužine. Obje vrste testova podjednako precizno procjenjuju nivo znanja.

Međutim, uvriježeno je mišljenje da je adaptivni test preciznija procjena znanja. Ovo nije istina.

Ukupno aplikacija. Ali između ove dvije faze testiranja, javljaju se i druge. Ja, kao i mnogi drugi, takve testove nazivam integracijom.

Nekoliko riječi o terminologiji

Nakon dosta razgovora sa entuzijastima vođenog testom razvoja, došao sam do zaključka da oni imaju drugačiju definiciju pojma „testovi integracije“. Sa njihove tačke gledišta, integracijski test testira "eksterni" kod, odnosno onaj koji je u interakciji sa "spoljnim svetom", svetom aplikacije.

Dakle, ako njihov kod koristi Ajax ili localStorage ili IndexedDB i stoga se ne može testirati s jediničnim testovima, oni umotavaju tu funkcionalnost u sučelje i ismijavaju to sučelje za jedinične testove, a testiranje stvarne implementacije sučelja naziva se "test integracije" " Sa ove tačke gledišta, "integracioni test" jednostavno testira kod koji je u interakciji sa "stvarnim svetom" izvan onih jedinica koje rade bez obzira na stvarni svet.

Ja, kao i mnogi drugi, koristim termin "integracioni testovi" da se odnosim na testove koji testiraju integraciju dve ili više jedinica (modula, klasa, itd.). Nije važno da li se kriješ stvarnom svijetu preko zaključanih interfejsa.

Moje pravilo da li da koristim stvarne implementacije Ajax i druge I/O (ulaz/izlaz) operacije u integracijskim testovima su sljedeće: ako to možete učiniti, a testovi i dalje rade brzo i ne ponašaju se čudno, onda testirajte I/O. Ako je I/O operacija složena, spora ili samo čudna, onda koristite lažne objekte u svojim integracijskim testovima.

U našem kalkulatoru, na sreću, jedini pravi I/O je DOM. Ne postoje Ajax pozivi ili drugi razlozi za pisanje sprdnji.

Lažni DOM

Postavlja se pitanje: da li je potrebno pisati lažni DOM u integracijskim testovima? Hajde da primenimo moje pravilo. Hoće li korištenje pravog DOM-a usporiti testove? Nažalost, odgovor je da: korištenje pravog DOM-a znači korištenje pravog pretraživača, što testove čini sporim i nepredvidivim.

Odvajamo li većinu koda od DOM-a ili testiramo sve zajedno u E2E testovima? Obje opcije nisu optimalne. Srećom, postoji treće rješenje: jsdom. Ovaj divan i neverovatan paket radi upravo ono što očekujete od njega - implementira DOM u NodeJS.

Radi, brzo je, radi u Nodeu. Ako koristite ovaj alat, možete prestati tretirati DOM kao "I/O". I ovo je veoma važno, jer je odvajanje DOM-a od front-end koda teško, ako ne i nemoguće. (Na primjer, ne znam kako to da uradim.) Pretpostavljam da je jsdom napisan posebno za pokretanje frontend testova pod Nodeom.

Hajde da vidimo kako to radi. Kao i obično, postoji inicijalizacijski kod i postoji testni kod, ali ovaj put ćemo početi s testnim kodom. Ali prije toga, povlačenje.

Povlačenje

Ovaj dio je jedini dio serije koji je fokusiran na određeni okvir. A okvir koji sam izabrao je React. Ne zato što je to najbolji okvir. Čvrsto vjerujem da tako nešto ne postoji. Mislim da čak i ne postoje bolji okviri za specifične slučajeve upotrebe. Jedino u šta verujem je da ljudi treba da koriste okruženje u kome im je najugodnije da rade.

A okvir sa kojim mi je najprijatnije raditi je React, tako da je sljedeći kod napisan u njemu. Ali kao što ćemo vidjeti, frontend integracijski testovi koji koriste jsdom trebali bi raditi u svim modernim okvirima.

Vratimo se korišćenju jsdoma.

Koristeći jsdom

const React = require("react") const e = React.createElement const ReactDom = require("react-dom") const CalculatorApp = require("../../lib/calculator-app") ... opisati( "komponenta aplikacije kalkulatora", funkcija () ( ... it("trebalo bi raditi", funkcija () ( ReactDom.render(e(CalculatorApp), document.getElementById("container")) const displayElement = document.querySelector(" .display") očekivati(displayElement.textContent).to.equal("0")

Zanimljivi su redovi od 10 do 14. Na redu 10 renderujemo komponentu CalculatorApp, koja (ako ste pratili kod u spremištu) takođe prikazuje komponente Display i Keypad.

Zatim provjeravamo da li u redovima 12 i 14 element u DOM-u pokazuje početnu vrijednost 0 na displeju kalkulatora.

I ovaj kod, koji radi pod Node, koristi document ! Globalna varijabla dokumenta je varijabla pretraživača, ali je ovdje u NodeJS-u. Da bi ove linije funkcionisale, potrebna je veoma velika količina koda. Ova veoma velika količina koda koja se nalazi u jsdomu je u suštini potpuna implementacija svega u pretraživaču, bez samog renderovanja!

Red 10, koji poziva ReactDom da renderuje komponentu, takođe koristi dokument (i prozor), pošto ih ReactDom često koristi u svom kodu.

Dakle, ko stvara ove globalne varijable? Test - pogledajmo kod:

Prije (funkcija () ( global.document = jsdom(`

`) global.window = document.defaultView )) after(function () ( delete global.window delete global.document ))

Na liniji 3 kreiramo jednostavan dokument koji samo sadrži div.

Na liniji 4 kreiramo globalni prozor za objekat. Reactu je ovo potrebno.

Funkcija čišćenja će ukloniti ove globalne varijable i one neće zauzimati memoriju.

U idealnom slučaju, varijable dokumenta i prozora ne bi trebalo da budu globalne. U suprotnom, nećemo moći izvoditi testove paralelno sa drugim integracijskim testovima, jer će svi oni prepisati globalne varijable.

Nažalost, oni moraju biti globalni - Reactu i ReactDom-u su potrebni dokument i prozor da bi bili upravo to, pošto im ih ne možete proslijediti.

Upravljanje događajima

Šta je sa ostatkom testa? Hajde da pogledamo:

ReactDom.render(e(CalculatorApp), document.getElementById("container")) const displayElement = document.querySelector(".display") expect(displayElement.textContent).to.equal("0") const digit4Element = dokument. querySelector(".digit-4") const digit2Element = document.querySelector(".digit-2") const operatorMultiply = document.querySelector(".operator-multiply") const operatorEquals = document.querySelector(".operator-equals") ) digit4Element.click() digit2Element.click() operatorMultiply.click() digit2Element.click() operatorEquals.click() Očekujem(displayElement.textContent).to.equal("84")

Ostatak testa testira scenario u kojem korisnik pritisne "42 * 2 =" i treba da dobije "84".

I on to radi na prelep način- uzima elemente koristeći poznatu funkciju querySelector i zatim klikne na njih. Možete čak kreirati događaj i pokrenuti ga ručno koristeći nešto poput:

Var ev = new Event("keyup", ...); document.dispatchEvent(ev);

Ali ugrađena metoda klika funkcionira, pa je koristimo.

Tako jednostavno!

Pronicljivi će primijetiti da ovaj test provjerava potpuno istu stvar kao i E2E test. To je tačno, ali imajte na umu da je ovaj test oko 10 puta brži i sinhrone je prirode. Mnogo je lakše pisati i mnogo lakše čitati.

Zašto, ako su testovi isti, trebamo test integracije? Pa, samo zato što jeste edukativni projekat, ne pravi. Dvije komponente čine cijelu aplikaciju, tako da integracija i E2E testovi rade istu stvar. Ali u stvarnoj aplikaciji, E2E test se sastoji od stotina modula, dok integracijski testovi uključuju nekoliko, možda 10 modula. Dakle, u stvarnoj aplikaciji će biti oko 10 E2E testova, ali stotine integracijskih testova.

Napomena: Predavanje je drugo od tri koja pokrivaju nivoe procesa verifikacije. Tema ovog predavanja je proces integracijskog testiranja, njegovi zadaci i ciljevi. Razmatraju se organizacioni aspekti integracionog testiranja - strukturne i vremenske klasifikacije metoda integracionog testiranja, planiranje integracionog testiranja. Svrha ovog predavanja: dati predstavu o procesu integracijskog testiranja, njegovim tehničkim i organizacijskim komponentama

20.1. Ciljevi i ciljevi integracijskog testiranja

Rezultat testiranja i verifikacije pojedinačnih modula koji čine softverski sistem treba da bude zaključak da su ovi moduli interno konzistentni i usklađeni sa zahtevima. Međutim, pojedinačni moduli rijetko funkcionišu sami, pa je sljedeći zadatak nakon testiranja pojedinačnih modula testiranje ispravne interakcije više modula spojenih u jednu cjelinu. Ova vrsta testiranja se zove integracija. Njegova svrha je da osigura da komponente sistema ispravno rade zajedno.

Integracijsko testiranje takođe pozvan testiranje arhitekture sistema. S jedne strane, ovo ime je zbog činjenice da integracijski testovi uključuju provjere svih mogući tipovi interakcije između softverskih modula i elemenata koji su definisani u arhitekturi sistema - tako se provjeravaju integracijski testovi potpunost interakcije u implementaciji sistema koji se testira. S druge strane, rezultati integracionih testova su jedan od glavnih izvora informacija za proces poboljšanja i pojašnjenja arhitekture sistema, intermodulnih i interkomponentnih interfejsa. Odnosno, sa ove tačke gledišta, provjera integracijskih testova ispravnost interakcija komponenti sistema.

Primjer provjere ispravnosti interakcije mogu biti dva modula, od kojih jedan akumulira protokolarne poruke o primljenim datotekama, a drugi prikazuje ovaj protokol na ekranu. Funkcionalni zahtjevi za sistem navode da poruke trebaju biti prikazane obrnuto kronološkim redom. Međutim, memorijski modul pohranjuje poruke prema naprijed, a izlazni modul koristi stek da ih ispusti obrnutim redoslijedom. Jedinični testovi koji dodiruju svaki modul pojedinačno ovdje neće imati efekta - sasvim je moguća suprotna situacija, u kojoj se poruke pohranjuju obrnutim redoslijedom i izlaze pomoću reda. Potencijalni problem se može otkriti samo provjerom interakcije modula korištenjem integracijskih testova. Ključna tačka ovdje je da sistem kao cjelina šalje poruke obrnutim hronološkim redoslijedom, tj. provjerom izlaznog modula i utvrđivanjem da šalje poruke prema naprijed, ne možemo garantirati da smo otkrili kvar.

Kao rezultat provođenja integracijskog testiranja i eliminacije svih identifikovanih nedostataka, dobija se konzistentna i holistička arhitektura softverski sistem, tj. možemo pretpostaviti da integracijsko testiranje testira arhitekturu i funkcionalne zahtjeve niskog nivoa.

Integracijsko testiranje, po pravilu, je iterativni proces u kojem se testira funkcionalnost sve većeg skupa modula.

20.2. Organizacija integracijskog testiranja

20.2.1. Strukturna klasifikacija metoda integracijskog ispitivanja

Po pravilu, integracijsko testiranje se sprovodi nakon završetka jediničnog testiranja za sve integrisane module. Međutim, to nije uvijek slučaj. Postoji nekoliko metoda za provođenje integracijskog testiranja:

  • testiranje odozdo prema gore;
  • monolitno ispitivanje;
  • testiranje odozgo prema dolje.

Sve ove tehnike se oslanjaju na poznavanje arhitekture sistema, koja se često opisuje kao dijagrami strukture ili dijagrami poziva funkcija. Svaki čvor u takvom dijagramu predstavlja softverski modul, a strelice između njih predstavljaju zavisnosti poziva između modula. Glavna razlika između tehnika integracijskog testiranja je smjer kretanja duž ovih dijagrama i širina pokrivenosti po iteraciji.

Testiranje odozdo prema gore. Kada se koristi ova metoda, podrazumijeva se da se svi softverski moduli uključeni u sistem prvo testiraju, a tek onda kombinuju za integracijsko testiranje. S ovim pristupom, lokalizacija greške je uvelike pojednostavljena: ako se moduli testiraju zasebno, onda se greška kada se raditi zajedno postoji problem sa njihovim interfejsom. Ovim pristupom, područje pretraživanja problema testera je prilično usko, pa je vjerovatnoća da će se kvar ispravno identificirati mnogo veća.


Rice. 20.1.

Kako god, metoda odozdo prema gore testiranje ima značajan nedostatak - potreba za razvojem drajvera i stubova za testiranje jedinica prije izvođenja integracijskog testiranja i potreba za razvojem drajvera i stubova tokom integracijskog testiranja dijela sistemskih modula (slika 20.1)

S jedne strane, drajveri i stubovi su moćan alat za testiranje, s druge strane, njihov razvoj zahtijeva značajne resurse, posebno kada se mijenja sastav integriranih modula, drugim riječima, jedan set drajvera može biti potreban za testiranje jedinice svakog od njih. modul, poseban drajver i stubovi za testiranje integracije dva modula iz seta, poseban - za testiranje integracije tri modula itd. Ovo je prvenstveno zbog činjenice da integracija modula eliminira potrebu za nekim stubovima, a također zahtijeva promjenu drajvera koji podržava nove testove koji utiču na više modula.

Monolitno ispitivanje sugerira da pojedine komponente sistema nisu bile podvrgnute ozbiljnom testiranju. Glavna prednost ove metode je odsustvo potrebe za razvojem testnog okruženja, drajvera i stubova. Nakon što su svi moduli razvijeni, vrši se njihova integracija, zatim se testira sistem u celini. Ovaj pristup ne treba mešati sa testiranjem sistema, što je tema sledećeg predavanja. Unatoč činjenici da će monolitno testiranje provjeriti rad cijelog sistema u cjelini, glavni zadatak ovog testiranja je identificirati probleme u interakciji pojedinačnih modula sistema. Zadatak testiranja sistema je da proceni kvalitativne i kvantitativne karakteristike sistema sa stanovišta njihove prihvatljivosti za krajnjeg korisnika.

Monolitno ispitivanje ima niz ozbiljnih nedostataka.

  • Vrlo je teško identificirati izvor greške (identificirati pogrešan dio koda). Većina modula bi trebala pretpostaviti da postoji greška. Problem se svodi na utvrđivanje koja je od grešaka u svim uključenim modulima dovela do rezultata. Ovo može dovesti do efekata greške. Osim toga, greška u jednom modulu može blokirati testiranje drugog.
  • Teško je organizovati ispravke grešaka. Kao rezultat testiranja, tester bilježi pronađeni problem. Kvar u sistemu koji je izazvao ovaj problem bit će otklonjen od strane programera. Pošto su moduli koji se testiraju po pravilu napisani različiti ljudi, nastaje problem - ko je od njih odgovoran za pronalaženje i otklanjanje kvara? Sa takvom "kolektivnom neodgovornošću", brzina otklanjanja nedostataka može naglo pasti.
  • Proces testiranja je slabo automatiziran. Prednost (nema dodatnog softvera koji prati proces testiranja) pretvara se u nedostatak. Svaka napravljena promjena zahtijeva ponavljanje svih testova.

Top-down testiranje pretpostavlja da proces integracijskog testiranja prati razvoj. Prvo se testira samo najviši nivo kontrole sistema, bez modula više nizak nivo. Zatim se postepeno, oni nižeg nivoa integrišu sa modulima višeg nivoa. Kao rezultat korišćenja ove metode, nema potrebe za drajverima (ulogu drajvera obavlja sistemski modul višeg nivoa), ali ostaje potreba za stubovima (slika 20.2).

Različiti stručnjaci za testiranje imaju različita mišljenja o tome koja metoda je pogodnija za stvarno testiranje softverskih sistema. Jordan to tvrdi testiranje odozgo prema dolje najprikladniji u stvarnim situacijama, a Myers vjeruje da svaki pristup ima svoje prednosti i nedostatke, ali je općenito bolja metoda odozdo prema gore.

U literaturi se često pominje metod integracijskog testiranja objektno orijentisanih softverskih sistema, koji se zasniva na identifikaciji klastera klasa koje zajedno imaju neku zatvorenu i potpunu funkcionalnost. U suštini, ovaj pristup nije nova vrsta integracijskog testiranja, on se samo mijenja minimalni element rezultat integracije. Kada integrišete module u proceduralne programske jezike, možete integrisati bilo koji broj modula, pod uslovom da su stubovi razvijeni. Prilikom integracije klasa u klastere, postoji prilično labavo ograničenje na kompletnost funkcionalnosti klastera. Međutim, čak iu slučaju objektno orijentiranih sistema, moguće je integrirati bilo koji broj klasa korištenjem stub klasa.

Bez obzira na metodu integracijskog testiranja koja se koristi, potrebno je uzeti u obzir stepen pokrivenosti funkcionalnosti sistema integracijskim testovima. Rad je predložio metodu za procjenu stepena pokrivenosti na osnovu kontrolnih poziva između funkcija i tokova podataka. Sa ovom procjenom, mora se izvršiti kod svih modula u dijagramu strukture sistema (svi čvorovi moraju biti pokriveni), svi pozivi moraju biti izvršeni barem jednom (sve veze između čvorova u dijagramu strukture moraju biti pokrivene), sve sekvence poziva mora se izvršiti najmanje jednom (sve staze na dijagramu strukture moraju biti pokrivene).

Napomena: Predavanje je drugo od tri koja pokrivaju nivoe procesa verifikacije. Tema ovog predavanja je proces integracijskog testiranja, njegovi zadaci i ciljevi. Razmatraju se organizacioni aspekti integracionog testiranja - strukturne i vremenske klasifikacije metoda integracionog testiranja, planiranje integracionog testiranja. Svrha ovog predavanja: dati predstavu o procesu integracijskog testiranja, njegovim tehničkim i organizacijskim komponentama

20.1. Ciljevi i ciljevi integracijskog testiranja

Rezultat testiranja i verifikacije pojedinačnih modula koji čine softverski sistem treba da bude zaključak da su ovi moduli interno konzistentni i usklađeni sa zahtevima. Međutim, pojedinačni moduli rijetko funkcionišu sami, pa je sljedeći zadatak nakon testiranja pojedinačnih modula testiranje ispravne interakcije više modula spojenih u jednu cjelinu. Ova vrsta testiranja se zove integracija. Njegova svrha je da osigura da komponente sistema ispravno rade zajedno.

Integracijsko testiranje takođe pozvan testiranje arhitekture sistema. S jedne strane, ovaj naziv je zbog činjenice da integracijski testovi uključuju provjere svih mogućih vrsta interakcija između softverskih modula i elemenata koji su definirani u arhitekturi sistema – dakle, integracijski testovi provjeravaju potpunost interakcije u implementaciji sistema koji se testira. S druge strane, rezultati integracionih testova su jedan od glavnih izvora informacija za proces poboljšanja i pojašnjenja arhitekture sistema, intermodulnih i interkomponentnih interfejsa. Odnosno, sa ove tačke gledišta, provjera integracijskih testova ispravnost interakcija komponenti sistema.

Primjer provjere ispravnosti interakcije mogu biti dva modula, od kojih jedan akumulira protokolarne poruke o primljenim datotekama, a drugi prikazuje ovaj protokol na ekranu. Funkcionalni zahtjevi za sistem navode da poruke moraju biti prikazane obrnutim hronološkim redoslijedom. Međutim, memorijski modul pohranjuje poruke prema naprijed, a izlazni modul koristi stek da ih ispusti obrnutim redoslijedom. Jedinični testovi koji dodiruju svaki modul pojedinačno ovdje neće imati efekta - sasvim je moguća suprotna situacija, u kojoj se poruke pohranjuju obrnutim redoslijedom i izlaze pomoću reda. Potencijalni problem se može otkriti samo provjerom interakcije modula korištenjem integracijskih testova. Ključna stvar ovdje je da sistem kao cjelina šalje poruke obrnutim hronološkim redoslijedom, tj. ako provjerimo izlazni modul i utvrdimo da šalje poruke prema naprijed, ne možemo garantirati da smo pronašli defekt.

Kao rezultat sprovođenja integracionog testiranja i eliminisanja svih identifikovanih nedostataka, dobija se konzistentna i holistička arhitektura softverskog sistema, tj. možemo pretpostaviti da integracijsko testiranje testira arhitekturu i funkcionalne zahtjeve niskog nivoa.

Integracijsko testiranje, po pravilu, je iterativni proces u kojem se testira funkcionalnost sve većeg skupa modula.

20.2. Organizacija integracijskog testiranja

20.2.1. Strukturna klasifikacija metoda integracijskog ispitivanja

Po pravilu, integracijsko testiranje se sprovodi nakon završetka jediničnog testiranja za sve integrisane module. Međutim, to nije uvijek slučaj. Postoji nekoliko metoda za provođenje integracijskog testiranja:

  • testiranje odozdo prema gore;
  • monolitno ispitivanje;
  • testiranje odozgo prema dolje.

Sve ove tehnike se oslanjaju na poznavanje arhitekture sistema, koja se često opisuje kao dijagrami strukture ili dijagrami poziva funkcija. Svaki čvor u takvom dijagramu predstavlja softverski modul, a strelice između njih predstavljaju zavisnosti poziva između modula. Glavna razlika između tehnika integracijskog testiranja je smjer kretanja duž ovih dijagrama i širina pokrivenosti po iteraciji.

Testiranje odozdo prema gore. Kada se koristi ova metoda, podrazumijeva se da se svi softverski moduli uključeni u sistem prvo testiraju, a tek onda kombinuju za integracijsko testiranje. Sa ovim pristupom, lokalizacija grešaka je uveliko pojednostavljena: ako se moduli testiraju odvojeno, onda je greška kada rade zajedno problem sa njihovim interfejsom. Ovim pristupom, područje pretraživanja problema testera je prilično usko, pa je vjerovatnoća da će se kvar ispravno identificirati mnogo veća.


Rice. 20.1.

Kako god, metoda odozdo prema gore testiranje ima značajan nedostatak - potreba za razvojem drajvera i stubova za testiranje jedinica prije izvođenja integracijskog testiranja i potreba za razvojem drajvera i stubova tokom integracijskog testiranja dijela sistemskih modula (slika 20.1)

S jedne strane, drajveri i stubovi su moćan alat za testiranje, s druge strane, njihov razvoj zahtijeva značajne resurse, posebno kada se mijenja sastav integriranih modula, drugim riječima, jedan set drajvera može biti potreban za testiranje jedinice svakog od njih. modul, poseban drajver i stubovi za testiranje integracije dva modula iz seta, poseban - za testiranje integracije tri modula itd. Ovo je prvenstveno zbog činjenice da integracija modula eliminira potrebu za nekim stubovima, a također zahtijeva promjenu drajvera koji podržava nove testove koji utiču na više modula.

Monolitno ispitivanje sugerira da pojedine komponente sistema nisu bile podvrgnute ozbiljnom testiranju. Glavna prednost ove metode je odsustvo potrebe za razvojem testnog okruženja, drajvera i stubova. Nakon što su svi moduli razvijeni, vrši se njihova integracija, zatim se testira sistem u celini. Ovaj pristup ne treba mešati sa testiranjem sistema, što je tema sledećeg predavanja. Unatoč činjenici da će monolitno testiranje provjeriti rad cijelog sistema u cjelini, glavni zadatak ovog testiranja je identificirati probleme u interakciji pojedinačnih modula sistema. Zadatak testiranja sistema je da proceni kvalitativne i kvantitativne karakteristike sistema sa stanovišta njihove prihvatljivosti za krajnjeg korisnika.

Monolitno ispitivanje ima niz ozbiljnih nedostataka.

  • Vrlo je teško identificirati izvor greške (identificirati pogrešan dio koda). Većina modula bi trebala pretpostaviti da postoji greška. Problem se svodi na utvrđivanje koja je od grešaka u svim uključenim modulima dovela do rezultata. Ovo može dovesti do efekata greške. Osim toga, greška u jednom modulu može blokirati testiranje drugog.
  • Teško je organizovati ispravke grešaka. Kao rezultat testiranja, tester bilježi pronađeni problem. Kvar u sistemu koji je izazvao ovaj problem bit će otklonjen od strane programera. Budući da module koji se testiraju po pravilu pišu različiti ljudi, nastaje problem - ko je od njih odgovoran za pronalaženje popravka za kvar? Sa takvom "kolektivnom neodgovornošću", brzina otklanjanja nedostataka može naglo pasti.
  • Proces testiranja je slabo automatiziran. Prednost (nema dodatnog softvera koji prati proces testiranja) pretvara se u nedostatak. Svaka napravljena promjena zahtijeva ponavljanje svih testova.

Top-down testiranje pretpostavlja da proces integracijskog testiranja prati razvoj. Prvo se testira samo najviši nivo kontrole sistema, bez modula nižeg nivoa. Zatim se postepeno, oni nižeg nivoa integrišu sa modulima višeg nivoa. Kao rezultat korišćenja ove metode, nema potrebe za drajverima (ulogu drajvera obavlja sistemski modul višeg nivoa), ali ostaje potreba za stubovima (]. U svojoj srži, ovaj pristup nije nov tip integracijskog testiranja; minimalni element dobijen kao rezultat integracije se jednostavno mijenja. Prilikom integracije modula u proceduralnim programskim jezicima možete integrirati bilo koji broj modula u zavisnosti od razvoja stubova. Kod integracije klasa u klastere postoji prilično labavo ograničenje na kompletnost funkcionalnosti klastera.Međutim, čak iu slučaju objektno orijentisanih sistema, moguće je integrisati bilo koji broj klasa korišćenjem stub klasa.

Bez obzira na metodu integracijskog testiranja koja se koristi, potrebno je uzeti u obzir stepen pokrivenosti funkcionalnosti sistema integracijskim testovima. Rad je predložio metodu za procjenu stepena pokrivenosti na osnovu kontrolnih poziva između funkcija i tokova podataka. Sa ovom procjenom, mora se izvršiti kod svih modula u dijagramu strukture sistema (svi čvorovi moraju biti pokriveni), svi pozivi moraju biti izvršeni barem jednom (sve veze između čvorova u dijagramu strukture moraju biti pokrivene), sve sekvence poziva mora se izvršiti najmanje jednom (sve staze na dijagramu strukture moraju biti pokrivene).

12 odgovora

Integracijsko testiranje je kada testirate više komponenti i kako one rade zajedno. Na primjer, kako drugi sistem komunicira s vašim sistemom ili baza podataka stupa u interakciju sa slojem apstrakcije podataka. Ovo obično zahtijeva kompletnu instaliran sistem, iako u svojim čistim oblicima ne radi.

Funkcionalno testiranje je kada testirate sistem u odnosu na funkcionalne zahtjeve proizvoda. Upravljanje proizvodom/projektom obično bilježi ove podatke, a QA formalizira proces onoga što korisnik treba da vidi i doživi i koji je krajnji rezultat ovih procesa. Ovisno o proizvodu, ovo može ili ne mora biti automatizirano.

Funkcionalno testiranje: Da, testiramo proizvod ili softver u cjelini funkcionalno bez obzira radi li funkcionalno ili ne (testiranje dugmadi, linkova, itd.)

Na primjer: Stranica za prijavu

unesete korisničko ime i lozinku, provjerite da li vas vodi na početnu stranicu ili ne.

Integracijsko testiranje: Da, testirate samo integrirani softver, ali provjeravate gdje se odvija protok podataka i da li se dešavaju bilo kakve promjene u bazi podataka.

Na primjer: Slanje e-pošte

Nekome pošaljete jednu poruku, dolazi do protoka podataka, a takođe i do promjene u bazi (poslana tabela povećava vrijednost za 1)

Nadam se da vam je ovo pomoglo.

Ovo je važna razlika, ali nažalost nikada nećete naći saglasnost. Problem je u tome što ih većina programera definira sa vlastite tačke gledišta. Ovo je vrlo slično raspravi o Plutonu. (Da je bliže Suncu, da li bi to bila planeta?)

Jedinično testiranje je lako definirati. Testira CUT ( Kod pod testom) i ništa drugo. (Pa, što je manje moguće.) To znači da su to sprdnje, izigravanja i mečevi.

Na drugom kraju spektra je ono što mnogi ljudi nazivaju testiranjem sistemske integracije. Ovo je testiranje što je više moguće, ali još uvijek tražite greške u vašem CUT-u.

Ali šta je sa ogromnim prostorom između?

  • Na primjer, što ako provjerite malo više od CUT? Što ako ste omogućili Fibonacci funkciju umjesto da koristite fiksnu vrijednost koju ste unijeli? Ja bih to nazvao funkcionalnim testiranjem, ali svijet se ne slaže sa mnom.
  • Šta ako ste uključili time() ili rand()? Ili šta ako nazovete http://google.com? Ja bih ovo nazvao testiranjem sistema, ali opet sam sam.

Zašto je ovo važno? Zato što su sistemski testovi nepouzdani. Oni su neophodni, ali ponekad mogu propasti iz razloga koji su van vaše kontrole. S druge strane, funkcionalni testovi bi uvijek trebali proći, a ne nasumično; ako su brzi, mogu se koristiti od samog početka za korištenje Test-Driven Development-a bez previše pisanja velika količina testove za vašu internu implementaciju. Drugim riječima, mislim da su jedinični testovi možda komplikovaniji nego što vrijede, a ja sam u dobrom društvu.

Postavio sam testove na 3 ose, sa svim nulama prilikom testiranja jedinica:

  • Funkcionalno testiranje: Korištenje stvarnog koda sve dublje i dublje u svoj stek poziva.
  • Integracijsko testiranje: sve veći i veći vaš stek poziva; drugim riječima, testiranje vašeg CUT-a pokretanjem koda koji će ga koristiti.
  • Testiranje sistema: sve više jedinstvenih operacija (O/S planer, sat, mreža, itd.).

Test bi lako mogao biti sva 3 do različitog stepena.

Funkcionalno testiranje: Ovo je proces testiranja u kojem se testira svaka komponenta modula. Na primjer: ako web stranica sadrži tekstualno polje, trebate označiti potvrdne okvire za radiobot, dugmad i padajuće menije itd.

Integracijsko testiranje: Proces u kojem se testira protok podataka između dva modula.

Integracijsko testiranje. Integracijsko testiranje nije ništa drugo nego testiranje različitih modula. Trebali biste provjeriti odnos između modula. Na primjer, otvorite facebook onda vidite stranicu za prijavu nakon što unesete login id i lozinku možete vidjeti facebook početnu stranicu tako da je stranica za prijavu jedan modul, a početna stranica drugi modul. trebate provjeriti vezu između njih samo kada ste prijavljeni, tada bi trebala biti otvorena samo početna stranica, a ne okvir za poruke ili bilo šta drugo. Postoje dvije glavne vrste integracijskog testiranja: pristup TOP-DOWN i pristup BOTTOM UP.

Funkcionalno testiranje. U funkcionalnom testiranju treba razmišljati samo o ulazu i izlazu. U ovom slučaju morate razmišljati kao pravi korisnik. Testiranje onoga što ste dali i kakav rezultat ste dobili je funkcionalno testiranje. samo treba paziti na izlaz. Uz funkcionalno testiranje, ne morate testirati kodiranje aplikacije ili softvera.

Test funkcionalnog testiranja fokusira se na funkcionalnost i prateću funkcionalnost aplikacije. Funkcionalnost aplikacije mora raditi ispravno ili ne.

U testu integracijskog testiranja, morate provjeriti ovisnost između modula ili podmodula. Primjer za unose modula mora biti ispravno prikazan i prikazan u drugom modulu.

Integracijski test: - Kada je testiranje jedinice obavljeno i problemi sa povezanim komponentama su riješeni, tada se sve potrebne komponente moraju integrirati u jedan sistem kako bi mogao izvršiti operaciju. Nakon kombinovanja komponenti sistema Da bi se proverilo da li sistem radi ispravno ili ne, ova vrsta testiranja se naziva integracijsko testiranje.

Funkcionalno testiranje: - Testiranje je uglavnom podijeljeno u dvije kategorije: 1. Funkcionalno testiranje 2. Nefunkcionalno testiranje **Funkcionalno testiranje: - Za provjeru da li softver radi prema zahtjevima korisnika ili ne. ** Nefunkcionalno testiranje: - Za provjeru da li softver ispunjava kriterije kvalitete kao što su stres test, sigurnosni test itd.

Obično Klijent daje zahtjeve samo za funkcionalni test, a za nefunkcionalni test zahtjeve ne treba spominjati, ali je aplikacija potrebna za obavljanje ovih aktivnosti.

Rekao bih da su i jedni i drugi usko povezani i da ih je jako teško razlikovati. Po mom mišljenju, integracijsko testiranje je podskup funkcionalnog testiranja.

Provjera funkcionalnosti temelji se na početnim zahtjevima koje dobijete. Testirat ćete ponašanje aplikacije prema očekivanjima u odnosu na zahtjeve.

Kada je u pitanju integracijsko testiranje, to je interakcija između modula. Ako modul šalje ulaz, modul B ga može obraditi ili ne.

Integracijsko testiranje

Možete vidjeti kako različiti moduli sistema rade zajedno. Uglavnom se odnosimo na integrisanu funkcionalnost različitih modula, a ne na različite komponente sistema. Za efikasan rad U bilo kom sistemu ili softverskom proizvodu, svaka komponenta mora biti međusobno sinhronizovana. U većini slučajeva, alat koji smo koristili za testiranje integracije biće onaj koji smo koristili za testiranje jedinica. Koristi se u teške situacije kada testiranje jedinice nije dovoljno za testiranje sistema.

Funkcionalno testiranje

Može se definirati kao testiranje pojedinca funkcionalnost moduli. Odnosi se na testiranje softverskog proizvoda na individualnom nivou kako bi se provjerila njegova funkcionalnost. Testni slučajevi su dizajnirani da testiraju softver za očekivane i neočekivane rezultate. Ova vrsta testiranja se radi više iz perspektive korisnika. Odnosno, uzima u obzir korisnikova očekivanja za unos tipa. Naziva se i testiranje crne kutije, a naziva se i testiranje zatvorene kutije

Povratak

×
Pridružite se zajednici “koon.ru”!
U kontaktu sa:
Već sam pretplaćen na zajednicu “koon.ru”