56
Design-driven testing (Dizajn vođen testiranjem)

Dizajn vodjen testiranjem

Embed Size (px)

Citation preview

Page 1: Dizajn vodjen testiranjem

Design-driven testing

(Dizajn vođen testiranjem)

Page 2: Dizajn vodjen testiranjem

Mentor: Studenti:

mr. Alem Čolaković, dipl.ing. Minela Hasanović, 6545

Irma Hodžić, 6531

Predmetni nastavnik: Merima Omerika, 6516

Doc.dr. Mugdim Bublin Anela Lavić, 6541

Lemana Korić, 6664

Amina Ćurovac, 6665

Page 3: Dizajn vodjen testiranjem

UVOD

• DDT (design-driven testing) – dizaj vođen testiranjem - proizvodnja test slučajeva, kako bi verifikovali da su svi naznačeni scenariji završeni

• Testiranje je proces koji bi trebao početi mnogo prije kodiranja

• Testiranje slijedi ubrzo nakon preliminarnog dizajna

Page 4: Dizajn vodjen testiranjem

Dizajn vođen testiranjem u teoriji

Page 5: Dizajn vodjen testiranjem

Usvojiti testiranje - pronalazak kvara = pobjeda

Page 6: Dizajn vodjen testiranjem

Testiranja? kako i kada se koriste?

Page 7: Dizajn vodjen testiranjem

Za svaki kontrolor na svakom robusnom dijagramu...

...za svaku operaciju na svakoj klasi

Page 8: Dizajn vodjen testiranjem

Za realne sisteme - elementi dijagrama stanja kao osnova za testove slučajeva

Page 9: Dizajn vodjen testiranjem

provjera nivoa zahtjeva?

Page 10: Dizajn vodjen testiranjem

Koristiti matricu slijedivosti

Page 11: Dizajn vodjen testiranjem

Uraditi scenario nivoa pihvatljivosti

Page 12: Dizajn vodjen testiranjem

Proširiti teme u testnim scenarijima

Page 13: Dizajn vodjen testiranjem

Koristiti okvir testiranja kao što je JUnit

Page 14: Dizajn vodjen testiranjem

Održavanje testova jedinica dobro preciziranim!

Page 15: Dizajn vodjen testiranjem

Različite vrste testiranja

• Testiranje - skup interativnih i inkremantalnih razvojnih ciklusa

• Test dokazuje da proizvod odgovara specificiranoj namjeni

• veoma čvrsto povezani sa zahtjevima – dokaz da softver odgovara svojoj specificiranoj namjeni

Page 16: Dizajn vodjen testiranjem
Page 17: Dizajn vodjen testiranjem

• Test jedinica - testiranje individualnih softverskih komponenti.

Page 18: Dizajn vodjen testiranjem

Integracioni test - vrši se da se otkriju greške u sučeljima i u interakciji između integrisanih komponenti

Page 19: Dizajn vodjen testiranjem

Test kompatibilnosti -testiranje da sistem sarađuje dobro sa ostalim „vanjskim“ sistemima, sa kojima se zahtjeva da komunicira

Page 20: Dizajn vodjen testiranjem

SYSTEM TESTING

Test sistema - funkcionalni i behavioralni dizajn test slučaja.

Page 21: Dizajn vodjen testiranjem

Test prihvatljivosti - da se utvrdi da li sistem zadovoljava zahtjeve naznačene u ugovoru.

Page 22: Dizajn vodjen testiranjem

• Beta test - Provodi se od strane krajnjeg korisnika koji nije drugačije uključen u razvoj

Page 23: Dizajn vodjen testiranjem

Kao i slijedeći testovi:

• Nefunkcionalni test zahtjeva • Test izvodljivosti • Test regresije• Test otpornosti na stres• Test zapremine

Page 24: Dizajn vodjen testiranjem

Vođenje test slučajeva iz dijagrama robusnosti

• Sa ICONIX Procces-om, ulažemo trud kako bi napisali korištene slučajeve, i identifikujemo objekte koji sudjeluju u korištenom slučaju, kao i funkcije koje ti objekti obavljaju na dijagramu robusnosti .

