SlideShare a Scribd company logo
1 of 13
Automatizált tesztek
Rólam (Takács Zsolt)

Backend developer @ ustream.tv

Főleg PHP fejlesztés, kevés Java

@oker1
zsolt.takacs.cc
github.com/oker1
Teszttípusok

Rengeteg létezik:
 ● unit tesztek
 ● adatbázistesztek
 ● integrációs tesztek
     ○ rétegtesztek
         ■ subcutaneous tesztek
     ○ contract tesztek
 ● acceptance tesztek
 ● end to end tesztek

Egyik típus sem univerzális, a kulcs a megfelelő vegyítésük.
Unit tesztek

 ● Egy adott egység tesztelése elkülönítve a többitől.
 ● Több szemlélet (Mockist, Classical) bővebben
 ● Szorosan kapcsolódik a TDDvel
 ● A lehető leghamarabb befolyásolja a kód belső minőségét,
   már a születésekor
     ○ loose coupling
     ○ tesztelhetőség (IoC/DI)
     ○ tisztaság
 ● A lehető leggyorsabban ad visszajelzést az egység
   működéséről
 ● TDD nélkül is hasznos, de vele együtt tud igazán hatásos
   lenni.
Unit tesztek/2

 ● Hibalokalizáció: akkor jók a tesztesetek, ha minél kevesebb
   törik el egyszerre, így könyebb megtalálni az okot
 ● Függetlenek legyenek 3rd partyktól,
   speciális bővítményektől (pl. nem alapértelmezett php
   modulok)

 ● Fő előnyök:
    ○ gyorsaság
    ○ izoláció
    ○ könnyű a 100% fedettség
Unit tesztek és legacy kód
● Micheal Feathers meghatározása szerint minden teszt
  nélküli kód legacy kód. (Working Effectively With Legacy
  Code)
● Legacy kód unit tesztelhetővé tehető.
● A tesztelhetőséghez seamek kellenek
● Seamek - Olyan helyek a kódban, ahol a kód átírása nélkül
  változtatható a működése. pl
   ○ Dependency Injection segítségével függőség lecserélése
   ○ Tesztspecifikus leszármazott + metódus felüldefiniálása

● Ha nincsenek, alacsony kockázatú refaktorálással
  kialakíthatóak.
● Rengeteg munka, rutin kell hozzá
Adatbázistesztek

● Adatbázisközpontú alkalmazásoknál ideális
● Klasszikus négy fázis
   ○ Setup - CREATE|TRUNCATE, INSERT
   ○ Exercise
   ○ Verify - Db állapot ellenőrzése
   ○ TearDown - DROP|TRUNCATE|NOOP
● Eszközök
   ○ DbUnit (Java és PHP portok)
   ○ Etsy PHPUnit Extensions (csak PHP)
   ○ Liquibase (Nyelvfüggetlen)
Legacy kód

● Unit-tesztelhetővé alakítás nem mindig a legjobb
  megközelítés.
● Ha adatokat tárol az alkalmazás, azon keresztül sokszor
  könnyebben tesztelhető.
● Elég a tesztelendő kódot kiemelni (ha szükséges) és utána
  átalakítás nélkül lefedhető tesztekkel.
● Általában ezek a tesztek átfogóbbak, így nagyobb
  mozgásteret adnak refaktoráláshoz, mint a unit tesztek.
● Frameworkök segítségével kényelmesen végezhető a
  tesztekben a setup és az ellenőrzés is.
Integrációs tesztek

● Sikertelen marsjáró példája
● A kifejezés nagyon tág
● A lényeg, hogy több egység integrációját teszteljük
● Integrációs hibák:
    ○ Paraméterezési hibák
    ○ Hibás feltételezés kollaborátorban
● Gyakori problémák a tesztekben:
    ○ Rendszerhatárt jelentő implementációk lecserélése, pl.
      adatbázis, külső api kliense
    ○ Globális állapotot becsomagoló objektumok lecserélése
      (pl. idő)
    ○ Cross-cutting concernök, pl logolás lecserélése
● Mindegyik megoldása körülményes Dependency
  Injectionnel
Dependency Lookup

● Dependency Injection helyett használható
● Használható Singleton, Registry, stb.
● Globálisan elérhető legyen
● Befolyásolható legyen mit ad a dependenciát kérő kódnak
Dependency Lookup példa
Contract tesztek

