Teszt alapú fejlesztés
Upcoming SlideShare
Loading in...5
×
 

Teszt alapú fejlesztés

on

  • 3,776 views

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.

Statistics

Views

Total Views
3,776
Views on SlideShare
3,773
Embed Views
3

Actions

Likes
4
Downloads
18
Comments
0

1 Embed 3

http://vvinston.posterous.com 3

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Teszt alapú fejlesztés Teszt alapú fejlesztés Presentation Transcript

    • 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
      • Átgondoltság
      • Megfelelő specifikálás
      • Elvárt működés
      • Tesztelhetőségi feltételek
      Megfelelő 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
    • 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
    • Hívókérdés, végszó
      Felelősség!
      Fejlesztő
      Management
    • Köszönöm!
      Kérdések?
      A dia elérhető: http://slideshare.net/vvinston