• Radom sa dijagramom robusnosti, možemo kreirati dijagram test slučaja, koji prikazuje test slučaja za svakog kontrolora.

Page 25: Dizajn vodjen testiranjem
Page 26: Dizajn vodjen testiranjem

Korištenje agilnog dodatka za ICONIX/EA

• nterprise Arhitect (EA) ima poseban dodatak koji automatizira mnogo “prijelaznog” posla kada premještamo između dijagrama u ICONIX Process-u.

• dodatak će automatski kreirati set robusnih dijagrama za dijagram korištenog slučaja i dodatak će popuniti sekvencijalni dijagram

Page 27: Dizajn vodjen testiranjem
Page 28: Dizajn vodjen testiranjem

• Za potrebe testiranja, dodatak automatski kreira dijagram test slučaja od kontrolora na robusnom dijagramu

• Onda je moguće napisati izvršni test jedinica za svaki test slučaj

Korištenje agilnog dodatka za ICONIX/EA

Page 29: Dizajn vodjen testiranjem
Page 30: Dizajn vodjen testiranjem

Vođenje test jedinica sa test slučajeva

• Uputstva za vođenje test jedinica iz test slučajeva:

 

1. Za svaki test slučaj, kreiramo jednu klasu test jedinica.

2. Za svaki test scenario, kreiramo jednu testnu metodu u klasi testova jedinica.

3. Napisati test jedinica sa ugla kontrolora.

Page 31: Dizajn vodjen testiranjem

Kratki uvod u JUnit

• Za kodiranje primjera kasnije u ovom poglavlju koristit ćemo JUnit, popularnu Java-baziranu okvirnu test jedinicu.. Iako se izvorni kod može razlikovati ovisno o jeziku/implementaciji,

Page 32: Dizajn vodjen testiranjem

package test.com.iconixsw.bookstore.web;import junit.framework.*;public class AddToShoppingCartTest extends TestCase { public AddToShoppingCartTest (String testName) { super(testName); } public void testShoppingCartEmpty() throws

Exception { ShoppingCart cart = new ShoppingCart(); assertEquals("Cart should be empty", 0,

cart.getNumItems()); } public void testItemAdded() throws Exception { ShoppingCart cart = new ShoppingCart(); LineItem item = new LineItem(); cart.addItem(item); assertEquals("Cart should contain 1 item", 1, cart.getNumItems()); }}

Imamo primjer klase testa jedinica:

Page 33: Dizajn vodjen testiranjem

Pisanje efektivnih testova jedinica

• Prije nego počnemo na primjeru, vrijedno je istaći neke najbolje prakse za pisanje dobrih testova jedinica

• Tehnike efektivnih testova jedinica sa perspektivnim dizajnom-vođenog testiranja mogu se sažeti veoma jezgrovito

Page 34: Dizajn vodjen testiranjem
Page 35: Dizajn vodjen testiranjem

Dizaj vođen testiranjem u praksi

Page 36: Dizajn vodjen testiranjem

Dizaj vođen testiranjem u praksi

• Korištenje projekta Internet knjižare• Onda koristimo test slučajeve da

potvrdimo da:

1. detaljni dizajn se poklapa sa korištenim slučajem

2. kod se poklapa sa detaljnim dizajnom i čini ono za šta je namijenjen

Page 37: Dizajn vodjen testiranjem
Page 38: Dizajn vodjen testiranjem

Testiranje Prikaz Početne Stranice

• U ovom dijelu, kreirat ćemo test scenario za Kontrolora Prikaz Početne Stranice, najjednostavnijeg u grupi, i onda ćemo napisati JUnit test klasu.

• Test slučaj za ovog kontrolora je jednostavan, zapravo, trebamo samo jedan test scenario za ovaj test slučaj zato što postoji malo toga što može krenuti “naopako”.

Page 39: Dizajn vodjen testiranjem
Page 40: Dizajn vodjen testiranjem
Page 41: Dizajn vodjen testiranjem

Pokretanje testova iz test paketa

Page 42: Dizajn vodjen testiranjem

