Testiranje softvera · Poglavlje 2 · Sedmica 2

Proces i nivoi testiranja

Dio 1 – Test proces

Dio 2 – Nivoi testiranja

Dio 3 – Vrste testova i statičko testiranje

Praksa – recenzija zahtjeva DeliveryApp

Materijale priredio Erkan Islamović

erkan.islamovic@eubd.edu.ba · erkan.islamovic@gmail.com

Šta učimo ovog semestra

Petnaest sedmica: svaka ima tri časa teorije i tri časa praktične nastave. Danas: poglavlje 2 (Sedmica 2, označeno). Isti primjer kroz knjigu: DeliveryApp, narudžba N-1001.

Sed.PoglavljeTeorija (3 časa)Praksa (3 časa)
1Zašto testiramoUvodne priče; greška, defekt, otkaz; sedam principa; DeliveryAppTabela očekivanih cijena rukom
2Proces i nivoiTest proces; nivoi i V-model; vrste; statičko testiranjeRecenzija zahtjeva DeliveryApp
3Manuelno testiranjeTest slučaj; izvještaj o defektu; istraživačko testiranjeTest slučajevi za web stranicu
4Automatizovano testiranjeŠta automatizovati; piramida testova; prvi testPrvi pytest
5Jedinično testiranjeAAA; fixture, parametri, izuzeci; TDDTestovi za dostavu i popust
6Bijela kutijaGraf toka; pokrivenost; ciklomatska složenostcoverage.py do 100 % grana
7Tok podatakaDefinicija i upotreba; anomalije; statička analiza, mutacijeruff, mypy, ručna mutacija
8Crna kutijaEkvivalencija i granice; tabela odlučivanja; stanjaLov na pet grešaka

Šta učimo ovog semestra

Sed.PoglavljeTeorija (3 časa)Praksa (3 časa)
9Model i integracijaModel; strategije integracije; APITestClient za API
10Sistemsko testiranjeSistemsko; performanse i sigurnost; prihvatno i BDDLocust, Gherkin
11OO testiranjeStanje objekta; nasljeđivanje; dvojniciNarudzba, unittest.mock
12Paralelne aplikacijeTrka podataka; zastoj; nestabilni testoviNiti, 1000 ponavljanja
13Web aplikacijeWeb i DOM; Playwright; Page Object, pristupačnostPlaywright za DeliveryApp
14Upravljanje testiranjemTest plan i rizik; metrike; CI/CDGitHub Actions
15Alati, AI, projekatPregled alata; AI u testiranju; ISTQBOdbrana projekta
N-1001 je 24,50 € · od 30,00 € dostava je besplatna

Literatura

  1. J. Popović: Priručnik za test inženjere, CET i Računarski fakultet, Beograd, 2023.
  2. Rakić-Skoković: Priručnik za testiranje softvera, Fakultet tehničkih nauka, Novi Sad, 2013.
  3. G. J. Myers: The Art of Software Testing, 2. izdanje, John Wiley & Sons, 2004.
  4. A. P. Mathur: Foundations of Software Testing, Addison-Wesley Professional, 2008.
Priča za početak · Sedmica 2

Priča za početak

Priča za početak

Dana 27. marta 2008. godine na londonskom aerodromu Heathrow otvoren je novi, ogroman Terminal 5, ponos britanske avijacije, napravljen za nekoliko milijardi funti. Srce terminala bio je automatski sistem za prtljag: kilometri traka i računari koji su trebali svaki kofer odvesti do pravog aviona. Prvog jutra sistem je počeo zastajati. Radnici nisu mogli ući na vrijeme jer nisu znali gdje je parking za osoblje, nekoliko traka je stalo, a softver nije znao šta da radi s koferima koji su stigli kad ih nije očekivao. Već prvog dana otkazani su deseci letova, a putnici su putovali bez prtljaga.

Prema izvještajima iz tih dana, u prvih nekoliko dana otkazano je skoro 300 letova, a oko 15 000 kofera odvojeno je od vlasnika. Sistem je prije otvaranja testiran, ali uglavnom dio po dio. Ono što nije dovoljno testirano bilo je sve zajedno: hiljade stvarnih kofera, stvarni radnici koji prvi put rade u novoj zgradi, i sve situacije koje se dešavaju u pravom jutru na aerodromu. Jedan dio sistema radio je, drugi dio je radio, ali sistem nije radio.

Zašto ovo poglavlje

U poglavlju 1 naučili smo šta su defekt i otkaz i zašto testiramo, i napravili prvu tabelu očekivanih rezultata. Ovo poglavlje odgovara na pitanje kako je testiranje organizovano. Prvo upoznajemo test proces: korake od planiranja do izvještaja. Zatim nivoe testiranja, od jedne funkcije do cijelog sistema u rukama korisnika, i kako se slažu u V-model i u agilni rad. Na kraju vrste testova i statičko testiranje: pronalaženje defekata čitanjem, bez pokretanja programa. Na praktičnoj nastavi radimo recenziju zahtjeva DeliveryApp i nalazimo nejasnoću koja je promakla svima, pa i programerima.

