Your SlideShare is downloading. ×
0
Teszt alapú fejlesztés
Teszt alapú fejlesztés
Teszt alapú fejlesztés
Teszt alapú fejlesztés
Teszt alapú fejlesztés
Teszt alapú fejlesztés
Teszt alapú fejlesztés
Teszt alapú fejlesztés
Teszt alapú fejlesztés
Teszt alapú fejlesztés
Teszt alapú fejlesztés
Teszt alapú fejlesztés
Teszt alapú fejlesztés
Teszt alapú fejlesztés
Teszt alapú fejlesztés
Teszt alapú fejlesztés
Teszt alapú fejlesztés
Teszt alapú fejlesztés
Teszt alapú fejlesztés
Teszt alapú fejlesztés
Teszt alapú fejlesztés
Teszt alapú fejlesztés
Teszt alapú fejlesztés
Teszt alapú fejlesztés
Teszt alapú fejlesztés
Teszt alapú fejlesztés
Teszt alapú fejlesztés
Teszt alapú fejlesztés
Teszt alapú fejlesztés
Teszt alapú fejlesztés
Teszt alapú fejlesztés
Teszt alapú fejlesztés
Teszt alapú fejlesztés
Teszt alapú fejlesztés
Teszt alapú fejlesztés
Teszt alapú fejlesztés
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Teszt alapú fejlesztés

3,403

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.

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,403
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
21
Comments
0
Likes
4
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Teszt alapú fejlesztés<br />Simon Bence<br />Duodecad, 2010-09-28<br />
  • 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. A Microsoft Zune új éve<br />2008 szilveszter<br />30GB Zune<br />Mind meghalt<br />Dátumkezelés bug<br />
  • 4. Air-TrafficControl System, LA Airport<br />1994 szeptember 9<br />Kapcsolatvesztés<br />Több, mint 400 repülő<br />
  • 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. És velünk mi történhet…<br />
  • 7. Akkor mekkora is lehet a hiba?<br />
  • 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. 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. 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. Mit tehet a fejlesztő?<br />Tervezés<br />Implementálás<br />Ellenőrzés<br />Tesztelés<br />Karbantartás<br />
  • 12. Tervezés<br /><ul><li>Átgondoltság
  • 13. Megfelelő specifikálás
  • 14. Elvárt működés
  • 15. Tesztelhetőségi feltételek</li></ul>Megfelelő struktúra<br />Static hívások kerülése<br />Dependencyinjection<br />
  • 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. Tesztelés<br />Adott rendszer adott körülmények között az elvártaknak megfelelően reagál e.<br />
  • 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. Hibajavítás költsége<br />
  • 20. Hogy csináljuk tehát ezt most?<br />
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Hova tovább<br />Teszteléselmélet<br />Formális módszerek<br />Phing<br />ContiniousIntegration<br />Hudson<br />PHPUnderControl<br />TDD<br />
  • 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. Hívókérdés, végszó<br />Felelősség!<br />Fejlesztő<br />Management<br />
  • 39. Köszönöm!<br />Kérdések?<br />A dia elérhető: http://slideshare.net/vvinston<br />

×