● Egy interfész implementálóit teszteli
● Az implementáló osztályok működésével kapcsolatos
  elvárásokat rögzíti
● Megvalósítás: absztrakt tesztosztály
● Minden implementálóhoz egy leszármazott tesztosztály
● A leszármazott teszt implementálja a tesztelt objektum
  létrehozását, az ősben vannak a tesztesetek
Contract teszt példa

More Related Content

Similar to Devops meetup - Automatizált tesztek

Szerver oldali fejlesztés korszerű módszerekkel C# nyelven
Szerver oldali fejlesztés korszerű módszerekkel C# nyelvenSzerver oldali fejlesztés korszerű módszerekkel C# nyelven
Szerver oldali fejlesztés korszerű módszerekkel C# nyelvenKrisztián Gyula Tóth
 
Webalkalmazások teljesítményoptimalizálása
Webalkalmazások teljesítményoptimalizálásaWebalkalmazások teljesítményoptimalizálása
Webalkalmazások teljesítményoptimalizálásaFerenc Kovács
 
Objektum-orinetált mérések a gyakorlatban
Objektum-orinetált mérések a gyakorlatbanObjektum-orinetált mérések a gyakorlatban
Objektum-orinetált mérések a gyakorlatbanAntal Orcsik
 
Hogyan optimalizáljunk C/C++ kódokat!
Hogyan optimalizáljunk C/C++ kódokat!Hogyan optimalizáljunk C/C++ kódokat!
Hogyan optimalizáljunk C/C++ kódokat!Open Academy
 
Szoftver tesztelés - Gyakorlati jó-ha-tudod
Szoftver tesztelés - Gyakorlati jó-ha-tudodSzoftver tesztelés - Gyakorlati jó-ha-tudod
Szoftver tesztelés - Gyakorlati jó-ha-tudodRichard Oliver Legendi
 
Nagyszabású virtuális gyógyszerkísérletek az új generációs web szolgáltatás a...
Nagyszabású virtuális gyógyszerkísérletek az új generációs web szolgáltatás a...Nagyszabású virtuális gyógyszerkísérletek az új generációs web szolgáltatás a...
Nagyszabású virtuális gyógyszerkísérletek az új generációs web szolgáltatás a...Ferenc Szalai
 
20111130 oa gtest
20111130 oa gtest20111130 oa gtest
20111130 oa gtestczras
 
Béla, mi élesedett tulajdonképpen? A request to release koncepció mire is ad ...
Béla, mi élesedett tulajdonképpen? A request to release koncepció mire is ad ...Béla, mi élesedett tulajdonképpen? A request to release koncepció mire is ad ...
Béla, mi élesedett tulajdonképpen? A request to release koncepció mire is ad ...META-INF Kft.
 
Syslog-NG (nem csak) fejlesztőknek
Syslog-NG (nem csak) fejlesztőknekSyslog-NG (nem csak) fejlesztőknek
Syslog-NG (nem csak) fejlesztőknekJános Pásztor
 
Forráskódtárak gráfalapú statikus analízise
Forráskódtárak gráfalapú statikus analíziseForráskódtárak gráfalapú statikus analízise
Forráskódtárak gráfalapú statikus analíziseDániel Stein
 
Testing the system: ethical hacking and penetration testing (in Hungarian)
Testing the system: ethical hacking and penetration testing (in Hungarian)Testing the system: ethical hacking and penetration testing (in Hungarian)
Testing the system: ethical hacking and penetration testing (in Hungarian)Csaba Krasznay
 
Gitflow vs. Trunk based development
Gitflow vs. Trunk based development Gitflow vs. Trunk based development
Gitflow vs. Trunk based development István Marhefka
 