Riječi ovog poglavlja (1/3)

  • Test proces – dogovoren niz aktivnosti testiranja: planiranje, analiza, dizajn, implementacija, izvršavanje i završetak.
  • Test baza – dokumenti iz kojih izvodimo testove (zahtjevi, pravila, modeli, kod).
  • Test uslov – nešto što treba provjeriti (npr. „besplatna dostava na granici 30,00 €”).
  • Test slučaj – konkretan ulaz, koraci i očekivani rezultat za jedan test uslov.
  • Testni materijal (testware) – sve što testiranje proizvede: plan, test slučajevi, podaci, skripte, izvještaji.
  • Nivo testiranja – grupa testova za jedan sloj sistema: komponentni, integracioni, sistemski, prihvatni.

Riječi ovog poglavlja (2/3)

  • V-model – model u kojem svaka faza razvoja ima svoj par na strani testiranja.
  • Funkcionalno i nefunkcionalno testiranje – provjera šta sistem radi, i kakav je dok to radi (brzina, sigurnost, upotrebljivost).
  • Potvrdno testiranje – ponavljanje testa koji je pao, da se potvrdi da je defekt ispravljen.
  • Regresiono testiranje – provjera da izmjena nije pokvarila nešto što je ranije radilo.
  • Dim-test (smoke test) – kratak test najvažnijih funkcija, da se vidi da sistem uopšte „diše”.
  • Statičko testiranje – pronalaženje defekata bez pokretanja programa: čitanjem i alatima koji analiziraju kod.

Riječi ovog poglavlja (3/3)

  • Recenzija – pregled dokumenta ili koda od strane drugih ljudi, radi pronalaženja defekata.

Ciljevi poglavlja

Nakon poglavlja možete:

nabrojati aktivnosti test procesa i za svaku reći šta nastaje; izvesti iz pravila test uslove i test slučajeve i povezati ih sljedivošću; razlikovati komponentno, integraciono, sistemsko i prihvatno testiranje po cilju, osnovi, okruženju i izvršiocu; objasniti V-model i testiranje u agilnom timu; razlikovati funkcionalno i nefunkcionalno, potvrdno i regresiono testiranje i dim-test; objasniti statičko testiranje i četiri vrste recenzija; provesti recenziju zahtjeva DeliveryApp i zapisati nejasnoće; pokazati da Python zaokružuje 214,5 centi na 214 i objasniti zašto je to defekt u zahtjevu, a ne nužno u kodu.

Plan poglavlja – Sedmica 2: tri časa teorije i tri časa praktične nastave

ČasSadržajNa času
Teorija 12.1–2.3 Test proces; test uslov i test slučaj; sljedivostOd PP-4 do četiri test slučaja
Teorija 22.4–2.6 Nivoi; V-model; testiranje u agilnom timuHeathrow T5: dijelovi rade, sistem ne
Teorija 32.7–2.9 Vrste testova; statičko testiranje; recenzije21,45 € → popust 2,14 € ili 2,15 €?
Dio 1 · Sedmica 2

Dio 1 – Test proces

2.1 Šest aktivnosti testiranja

Testiranje nije jedna radnja („pokreni program i vidi”), nego niz aktivnosti. ISTQB ih opisuje ovako, a mi ih pratimo na pravilu PP-4 DeliveryApp (od 30,00 € dostava je besplatna):

2.1 Šest aktivnosti testiranja

AktivnostPitanjeŠta nastaje (PP-4)
PlaniranjeŠta testiramo, kako, ko, do kada, kada smo gotovi?plan: obračun cijene testira se prvi, jer je najrizičniji
Praćenje i kontrolaIdemo li po planu? Šta mijenjamo?sedmični pregled: koliko testova napisano, koliko prolazi
AnalizaŠta treba provjeriti?test uslovi: „besplatna dostava na granici”, „dostava ispod granice”
DizajnKako to provjeriti?test slučajevi: 30,00 € na 5 km → 0,00 €; 29,99 € → 3,00 €
ImplementacijaŠta treba pripremiti?podaci (jelovnik, adrese), okruženje, skripte testova
IzvršavanjePokrećemo i poredimorezultat: prolazi / pada; izvještaj o defektu za ono što pada
ZavršetakŠta smo naučili?izvještaj o testiranju, arhiviran testni materijal, pouke

2.1 Šest aktivnosti testiranja

Aktivnosti se ne moraju raditi strogo jedna za drugom. U agilnom timu (2.6) one se ponavljaju u svakom sprintu, za svaku korisničku priču, a neke se preklapaju. Ali svaka se mora desiti. Najčešće se preskače analiza: tester odmah piše test slučajeve, i onda pokrije ono što mu prvo padne na pamet, a ne ono što je važno.

Sve što testiranje proizvede (plan, uslovi, slučajevi, podaci, skripte, izvještaji) zove se testni materijal (testware). Čuva se kao i kod: u Gitu, s verzijama.

Ukratko – 2.1 Šest aktivnosti testiranja

  • Test proces ima aktivnosti: planiranje, praćenje i kontrola, analiza, dizajn, implementacija, izvršavanje i završetak.
  • Analiza odgovara na pitanje šta provjeriti, a dizajn kako.
  • U agilnom timu aktivnosti se ponavljaju za svaku priču, ali se nijedna ne preskače.
  • Testni materijal se čuva kao kod, u Gitu.

