Your SlideShare is downloading. ×

Teszt alapú fejlesztés

3,384

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,384
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
    Simon Bence
    Duodecad, 2010-09-28
  • 2. 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
  • 3. A Microsoft Zune új éve
    2008 szilveszter
    30GB Zune
    Mind meghalt
    Dátumkezelés bug
  • 4. Air-TrafficControl System, LA Airport
    1994 szeptember 9
    Kapcsolatvesztés
    Több, mint 400 repülő
  • 5. Az Ariane 5 felrobbanása
    1995
    36 másodpercet repült
    Hibás int kezelés
    Több, mint 500m USD kár
  • 6. És velünk mi történhet…
  • 7. Akkor mekkora is lehet a hiba?
  • 8. Defektus/KLOC
    Vállalati standard: 15-50/1000
    Microsoft standard: 10-20/1000
    Space-shuttle software: 0/500.000
    Nálunk vajon mennyi?
  • 9. 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
  • 10. 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.
  • 11. Mit tehet a fejlesztő?
    Tervezés
    Implementálás
    Ellenőrzés
    Tesztelés
    Karbantartás
  • 12. Tervezés
    • Átgondoltság
    • 13. Megfelelő specifikálás
    • 14. Elvárt működés
    • 15. Tesztelhetőségi feltételek
    Megfelelő struktúra
    Static hívások kerülése
    Dependencyinjection
  • 16. 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
  • 17. Tesztelés
    Adott rendszer adott körülmények között az elvártaknak megfelelően reagál e.
  • 18. 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
  • 19. Hibajavítás költsége
  • 20. Hogy csináljuk tehát ezt most?
  • 21. 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
  • 22. Alapelvek
    Megismételhetőség
    Kiszámíthatóság
    Tervezettség
    Kicsitől a nagy fele (bottom-up)
    Pareto-elv (80/20)
  • 23. Tesztek csoportosítása I
    Transzparensség
    Blackbox
    Whitebox
    Scope
    Egységteszt
    Integrációs teszt
    Rendszer teszt
    Rendszer integrációs teszt
  • 24. 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ó)
  • 25. 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
  • 26. 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ő
  • 27. 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
  • 28. 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
  • 29. 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
  • 30. 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()
  • 31. 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!’);    }}
  • 32. 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));    }}
  • 33. 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
  • 34. 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));
    }
    // …
    }
  • 35. 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());    }}
  • 36. Hova tovább
    Teszteléselmélet
    Formális módszerek
    Phing
    ContiniousIntegration
    Hudson
    PHPUnderControl
    TDD
  • 37. Tipikus Problémák
    Nem megfelelő erőforrás-ráfordítás
    Túl kevés
    Túl sok
    Lefedettség
    Rejtett hibák
    Immunissá válás
    Többszörös hiba
    Kontextus függőség
  • 38. Hívókérdés, végszó
    Felelősség!
    Fejlesztő
    Management
  • 39. Köszönöm!
    Kérdések?
    A dia elérhető: http://slideshare.net/vvinston

×