package test.com.iconixsw.bookstore;import test.com.iconixsw.bookstore.web.*;import junit.framework.*; public class BookstoreTestSuite { public static Test suite() { TestSuite suite = new TestSuite();

suite.addTestSuite(DisplayHomePageTest.class); // add more tests here . . . return suite; } public static void main(String[] args) { junit.textui.TestRunner.run(suite()); }} 

Page 43: Dizajn vodjen testiranjem

Testiranje Preuzmi Detalje Knjige Kontroler

• U ovom dijelu, kreiramo test scenario za Preuzmi Detalje Knjige Kontroler, i onda pišemo i pokrećemo njegovu JUnit test klasu.

• Da dodamo test slučaj u EA, dvoklikom otvorimo prozorčić Postavke i odaberemo Scenario tab. Onda možemo dodati osnovni i alternativni scenario u test slučaj.

Page 44: Dizajn vodjen testiranjem
Page 45: Dizajn vodjen testiranjem

• Sada kada imamo sastavljen test, trebali bi ga pokrenuti kroz JUnit, ali bi prvobitno trebali vidjeti neuspjeh testa kako bi potvrdili da test radi. Da bi to uradili samo ćemo kratko promijeniti initData() metodu.

• Jednostavno smo promjenili 1 u 5 tako da lažni DAO ne vrati knjigu sa ID oznakom 1. Pokretanje testa sada će donijeti slijedeće rezultate:

Page 46: Dizajn vodjen testiranjem

__________________________________.FTime: 0There was 1 failure:1) testBookIdFound

(test.com.iconixsw.bookstore.dao.RetrieveBookDetailsTest)

junit.framework.AssertionFailedError: ID 1 should be found at test.com.iconixsw.bookstore.dao. RetrieveBookDetailsTest.

testBookIdFound(RetrieveBookDetailsTest.java:29)FAILURES!!!Tests run: 1, Failures: 1, Errors: 0__________________________________

Page 47: Dizajn vodjen testiranjem

• Na ovaj način možemo se uvjeriti da će test raditi ispravno kada dođe do stvarnog neuspjeha testa. Sada kada vratimo vrijednost ponovo 1 i uradimo ponovo test dobit ćemo slijedeće rezultate:

____________________________________________________________

.Time: 0OK (1 test)____________________________________________________

___________

Page 48: Dizajn vodjen testiranjem

Deset najvećih grešaka dizajna vođenog testiranjem

Page 49: Dizajn vodjen testiranjem

• 10. Pretjerivati sa mock(lažnim) objektima

• 9. Duplicirati scenarije alternativnih kurseva u alternativne test scenarije za osnovne kurs kontrolore

• 8. Zaboraviti da povežemo testove sa zahtjevima.

Page 50: Dizajn vodjen testiranjem

• 7. Ostaviti testiranje nakon što je napisan kod

• 6. Zamijeniti testiranje sa dizajnom

• 5. Ignorisati vruće tačke problema

Page 51: Dizajn vodjen testiranjem

• 4. Koristiti nasilno testiranje umjesto identifikovanje i ciljanje gorućih problema iz preliminarnog dizajna

• 3. Koristiti pogrešnu vrstu testiranja za pogrešnu situaciju

• 2. Zaboraviti uraditi testiranje uopće.

Page 52: Dizajn vodjen testiranjem

Testirati toliko

temeljito

da nikada ne

objavite proizvod!!!

Page 53: Dizajn vodjen testiranjem

Zaključak

• različiti oblici korištenih slučajeva – vođenih testiranjem

• vrste testova koje se koriste -kako i kada?• dizajn vođen testiranjem na primjeru

Internet knjižare • osnovnih i alternativnih scenarija kao i

postupak transformiranja robusnih dijagrama u sekvencijali ili dijagram test slučaja.

Page 54: Dizajn vodjen testiranjem
Page 55: Dizajn vodjen testiranjem

Testovi ne dokazuju puno ako nisu uvezani na mikroskopskom

nivou sa zahtjevima!!!

Page 56: Dizajn vodjen testiranjem

H v a l a n a p a ž n j i

Test passed

T e s t :