2.2 Test baza, test uslov, test slučaj

Tri pojma vode od pravila do testa:

  1. Test baza je ono iz čega izvodimo testove: pravila PP-1 do PP-6, korisničke priče s kriterijima prihvatanja, modeli (dijagram stanja narudžbe), API ugovor, pa i sam kod.
  2. Test uslov je šta treba provjeriti, rečeno opšte. Iz PP-4: „dostava je besplatna za artikle od 30,00 € i više”; „dostava se plaća ispod 30,00 €”; „besplatna dostava gleda iznos prije popusta” (iz PP-5).
  3. Test slučaj je konkretan ulaz, preduslovi, koraci i očekivani rezultat za jedan uslov.

2.2 Test baza, test uslov, test slučaj

Test uslov (iz PP-4 i PP-5)Test slučajUlazOčekivano
TU-4.1 besplatno od 30,00 €TS-4.1aartikli 30,00 €, 5 kmdostava 0,00 €
TU-4.1TS-4.1bartikli 32,00 €, 2,5 km (N-1002)dostava 0,00 €, ukupno 32,00 €
TU-4.2 plaća se ispod 30,00 €TS-4.2aartikli 29,99 €, 5 kmdostava 3,00 €
TU-4.3 besplatno gleda iznos prije popustaTS-4.3aartikli 32,00 €, 2,5 km, STUDENT10dostava 0,00 €; popust 3,20 €; ukupno 28,80 €

Posljednji red je zanimljiv. Poslije popusta artikli koštaju 28,80 €, ispod 30,00 €. Da je pravilo glasilo „gleda iznos poslije popusta”, dostava bi se plaćala. PP-5 kaže „prije popusta”, pa je dostava besplatna. Bez ovog test uslova, takav detalj lako promakne i programeru i testeru.

Jedan test uslov obično ima više test slučajeva (granica i vrijednost daleko od granice), a jedan test slučaj ponekad pokriva više uslova.

Ukratko – 2.2 Test baza, test uslov, test slučaj

  • Test baza su dokumenti iz kojih izvodimo testove; test uslov kaže šta provjeriti; test slučaj daje konkretan ulaz i očekivani rezultat.
  • Iz PP-4 i PP-5 nastaju uslovi o besplatnoj dostavi, plaćenoj dostavi i iznosu prije popusta.
  • N-1002 sa STUDENT10 ima besplatnu dostavu i ukupno 28,80 €, jer se gleda iznos prije popusta.

2.3 Sljedivost

Sljedivost znači da se za svaki test zna koje pravilo provjerava, i za svako pravilo koji ga testovi provjeravaju. Pravi se kao tabela, matrica sljedivosti:

2.3 Sljedivost

PraviloTest usloviTest slučajeviStanje
PP-1TU-1.1 odbija ispod 5,00 €; TU-1.2 prima od 5,00 €TS-1.1a (4,99 €), TS-1.2a (5,00 €)2 / 2 prolaze
PP-2TU-2.1 do 3 km; TU-2.2 započeti kmTS-2.1a (3 km), TS-2.2a (3,1 km), TS-2.2b (4,2 km)3 / 3
PP-4TU-4.1, TU-4.2, TU-4.3TS-4.1a, TS-4.1b, TS-4.2a, TS-4.3a4 / 4
PP-6TU-6.1 otkazivanje dozvoljeno u NOVA i PRIHVAĆENA; TU-6.2 nije u U_PRIPREMI……

Sljedivost odgovara na tri pitanja koja tester stalno dobija:

  1. „Je li ovo pravilo testirano?” Red u matrici, i odgovor u sekundi.
  2. „Šta treba ponovo testirati ako se pravilo promijeni?” Ako udruženje promijeni PP-2 (dostava poskupi na 2,50 €), matrica pokazuje tačno tri test slučaja koja se mijenjaju.
  3. „Koliko smo gotovi?” Broj pravila s testovima koji prolaze, prema ukupnom broju pravila.

Ukratko – 2.3 Sljedivost

  • Sljedivost povezuje svako pravilo s testovima koji ga provjeravaju, i obrnuto.
  • Matrica sljedivosti odgovara je li pravilo testirano, šta ponoviti kad se pravilo promijeni i koliko smo gotovi.
  • Promjena PP-2 u matrici odmah pokazuje koja tri test slučaja treba izmijeniti.

Provjeri se

  1. Koja aktivnost odgovara na pitanje „šta provjeriti”? Analiza.
  2. Koliko je ukupno za N-1002 sa kodom STUDENT10? 28,80 €: artikli 32,00 €, popust 3,20 €, dostava besplatna jer se gleda iznos prije popusta.
  3. Čemu služi matrica sljedivosti? Da se za svako pravilo vidi koji ga testovi provjeravaju, i obrnuto.

Odgovori: tipka R ili klik na zamućeno polje.

Dio 2 · Sedmica 2

Dio 2 – Nivoi testiranja

2.4 Četiri nivoa

Sistem se testira na više nivoa, od najmanjeg dijela do cijelog sistema u rukama korisnika. Svaki nivo ima svoj cilj, osnovu, okruženje i izvršioca:

