SlideShare ist ein Scribd-Unternehmen logo
1 von 24
Szoftver tesztelés
Az ORENBI rendszer back-end fejlesztésének tapasztalatai
alapján
Tóth Krisztián Gyula
Horváth Gábor
• Tesztvezérelt fejlesztés
• Miért, hogyan, és milyen teszteket írjunk?
• Kód lefedettség problémája
• ORENBI back-end
• Teszt struktúra és környezet
• Modul fejlesztés és tesztelés
Szoftver tesztelésről általában
A szoftver alkalmazási területe kritikus szempont
a tesztelési módszerek és alapelvek
meghatározásakor!
Az emberek a szoftverre támaszkodnak ezért
fontos, hogy :
 Ne produkáljon hibákat
 Gyors és megbízható legyen
Miért írjunk teszteket !?
„Plusz munka, van anélkül is elég igény a megrendelőtől”
mondhatnánk…
• De!!
▫ Fejlesztés = A kód változik!
▫ Nincsenek tesztek!? -> Biztos minden jól működik még most is?
▫ Minél később jelentkezik egy hiba annál drágább a javítása
 Furcsa hibajelenségekről számol be a megrendelő
▫ Át merjek írni bármit is?
 Amelyik szoftver kódja nem változik azt vagy nem használják sehol, vagy
