SlideShare une entreprise Scribd logo
1  sur  36
Teszt alapú fejlesztés Simon Bence Duodecad, 2010-09-28
Miről lesz ma szó? Miért fontos a tesztelés Mi is az alapprobléma? Hogyan tesztelünk? Hogyan teszteljünk? Egységtesztek További lehetőségek
A Microsoft Zune új éve 2008 szilveszter 30GB Zune Mind meghalt Dátumkezelés bug
Air-TrafficControl System, LA Airport 1994 szeptember 9 Kapcsolatvesztés Több, mint 400 repülő
Az Ariane 5 felrobbanása 1995 36 másodpercet repült Hibás int kezelés Több, mint 500m USD kár
És velünk mi történhet…
Akkor mekkora is lehet a hiba?
Defektus/KLOC Vállalati standard: 15-50/1000 Microsoft standard: 10-20/1000 Space-shuttle software: 0/500.000 Nálunk vajon mennyi?
A probléma megfogalmazása A komplex munka minden esetben hibával jár A hibák számát és hatását minimalizálni kell Költséghatékonyság Minden fázisban megfelelő „védekező mechanizmusok” Üzleti tervezés Technikai tervezés Fejlesztés Minőség-ellenőrzés ThxTyrael
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és Implementálás Ellenőrzés Tesztelés Karbantartás
Tervezés ,[object Object]
Megfelelő specifikálás
Elvárt működés
Tesztelhetőségi feltételekMegfelelő struktúra Static hívások kerülése Dependencyinjection
Ellenőrzés Kódolás és tesztelés közti fázis Indirekt Csökkenti a tesztelés-javítás fázis idejét Codereview! Építő jellegű kritika
Tesztelés Adott rendszer adott körülmények között az elvártaknak megfelelően reagál e.
Mi a tesztelés A 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őkor Mi az, amit most csinálunk? Lefuttatjuk echo, var_dump, trigger_error debug() függvény Problémák Ad hoc Módosítások a kódban (korrumpálhat) Nehezen kezelhető Kézzel kell futtatni a bemeneteket
Alapelvek Megismételhetőség Kiszámíthatóság Tervezettség Kicsitől a nagy fele (bottom-up) Pareto-elv (80/20)
Tesztek csoportosítása I Transzparensség Blackbox Whitebox Scope Egységteszt Integrációs teszt Rendszer teszt Rendszer integrációs teszt
Tesztek csoportosítása II Funkcionalitás Funkcionális Nem funkcionális Felelős Fejlesztő (Kivitelező) Tesztelő Igénylő Harmadik személy (pl. felhasználó)
A teljesség igénye nélkül Verifiká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 teszt Terhelés teszt Biztonsági teszt Kódminőségi tesztek Modul/Egységteszt Scenario alapú tesztelés GUI tesztelés Selenium Komplex állapotterek problémája
Mai elsődleges fókuszunk Egységteszt Whitebox Egység Funkcionális Fejlesztői Jellemzői Általános elveknek való megfelelés Egyszerűen írható és futtatható A legkisebb egység (osztály) funkcionális vizsgálata Alapelv Ha a részek hibásak, az egész sem lehet megfelelő
PHP Unit test framerok-ök listája PHPUnit Testilence PHPSpec BehaviorDrivenDevelopment Lime  Symfony Apache-Test Ojes DocumentationDriven Testing SimpleTest nem élő fejlesztés SnapTest nem élő fejlesztés Amock nem élő fejlesztés
PHPUnit Sebastian Bergmann thePHP.cc XUnit család JUnit-ból 3.4-es verzió PHP5 PEAR-ből installálható De facto PHP szabvány Kitü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-ek assertArrayHasKey() 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 <?php classMy_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 <?php require_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 <?php require_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ább Teszteléselmélet Formális módszerek Phing ContiniousIntegration Hudson PHPUnderControl TDD

Contenu connexe

Similaire à 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..pptxSzabolcs 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_csokkenteseLá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áitbodocz
 
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ássalGergő 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ásPeter 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évelInformatikai 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íziseDá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égekZoltan Micskei
 
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 .pptxSzabolcs 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..pptxSzabolcs 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örnyezetbengazdagf
 
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_10Gá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 gyakorlatbanAntal Orcsik
 

Similaire à 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