2.4 Četiri nivoa

NivoŠta testiramoTest bazaKo običnoPrimjer u DeliveryApp
Komponentno (jedinično)jednu funkciju, klasu ili modul, izolovanokod, dizajnprogramercijena_dostave(4.2, 2150) == 300
Integracionosaradnju komponenti ili sistemaarhitektura, API ugovorprogramer, testerAPI prima narudžbu i upisuje je u bazu
Sistemskocijeli sistem, s kraja na krajzahtjevi, slučajevi korištenja, NZtesterkupac naruči kroz aplikaciju, restoran prihvati, dostavljač preda
Prihvatnoda li sistem odgovara korisniku i poslupotrebe korisnika, ugovor, propisikorisnici, naručilacvlasnik Picerije R-1 jedan dan radi sa DeliveryApp

Na integracionom nivou razlikuju se dvije vrste: integracija komponenti (dijelovi našeg sistema: API i baza) i integracija sistema (naš sistem i tuđi: DeliveryApp i sistem plaćanja, servis mapa).

Prihvatno testiranje ima nekoliko oblika: korisničko (UAT, user acceptance testing: rade li krajnji korisnici svoj posao?), operativno (mogu li ljudi koji održavaju sistem napraviti kopiju, vratiti je, pratiti sistem?), ugovorno i regulatorno (ispunjava li ugovor i zakon, npr. o zaštiti podataka) i alfa i beta testiranje (alfa: korisnici probaju u našem okruženju; beta: odabrani korisnici koriste sistem kod sebe prije zvaničnog početka).

2.4 Četiri nivoa

Priča s Heathrowa je udžbenički primjer šta se desi kad su niži nivoi dobro pokriveni, a sistemsko i operativno prihvatno testiranje nisu urađeni u stvarnim uslovima: s pravim brojem kofera, s radnicima koji prvi put rade u zgradi, sa svim neočekivanim situacijama jednog jutra.

Slika iz života: gradnja automobila. Komponentno testiranje provjerava kočnicu na stolu. Integraciono provjerava kočnicu spojenu s papučicom i točkom. Sistemsko provjerava cijeli auto na poligonu. Prihvatno je kad kupac proba auto u svom gradu i kaže „to je to”.

Slika 2.1 – Četiri nivoa testiranja na primjeru DeliveryApp
Slika 2.1 – Četiri nivoa testiranja na primjeru DeliveryApp

Ukratko – 2.4 Četiri nivoa

  • Nivoi su komponentno, integraciono, sistemsko i prihvatno testiranje, od jedne funkcije do korisnika.
  • Integracija može biti komponenti (naši dijelovi) ili sistema (naš i tuđi sistem).
  • Prihvatno testiranje je korisničko, operativno, ugovorno i regulatorno, te alfa i beta.
  • Heathrow 2008. pokazuje cijenu slabog sistemskog i operativnog testiranja u stvarnim uslovima.

2.5 V-model

V-model crta razvoj i testiranje kao slovo V. Lijeva strana se spušta od opšteg ka detaljnom (zahtjevi korisnika, zahtjevi sistema, arhitektura, detaljan dizajn, kod), a desna se penje od detaljnog ka opštem, s testovima koji provjeravaju svaku lijevu fazu:

2.5 V-model

Lijevo (šta odlučujemo)Desno (kako provjeravamo)
potrebe i zahtjevi korisnikaprihvatno testiranje
zahtjevi sistemasistemsko testiranje
arhitekturaintegraciono testiranje
detaljan dizajn i kodkomponentno testiranje

Najvažnija ideja V-modela nije oblik slova, nego to da se test planira i dizajnira u istom trenutku kad nastaje ono što provjerava. Kad analitičar napiše PP-4, tester odmah piše TS-4.1a i TS-4.2a. Ako pri tome pita „a šta je s tačno 30,00 €?”, nejasnoća se ispravlja dok je to samo rečenica. Ovo je princip 3 iz poglavlja 1 (rano testiranje), nacrtan.

Ukratko – 2.5 V-model

  • V-model povezuje svaku fazu razvoja s nivoom testiranja koji je provjerava.
  • Zahtjevima korisnika odgovara prihvatno, zahtjevima sistema sistemsko, arhitekturi integraciono, a kodu komponentno testiranje.
  • Test se dizajnira kad nastaje ono što provjerava, pa se nejasnoće otkriju rano.

2.6 Testiranje u agilnom timu

U agilnom timu (Scrum, poglavlje 2 udžbenika Projektovanje informacionih sistema) sistem se pravi u kratkim sprintovima od dvije sedmice, a svaki sprint mora dati inkrement koji radi. Testiranje se zato ne ostavlja „za kraj projekta”, nego se radi u svakom sprintu, za svaku priču:

  • tester učestvuje u pisanju kriterija prihvatanja priče, prije programiranja (tri amigosa: vlasnik proizvoda, programer i tester zajedno pregledaju priču);
  • programer piše jedinične testove uz kod;
  • tester piše i automatizuje testove višeg nivoa i istražuje (poglavlje 3);
  • priča nije gotova dok ne prođe testove iz Definicije gotovog;
  • automatski testovi se pokreću pri svakoj izmjeni (CI, poglavlje 14), kao zaštita od regresije.