nem meri senki módosítani!
• Ha vannak tesztek:
▫ A hibák döntő része már az üzemi kód írásakor javításra kerül
▫ Minél nagyobb területet fedtünk le annál kevésbé van mitől félnünk egy
módosítás után.
Hogyan írjunk teszteket ?
• Egyszerű és érthető legyen, nem kell hogy
hatékony
• F.I.R.S.T elvek
▫ Gyors – Fusson le gyorsan
▫ Független – Ne befolyásolják egymást
▫ Megismételhető – Környezet függetlenül
▫ Egyértelmű – Siker vagy kudarc
▫ Időszerű – Üzemi kód írás
előtt/kor/utána/félévvel … -> De a lényeg, hogy
legyen a kódunk bármikor tesztelhető
Milyen teszteket írjunk ?
• Front-end oldaltól induló tesztek,
mintha valaki használná az
alkalmazástEnd-to-end
• A rendszer architektúra több
réteg/egység együttes
működését teszteli
Integration
• A rendszer egységei
egymástól
függetlenül
kerülnek
tesztelésre
Unit
Tesztek összehasonlítása
Adatbázis
Külső rendszer 1
(IBM Maximo)
Külső rendszer 2
(Libra)
Rendszer
architektúra
MOCK
Alkalmazás réteg 1
elemei
Alkalmazás réteg 2
elemei
Külső rendszerek
Egység teszt
Integrációs teszt End-to-End teszt
Unit Vs Integrációs tesztek
Egység tesztelés Integrációs tesztelés
• Rész funkciót tesztel
• Szimulált környezetben
▫ Nincs adatbázis
▫ Függőségekre dummy
objektumok
• Gyors lefutás
▫ Futtassuk őket gyakran
• Nem teszteljük az
összeköttetést
• Egyszerű következtetés a hiba
okára és helyére
▫ Egyszerűen javítható
• Minél nagyobb egészét
próbáljuk lefedni
• Valós környeztet hozunk létre
▫ Tényleges adatbázis
kapcsolat, stb..
▫ A függőségekre nincsenek
dummy objektumok
• Lassú lefutás
• Drága (megírni)
• Összeköttetést teszteljük
• Nehezebb beazonosítani, hogy
a hiba honnan származik
• Hibákat nem tudunk vele
szimulálni
Különböző típusú tesztek viszonya
• Helyettesíthetők-e a Unit tesztek csupán Integration
tesztekkel?
▫ Nem, mind a két tesztre szükség van!
▫ Együtt lehet velük jól lefedni a rendszer működését.
• Mit érdemes Unit tesztelni?
▫ Lehetőleg mindent.
• Mikor írjunk Integration tesztet?
▫ Ha már írtunk Unit tesztet, minden kapcsolódó
rétegben.
Hogyan döntsem el, hogy mit
teszteljek?
• A tesztek írása is idő, ami költség.
• A lehetőségek költségébe kerül amit teszt írás
helyett végezhetne egy fejlesztő.
▫ (Pl: további funkció tervezése és implementálása)
• Át kell gondolni, hogy mit van értelme tesztelni
és mit nincs!
Kód lefedettség
• Mit is takar ez valójában?
▫ O%-os lefedettség = Nincs automatizált tesz
▫ 100%-os lefedettség = Minden kódsort legalább egyszer
meghajtottunk automatizált tesztel
• Minél magasabb az érték annál jobb érzés
• DE!
Csak az általunk írt összes használati eset teljesül!
100%
Túl tesztelünk vagy alul ha kitűzünk
egy értéket?
Hibahatása
Hiba valószínűsége
50%
25%
55%
35%43%
67%
22%
90%
Mi javíthat a kód minőségen és a
csapaton ?
1. Csak Unit tesztelt kód kerüljön a repository-ba!
2. Kötelező jellegű, gyakori code review!
• A csapattagok bemutatják, hogy az adott problémát,
hogy oldották meg.
• Tanítva a többieket és magukat.
3. Kód szétfűzés, egyszerűsítés!
• Dependency Injection és Facade-ek használata
• „Túl komplex Unit tesztelni” -> Legyen Simple!
(K.I.S.S)
• Interfészek kisebb egységekre bontása
Mikor nincs értelme a tesztvezérelt
fejlesztésnek ?
„Olyan sok csúnya kódot láttam már rengeteg pénzt termelni, hogy azt kell
hinnem, hogy a kód minősége vagy nem szükséges, vagy nem elégséges az
üzleti sikerek eléréséhez.”
Kent Beck – Implementációs minták
• Ha nem futtatjuk a teszteket
• Ha az első sikeres lefutás után eldobjuk
A fejlesztő felelőssége, hogy a kódolással töltött óráit jól
használja fel.
• A tesztek a szoftver érdekelt személyei részére
készülnek.
• Nem elég azt mondani, hogy a kód jó, bizonyítsuk.
Amiről szó lesz:
• Tesztelési struktúra (Visual Studio-ban)
• Egyszerű példák
• Alkalmazott segéd eszközök és keretrendszerek
• A tesztelés és a fejlesztés ciklus kapcsolata
Tesztelési struktúra
• Külön projektekben
• Külön futtathatóak
▫ Integration tesztek
▫ Unit tesztek
• Tesztek elnevezése (specifikáció is egyben)
• {FüggvényNeve}_{Tesztelt Állapot}_{VártViselkedés}
• {FüggvényNeve}_When{Tesztelt Állapot}_Should{VártViselkedés}
• Tesztek szerkezete
• AAA szerint
BDD: GIVEN, WHEN, THEN
Arrange, Act, Assert
Példa teszt elnevezések
Példa egység teszt
Segéd eszközök és keretrendszerek
• Nunit
• Moq - https://github.com/Moq/moq4/wiki/Quickstart
• FluentAssert - http://fluentassertions.com/documentation.html
• NBuilder
• Faker
• Resharper
▫ dotCover
• ReportUnit
Tesztelés és a fejlesztés kapcsolata
Continuous Testing / Delivery
• Automatizálás a barátunk
▫ Időzíthető
▫ A fejlesztőknek nem kell minden tesztet futtatni
• Az éles környezettel identikus helyen történik
a tesztek futtatása.
▫ Nem kell végig várni a lefutásra.
▫ A hibák nem csak akkor jönnek elő, ha a
teszteket a fejlesztők futtatják.
▫ A tesztek eredmény biztosan eljut a csapathoz.
 Le merjem futtatni a többit is?
 Kinek kell kijavítani?
ORENBI Software Development Lifecycle
Mitől lesz valami könnyen és hatékonyan tesztelhető?
Élmények, tapasztalatok
Példa tesztek
Végső gondolatok
• Legyünk jobb fejlesztők!
• Írjunk jobb minőségű kódot!
• Ne nyűg legyen a teszt írás, hanem szokás!
• Oktatni kell, szoktatni kell
▫ Házi feladatok tesztvezérelten (nem kell javítani!)
▫ A tesztelés ne az utolsó lépés legyen.
▫ Lassan elvárás lesz a cégeknél!
„Amit nem lehet tesztelni az nem feature.”
//by autóipar

Weitere ähnliche Inhalte

Ähnlich wie Szoftver tesztelés

