0
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

3,416

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
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,416
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
22
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Transcript of "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 />
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×