ݺߣ

ݺߣShare a Scribd company logo
Teszt alapú fejlesztésSimon BenceDuodecad, 2010-09-28
Miről lesz ma szó?Miért fontos a tesztelésMi is az alapprobléma?Hogyan tesztelünk?Hogyan teszteljünk?EgységtesztekTovábbi lehetőségek
A Microsoft Zune új éve2008 szilveszter30GB ZuneMind meghaltDátumkezelés bug
Air-TrafficControl System, LA Airport1994 szeptember 9KapcsolatvesztésTöbb, mint 400 repülő
Az Ariane 5 felrobbanása199536 másodpercet repültHibás int kezelésTöbb, mint 500m USD kár
És velünk mi öéԳ…
Akkor mekkora is lehet a hiba?
Defektus/KLOCVállalati standard: 15-50/1000Microsoft standard: 10-20/1000Space-shuttle software: 0/500.000Nálunk vajon mennyi?
A probléma megfogalmazásaA komplex munka minden esetben hibával járA hibák számát és hatását minimalizálni kellKöltséghatékonyságMinden fázisban megfelelő „védekező mechanizmusok”Üzleti tervezésTechnikai tervezésFejlesztésMinőség-ellenőrzésThxTyrael
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 ڱő?ձé𳾱ԳááőéձٱéԳٲá
ձéÁٲDzԻDZٲá
Megfelelő specifikálás
Elvárt működés
Tesztelhetőségi feltételekMegfelelő struktúraStatic hívások kerüléseDependencyinjection
EllenőrzésKódolás és tesztelés közti fázisIndirektCsökkenti a tesztelés-javítás fázis idejétCodereview!Építő jellegű kritika
TesztelésAdott rendszer adott körülmények között az elvártaknak megfelelően reagál e.
Mi a tesztelésA 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őkorMi az, amit most csinálunk?Lefuttatjukecho, var_dump, trigger_errordebug() függvényProblémákAd hocMódosítások a kódban (korrumpálhat)Nehezen kezelhetőKézzel kell futtatni a bemeneteket
AlapelvekMegismételhetőségKiszámíthatóságTervezettségKicsitől a nagy fele (bottom-up)Pareto-elv (80/20)
Tesztek csoportosítása ITranszparensségBlackboxWhiteboxScopeEgységtesztIntegrációs tesztRendszer tesztRendszer integrációs teszt
Tesztek csoportosítása IIFunkcionalitásFunkcionálisNem funkcionálisFelelősFejlesztő (Kivitelező)TesztelőIgénylőHarmadik személy (pl. felhasználó)
A teljesség igénye nélkülVerifiká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 tesztTerhelés tesztBiztonsági tesztKódminőségi tesztekModul/EgységtesztScenario alapú tesztelésGUI tesztelésSeleniumKomplex állapotterek problémája
Mai elsődleges fókuszunkEgységtesztWhiteboxEgységFunkcionálisFejlesztőiJellemzőiÁltalános elveknek való megfelelésEgyszerűen írható és futtathatóA legkisebb egység (osztály) funkcionális vizsgálataAlapelvHa a részek hibásak, az egész sem lehet megfelelő
PHP Unit test framerok-ök listájaPHPUnitTestilencePHPSpecBehaviorDrivenDevelopmentLime SymfonyApache-TestOjesDocumentationDriven TestingSimpleTestnem élő fejlesztésSnapTestnem élő fejlesztésAmocknem élő fejlesztés
PHPUnitSebastian BergmannthePHP.ccXUnit családJUnit-ból3.4-es verzióPHP5PEAR-ből installálhatóDe facto PHP szabványKitünőmanual
Funkcionális tesztelés<?php$fixture=array();echocount($fixture)==0?’ok\n’:’notok\n’;$fixture[]=’element’;echocount($fixture)==1?’ok\n’:’notok\n’;A példák a PHPUnitmanualból vannak
Assert-ekassertArrayHasKey()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);functionassertTrue($condition){if(!$condition){thrownewException(’Assertionfailed!’);}}
Első unittest-ünk<?phprequire_once’PHPUnit/Framework.php’;classStackTestextendsPHPUnit_Framework_TestCase{publicfunctiontestPushAndPop(){$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<?phpclassMy_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<?phprequire_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<?phprequire_once'SomeClass.php';classStubTestextendsPHPUnit_Framework_TestCase{publicfunctiontestStub(){//CreateastubfortheSomeClassclass.$stub=$this->getMock('SomeClass');//Configurethestub.$stub->expects($this->any())->method('doSomething')->will($this->returnValue('foo'));//Calling$stub->doSomething()willnowreturn//'foo'.$this->assertEquals('foo',$stub->doSomething());}}
Hova továbbTeszteléselméletFormális módszerekPhingContiniousIntegrationHudsonPHPUnderControlTDD
Ad

Recommended

Gonosz IkertestvéRek
Gonosz IkertestvéRek
C4M7SX
Szoftver tesztelés
Szoftver tesztelés
Krisztián Gyula Tóth
Süllyedünk! Ütközés a tesztelési jégheggyel (Teszt & Tea Meeup Budapest, 2018...
Süllyedünk! Ütközés a tesztelési jégheggyel (Teszt & Tea Meeup Budapest, 2018...
Gáspár Nagy
Devops meetup - Automatizált tesztek
Devops meetup - Automatizált tesztek
Zsolt Takács
Mobil Weekend - A tesztelői csapat evolúciója
Mobil Weekend - A tesztelői csapat evolúciója
Csaba Szabó
Szoftver tesztelés - Gyakorlati jó-ha-tudod
Szoftver tesztelés - Gyakorlati jó-ha-tudod
Richard Oliver Legendi
Tesztelesi folyamatok - Arkon
Tesztelesi folyamatok - Arkon
zferenczik
PHP alkalmazások minőségbiztosítása
PHP alkalmazások minőségbiztosítása
Ferenc Kovács
A tesztelés szerepe folyamatos kihelyezést használó projektekben (Microsoft, ...
A tesztelés szerepe folyamatos kihelyezést használó projektekben (Microsoft, ...
Gáspár Nagy
Szoftverfejlesztés a repülőgépiparban
Szoftverfejlesztés a repülőgépiparban
Ákos Horváth
20111130 oa gtest
20111130 oa gtest
czras
Objektum-orinetált mérések a gyakorlatban
Objektum-orinetált mérések a gyakorlatban
Antal Orcsik
Egységtesztek automatikus generálása forráskódból
Egységtesztek automatikus generálása forráskódból
Zoltan Micskei
Modell alapú tesztelés: célok és lehetőségek
Modell alapú tesztelés: célok és lehetőségek
Zoltan Micskei
Funkcionális tesztelés támogatása UFT tesztautomatizálással
Funkcionális tesztelés támogatása UFT tesztautomatizálással
Gergő Hencz
Tesztgenerálás a gyakorlatban - Az IntelliTest és ami mögötte van
Tesztgenerálás a gyakorlatban - Az IntelliTest és ami mögötte van
Dávid Honfi

More Related Content

Similar to Teszt alapú fejlesztés (9)

PHP alkalmazások minőségbiztosítása
PHP alkalmazások minőségbiztosítása
Ferenc Kovács
A tesztelés szerepe folyamatos kihelyezést használó projektekben (Microsoft, ...
A tesztelés szerepe folyamatos kihelyezést használó projektekben (Microsoft, ...
Gáspár Nagy
Szoftverfejlesztés a repülőgépiparban
Szoftverfejlesztés a repülőgépiparban
Ákos Horváth
20111130 oa gtest
20111130 oa gtest
czras
Objektum-orinetált mérések a gyakorlatban
Objektum-orinetált mérések a gyakorlatban
Antal Orcsik
Egységtesztek automatikus generálása forráskódból
Egységtesztek automatikus generálása forráskódból
Zoltan Micskei
Modell alapú tesztelés: célok és lehetőségek
Modell alapú tesztelés: célok és lehetőségek
Zoltan Micskei
Funkcionális tesztelés támogatása UFT tesztautomatizálással
Funkcionális tesztelés támogatása UFT tesztautomatizálással
Gergő Hencz
Tesztgenerálás a gyakorlatban - Az IntelliTest és ami mögötte van
Tesztgenerálás a gyakorlatban - Az IntelliTest és ami mögötte van
Dávid Honfi
PHP alkalmazások minőségbiztosítása
PHP alkalmazások minőségbiztosítása
Ferenc Kovács
A tesztelés szerepe folyamatos kihelyezést használó projektekben (Microsoft, ...
A tesztelés szerepe folyamatos kihelyezést használó projektekben (Microsoft, ...
Gáspár Nagy
Szoftverfejlesztés a repülőgépiparban
Szoftverfejlesztés a repülőgépiparban
Ákos Horváth
20111130 oa gtest
20111130 oa gtest
czras
Objektum-orinetált mérések a gyakorlatban
Objektum-orinetált mérések a gyakorlatban
Antal Orcsik
Egységtesztek automatikus generálása forráskódból
Egységtesztek automatikus generálása forráskódból
Zoltan Micskei
Modell alapú tesztelés: célok és lehetőségek
Modell alapú tesztelés: célok és lehetőségek
Zoltan Micskei
Funkcionális tesztelés támogatása UFT tesztautomatizálással
Funkcionális tesztelés támogatása UFT tesztautomatizálással
Gergő Hencz
Tesztgenerálás a gyakorlatban - Az IntelliTest és ami mögötte van
Tesztgenerálás a gyakorlatban - Az IntelliTest és ami mögötte van
Dávid Honfi

Teszt alapú fejlesztés