Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Teszt alapú fejlesztés<br />Simon Bence<br />Duodecad, 2010-09-28<br />
Miről lesz ma szó?<br />Miért fontos a tesztelés<br />Mi is az alapprobléma?<br />Hogyan tesztelünk?<br />Hogyan teszteljü...
A Microsoft Zune új éve<br />2008 szilveszter<br />30GB Zune<br />Mind meghalt<br />Dátumkezelés bug<br />
Air-TrafficControl System, LA Airport<br />1994 szeptember 9<br />Kapcsolatvesztés<br />Több, mint 400 repülő<br />
Az Ariane 5 felrobbanása<br />1995<br />36 másodpercet repült<br />Hibás int kezelés<br />Több, mint 500m USD kár<br />
És velünk mi történhet…<br />
Akkor mekkora is lehet a hiba?<br />
Defektus/KLOC<br />Vállalati standard: 15-50/1000<br />Microsoft standard: 10-20/1000<br />Space-shuttle software: 0/500.0...
A probléma megfogalmazása<br />A komplex munka minden esetben hibával jár<br />A hibák számát és hatását minimalizálni kel...
Célunk<br />	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.<br />
Mit tehet a fejlesztő?<br />Tervezés<br />Implementálás<br />Ellenőrzés<br />Tesztelés<br />Karbantartás<br />
Tervezés<br /><ul><li>Átgondoltság
Megfelelő specifikálás
Elvárt működés
Tesztelhetőségi feltételek</li></ul>Megfelelő struktúra<br />Static hívások kerülése<br />Dependencyinjection<br />
Ellenőrzés<br />Kódolás és tesztelés közti fázis<br />Indirekt<br />Csökkenti a tesztelés-javítás fázis idejét<br />Codere...
Tesztelés<br />Adott rendszer adott körülmények között az elvártaknak megfelelően reagál e.<br />
Mi a tesztelés<br />A szoftvertesztelés a szoftverminőség-biztosítás és így a szoftverfejlesztés részétképezi. A tesztelés...
Hibajavítás költsége<br />
Hogy csináljuk tehát ezt most?<br />
Kőkor<br />Mi az, amit most csinálunk?<br />Lefuttatjuk<br />echo, var_dump, trigger_error<br />debug() függvény<br />Prob...
Alapelvek<br />Megismételhetőség<br />Kiszámíthatóság<br />Tervezettség<br />Kicsitől a nagy fele (bottom-up)<br />Pareto-...
Tesztek csoportosítása I<br />Transzparensség<br />Blackbox<br />Whitebox<br />Scope<br />Egységteszt<br />Integrációs tes...
Tesztek csoportosítása II<br />Funkcionalitás<br />Funkcionális<br />Nem funkcionális<br />Felelős<br />Fejlesztő (Kivitel...
A teljesség igénye nélkül<br />Verifikációs teszt (a terméket jól készítettük e el?)<br />Validációs teszt (a megfelelő te...
Mai elsődleges fókuszunk<br />Egységteszt<br />Whitebox<br />Egység<br />Funkcionális<br />Fejlesztői<br />Jellemzői<br />...
PHP Unit test framerok-ök listája<br />PHPUnit<br />Testilence<br />PHPSpec<br />BehaviorDrivenDevelopment<br />Lime <br /...
PHPUnit<br />Sebastian Bergmann<br />thePHP.cc<br />XUnit család<br />JUnit-ból<br />3.4-es verzió<br />PHP5<br />PEAR-ből...
Funkcionális tesztelés<br /><?php$fixture = array();echo count($fixture) == 0 ? ’ok
’ : ’not ok
’; $fixture[] = ’element’;...
Assert-ek<br />assertArrayHasKey()<br />assertClassHasAttribute()<br />assertClassHasStaticAttribute()<br />assertContains...
Assert-ek alkalmazása<br /><?php$fixture = array();assertTrue(count($fixture) == 0); $fixture[] = 'element';assertTrue(cou...
Első unittest-ünk<br /><?phprequire_once ’PHPUnit/Framework.php’; class StackTest extends PHPUnit_Framework_TestCase{    p...
Osztályok tesztelése – az osztály<br /><?php<br />classMy_FleetimplementsCountable<br />{<br />protected$ships = array();<...
Osztályok tesztelése – a teszt<br /><?php<br />require_once'PHPUnit/Framework.php';<br />require_once'My/Fleet.php';<br />...
Mocking és Stub-ok<br /><?php<br />require_once 'SomeClass.php'; class StubTest extends PHPUnit_Framework_TestCase{    pub...
Hova tovább<br />Teszteléselmélet<br />Formális módszerek<br />Phing<br />ContiniousIntegration<br />Hudson<br />PHPUnderC...
Upcoming SlideShare
Loading in …5
×

Teszt alapú fejlesztés

4,161 views

Published on

Bevezető előadás, a tesztelés fontosságáról, motivációs és figyelemfelkeltő célokkal. Az elmondottakat a unit test-ek bemutatásával erősíti meg.

Published in: Technology
  • Sex in your area is here: ❶❶❶ http://bit.ly/39sFWPG ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Follow the link, new dating source: ❶❶❶ http://bit.ly/39sFWPG ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Teszt alapú fejlesztés

  1. 1. Teszt alapú fejlesztés<br />Simon Bence<br />Duodecad, 2010-09-28<br />
  2. 2. Miről lesz ma szó?<br />Miért fontos a tesztelés<br />Mi is az alapprobléma?<br />Hogyan tesztelünk?<br />Hogyan teszteljünk?<br />Egységtesztek<br />További lehetőségek<br />
  3. 3. A Microsoft Zune új éve<br />2008 szilveszter<br />30GB Zune<br />Mind meghalt<br />Dátumkezelés bug<br />
  4. 4. Air-TrafficControl System, LA Airport<br />1994 szeptember 9<br />Kapcsolatvesztés<br />Több, mint 400 repülő<br />
  5. 5. Az Ariane 5 felrobbanása<br />1995<br />36 másodpercet repült<br />Hibás int kezelés<br />Több, mint 500m USD kár<br />
  6. 6. És velünk mi történhet…<br />
  7. 7. Akkor mekkora is lehet a hiba?<br />
  8. 8. Defektus/KLOC<br />Vállalati standard: 15-50/1000<br />Microsoft standard: 10-20/1000<br />Space-shuttle software: 0/500.000<br />Nálunk vajon mennyi?<br />
  9. 9. A probléma megfogalmazása<br />A komplex munka minden esetben hibával jár<br />A hibák számát és hatását minimalizálni kell<br />Költséghatékonyság<br />Minden fázisban megfelelő „védekező mechanizmusok”<br />Üzleti tervezés<br />Technikai tervezés<br />Fejlesztés<br />Minőség-ellenőrzés<br />ThxTyrael<br />
  10. 10. Célunk<br /> 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.<br />
  11. 11. Mit tehet a fejlesztő?<br />Tervezés<br />Implementálás<br />Ellenőrzés<br />Tesztelés<br />Karbantartás<br />
  12. 12. Tervezés<br /><ul><li>Átgondoltság
  13. 13. Megfelelő specifikálás
  14. 14. Elvárt működés
  15. 15. Tesztelhetőségi feltételek</li></ul>Megfelelő struktúra<br />Static hívások kerülése<br />Dependencyinjection<br />
  16. 16. Ellenőrzés<br />Kódolás és tesztelés közti fázis<br />Indirekt<br />Csökkenti a tesztelés-javítás fázis idejét<br />Codereview!<br />Építő jellegű kritika<br />
  17. 17. Tesztelés<br />Adott rendszer adott körülmények között az elvártaknak megfelelően reagál e.<br />
  18. 18. Mi a tesztelés<br />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.<br />- Wikipedia<br />
  19. 19. Hibajavítás költsége<br />
  20. 20. Hogy csináljuk tehát ezt most?<br />
  21. 21. Kőkor<br />Mi az, amit most csinálunk?<br />Lefuttatjuk<br />echo, var_dump, trigger_error<br />debug() függvény<br />Problémák<br />Ad hoc<br />Módosítások a kódban (korrumpálhat)<br />Nehezen kezelhető<br />Kézzel kell futtatni a bemeneteket<br />
  22. 22. Alapelvek<br />Megismételhetőség<br />Kiszámíthatóság<br />Tervezettség<br />Kicsitől a nagy fele (bottom-up)<br />Pareto-elv (80/20)<br />
  23. 23. Tesztek csoportosítása I<br />Transzparensség<br />Blackbox<br />Whitebox<br />Scope<br />Egységteszt<br />Integrációs teszt<br />Rendszer teszt<br />Rendszer integrációs teszt<br />
  24. 24. Tesztek csoportosítása II<br />Funkcionalitás<br />Funkcionális<br />Nem funkcionális<br />Felelős<br />Fejlesztő (Kivitelező)<br />Tesztelő<br />Igénylő<br />Harmadik személy (pl. felhasználó)<br />
  25. 25. A teljesség igénye nélkül<br />Verifikációs teszt (a terméket jól készítettük e el?)<br />Validációs teszt (a megfelelő terméket készítettük e el?)<br />Elfogadási teszt<br />Terhelés teszt<br />Biztonsági teszt<br />Kódminőségi tesztek<br />Modul/Egységteszt<br />Scenario alapú tesztelés<br />GUI tesztelés<br />Selenium<br />Komplex állapotterek problémája<br />
  26. 26. Mai elsődleges fókuszunk<br />Egységteszt<br />Whitebox<br />Egység<br />Funkcionális<br />Fejlesztői<br />Jellemzői<br />Általános elveknek való megfelelés<br />Egyszerűen írható és futtatható<br />A legkisebb egység (osztály) funkcionális vizsgálata<br />Alapelv<br />Ha a részek hibásak, az egész sem lehet megfelelő<br />
  27. 27. PHP Unit test framerok-ök listája<br />PHPUnit<br />Testilence<br />PHPSpec<br />BehaviorDrivenDevelopment<br />Lime <br />Symfony<br />Apache-Test<br />Ojes<br />DocumentationDriven Testing<br />SimpleTest<br />nem élő fejlesztés<br />SnapTest<br />nem élő fejlesztés<br />Amock<br />nem élő fejlesztés<br />
  28. 28. PHPUnit<br />Sebastian Bergmann<br />thePHP.cc<br />XUnit család<br />JUnit-ból<br />3.4-es verzió<br />PHP5<br />PEAR-ből installálható<br />De facto PHP szabvány<br />Kitünőmanual<br />
  29. 29. Funkcionális tesztelés<br /><?php$fixture = array();echo count($fixture) == 0 ? ’ok ’ : ’not ok ’; $fixture[] = ’element’;echo count($fixture) == 1 ? ’ok ’ : ’not ok ’;<br />A példák a PHPUnitmanualból vannak<br />
  30. 30. Assert-ek<br />assertArrayHasKey()<br />assertClassHasAttribute()<br />assertClassHasStaticAttribute()<br />assertContains()<br />assertContainsOnly()<br />assertEqualXMLStructure()<br />assertEquals()<br />assertFalse()<br />assertFileEquals()<br />assertFileExists()<br />assertGreaterThan()<br />assertGreaterThanOrEqual()<br />assertLessThan()<br />assertLessThanOrEqual()<br />assertNull()<br />assertObjectHasAttribute()<br />assertRegExp()<br />assertSame()<br />assertSelectCount()<br />assertSelectEquals()<br />assertSelectRegExp()<br />assertStringEndsWith()<br />assertStringEqualsFile()<br />assertStringStartsWith()<br />assertTag()<br />assertThat()<br />assertTrue()<br />assertType()<br />assertXmlFileEqualsXmlFile()<br />assertXmlStringEqualsXmlFile()<br />assertXmlStringEqualsXmlString()<br />
  31. 31. Assert-ek alkalmazása<br /><?php$fixture = array();assertTrue(count($fixture) == 0); $fixture[] = 'element';assertTrue(count($fixture) == 1); function assertTrue($condition){    if (!$condition) {        throw new Exception(’Assertion failed!’);    }}<br />
  32. 32. Első unittest-ünk<br /><?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));    }}<br />
  33. 33. Osztályok tesztelése – az osztály<br /><?php<br />classMy_FleetimplementsCountable<br />{<br />protected$ships = array();<br />publicfunctionaddShip($shipName)<br />{<br />$this->ships[] = $shipName;<br />}<br />publicfunctioncount()<br />{<br />returncount($this->ships);<br />}<br />publicfunctiongetShip($index)<br />{<br />return$this->ships[intval($index)];<br />}<br />}<br />A példa a ZendDevzone-ről származik<br />
  34. 34. Osztályok tesztelése – a teszt<br /><?php<br />require_once'PHPUnit/Framework.php';<br />require_once'My/Fleet.php';<br />classMyFleetTestextendsPHPUnit_Framework_TestCase<br />{<br />protected$fleet= null;<br />publicfunctionsetUp()<br />{<br />$this->fleet= newMy_Fleet;<br />}<br />publicfunctiontearDown()<br />{<br />unset($this->fleet);<br />}<br />publicfunctiontestShouldNotHaveAnyShipsYetInIntitialState()<br />{<br />$this->assertEquals(0, count($this->fleet));<br />}<br />publicfunctiontestAddingAShipWillIncrementCountByOne()<br />{<br />$this->fleet->addShip('USS Enterprise');<br />$this->assertEquals(1, count($this->fleet));<br />}<br /> // …<br />}<br />
  35. 35. Mocking és Stub-ok<br /><?php<br />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());    }}<br />
  36. 36. Hova tovább<br />Teszteléselmélet<br />Formális módszerek<br />Phing<br />ContiniousIntegration<br />Hudson<br />PHPUnderControl<br />TDD<br />
  37. 37. Tipikus Problémák<br />Nem megfelelő erőforrás-ráfordítás<br />Túl kevés<br />Túl sok<br />Lefedettség<br />Rejtett hibák<br />Immunissá válás<br />Többszörös hiba<br />Kontextus függőség<br />
  38. 38. Hívókérdés, végszó<br />Felelősség!<br />Fejlesztő<br />Management<br />
  39. 39. Köszönöm!<br />Kérdések?<br />A dia elérhető: http://slideshare.net/vvinston<br />

×