Ovaj pristup se zove i pomjeranje ulijevo (shift left): na vremenskoj liniji projekta testiranje se pomjera s kraja prema početku. Postoji i pomjeranje udesno (shift right): testiranje i praćenje sistema i poslije isporuke, u radu, kroz nadzor i postepenu isporuku (CrowdStrike, poglavlje 1).

2.6 Testiranje u agilnom timu

Ni u agilnom timu nivoi ne nestaju. Komponentni, integracioni, sistemski i prihvatni testovi postoje i dalje, samo se rade u malim komadima, stalno.

Česta zabluda

„U agilnom timu nema testera, programeri sve testiraju sami.” Programeri pišu mnogo testova, ali pogled testera (šta bi moglo poći naopako, šta korisnik zaista radi) i dalje je potreban. Nekad ga nosi posebna osoba, nekad cijeli tim, ali ga ne smije nestati.

Ukratko – 2.6 Testiranje u agilnom timu

  • U agilnom timu testira se u svakom sprintu, za svaku priču, od kriterija prihvatanja do automatskih testova.
  • Pomjeranje ulijevo znači testirati ranije, a pomjeranje udesno pratiti i testirati i poslije isporuke.
  • Nivoi testiranja ostaju, samo se rade u malim komadima.

Provjeri se

  1. Na kojem nivou je test „API upisuje narudžbu u bazu”? Integraciono (integracija komponenti).
  2. Šta je beta testiranje? Odabrani korisnici koriste sistem kod sebe prije zvaničnog početka.
  3. Šta znači pomjeranje ulijevo? Testiranje počinje ranije, već pri pisanju zahtjeva.

Odgovori: tipka R ili klik na zamućeno polje.

Dio 3 · Sedmica 2

Dio 3 – Vrste testova i statičko testiranje

2.7 Vrste testova

Nivo kaže gdje testiramo. Vrsta kaže šta testiramo:

2.7 Vrste testova

VrstaPitanjePrimjer u DeliveryApp
funkcionalnoRadi li sistem ono što treba?cijena dostave po PP-2 do PP-4
nefunkcionalnoKakav je dok to radi?95 % odgovora ≤ 2 s (NZ-1), kontrast (NZ-4), sigurnost (NZ-3)
bijela kutijaJe li prošao svaki dio koda?svaki if u cijena_dostave izvršen u oba smjera (poglavlje 6)
crna kutijaRadi li po specifikaciji, bez gledanja koda?granice 3 km, 10 km, 30,00 € (poglavlje 8)
potvrdnoJe li ispravljen defekt zaista ispravljen?ponovo pokrenut test za 30,00 € poslije ispravke
regresionoJe li izmjena pokvarila nešto drugo?poslije ispravke popusta, ponovo svi testovi cijene
dim-test„Diše” li sistem uopšte?aplikacija se otvara, jelovnik se učitava, N-1001 košta 24,50 €

2.7 Vrste testova

Razlika između potvrdnog i regresionog testiranja važna je i često se brka. Potvrdno testiranje provjerava isto mjesto: test koji je pao sada prolazi. Regresiono provjerava sva ostala mjesta: da popravka česme nije poplavila kupatilo. Programer koji ispravi > u >= u PP-4 može slučajno promijeniti i nešto drugo; regresioni testovi to uhvate. Zato se regresioni testovi skoro uvijek automatizuju i pokreću pri svakoj izmjeni (poglavlje 4).

Dim-test (smoke test) je kratak skup od nekoliko testova najvažnijih funkcija, koji se pokrene odmah poslije isporuke nove verzije. Ime dolazi iz elektronike: kad se novi uređaj prvi put uključi, prvo se gleda da li se dimi. Da je Knight Capital imao dim-test koji provjerava da li svih osam servera radi istu verziju, priča iz poglavlja 1 bi bila kraća.

Ukratko – 2.7 Vrste testova

  • Vrste testova su funkcionalno i nefunkcionalno, bijela i crna kutija, potvrdno i regresiono testiranje i dim-test.
  • Potvrdno testiranje provjerava da je defekt ispravljen, a regresiono da izmjena nije pokvarila ništa drugo.
  • Dim-test brzo provjerava najvažnije funkcije odmah poslije isporuke.

2.8 Statičko testiranje

Do sada smo testirali pokretanjem programa: to je dinamičko testiranje. Ali mnogo defekata može se naći bez pokretanja, čitanjem dokumenata i koda ili alatima koji kod analiziraju. To je statičko testiranje, i ono je najjeftinije, jer nalazi defekte najranije, često prije nego što kod uopšte postoji.

Statičko testiranje nalazi stvari koje dinamičko teško nalazi:

  • nejasnoće i protivrječnosti u zahtjevima (šta je s tačno 3 km? kako se zaokružuje popust?);
  • nedostajuće zahtjeve (šta ako restoran ne odgovori?);
  • odstupanja od standarda u kodu (nazivi, struktura);
  • mrtav kod i nekorištene varijable (Knight Capital!);
  • sigurnosne slabosti u kodu (lozinka zapisana u kodu, SQL zalijepljen iz unosa).

2.8 Statičko testiranje

