minőségbiztosítás a fejlesztési folyamat során
DESCRIPTION
Minőségbiztosítás a fejlesztési folyamat során. Pusztai László vezető konzulens. Gaál László rendszermérnök. Microsoft Magyarország. Tartalom. A minőségbiztosítás szükségessége A minőségbiztosítás eszközei Napi tevékenységek A minőségbiztosítás elemei a napi fejlesztői munka során - PowerPoint PPT PresentationTRANSCRIPT
Minőségbiztosítás a Minőségbiztosítás a fejlesztési folyamat soránfejlesztési folyamat során
Pusztai LászlóPusztai Lászlóvezető konzulensvezető konzulens
Gaál LászlóGaál Lászlórendszermérnökrendszermérnök
Microsoft MagyarországMicrosoft Magyarország
TartalomTartalom
A minőségbiztosítás szükségességeA minőségbiztosítás szükségességeA minőségbiztosítás eszközeiA minőségbiztosítás eszközeiNapi tevékenységekNapi tevékenységekA minőségbiztosítás elemei a napi A minőségbiztosítás elemei a napi
fejlesztői munka soránfejlesztői munka soránA termék kiadásaA termék kiadásaÖsszefoglalóÖsszefoglaló
Miért szükséges a Miért szükséges a minőségbiztosítás?minőségbiztosítás?
A projektek „nem kellően A projektek „nem kellően sikeres” ¾-e miattsikeres” ¾-e miatt
A „kommunikációs és A „kommunikációs és működési gondok” miattműködési gondok” miatt
28%28%46%46%
Ha ez nincs…Ha ez nincs…tipikus párbeszédtipikus párbeszéd „„Kijavítottátok azt a hibát, amit a Kijavítottátok azt a hibát, amit a mmezőbankosok jeleztek?”ezőbankosok jeleztek?” „„Miért, mi bajuk volt?”Miért, mi bajuk volt?” „„Igen, én megcsináltam”Igen, én megcsináltam” „„Akkor add ide a javítást, mert a Polgári Bankba is ki kéne Akkor add ide a javítást, mert a Polgári Bankba is ki kéne
vinni…”vinni…” „„Ott nem az új verziót tetted fel tegnap?”Ott nem az új verziót tetted fel tegnap?” „„De igen, csak azt otthon fordítottam, és a De igen, csak azt otthon fordítottam, és a BtrieveBtrieve-driver -driver
valamiért nem fordult le, úgyhogy abból a régit tettem fel valamiért nem fordult le, úgyhogy abból a régit tettem fel nekik.”nekik.”
„„Várj, odaadom azt is”Várj, odaadom azt is” „„De megy ez az ő megjelenítőjükkel?”De megy ez az ő megjelenítőjükkel?” „„Nem tudom, nekem ment”Nem tudom, nekem ment”
MinőségbiztosításMinőségbiztosítás
VáltozáskezelésselVáltozáskezelésselFix pont: a projekt aktuális állapotaFix pont: a projekt aktuális állapota
ezt az állapotot tudjuk kontrolláltan változtatniezt az állapotot tudjuk kontrolláltan változtatni
Projekt-állapotProjekt-állapot SpecifikációSpecifikáció A kód állapotaA kód állapota Bejelentett hibákBejelentett hibák
A szükséges infrastruktúraA szükséges infrastruktúra Nyilvántartás a specifikációk részéreNyilvántartás a specifikációk részére
követelménykezeléskövetelménykezelés Munkadarabok jegyzékeMunkadarabok jegyzéke
felelős, készültségi fokfelelős, készültségi fok Belső szabályrendszerBelső szabályrendszer
projekt-kézikönyvprojekt-kézikönyv Forráskód-kezelő rendszerForráskód-kezelő rendszer
a szoftver aktuális állapotaa szoftver aktuális állapota Hibajelentéseket kezelő rendszerHibajelentéseket kezelő rendszer
az aktuális állapotról szóló visszajelzések nyilvántartásaaz aktuális állapotról szóló visszajelzések nyilvántartása
Napi munkafázisok – fejlesztésNapi munkafázisok – fejlesztésDevelopDevelop
Készül az új kódKészül az új kód A fejlesztő dolgozik a A fejlesztő dolgozik a
saját gépénsaját gépén
DevelopDevelop(fejlesztés)(fejlesztés)
Specify(specifikálás)
módosítottmódosítottés új kódés új kód
módosított és újkövetelmények
Napi munkafázisok – bejelentésNapi munkafázisok – bejelentésCheck-inCheck-in
Az elkészült Az elkészült munkadarab munkadarab integrációja a integrációja a szoftver aktuális szoftver aktuális állapotábaállapotába
Változás!Változás! tehát változáskezelést tehát változáskezelést
kell alkalmaznikell alkalmazni forráskód-kezelőforráskód-kezelő szabályokszabályok
Develop(fejlesztés)
Check-inCheck-in(beadás)(beadás)
Specify(specifikálás)
aktuálisaktuálisállapotállapot
módosítottés új kód
módosított és újkövetelmények
Napi munkafázisok – buildNapi munkafázisok – buildBuildBuild
A szoftver aktuális A szoftver aktuális állapotának állapotának leképezése leképezése telepíthető termékkételepíthető termékké
Ha a projekt Ha a projekt elkészült, ennek az elkészült, ennek az eredményét adjuk ki a eredményét adjuk ki a megrendelőnekmegrendelőnek
BuildBuild(elkészítés)(elkészítés)
Develop(fejlesztés)
Check-in(beadás)
Specify(specifikálás)
aktuálisállapot
napinapibuildbuild
módosítottés új kód
módosított és újkövetelmények
Napi munkafázisok – tesztelésNapi munkafázisok – tesztelésTestTest
A termék aktuális A termék aktuális állapotának állapotának összevetéseösszevetése a követelményekkela követelményekkel általános elvárásokkaláltalános elvárásokkal
A visszajelzéseket A visszajelzéseket rögzítjükrögzítjük
Build(elkészítés)
Develop(fejlesztés)
Check-in(beadás)
TestTest(tesztelés)(tesztelés)
Specify(specifikálás)
aktuálisállapot
napibuild
hibák,hibák,vissza-vissza-jelzésekjelzésekmódosított
és új kód
módosított és újkövetelmények
VisszacsatolásVisszacsatolás
A fejlesztést A fejlesztést természetesen természetesen befolyásolják a befolyásolják a bejelentett hibák és bejelentett hibák és egyéb észrevételek isegyéb észrevételek is
Build(elkészítés)
DevelopDevelop(fejlesztés)(fejlesztés)
Check-in(beadás)
Test(tesztelés)
Specify(specifikálás)
aktuálisállapot
napibuild
hibák,vissza-jelzésekmódosítottmódosított
és új kódés új kód
módosított és újkövetelmények
A napi ciklusA napi ciklusA teljes képA teljes kép
A csapat tagjai A csapat tagjai konkurrensen hajtják konkurrensen hajtják végre az egyes végre az egyes fázisokatfázisokat
Ezeket az Ezeket az állomásokat állomásokat tárgyaljuk most tárgyaljuk most részletesenrészletesen
Build(elkészítés)
Develop(fejlesztés)
Check-in(beadás)
Test(tesztelés)
Specify(specifikálás)
aktuálisállapot
napibuild
hibák,vissza-jelzésekmódosított
és új kód
módosított és újkövetelmények
A napi ciklusA napi ciklus
09:3009:30 Napindító megbeszélésNapindító megbeszélés09:4509:45 Fejlesztés, tesztelésFejlesztés, tesztelés17:0017:00 Check-in ablak nyílik, peer code Check-in ablak nyílik, peer code
review-kreview-k18:0018:00 Napi buildNapi build
A fejlesztési szakaszA fejlesztési szakaszDevelopDevelop
A tényleges fejlesztés A tényleges fejlesztés folyamatafolyamata
Erről ma nem Erről ma nem beszélünkbeszélünkmegtanulható megtanulható
iskolában, iskolában, tanfolyamon, tanfolyamon, könyvből, könyvből, önképzéssel, önképzéssel, munka közben, …munka közben, …
Build(elkészítés)
Develop(fejlesztés)
Test(tesztelés)
Specify(specifikálás)
aktuálisállapot
napibuild
hibák,vissza-jelzések
módosított és újkövetelmények
aktuálisállapot
módosítottmódosítottés új kódés új kód
Check-in(beadás)
De akkor miről?De akkor miről?
Arról, hogy...Arról, hogy... Hogyan rendszerezzük a fejlesztendő Hogyan rendszerezzük a fejlesztendő
munkadarabokatmunkadarabokat Hogyan kövessük a kód változásaitHogyan kövessük a kód változásait
DevA forrásfaA forrásfa
A forráskód a A forráskód a rendszer rendszer komponentizálásának komponentizálásának megfelelő irányított megfelelő irányított gráfgráf
A levélelemek A levélelemek tartalmazzák az tartalmazzák az egyes komponensek egyes komponensek forráskódjátforráskódját
Dev
Hogyan építsük fel a Hogyan építsük fel a forrásfát?forrásfát? Legyen benne minden, ami a termék Legyen benne minden, ami a termék
elkészítéséhez kellelkészítéséhez kell Forráskód + eszközök = termék (ez a build környezet)Forráskód + eszközök = termék (ez a build környezet) A dokumentumoknak is a forráskód követő rendszerben A dokumentumoknak is a forráskód követő rendszerben
a helyüka helyük
Ne szennyezzük a fordítás során előálló Ne szennyezzük a fordítás során előálló fájlokkalfájlokkal
Minden egyes ágnak gazdája kell, hogy legyenMinden egyes ágnak gazdája kell, hogy legyen Az eszközöket célszerű külön, több projekt Az eszközöket célszerű külön, több projekt
számára közös ágban elhelyezniszámára közös ágban elhelyezni
Dev
Példa forrásfa Példa forrásfa szerkezetszerkezetd:\sourcesd:\sources
\foo\foo\binary_release\binary_release
\x86\x86\specs\specs\src\src
\feature1\feature1\feature2\feature2
\testsrc\testsrc\bvt\bvt\feature1\feature1\feature2\feature2
\tools\tools
DevKülső függőségekKülső függőségek Amikor egy másik csapat vagy projekt Amikor egy másik csapat vagy projekt
eredményeit kell felhasználnunkeredményeit kell felhasználnunk Microsoft komponensek (msvcrt, msvbvm, mdac)Microsoft komponensek (msvcrt, msvbvm, mdac) ActiveX kontrollokActiveX kontrollok
A forrásfa meghatározott részére kerül a másik A forrásfa meghatározott részére kerül a másik projekt bináris-fájának egy részeprojekt bináris-fájának egy része
Követelmények az átadott binárisokkal Követelmények az átadott binárisokkal szemben:szemben: Binárisok és teljes debug info (PDB) az összes Binárisok és teljes debug info (PDB) az összes
támogatott platformratámogatott platformra
DevForrásfa házirendForrásfa házirend Meghatározza, hogy milyen szabályok szerint Meghatározza, hogy milyen szabályok szerint
lehet kódot elhelyezni a forrásfábanlehet kódot elhelyezni a forrásfában Milyen időközönkéntMilyen időközönként Milyen jóváhagyást igényelMilyen jóváhagyást igényel Milyen minőségi feltételeknek kell eleget tegyenMilyen minőségi feltételeknek kell eleget tegyen Beadási szabályok (Checkin policy)Beadási szabályok (Checkin policy)
Adminisztratív eszközökkel betartandóAdminisztratív eszközökkel betartandó A fejlesztők oktatandókA fejlesztők oktatandók
Ha nem lehet betartani, elágaztatásra van Ha nem lehet betartani, elágaztatásra van szükségszükség
Dev
Mikor ágaztassunk Mikor ágaztassunk el?el?Ha szükség van rá, mertHa szükség van rá, mert
Inkompatibilis házirendInkompatibilis házirend Termék kiadásaTermék kiadása Új funkciók fejlesztéseÚj funkciók fejlesztése
Ne másoljunk, ha elágaztatás a célNe másoljunk, ha elágaztatás a célHa egy ág befagyasztására van szükségHa egy ág befagyasztására van szükség
Tesztelési okokTesztelési okok Termék kiadásaTermék kiadása
DevElágaztatás - alapokElágaztatás - alapok Promóciós modellPromóciós modell Hátrányai:Hátrányai:
Az adott elágazáshoz tartozó szabályok változnakAz adott elágazáshoz tartozó szabályok változnak A fejlesztőknek munkájukat folytonosan át kell helyezni A fejlesztőknek munkájukat folytonosan át kell helyezni
más ágakbamás ágakba
V2.0
V1.0
Új technológia próbaág
DevElágaztatás – alapokElágaztatás – alapok Főág (mainline) modellFőág (mainline) modell A fejlesztők a főágban vagy egy adott funkció A fejlesztők a főágban vagy egy adott funkció
fejlesztési ágában tevékenykednekfejlesztési ágában tevékenykednek A kiadott termékverziók ágában csak kritikus A kiadott termékverziók ágában csak kritikus
hibajavítások történnekhibajavítások történnek
főág
V1.0
Új technológia próbaág
DevVáltozások propagálásaVáltozások propagálása
A változtatásokat lehetőleg az elágaztatás A változtatásokat lehetőleg az elágaztatás óta legkevesebbet módosult ágban óta legkevesebbet módosult ágban tegyük megtegyük meg
Propagáljunk sűrűn és a lehető Propagáljunk sűrűn és a lehető legkorábbanlegkorábban
Az összefésülést mindig a megfelelő Az összefésülést mindig a megfelelő tudással bíró ember végezze (vezető vagy tudással bíró ember végezze (vezető vagy senior fejlesztő)senior fejlesztő)
Elágaztatás és az ágak Elágaztatás és az ágak összefésüléseösszefésülése
Dev
A jó forráskódkövető A jó forráskódkövető rendszerrendszerTámogatja az elágaztatást (branching)Támogatja az elágaztatást (branching)Támogatja a háromutas összefésülést Támogatja a háromutas összefésülést
(three way merge)(three way merge)Integrálható a fejlesztők által használt Integrálható a fejlesztők által használt
környezetbekörnyezetbeNincs „útban”Nincs „útban”
DevHa nem így tesszük...Ha nem így tesszük...
„„Hol van a legfrissebb forrás?”Hol van a legfrissebb forrás?”„„Ki írta felül az új ablakkezelő Ki írta felül az új ablakkezelő
függvényem?”függvényem?”„„Miért nem fordul le a főprogram?”Miért nem fordul le a főprogram?”„„Sajnos elhagytuk a DLL forrását, így Sajnos elhagytuk a DLL forrását, így
nem tudjuk megcsinálni a javítást.”nem tudjuk megcsinálni a javítást.”
Az elkészült kód beadásaAz elkészült kód beadásaCheck-inCheck-in
Az elkészült Az elkészült munkadarabok munkadarabok kódjának elhelyezése kódjának elhelyezése a forráskód kezelő a forráskód kezelő rendszerberendszerbe Csak a forrásfa Csak a forrásfa
házirend feltételeinek házirend feltételeinek megfelelő kódmegfelelő kód
A forráskód-kezelő nem A forráskód-kezelő nem biztonsági mentésre biztonsági mentésre való!való!
Build(elkészítés)
Develop(fejlesztés)
Check-in(beadás)
Test(tesztelés)
Specify(specifikálás)
aktuálisállapot
napibuild
hibák,vissza-jelzésekmódosított
és új kód
módosított és újkövetelmények
CheckinA beadás lépéseiA beadás lépései
Mások változásainak szinkronizálásaMások változásainak szinkronizálásaBuild a fejlesztő gépénBuild a fejlesztő gépénFejlesztői regressziótesztFejlesztői regressziótesztKódellenőrzés (code review)Kódellenőrzés (code review)BeadásBeadásTárs-build (buddy-build)Társ-build (buddy-build)Hibanyilvántartás frissítéseHibanyilvántartás frissítéseBeadási levélBeadási levél
CheckinHa nem így tesszük...Ha nem így tesszük...
„„Nálam pedig lefordul.”Nálam pedig lefordul.”„„Ki tette be ezt az idétlen üzenetet a Ki tette be ezt az idétlen üzenetet a
főképernyő közepére?”főképernyő közepére?”„„Kijavította már valaki ezt a hibát?”Kijavította már valaki ezt a hibát?”„„Milyen komponenseket kell átírni Józsi Milyen komponenseket kell átírni Józsi
változtatásai miatt?”változtatásai miatt?”
A termék megépítéseA termék megépítéseBuildBuild
A megépítés során a A megépítés során a forráskód futtatható forráskód futtatható bináris állományokká bináris állományokká alakulalakul
Build(elkészítés)
aktuálisállapot
hibák,vissza-jelzésekmódosított
és új kód
módosított és újkövetelmények
Develop(fejlesztés)
Test(tesztelés)
Specify(specifikálás)
napibuild
Check-in(beadás)
Build
Mi a build környezet?Mi a build környezet?
Azok az eszközök, amelyek a forrásból Azok az eszközök, amelyek a forrásból előállítják a terméketelőállítják a terméket Forráskód + eszközök = termékForráskód + eszközök = termék
Szintén a forráskódkövető rendszerben Szintén a forráskódkövető rendszerben vannakvannak
BuildMiért kell build Miért kell build környezet?környezet? Konzisztens fordítási beállítások az egész Konzisztens fordítási beállítások az egész
forrásfáraforrásfára Bármikor byte-helyesen reprodukálható Bármikor byte-helyesen reprodukálható
eredményeredmény A forrásfa tetszőleges al-fájának megépítéseA forrásfa tetszőleges al-fájának megépítése A fejlesztők saját gépén megépíthető legyen a A fejlesztők saját gépén megépíthető legyen a
terméktermék Teljesen automatizált (telepítőkészletet Teljesen automatizált (telepítőkészletet
produkál) – utólagos telepítőkészletprodukál) – utólagos telepítőkészlet
Build
A build fő fázisaiA build fő fázisai BuildBuild
A forráskódból a bináris állományok elkészítéseA forráskódból a bináris állományok elkészítése Eredménye a bináris-faEredménye a bináris-fa
Utó-build (postbuild)Utó-build (postbuild) A bináris állományok utófeldolgozása a bináris-fábólA bináris állományok utófeldolgozása a bináris-fából Telepítőkészlet készítéseTelepítőkészlet készítése
Build Verification Test (BVT)Build Verification Test (BVT) Az elkészült termék alapfunkcióinak ellenőrzéseAz elkészült termék alapfunkcióinak ellenőrzése
Build
A build típusaiA build típusaiMinden egyes build több platformra Minden egyes build több platformra
készülhetkészülhet Pl. x86, ia64, amd64, armPl. x86, ia64, amd64, arm
Az egyes platformokon belül kétfélét Az egyes platformokon belül kétfélét készítünk:készítünk: Checked (debug) : teljes debug-infoChecked (debug) : teljes debug-info Free (release) : a debug info csak a globálisokat Free (release) : a debug info csak a globálisokat
és a függvénydefiníciókat tartalmazzaés a függvénydefiníciókat tartalmazza
Build
A legfőbenjáróbb bűnA legfőbenjáróbb bűn A build breakA build break
A fejlesztő nem ellenőrizte, hogy minden fájlt betett-e a A fejlesztő nem ellenőrizte, hogy minden fájlt betett-e a forráskód-követő rendszerbeforráskód-követő rendszerbe
Mások munkájával inkompatibilis változtatást hajtott Mások munkájával inkompatibilis változtatást hajtott végrevégre
„„Jutalma” a Buildmeister cím elnyeréseJutalma” a Buildmeister cím elnyerése Az ő feladata a napi build-ek elkészítése, a build scriptek Az ő feladata a napi build-ek elkészítése, a build scriptek
karbantartásakarbantartása A build szabályainak betartatásáraA build szabályainak betartatására
A fejlesztői kézikönyvA fejlesztői kézikönyv Illetve korbács használhatóIlletve korbács használható
Build
Utó-buildUtó-build Parancsfájlok végrehajtásából állParancsfájlok végrehajtásából áll
Batch, perl, stb.Batch, perl, stb. Ezeket szintén a forráskód-követő rendszerben tároljukEzeket szintén a forráskód-követő rendszerben tároljuk
Minden egyes termékre egyediMinden egyes termékre egyedi Eredménye mindaz, ami a termék telepítéséhez Eredménye mindaz, ami a termék telepítéséhez
és használatához kellés használatához kell Ideális esetben a telepítő CDIdeális esetben a telepítő CD
A postbuild lefutása után következik a termék A postbuild lefutása után következik a termék kiadásakiadása
BuildA termék kiadása A termék kiadása (release)(release) Egy olyan megosztásra kerül át a teljes termék, Egy olyan megosztásra kerül át a teljes termék,
ahonnan azt a tesztelők és a többi felhasználója ahonnan azt a tesztelők és a többi felhasználója elérhetielérheti
Visszamenőleg sokáig megmaradVisszamenőleg sokáig megmarad Fontosabb mérföldköveknél a régieket archiválni kellFontosabb mérföldköveknél a régieket archiválni kell
A release megosztás struktúrája:A release megosztás struktúrája:Foo\Foo\
main\main\1018\1018\
x86fre\x86fre\x86chk\x86chk\
featuredev\featuredev\1019\1019\
Build
A kiadások verzióiA kiadások verziói A termék verziószáma mindig tartalmazza a A termék verziószáma mindig tartalmazza a
build-számot:build-számot: Major.minor.build.serialMajor.minor.build.serial Pl. 2.5.1018.1Pl. 2.5.1018.1 A build-szám minden nap másA build-szám minden nap más A serial az egy napon belüli build-eket különbözteti megA serial az egy napon belüli build-eket különbözteti meg
A napi build ideális szinkronizálási pont a A napi build ideális szinkronizálási pont a másnapi munka elkezdéséhezmásnapi munka elkezdéséhez
Ne feledjük: ha egyszer kiadtunk valamit, az Ne feledjük: ha egyszer kiadtunk valamit, az örökké élörökké él
Build
Ha nem így tesszük...Ha nem így tesszük...
„„Nem működik a programom, ami a Józsi Nem működik a programom, ami a Józsi új DLL-jét használja.”új DLL-jét használja.”
„„Szükség van a modulok közötti Szükség van a modulok közötti integrációs tesztre.”integrációs tesztre.”
„„Holnap elkészülünk, de még két hét kell Holnap elkészülünk, de még két hét kell a telepítő megírására.”a telepítő megírására.”
„„Látta már valaki egyben az egészet?”Látta már valaki egyben az egészet?”„„Melyik DLL fut kint az ügyfélnél?”Melyik DLL fut kint az ügyfélnél?”
TesztelésTesztelés Minőséget nem lehet Minőséget nem lehet
„beletesztelni” a „beletesztelni” a szoftverbeszoftverbe
A teszt célja: ellenőriz és A teszt célja: ellenőriz és visszajelez, hogy a visszajelez, hogy a szoftver megfelel-e a szoftver megfelel-e a kitűzött kitűzött követelményeknekkövetelményeknek specifikált működésspecifikált működés elvárt teljesítményelvárt teljesítmény üzembiztonságüzembiztonság egyéb „általános elvárások”egyéb „általános elvárások”
Build(elkészítés)
aktuálisállapot
hibák,vissza-jelzésekmódosított
és új kód
módosított és újkövetelmények
Develop(fejlesztés)
Test(tesztelés)
Specify(specifikálás)
napibuild
Check-in(beadás)
TestTesztek a napi ciklusbanTesztek a napi ciklusbanKiadható-e tesztelésre?Kiadható-e tesztelésre?
Fejlesztői regressziótesztFejlesztői regresszióteszt a fejlesztő végzi, még beadás előtta fejlesztő végzi, még beadás előtt kibírja-e a termék a változást? kibírja-e a termék a változást? white box, automatizáltwhite box, automatizált
Telepítési tesztTelepítési teszt telepíthető-e? telepíthető-e?
Build Verification TestBuild Verification Test megvannak-e az alapvető működésekmegvannak-e az alapvető működések ki lehet-e adni a build-et további tesztelésre?ki lehet-e adni a build-et további tesztelésre? automatizáltautomatizált kieshet belőle a DRT (ha nem túl hosszú)kieshet belőle a DRT (ha nem túl hosszú)
TestTesztek a napi ciklusbanTesztek a napi ciklusbanRészletesRészletes
Unit TestUnit Test az egyes modulok, funkciócsoportok részletes az egyes modulok, funkciócsoportok részletes
tesztjetesztje
Regression TestRegression Test visszajöttek-e egyszer már kijavított hibák?visszajöttek-e egyszer már kijavított hibák? ““bugs tend to cluster”bugs tend to cluster” – a baj nem jár egyedül – a baj nem jár egyedül változások átvezetése a forrásfa egyes ágai változások átvezetése a forrásfa egyes ágai
közöttközött
TestTesztek a napi ciklusbanTesztek a napi ciklusbana funkcionális követelményeken túlmutatóa funkcionális követelményeken túlmutató
Stress test Stress test Megpróbáljuk szétverni a szoftvertMegpróbáljuk szétverni a szoftvert Érvénytelen input, óriási adatkészlet, erőforrások Érvénytelen input, óriási adatkészlet, erőforrások
mesterséges korlátozásamesterséges korlátozása Általában éjszaka fut, reggel debugoljuk a Általában éjszaka fut, reggel debugoljuk a
döglött példányokat. döglött példányokat. Komoly tervezést és infrastruktúrát igényel!Komoly tervezést és infrastruktúrát igényel!
Terhelési tesztTerhelési teszt ha van teljesítmény-kritériumha van teljesítmény-kritérium gondos tervezést igényelgondos tervezést igényel
TestTesztek a napi ciklusbanTesztek a napi ciklusban„hagyományos”„hagyományos”
Ad-hoc tesztAd-hoc teszt játszunk a szoftverrel, és figyeljük, mit csinál játszunk a szoftverrel, és figyeljük, mit csinál
(szimuláljuk az egyszerű felhasználót)(szimuláljuk az egyszerű felhasználót) nem determinisztikusnem determinisztikus nagyon kell figyelni, hogy reprodukálható legyennagyon kell figyelni, hogy reprodukálható legyen legtöbbször kiinduló pont az automatizált legtöbbször kiinduló pont az automatizált
tesztekheztesztekhez
TestA megtalált hibák kezeléseA megtalált hibák kezelése
Minden hiba, ami valamilyen szempontból Minden hiba, ami valamilyen szempontból nem felel megnem felel meg a követelményekneka követelményeknek az elvárásoknakaz elvárásoknak
Jelentjük. Az összeset.Jelentjük. Az összeset.Adatbázisban rögzítjükAdatbázisban rögzítjük
statisztikákstatisztikák hibák életciklusának követésehibák életciklusának követése
TestEgy hiba adataiEgy hiba adatai RögzítendőRögzítendő
azonosító (automatikusan generált egyedi kulcs)azonosító (automatikusan generált egyedi kulcs) tárgy (rövid leírás)tárgy (rövid leírás) szoftver verziószámaszoftver verziószáma konfigurációkonfiguráció
– oprendszer, hardver, egyéb szoftverkörnyezetoprendszer, hardver, egyéb szoftverkörnyezet a hiba részletes leírásaa hiba részletes leírása reprodukciós lépésekreprodukciós lépések a szükséges csatolt állományoka szükséges csatolt állományok fontossági / súlyossági besorolás (severity/priority)fontossági / súlyossági besorolás (severity/priority) terület / alterületterület / alterület
TestFontosságFontosságFontosság (priority): milyen fontos Fontosság (priority): milyen fontos
megjavítanimegjavítani Pri 4: majd…Pri 4: majd… Pri 3: amikor időnk engediPri 3: amikor időnk engedi
– még a termék kiadása előttmég a termék kiadása előtt Pri 2: még ebben a szakaszbanPri 2: még ebben a szakaszban Pri 1: mostPri 1: most Pri 0: azonnalPri 0: azonnal Pri 0 HOT: már kész kéne, hogy legyenPri 0 HOT: már kész kéne, hogy legyen
– áll a vezér gépeáll a vezér gépe
TestSúlyosságSúlyosság
Mekkora galibát okoz?Mekkora galibát okoz? Sev 4: nem szépSev 4: nem szép Sev 3: kicsit zavar a működésben, elkerülhetőSev 3: kicsit zavar a működésben, elkerülhető Sev 2: komolyabb hiba, hiányosságSev 2: komolyabb hiba, hiányosság Sev 1: adatvesztés, összeomlás, súlyos hibaSev 1: adatvesztés, összeomlás, súlyos hiba
– valamilyen szempontból használhatatlanná teszi a valamilyen szempontból használhatatlanná teszi a terméketterméket
TestKategóriákKategóriák
Súlyosság Súlyosság ⇒⇒ fontosság fontosság de nem automatikusande nem automatikusan
Pri 1, Sev 4:Pri 1, Sev 4: „„Micorosoft Office XP”Micorosoft Office XP”
Pri 4, Sev 1:Pri 4, Sev 1: a teszter otthoni XT-jén letörli a FAT-táblát, ha a a teszter otthoni XT-jén letörli a FAT-táblát, ha a
program indításával egyidejűen dugja be a program indításával egyidejűen dugja be a mentéshez használt VHS-videomagnót.mentéshez használt VHS-videomagnót.
TestA hiba életciklusaA hiba életciklusa
AktívAktív
A hiba gazdájaA hiba gazdája aki az adott hibával aki az adott hibával
foglalkozikfoglalkozik az életciklus minden az életciklus minden
stádiumában létezikstádiumában létezik egyéni vagy csoportegyéni vagy csoport
TestA hiba életciklusaA hiba életciklusa A megoldás A megoldás
visszaküldi a hibát visszaküldi a hibát ahhoz, aki ahhoz, aki megnyitottamegnyitotta
Feladat: ellenőrizni a Feladat: ellenőrizni a megoldástmegoldást
AktívAktív
MegoldottMegoldott
megoldásmegoldás
Megoldási módokMegoldási módokMegoldásMegoldás Ki tehetiKi teheti További teendőTovábbi teendő
JavítvaJavítva FejlesztőFejlesztő ellenőrizniellenőrizni
ElhalasztvaElhalasztva(kockázatkezelés)(kockázatkezelés)
Program-menedzserProgram-menedzserTriageTriage
dokumentálnidokumentálnikésőbbi követelménykésőbbi követelmény
Nem javítjukNem javítjuk(alapvető probléma, (alapvető probléma, erőforráshiány)erőforráshiány)
Program-menedzserProgram-menedzser TriageTriage
dokumentálnidokumentálni
Így terveztükÍgy terveztük““It’s not a bug, it’s a feature”It’s not a bug, it’s a feature”
Program-menedzserProgram-menedzser TriageTriage
végfelhasználói végfelhasználói dokumentáció,dokumentáció,ha szükségesha szükséges
Már létező hibaMár létező hiba(duplikált)(duplikált)
FejlesztőFejlesztőTesztelőTesztelő
megadni az eredeti megadni az eredeti hiba azonosítójáthiba azonosítóját
Nem reprodukálhatóNem reprodukálható ált. fejlesztőált. fejlesztő
TestA hiba életciklusaA hiba életciklusa
AktívAktív
MegoldottMegoldott
LezártLezárt
lezáráslezárás
LezárásLezárás ha a hiba gazdája ha a hiba gazdája
elégedett a javítássalelégedett a javítással
TestA hiba életciklusaA hiba életciklusa LezárásLezárás
ha a hiba gazdája ha a hiba gazdája elégedett a javítássalelégedett a javítással
ReaktiválásReaktiválás ha elégedetlenha elégedetlen
AktívAktív
MegoldottMegoldott
LezártLezárt
reaktiválásreaktiválás
TestA hiba életciklusaA hiba életciklusa
AktívAktív
MegoldottMegoldott
LezártLezárt
reaktiválásreaktiválás
LezárásLezárás ha a hiba gazdája ha a hiba gazdája
elégedett a javítássalelégedett a javítással
ReaktiválásReaktiválás ha elégedetlenha elégedetlen
Lezárt hiba is Lezárt hiba is reaktiválhatóreaktiválható regressziós tesztregressziós teszt további ellenőrzés további ellenőrzés
soránsorán
TestMire használjuk az Mire használjuk az adatbázist?adatbázist?Aktív hibák: megoldjukAktív hibák: megoldjukMegoldott hibák: megnyitóik ellenőrzikMegoldott hibák: megnyitóik ellenőrzikLezárt hibák:Lezárt hibák:
elhalasztott, nem javítandóelhalasztott, nem javítandó: : dokumentáljukdokumentáljuk javított: bevesszük a tesztekbejavított: bevesszük a tesztekbe
– regressziós tesztregressziós teszt– unit tesztunit teszt
Összességében: statisztikákÖsszességében: statisztikák
TestStatisztikákStatisztikák Új hibák beérkezési sebességeÚj hibák beérkezési sebessége Hibamegoldási sebességHibamegoldási sebesség
javítási sebesség: tervezhető,javítási sebesség: tervezhető,kb. 2/fejlesztő/napkb. 2/fejlesztő/nap
KonvergenciaKonvergencia amikor többet oldunk meg,amikor többet oldunk meg,
mint ahányat találunkmint ahányat találunk a stabilizáció kezdetea stabilizáció kezdete
StatisztikákStatisztikákJóslásJóslás
Mikor lesz „kész” a szoftver?Mikor lesz „kész” a szoftver? aktív hibák számának csökkenő trendje adja aktív hibák számának csökkenő trendje adja
megmeg
Kiadási stádiumokKiadási stádiumok konvergenciakonvergencia Nulla aktív hibaNulla aktív hiba
– ZBB: zero bug bounceZBB: zero bug bounce
RCRC GoldGold
KiadásKiadás
Példa: egy MCS projektPélda: egy MCS projekt
konvergenciakonvergencia
ZBBZBB
Átadáshoz közeledveÁtadáshoz közeledveElágazásElágazás a forr a forrásfábanásfában
ha megy tovább a fejlesztésha megy tovább a fejlesztésSzigorodik a változáskezelésSzigorodik a változáskezelésFokozott figyelem a változás kockázatairaFokozott figyelem a változás kockázataira
minden javítás egy újabb hiba esélyét is minden javítás egy újabb hiba esélyét is hordozzahordozza
War TeamWar Team minden lényeges szereplő képviseletévelminden lényeges szereplő képviseletével ““triagetriage””
KiadásKiadás
A csapatmodell minden szereplőjének A csapatmodell minden szereplőjének egyetértésévelegyetértésével
““Gold master” – a végleges termékállapot Gold master” – a végleges termékállapot hitelesítésehitelesítése pl. aláírt CD-példánypl. aláírt CD-példány ez a további sokszorosítás alapjaez a további sokszorosítás alapja
A teljes projekt-állapot archiválásaA teljes projekt-állapot archiválásaShip party Ship party
TestÁtadás-átvételi tesztÁtadás-átvételi teszt
Pozitív működést bemutató tesztPozitív működést bemutató tesztMegfelel-e a specifikációnak?Megfelel-e a specifikációnak?Felhasználó részvételével zajlikFelhasználó részvételével zajlik
Vagy dobozos termék esetén: képviselője, a PMVagy dobozos termék esetén: képviselője, a PM
ÖsszefoglalóÖsszefoglaló ÁllapotkezelésÁllapotkezelés VáltozáskezelésVáltozáskezelés Már a projekt Már a projekt
kezdetétőlkezdetétől Így lesz Így lesz
kézbentarthatókézbentartható Felismert és Felismert és
kezelhető kockázatokkezelhető kockázatok
Build(elkészítés)
Develop(fejlesztés)
Check-in(beadás)
Test(tesztelés)
Specify(specifikálás)
aktuálisállapot
napibuild
hibák,vissza-jelzésekmódosított
és új kód
módosított és újkövetelmények
További információTovábbi információ Microsoft Microsoft SolutionSolutionss FrameworkFramework
http://www.microsoft.com/mspress/developerhttp://www.microsoft.com/mspress/developer/bestpractices//bestpractices/
Karl E. Wiegers: Software RequirementsKarl E. Wiegers: Software Requirements
Steve McConnell: Steve McConnell: Rapid DevelopmentRapid Development Steve McConnellSteve McConnell: Software Project Survival Guide: Software Project Survival Guide Ed Sullivan: Ed Sullivan: Under Pressure and On TimeUnder Pressure and On Time Steve Maguire: Debugging the Development ProcessSteve Maguire: Debugging the Development Process
Michael Howard, David LeBlanc: Michael Howard, David LeBlanc: Writing Secure CodeWriting Secure Code Steve McConnell: Steve McConnell: Code CompleteCode Complete Steve MSteve Maaguire: guire: Writing Solid CodeWriting Solid Code
Frederick P. Brooks: The Mythical Man-monthFrederick P. Brooks: The Mythical Man-month Addison-WesleyAddison-Wesley