Gonosz IkertestvéRek
Gonosz IkertestvéRekGonosz IkertestvéRek
Gonosz IkertestvéRek
C4M7SX
 
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
Ferenc Kovács
 
Enterprise java evolució, avagy java ee (
Enterprise java evolució, avagy java ee (Enterprise java evolució, avagy java ee (
Enterprise java evolució, avagy java ee (
Attila Balogh-Biró
 
Enterprise java evolució, avagy java ee (
Enterprise java evolució, avagy java ee (Enterprise java evolució, avagy java ee (
Enterprise java evolució, avagy java ee (
Attila Balogh-Biró
 
XXI. századi szoftverfejlesztés
XXI. századi szoftverfejlesztésXXI. századi szoftverfejlesztés
XXI. századi szoftverfejlesztés
György Balássy
 

Ähnlich wie Szoftver tesztelés (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
 
Mobil Weekend - A tesztelői csapat evolúciója
Mobil Weekend - A tesztelői csapat evolúciójaMobil Weekend - A tesztelői csapat evolúciója
Mobil Weekend - A tesztelői csapat evolúciója
 
Webkonf 2013
Webkonf 2013Webkonf 2013
Webkonf 2013
 
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, ...
 
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 ...
 
Budapest.rb 201010
Budapest.rb 201010Budapest.rb 201010
Budapest.rb 201010
 
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)
 
A mérnökké válás folyamata
A mérnökké válás folyamataA mérnökké válás folyamata
A mérnökké válás folyamata
 
Gonosz IkertestvéRek
Gonosz IkertestvéRekGonosz IkertestvéRek
Gonosz IkertestvéRek
 
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
 
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
 
Enterprise java evolució, avagy java ee (
Enterprise java evolució, avagy java ee (Enterprise java evolució, avagy java ee (
Enterprise java evolució, avagy java ee (
 
Enterprise java evolució, avagy java ee (
Enterprise java evolució, avagy java ee (Enterprise java evolució, avagy java ee (
Enterprise java evolució, avagy java ee (
 
Mobile weekend 2015
Mobile weekend 2015Mobile weekend 2015
Mobile weekend 2015
 
A termékfejlesztés rögös útja (avagy barangolás a módszertanok és eszközök er...
A termékfejlesztés rögös útja (avagy barangolás a módszertanok és eszközök er...A termékfejlesztés rögös útja (avagy barangolás a módszertanok és eszközök er...
A termékfejlesztés rögös útja (avagy barangolás a módszertanok és eszközök er...
 
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!
 
Agile, Ésszerűen
Agile, ÉsszerűenAgile, Ésszerűen
Agile, Ésszerűen
 
XXI. századi szoftverfejlesztés
XXI. századi szoftverfejlesztésXXI. századi szoftverfejlesztés
XXI. századi szoftverfejlesztés
 
Süllyedünk! Ütközés a tesztelési jégheggyel (Teszt & Tea Meeup Budapest, 2018...
Süllyedünk! Ütközés a tesztelési jégheggyel (Teszt & Tea Meeup Budapest, 2018...Süllyedünk! Ütközés a tesztelési jégheggyel (Teszt & Tea Meeup Budapest, 2018...
Süllyedünk! Ütközés a tesztelési jégheggyel (Teszt & Tea Meeup Budapest, 2018...
 
Hogyan segítenek a felhasználók mobil appot fejleszteni? A crowdtestingről rö...
Hogyan segítenek a felhasználók mobil appot fejleszteni? A crowdtestingről rö...Hogyan segítenek a felhasználók mobil appot fejleszteni? A crowdtestingről rö...
Hogyan segítenek a felhasználók mobil appot fejleszteni? A crowdtestingről rö...
 

Szoftver tesztelés

  • 1. Szoftver tesztelés Az ORENBI rendszer back-end fejlesztésének tapasztalatai alapján Tóth Krisztián Gyula Horváth Gábor
  • 2. • Tesztvezérelt fejlesztés • Miért, hogyan, és milyen teszteket írjunk? • Kód lefedettség problémája • ORENBI back-end • Teszt struktúra és környezet • Modul fejlesztés és tesztelés
  • 3. Szoftver tesztelésről általában A szoftver alkalmazási területe kritikus szempont a tesztelési módszerek és alapelvek meghatározásakor! Az emberek a szoftverre támaszkodnak ezért fontos, hogy :  Ne produkáljon hibákat  Gyors és megbízható legyen
  • 4. Miért írjunk teszteket !? „Plusz munka, van anélkül is elég igény a megrendelőtől” mondhatnánk… • De!! ▫ Fejlesztés = A kód változik! ▫ Nincsenek tesztek!? -> Biztos minden jól működik még most is? ▫ Minél később jelentkezik egy hiba annál drágább a javítása  Furcsa hibajelenségekről számol be a megrendelő ▫ Át merjek írni bármit is?  Amelyik szoftver kódja nem változik azt vagy nem használják sehol, vagy nem meri senki módosítani! • Ha vannak tesztek: ▫ A hibák döntő része már az üzemi kód írásakor javításra kerül ▫ Minél nagyobb területet fedtünk le annál kevésbé van mitől félnünk egy módosítás után.
  • 5. Hogyan írjunk teszteket ? • Egyszerű és érthető legyen, nem kell hogy hatékony • F.I.R.S.T elvek ▫ Gyors – Fusson le gyorsan ▫ Független – Ne befolyásolják egymást ▫ Megismételhető – Környezet függetlenül ▫ Egyértelmű – Siker vagy kudarc ▫ Időszerű – Üzemi kód írás előtt/kor/utána/félévvel … -> De a lényeg, hogy legyen a kódunk bármikor tesztelhető
  • 6. Milyen teszteket írjunk ? • Front-end oldaltól induló tesztek, mintha valaki használná az alkalmazástEnd-to-end • A rendszer architektúra több réteg/egység együttes működését teszteli Integration • A rendszer egységei egymástól függetlenül kerülnek tesztelésre Unit
  • 7. Tesztek összehasonlítása Adatbázis Külső rendszer 1 (IBM Maximo) Külső rendszer 2 (Libra) Rendszer architektúra MOCK Alkalmazás réteg 1 elemei Alkalmazás réteg 2 elemei Külső rendszerek Egység teszt Integrációs teszt End-to-End teszt
  • 8. Unit Vs Integrációs tesztek Egység tesztelés Integrációs tesztelés • Rész funkciót tesztel • Szimulált környezetben ▫ Nincs adatbázis ▫ Függőségekre dummy objektumok • Gyors lefutás ▫ Futtassuk őket gyakran • Nem teszteljük az összeköttetést • Egyszerű következtetés a hiba okára és helyére ▫ Egyszerűen javítható • Minél nagyobb egészét próbáljuk lefedni • Valós környeztet hozunk létre ▫ Tényleges adatbázis kapcsolat, stb.. ▫ A függőségekre nincsenek dummy objektumok • Lassú lefutás • Drága (megírni) • Összeköttetést teszteljük • Nehezebb beazonosítani, hogy a hiba honnan származik • Hibákat nem tudunk vele szimulálni
  • 9. Különböző típusú tesztek viszonya • Helyettesíthetők-e a Unit tesztek csupán Integration tesztekkel? ▫ Nem, mind a két tesztre szükség van! ▫ Együtt lehet velük jól lefedni a rendszer működését. • Mit érdemes Unit tesztelni? ▫ Lehetőleg mindent. • Mikor írjunk Integration tesztet? ▫ Ha már írtunk Unit tesztet, minden kapcsolódó rétegben.
  • 10. Hogyan döntsem el, hogy mit teszteljek? • A tesztek írása is idő, ami költség. • A lehetőségek költségébe kerül amit teszt írás helyett végezhetne egy fejlesztő. ▫ (Pl: további funkció tervezése és implementálása) • Át kell gondolni, hogy mit van értelme tesztelni és mit nincs!
  • 11. Kód lefedettség • Mit is takar ez valójában? ▫ O%-os lefedettség = Nincs automatizált tesz ▫ 100%-os lefedettség = Minden kódsort legalább egyszer meghajtottunk automatizált tesztel • Minél magasabb az érték annál jobb érzés • DE! Csak az általunk írt összes használati eset teljesül! 100%
  • 12. Túl tesztelünk vagy alul ha kitűzünk egy értéket? Hibahatása Hiba valószínűsége 50% 25% 55% 35%43% 67% 22% 90%
  • 13. Mi javíthat a kód minőségen és a csapaton ? 1. Csak Unit tesztelt kód kerüljön a repository-ba! 2. Kötelező jellegű, gyakori code review! • A csapattagok bemutatják, hogy az adott problémát, hogy oldották meg. • Tanítva a többieket és magukat. 3. Kód szétfűzés, egyszerűsítés! • Dependency Injection és Facade-ek használata • „Túl komplex Unit tesztelni” -> Legyen Simple! (K.I.S.S) • Interfészek kisebb egységekre bontása
  • 14. Mikor nincs értelme a tesztvezérelt fejlesztésnek ? „Olyan sok csúnya kódot láttam már rengeteg pénzt termelni, hogy azt kell hinnem, hogy a kód minősége vagy nem szükséges, vagy nem elégséges az üzleti sikerek eléréséhez.” Kent Beck – Implementációs minták • Ha nem futtatjuk a teszteket • Ha az első sikeres lefutás után eldobjuk A fejlesztő felelőssége, hogy a kódolással töltött óráit jól használja fel. • A tesztek a szoftver érdekelt személyei részére készülnek. • Nem elég azt mondani, hogy a kód jó, bizonyítsuk.
  • 15.
  • 16. Amiről szó lesz: • Tesztelési struktúra (Visual Studio-ban) • Egyszerű példák • Alkalmazott segéd eszközök és keretrendszerek • A tesztelés és a fejlesztés ciklus kapcsolata
  • 17. Tesztelési struktúra • Külön projektekben • Külön futtathatóak ▫ Integration tesztek ▫ Unit tesztek • Tesztek elnevezése (specifikáció is egyben) • {FüggvényNeve}_{Tesztelt Állapot}_{VártViselkedés} • {FüggvényNeve}_When{Tesztelt Állapot}_Should{VártViselkedés} • Tesztek szerkezete • AAA szerint BDD: GIVEN, WHEN, THEN Arrange, Act, Assert
  • 20. Segéd eszközök és keretrendszerek • Nunit • Moq - https://github.com/Moq/moq4/wiki/Quickstart • FluentAssert - http://fluentassertions.com/documentation.html • NBuilder • Faker • Resharper ▫ dotCover • ReportUnit
  • 21. Tesztelés és a fejlesztés kapcsolata Continuous Testing / Delivery • Automatizálás a barátunk ▫ Időzíthető ▫ A fejlesztőknek nem kell minden tesztet futtatni • Az éles környezettel identikus helyen történik a tesztek futtatása. ▫ Nem kell végig várni a lefutásra. ▫ A hibák nem csak akkor jönnek elő, ha a teszteket a fejlesztők futtatják. ▫ A tesztek eredmény biztosan eljut a csapathoz.  Le merjem futtatni a többit is?  Kinek kell kijavítani?
  • 23. Mitől lesz valami könnyen és hatékonyan tesztelhető? Élmények, tapasztalatok Példa tesztek
  • 24. Végső gondolatok • Legyünk jobb fejlesztők! • Írjunk jobb minőségű kódot! • Ne nyűg legyen a teszt írás, hanem szokás! • Oktatni kell, szoktatni kell ▫ Házi feladatok tesztvezérelten (nem kell javítani!) ▫ A tesztelés ne az utolsó lépés legyen. ▫ Lassan elvárás lesz a cégeknél! „Amit nem lehet tesztelni az nem feature.” //by autóipar

Hinweis der Redaktion

  1. A teszteket nagyon nehéz gyakorlatiasan bemutatni, mert meg kell hozzá érteni az üzemi kódot, annak szerkezetét, a tesztek szerkezetét…..
  2. Van bent adatbázis, van bent külső rendszer, amit nem mockolsz ki, vagy nem tudsz vagy nem akarsz
  3. Köszöntök mindenkit! Most kicsit gyakorlatiasabb vizekre evezünk, és arra próbálok meg választ adni, hogy mitől lesz a kód könnyen és hatékonyan tesztelhető. Ez lehetne egy következő előadás…
  4. Ha nem tesztelünk, lehet hogy soha nem jövünk rá bizonyos dolgokra. Jöjjön a kód, amit körbeküldtünk, vagy körbe fogunk küldeni, nagyon sok jó példa van bent, akit részletesebben is érdekel az keressen minket…