Primjer iz DeliveryApp pokazuje snagu statičkog testiranja. PP-5 kaže da STUDENT10 daje 10 % popusta. Recenzent pita: 10 % od 21,45 € je 2,145 €; da li je popust 2,14 € ili 2,15 €? U pravilu to ne piše. A kod DeliveryApp koristi Pythonovu funkciju round, koja zaokružuje „na parno” (banker's rounding): broj tačno na pola zaokruži prema parnom broju. Zato je popust(2145, "STUDENT10") jednako 214 centi (2,14 €), a popust(2155, "STUDENT10") jednako 216 centi (2,16 €). Većina ljudi bi u školi naučila da se 214,5 zaokružuje na 215.

Je li to defekt u kodu? Ne nužno. To je defekt u zahtjevu: pravilo ne kaže kako se zaokružuje, pa programer nije imao po čemu da odluči. Kupac koji ručno izračuna 2,15 € i vidi 2,14 € mogao bi pomisliti da ga aplikacija vara za cent. Statičko testiranje je ovo našlo čitanjem, a ispravka je jedna rečenica u PP-5 („popust se zaokružuje na cijeli cent, pola centa naviše”) i jedan red koda.

2.8 Statičko testiranje

Iz stvarnog svijeta

Pitanje zaokruživanja novca nije sitnica. Zakoni i pravila mnogih zemalja tačno propisuju kako se zaokružuju porezi i cijene, a banke i fiskalne kase moraju to raditi isto, jer cent na milion računa postaje deset hiljada eura.

Ukratko – 2.8 Statičko testiranje

  • Statičko testiranje nalazi defekte bez pokretanja programa: čitanjem dokumenata i koda i alatima za analizu.
  • Nalazi nejasnoće u zahtjevima, nedostajuće zahtjeve, mrtav kod i sigurnosne slabosti.
  • Python round zaokružuje na parno: popust na 21,45 € je 2,14 €, a na 21,55 € 2,16 €.
  • To je defekt u zahtjevu PP-5, koji ne kaže kako se zaokružuje, pronađen čitanjem.

2.9 Recenzije

Recenzija je pregled dokumenta ili koda od strane drugih ljudi, radi pronalaženja defekata i poboljšanja. Recenzije se razlikuju po formalnosti:

2.9 Recenzije

VrstaKako izgledaKada
neformalnakolega pogleda izmjenu i kaže šta mislisvakodnevno, npr. pull request
prolaz (walkthrough)autor vodi grupu kroz dokument i objašnjavada tim razumije i nađe pitanja
tehnička recenzijastručnjaci pregledaju po listi i dogovore odlukearhitektura, važni dizajn
inspekcijanajformalnija: uloge (moderator, čitač, zapisničar), lista, mjerenje broja nađenih defekatasigurnosno kritičan softver

Bez obzira na vrstu, dobra recenzija ima nekoliko pravila:

2.9 Recenzije

  1. Jasan cilj („nađi nejasnoće u PP-1 do PP-6”), a ne „pogledaj malo”.
  2. Lista za pregled: pitanja koja se postavljaju svakom pravilu (je li jasno, provjerljivo, potpuno, bez protivrječnosti; šta je na granicama; kako se zaokružuje; šta je s praznim i negativnim vrijednostima).
  3. Priprema: učesnici čitaju unaprijed, sami.
  4. Kritikuje se dokument, ne autor: „PP-5 ne kaže kako se zaokružuje”, a ne „ti nisi napisao kako se zaokružuje”.
  5. Zapis: svaki nalaz se zapiše s mjestom, opisom i ozbiljnošću, i prati se do ispravke.

Lista za pregled pravila DeliveryApp, koju koristimo na praktičnoj nastavi:

2.9 Recenzije

PitanjePrimjer nalaza
Šta je tačno na granici?PP-2: tačno 3 km? (jasno: 2,00 €) PP-4: tačno 30,00 €? (jasno: „i više”)
Kako se zaokružuje?PP-5: 10 % od 21,45 € nije rečeno
Šta s praznim, nultim, negativnim?PP-3: 0 km je dozvoljeno; da li je adresa restorana u restoranu (0 km) moguća narudžba?
Ima li protivrječnosti?PP-4 i PP-5: koji iznos gleda besplatna dostava (riješeno: prije popusta)
Šta nedostaje?Šta ako restoran ne odgovori? Šta ako se jelo rasproda dok je u korpi?
Može li se testirati?„Dostava mora biti brza” bi pala; PP-2 je provjerljiv

Ukratko – 2.9 Recenzije

  • Recenzija je pregled dokumenta ili koda od drugih ljudi; vrste su neformalna, prolaz, tehnička recenzija i inspekcija.
  • Dobra recenzija ima jasan cilj, listu za pregled, pripremu, kritiku dokumenta a ne autora, i zapis nalaza.
  • Lista za pravila DeliveryApp pita za granice, zaokruživanje, prazne i negativne vrijednosti, protivrječnosti, nedostatke i provjerljivost.

Provjeri se

  1. Po čemu se statičko razlikuje od dinamičkog testiranja? Statičko ne pokreće program, nego čita i analizira; dinamičko pokreće program.
  2. Koliki je popust na 21,45 € u kodu DeliveryApp? 214 centi (2,14 €), jer round zaokružuje na parno.
  3. Koja je razlika između potvrdnog i regresionog testiranja? Potvrdno provjerava da je defekt ispravljen, a regresiono da izmjena nije pokvarila ništa drugo.

Odgovori: tipka R ili klik na zamućeno polje.

Praksa · Sedmica 2

Praktična nastava – recenzija zahtjeva DeliveryApp

Praktična nastava – recenzija zahtjeva DeliveryApp

Cilj je provesti pravu recenziju pravila DeliveryApp, zapisati nalaze, potvrditi jedan nalaz u kodu i napraviti matricu sljedivosti. Radi se u grupama od četiri studenta, a rezultati idu u repozitorij deliveryapp-testovi.

Korak 1 – Priprema (20 minuta, svako sam)

  1. Pročitajte pravila PP-1 do PP-6 i nefunkcionalne zahtjeve NZ-1 do NZ-5 iz SADRZAJ.md (ili uvoda knjige).
  2. Uz listu za pregled iz 2.9, svako za sebe zapiše najmanje pet pitanja ili nalaza. Ne razgovarajte još; cilj je da svako nađe svoje.

Korak 2 – Sastanak recenzije (40 minuta)

  1. Podijelite uloge: moderator (vodi i pazi na vrijeme), autor (brani pravila kao da ih je napisao, objašnjava namjeru), zapisničar i recenzent.
  2. Prođite pravila redom. Za svaki nalaz zapisničar upisuje u recenzija.md:
IDPraviloNalazVrstaOzbiljnostPrijedlog
R-01PP-5nije rečeno kako se zaokružuje 10 % (npr. 21,45 € → 2,145 €)nejasnoćasrednja„zaokružuje se na cijeli cent, pola naviše”

Vrste: nejasnoća, nedostaje, protivrječnost, neprovjerljivo. Ozbiljnost: niska, srednja, visoka.

  1. Na kraju moderator pročita sve nalaze i grupa za svaki odluči: prihvaćeno (pravilo treba izmijeniti), objašnjeno (pravilo je jasno, nalaz je pogrešno čitanje) ili otvoreno pitanje za naručioca.

Korak 3 – Potvrda nalaza u kodu (20 minuta)

Provjerite nalaz o zaokruživanju u Pythonu:

>>> from deliveryapp import popust
>>> popust(2145, "STUDENT10")
214
>>> popust(2155, "STUDENT10")
216
>>> round(214.5), round(215.5), round(2.5), round(3.5)
(214, 216, 2, 4)

Zapišite u recenzija.md zašto je ovo defekt u zahtjevu i šta bi trebalo promijeniti i u pravilu i u kodu. (U Pythonu se zaokruživanje „pola naviše” za pozitivne cijele cente može napisati kao (iznos * procenat + 50) // 100; provjerite da za 2145 daje 215.)

Korak 4 – Test uslovi i matrica sljedivosti (40 minuta)

  1. Za svako od pravila PP-1 do PP-6 napišite bar dva test uslova i za svaki uslov bar jedan test slučaj s konkretnim ulazom i očekivanim rezultatom, u tabeli kao u 2.2.
  2. Napravite matricu sljedivosti kao u 2.3. Dodajte kolonu „Nivo” (komponentni, integracioni, sistemski, prihvatni) i za svaki test slučaj odlučite na kojem nivou bi se najprirodnije izvršio.
  3. Za NZ-1 i NZ-4 napišite po jedan test uslov i recite na kojem nivou i kojom vrstom testa (funkcionalno ili nefunkcionalno) se provjeravaju.

Korak 5 – Dim-test (15 minuta)

Napišite listu od pet koraka dim-testa koji bi se pokretao odmah poslije svake nove verzije DeliveryApp. Za svaki korak navedite očekivani rezultat (npr. „N-1001 u pregledu korpe pokazuje 24,50 €”).

Korak 6 – AI kao recenzent (opcionalno)

Dajte AI asistentu pravila PP-1 do PP-6 i zatražite: „Kao recenzent zahtjeva, nađi nejasnoće, nedostatke i protivrječnosti.” Uporedite s nalazima svoje grupe. Koji nalaz je našao AI, a grupa nije, i obrnuto? Provjerite svaki AI nalaz: je li zaista nejasnoća, ili AI nije pažljivo pročitao pravilo (npr. tvrdi da nije rečeno šta je s tačno 30,00 €, iako PP-4 kaže „i više”)?

Rezultat koji se predaje: recenzija.md s najmanje deset nalaza i odlukama, potvrdom nalaza o zaokruživanju, tabelom test uslova i slučajeva, matricom sljedivosti s nivoima i dim-testom od pet koraka.

Vježbe

Vježbe za studenta

Rješenja su sakrivena – tipka R ili klik na okvir.

Vježba za studenta 1 – aktivnosti procesa.

Zadatak

U kojoj aktivnosti test procesa nastaje: a) odluka da se obračun cijene testira prvi; b) tabela „30,00 € na 5 km → 0,00 €”; c) baza s izmišljenim jelovnikom za testove; d) izvještaj da je od 40 testova 38 prošlo; e) zaključak da treba više testova za popust jer je tamo nađeno najviše defekata.