A tesztelés szerepe folyamatos kihelyezést használó projektekben (Microsoft, ...
A tesztelés szerepe folyamatos kihelyezést használó projektekben (Microsoft, ...A tesztelés szerepe folyamatos kihelyezést használó projektekben (Microsoft, ...
A tesztelés szerepe folyamatos kihelyezést használó projektekben (Microsoft, ...Gáspár Nagy
 
Távoli UX kutatás (ClickTale, Verify)
Távoli UX kutatás (ClickTale, Verify)Távoli UX kutatás (ClickTale, Verify)
Távoli UX kutatás (ClickTale, Verify)Csaba Varga
 
Continous Integration and Deployment
Continous Integration and DeploymentContinous Integration and Deployment
Continous Integration and DeploymentKároly Nagy
 

Similar to Devops meetup - Automatizált tesztek (20)

Szerver oldali fejlesztés korszerű módszerekkel C# nyelven
Szerver oldali fejlesztés korszerű módszerekkel C# nyelvenSzerver oldali fejlesztés korszerű módszerekkel C# nyelven
Szerver oldali fejlesztés korszerű módszerekkel C# nyelven
 
Webalkalmazások teljesítményoptimalizálása
Webalkalmazások teljesítményoptimalizálásaWebalkalmazások teljesítményoptimalizálása
Webalkalmazások teljesítményoptimalizálása
 
Ci
CiCi
Ci
 
Objektum-orinetált mérések a gyakorlatban
Objektum-orinetált mérések a gyakorlatbanObjektum-orinetált mérések a gyakorlatban
Objektum-orinetált mérések a gyakorlatban
 
Hogyan optimalizáljunk C/C++ kódokat!
Hogyan optimalizáljunk C/C++ kódokat!Hogyan optimalizáljunk C/C++ kódokat!
Hogyan optimalizáljunk C/C++ kódokat!
 
Webkonf 2013
Webkonf 2013Webkonf 2013
Webkonf 2013
 
Szoftver tesztelés - Gyakorlati jó-ha-tudod
Szoftver tesztelés - Gyakorlati jó-ha-tudodSzoftver tesztelés - Gyakorlati jó-ha-tudod
Szoftver tesztelés - Gyakorlati jó-ha-tudod
 
Nagyszabású virtuális gyógyszerkísérletek az új generációs web szolgáltatás a...
Nagyszabású virtuális gyógyszerkísérletek az új generációs web szolgáltatás a...Nagyszabású virtuális gyógyszerkísérletek az új generációs web szolgáltatás a...
Nagyszabású virtuális gyógyszerkísérletek az új generációs web szolgáltatás a...
 
20111130 oa gtest
20111130 oa gtest20111130 oa gtest
20111130 oa gtest
 
Alumni Release Process
Alumni Release ProcessAlumni Release Process
Alumni Release Process
 
Budapest.rb 201010
Budapest.rb 201010Budapest.rb 201010
Budapest.rb 201010
 
Béla, mi élesedett tulajdonképpen? A request to release koncepció mire is ad ...
Béla, mi élesedett tulajdonképpen? A request to release koncepció mire is ad ...Béla, mi élesedett tulajdonképpen? A request to release koncepció mire is ad ...
Béla, mi élesedett tulajdonképpen? A request to release koncepció mire is ad ...
 
Syslog-NG (nem csak) fejlesztőknek
Syslog-NG (nem csak) fejlesztőknekSyslog-NG (nem csak) fejlesztőknek
Syslog-NG (nem csak) fejlesztőknek
 
SZTAKI presentation
SZTAKI presentationSZTAKI presentation
SZTAKI presentation
 
Forráskódtárak gráfalapú statikus analízise
Forráskódtárak gráfalapú statikus analíziseForráskódtárak gráfalapú statikus analízise
Forráskódtárak gráfalapú statikus analízise
 
Testing the system: ethical hacking and penetration testing (in Hungarian)
Testing the system: ethical hacking and penetration testing (in Hungarian)Testing the system: ethical hacking and penetration testing (in Hungarian)
Testing the system: ethical hacking and penetration testing (in Hungarian)
 
Gitflow vs. Trunk based development
Gitflow vs. Trunk based development Gitflow vs. Trunk based development
Gitflow vs. Trunk based development
 
A tesztelés szerepe folyamatos kihelyezést használó projektekben (Microsoft, ...
A tesztelés szerepe folyamatos kihelyezést használó projektekben (Microsoft, ...A tesztelés szerepe folyamatos kihelyezést használó projektekben (Microsoft, ...
A tesztelés szerepe folyamatos kihelyezést használó projektekben (Microsoft, ...
 
Távoli UX kutatás (ClickTale, Verify)
Távoli UX kutatás (ClickTale, Verify)Távoli UX kutatás (ClickTale, Verify)
Távoli UX kutatás (ClickTale, Verify)
 
Continous Integration and Deployment
Continous Integration and DeploymentContinous Integration and Deployment
Continous Integration and Deployment
 

Devops meetup - Automatizált tesztek

  • 2. Rólam (Takács Zsolt) Backend developer @ ustream.tv Főleg PHP fejlesztés, kevés Java @oker1 zsolt.takacs.cc github.com/oker1
  • 3. Teszttípusok Rengeteg létezik: ● unit tesztek ● adatbázistesztek ● integrációs tesztek ○ rétegtesztek ■ subcutaneous tesztek ○ contract tesztek ● acceptance tesztek ● end to end tesztek Egyik típus sem univerzális, a kulcs a megfelelő vegyítésük.
  • 4. Unit tesztek ● Egy adott egység tesztelése elkülönítve a többitől. ● Több szemlélet (Mockist, Classical) bővebben ● Szorosan kapcsolódik a TDDvel ● A lehető leghamarabb befolyásolja a kód belső minőségét, már a születésekor ○ loose coupling ○ tesztelhetőség (IoC/DI) ○ tisztaság ● A lehető leggyorsabban ad visszajelzést az egység működéséről ● TDD nélkül is hasznos, de vele együtt tud igazán hatásos lenni.
  • 5. Unit tesztek/2 ● Hibalokalizáció: akkor jók a tesztesetek, ha minél kevesebb törik el egyszerre, így könyebb megtalálni az okot ● Függetlenek legyenek 3rd partyktól, speciális bővítményektől (pl. nem alapértelmezett php modulok) ● Fő előnyök: ○ gyorsaság ○ izoláció ○ könnyű a 100% fedettség
  • 6. Unit tesztek és legacy kód ● Micheal Feathers meghatározása szerint minden teszt nélküli kód legacy kód. (Working Effectively With Legacy Code) ● Legacy kód unit tesztelhetővé tehető. ● A tesztelhetőséghez seamek kellenek ● Seamek - Olyan helyek a kódban, ahol a kód átírása nélkül változtatható a működése. pl ○ Dependency Injection segítségével függőség lecserélése ○ Tesztspecifikus leszármazott + metódus felüldefiniálása ● Ha nincsenek, alacsony kockázatú refaktorálással kialakíthatóak. ● Rengeteg munka, rutin kell hozzá
  • 7. Adatbázistesztek ● Adatbázisközpontú alkalmazásoknál ideális ● Klasszikus négy fázis ○ Setup - CREATE|TRUNCATE, INSERT ○ Exercise ○ Verify - Db állapot ellenőrzése ○ TearDown - DROP|TRUNCATE|NOOP ● Eszközök ○ DbUnit (Java és PHP portok) ○ Etsy PHPUnit Extensions (csak PHP) ○ Liquibase (Nyelvfüggetlen)
  • 8. Legacy kód ● Unit-tesztelhetővé alakítás nem mindig a legjobb megközelítés. ● Ha adatokat tárol az alkalmazás, azon keresztül sokszor könnyebben tesztelhető. ● Elég a tesztelendő kódot kiemelni (ha szükséges) és utána átalakítás nélkül lefedhető tesztekkel. ● Általában ezek a tesztek átfogóbbak, így nagyobb mozgásteret adnak refaktoráláshoz, mint a unit tesztek. ● Frameworkök segítségével kényelmesen végezhető a tesztekben a setup és az ellenőrzés is.
  • 9. Integrációs tesztek ● Sikertelen marsjáró példája ● A kifejezés nagyon tág ● A lényeg, hogy több egység integrációját teszteljük ● Integrációs hibák: ○ Paraméterezési hibák ○ Hibás feltételezés kollaborátorban ● Gyakori problémák a tesztekben: ○ Rendszerhatárt jelentő implementációk lecserélése, pl. adatbázis, külső api kliense ○ Globális állapotot becsomagoló objektumok lecserélése (pl. idő) ○ Cross-cutting concernök, pl logolás lecserélése ● Mindegyik megoldása körülményes Dependency Injectionnel
  • 10. Dependency Lookup ● Dependency Injection helyett használható ● Használható Singleton, Registry, stb. ● Globálisan elérhető legyen ● Befolyásolható legyen mit ad a dependenciát kérő kódnak
  • 12. Contract tesztek ● Egy interfész implementálóit teszteli ● Az implementáló osztályok működésével kapcsolatos elvárásokat rögzíti ● Megvalósítás: absztrakt tesztosztály ● Minden implementálóhoz egy leszármazott tesztosztály ● A leszármazott teszt implementálja a tesztelt objektum létrehozását, az ősben vannak a tesztesetek