SlideShare a Scribd company logo
Teszt alapú fejlesztésSimon BenceDuodecad, 2010-09-28
Miről lesz ma szó?Miért fontos a tesztelésMi is az alapprobléma?Hogyan tesztelünk?Hogyan teszteljünk?EgységtesztekTovábbi lehetőségek
A Microsoft Zune új éve2008 szilveszter30GB ZuneMind meghaltDátumkezelés bug
Air-TrafficControl System, LA Airport1994 szeptember 9KapcsolatvesztésTöbb, mint 400 repülő
Az Ariane 5 felrobbanása199536 másodpercet repültHibás int kezelésTöbb, mint 500m USD kár
És velünk mi történhet…
Akkor mekkora is lehet a hiba?
Defektus/KLOCVállalati standard: 15-50/1000Microsoft standard: 10-20/1000Space-shuttle software: 0/500.000Nálunk vajon mennyi?
A probléma megfogalmazásaA komplex munka minden esetben hibával járA hibák számát és hatását minimalizálni kellKöltséghatékonyságMinden fázisban megfelelő „védekező mechanizmusok”Üzleti tervezésTechnikai tervezésFejlesztésMinőség-ellenőrzésThxTyrael
Célunk	A szoftverminőség biztosítása, és az erőforrás-ráfordítás minimalizálása az egész életciklusra nézve.
Mit tehet a fejlesztő?TervezésImplementálásEllenőrzésTesztelésKarbantartás
TervezésÁtgondoltság
Megfelelő specifikálás
Elvárt működés
Tesztelhetőségi feltételekMegfelelő struktúraStatic hívások kerüléseDependencyinjection
EllenőrzésKódolás és tesztelés közti fázisIndirektCsökkenti a tesztelés-javítás fázis idejétCodereview!Építő jellegű kritika
TesztelésAdott rendszer adott körülmények között az elvártaknak megfelelően reagál e.
Mi a tesztelésA szoftvertesztelés a szoftverminőség-biztosítás és így a szoftverfejlesztés részétképezi. A tesztelés egy rendszer vagy program kontrollált körülmények melletti futtatása, és az eredmények kiértékelése. A hagyományos megközelítés szerint a tesztelés célja az, hogy a fejlesztés során létrejövő hibákat minél korábban felfedezze, és ezzel csökkentse azok kijavításának költségeit.- Wikipedia
Hibajavítás költsége
Hogy csináljuk tehát ezt most?
KőkorMi az, amit most csinálunk?Lefuttatjukecho, var_dump, trigger_errordebug() függvényProblémákAd hocMódosítások a kódban (korrumpálhat)Nehezen kezelhetőKézzel kell futtatni a bemeneteket
AlapelvekMegismételhetőségKiszámíthatóságTervezettségKicsitől a nagy fele (bottom-up)Pareto-elv (80/20)
Tesztek csoportosítása ITranszparensségBlackboxWhiteboxScopeEgységtesztIntegrációs tesztRendszer tesztRendszer integrációs teszt
Tesztek csoportosítása IIFunkcionalitásFunkcionálisNem funkcionálisFelelősFejlesztő (Kivitelező)TesztelőIgénylőHarmadik személy (pl. felhasználó)
A teljesség igénye nélkülVerifikációs teszt (a terméket jól készítettük e el?)Validációs teszt (a megfelelő terméket készítettük e el?)Elfogadási tesztTerhelés tesztBiztonsági tesztKódminőségi tesztekModul/EgységtesztScenario alapú tesztelésGUI tesztelésSeleniumKomplex állapotterek problémája
Mai elsődleges fókuszunkEgységtesztWhiteboxEgységFunkcionálisFejlesztőiJellemzőiÁltalános elveknek való megfelelésEgyszerűen írható és futtathatóA legkisebb egység (osztály) funkcionális vizsgálataAlapelvHa a részek hibásak, az egész sem lehet megfelelő
PHP Unit test framerok-ök listájaPHPUnitTestilencePHPSpecBehaviorDrivenDevelopmentLime SymfonyApache-TestOjesDocumentationDriven TestingSimpleTestnem élő fejlesztésSnapTestnem élő fejlesztésAmocknem élő fejlesztés
PHPUnitSebastian BergmannthePHP.ccXUnit családJUnit-ból3.4-es verzióPHP5PEAR-ből installálhatóDe facto PHP szabványKitünőmanual
Funkcionális tesztelés<?php$fixture = array();echo count($fixture) == 0 ? ’ok’ : ’not ok’; $fixture[] = ’element’;echo count($fixture) == 1 ? ’ok’ : ’not ok’;A példák a PHPUnitmanualból vannak
Assert-ekassertArrayHasKey()assertClassHasAttribute()assertClassHasStaticAttribute()assertContains()assertContainsOnly()assertEqualXMLStructure()assertEquals()assertFalse()assertFileEquals()assertFileExists()assertGreaterThan()assertGreaterThanOrEqual()assertLessThan()assertLessThanOrEqual()assertNull()assertObjectHasAttribute()assertRegExp()assertSame()assertSelectCount()assertSelectEquals()assertSelectRegExp()assertStringEndsWith()assertStringEqualsFile()assertStringStartsWith()assertTag()assertThat()assertTrue()assertType()assertXmlFileEqualsXmlFile()assertXmlStringEqualsXmlFile()assertXmlStringEqualsXmlString()
Assert-ek alkalmazása<?php$fixture = array();assertTrue(count($fixture) == 0); $fixture[] = 'element';assertTrue(count($fixture) == 1); function assertTrue($condition){    if (!$condition) {        throw new Exception(’Assertion failed!’);    }}
Első unittest-ünk<?phprequire_once ’PHPUnit/Framework.php’; class StackTest extends PHPUnit_Framework_TestCase{    public function testPushAndPop()    {        $stack = array();        $this->assertEquals(0, count($stack));         array_push($stack, ’foo’);        $this->assertEquals(’foo’, $stack[count($stack)-1]);        $this->assertEquals(1, count($stack));         $this->assertEquals(’foo’, array_pop($stack));        $this->assertEquals(0, count($stack));    }}
Osztályok tesztelése – az osztály<?phpclassMy_FleetimplementsCountable{protected$ships = array();publicfunctionaddShip($shipName){$this->ships[] = $shipName;}publicfunctioncount(){returncount($this->ships);}publicfunctiongetShip($index){return$this->ships[intval($index)];}}A példa a ZendDevzone-ről származik
Osztályok tesztelése – a teszt<?phprequire_once'PHPUnit/Framework.php';require_once'My/Fleet.php';classMyFleetTestextendsPHPUnit_Framework_TestCase{protected$fleet= null;publicfunctionsetUp(){$this->fleet= newMy_Fleet;}publicfunctiontearDown(){unset($this->fleet);}publicfunctiontestShouldNotHaveAnyShipsYetInIntitialState(){$this->assertEquals(0, count($this->fleet));}publicfunctiontestAddingAShipWillIncrementCountByOne(){$this->fleet->addShip('USS Enterprise');$this->assertEquals(1, count($this->fleet));}	// …}
Mocking és Stub-ok<?phprequire_once 'SomeClass.php'; class StubTest extends PHPUnit_Framework_TestCase{    public function testStub()    {        // Create a stub for the SomeClass class.        $stub = $this->getMock('SomeClass');         // Configure the stub.        $stub->expects($this->any())             ->method('doSomething')             ->will($this->returnValue('foo'));         // Calling $stub->doSomething() will now return        // 'foo'.        $this->assertEquals('foo', $stub->doSomething());    }}
Hova továbbTeszteléselméletFormális módszerekPhingContiniousIntegrationHudsonPHPUnderControlTDD

More Related Content

Similar to Teszt alapú fejlesztés

IV. Elmélet - Az ERP rendszerek implementációja 2..pptx
IV. Elmélet - Az ERP rendszerek implementációja 2..pptxIV. Elmélet - Az ERP rendszerek implementációja 2..pptx
IV. Elmélet - Az ERP rendszerek implementációja 2..pptx
Szabolcs Gulyás
 
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ö...
Balázs Fónagy
 
Opel szentgotthard nem_ertekteremto_munka_csokkentese
Opel szentgotthard nem_ertekteremto_munka_csokkenteseOpel szentgotthard nem_ertekteremto_munka_csokkentese
Opel szentgotthard nem_ertekteremto_munka_csokkentese
László Tömpe
 
Szoftver bevezetés problémái
Szoftver bevezetés problémáiSzoftver bevezetés problémái
Szoftver bevezetés problémái
tbodocz
 
Funkcionális tesztelés támogatása UFT tesztautomatizálással
Funkcionális tesztelés támogatása UFT tesztautomatizálássalFunkcionális tesztelés támogatása UFT tesztautomatizálással
Funkcionális tesztelés támogatása UFT tesztautomatizálással
Gergő Hencz
 
Hogyan segítenek a felhasználók mobil appot fejleszteni? A crowdtesting röviden.
Hogyan segítenek a felhasználók mobil appot fejleszteni? A crowdtesting röviden.Hogyan segítenek a felhasználók mobil appot fejleszteni? A crowdtesting röviden.
Hogyan segítenek a felhasználók mobil appot fejleszteni? A crowdtesting röviden.
Balázs Fónagy
 
Biztonságos Programozás
Biztonságos ProgramozásBiztonságos Programozás
Biztonságos Programozás
Peter Perger
 
Tóth Lajos - Személyes élmények az ITIL bevezetésével
Tóth Lajos - Személyes élmények az ITIL bevezetésévelTóth Lajos - Személyes élmények az ITIL bevezetésével
Tóth Lajos - Személyes élmények az ITIL bevezetésével
Informatikai Intézet
 
Szoftverfejlesztés a repülőgépiparban
Szoftverfejlesztés a repülőgépiparbanSzoftverfejlesztés a repülőgépiparban
Szoftverfejlesztés a repülőgépiparban
Ákos Horváth
 
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
Dániel Stein
 
Modell alapú tesztelés: célok és lehetőségek
Modell alapú tesztelés: célok és lehetőségekModell alapú tesztelés: célok és lehetőségek
Modell alapú tesztelés: célok és lehetőségek
Zoltan Micskei
 
Szoftver tesztelés
Szoftver tesztelésSzoftver tesztelés
Szoftver tesztelés
Krisztián Gyula Tóth
 
VI. Elmélet - Kitekintés az ERP-n túlra .pptx
VI. Elmélet - Kitekintés az ERP-n túlra .pptxVI. Elmélet - Kitekintés az ERP-n túlra .pptx
VI. Elmélet - Kitekintés az ERP-n túlra .pptx
Szabolcs Gulyás
 
III. Elmélet - Az ERP rendszerek implementációja 1..pptx
III. Elmélet - Az ERP rendszerek implementációja 1..pptxIII. Elmélet - Az ERP rendszerek implementációja 1..pptx
III. Elmélet - Az ERP rendszerek implementációja 1..pptx
Szabolcs Gulyás
 
Virtuális Platformváltás validált környezetben
Virtuális Platformváltás validált környezetbenVirtuális Platformváltás validált környezetben
Virtuális Platformváltás validált környezetben
gazdagf
 
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...
Gáspár Nagy
 
Agile meetup 2013_04_10
Agile meetup 2013_04_10Agile meetup 2013_04_10
Agile meetup 2013_04_10
Gábor Fehér
 
Dr. Kollár Csaba: Az informatika(i biztonság) mutatószámai
Dr. Kollár Csaba: Az informatika(i biztonság) mutatószámai Dr. Kollár Csaba: Az informatika(i biztonság) mutatószámai
Dr. Kollár Csaba: Az informatika(i biztonság) mutatószámai
Csaba KOLLAR (Dr. PhD.)
 
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
Antal Orcsik
 

Similar to Teszt alapú fejlesztés (20)

IV. Elmélet - Az ERP rendszerek implementációja 2..pptx
IV. Elmélet - Az ERP rendszerek implementációja 2..pptxIV. Elmélet - Az ERP rendszerek implementációja 2..pptx
IV. Elmélet - Az ERP rendszerek implementációja 2..pptx
 
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ö...
 
Opel szentgotthard nem_ertekteremto_munka_csokkentese
Opel szentgotthard nem_ertekteremto_munka_csokkenteseOpel szentgotthard nem_ertekteremto_munka_csokkentese
Opel szentgotthard nem_ertekteremto_munka_csokkentese
 
Szoftver bevezetés problémái
Szoftver bevezetés problémáiSzoftver bevezetés problémái
Szoftver bevezetés problémái
 
Funkcionális tesztelés támogatása UFT tesztautomatizálással
Funkcionális tesztelés támogatása UFT tesztautomatizálássalFunkcionális tesztelés támogatása UFT tesztautomatizálással
Funkcionális tesztelés támogatása UFT tesztautomatizálással
 
Hogyan segítenek a felhasználók mobil appot fejleszteni? A crowdtesting röviden.
Hogyan segítenek a felhasználók mobil appot fejleszteni? A crowdtesting röviden.Hogyan segítenek a felhasználók mobil appot fejleszteni? A crowdtesting röviden.
Hogyan segítenek a felhasználók mobil appot fejleszteni? A crowdtesting röviden.
 
Biztonságos Programozás
Biztonságos ProgramozásBiztonságos Programozás
Biztonságos Programozás
 
Tóth Lajos - Személyes élmények az ITIL bevezetésével
Tóth Lajos - Személyes élmények az ITIL bevezetésévelTóth Lajos - Személyes élmények az ITIL bevezetésével
Tóth Lajos - Személyes élmények az ITIL bevezetésével
 
Szoftverfejlesztés a repülőgépiparban
Szoftverfejlesztés a repülőgépiparbanSzoftverfejlesztés a repülőgépiparban
Szoftverfejlesztés a repülőgépiparban
 
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
 
Modell alapú tesztelés: célok és lehetőségek
Modell alapú tesztelés: célok és lehetőségekModell alapú tesztelés: célok és lehetőségek
Modell alapú tesztelés: célok és lehetőségek
 
Szoftver tesztelés
Szoftver tesztelésSzoftver tesztelés
Szoftver tesztelés
 
VI. Elmélet - Kitekintés az ERP-n túlra .pptx
VI. Elmélet - Kitekintés az ERP-n túlra .pptxVI. Elmélet - Kitekintés az ERP-n túlra .pptx
VI. Elmélet - Kitekintés az ERP-n túlra .pptx
 
A jövő IT világa
A jövő IT világaA jövő IT világa
A jövő IT világa
 
III. Elmélet - Az ERP rendszerek implementációja 1..pptx
III. Elmélet - Az ERP rendszerek implementációja 1..pptxIII. Elmélet - Az ERP rendszerek implementációja 1..pptx
III. Elmélet - Az ERP rendszerek implementációja 1..pptx
 
Virtuális Platformváltás validált környezetben
Virtuális Platformváltás validált környezetbenVirtuális Platformváltás validált környezetben
Virtuális Platformváltás validált környezetben
 
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...
 
Agile meetup 2013_04_10
Agile meetup 2013_04_10Agile meetup 2013_04_10
Agile meetup 2013_04_10
 
Dr. Kollár Csaba: Az informatika(i biztonság) mutatószámai
Dr. Kollár Csaba: Az informatika(i biztonság) mutatószámai Dr. Kollár Csaba: Az informatika(i biztonság) mutatószámai
Dr. Kollár Csaba: Az informatika(i biztonság) mutatószámai
 
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
 

Teszt alapú fejlesztés