Vježba za studenta 1 – aktivnosti procesa. – rješenje

Rješenje (R)

a) planiranje; b) dizajn; c) implementacija; d) izvršavanje (i praćenje); e) završetak (pouke) ili kontrola.

Vježba za studenta 2 – nivo testiranja.

Zadatak

Na kojem nivou je test? a) popust(8000, "STUDENT10") == 500; b) DeliveryApp šalje iznos sistemu plaćanja i dobija potvrdu; c) kupac kroz aplikaciju naruči N-1001, restoran je prihvati, dostavljač preda; d) vlasnik R-2 tri dana koristi DeliveryApp u svom restoranu.

Vježba za studenta 2 – nivo testiranja. – rješenje

Rješenje (R)

a) komponentno; b) integraciono (integracija sistema); c) sistemsko; d) prihvatno (korisničko, odnosno beta, ako je prije zvaničnog početka).

Vježba za studenta 3 – potvrdno ili regresiono.

Zadatak

Programer je ispravio defekt da kod student10 (mala slova) ne daje popust. Tester pokreće: a) test s student10; b) sve testove obračuna cijene; c) test N-1001 sa STUDENT10. Koji je potvrdni, a koji regresioni?

Vježba za studenta 3 – potvrdno ili regresiono. – rješenje

Rješenje (R)

a) potvrdni (isto mjesto: provjerava ispravku). b) regresioni (sve ostalo). c) regresioni (provjerava da je raniji, ispravan slučaj i dalje ispravan).

Vježba za studenta 4 – test uslov za PP-5.

Zadatak

Napišite tri test uslova za PP-5 i za svaki jedan test slučaj s očekivanim rezultatom.

Vježba za studenta 4 – test uslov za PP-5. – rješenje

Rješenje (R)

TU-5.1 važeći kod daje 10 %: artikli 21,50 € sa STUDENT10 → popust 2,15 €. TU-5.2 velika i mala slova i razmaci se zanemaruju: " student10 " na 21,50 € → 2,15 €. TU-5.3 gornja granica 5,00 €: artikli 80,00 € → popust 5,00 € (ne 8,00 €). (Prihvatljivi su i nepoznat kod → 0,00 € i popust ne dira dostavu.)

Vježba za studenta 5 – zaokruživanje.

Zadatak

Za iznose artikala 21,45 €, 21,55 € i 21,65 € izračunajte popust od 10 % „školski” (pola naviše) i kako ga računa Python round. U kojim slučajevima se razlikuju?

Vježba za studenta 5 – zaokruživanje. – rješenje

Rješenje (R)

10 % su 2,145, 2,155 i 2,165 €, odnosno 214,5, 215,5 i 216,5 centi. Školski: 215, 216, 217 centi. Python round (na parno): 214, 216, 216 centi. Razlikuju se za 21,45 € (214 umjesto 215) i 21,65 € (216 umjesto 217); za 21,55 € su isti (216).

Sažetak u pet rečenica

  1. Heathrow 2008. pokazuje da dijelovi mogu raditi, a sistem ne, ako se ne testira sve zajedno u stvarnim uslovima.
  2. Test proces ima planiranje, praćenje i kontrolu, analizu, dizajn, implementaciju, izvršavanje i završetak, a iz test baze nastaju test uslovi i test slučajevi povezani matricom sljedivosti.
  3. Nivoi testiranja su komponentni, integracioni, sistemski i prihvatni, a V-model svakoj fazi razvoja daje par na strani testiranja koji se dizajnira u isto vrijeme.
  4. Vrste testova su funkcionalni i nefunkcionalni, bijela i crna kutija, potvrdni i regresioni te dim-test, a u agilnom timu se testira u svakom sprintu.
  5. Statičko testiranje nalazi defekte čitanjem, kao nejasnoću u PP-5 o zaokruživanju (popust na 21,45 € u kodu je 2,14 €), a recenzije s listom za pregled kritikuju dokument, ne autora.

Pitanja za ponavljanje

  1. Šta se desilo na otvaranju Terminala 5 na Heathrowu i šta nije bilo dovoljno testirano?
  2. Navedite aktivnosti test procesa i šta nastaje u svakoj.
  3. Koja je razlika između test baze, test uslova i test slučaja?
  4. Zašto je za N-1002 sa kodom STUDENT10 dostava besplatna?
  5. Šta je matrica sljedivosti i na koja tri pitanja odgovara?
  6. Navedite četiri nivoa testiranja i za svaki cilj, izvršioca i primjer.
  7. Koje vrste prihvatnog testiranja postoje?
  8. Šta je V-model i koja je njegova najvažnija ideja?
  9. Kako se testira u agilnom timu? Šta znače pomjeranje ulijevo i udesno?
  10. Koja je razlika između potvrdnog i regresionog testiranja?
  11. Šta je dim-test i kako bi pomogao Knight Capitalu?
  12. Šta je statičko testiranje i šta nalazi?
  13. Objasnite nalaz o zaokruživanju popusta: šta vraća kod i zašto je to defekt u zahtjevu?
  14. Navedite vrste recenzija i pravila dobre recenzije.