Sei sulla pagina 1di 198

Robert C.

Martin
TLLKNYV
PROGRAMOZKNAK
Hogyan vljunk igazi szakemberr
Robert C. Martin
TLLKNYV
PROGRAMOZKNAK
Hogyan vljunk igazi szakemberr
A kiadvny a kvetkez angol eredeti alapjn kszlt:
Te Clean Coder: A Code of Conduct for Professional Pragrammers
Copyright 2011 by Robert C. Martin. A rights reserved!
Kiskapu K. 2011
Authorized translation of the English edition of Te Clean Coder: A Code of Conduct for Professional
Pragrammers, ISBN 2011 9780137081073 Pearson Education, Inc., publishing as Prentice Hall. This
translation is published and sol d by permission of Pearson Education, Inc., the owner of ali rights to
publish and sell the same. No part of this book, induding interior design, cover design, and icons, may be
reproduced or transmitted in any form, by any means (electronic, photocopying, recording, or otherwise)
without the prior written permission of the publisher.
Trademarked names appear throughout this book. Rather than list the names and entities that own the
trademarks or insert a trademark symbo! wi th each mention of the trademarked name, the publisher
states that it is using the names for editorial purposes only and to the beneft of the trademark owner,
with no intention of infringing upon that trademark
Fordts s magyar vltozat 20 ll Kiskapu Kf. Minden jog fenntartva!
A knyv egyetlen rsze sem sokszorosthat semmilyen mdszerrel a Kiad elzetes engedlye nlkl. Ez
a korltozs kiterjed a bels tervezsre, a bortra s az ikonokra is. A knyvben bejegyzett vdjegyek s
mrkanevek is felbukkanhatnak Ahelyett, hogy ezt minden egyes helyen kln jeleznnk, a Kiad ezennel
kijelenti, hogy a mben elfordul valamennyi vdett nevet s jelzst szerkesztsi clokra, jhiszemen,
a nv tulajdonosnak rdekeit szem eltt tartva hasznlja, s nem lszndkban az azokkal kapcsolatos
jogokat megszegni, vagy ktsgbe vonni.
A szerz s a kiad a lehet legnagyobb krltekintssel jrt el e kiadvny elksztsekor. Sem a szerz,
sem a kiad nem vllal semminem felelssget vagy garancit a knyv tartalmval, teljessgvel kap
csolatban. Sem a szerz, sem a kiad nem vonhat felelssgre brmilyen baleset vagy kresemny miatt,
mely kzvetve vagy kzvetlenl kapcsolatba hozhat e kiadvnnyal.
Bortfot: Spitzer rteleszkp/hubblesite.org
Fordts s lektorls: Rzmves Lszl
Mszaki szerkeszt: Tth Klra
Trdels: Tth Klra
Felels kiad a Kiskapu K. gyvezet igazgatja
20 ll Kiskapu K.
1134 Budapest, Csng u. 8.
Fa: (+36-l) 303-1619
http:/ /www.kiskapukiado.hu/
e-mail: kiado@kiskapu.hu
ISBN: 978-963-9637-86-3
Nyomdai elllts: rdi Rzsa Nyomda
Felels vezet: Juhsz Lszl
A KNYVRL RTK
"
Bob bcsi egyrtelmen mg magasabbra teszi a lcet ezzel a knyvvel, amelyben
lefekteti, hogy milyen elvrsoknak kell egy hivatsos programoznak megfelelnie:
hogyan kell kommuniklnia s egyttmkdnie a munkatrsaival s a feljebbvali
val, hogyan kell beosztania az idejt, hogyan kell kezelnie a nyomst, s milyen esz
kzket kell hasznlnia. A tesztvezrelt s elfogadsiteszt-vezrelt fejlesztsen (TDD,
ATDD) tl Martin elmagyarzza mindazt, amit minden, magt profinak tart prog
ramoznak tudnia kell, nem csak nmaga rdekben, hanem azrt is, hogy a szaft
verfejleszts mg mindig fiatal szakmja tovbbfejldhessen.
"
-Markus Girtner vezet szaftverfejleszt
it-agile GmbH, www.it-agile.de, www.shino.de
"
Vannak mszaki knyvek, amelyek inspirlnak s oktanak, s vannak olyanok,
amelyek szrakoztatnak. Ritkn esik meg, hogy egy knyv mindezt egyszerre nyjtsa,
de Robert Martin nem elszr viszi vghez ezt a bravrt. Olvassuk el s szvjuk ma
gunkba a Tllknyv programozknak tancsait, hogy valban profi szaftverfejlesz
tnek hvhassuk magunkat!
"
- George Bullock, vezet programmenedzser
Microsoft Corp.
"
Ha lenne
"
diploma utni ktelez olvasmny
"
az informatikusok szmra, biztosan
ez a ktet lenne az. A valsgban a rosszul megrt kd nem tnik el a szemeszter v
gn; nem kapunk csillagos tst, ha a
"
vizsga
"
(a hatrid) eltti jjel rohamtempban
ksztjk el a kvnt kdot; s ami ennl is rosszabb, emberekkel kell kommunikl
nunk. Egy zsenilis programoz nem felttlenl profi is. A Tllknyv programo
zknak a profizmushoz vezet utat rja le - mghozz meglepen szrakoztatan.
-!eff Overbey
University of Illinois, Urbana-Champaign
"A Tllknyv programozknak sokkal tbb puszta tmutatnl: olyan, kemny mun
kval megszerzett tudst s blcsessget tr elnk, amit normlis esetben csak gy
sajtthatnnk el, ha hossz vekig dolgoznnk egy mesterember mellett, a sajt hi
binkbl tanulva. Ha profi szaftverfejlesztnek tartjuk magunkat, ezt a knyvet min
denkppen el kell olvasnunk.
"
A KNYVRL RTAK
- R. L. Bogetti vezet rendszertervez
Baxter Healthcare
www.RLBogetti.com
5
1986 s 2000 kztt szoros munkakapcsolatban lltam Jim Newkirkkel, kollgmmal
a Teradyne-tL Mindkettnknek szenvedlye volt a programozs s a tiszta kd.
Hossz estket s htvgket tltttnk egytt, klnfle programozsi stlusokkal
s tervezsi mdszerrekkel ksrletezve, s folyamatosan zleti terveket gyrtottunk.
Vgl kzsen megalaptottuk az Object Mentor, Inc. cget. Ez alatt az id alatt ren
geteget tanultam Jimtl, de mindig is a hozzllsa, a munkamorlja nygztt le
a leginkbb -ez volt a mrcm, amelynek meg akartam felelni. Jim igazi profi. Bszke
vagyok r, hogy vele dolgozhattam, s hogy a bartomnak nevezhetem.
TARTALOM
Elsz . . . . . . ll
15
19
Bevezets . . . . .
Ksznetnyilvnts
A szerzrl . . . . . 23
Ktelez bevezets ... .25
1. fejezet
2. fejezet
3. fejezet
4. fejezet
Profizmus
Vigyzz, mit krsz! .
Felelssget vllalni .
Els szably: ne tgy krt!
Munkamorl . .
Irodalomjegyzk
Nemet mondani
Ellenttes szerepek
Amikor nagy a tt .
"
Csapatjtkosnak
"
lenni.
Az
"
igen
"
ra .
Lehetetlen kd .
. 31
. 32
. 32
. 34
. 38
. 43
. . . . . . . . . 45
. 47
. 50
. 51
. 55
. 61
Igent mondani . . . . . . . . . . . . . . . . .65
A ktelezettsgvllals nyelve . . . . 67
Tanuld meg, hogyan mondj igent! . . 71
sszefoglals . . . . . . . . . . . 74
Kdols . . .
sszpontosts
Az ramlsi zna
ri vlsg . . .
Hibakeress . .
Oszd be az erd!
Kss . . . . .
Segtsg! . . . .
Irodalomjegyzk
. . . . . . . . . . 75
. 76
. 79
. 81
. 82
. 86
. 87
. 89
. 91
5. fejezet
6. fejezet
7. fejezet
8. fejezet
9. fejezet
10. fejezet
Tesztvezrelt fejleszts . . . . . . . . . . . . 93
Az eskdtszk hatrozott . . . . . . . . 94
A tesztvezrelt fejleszts hrom trvnye . 95
Mi nem a tesztvezrelt fejleszts? . 98
Irodalomjegyzk . . . . . . . . 99
Gyakorls
Nhny sz a gyakorlsrl
A kdolk ddzsja .
Szlestsd a ltkrd!
sszefoglals .
Irodalomjegyzk
Elfogadsi tesztek
A kvetelmnyek kzlse .
Elfogadsi tesztek
sszefoglals .
Tesztelsi stratgik
A minsgellenrk nem tallhatnak
semmilyen hibt . . . . .
A tesztautomatizlsi piramis .
sszefoglals . .
Irodalomjegyzk .
Az id beosztsa .
rtekezletek . . .
Fkuszmanna. . .
Iddobozols s paradicsarok
Elkerls . . . . . . . . . .
Vakvgnyok . . . . . . . .
Mocsarak,dagonyk,ingovnyok
s mindenfle szemthalmok .
sszefoglals . . . . . . . . . .
Becsls ...
Mit jelent a becsls?.
PERT . . . . . . .
. . 101
102
105
108
108
109
111
.lll
115
126
127
128
129
133
133
135
136
140
142
143
144
144
145
147
149
152
A feladatok idignynek megbecslse. 155
A nagy szmok trvnye . . . . . . 157
11. fejezet
12. fejezet
13. fejezet
14. fejezet
A fggelk
sszefoglals . .
Irodalomjegyzk .
Nyoms . . . . .
A nyoms elkerlse
A nyoms kezelse
sszefoglals . .
158
158
159
.161
162
164
Egyttmkds .
Programozk s emberek
Kisagyak . .
sszefoglals . . . . .
. . . . . . . . 165
167
171
172
Csapatok s projektek . . . . . . . . . . . 173
Vegythet? . . . . . . . . . . . . . 173
De hogyan lehet mindezt kzben tartani? 175
sszefoglals . . .176
Irodalomjegyzk . . . . . . . . . . . .176
Mesterek, tantvnyok
s a mestersgbeli tuds.
A kudarc fokozatai .
Szakmai tmutats .
Mestersgbeli tuds.
sszefoglals
Eszkzk . .
Eszkzk . .
Forrskd-kezels .
Szerkesztk s fejlesztkrnyezetek
Problmakvets . . .
Folyamatos bepts . . . .
Egysgtesztel eszkzk . .
sszetev-tesztel eszkzk.
Egyttmkds-tesztel eszkzk .
UML!MDA.
sszefoglals
177
177
178
186
187
189
191
191
195
196
197
198
199
200
201
203
Trgymutat ....... . . . . . . . . . 204
A BORTN
A bortn lthat ltvnyos kp a Szauron szemre hasonlt Rk-kdt (Ml) br
zolja. Az Ml a Bika csillagkpben tallhat, gy egy fokkal jobbra a Zeta Tauritl,
a bika bal szarvnak hegyt jelkpez csillagtl. A Rk-kd egy szupernva marad
vnya, amelynek a felrobbanst 1054. jlius 4-n lthatta az gbolton az emberisg.
Mivel mindez tlnk csupn 6500 fnyvnyire trtnt, olyb tnt, mintha egy j,
nagyjbl a Jupitervel megegyez fnyessg csillag gylt volna ki az gen (a knai
szemtank lersa szerint), mghozz fnyes nappal! A kvetkez hat hnap sorn
aztn a
"
csillag
"
fnye fokozatosan elenyszett.
A bortn lthat kp a Hubble rtvcs lthat fnyt rgzt fnykpt (kls gyr)
s a Chandra rntgenteleszkp ltal ksztett kpet (a kk
"
cltbla
"
a kp kzpn)
egyesti.
A lthat fnyen alapul kp egy gyorsan tgul por- s gzfelht mutat, amelyet
a szupernva-robbansbl visszamaradt nehz elemek tarktanak. Ez a felh jelenleg
ll fnyv tmrj, 4,5 naptmeg, s elkpeszt temben, msodpercenknt 1500
kilomteres sebessgel tgul. Finoman szlva is fgyelemremlt mozgsi energia egy
ilyen rges-rgi robbanstl!
A
"
cltbla
"
kzepn egy lnk vilgoskk szn ptty lthat - ez a pulzr. A csillag
felrobbanst ennek a pulzrnak a kialakulsa okozta. A hallra tlt csillag magjnak
kzel egy napnyi tmeg anyaga egy mindssze 30 kilomter tmrj neutron
gmbb omlott ssze, s ennek az sszeomlsnak a mozgsi energija a neutronkp
zdst ksr hihetetlen neutrinzporral prosulva szttpte s megsemmistette
a csillagot.
A pulzr forog: msodpercenknt 30 fordulatot tesz, s a forgs villogst eredmnyez,
ezrt a tvcsvekben hunyorogni ltjuk. A pulzl fnyk miatt hvjuk az ilyen gi
testeket pulzrnak.
ELSZ
Az Olvas nyilvn azrt vlasztotta ezt a knyvet, mert hivatsos szoftverfejleszt.
Nagyszer, n is az vagyok -gy taln elmondhatom, mirt vettem n a kezembe
Robert C. Martin ktett
Nem is oly rgen kezddtt, s nem is tl messze. (Fnyek bekapcs, s indulhat
a kamera, Charley ... )
Nhny vvel ezeltt egy kzepes mret vllalatnl dolgoztam, amely szigoran
szablyozott termkek rtkestsvel foglalkozott. Biztos ismers a dolog: hrom
emeletes plet, nyitott flks munkahelyek, az igazgatknak sajt irodk, hetente
munkartekezlet.
A piacon, amelyen tevkenykedtnk, gyilkos verseny folyt, amikor egyszer csak
felmerlt egy llami megrendels lehetsge. Hirtelen a vsrlk teljesen j krre
lett kilts-csak annyi volt a dolgunk, hogy meggyzzk ket, hogy a mi termkn
ket rdemes vlasztaniuk. Ez azt jelentette, hogy adott hatridre be kellett nyjta
nunk a plyzatunkat egy kormnyhivatalnak, egy msik hatridig t kellett esnnk
egy tvilgtson, egy harmadik hatridre pedig el kellett kszlnnk a termkkeL
A cgvezets jra s jra felhvta a figyelmnket ezeknek a hatridknek a fontos
sgra. Egyetlen megcsszs, s a kormnyzat egy vre kizr minket a piacrl, ha
pedig a vsrlk nem tudnak feliratkozni az els napon, akkor mshoz fordulnak, s
mi csdbe megynk. Pontosan ez az a krnyezet, amelyben egyesek panaszkodnak,
mg msok emlkeztetnek r, hogy a gymnt is nyoms alatt szletik.
n a fejlesztsi osztlyrl ellptetett mszaki projektvezetknt dolgoztam a si
kerrt. A feladatom az volt, hogy a webhelyet hatridre mkdkpes llapotba hoz
zam, hogy a remnybeli vsrlk informcikat s ami mg fontosabb, jelentkezsi
rlapokat tlthessenek le. Ennek a clnak az elrsben az zleti projektvezetvel kel
lett egyttmkdnm, akit itt Joe-nak fogok nevezni. Joe-nak a msik oldal jutott
feladatul: az rtkestssel, a reklmmal s a nem mszaki jelleg kvetelmnyekkel
kellett foglalkoznia. Egybknt volt az, aki elszeretettel hozta fel a fenti gymnt
hasonlatot.
Aki mr dolgozott nagyobb cgnl Amerikban, annak valsznleg ismers a fe
lelssg thrtsa, a hibk msra kense s a munkaundor - mindez teljesen term
szetes. A mi cgnk azonban rdekes megoldst tallt a problmra a Joe s kztem
kialaktott munkamegosztssal.
Kicsit olyanok voltunk, mint Batman s Robin: kzs feladatunk volt, hogy elh
rtsunk minden problmt. n mindennap sszeltem a mszaki csapattal, aztn
Joe-val-minden ldott nap- a helyzethez igaztottuk az temtervet, meghatroztuk
a kvetend utat, majd eltvoltottunk minden akadlyt az tbl. Ha valakinek vala
milyen szoftverre volt szksge, megszereztk neki; ha "nagyon szvesen" belltotta
ELSZ 11
volna a tzfalat, de " sajnos ebdideje volt
"
, hoztunk neki -kajt; ha neknk akart se
gteni, de ms feladatokat kellett elbbre vennie, Joe s n beszltnk a kzvetlen fe
lettesveL
Aztn a csoportvezetveL
Aztn az igazgatvaL
Elintztk, amit kellett.
Taln tlzs azt lltani, hogy csapkodtuk az asztalt, s vltztnk, de mindent
bevetettnk, ami csak a tarsolyunkban volt - st, menet kzben j megoldsokat is
kitalltunk -, hogy elhrtsunk minden akadlyt, s mindezt etikus mdon tettk,
amire a mai napig bszke vagyok.
gy gondoltam magamra, mint a csapat tagjra, akinek nem rangon aluli beug
rani, hogy megrjon egy SQL-utastst, vagy prknt beszllni egy programoz mell,
hogy a kd idben elkszljn. Joe-ra ugyangy, csapattagknt tekintettem, vgl
azonban r kellett brednem, hogy Joe nem osztotta a nzeteimet
Nagyon szomor nap volt, pntek dlutn l ra- a webhelynek terv szerint a r
kvetkez htfn, korn reggel kellett letre kelnie. Vgeztnk a munkvaL *MIN
DEN KSZEN LLT*. Minden rendszer mkdtt. sszehvtam a teljes mszaki
csapatot egy utols ellenrzsre; mr csak fel kellett kattintanunk a kapcsolt. A prog
ramozkan kvl ott voltak velnk a marketingesek s a termk jogtulajdonosai is.
Bszkk voltunk magunkra. Felemel rzs volt.
Aztn beesett Joe, s valami olyasmit mondott, hogy "Rossz hrem van. A jogi osztly
mg nem hagyta jv a jelentkezsi rlapokat. Nem indthatjuk be a rendszert.
"
Ez nem tnt nagy problmnak-ilyen-olyan akadlyok az egsz projekt alatt felme
rltek, "Batman s Robin
"
pedig rutinbl megoldotta ket. Ezttal sem estem pnikba,
s azt feleltem: "Semmi vsz, reg harcos, mg egyszer megmentjk a vilgot. A jogi
osztly a harmadik emeleten van, ugye?
"
Ekkor kerlt lgy a leves be.
Joe, ahelyett, hogy csatlakozott volna hozzm, azt krdezte: "Mirl beszlsz, Matt?
"
.
Meglepdtem. "Tudod, a szoksos. Csak ngy PDF-fjlrl van sz, nem igaz? R-
adsul kszen vannak, a jogi osztlynak csak jv kell hagynia ket! lljunk az asz
talukn!, s nzznk rjuk csnyn, amg r nem tik a pecstet!
Joe nem rtett egyet velem: "Majd zembe helyezzk a rendszert a jv ht mso
dik felben. Nem nagy gy.
"
12
A folytatst nyilvn el tudja kpzelni a kedves Olvas. Valahogy gy hangzott:
Matt: " De mirt? Pr ra alatt vgeznek!
"
Joe: "Tovbb is tarthat.
"
Matt: "Ott az egsz htvge. Egy csom idejk van. Nyomuljunk!
"
Joe: "Matt, ezek profik. Nem szvhatjuk csak gy a vrket, s knyszerthetjk
ket, hogy ldozzk fel a magnletket a mi kis projektnkrt.
ELSZ
Matt: (kis sznet utn)
"
... Joe, szerinted mit csinltunk a fejlesztcsapattal az el
mlt ngy hnapban?
"
Joe:
"
Tudom, de ezek igazi profik.
"
Csend.
Mly levegvtel.
Mit is mondott Joe?
Ht a mszaki csapat nem profikbl llt, a sz legnemesebb rtelmben? Akkori
ban meg voltam gyzdve errl, de ha ma vgiggondolom, mr nem vagyok biztos
benne.
Vizsgljuk meg ismt a
"
Batman s Robin
"
megoldst, de most ms szemszgbl.
n azt hittem, a lehet legjobb teljestmnyre sarkallom a csapatot, de az a gyanm,
hogy Joe msfajta jtkot jtszott, azzal az alapfeltevssel, hogy a mszaki csapat le
gyzend ellensg. Gondoljuk csak vgig: mirt kellett mindenkinek a nyakra
mszni, s az asztalt csapkodni? Nem az lett volna a j, ha egyszeren megkrdezhet
jk a csapatot, hogy mikor lesznek ksz, k hatrozott vlaszt adnak, amit mi elhi
sznk, s tnyleg nem okoznak csaldst?
Profiknl tnyleg gy kellene mkdnie a dolognak - mgsem tehettk meg. Joe
nem bzott meg a mszaki csapatban, ezrt fenntarts nlkl a krmnkre koppintott
(
"
mikromenedzselte
"
a csapatot) - ugyanakkor a jogi osztllyai kapcsolatban vala
mirt nem voltak ilyen ktelyei, s nem is volt hajland mikromenedzselni ket.
Vajon mirt?
Mert a jogi osztly olyan profizmusrl tett tanbizonysgot, amilyenrl a mszaki
csapat nem. Egy msik csapat teht meg tudta gyzni Joe-t arrl, hogy nincs szks
gk bbicsszre, nem jtszanak kisded jtkokat, s egyenrang flknt kell tisztelni
ket. Nem hiszem, hogy ennek brmi kze lett volna a falon lg puccos diplomk
hoz vagy a fiskoln eltlttt nhny tovbbi vhez, br ez utbbiak nyilvn hozzj
rultak a helynval viselkeds elsajttshoz.
Az azta eltelt vekben sokszor eltndtem azon, hogy mire lenne szksg a szak
mai tuds mellett ahhoz, hogy egy programozt is profi szakembernek tartsanak.
Vannak elkpzelseim a dologrl- alaposan utnaolvastam a tmnak, blogot rtam
rla, segtettem pr embernek, s a sajt munkmban is sikerlt hasznostanom ezt
azt. Olyan knyv azonban nem akadt az utamba, amelyik konkrt tmutatst adott
volna ezen a tren.
Aztn egy nap derlt gbl villmcsapsknt jtt a felkrs, hogy vlemnyezzem
egy knyv els vzlatt - ezt a knyvet tartja most a kezben a kedves Olvas. Ez a
ktet lpsrl lpsre pontosan lerja, hogyan kell eladni magunkat, hogyan kell vi
selkednnk, s hogyan kell kommuniklnunk, ha azt akarjuk, hogy profinak tartsa
nak minket - mghozz nem elcspelt kliskkel, nem ms iromnyokra hivatkozva,
hanem rszletesen bemutatva, hogy mit kell tennnk, s hogyan.
ELSZ 13
Sokszor szrl szra kvethetjk az utastsokat. Egyes pldkban vlaszokat, vi
szontvlaszokat, pontostsokat, st tancsokat is tallunk arra az esetre, ha valaki
megprblna egyszeren
"
tnzni rajtunk
"
.
Joe ismt sznpadra lp, ezttal balrl:
Megint a Nagy Cgnl vagyunk, Joe s n, s jra a nagy webhely-ttervezsi pro
jekten dolgozunk. Ezttal azonban tegyk fel, hogy egy kicsit ms a helyzet.
Ahelyett, hogy kibjna a ktelezettsgek all, a mszaki csapat maga vllal kte
lezettsgeket. Ahelyett, hogy elhrtank a becslseket, s msra hagynk a tervezst
(hogy aztn panaszkodhassanak r), maguk szervezik meg a sajt munkjukat, s
tartjk magukat a vllalsaikhoz.
Most ttelezzk fel azt is, hogy a csapat tagjai tnylegesen egyttmkdnek. Ha
a programozk elakadnak a rendszer mkdse miatt, csak felveszik a telefont, s
a rendszergazda rgtn dolgozni kezd a problma megoldsn.
Amikor Joe megjelenik, hogy ellenrizze, hogy halad a munka az 14321-es felada
ton, senkit nem kell noszogatnia: ltja, hogy az adatbzis-felgyel szargalmasan
dolgozik, nem pedig a Weben szrfl. Emellett a csapattl kvetkezetesen pontos el
rejelzseket kap, s nem rzi gy, hogy a projekt valahol az ebd s a postalda ellenr
zse kztt ll a rangsorban. Az temterven nem kell mindenfle trkkel folyamatosan
igaztani, s a hatridkre nem az a vlasz, hogy
"
Megprbljuk.
"
, hanem az, hogy
"
Mi ezt vllaltuk; ha te sajt magadnak is ki akarsz tzni clokat, csak nyugodtan.
"
Egy id utn - biztos vagyok benne - J oe a mszaki csapatra is profikknt kezdene
tekinteni, s igaza lenne.
De milyen konkrt lpseket kell tennnk annak rdekben, hogy egyszer szaki
bl profiv vljunk? A vlaszok itt vannak ebben a knyvben.
Lpjnk magasabb szintre - szerintem bszkk lesznk r!
- Matthew Heusser
szaftverfolyamat-naturalista
BEVEZETS
1986. janur 28-n, keleti parti id szerint dleltt ll ra 39 perckor, mindssze
73,124 msodperccel a fellvs utn, mintegy 15 kilomteres magassgban, a Chal
lenger rsikl szilnkokra robbant a jobb oldali gyorstrakta hibja miatt. Ht b
tor asztronauta, kztk Christa McAuliffe kzpiskolai tanr, lett vesztette. Az er
lkeimben mig ksrt a McAuliffe desanyjnak arcra kil dbbenet, ahogy lnya
hallt nzi fenn az gen.
BEVEZETS 15
A Challenger azrt robbant fel, mert a forr gzok kiszktek a hibs gyorstrakta
burkolatnak repedsein, s felhevtettk a kls zemanyagtartlyt. A folykony
hidrognt tartalmaz ftartly alja sztrepedt, s lngra lobbantotta az zemanyagot,
aminek a hajtereje nekicsapta a tartlyt a felette lev folykonyoxign-tartlynak.
A gyorstrakta levlt a hts tmasztkrl, megperdlt az ells tmasztk krl,
s az orra kilyukasztotta az oxigntartlyt. A rendellenes irnyban hat erk a jval
1,5 mach felett mozg egsz rsiklt szembefordtottk a lgrammal, s az aerodi
namikai erhatsok pillanatok alatt apr darabokra tptk a jrmvet.
A gyorstrakta kr alak szelvnyei kztt kt krkrsen egymsba gyazott,
szintetikus gumibl kszlt O-gyr kapott helyet. Amikor a szelvnyeket sszehe
gesztettk, az 0-gyrknek ssze kellett nyomdniuk, olyan szoros tmtst kpezve,
amelyen a kipufoggzok nem kpesek thatolni.
A fellvs eltti este azonban az indtllsan -8 Celsius fokra sllyedt a hmr
sklet, ami az O-gyrk szmra megengedett legalacsonyabb hmrskletnl 12,
a korbbi indtsoknl mrt legalacsonyabb hmrskletnl pedig 18 fokkal volt alacso
nyabb. Ennek kvetkeztben az O-gyrk tl merevv vltak ahhoz, hogy tkletesen
elzrjk a forr gzok tjt. A gyorstrakta begyjtsakor a gyorsan felgyleml forr
gzok lksszer nyomst gyakoroltak a rakta burkra, ami kitgult, s laztott az
0-gyrkre nehezed nyomson. Az O-gyrk merevsge azonban megakadlyozta,
hogy a gyrk kitgulva tovbbra is szorosan zrj anak, ezrt a forr gzok egy rsze
kiszivrgott, s egy 70 fokos vet elprologtatott az 0-gyrkbl.
A gyorstraktt tervez Morton Thiokol mrnkei tudtk, hogy gondok vannak
az O-gyrkkel, s mr ht vvel korbban jelentettk ezt a feletteseiknek, illetve
a NASA-nak. Az O-gyrk a korbbi indtsok sorn is hasonl srlseket szenved
tek, de nem akkort, ami katasztrft okozott volna. Minl hidegebb volt az id, an
nl nagyobb volt a srls. A mrnkk kidolgoztak egy megoldst a problmra, de
a hiba tnyleges kijavtsa azta is vratott magra.
A mrnkk gyantottk, hogy az O-gyrk hideg hatsra tl merevv vlhat
nak, s azt is tudtk, hogy a ChaHengert hidegebb idben tervezik elindtani, mint
brmikor korbban - radsul a mrt hmrskletek mr jcskn a veszlyesen ala
csony tartomnyba estek. Rviden: a mrnkk tisztban voltak vele, hogy az indts
tl kockzatos. Nem is ltek ttlenl: figyelmeztettk az illetkeseket, s jl hallha
tan megnyomtk a vszcsengt. Nyomatkosan felszltottk a Thiokolt s a NASA-t,
hogy halasszk el a fellvst. Mindssze pr rval az indts eltt is volt egy vszrte
kezlet, ahol a mrnkk bemutattk a rendelkezskre ll legpontosabb adatokat, til
takoztak, dhngtek, s gyzkdtk az illetkeseket. k azonban vgl figyelmen
kvl hagytk a tiltakozsukat.
Amikor elrkezett a fellvs ideje, a mrnkk kz l nhnyan nem voltak hajlan
dak nzni a kzvettst, mert attl fltek, hogy az rsikl felrobban a kilvllv-
16 BEVEZETS
nyon. Ahogy azonban a Challenger kecsesen az gbe emelkedett, megknnyebbltek
Pillanatokkal a robbans eltt, amikor a jrm elrte a Mach l-es sebessget, az egyi
kk azt mondta:
"
egy hajszlon mlt
"
.
A figyelmeztetsek, a tiltakozs s a mrnkk knyrgse ellenre a vezetk meg
voltak rla gyzdve, hogy nekik van igazuk. Azt hittk, a mrnkk eltlozzk a ve
szlyt. Nem hittek az eljk trt adatoknak, s ktsgbe vontk a mrnkk kvet
keztetseit. A hatalmas pnzgyi s politikai nyoms miatt az indts mellett dntt
tek. Azt remltk, hogy minden rendben lesz.
Nem csak ostobk voltak, hanem egyenesen bnt kvettek el. Ht ember lete s
nemzedkek hite az rutazs jvjben trt derkba azon a fagyos reggelen, csak
azrt, mert k a sajt szakrt ik szava helyett a sajt remnyeikben s megrzseikben
bztak. Olyan dntst hoztak, amelyet nem lett volna joguk meghozni. Elbitoroltk
azoknak a jogt, akik a valdi tuds birtokban voltak: a mrnkkt.
De terheli-e felelssg a mrnkket is? k ktsgkvl azt tettk, amit tennik
kellett. Tjkoztattk a feletteseiket, s hatrozottan killtak a vlemnyk mellett.
Maradktalanul betartottk a hivatali utat, s minden lehetsges csatornn keresztl
figyelmeztettk az illetkeseket. Megtettk, amit lehetett, a rendszeren bell, a vezetk
azonban fellbrltk ket. gy tnik teht, ket nem lehet okoini a tragdirt.
Nha azonban eltndm, hogy lmatlanul forgoldnak-e jszaka, Christa McAuliffe
anyjt ltva maguk eltt, s azt kvnjk-e, brcsak felhvtk volna a legnagyobb t
vcsatornkat.
KTETNKRL
Ez a knyv a professzionlis szoftverfejlesztsrl szl, s szmos gyakorlati tancsot
tartalmaz, az albbihoz hasonl krdsekre igyekezve vlaszt adni:
o Ki tekinthet profi szoftverfejlesztnek?
o Hogyan viselkedik egy profi?
o
Hogyan kezeli egy profi a konfliktusokat, hogyan birkzik meg a szaros ha
tridkkel s az rtetlenked felettesekkel?
o Mikor s hogyan kell nemet mondania egy profinak?
o Hogyan birkzik meg egy profi a nyomssal?
A ktet gyakorlati tancsai mgtt ugyanakkor egy hozzlls rhet tetten, amely
az szintesgre, a tisztessgre, az nbecslsre s a bszkesgre pl. A professzion
lis hozzlls azt jelenti, hogy hajlandak vagyunk elfogadni annak a szrny fele
lssgt, hogy egyszerre vagyunk ktkezi szakmunksok s tervezmrnkk. Ennek
BEVEZETS 17
a felelssgnek rsze, hogy pontosan s tisztn dolgozzunk, megfelelen kommuni
kljunk, relis elrejelzseket adjunk, kpesek legynk beosztani az idnket, s a koc
kzatakat vllalva nehz dntseket is magunkra tudjunk vllalni.
Ezen fell azonban mg valami hozztartozik a felelssghez - valami, ami ijeszt
lehet. Tervezmrnkknt olyan mly ismeretekkel rendelkeznk a rendszereinkrl
s a programjainkrl, amilyenekkel egyetlen menedzser sem rendelkezhet. Ez a tuds
pedig rnk ruhzza a cselekvs felelssgt.
l RODALOMJEGYZK
[McConnell87]: Malcolm McConnell: Challenger f Major Malfunction'. New York,
NY, Simon & Schuster, 1987.
[Wiki-Challenger]: "Space Shuttle Challenger disaster"
http://en.wikipedia. org/wiki/Space_Shuttle_Challenger_disaster
KSZNETNYILVNTS
Plyafutsom sorn szinte mindig msokkal egyttmkdve dolgoztam. Br voltak
sajt lmaim s vgyaim, valahogy mindig talltam valakit, akivel kzs clokon
osztoztunk. Ebbl a szempontbl kicsit gy rzem magam, mint egy Sith-nagyr,
akik
"
mindig ketten vannak
"
.
Az els professzionlisnak tekinthet kzs munkmban John Marchese volt
a partnerer - 13 vesen. Azt terveztk, hogy szmtgpeket ptnk - n voltam az
sz, pedig a kz: megmutattam neki, hov forrassza a drtoka t, pedig megcsinlta.
Megmutattam, hov ptsen be egy relt, pedig beszerelte. Nagyon j mulatsg volt,
s tbb szz rt tltttnk el vele. Nhny kifejezetten impozns trgy is kikerlt
a keznk all, amelyekhez relket, gombokat, izzkat, st mg egy telexgpet is fel
hasznltunk Termszetesen egyik sem csinlt semmit, de nagyon hatsos ltvnyt
nyjtottak, s kemnyen dolgoztunk rajtuk. John, ksznml
A kzpiskola els vben, nmet rn ismertem meg Tim Conradot, aki nagy
koponya volt. Amikor vele kzsen fogtunk szmtgpek ptsbe, volt az agy,
s n lettem a kz. Tle tanultam meg az elektronika alapjait, s ismertetett meg
a PDP-8-cal. Vele mr igazi, mkdkpes, 18 bites elektronikus binris szmolg
pet ptettnk egyszer elemekbl, amely tudott sszeadni, kivonni, szorozni s osz
tani. Htvgn, illetve a tavaszi, nyri s karcsonyi sznetekben vgig ezen dolgoz
tunk megszllottan, s egy v alatt kszltnk el vele. Vgl azonban nagyon klasszul
mkdtt. Tim, ksznml
Tim s n megtanultuk, hogyan kell szmtgpet programozni. Ez 1968-ban nem
volt knny, de neknk sikerl t. Beszereztnk nhny knyvet, tbbek kztt a PDP-8
KSZNETNYILVNTS 19
assemblerrl, a Fortranrl, a Cobolrl s a PL/l-rl, s rongyosra olvastuk ket. Olyan
programokat rtunk, amelyeknek a futtatsra eslynk sem volt, mert nem volt sz
mtgpnk, amelyhez hozzfrhettnk volna. Ettl fggetlenl megrtuk ket, mert
imdtuk a programozst.
A kzpiskola msodikban szmtgpes tanfolyamot indtott. Egy ASR-33-as te
lexgpet kapcsoltak ssze egy llO baudos betrcszs modemmel, s az Illinois
Institute of Technology Univac ll08-as idosztsos rendszern kaptak egy fikot.
Lnyegben az els pillanattl kezdve Tim s n kezeltk a gpet - senki ms nem
mehetett a kzelbe.
A mademcsadakozs ltrehozshoz fel kellett venni a telefont, s trcszni a meg
felel szmot, majd amikor az ember meghallotta a tloldalon lev modem spolst,
meg kellett nyomni az
"
orig
"
gombot a telexgpen, hogy a kezdemnyez modem is
spolni kezdjen. A kagylt ez utn vissza kellett tenni, s ltrejtt az adatkapcsolat
A telefontrcs t lelakatoltk, s csak a tanroknak volt kulcsa a lakathoz. Ez azonban
nem szmtott, mert kidertettk, hogy brmilyen szmot trcszni lehet a villa gyors
nyomogatsvaL Dobosknt elg j temrzkkel s reflexekkel rendelkeztem, gy ke
vesebb mint 10 msodperc alatt trcszni tudtam a modemet a lelakatolt telefonon.
A szmt gplaborban kt telexgp llt: az egyik az l kapcsolathoz, a msik a kap
csolat nlkli munkhoz. A dikok mindkettn programokat rtak. A programokat
a telex billentyzetn gpeltk be, a gp pedig minden billentyletst lyukszalagra
rgztett. A dikok a programjaikat egy figyelemremlt an sokoldal rtelmezett nyel
ven, liTran-ban rtk, a lyukszalagjaikat pedig egy kosrba tettk a telexgpek mellett.
Iskola utn Tim s n trcsztuk a szmtgpet (termszetesen villatapogatssal),
betltttk a lyukszalagokat az liTran-ktegel rendszerbe, majd letettk a telefont.
Mivel a gp msodpercenknt 10 karaktert tudott beolvasni, ez nem ment tl gyorsan.
gy egy ramlva visszamentnk, s kinyomtattuk a programokat, megint csak m
sodpercenknt 10 karakteres sebessggel. A telexgp nem lapokat nyomtatott, gy
nem vlasztotta szt a dikok programjait, csak kinyomtatta azokat egyms utn, s
neknk kellett sztvgnunk a paprt ollval. A lyukszalagokat s a kinyomtatott prog
ramokat aztn gemkapoccsal sszetztk, s beletettk a
"
kimeneti
"
kosrba.
Tim s n igazi mesterei voltunk ennek. Mg a tanrok is bkn hagytak minket,
amikor a laborban voltunk. Az munkjukat vgeztk el, s k tudtk ezt. Soha nem
krtek meg r, hogy csinljuk, nem adtak r engedlyt, s nem adtk oda a lakatkul
csot. Mi csak bekltztnk a laborba, k meg kikltztek, s a legkevsb sem fogtk
szarosan a przt. Ksznet matektanraimnak Mr. McDermitnek, Mr. Fogelnek s
Mr. Robiennek!
Miutn a dikok hzi feladatval vgeztnk, tbbnyire jtszottunk. Egyik progra
mot rtuk a msik utn, amelyek mindenfle rlt dolgot mveltek, pldul krket
s parahalkat rajzoltak ASCII-karakterekbl lyukszalagra. Brown-mozgsi (vlet
lenplya-) s vletlensz-elllt programokat ksztettnk, s kiszmtottuk az 50
20 KSZNETNYILVNTS
faktorilist az utols szmjegyig. rkat tltttnk prograrak kitlsvel, majd
azzal, hogy mkdsre brjuk ket.
Kt vvel ksbb Tim, haverunk, Richard Lloyd, s n, programozi llst kaptunk
az Illinois llambeli Lake Bluff ban szkel ASC Tabulating-nL Tim s n csupn 18
vesek voltunk akkor. gy dntttnk, hogy a fiskola idpocskols-mirt ne kezd
hetnnk meg rgtn a karriernket? Az ASC Tabula ting-nl ismertem meg Bill Hohrit,
Frank Rydert, Big Jim Carlint s John Millert, akik lehetsget adtak nhny ifjoncnak,
hogy megtanul jk, mirl is szl egy hivatsos programoz lete. Nem volt mindig kel
lemes lmny, de nem is volt teljesen haszontalan, mert sokat tanultunk belle. Mind
nyjuknak - s fleg Richardnak, aki a csapat lelke volt -ksznettel tartozom.
Miutn 20 vesen kigve otthagytam a cget, egy ideig fnyrkat javtottam a s
goromnl, de annyira bna voltam, hogy muszj volt kirgnia. Ksz, W es!
gy egy vvel ksbb kiktttem az Outboard Marine Corporation-nl. Addigra
meghzasodtam, s mr egy gyerek is tban volt. k is kirgtak John, Ral ph s Tom,
ksznm!
Ezt kveten a Teradyne-hoz kerltem, ahol megismertem Russ Ashdownt, Ken
Findert, Bob Copithorne-t, Chuck Studeet s CK Srithrant (akit ma mr Kris Iyernek
hvnak). Ken volt a fnkm, Chuck s CK pedig a haverjaim. Nagyon sokat tanultam
tlk. Ksz, fik!
Aztn ott volt Mike Carew. A Teradyne-nl rkmozg prost alkottunk, s tbb
rendszert is rtunk egytt. Ha valakinek srgsen kellett valami, mindig Bobhoz s
Mike-hoz fordult. Jl szrakoztunk egytt. Ksz, Mike!
Jerry Fitzpatrick szintn a Teradyne-nl dolgozott. A
"
Dungeons & Dragons
"
sze
repjtk-partikrl ismertem, de a munkban is hamar sszecsiszoldtunk. Egy Com
modore 64-esen rtunk egy szaftvert a D&D-jtkosoknak,
"
The Electronic Recep
tionist
"
cmen pedig j program fejlesztsbe kezdtnk a Teradyne-nL vekig
dolgoztunk egytt, s Jerry azta is j bartom. Ksz, Jerry!
A Teradyne egy vre Angliba kldtt, ahol Mike Kergozou lett a munkatrsam.
Egy csom kzs tletnk volt, br ezek tbbsge inkbb a kerkprozshoz s a kocs
mkhoz kapcsoldott. Ettl fggetlenl Mike elktelezett programoz volt, aki na
gyon gyelt a minsgre, s fegyelmezetten dolgozott ( br ezt lehet, hogy vitatn).
Ksznm, Mike!
1987-ben, Anglibl visszatrve Jim Newkirkkel kezdtem j terveket szvgetni.
Nhny hnap klnbsggel mindketten otthagytuk a Teradyne-t, s csatlakoztunk
egy akkor indul cghez, a Clear Communications-hz. veket tltttnk ott kem
nyen melzva, abban a remnyben, hogy milliomosok lesznk, ami persze nem k
vetkezett be. A tervezgetst ennek ellenre nem hagytuk abba. Ksz, Jim!
Vgl kzsen megalaptottuk az Object Mentort. Jim a legszintbb, legfegyel
mezetebb s legcltudatosabb szemly, akivel valaha szerenesm volt dolgozni. Annyi
mindent tanultam tle, hogy itt fel sem tudnm sorolni. Ezt a knyvet neki ajnlom.
KSZNETNYILVNTS 21
Rajtuk kvl oly sokakkal szttem kzs terveket, vagy dolgoztam egytt, s oly
sokan voltak hatssal a szakmai elmenetelemre, hogy itt csak nhnyukat tudom
felsorolni: Lowell Lindstrom, Dave Thomas, Michael Feathers, Bob Koss, Brett Schuchert,
Dean Wampler, Pascal Roy, JeffLangr, James Grenning, Brian Button, Alan Francis,
Mike Hill, Eric Meade, Ron Jeffries, Kent Beck, Martin Fowler, Grady Booch. Min
denkinek ksznml
Termszetesen a legfontosabb partner az letemben szeret felesgem, Ann Marie.
20 vesen vettem el, hrom nappal a 18. szletsnapja utn. 38 ve hsges trsam,
irnytm, szerelmem s letem rtelme. Remlem, mg legalbb jabb ngy vtizedig
egytt maradunk.
Ma mr a gyermekeimmel dolgozom egytt s kovcsalom a terveket. Legidsebb
lnyommal, Angelval szoros munkakapcsolatban llok: az n tykanym s rettent
hetetlen asszisztensem, aki gyel r, hogy soha ne feledkezzek meg egy tallkozrl
vagy egy gretrl. Fiammal, Micah-val, aki az 8thlight.com alaptja, s sokkal jobb
zleti rzkkel rendelkezik, mint amilyen nekem valaha is volt, kzs zleti terveink
vannak. Legjab b vlallkozsunk, a cleancoders.com nagyon izgalmasnak grkezik!
Legkisebb fiam, Justin nemrg llt munkba az 8th Lightnl, vagyis Micah-val
dolgozik, Angela hga, Gina pedig a Honeywell vegyszmrnke. Velk mg csak
most kezd komolyra fordulni a tervezgets.
Senkitl nem tanulhatunk tbbet az letben, mint a gyerekeinktL Srcok, ksz
nml
A SZERZRL
Robert C. Martin (
"
Unde Bob
"
, vagyis
"
Bob bcsi
"
) 1970 ta programoz. Alaptja
s elnke a nagy tapasztalattal rendelkez szoftverfejlesztket s -menedzsereket t
mrt, nemzetkzi Object Mentor Inc. cgnek, amelynek szakterlete a vllalati pro
jektmenedzsels. Az Object Mentor nagyvllalatoknak nyjt tancsadi, oktatsi s
tovbbkpzsi szolgltatsokat a munkaszervezs, valamint az objektumkzpont
szoftvertervezs terletn, szerte a vilgon.
Martinnak tbb tucat cikke jelent meg szakmai folyiratokban, s rendszeres el
adja a nemzetkzi konferenciknak s vsroknak.
A SZERZRL 23
Tbbek kztt az albbi kteteket rta vagy szerkesztette:
Designing Object Oriented C++ Applications U sing the Booch Method
Patterns Languages of Program Design 3
More C++ Gems
Extreme Programming in Practice
Agile Software Development: Principles, Patterns, and Practices
UML for Java Programmers
Clean Code (Tiszta kd, Kiskapu, 2010)
A szaftverfejleszts egyik legnagyobb szaktekintlyeknt Martin hrom vig volt
a The C++ Report fszerkesztje, illetve tlttte be elszr az Agi le Alliance elnki
tisztt is.
Robert emellett az Unde Bob Consulting LLC alaptja; fival, Micah Martinnal
egytt pedig trsalaptja a The Clean Coders LLC-nek.
KTELEZ BEVEZETS
(Nem tugrani, szksg lesz r!

Felttelezem, hogy az Olvas azrt vette a kezbe ezt a knyvet, mert szmtgp
programoz, s profi szeretne lenni. Ez gy helyes. A szakmnknak get szksge
van igazi szakemberekre.
n is programoz vagyok, mghozz 42 ve1, s ez alatt a 42 v alatt - ki merem
jelenteni- mindent lttam. Volt, hogy kirgtak, volt, hogy kitntettek. Voltam cso
portvezet, menedzser, kzlegny, de elnk-vezrigazgat is. Dolgoztam brilins
programozkkal s csigkkaP egyarnt. Dolgoztam cscstechnikj begyazott
l Csak semmi pnik!
2 Ismeretlen eredet szakkifejezs.
KTELEZ BEVEZETS 25
szoftver- s hardverrendszereken s vllalati brszmfejt programokon. Programoz
tam COBOL, FORTRAN, BAL, PDP-8, PDP-11, C, C++, Java, Ruby, Smalltalk s
szmtalan ms nyelven s rendszeren. Dolgoztam megbzhatatlan, semmirekell
lskdkkel s elktelezett profikkaL Ez utbbiakrl szl ez a knyv.
Ennek a knyvnek a lapjain megksrlem meghatrozni, hogy mit jelent profesz
szionlis programoznak lenni, s lerom, milyen hozzllst s viselkedst tartok n
profinak.
Hogy honnan tudom, milyen a profi hozzlls s viselkeds? Onnan, hogy a sajt
kromon tanultam meg. Amikor az els programozi munkmat kaptam, a
"
profi
"
lett volna az utols sz, amellyel brki is illetett volna.
Mindez 1969-ben trtnt. 17 ves voltam. Apm addig jrt egy ASC nev helyi
vllalkozs nyakra, amg fel nem vettek rszids programoznak. (Igen, az apm
kpes volt ilyesmikre. Egyszer lttam, hogy kill az tra egy gyorsan kzeled aut
el kinyjtott kzzel, s meglljt parancsol neki. Az aut tnyleg megllt. Senki nem
mert nemet mondani apmnak.) A cg azt a feladatot adta nekem, hogy vegyem be
magam abba a szobba, ahol az IBM-szmtgpek hasznlati utastsait tartjk, s
frisstsem ket. Tbb v nyi frisstst kellett bernom a kziknyvekbe. Itt tallkoztam
elszr azzal a mondattal, hogy
"
Ezt az oldalt szndkosan hagytuk resen
"
.
Nhny napnyi kziknyvfrissts utn a fnkm megkrt, hogy rjak egy egy
szer Easycode-programot. Ettl felvillanyozdtam, mert korbban mg soha nem
rtam programot igazi szmtgpre. Az Autocoder-knyveket ugyanakkor addigra
mr magamba szvtam, gy volt valamilyen halvny elkpzelsem arrl, hogy hogyan
fogjak neki.
A programnak csak annyi volt a dolga, hogy rekordokat olvasson be egy szalagr l,
s jra cserlje azoknak a rgi azonostit. Az j azonostkl-tl indultak, s minden
rekordnl 1-gyel nttek. Az j azonostval elltott rekordokat aztn ki kellett rni
egy msik szalagra.
A fnkm egy piros s kk lyukkrtykkal megpakolt polchoz irnytott. Kp
zeljnk el 50 krtyapaklit egyms tetejn, amibl 25 piros s 25 kk- na, gy nztek
ki a lyukkrtyaktegek Piros s kk cskok sorakoztak egyms utn, s mindegyik
csk gy 200 krtyt jelentett. Egy-egy csk annak a szubrutin-knyvtrnak a forrs
kdjt tartalmazta, amelyet a programozk ltalban hasznltak. A programozk
egyszeren levettk a fels kk vagy piros kteget, gyelve r, hogy ne fogjanak hozz
egy msik sznt, aztn hozzcsaptk azt a programjukat tartalmaz kteghez.
A programomat kdolrlapokra kellett rnom. A kdolrlapok nagy, ngyszg
letes paprlapok voltak, amelyeket 25 sorra s 80 oszlopra osztottak. Mindegyik sor
egy-egy krtyt jelkpezett. A kdolrlapra nyomtatott nagybetvel s 2-es vastag-
3 Az Easycodera Honeywell H200-as szmtgp assemblere volt, hasonl az IBM 1401- esek Auto
coderh ez.
26 KTELEZ BEVEZETS
sg ceruzval kellett rni. Az utols 6 oszlopba minden sorban egy sorozatszm ke
rlt, szintn 2-es ceruzval. A sorozatszmok ltalban tzesvel nvekedtek, hogy
ksbb mg be lehessen szrni jab b krtykat.
A kdolrlapok aztn a krtyalyukasztkhoz kerltek. Az emltett cgnl tbb
tucat nt alkalmaztak, akik fogtk a kdolrlapokat a nagy
"
be
"
kosrbl, s
"
be
gpeltk
"
ket a lyukasztgpbe, ami nagyon hasonltott egy rgpre, csak ppen
nem paprra rt karaktereket, hanem krtykat lyukasztott ki a megfelel helyeken,
Msnap a krtyalyukasztk az irodai bels kzbestn keresztl visszajuttattk
hozzm a programot. A lyukkrtykat beletekertk a kdolrlapjaimba, s a kteget
gumival fogtk ssze. tnztem a krtykat, lyukasztsi hibk utn kutatva, de nem
talltam egyet sem, ezrt fogtam a szubrutin-knyvtr krtyaktegt, hozztettem
a programom kteghez, s az egszet felvittem a szmtgp-kezelknek
A szmtgpek egy lezrt, lgkondicionlt szabban voltak, s a kbeleik a meg
emelt padlzat alatt futottak. Bekopogtam, az opertor zord tekintettel tvette tlem
a programkteget, s beletette egy msik
"
be
"
kosrba, ami a szmtgpteremben
llt, azzal, hogy ha majd odajutnak, lefuttatjk
Msnap visszakaptam a kteget a futtats eredmnyt tartalmaz paprba csoma
golva s gumival tktve. (Akkoriban nagyon sok gumit hasznltunk!)
Kibontottam a csomagot, s lttam, hogy a programomat nem sikerlt lefordtani.
A papro n szerepl hibazeneteket a legnagyobb igyekezettel sem tudtam rtelmezni,
ezrt a fnkmhz fordultam, aki tnzte ket, drmgtt valamit a bajusza alatt,
gyorsan jegyzeteket firkantott a paprra, fogta a programktegemet, s intett, hogy
kvessem.
Felvitt a lyukasztszobba, s lelt egy szabad lyukasztgphez. Egyesvel kijav
totta a hibs lyukkrtykat, s hozzjuk adott mg egy-kettt. Kzben gyorsan ma
gyarzta, hogy ppen mit csinl, de nemigen tudtam kvetni.
Az j kteget felvitte a szmtgpterembe, bekopogtatott, mondott nhny varzs
szt az egyik opertornak, aztn intett a fejvel, hogy kvessk az illett. Az opertor
bekapcsolta a krtyaolvast, s betlttte a kteget, mikzben mi figyeltk. A krtyk
prgtek, a nyomtat kattogott, s kszen is voltunk. A programom mkdtt.
Msnap a fnkm megksznte a kzremkdsemet, s felmondott AzASC-nl
nyilvn nem reztk gy, hogy lenne idejk ptyolgatni egy 17 ves kezdt.
Az AS C-vel val kapcsolatom azonban mg messze nem rt vget. Nhny hnap
pal ksbb teljes idej llst kaptam tlk: jszakai mszakban kellett hlzaton k
vli nyomtatkat kezelnem, amelyek kukba val leveleket nyomtattak ki szalagon
trolt lenyomatokbL A feladatom az volt, hogy paprt tltsek a nyomtatkba; betlt
sem a szalagokat a szalagos meghajtkba; elhrtsam az akadlyt, ha elakad a papr;
egybknt meg nzzem, ahogy a gpek dolgoznak.
Eljtt az 1970-es v. A fiskola szba sem jhetett, de nem is vonzott klnseb
ben. Mg mindig folyt a vietnami hbor, s a karpuszokon kosz uralkodott. Inkbb
KTELEZ BEVEZETS 27
faltam tovbb a knyveket a COBOL-rl, a Fortranrl, a PL/l-rl, a PDP-8-rl s az
IBM 360 AssemblerrL Azt terveztem, hogy az iskolt kikerlve, ha trik, ha szakad,
megcspek egy programozi llst.
Tizenkt hnappal ksbb elrtem a clom: teljes llsba kerltem, mint progra
moz- az ASC-nl. n s kt j bartom, Richard s Tim- szintn 19 vesek- egy
msik, ugyancsak hrom programozbl ll csapattal dolgoztunk kzsen; egy va
ls idej szmizrendszert rtunk a fuvarozk egyik szakszervezetnek assembler
nyelven, egy Varian 620 i gpen. Egyszer miniszmtgp volt, felptsben hasonl
a PDP-8-hoz, azzal az eltrssel, hogy 16 bites szavakat s kt regisztert hasznlt.
Minden kdsort ezen a rendszeren rtunk meg. Amikor azt mondom, hogy min
den kdsort, azt valban gy rtem, hogy minden egyes sort: az opercis rendszert,
a megszaktskezel ket, a kimeneti s bemeneti illesztprogramokat, a lemezek fjl
rendszert, a memriacserlt, st mg az thelyezhet programszerkesztt is. s per
sze a teljes alkalmazskdot Mindezt 8 hnap alatt ksztettk el, heti 70-80 rs
munkval, hogy tartani tudjuk a pokolian szaros hatridt Az vi fizetsem 7200
dollr volt.
Leszlltottuk a rendszert. Aztn felmondtunk Elzetes figyelmeztets nlkl,
rossz szjzzel. jt nappall tve dolgoztunk, s leszlltottunk egy sikeres rendszert,
a cg pedig ki akarta szrni a szemnket egy 2%-os fizetsemelssel. gy reztk,
becsaptak s kihasznltak minket. Kzlnk tbbeknek mshol is volt munkja, gy
k egyszeren elkszntek a cgtL
n s az egyik bartom azonban ms, meglehetsen szerencstlen mdjt vlasz
tottuk a felmondsnak Beviharzottunk a fnk irodjba, s egytt vgtuk a kpbe
a felmondsunkat N agyon jles rzs volt - egy napig.
Msnap belmhastott a felismers, hogy 19 vesen, iskolai vgzettsg nlkl, mun
kanlkli lettem. Jelentkeztem nhny programozi llsra, de az llsinterjk nem
sikerltek valami jl, ezrt ngy hnapig a sgorom fnyrjavt mhelyben dol
goztam. Sajnos pocsk fnyrszerelnek bizonyultam, ezrt a sgorom vgl kny
telen volt megvlni tlem. Mly depressziba zuhantam.
Minden jjel hajnali 3-ig bren voltam, tmtem magamba a pizzt, s rgi szrny
flmeket nztem a szleim vzzn eltti, antenns fekete-fehr tvjn. Taln csak
a szellemkpnek volt egynisge ezekben a filmekben. Aztn dlutn l-ig gyban
maradtam, mert nem akartam szembenzni a sivr napjaimmaL Feliratkoztam egy
matektanfolyamra a helyi tovbbkpz kzpontban, aztn megbuktam a vizsgn.
Sznalmas roncs lett bellem.
Anym komolyan elbeszlgetett velem, s lehordott, amirt elszrom az letem,
amirt olyan ostoba voltam, hogy felmond tam, mikzben nem volt a lthatron ms
munka, amirt ilyen tetrlisan csinltam, s amirt a bartommal egytt hagytuk
ott az ASC-t. Felhvta a figyelmemet, hogy soha nem szabad gy felmondani, hogy
mg nincs j helyem, s hogy mindig higgadtan, nyugodtan s egyedl kell beadni
28 KTELEZ BEVEZETS
a felmondst. Azt mondta, fel kellene hvnom a fnkmet, s vissza kellene kny
rgnm magam. Azt mondta: "Ideje lenne egy kis alzatot tanulnod."
A tizenkilenc ves srcok nem arrl hresek, hogy alzatot akarnnak tanulni, s
ez all n sem voltam kivtel. A krlmnyek azonban megtpztk a bszkesgemet.
Vgl felhvtam a fnkt, s trden llva knyrgtem neki. Mkdtt a dolog. vi
6800 dollros fizetsrt hajland volt visszavenni, n pedig boldogan elfogadtam az
ajnlatot.
jabb tizennyolc hnapot tltttem el ott, igyekezvn megbecslni magam, s bi
zonytani, hogy rtkes alkalmazott vagyok. Jutalmul ellptetst s fizetsemelst
kaptam, s egy biztos llsnak rlhettem. Az let ismt szp volt. Amikor vgl ki
lptem a cgtl, bartsggal vltunk el, s mr a zsebemben volt egy jobb llsajnlat
Az Olvas most azt gondolhatja, hogy megtanultam a leckt, s igazi profi lett
bellem. Nos, ettl mg messze voltam- ez mg csak az els lecke volt abbl a sokbl,
amit az idk sorn meg kellett tanulnom. Az elkvetkez vekben elvesztettem egy
llst, mert hanyag voltam, s llandan lekstem a ltfontossg hatridket, s
majdnem kirgtak egy msikbl, mert vletlenl bizalmas informcikat szivrog
tattam ki egy gyflnek. Volt, hogy tvetter egy siralmasan ll projekt vezetst, s
belelltottam a fldbe, mert nem krtem segtsget, pedig tudtam, hogy szksg
lenne r. Mskor aggresszvan vdtem a mszaki dntseimet, annak ellenre, hogy
homlokegyenest szembementek a megrendel ignyeivel, vagy felvettem egy tkle
tesen alkalmatlan szemlyt, s ezzel hatalmas kockzatot varrtam a munkaadm
nyakba. s ami a legrosszabb, miattam rgtak ki kt embert, mert alkalmatlan vol
tam a vezetsre.
Ez a knyv a sajt hibim gyjtemnynek s a bneim lajstromnak tekinthet,
amely egyben tmutatknt szolgl ahhoz, hogy az Olvas elkerlje, hogy ugyan
ezekbe a hibkba essen.
l. FEJEZET
PROFIZMUS
"
Nevess, Curtin, regi, mert a termszet,
a sors, vagy az r, ahogy akarod,
trft ztt velnk! De brki is volt, remek a humorrzke!"
- Howard, "A Sierra Madre kincse"
Szval profi szaftverfejleszt szeretnl lenni? Felemelt fejjel, bszkn akarod hirdetni
a vilgnak, hogy
"
Profi vagyok!"? Azt szeretnd, ha az emberek tisztelettel tekintennek
PROFIZMUS 31
rd, s hdolnnak neked? Azt szeretnd, hogy az anyk tged lltsanak kvetend
pldaknt a gyermekeik el? Mindezt akarod egyszerre?
VIGYZZ, MIT KRSZ!
A profizmus ktl fegyver. Termszetesen bszkesggel tlti el az embert, ugyanak
kor felelssget s elszmoltathatsgot is jelent. A kett kz a kzben jr. Nem bsz
klkedhetnk olyasmivel, amirt nem vllalunk felelssget.
Sokkal knnyebb amatrnek lenni. Az amatrknek nem kell felelssget vllalniuk
azrt, amit csinlnak- az a munkaadjukra hrul. Ha egy amatr hibzik, a munkaadja
takartja el a mocskot, ha viszont egy prof kvet el hibt, ezt neki kell megtennie.
Mi trtnik, ha egy hiba elkerli a programoz figyeimt az egyik modulban, s
ez a cgnek 10 OOO dollrjba kerl? Az amatr csak megvonja a vllt, mondvn,
"
Megesik az ilyesmi
"
, s mr rja is a kvetkez modult. A profinak viszont egy esek
ket kell kitltenie 10 OOO dollrrl a cg szmra.1
Ugye ms rzs, ha a te pnzedrl van sz? Egy profinak viszont mindig ezt kell
reznie - ez a profizmus lnyege. A profizmus ugyanis a felelssg vllalsrl szl.
FELELSSGET VLLALNI
Elolvastad a bevezett, igaz? Ha nem, lapazz vissza, s tedd meg most, mert a beve
zet adja meg a kerett mindannak, amirl a knyvben sz lesz.
Engem az tantott meg arra, hogy mit jelent felelssget vllalni, hogy tbbszr is
szembesltem a felelssg elhrtsnak kvetkezmnyeiveL
1979-ben egy Teradyne nev cgnek dolgoztam. n voltam a
"
felels mrnke
"
annak a szoftvernek, amely egy mini- s mikroszmtgp alap rendszert vezrelt,
amely a telefonvonalak minsgt mrte. A kzponti miniszmtgp 300 baudos
brelt, illetve betrcszs telefonvonalakon keresztl tbb tucat kisegt mikrosz
mtgphez csatlakozott, amelyek a mreszkzket vezreltk. A kd teljes egsz
ben assemblerben kszlt.
A megrendelink nagy telefontrsasgok informatikai vezeti voltak, akik egyen
knt 100 OOO vagy mg tbb telefonvonalrt voltak felelsek. A rendszerem nekik se
gtett megtallni s kijavtani a telefonvonalakon jelentkez hibkat s rendellenes
sgeket, mieltt az elfizetk szrevettk volna azokat. Ez cskkentette a kzzemi
ellenrk ltal mrt gyflpanaszok szmt, s gy hatssal volt arra, hogy a telefon-
l Hacsak nem kttt elnys szerzdst a cggel, amelyben levdte magt az ilyen hibkkal szemben.
32 1. FEJEZET
trsasgok milyen djakat szmolhattak fel az elfizetknek Rviden, rendkvl fon
tos rendszerekrl volt sz.
A rendszerek minden jjel lefuttattak egy
"
jszakai rutint
"
, amelynek sorn a kz
ponti miniszmtgp arra utastotta a kisegt mikroszmtgpeket, hogy ellen
rizzenek minden hozzjuk tartoz telefonvonalat. Reggel aztn a kzponti szmt
gp lekrte a hibs vonalak listjt a hiba lersval egytt. A szolgltatsi terletekrt
felels informatikai vezetk ennek a jelentsnek az alapjn osztottk be a szerelket,
hogy javtsk ki a hibkat, mieltt az gyfelek panaszkodni kezdennek.
Egy alkalommal j programvltozatot postztam tbb tucat megrendelnek A
"
pos
tzs
"
itt pontosan a megfelel sz, ugyanis a szaftvert szalagra rtam, s ezeket a sza
lagokat kldtem el az gyfeleknek, akik aztn betltttk rluk a szoftvert, s jrain
dtottk a rendszereikeL
Az j programvltozat kijavtott nhny kisebb hibt, valamint tartalmazott egy
j szolgltatst, amelyet a megrendelk mr rgta kveteltek Meggrtk nekik,
hogy egy bizonyos idpontra leszlltjuk nekik a krt frissts t, de ppen csak sikerlt
elkszlnm vele, hogy hatridre megrkezzen.
Kt nappal ksbb felhvott az egyik mszaki vezetnk, Tom, s azt mondta, hogy
tbb megrendel is panaszkodik, hogy az
"
jszakai rutin
"
nem futott le teljesen, s
nem ksztett nekik jelentst. Megllt bennem az t, mert ahhoz, hogy idben pos
tzhassam a szoftvert, mellztem a rutin tesztelst. A rendszer tbbi szolgltatst
nagyrszt leteszteltem, de a rutin tesztelse rkat vett volna ignybe, engem pedig
szortott a hatrid. A rutin kdjban egyetlen hibajavts sem volt, ezrt biztons
gosnak reztem a teszt elhagyst.
Egy jszakai jelents elvesztse a legkevsb sem volt aprsg. Azt jelentette, hogy
a szerelknek egyszer kevesebb a munkjuk, mskor meg ktszer annyi szakad rjuk,
egyes elfizetk pedig szrevehetik a hibt, s panaszkodhatnak Egyetlen jszaknyi
adat elvesztse elg volt ahhoz, hogy egy terleti vezet felhvja Tomot, s lehordja.
Beizztottam a tesztrendszernket, betltttem az j szoftvert, s elindtottam
a rutint. Tbb rig futott, de aztn hibazenettel lellt. Ha postzs eltt lefuttattam
volna ezt az ellenrzst, a megrendelk nem vesztettek volna adatokat, s a terleti
vezetk nem pirtottak volna r T omra.
Felhvtam Tomot, hogy elmondjam neki, hogy nekem is sikerlt elidznem a hi
bt. Tjkoztatott, hogy szinte az sszes megrendel jelentkezett nla ugyanezzel
a panasszal, s megkrdezte, hogy mikorra tudom kijavtani a hibt. Azt feleltem
neki, hogy fogalmam sincs, de dolgozam rajta, a megrendelk pedig addig is trjenek
vissza a rgi programvltozathoz. Tom nagyon dhs volt, mert ez a megrendelket
ktszeresen is sjtotta: elvesztettek egy egsz jszaknyi adatot, s a begrt j szol
gltatst sem vehettk ignybe.
A hiba okt nagyon nehz volt felderteni. A tesztels tbb rt vett ignybe, s az
els javts nem is mkdtt. A msodik sem. Tbb prblkozsomba-s gy tbb
PROFIZMUS 33
napomba - kerlt kiderteni, hogy mi okozza a hibt, mikzben Tom pr rnknt jra
s jra rmcsrgtt, s nyaggatott, hogy mikor leszek mr ksz. Arrl is gondoskodott,
hogy tisztban legyek vele, milyen leszrsban volt rsze a terleti vezetktl, s mi
lyen knos volt neki azt mondani, hogy tltsk vissza a programot a rgi szalagokrL
Vgl megtalltam a hibt, kipostztam az j szalagokat, s minden visszazkkent
a rgi kerkvgsba. Tom, aki nem volt a felettesem, lehiggadt, s ftylat bortottunk
az gyre. Amikor tl voltunk rajta, a fnkm odajtt hozzm, s azt mondta:
"
Biz
tos vagyok benne, hogy tbbet nem csinlsz ilyet". Egyetrtettem vele.
Utlag belttam, hogy a rutin ellenrzse nlkl feleltlensg volt postzni a szaft
vert. A tesztelst azrt hagytam ki, hogy elmondhassam, hatridre elkszltem
a munkval. Hisgi krdst csinltam az egsz bl. Nem rdekelt sem a megrendel,
sem a munkaadm, csak a sajt hrnevem. Felelsen kellett volna eljrnom, s meg
mondani T omnak, hogy mg nem kszltem el minden teszttel, ezrt nem leszek ksz
idre a szaftverreL Nem lett volna knny, s Tom ennek sem rlt volna, de a meg
rendelk nem vesztettek volna adatokat, s a terleti vezetk nem szrtak volna
le minket.
ELS SZABLY: NE TGY KRT!
De mit is jelent a felelssg vllalsa? Milyen elvekhez kell tartanunk magunkat?
A hippokratszi eskbl merteni nagykpnek tnhet, de van nla jobb forrs? Nem
sszer, hogy egy remnybeli profi els szm clja s felelssge az legyen, hogy
a tudst csak jra hasznlja?
Milyen krt okozhat egy szoftverfejleszt? Tisztn a szaftver szemszgbl nzve,
egyarnt krt tehet a szaftver mkdsben s annak felptsben. Az albbiakban
azt vizsgljuk meg, hogy miknt kerlheted el, hogy te is gy tegyl.
NE TGY KRT A SZOFTVER MKDSBEN!
Nyilvnvalan arra treksznk, hogy az ltalunk ksztett szaftver mkdjn. A leg
tbbnk ppen azrt vlasztotta a programozi plyt, mert egyszer sikerlt valami
mkdkpeset ksztenie, s jra meg jra t szeretn lni ezt az lmnyt. A mk
dkpes szoftver azonban nem csak a mi vgyunk: a megrendelink s a munkaad
ink is azt akarjk, hogy a programjaink mkdjenek, hiszen azrt fizetnek, hogy
olyan programot kapjanak, ami a kvnalmaiknak megfelelen mkdik.
A szaftver mkdsben akkor tesznk krt, amikor hibkat ejtnk a program
ban. Ahhoz teht, hogy profiv vljunk, nem szabad hibkat hagynunk a program
jainkban.
Mr hallom is az ellenvetst: "Vrjunk csak! Ez nem sszer elvrs: a szmtgpes
prograrak tl bonyolultak ahhoz, hogy egyetlen hiba nlkl el lehessen kszteni ket!".
34 1. FEJEZET
Termszetesen igazad van. A szmtgpes prograrak valban tl bonyolultak
ahhoz, hogy egyetlen hiba nlkl el lehessen kszteni ket, de ez sajnos nem mentsg.
Az emberi test is tl bonyolult ahhoz, hogy teljes egszben megrtsk, az orvosok
mgis feleskdnek arra, hogy nem fognak krt tenni benne. Ha k nem hrtjk el
maguktl ezt a felelssget, hogy tehetnnk meg mi?
"
Azt akarod mondani, hogy tkletesnek kell lennnk?
"
-jl hallom a tiltakozst?
Nem, nem azt mondom, hogy a tkletlensgedrt kell felelssget vllalnod.
A kdjaidban termszetesen elfordulnak majd hibk, de ez nem jelenti azt, hogy
nem vagy felels rtk. Az a tny, hogy tkletes szaftvert rni gyakorlatilag lehetet
len, nem ment fel a tkletlensgekrt vllalt felelssg all.
Egy profinak vllalnia kell azt a terhet, hogy felelssgre vonhatjk olyan hibk
miatt, amelyeknek a felbukkansa lnyegben elkerlhetetlen. Teht, kedves profi
nak kszl bartom, az els dolog, amit gyakorolnod kell, a bocsnatkrs. A bo
csnatkrs ugyanakkor szksges, de nem elgsges. Nem teheted meg, hogy egy
szeren jra s jra elkveted ugyanazokat a hibkat. Ahogy egyre tapasztaltabb
leszel a szakmdban, gy kell a hibaszzalkadnak egyre gyorsabban kzeltenie a
nullhoz - soha nem fogja ugyan elrni, de a te felelssged, hogy a lehet legkze
lebb kerljn hozz.
AMINSGELLENRK NEM TALLHATNAK SEMMILYEN HIBT .. Amikor teht kiadsz egy
szoftvert, arra kell szmtanod, hogy a minsgellenrk nem tallnak benne sem
milyen hibt. Rendkvl szakmaiatlan dolog szndkosan gy kldeni egy kdot
minsgellenrzsre, hogy az ember tudja, hogy hibk vannak benne. s mi az, ami
rl tudhatod, hogy biztosan tartalmaz hibkat? Ht az olyan kd, amirl nem tudod
biztosan, hogy hibtlan.
Vannak, akik a minsgellenrzst (QA, Quality Assurance) hasznljk a hibk
elfogsra. Olyan kdot kldenek a minsgellenrknek, amit nem ellenriztek ala
posan. Az ellenrkre bzzk, hogy megtalljk a hibkat, s jelentsk azokat a fejlesz
tknek. Egyes cgeknl mg jutalmazzk is a minsgellenrket annak alapjn, hogy
hny hibt fedeznek fel -minl tbb hibra bukkannak, annl nagyobb jutalomban
rszeslnek.
Hogy ez szrnyen kltsges megolds, ami kros a cgre s a szoftverre nzve is?
Sebaj. Hogy taccsra vgja az temterveket, s alssa a fejlesztcsapat nbizalmt s
vllalkoz szellemt? Sebaj. Hogy egsz egyszeren lusta s feleltlen viselkeds? Kit
rdekel? Pedig olyan kdot tadni a minsgellenrknek, amirl nem tudod, hogy
mkdik-e, mlyen szakmaiatlan, mert megsrti a
"
Ne tgy krt!
"
szablyt.
A minsgellenrk nagy valsznsggel minden programban tallnak hibt,
ezrt kszlj fel arra, hogy elnzst kell krned- aztn prblj rjnni, mirt kerltk
el az ltaluk felfedezett hibk a figyelmedet, s tgy valamit annak rdekben, hogy
a dolog ne ismtldhessen meg.
PROFIZMUS 35
Minden alkalommal, amikor a minsgellenrzs - vagy ami mg rosszabb, egy
felhasznl - valamilyen hibra bukkan, meg kell lepdnd, be kell pccenned, s el
kell tklned, hogy nem hagyod, hogy mg egyszer elforduljon ilyesmi.
TUDNOD KELL, HOGY MKDIK. Honnan tudhatod, hogy a kclod mkdik? Ez kny
ny: teszteld. Teszteid jra. Teszteid keresztl-kasul, a fejtl a farkig.
Tprengsre adhat okot, hogy a kd ilyen mlysg tesztelse tl sok idt ignyel,
neked pedig temterveket s hatridket kell tartanod. Ha minden iddet tesztelssei
tltd, semmi mssal nem fogsz elkszlni. Helyes szrevtel. De mi a megolds?
A tesztek automatizlsa. rj olyan egysgteszteket, amelyeket brmikor vgrehajt
hatsz, s futtasd ezeket olyan gyakran, amilyen gyakran csak tudod.
A kd mekkora rszt kell ezekkel az nmkd egysgtesztekkel ellenrizni?
Tnyleg vlaszolnom kell erre a krdsre? Termszetesen az egszet!
100%-os tesztlefedettsg ajnlok? Nem. Nem ajnlom: me
g
kvetelem. Minden
egyes ltalad rt kdsort ktelez tesztelned. s pont.
Nem tlzs ez? Termszetesen nem. Kdot azrt rsz, hogy vgrehajtsk. Ha vi
szont elvro d, hogy vgrehajtsk, akkor tudnod kell, hogy mkdik, mrpedig errl
csak gy gyzdhetsz meg, ha teszteled a kdot.
A FITNESSE nev nylt forrs projektnek n vagyok az elsdleges fejlesztje s
vezetje. Amikor ezeket a sorokat rom, a FIT N ESSE forrsa mintegy 60 OOO kdsorbl
ll, amibl 26 OOO-et tbb mint 2000 egysgteszt tartalmaz. Az Emma mrse szerint
ez a 2000 teszt a kdnak krlbell a 90%-t fedi le.
Mirt nem magasabb a kd tesztlefedettsge? Mert az Emma nem ltja az sszes
kdsort, ami vgrehajtdik! Meggyzdsem, hogy a tnyleges tesztlefedettsg l
nyegesen magasabb. Hogy 100% lenne? Nem, azt csak megkzelteni lehet, elrni
soha.
Bizonyos kdrszeket termszetesen nem knny ellenrizni, de csak azrt, mert
gy lettek megrva. A megolds az, hogy gy pted fel a kdot, hogy knny legyen
tesztelni. Ezt pedig gy rheted el a legegyszerbben, ha elszr a teszteket rod meg,
s csak utna a kdokat, amelyeknek teljestenik kell a teszteket. Ezt a megkzeltst
hvjk tesztvezrelt fejlesztsnek (TDD, Test Driven Development). A tesztvezrelt
fejlesztsre egy ksbbi fejezetben mg rszletesebben is visszatrnk.
AUTOMATIZLT MINSGELLENRZS . A FITNESSE teljes minsgellenrzsi folya
mata az egysg- s elfogadsi tesztek vgrehajtsbl ll. Ha ezek a tesztek teljeslnek,
leszll thatom a szoftvert. gy a teljes minsgellenrzs krlbell hrom percet vesz
ignybe, s brmikor vgrehajthat.
Igaz, senki nem hal bele, ha a FIT N ESSE-be becsszik egy programhiba, s nem is
veszt senki millikat. Msrszrl azonban a FITNESSE-nek tbb ezer felhasznlja
van, a hibalistja viszont nagyon rvid.
36 1. FEJEZET
Termszetesen lteznek ltfontossg rendszerek, amelyeknl egy rvid automati
zlt teszt nem elgsges annak megllaptshoz, hogy a szaftver kszen ll-e az zembe
helyezsre. Mindazonltal fejlesztknt viszonylag gyors s megbzhat mdszerre van
szksgnk ahhoz, hogy tudjuk, hogy az ltalunk rt kd mkdik, s nem zavarja meg
a rendszer tbbi rszt. Az automatizlt teszteknek teht legalbb azt jeleznik kell,
hogy a rendszer nagy valsznsggel teljesti a minsgi kvetelmnyeket.
NE TGY KART A SZOFTVER FELPrTSBEN!
Egy igazi profi tudja, hogy ostobasg a felpts krra bepteni egy j szolgltatst,
hiszen a struktra az, ami rugalmass teszi a kdot. Ha felldozod a felptst, a jvt
ldozad fel.
Minden szaftverprojekt esetben alapkvetelmny, hogy a szaftver knnyen m
dosthat legyen. Ha rugalmatlan struktrk ltrehozsval megsrted ezt a kvetel
mnyt, akkor azt a gazdasgi modellt sod al, amelyre az egsz iparg pl.
Rviden: kpesnek kell lenned tlzott kltsgek nlkl vltoztatsokat vgrehajtani.
Sajnos nagyon sok program sllyed el a gyenge felpts mocsarban. A korbban
csak napokat ignyl feladatok egyszer csak heteket, majd hnapokat kezdenek
ignybe venni. A vezets ktsgbeesetten igyekszik behozni a lemaradst, ezrt to
vbbi programozkat vesz fel, hogy felgyorstsa a munkt. Az j fejlesztk azonban
csak mlytik az ingovnyt, mert nvelik a szerkezeti krokat, s ezzel jabb akad
lyokat grgetnek a projekt el.
A rugalmas s karbantarthat szerkezeteket tmogat szaftverfejlesztsi elvekrl
s mintkrl szm os knyvet rtak mr. 2 A profi szaftverfejlesz tk bevsik ezeket az
agyukba, s igyekeznek ennek megfelelen programozni. Van azonban egy trkk,
amit sajnos csak nagyon kevesen alkalmaznak: ha azt szeretnd, hogy a programod
rugalmas legyen, hajltgasd!
Csak azzal bizonythatod, hogy a programod knnyen mdosthat, ha kpes vagy
egyszeren mdostani. Ha pedig gy tallod, hogy a szaftver mdostsa nem olyan
knny, mint gondoltad, akkor vltaztass a felptsn, hogy legkzelebb egyszerbb
legyen vltoztatni rajta.
Hogy mikor hajts vgre ilyen egyszer mdostsokat? llandan! Minden alkalom
mal, amikor rpillantasz egy modulra, apr, pehelysly vltoztatsokkal javts a fel
ptsn. Minden alkalommal, amikor vgigolvasod a kdot, finomts a szerkezetn.
Ezt a fajta megkzeltst nha knyrtelen jratervezsnek (merciless refactoring)
is nevezik; n
"
a cserkszek szablynak
"
hvom: mindig tisztbban hagyd magad
utn a modulokat, mint ahogy talltad ket. Amikor csak a kezed kz kerl a kd,
tgy vele valami jt.
2 [PPP2001]
PROFIZMUS 37
Ez teljesen ellenttes azzal, ahogy a legtbb ember a szmtgp-programokra
gondol: a legtbben azt hiszik, hogy egy mkd szoftver folyamatos mdostgatsa
veszlyes. Tveds! Az a veszlyes, ha hagyod, hogy a szoftver vltozatlausgba der
medjen. Ha nem hajltgatod, akkor merevnek fogod tallni, amikor tnylegvltoztat
nod kell rajta.
Mirt fl a legtbb programoz attl, hogy folyamatosan vltoztasson a kdjn?
Azrt, mert attl tart, hogy tnkreteszi a mkdst. s mirt tart attl, hogy a kd
mkdskptelenn vlik? Mert nincsenek kielgt tesztjei.
Minden a tesztekre vezethet vissza. Ha van egy automatizlt tesztcsomagod,
amely tbb-kevsb teljes egszben lefedi a kdot, s amelynek a tesztjei brmikor
igny szerint lefuttathatk, akkor egyszeren nem fogsz flni a kd mdoststl.
s hogyan bizonythatod, hogy nem flsz vltoztatui a kdon? gy, hogy folyamato
san mdostod.
A profi szoftverfejlesztk annyira bznak a kdjukban s a tesztjeikben, hogy hi
hetetlenl lazn veszik a hirtelen vltoztatsokat. Ha gy tetszik, toeveznek egy osz
tlyt, vagy egy modul tnzse kzben szrevesznek egy tl hossz tagfggvnyt,
s a legnagyobb termszetessggel felszabdaljk. Egy vltutastst tbbalak objek
tumm alaktanak, vagy egy rklsi ft parancslncc vonnak ssze. Rviden, gy
kezelik a szoftvert, mint a szobrsz az anyagot: folyamatosan gyrjk s formljk.
MUNKAMORL
A karrieredrt te magad vagy felels. A munkaaddnak nem ktelessge, hogy gon
doskodjon a piackpessgedrL A munkaaddnak nem ktelessge, hogy kpezzen
vagy konferencikra kldjn tged, vagy knyveket vegyen neked. Ez mind a te dol
god. Jaj annak a szoftverfejlesztnek, aki a karrierje sorst a munkaadjra bzza!
Vannak olyan munkaadk, akik rmmel vesznek neked knyveket, illetve kl
denek tovbbkpzsre s konferencikra. Ez rendben van - szvessget tesznek neked.
De soha ne ess abba a hibba, hogy azt hiszed, mindez a munkaadd ktelessge. Ha
nem teszi meg neked ezt a szvessget, akkor magadnak kell mdot tallnod r, hogy
tovbbkpezd magad.
A munkaaddtl azt sem vrhatod el, hogy biztostsa a tanulshoz szksges idt.
Vannak, akik ezt is megteszik, st olyanok is, akik elvrjk, hogy lj a lehetsggel,
de ebben az esetben is szvessgrl van sz, amit rtkelned kell. Ilyesfajta szvess
geket nem vrhatsz el.
Az idd s az energid bizonyos rszvel tartozol a munkaaddnak. Vegyk alapul
a szabvnyos, heti 40 rs munkaidt: ezt a 40 rt a munkaadd problmira kell
fordtanod, nem a sajt gondjaidra.
Tervezz heti 60 rnyi munkval, amelybl az els 40 a munkaadd, a maradk
38 1. FEJEZET
20 pedig a tid. Ez alatt a 20 ra alatt olvass, gyakorolj s kpezd magad tovbb, hogy
elmozdtsd a karriered.
Mr hallom, ahogy tiltako zol:
"
De mi lesz a csaldommal? Az letemmel? Mindent
fel kell ldoznom a munkaadmrt?
"
Termszetesen nem az sszes szabadiddrl beszlek, csak heti plusz 20 rrl.
Az durvn hrom ra naponta. Ha ebdidben olvasol, munkba menet podeastokat
hallgatsz a metrn, s rsznsz naponta msfl rt, hogy megtanulj egy j progra
mozsi nyelvet, le is tudtad a dolgot.
Szmolj! Egy ht 168 rbl ll. Ebbl 40 a munkaadd, 20-at pedig a sajt to
vbbkpzsedre fordtasz. Marad teht 108 ra. Ha 56 rt alszol, mg mindig jut
52 ra minden msra.
Termszetesen lehet, hogy nem akarsz ilyen sokat vllalni. Semmi gond, de akkor
ne tekintsd magad profinak. A profik ugyanis sznnak idt a szakmjukra.
Az is lehet, hogy gy gondolod, munkt nem szabad hazavinni. Egyetrtek! A sa
jt 20 rdat nem szabad felldoznod a munkaaddnak - az arra van, hogy a szakmai
elmeneteleden munklkodj. A kt dolog persze nha egybeesik, s a munkahelyeden
vgzett munka a karrieredre is jtkony hatssal lehet. Ebben az esetben elfogadhat,
hogy a 20 ra egy rszt is a munkaaddnak szenteld, de ne feledd: ez a te idd, s
arra kell felhasznlnod, hogy a szakmdban rtkesebb legyl.
Lehet, hogy gy gondolod, hogy ez csak kigshez vezethet, pedig ppen ellen
kezleg, ez a kigs elkerlsnek a receptje. Feltehetleg azrt vlasztottad a prog
ramozi hivatst, mert szenvedlyesen szeretsz programozni, s ez a szenvedly
hajt, hogy profi szaftverfejleszt legyl. Az emltett 20 rban olyan dolgokat kell csi
nlnod, amelyek megerstik ezt a szenvedlyt. A sajt 20 rdnak teht rmmel kell
eZtltenie tged!
ISMERD MEG A SZAKTERLETEDI
Tudod, mi az a Nassi-Schneiderman-diagram? Ha nem, mirt nem? Tudod, mi a k
lnbsg egyMealy- s egy Moore-fle llapotgp kztt? Pedig tudnod kellene. Kpes
vagy rni egy gyorsrendezst anlkl, hogy utnanznl, hogyan kell? Tudod, mit je
lent a
"
transzformci-analzis
"
kifejezs? Vgre tudnl hajtani egy funkcionlis bon
tst adatfolyam-diagramokkal? Mit jelent a
"
vndor adat (tramp data)
"
? Hallottad
mr az
"
egyttes szlets (konaszcencia)
"
kifejezst? Mi az a Parnas-tbla?
A szakmnk legutbbi tven ve tletek, megkzeltsek, eljrsok, eszkzk s
szakkifejezsek kimerthetetlen trhza. Mennyit ismersz bellk? Ha profi szeretnl
lenni, jkora szelett ismerned kell ennek az univerzumnak, s folyamatosan bvte
ned kell a tudsodat.
Mirt fontos tudnod mindezeket a dolgokat? Hiszen a szakmnk olyan gyorsan
fejldik, hogy az tletek nagy rsze mr rgen elavult, nem igaz? Nos, felletesen
szemllve, a krdsben foglalt els llts igazsga tagadhatatlan. A szakmnk valban
PROFIZMUS 39
fejldik, s tnyleg szdt tempban. rdekes mdon azonban ez a fejlds sok szem
pontbl jelentktelen. Igaz, hogy ma mr nem kell 24 rt vrnunk egy program le
fordtsra. Igaz, hogy ma mr gigabjtokban mrhet rendszereket runk. Igaz, hogy
immr egy vilgmret hlzat vesz krl minket, amelyben az informcik azonnal
elrhetk. Msrszrl azonban ugyanazokat az if s w h i l e utastsokat rjuk, mint
50 vvel ezeltt. Sok minden megvltozott - s sok minden a rgi maradt.
A msik llts viszont nyilvnvalan hamis. Az elmlt 50 v tletei kzl valjban
nagyon kevs vesztette rvnyt. Persze vannak kztk olyanok, amelyek a partvo
naira kerltek; a
"
vzess
"
modell pldul ktsgkvl kiesett a programozk kegyei
bL Ez azonban nem azt jelenti, hogy nem is kell tudnunk rla, s nem kell ismernnk
az erssgeit s a gyengit.
Mindent egybevve, az utbbi 50 vben kemny munkval kidolgozott megold
sok tlnyom tbbsge ppen olyan rtkes ma is, mint a szletsekor - st, taln
mg rtkesebb.
Ne feledd Santayana figyelmeztetst:
"
Azok, akik nem tanulnak a mltbl, arra
tltetnek, hogy megismteljk azt
"
.
me azok a dolgok, amelyeket minden profi szoftverfejlesztnek Jelttlenl is
mernie kell:
Tervezsi mintk: Kpesnek kell lenned lerni mind a 24 mintt a
"
Ngyek
Bandjnak
"
(GOF) knyvbl, s tudnod kell hasznlni a POSA-knyvekben
(Pattern-Oriented Software Architecture, mintakzpont szoftverarchi
tektra) szerepl mintk tbbsgt.
Tervezsi elvek: Ismerned kell a SOLID-elveket, s kellkppen rtened kell
annak alkotelemeit
Mdszertanok: Tisztban kell lenned az XP, a Serum, a Lean, a Kanban,
a WaterfaU (Vzess), a Structured Analysis (Strukturlt analzis) s a Stmc
tured Design (Strukturlt tervezs) mibenltvel.
Megkzeltsek: Gyakorolnod kell a tesztvezrelt fejlesztst, az objektum
kzpont tervezst, a strukturlt programozst, a fokozatos beptst s a p
ros programozst.
Kiegszt ismeretek: Tudnod kell hasznlni az UML-t, a DFD-ket, a szerke
zeti diagramokat, a Petri-hlkat, az llapottmenet-diagramokat s -tbl
kat, a folyamatbrkat s a dntsi tblkat.
KPEZD TOVBB MAGAD FOLYAMATOSAN! Az iparg elkpeszt tem vltozsa azzal
jr, hogy a szoftverfejlesztknek folyamatosan jelents mennyisg j ismeretet kell
elsajttaniuk ahhoz, hogy lpst tudjanak tartani a vltozsokkaL Jaj annak a ter
veznek, aki abbahagyja a programozst, mert gyorsan azon kaphatja magt, hogy
elavult a tudsa. Jaj annak a programoznak, aki abbahagyja az j nyelvek tanulst,
mert az iparg gy suhanhat el mellette, mint a gyorsvonat. Jaj annak a fejlesztnek,
40 1. FEJEZET
aki nem trekszik tbb j megkzeltsek s eljrsok elsajttsra, mert a plya
trsai pillanatokon bell lehagyjk.
Fordulnl olyan orvoshoz, aki nem olvassa az orvosi szaklapokat? Elkszttetnd
az adbevallsodat egy olyan knyvelvel, aki nincs tisztban a hatlyos adtrv
nyekkel? Mirt venne ht fel brki olyan programozt, aki nem rendelkezik napra
ksz ismeretekkel?
Olvass knyveket, cikkeket, blogokat s csiripeket. Jrj konferencikra. Ltogasd
a felhasznli frumokat. Vegyl rszt nkpz csoportok munkjban. Tanulj meg
olyan dolgokat, amelyek kvl esnek a szmodra ismers terepen. Ha .NET-prog
ramoz vagy, tanuld meg a Javt. Ha Java-programoz vagy, ismerd meg a Ruby-t.
Ha C-ben programozol, tanulj Lisp-et. Ha igazn meg akarod tomztatni az agyadat,
merlj el a Prolog s a Forth rejtelmeiben.
GYAKOROLJ! ,. A profik gyakoroljk a hivatsukat. Az igazi profik kemnyen dolgoz
nak azon, hogy a fegyvereik mindig kifnyestve, bevetsre kszen lljanak. Nem
elg pusztn elvgezni a mindennapi feladataidat, s azt hinni, ezzel letudtad a gya
korlst. A mindennapi feladatok elvgzse teljests, nem gyakorls. Gyakorls az,
amikor a kpessgeidet a munkdon kvl teszed prbra, kifejezetten azrt, hogy
csiszolj rajtuk.
Mibl llhat a gyakorls egy szaf tverfejleszt szmra? A krds els pillantsra
abszurdnak tnhet, de llj meg, s gondolkozz el egy pillanatra. Gondolj bele, hogyan
vlik egy zensz a hangszere mesterv: nem elads, hanem gyakorls ltal. s ho
gyan gyakorol egy zensz? Tbbek kztt specilis gyakorlatokat vgez: sklzik, ak
kordmeneteket s futamokat ismtelget, hogy edzze az ujjait s az agyt, s hogy ne
jjjn ki a gyakorlatbL
De hogyan gyakorolhat egy szof tverfejleszt? A klnfle gyakorlatoknak egy
egsz fejezetet szentelek ebben a knyvben, ezrt itt nem megyek bele klnsebben
a rszletekbe. Az egyik technika, amelyet srn alkalmazok, az olyan egyszer gya
korlatokismtelgetse, mint a Bowling Game (tekejtk) vagy a Prime Factars
(prmtnyezk). Ezeket a gyakorlatokat hvom kat-nak. Rengeteg kata ltezik, amely
bl vlaszthatsz.
A kata rendszerint egy egyszer programozsi problma, amelyet meg kell olda
nod - pldul rsz egy fggvnyt, amely kiszmtja egy egsz szm prmtnyezit.
A kata clja nem az, hogy ki talld a problma megoldst, hiszen azzal mr tisztban
vagy, hanem az ujjak s az elme edzse.
n mindennap megcsinlok egy vagy kt katt, tbbnyire munka eltt, bemele
gtskppen. A kdot megrhatar Java, Ruby, Clojure vagy brmilyen ms nyel
ven, amelyet ppen gyakorolni szeretnk. A kata segtsgvel egy adott kszsget
igyekszem tovbbfejleszteni, pldul az ujjaimat prblom hozzszoktatni a billenty
parancsokhoz, vagy bizonyos jratervezsi megoldsokat gyakorolok.
PROFIZMUS 41
A katkra gondolj gy, mint tzperces reggeli bemelegt s tzperces esti levezet
gyakorlatokra.
DOLGozz MSOKKAL KzSEN l A tanulsra a msodik legjobb mdszer a msokkal
kzs munka. A profi szoftverfejlesztk kifejezetten trekszenek arra, hogy msokkal
kzsen programozzanak, gyakoroljanak s tervezzenek, mert gy sokat tanulhatnak
egymstl, s tbbet tudnak elvgezni gyorsabban s kevesebb hibval.
Ez nem azt jelenti, hogy minden iddet csapatmunkval kell tltened. Az nll
munka is nagyon fontos. n nagyon szeretek msokkal prban programozni, de meg
rlnk, ha nem szakadhatnk el tlk idrl idre.
TANITs!. A tanuls legeslegjobb mdja a tants. Semmi sem vsi gyorsabban s ma
radandbban az agyadba az elveket s a tnyeket, mint ha a felelssgedre bzott em
bereknek kell tadnod azokat. A tantsbl teht leginkbb a tanr profitl.
Ehhez hasonlan, nincs jobb mdszer az j emberek bevonsra, mint lelni
velk, s megmutatni nekik a fogsokat A profik szemlyes ktelessgknek rzik,
hogy oktsk a fiatalokat, s nem hagyjk, hogy akr egyetlen kezd is felgyelet nl
kl kapkodjon ssze-vissza.
ISMERD MEG A TARTOMNYOD! .. Minden profi szoftverfejlesztnek ktelessge, hogy
rtse az ltala programozott megoldstartomnyt Ha knyvelsi rendszert rsz, is
merned kell a knyvels szablyait. Ha foglalsi rendszert ksztesz egy utazsi iroda
szmra, ismerned kell az dlsi ipar mkdst. Nem kell szakrtv kikpezned
magad, az alapokkal azonban muszj tisztban lenned.
Amikor j terleten (tartomnyban) kezdesz programozni, olvass el egy-kt kny
vet a tmval kapcsolatban. Krdezd ki a megrendelt s a felhasznlkat, hogy mit
tartanak a legfontosabbnak az adott terleten. Tlts el nmi idt a szakrtkkel, s
prbld megrteni, hogy milyen elvek s rtkek vezrlik ket.
Az amatr viselkeds legrosszabb fajtja, ha egy programoz csak a feladatlerst
kvetve kdol, anlkl, hogy rten, mire van szksg az adott zleti terleten. Mu
szj, hogy eleget tudj a tartomnyrl ahhoz, hogy felismerd a feladatlersban szerepl
esetleges hibkat, s meg tudd vitatni ket.
AZONOSUU A MUNKAADDDAL, ILLETVE A MEGRENDELVELl . A munkaadd probl
mi egyben a te problmid is. rtened kell ket, s a lehet legjobb megoldsra kell
trekedned. Amikor egy rendszert fejlesztesz, a munkaadd helybe kell kpzelned
magad, s gyelned kell r, hogy az ltalad kidolgozott szolgltatsok valban kiel
gtsk a munkaadd ignyeit.
42 1. FEJEZET
A programozk egymssal knnyen tudnak azonosulni, ezrt knnyen kialakul
hat bennk egyfajta
"
mi s k
"
hozzlls a munkaadval szemben. A profik min
denron igyekeznek elkerlni ezt.
LGY ALZATOS! A programozs alkottevkenysg. Amikor kdot runk, a semmi
bl hozunk ltre valamit. Merszen rendet teremtnk a koszban. Hatalmunk tuda
tban precz rszletessggel megszabjuk egy gp viselkedst, amely mskpp felmr
hetetlen krokat tudna okozni. A programozs teht egyben a mrhetetlen nteltsg
kifejezdse.
A profik tudjk magukrl, hogy n teltek, s nem tettetnek szernysget. Egy profi
tudja a dolgt, s bszke a munkjra. Egy profi bzik a kpessgeiben, ezrt btran
s tudatosan vllalja a kockzatokat. Egy profi nem ijed meg a kihvsoktl.
Ugyanakkor egy profi azt is tudja, hogy idnknt hibzni fog, rosszul mri fel
a kockzatokat, a kpessgei nem bizonyulnak elegendnek, s a tkrbl egy ostoba,
ntelt majom vigyorog majd vissza r. Ezrt amikor egy profi a trflkozs clkereszt
jben tallja magt, az els, aki nevet magn. Msokat soha nem gnyol ki, de ha
megrdemli, elfogadja, ha t gnyoljk, ha pedig nem, csak nevet rajta. Nem szgye
nt meg senkit, ha hibzik, mert tudja, hogy lehet a kvetkez.
Egy profi tisztban van a mrhetetlen nteltsgvel, s tudja, hogy vgl elnyeri
mlt bntetst. Amikor pedig a sors lesjt r, a legjobb, amit tehet, hogy megfo
gadja Howard tancst, s nevet.
IRODALOMJEGYZK
[PPP2001]: Robert C. Martin: Principles, Patterns, and Practices of Agile Software
Development. Upper Saddle River, NJ. Prentice Hall, 2002.
2. FEJEZET
NEMET MONDANI
"
Tedd vagy ne tedd - de ne prbld.
"
- Yoda
A 70-es vek elejn n s kt tizenkilenc ves bartom egy vals idej szmlz
rendszert ksztettnk a fuvarosok szakszervezetnek a chicagi ASC cgnL Ha errl
olyan nevek ugranak be az Olvasnak, mint Jimmy Hoff, nem tved: a fuvaro
zkkali971-ben jobb volt nem sszeakasztani a bajszot.
NEMET MONDANI 45
A rendszernknek egy adott napon kellett mkdsbe lpnie. A hatrid betart
sn rengetegpnz mlt, ezrt a csapatunk 60, 70, st 80 rkat dolgozott hetente, hogy
tartsa az temtervet.
Egy httel a hatrid eltt vgre sikerlt teljes egszben sszeraknunk a rend
szert, de mg sok problmt el kellett hrtanunk, gyhogy megszllottan haladtunk
vgig a hibalistn. Enni s aludni sem igen volt idnk, nemhogy gondolkodni.
Frank, az ASC vezetje, a lgier nyugalmazott ezredese volt - olyan igazi ordto
zs, parancsolgats tpus. Amit mondott, annak gy kellett lennie, klnben le is t,
fel is t (fleg le - 3000 mterrl, ejterny nlkl). Mi, tizenkilenc ves klykk,
szinte a szembe sem mertnk nzni.
Frank azt mondta, hogy az emltett idpontra kszen kell lenni. Ennyi. Amikor
eljn a nap, kszen lesznk. s pont. Vitnak, ellenvetsnek helye nincs.
A kzvetlen fnkm, Bill, rendes fick volt. Mr vek ta dolgozott egytt Frank
kel, gyhogy tudta, meddig lehet elmenni vele, s mi az, ami kbe van vsve. is
megerstette a hatridt, s azt mondta, ha trik, ha szakad, a rendszert zembe fog
juk lltani az adott napon.
gyhogy amikor a nap eljtt, a rendszert zembe is lltottuk Katasztroflis ered
mnnyel.
A fuvarosok chicagi kzpontjt egy tucat 300 baudos, flduplex terminl kttte
ssze a klvrosban, harminc mrfldre szakra tallhat gpnkkeL Krlbell
30 percenknt mindegyik terminl lefagyott. A problma nem volt ismeretlen elt
tnk, de nem madeHeztk azt a forgalmat, amit a szakszervezet adatrgzt munka
trsai hirtelen a rendszernkre zdtottak
A helyzetet tovbb rontotta, hogy a jelentseket nyomtat ASR35 telexgpek, ame
lyek 100 baudos telefonvonalakon keresztl szintn sszekttetsben lltak a rend
szernkkel, ugyancsak lefagytak nyomtats kzben.
A lefagyst jraindtssal lehetett megoldani, vagyis mindenkit meg kellett krni,
akinek a terminlja mg mkdtt, hogy fejezze be, amit ppen csinl, aztn lljon
le a munkval. Amikor mindenki lellt, felhvtak minket, hogy indtsuk jra a rend
szert. Azok, akiknek lefagyott a terminl ja, ellrl kellett, hogy kezdjk a munkt - s
ez rnknt akr tbbszr is elfordult.
Fl napi szenveds utn a fuvarosok irodavezetje arra utastott minket, hogy lltsuk
le a rendszert, s ne is indtsuk be jra, amg rendesen nem mkdik. Az addig elvgzett
munkt elvesztettk, s az adatokat jra be kellett vinnik a rgi rendszerkn.
Frank vltzst az egsz pletben hallani lehetett, s nem tnt gy, hogy egy
hamar vge szakadna. Aztn Bill s a rendszerelemznk, Jalil, odajttek hozznk, s
megkrdeztk, hogy mennyi id alatt tudjuk stabill tenni a rendszert. Azt feleltem,
hogy
"
ngy ht
"
.
Az arcukra rmlet lt ki, amit aztn eltkltsg vltott fel:
"
Nem,
"
- feleltk -
"
pntekre mkdnie kell.
"
46 2. FEJEZET
"
Nzztek, alig tudtuk gy-ahogy sszekalaplni a rendszert mlt htre
"
-ellen
keztem. -
"
Helyre kell tennnk a dolgokat, hogy el tudjuk hrtani a hibt. Tnyleg
szksgnk van ngy htre.
"
Bill s Jalil azonban hajthatatlan maradt:
"
Nem, pntekre muszj meglennie. Leg
albb prbljtok meg!
"
Ekkor a csapatvezetnk megszlalt:
"
Ok, megprbljuk.
"
A pntek j vlaszts volt, mert a ht vgn lnyegesen alacsonyabb volt a terhels,
gy tbb hibt tudtunk felderteni s kijavtani, mieltt elrkezett volna a htf. A kr
tyavr ettl fggetlenl kis hjn jra sszedlt. A lefagys naponta egyszer-ktszer
tovbbra is jelentkezett, s ms problmk is akadtak. Nhny ht alatt azonban fo
kozatosan eljuttattuk a rendszert egy olyan szintre, hogy a panaszok elcsitultak, s
gy tnt, az let visszatrhet a normlis kerkvgsba.
Aztn, ahogy a bevezetben emltettem, mindnyjan felmondtunk, a cg pedig
igazi vszhelyzetben tallta magt. Egy egsz csapat j programozt kellett felven
nik, hogy megbirkzzanak az gyfl ltal jelzett hatalmas mennyisg problmval.
Kit tehetnk felelss a fiaskrt? Az vilgos, hogy Frank stlusa komoly szerepet
jtszott benne, hiszen azltal, hogy megflemltette a munkatrsakat, megneheztette,
hogy megmondjk neki az igazsgot. Termszetesen Bill s Jalil is hatrozottabban
lphetett volna fel Frankkel szemben, s az is tny, hogy a csapatunknak nem lett
volna szabad belemennie a pnteki hatridbe-nekem pedig ki kellett volna tarta
nom a
"
nem
"
mellett, ahelyett, hogy bell ok a sorba.
A profik megmondjk az igazsgot a feletteseiknek A profik nem flnek nemet
mondani a fnkeiknek
De hogyan mondasz nemet a fnknek? Hiszen a fnkd! Elvileg azt kell tenned,
ami mond, nem?
Nem. Ha profi vagy, akkor nem.
Egy rabszolga nem mondhat nemet. Egy munks habozhat nemet mondani. Egy
profitl azonban elvrjk, hogy nemet mondjon. Egy j vezet valjban olyan em
berekre vgyik, akiknek van mersze nemet mondani, mert csak gy lehet brmit is
tisztessgesen elvgezni.
ELLENTTES SZEREPEK
E ktet egyik kritikusnak nagyon nem tetszett ez a fejezet. Azt mondta, kis hjn
letette miatta a knyvet, ugyanis mindeddig olyan csapatokat ptett fel, amelyek
kztt nincs ellensgeskeds: a csapatok harmniban, sszetkzs nlkl dolgoz
nak egytt.
rlk a szerencsjnek, de nem vagyok biztos benne, hogy a csapatai valban
annyira mentesek a srldsoktl, mint ahogy felttelezi. Ha mgis, akkor afell
NEMET MONDANI 47
vannak ktsgeim, hogy igazn hatkonyan mkdnek-e. A sajt tapasztalataim
ugyanis azt mutatjk, hogy nehz helyzetben az ellenttes szerepek tkzsbl sz
letnek a legjobb dntsek.
A menedzsereknek feladatuk van, s a legtbbjk elg jl tudja, hogyan vgezheti
el azt a legjobban. A munkjukhoz hozztartozik, hogy a cljukat tzn-vzen t ke
resztlvigyk.
Ugyangy a programozk dolga is adott, s a legtbbjk rt ahhoz, amit csinl. Egy
profi programoz szintn vehemensen vdelmezi a sajt cljait, s igyekszik azokat
mindenron keresztlvinni.
Amikor a fnkd azt mondja, hogy a bejelentkez oldalnak holnapra kszen kell
lennie, akkor a sajt feladatt igyekszik teljesteni, vagyis csak a munkjt vgzi. Ha
te tudod, hogy msnapra kptelensg elkszlni az emltett oldallal, akkor nem
mondhatod azt, hogy
"
Ok, megprblom.
"
- a sajt feladatodnak csak akkor tudsz
eleget tenni, ha kerek-perec kzld, hogy a krst lehetetlen teljesteni.
De ht azt kell tenned, amire a fnk utast! Vagy nem? Nem: a fnkd arra sz
mt, hogy te ugyanolyan eltklten vded a sajt llspontoda t, mint ahogy az vt.
Csak ez vezethet el a lehet legjobb megoldshoz.
A lehet legjobb megolds az a kzs cl, amelyen te s a fnkd osztoztok. A ki-
hvst ennek a kzs clnak a meghatrozsa jelenti, amihez ltalban alkudozni kell.
Az alkudozs nha szvlyes lgkrben folyik:
Mike:
"
Paula, holnapra szksgem lenne a bejelentkez oldalra.
"
Paula:
"
! Ilyen hamar? Na j, megprblak elkszlni vele.
"
Mike:
"
Nagyszer, ksznm!
"
Bartsgos kis beszlgets: mindkt fl kerli a konfliktust, s mosolyogva tvozik.
Csods.
Csakhogy egyik fl sem viselkedik profiknt. Paula nagyon jl tudja, hogy a beje
lentkez oldalt nem tudja egy nap alatt elkszteni, ezrt egyszeren hazudik. Persze
nem biztos, hogy ennek tudatban van -lehet, hogy azt hiszi, hogy tnyleg megfogja
prblni, s taln halvnyan remnykedik is, hogy elkszlhet a munkval. Ez azon
ban nem vltoztat azon a tnyen, hogy nem mond igazat.
Msrszrl Mike
"
igen
"
-nekfogadja el a
"
megprblom
"
-ot, ami egyszeren osto
basg. Tudnia kne, hogy Paula csak a konfliktust igyekszik elkerlni, ezrt egyrtel
mbb vlaszt kellene kicsikarnia:
"
Nem tnsz valami hatrozottnak. Biztos vagy
benne, hogy meg tudod csinlni holnapra?
"
me egy msik szvlyes beszlgets:
48
Mike:
"
Paula, holnapra szksgem lenne a bejelentkez oldalra.
"
Paula:
"
! Bocs, Mike, de nekem ennl tbb id kell.
"
Mike:
"
Szerinted mikorra lehet ksz?
"
Paula:
"
Kt ht mlva megfelel?
"
2. FEJEZET
Mike: ( felfirkant valamit a hatridnaplj ba)
"
Ok, ksznm.
"
Brmilyen bartsgos is ez a beszlgets, ugyanolyan szrnyen flrevezet, s teljes
sggel amatr, mert egyik fl sem a lehet legjobb megoldst keresi. Paulnak pldul
nem krdeznie kellene, hogy megfelel-e kt ht mlva, hanem hatrozottan kijelen
tenie:
"
Mike, kt ktbe fog telni.
"
Msrszrl Mike egyszeren, vita nlkl elfogadja
a dtumot, mintha a sajt elvrsai nem szmtannak. Vajon mit fog tenni ez utn?
Simn jelenti a fnknek, hogy a bemutatvltozat tadst el kell halasztani, mert
Paula nem lesz ksz? Ez a fajta passzv-aggresszv viselkeds morlisan ersen kifo
gsolhat.
A felek a fenti kt eset egyikben sem azt a megoldst- a kzs clt, a lehet legjobb
megoldst - kerestk, ami mindkettejk szmra elfogadhat. Prbljuk meg gy:
Mike:
"
Paula, holnapra szksgem lenne a bejelentkez oldalra.
"
Paula:
"
Lehetetlen, Mike, ez kt hetes munka!
"
Mike:
"
Kt ht? A tervezk hrom napra becsltk, s mr tdik napja dolgozol
rajta!
"
Paula:
"
A tervezk tvedtek, Mike. Mg az eltt ksztettk el a becslseket, hogy
a termkfejlesztsi osztly megkapta volna a kvetelmnyeket. Legalbb
tz napot kell mg dolgoznom rajta. Nem lttad a frisstett becslsemet
a wikin?
"
Mike: (a tekintete zord, s remeg a dhtl)
"
Paula, ez elfogadhatatlan! A megren
del holnap jn a demrt, s mkdkpes bejelentkez oldalt kell mu
tatnom nekik!
"
Paula:
"
A bejelentkez oldalnak melyik rsze kell, hogy mkdjn holnapra?
"
Mike:
"
Az e
g
sznek! Be kell tudnom jelentkezni!
"
Paula:
"
Mike, egy mkd modellt most is adhatok a bejelentkez oldalrl, ame
lyen keresztl bejelentkezhetsz. Valjban nem ellenrzi a felhasznlnevet
s a jelszt, s nem kldi el emailben az elfelejtett jelszavakat sem. Nincs
ott a tetejn a
"
Times-squaring
"
cges hrsv, s a sggomb, valamint az
elugr sgszvegek nem mkdnek. Nem trol stit, hogy legkzelebb
emlkezzen rd, s semmilyen korltozst nem rvnyest. De a bejelent
kezst lehetv teszi. Elg lesz?
"
Mike:
"
Kpes leszek bejelentkezni?
"
Paula:
"
Igen, kpes leszel.
"
Mike:
"
Ez nagyszer, Paula, letet mentettl!
"
(elmenben a levegbe csap az k
lvel, s azt mondja:
"
Igen!
"
)
Mike s Paula most elrte a lehet legjobb megoldst, mghozz azzal, hogy nemet
mondtak egymsnak, majd megkerestk azt, ami r indkettejk szmra elfogadhat.
Profiknt viselkedtek. A beszlgets kiss ellensges hangnemben zajlott, s voltak
NEMET MONDANI 49
knyelmetlen pillanatai, de ez termszetes, ha kt ember hatrozottan igyekszik r
vnyesteni az rdekeit, s azok nincsenek tkletes sszhangban.
Ml A HELYZET A
"
MIRT?
"
-TEL?
Lehet, hogy most azt gondolod, hogy Paulnak arra is magyarzatot kellett volna
adnia, hogy mirt tart ilyen sokig a bejelentkez oldal elksztse. Tapasztalataim
szerint azonban a mirt sokkal kevsb fontos, mint maga a tny, mrpedig a tny az,
hogy a bejelentkez oldal elksztse kt hetet ignyel. Az, hogy mirt kell r kt ht,
mellkes krlmny.
Ettl fggetlenl az okok ismerete segthet Mike-nak, hogy jobban megrtse, s
gy elfogadja a tnyeket. Rendben. Amennyiben Mike rendelkezik a kell szakmai
ismeretekkel, s megrt termszet, egy ilyen magyarzat hasznos is lehet. Msrsz
rl azonban nem biztos, hogy Mike osztja majd Paula vlemnyt. Lehet, hogy arra
a kvetkeztetsre jut, hogy Paula rosszul csinlja az egszet, s kijelenti, hogy nincs
szksg az sszes tesztre, a fellvizsglatokra vagy a 12. lpsre. Ha tl sok rszletet
rulsz el, az "mikromenedzselsre
"
csbt.
AMIKOR NAGY A TT
A legfontosabb akkor nemet mondani, amikor a legnagyobb a tt. Minl tbb forog
kockn, annl rtkesebb a "Nem
"
.
Ez magtl rtetd kellene, hogy legyen. Amikor a kudarcrt olyan nagy rat kell
fizetni, hogy a cg elbukhat rajta, szilrd eltkltsggel a lehet legpontosabb inform
cikat kell tadnod a feletteseidnek Ez pedig gyakran egy hatrozott "Nem
"
-et jelent:
50
Don (Fejlesztsi igazgat): "Az Aranyld projekt befejezst jelenleg mtl tizen
kt htre becsljk, plusz-mnusz t ht bizonytalansggal.
"
Charles (Vezrigazgat): (Tizent msodpercig nmn l, mikzben elvrsdik
a feje.) "Azt akarod mondani, hogy lehet, hogy mg tizenht hetet kell vr
nunk az tadsra?
"
Don: "Igen, lehetsges.
"
Charles: (Felll, Don egy pillanattal ksbb kveti a pldjt.) "A fenbe, Don!
Hrom hete kszen kellene lennie! A Galitron mindennap felhv, hogy hol
van mr az tkozott rendszer k, s n nem fogom azt mondani nekik, hogy
vrjanak mg ngy hnapot! Hajtsatok jobban!
"
Don: "Chuck, n hrm hnappal ezeltt, a kirgsok utn megmondtam, hogy
mg ngy hnap kell. Az isten szerelmre, Chuck, az embereim tdt ki
vgtad! Megmondtad a Galitronnak, hogy csszni fogunk?
"
Charles: "Tudod jl, hogy nem. Ne engedhetjk meg magunknak, hogy ez az z
let elsszon, Don. (Charles elhallgat, az arca falfehrre vlt.) A Galitron
2. FEJEZET
nlkl meg vagyunk lve, s ezt te is tudod. Flek, hogy ez a csszs . . . Mit
mondok az igazgattancsnak? (Lassan visszal a helyre, s prbl nem
sszeomlani.) Don, muszj belehznotok."
Don:
"
Semmit nem tehetek, Chuck. Ezt mr meg beszltk. A Galitron nem enged
a kvetelmnyekbl, s nem fogadnak el flksz kiadsokat. Csak egyszer
akarnak telepteni, hogy utna elfelejthessk az egszet. Teljesen ksz rend
szert viszont nem tudok gyorsabban elvarzsolni. Egyszeren nem me gy."
Charles:
"
A francba. Gondolom, nem vltoztat semmin, ha azt mondom, hogy az
llsod mlik rajta."
Don:
"
Ha kirgsz, akkor sem tudok rvidebb hatridt mondani, Charles."
Charles:
"
Akkor egyelre vgeztnk. Menj vissza a csapathoz, s haladjatok to
vbb a projekttel. Lesz nhny slyos telefonhvsom."
Termszetesen Charlesnak mr hrom hnappal korbban, amikor megtudta az j
becslst, kzlnie kellett vona a Galitronnal, hogy nem megy a dolog, de legalbb
most helyesen cselekszik (felhvja ket, illetve az igazgattancsot). Ha viszont Don
nem llt volna ki a vlemnye mellett, taln mg tovbb halogatta volna az elkerl
hetetlent.
"CSAPATJTKOSNAK" LENNI
Mindnyjan hallottuk mr ezerszer, hogy milyen fontos a
"
csapatjtk". Csapatjt
kosnak lenni annyit tesz, hogy a lehet legjobban vgzed a sajt feladatod, s kisegted
a trsaidat, ha elakadnak. Egy csapatjtkos srn kicserli a vlemnyt a tbbiek
kel, az egyik szemt a trsain tartja, s a lehet legmagasabb sznvonalon vgzi a sajt
munkjt.
Egy csapatjtkos ugyanakkor nem mond mindenre
"
Igen"-t. Vegyk pldul az
albbi helyzetet:
Paula:
"
Mike, megvannak a becslsek, amiket krtl. A csapat egyetrt abban,
hogy krlbell nyolc ht mlva tudunk egy demt adni neked, plusz-ro
nusz egy ht."
Mike:
"
Paula, a demt br betemeztk mtl hat htre."
Paula:
"
Anlkl, hogy elbb megkrdeztetek volna minket? Ugyan, Mike, ezt
nem lcslheted rnk!"
Mike:
"
Ez mr el van dntve."
Paula (shajt):
"
Ok, nzd, visszamegyek a csapathoz, s kidertem, hogy mit tu
dunk biztosan leszlltani hat ht alatt, de az biztos, hogy az egsz rend
szert nem. Bizonyos szolgltatsok hinyozni fognak, s az adatbetlts
sem lesz teljes."
NEMET MONDANI 51
Mike:
"
Paula, az gyfl teljes demt akar ltni.
"
Paula:
"
Mike, nem fog.
"
Mike:
"
A francba. Ok, dolgozztok ki a legjobb tervet, amit tudtok, s tjkoztass
holnap.
"
Paula:
"
Rendben, ez megoldhat.
"
Mike:
"
Nem tudtok kitallni valamit, hogy mgis tartani lehessen a hatridt?
Tallhatntok pldul valami f urfangos megoldst. Legyetek kreatvak!
"
Paula:
"
Mi mindnyjan elg kreatvak vagyunk, Mike. Tisztban vagyunk a prob
lmkkal, de a megoldsra nyolc vagy kilenc ht kell, hat nem elg.
"
Mike:
"
Tlrzhatntok.
"
Paula:
"
Az csak lelasstana minket, Mike. Emlkszel, milyen galibt csinltunk
legutbb, amikor ragaszkodtl a tlrhoz?
"
Mike:
"
Igen, de annak nem muszj megismtldnie.
"
Paula:
"
Pontosan ugyanaz trtnne, Mike, hidd el. Nyolc vagy kilenc ht, nem
hat.
"
Mike:
"
J, fogtam. Vrom a legjobb terveteket, de jrjon az agyatok, hogyan le
hetne leszortani hat htre. Biztos vagyok benne, hogy kitalitok valamit.
"
Paula:
"
Nem, Mike, nem fogunk. Csinlhatunk egy tervet hat htre, de egy csom
szolgltats s adat hinyozni fog. Nem tudok mst mondani.
"
Mike:
"
Ok, Paula, de ha akartok, ti csodkra vagytok kpesek.
"
(Paula fejcsvlva el.)
Ksbb, a stratgiai rtekezleten . . .
Don:
"
Ok, Mike, amint tudod, az gyfl hat ht mlva jn a demrt, s elvrja,
hogy minden mkdjn.
"
Mike:
"
Meg is lesz. A csapatom belead apait-anyait, s kszen lesznk. Kicsit tl
rznunk kell, s kreatv megoldsokkal kell elrukkolnunk, de megcsi
nljuk!
"
Don:
"
J, hogy ilyen nagyszer csapatjtkosok vagytok!
"
Kik is az igazi csapatjtkosok ebben az esetben? Paula a csapatrt dolgozik, hiszen
amennyire csak tle telik, megprblja egyrtelmv tenni, hogy mi az, ami lehet
sges, s mi az, ami nem. Hatrozottan kill a vlemnye mellett, Mike minden
hzelgse ellenre. Ezzel szemben Mike
"
csapata
"
egyszemlyes: Mike-ot csak Mike
rdekli. Vilgos, hogy nem Paula csapatban jtszik, hiszen ppen most grt meg
valamit a nevben, amirl Paula kerek-perec kijelentette, hogy nem lehetsges. De Don
csapatt sem ersti (br ezt vitatn), hiszen egyszeren hazudik neki.
Mirt teszi ezt Mike? Azt akarja, hogy Don csapatjtkosnak lssa, s hisz benne,
hogy hzelgssei r tudja venni P ault, hogy megprb
l
on hat ht alatt vgezni. Mike
nem gonosz, csak tlsgosan bzik a rbeszl kpessgben.
52 2. FEJEZET
PRBLKOZNI
A legrosszabb dolog, amit Mike manipulatv viselkedsre vlaszu! Paula tehetne,
hogy azt mondja:
"
Ok, megprbljuk.
"
Yodnak ebben a tekintetben bizony igaza
van: prblkozni nem lehet.
Nem rtesz egyet? gy gondolod, hogy a prblkozs hasznos dolog? Hogy Ko
lumbusz sem fedezte volna fel Amerikt, ha nem prblkozik?
A prblkozni sznak azonban tbb jelentse is van. n erre a jelentsre hvnm
fel a figyelmet:
"
igyekszik, tovbbi erfesztseket tesz
"
. Milyen tovbbi erfesztseket
tehetne Paula, hogy a dem idben ksz legyen? Ha ltezik brmilyen tovbbi er
feszts, amit Paula s csapata megtehetne, akkor eddig nem tettek meg mindent.
Bizonyra tartalkoltak valamit.1
A prblkozsra tett gret annak beismerse, hogy eddig nem tettl meg minden
erfesztst, hogy visszatartottl valamit. A prblkozsra tett gret annak beisme
rse, hogy a cl tovbbi erfesztssel elrhet, st, ktelezettsgvllals erre a tovbbi
erfesztsre. Ha teht gretet teszel, hogy megprblod, valjban ktelezettsget
vllalsz a sikerre. Ezutn minden teher a te vlladra fog nehezedni: ha a
"
prblko
zs
"
nem jr a kvnt eredmnnyel, akkor kudarcot vallottL
Vannak mg visszatartott energiatartalkaid? Ha mozgostod ezeket, kpes leszel el
rni a clt? Vagy a prblkozsra tett grettel egyszeren megkockztatod a kudarcot?
A prblkozsra tett grettel azt gred meg, hogy vltoztatsz a terveiden-vgtre
is, a tervek nem voltak kielgtek. A prblkozsra tett grettel azt mondod, hogy
van egy j terved. De mi az az j terv? Mi az, amit mskpp fogsz csinlni? Min vl
toztatsz most, hogy
"
megprblod
"
?
Ha nincs j terved, ha nem vltoztatsz a viselkedseden, ha mindent pontosan gy
csinlsz, ahogy az eltt, hogy meggrted, hogy
"
megprblod
"
, akkor mit jelent
a prblkozs?
Ha nem tartalkoltl semmit, ha nincs j terved, ha nem fogsz vltoztatni a visel
kedseden, s tovbbra is fenntartod az eredeti becslsedet, akkor a prblkozsra
tett greted egyltaln nem szinte. Ms szval, hazudsz. Valsznleg azrt, hogy
presztzsvesztesg nlkl megszd a dolgot, s elkerld az sszetkzst.
Paula hozzllsa sokkal jobb. Mindig
"
nyolc vagy kilenc hetet
"
emleget, vagyis
folyamatosan emlkezteti Mike-ot, hogy a csapata becslse bizonytalan. Paula ki
hangslyozza ezt a bizonytalansgot, s egyszer sem htrl meg. Nem cloz olyas
mire, hogy lehetne tovbbi erfesztseket tenni, j terveket kidolgozni, vagy mskpp
csinlni valamit, hogy a bizonytalansg cskkenjen.
Hrom httel ksbb ...
l Mint Foghorn Leghorn (Bbita r a Bolondos dallamokbl):
"
Mindig megszmozam a tollaimat,
vszhelyzet esetre.
"
NEMET MONDANI 53
Mike: "Paula, a dem hrom ht mlva esedkes, s a megrendel ltni szeretn
a fjlfeltltst mkds kzben.
"
Paula: "Mike, az nincs rajta azon a listn, amelyikben megegyeztnk.
"
Mike: "Tudom, de ragaszkodnak hozz.
"
Paula: "J, akkor vagy az egyfikos bejelentkezst, vagy a biztonsgi mentst ki
kell hagynunk a dem bl.
"
Mike: "Sz sem lehet rla! Azokra is szmtanak!
"
Paula: "Vagyis minden szolgltatsrl azt hiszik, hogy mkdni fog? Ezt akarod
mondani? n egyrtelmen kzltem, hogy nem fog menni.
"
Mike: "Sajnlom, Paula, de az gyfl ebbl nem enged. Mindent ltni akarnak.
"
Paula: "Nem fog menni, Mike. Egyszeren kptelensg.
"
Mike: "Ugyan mr, Paula, legalbb prbljtok meg!"
Paula: "Mike, lebegni is prblhatnk, megprblhatnm aranny vltoztatui az
lmot, vagy megprblhatnm tszni az Atlanti-cent. Gondolod, hogy
sikerlne?
"
Mike: "Ne ess tlzsokba. Nem lehetetlent krek.
"
Paula: "De igen, Mike, azt krsz.
"
(Mike nelglten elmosolyodik, biccent, s elstl.)
Mike: ( tvozban) "Bzom benned, Paula. Tudom, hogy nem hagysz cserben.
"
Paula: (Mike htnak) "Te lmodozol, Mike. Ennek nem lesz j vge.
"
(Mike csak integet, anlkl, hogy htranzne.)
PASSZfV-AGGRESSZfV VISELKEDS
Paulnak rdekes dntst kell meghoznia. Gyantja, hogy Mike nem rulta el Donnak
a csapat becslst. Megtehetn, hogy egyszeren hagyja, hogy Mike a vesztbe rohan
jon. Gondoskodhatna rla, hogy minden rsban rgztve legyen, hogy amikor becsap
a villm, megmutathassa, mit mondott Mike-nak, s mikor. Ez a passzv-aggresszv
viselkeds. Hagyhatn, hogy Mike ngyilkossgot kvessen el.
Vagy megprblhatn megelzni a katasztrft, s beszlhetne kzvetlenl Don
nal. Ez persze kockzatos, de igazbl errl szl a csapatjtk. Amikor egy elszabadult
tehervonat rohan a csapat fel, s te vagy az egyetlen, aki ltja, csendesen lelphetsz
a snekrl, s vgignzheted, ahogy a vonat elcsapja a tbbieket, vagy elkilthatod
magad, hogy "Vonat! Le a snekrl, gyorsan!
"
.
Kt nappal ksbb ...
54
Paula: "Mike, kzlted Donnal a becslseinket? Elmorta az gyflnek, hogy
a demban nem fog mkdni a fjlfeltlts?
"
Mike: "Paula, azt grted, hogy megoldod, hogy mkdjn.
"
Paula: "Nem, Mike, nem grtem ilyet. ppen hogy azt mondtam, hogy nem le
hetsges. Itt egy pldny az emlkeztetbl, amit a beszlgetsnk utn
kldtem neked.
"
2. FEJEZET
Mike: "J, j, de abban maradtunk, hogy megprblod, nem?
"
Paula: "Ne kezdjk jra, Mike. lom s arany, emlkszel?
"
Mike: (felshajt) "Nzd, Paula, muszj megcsinlni. Egyszeren muszj. Krlek,
tgy meg mindent, amit csak tudsz, brmibe is kerl, de ezt meg kell olda
nod nekem.
"
Paula: "Tvedsz, Mike. Nem kell megoldanom neked. Amit tennem kell- ha te
nem teszed meg -, az az, hogy tjkoztatom Dont a helyzetrl.
"
Mike: "Engem megkerlve? Nem tennl ilyet.
"
Paula: "Nem is flik a fogam hozz, de ha knyszertesz r, megteszem.
"
Mike: ", Paula ...
"
Paula: "Nzd, Mike, a demhoz nem fogunk elkszlni minden szolgltatssal.
Ezt j lenne, ha felfognd vgre. Ne prblj arrl gyzkdni, hogy dolgoz
zunk kemnyebben. Fejezd be az nltatst, hogy n majd elhzok egy
nyulat a kalapbL Nzz szembe a tnnyel, hogy szlnod kell Donnak, mg
hozz ma."
Mike: Celkerekedik a szeme) "Ma?
"
Paula: "Igen, Mike, mg ma. Holnap ugyanis meg akarom beszlni veled s Don
nal, hogy milyen szolgltatsok legyenek benne a demban. Ha erre nem
kerl sor holnap, akkor knytelen leszek egyenesen Donhoz fordulni. Itt
egy pldny a feljegyzsbl, amiben lertam a helyzetet.
"
Mike: "Csak a sajt htad akarod vdeni!
"
Paula: "Mike, n mindkettnk htt prblom vdeni. El tudod kpzelni, micsoda
blama lesz, ha az gyfl gy jn ide, hogy azt hiszi, teljes bemutatt kap, s
nem kapja meg, amit akar?''
Mi lesz a sorsa vgl Paulnak s Mike-nak? Ezt az Olvas fantzijra bzom. A l
nyeg az, hogy Paula profihoz mlt mdon viselkedik. Mindig nemet mond, amikor
kell, s a megfelel mdon mondja. Nemet mond, amikor a becslse mdostsra
krik, nemet mond, amikor hzelegnek s knyrgnek neki, s ami a legfontosabb,
nemet mond Mike nltatsra s ttlensgre. Paula csapatjtkosknt viselkedik:
Mike-nak segtsgre van szksge, s Paula minden tle telhett megtesz, hogy segt
sen neki.
AZ
"
IGEN
"
RA
A legtbbszr igent akarunk mondani. Egy egszsges csapat valjban mindig arra
trekszik, hogy mdot talljon arra, hogy igent mondhasson. Egy jl mkd csapat
fejleszti s vezeti addig trgyalnak egymssal, amg meg nem tudnak egyezni egy
mindenki szmra elfogadhat cselekvsi tervben.
NEMET MONDANI 55
Ahogy azonban lttuk, nha csak gy lehet eljutni a megelel igenhez, ha nem
flnk nemet mondani.
Kvetkezzen most egy tanulsgos trtnet, amelyet John Blanco tett kzz a blogj
ban.2 (Itt a szerz szves engedlyvel szerepel.) Mikzben olvasod, tedd fel magadnak
a krdst, hogy a szerznek mikor s hogyan kellett volna nemet mondania.
NEM LTEZIK J KD?
Tizenvesen gy dntesz, hogy szaftverfejleszt szeretnl lenni. A kzpiskolban
megtanulod, hogyan rhatsz szaftvert az objektumkzpontsg elvei mentn. rett
sgi utn fiskolra kerlsz, s a tanultakat olyan terleteken al kalmazod, mint
a mestersges intelligencia vagy a trgrafika.
Amikor aztn elhelyezkedsz hivatsos programozknt, vg nlkl hajszalod azt
a clt, hogy kereskedelmi minsg, fenntarthat, "tkletes
"
kdot rj, ami killja az
id prbjt.
Kereskedelmi minsg. Aha. Nagyon vicces.
n szerenessnek tartom magam, mert imdom a programtervezsi mintkat, s
szvesen bjom a tkletes kdols elmletrl szl knyveket. Brmikor kpes va- .
gyak egy rn keresztl vitatkozni arrl, hogy mirt rossz az az rklsi hierarchia,
amelyet a trsam vlasztott, akivel extrm programozi prt alkotunk, vagy hogy sok '
esetben mirt jobb a HAS-A, mint az IS-A. Az utbbi idben azonban valami szget '
ttt a fejembe, s nem hagy nyugodni. ..
Amodern szaftverfejlesztsben tnyleg lehetetlen j kdot alkotni?
A TIPIKUS PROJEKTKifRAS
. Teljes s rszids szerzdses programfejlesztknt azzal tltm a napjaimat (s az
jszakimat), hogy mobilalkalmazsokat fejlesztek klnfle gyfeleknek. Az vek .
sorn r kellett jnnm, hogy az gyfl kvnsgai grdtik a legnagyobb akadlyt az
el, hogy olyan minsg programokat rjak, amilyeneket szeretnk.
Mieltt azonban belevgnk a trtnelembe, hadd szgezzem le, hogy nem arrl .
van sz, hogy nem prblok tkletessgre trekedni. Szeretem a tiszta kdot, s nem

ismerek senkit, aki olyan elszntan kutatn a tkletes szoftverfelptst, mint n. '
A gyakorlatban azonban nem mkdik a dolog, s nem azrt, amirt gondolod.
Elmeslek egy trtnetet.
Tavaly v vge fel egy meglehetsen jl ismert cg kzztett egy alkalmazs meg
rsra szl plyzati felhvst. Egy hatalmas ruhzlncrl van sz, de a nvtelen
sg kedvrt hvjuk ket Gorilla Mart-nak. Az iPhone-on szerettek volna megjelenni,
s azt akartk, hogy az alkalmazsuk ksz legyen november utols hetre (a "fekete :
2 http://raptureinvenice.com/?p=63
56 2. FEJEZET
pntekre
"
). Hogy mi volt a gond ezzel? Az, hogy a kirs november elsejn jelent meg,
vagyis kevesebb, mint ngy ht alatt kellett elkszlni az alkalmazssal - mikzben
az Apple-nek mg ma is kt htbe telik, amg jvhagy egy iPhone-programot. Teht
mennyi id is llt rendelkezsre az alkalmazs megrsra? KT HT!
A vllalkozsunk gy dnttt, van kt szabad hete az emltett alkalmazs elksz
tsre. s sajnos meg is nyertk a plyzatot (Az zleti letben az szm t, hogy meny
nyire jelents az gyfl.) Nem volt kibv.
"De semmi para"- mondja Gorilla Mart igazgat No.l. -
"
Az alkalmazs egy-
szer: csak meg kell mutatnia nhny termket a felhasznlnak a katalgusunkbl,
s lehetv kell tennie az zletek cmnek kikeresst. A webhelynkn ez mr m
kdik. Az ott hasznlt grafikkat is tadjuk. Taln csak - hogy is mondjk? -be kell
drtozni a cuccot!"
"Csak pr kuponrl van sz, amit a felhasznl bemutathat a pnztrnl" -csatla
kozik Gorilla Mart igazgat No.2. -
"
Az alkalmazst aztn eldobjuk. Csak legynk tl
rajta; a msodik szakaszban majd felptnk valami nagyobbat s jobbat az alapoktl.
"
Belevgtunk A tbb vnyi tapasztalat ellenre, miszerint minden szolgltatst,
amit az gyfl kr, bonyolultabb megrni, mint elmagyarzni, hittnk benne, hogy
ezttal tnyleg vgznk majd kt ht alatt. Igen, megcsinlj uk! Most minden mskpp
lesz! Csak pr grafika s egy szolgltats, amit fel kell hvni, hogy lekrdezzk az z
letek cmt - XML! Gyerekjtk! Kpesek vagyunk r! gek a tettvgytl, gyernk!
Elg volt egy nap, hogy ismt szembesljnk a valsggal.
n: "Megkaphatnm az zletkeres webszolgltats elrshez szksges infor-
mcikat?"
gyfl:
"
Mi az hogy webszolgltats?"
n:" ......
"
Pontosan az volt a helyzet, amire gondoltam. Az zletkeres szolgltats, amit
pontosan ott talltam, ahol lennie kellett, a weboldal jobb fels sarkban, nem web
szolgltats volt. Az API-val ssze nem ill Java-kd lltotta el, radsul a Gorilla
Mart egyik stratgiai partnere szolgltatta.
Egy stt "harmadik fl".
Ha gyfelekrl van sz, a
"
harmadik fl" olyan, mint Angelina J olie. Hiba az g
ret, hogy felvillanyoz beszlgetsben lesz rszed egy kellemes vacsora mellett, s
aztn taln ssze is jttk ... bocs, de nem fog sszejnni. Legfeljebb lmodozhatsz
rla, mikzben magadat szrakoztatod.
Az emltett esetben az egyetlen dolog, amit sikerlt kicsikarnom a Gorilla Mart
bl, az zleteik aktulis listjnak pillanatfelvtele volt egy Excel-fjlban. Az zletke
res kdot nekem kellett megrnom, a semmibl.
Az igazi csaps a nap vgre rkezett: azt akartk, hogy a termk- s kuponadatok
fenn legyenek a hlzatukon is, hogy hetente vltoztathassanak rajtuk. Ennyit a be
drtozsrl! gy mr nem csak iPhone-alkalmazst kellett megrnom kt ht alatt,
NEMET MONDANI 57
' hanem egy iPhone-alkalmazst s egy PHP-httrkiszolglt, s ssze is kellett kap
csolnom a kett . .. Hogy micsoda? A minsgellenrzst is rm akarjk lcslni?
Jrt az agyam: a tbbletmunkt csak gy ellenslyozhatom, ha gyorsabban kdo
. Iok. Felejtsd el az elvont gyrat! sszettel helyett hasznlj egy szp kvr ciklust,
nincs id!
gy mr tnyleg lehetetlenn vlt, hogy j kdot rjak.
KT HT A BEFEJEZSIG
Az a kt ht rmsges volt. Elszr is, kt nap elment a kvetkez projekttel kapcso
latos rtekezletekre (ami mg inkbb felnagytotta, hogy milyen borzaszt kevs az
id). Vgl sszesen nyolc napom maradt, hogy elkszljek. Az els hten 74 rt
dolgoztam. A msodikon ... istenem, nem is emlkszem - ki trldtt az emlkeze
tembl, ami valsznleg nem is baj.
Nyolc napon t megszllottan kdoltam. Minden rendelkezsre ll eszkzt megra
gadtam, hogy vgezni tudjak: msoltam s beillesztettem (nevezzk kd-jrahasznos-
tsnak), mgikus szmokat hasznltam (hogy az llandkat csak egyszer kelljen meg
hatroznom, s elkerljem az jbli begpels rettenett), s egyltaln NEM rtam
egsgteszteket! (Ki akar ilyenkor piros hibajelzseket? Csak elveszik az ember kedvt!)
Elg szrny kdot szltem, de persze nem volt lehetsg jratervezni. Ugyanak
kor ahhoz kpest, hogy mennyi id llt rendelkezsre, nagyon is klassz munkt v
geztem, plne egy "eldobhat
"
programhoz, nem igaz? Ismers a szveg? Vrj csak,
a java mg htravan.
Mikzben az utols simtsokat vgeztem az alkalmazson (az utols simtsok kz
tartozott a teljes kiszolglkd megrsa), a kdot bngszve azon tprengtem, hogy
vgl is lehet, hogy megrte az erfesztst. Az alkalmazs elkszlt, s tlltem.
"H, John! Van egy j embernk; Bobnak hvjk. Most ppen nagyon sok a dolga,
ezrt nem tudott szemlyesen hvni, de azt mondja, a felhasznlkat arra kellene
: krni, hogy adjk meg az email-cmket, hogy el tudjuk kldeni nekik a kuponokat.
Mg nem ltta az alkalmazst, de szerinte ez nagyszer tlet. Ezenkvl egy jelents
kszt rendszert is szeretnnk, hogy le tudjuk krni az emaileket a kiszolglrL Va
lami szpet, de nem tl drgt. (Vrjunk csak, ez Monty Python volt.) Ja, s ha mr
szba kerlt, a kuponoknak le kell jrniuk az ltalunk megadott szm nap utn.
s persze ... "
Mit is tudunk a j kdrl? A j kd bvthet, fenntarthat, knnyen mdosthat,
s gy olvashat, mint egy knyv. Na, ez a kd nem ilyen volt.
s mg valami. Ha jobb szaftverfejleszt szeretnl lenni, tartsd szben, hogy az
gyfl mindig kitolja a hatridt, mindig tovbbi szolgltatsokat akar, mindig vl
toztat valamin, s mindig az UTOLS UTNI pillanatban. me a kplet:
(igazgatk szma)2
+ 2 x j igazgatk szma
58 2. FEJEZET
+ Bob gyerekeinek szma
=AZ UTOLS PILLANATBAN HOZZADOTT NAPOK SZMA
Az igazgatk rendes emberek. Azt hiszem. Gondoskodnak a csaldjukrl (feltve,
hogy a Stn beleegyezett, hogy legyen nekik). Szortanak az alkalmazs sikerrt
(ellptets!). A gond csak az, hogy mindnyjan stkrezni akarnak a dicssgben,
ezrt kell nekik egy szolgltats vagy tervezsi dnts, amire rmutathatnak, hogy
lm, ez az fejkbl pattant ki.
A trtnethez visszatrve, nhny nappal kitoltuk a projekt hatridejt, s megr
. tam a levelezrendszert. Aztn sszeestem a kimerltsgtl.
AZ GYFELEKET SOHA NEM IZGATJA ANNYIRA, MINT TGED
. Annak ellenre, hogy folyamatosan tiltakoznak s srgetnek, az gyfeleket soha nem
izgatja annyira, hogy az alkalmazs hatridre kszen legyen, mint tged. Azon a dl
. utnon, amikor ksznek tltem meg az alkalmazst, emailben elkldtem a vgleges
, vltozatot az rdekelt feleknek: a projektfelelsknek, az igazgatknak, s gy tovbb.
"ELKSZLT! ME AZ LO-S VLTOZAT! LDASSK A NEVE!" Megnyomtam a "Kl
. ds" gombot, htradltem a szkemben, s dvzlt mosollyal az arcomon arrl fant-
:. ziltam, hogy a cg a vlln visz vgig a 42. utcn, s kikilt a "Valaha Volt Legnagyobb
' !
' Programoznak
"
, de legalbbis az n arckpemet nyomtatja minden plaktjra.
rdekes mdon k mintha ms vlemnyen lettek volna. Tulajdonkppen nem is
igazn tudtam, mit gondolnak. Nem jtt semmilyen visszajelzs. Egy rva szt sem

mondtak. Mint kiderlt, a Gorilla Mart-os fickk mr alig vrtk, hogy a kvetkez
tervkkel foglalkozhassanak, s rgtn tovbb is lptek.
Azt hiszed, fllentek? Ezt figyeld! Az alkalmazst benyjtottam az Apple-holtnak,
anlkl, hogy megadtam volna a lerst. Krtem a Gorilla Mart-ot, hogy adjanak .
egyet, de nem vlaszoltak, s nem volt id rjuk vrni (lsd az elz bekezdst). jra "
rtam nekik. Aztn megint. A sajt fnkeimet is rlltottam a dologra. Ktszer r
kezett vlasz. Mindkt alkalommal azt krdeztk, hogy "Elnzst, mire is lenne szk
sged?". A NYOMORULT PROGRAMLERSRAl
Egy httel ksbb az Apple megkezdte az alkalmazs tesztelst. Ez ltalban
rmteli pillanat, de ebben az esetben inkbb a grcss flelem uralta. Ahogy az vr- 1
hat is volt, az alkalmazst mg aznap visszautastottk, a lehet legsznalmasabb

kifogssal, amit csak el tudok kpzelni: "Az alkalmazsnak hinyzik a lersa." M-
kdni ugyan tkletesen mkdik, de nincs lersa. Csak ezen mlt, hogy a Gorilla
. Mart alkalmazsa nem lphetett mkdsbe a fekete pnteken. Elg dhs voltam.
n felldoztam a csaldomat egy kthetes idegtp rohansrt, a Gorilla Mart-nl
viszont nem akadt senki, aki csak annyit is trdtt volna az alkalmazssal, hogy egy
ht alatt sszedob hozz egy lerst. Miutn az Apple visszautastotta a programot,
egy rn bell megrtk, s tadtk neknk - nyilvn ez volt az a jelzs, amitl vgre
. megjtt az eszk.
NEMET MONDANI 59
Ha korbban mrges voltam, gy tz nappal ksbb felrobbantam a dhtl. A meg
rendeltl ugyanis egsz id alatt nem kaptuk meg a valdi adatokat: a kiszolglra
ideiglenesen csak kitallt, kpzeletbeli termkeket s kuponokat tltttnk fel. A ku
ponkd pldul ez volt: 1234567890. Csupa kamuadat.
Aztn azon a vgzetes reggelen megnztem a portlt, s azt lttam, hogy AZ AL
KALMAZS LETLTHET! Hamis adatokkal! Elborzadtam, s azonnal felhvtam
mindenkit, akit csak tudtam, s vltztem velk:
"
AZ ADATOKAT AKAROM!
. MOST!" (A n a vonal tls vgn megkrdezte, hogy a tzoltkra vagy a rendrsgre
van szksgem, gyhogy letettem, s igyekeztem nem megint a 911-et hvni.) Amikor .
sikerlt elrnem a Gorilla Mart-ot, s levltttem a hajukat, hogy
"
ADATOK KEL
LENEK!", a kvetkezt vlaszoltk - soha nem felejtem el:
", hell, John! j alelnknk van, s gy dnttt, hogy nem adjuk ki a progra-
mot. Lennl szves lehzni az alkalmazsboltbl?"

Vgl kiderlt, hogy legalbb ll ember jegyeztette be az email-cmt az adatb-


. zisba, vagyis akr ll ember stlhatott volna be sorban egyms utn egy Gorilla :
Mart-ba hamis iPhone-kuponnal. Csnya vge lett volna.
Ktsgtelen, hogy egy valamirl az gyfl vgig igazat mondott: a kdot eldobha
tnak szntk. Arrl azonban nem volt sz, hogy egyltaln ki sem adjk.
EREDMNY? A MUNKA SRGS, A PIACRADOBAS MAR KEVSB
A trtnet tanulsga az, hogy a megrendelket - legyenek akr kls gyfelek, akr
, bels felettesek - egy valami rdekli: hogy a fejlesztk gyorsan rjk meg a kdot.
Hatkonyan? Nem. Gyorsan? Igen. Erre az albbi bevlt mdszert dolgoztk ki:
Mondd azt a fejlesztnek, hogy az alkalmazs egyszer. Ez azt a clt szol
glja, hogy a fejlesztcsapat nyoms al kerljn, s hamis elvrsoknak pr
bljon eleget tenni. A programozk gy hamarabb ltnak munkhoz, ami
lehetsget teremt arra, hogy ...
j abb szolgltatsokat krj, a csapatot hibztatva, amirt nem ismertk
fel az ignyeket. A fenti esetben a
"
bedrtozott" tartalom maga utn vonta,
hogy meg kelljen vltoztatui az alkalmazs frisstsi mdjt. Hogy-hogy erre
nem jttem r magamtl? R jttem, de korbban megtveszt gretet kap
tam. Az is gyakori, hogy az gyfl felvesz egy
"
j embert", aki felfedez vala
milyen nyilvnval hinyossgot - pldul azt mondja, hogy Steve Jobs r
kezett a cghez, s kne egy kis varzslat az alkalmazsba. Ezutn nincs ms
dolgod, mint hogy ...
60
Kitold a hatridt - jra s jra. A fejlesztk akkor dolgoznak a leggyor
sabban s a legkemnyeb ben, amikor mr csak nhny nap van a hatridig.
( Mellesleg ekkor kvetnek el hibkat a legnagyobb esllyel, de emiatt minek
aggdjunk, nem igaz?) Ha pedig mr ilyen hatkonyan dolgoznak, mirt
ne hasznljuk ki? Lebegtessk meg elttk, hogy kaphatnak mg pr napot!
2. FEJEZET
s a dolog gy megy tovbb: elszr pr nap, aztn egy j abb ht, amikor mr
napi hsz rkat dolgozol, hogy minden a helyre kerljn. Olyan, mint a ku
tya orra el belengetett csont - csak ppen egy programozval nem bnnak
olyan jl, mint egy kutyval.
Brilins forgatknyv. s ki hibztatn ket azrt, mert azt hiszik, hogy mkdik?
A szrnysges kdot nem ltjk, ezrt az eredmnyek ellenre jra s jra ezekhez
a trkkkhz folyamodnak.
A globalizlt gazdasg korban, amikor a vllalatokat a dollr s a rszvnyek r
folyama mozgatja, s az rfolyam nvelse rdekben elbocstsokra, tlhajszolt
munksokra s offshore-bankszmlkra van szksg, a fejlesztsi kltsgek cskken
tsnek ez a mdja kihalsra tli a j kdot. Ha nem vigyzunk, hzelegve, szpen
krve vagy utastva, de elbb-utbb ktszer annyi kdot ratnak meg majd velnk fele
annyi id alatt.
LEHETETLEN KD
Amikor a fenti trtnetben John azt krdezi, hogy "Nem ltezik j kd?", valjban
azt rti alatta, hogy "Lehetetlen profinak lenni?
"
. Amesjben ugyanis nem csak
a kd snylette meg a mkdsi zavarokat, hanem John csaldja, munkaadja, a meg
rendel s a felhasznlk is. Ebbl a trtnetbl mindenki vesztesknt kerlt ki 3.
Ki az, aki amatrknt viselkedett itt? John vilgoss teszi, hogy szerinte a Gorilla
Mart vezeti - a jtkot sszefoglal forgatknyve egyrtelmen eltli a viselked
sket. De tnyleg helytelenl viselkedtek? Nem hiszem.
A Gorilla Mart-os fickk azt akartk, hogy a fekete pntekre legyen egy iPhone
alkalmazsuk, amit esetleg felhasznlhatnak. Ezrt a lehetsgrt hajlandak voltak
fizetni, s talltak valakit, aki hajland volt elkszteni a programot. Szval, hogyan
hibztathatnnk ket?
Tny, hogy a kommunikcival voltak gondok. A felelsk nyilvnvalan nem
tudtk, mi is az a webszolgltats, s a nagyvllalatoknl szoksos problmk - az
egyik rszleg nem tudja, mit csinl a msik-is jelentkeztek. Erre azonban szmtani
lehetett volna. John be is vallja ezt, amikor azt mondja, hogy "A tbb vnyi tapaszta
lat ellenre, miszerint minden szolgltatst, amit az gyfl kr, bonyolultabb megrni,
mint elmagyarzni. ..
"
.
Ha viszont nem a Gorilla Mart volt a bns, akkor ki?
3 Ta
l
n John kzvet
l
en megbzjt leszmtva, br
l
efogadom, az cge sem jrt t
l
j
l
.
NEMET MONDANI 61
Taln John kzvetlen munkaadja. John ezt nem mondja ki nyltan, de cloz r,
amikor zrjelben megjegyzi, hogy
"
Az zleti letben az szmt, hogy mennyire je
lents az gyfl." Vajon John munkaadja teljesthetetlen greteket tett a Gorilla
Mart-nak? Kzvetlenl vagy kzvetetten nyomst gyakorolt Johnra, hogy valra
vltsa ezeket az greteket? John errl nem beszl, gyhogy csak tallgathatunk
De mg ha jl is tallgatunk, hol van az egszben John felelssge? n ugyanis
egyrtelmen t teszem felelss. John volt az, aki az elejn elfogadta a kt hetes ha
tridt, pedig nagyon jl tudta, hogy szinte minden projekt bonyolultabb, mint ami
lyennek elsre tnik. volt az, aki beleegyezett, hogy megoldja az emailes regisztr
cit s a kuponok lejra tt. volt az, aki napi 20 s heti 90 rkat dolgozott. John volt
az, aki kivonta magt a csaldja letbl, hogy hatridre teljestse a feladatot.
Mirt tett gy John? Teljesen egyrtelmen fogalmaz:
"
Megnyomtam a
"
Klds"
gombot, htradltem a szkemben, s dvzlt mosollyal az arcomon arrl fantzi
ltam, hogy a cg a vlln visz vgig a 42. utcn, s kikilt a
"
Valaha Volt Legnagyobb
Programoznak"." Rviden, John hs szeretett volna lenni. Eslyt ltott a megdics
lsre, s megragadta. Lehajolt, s felmarkolta a gyrt.
A profik gyakran vlnak hss, de nem azrt, mert azok prblnak lenni. Egy pro
fibl akkor lesz hs, ha j munkt vgez, idben elkszl, s nem lpi tl a kltsgve
tst. Amikor a megment szerepben prblt tetszelegni, John nem profihoz mltan
viselkedett.
Johnnak nemet kellett volna mondania az eredeti, kt hetes hatridre. Vagy leg
albb akkor, amikor rjtt, hogy nem is webszolgltatsrl van sz. Nemet kellett
volna mondania az emailes regisztrcira s a kuponlejratra. Vissza kellett volna
utastania mindent, ami embertelen tlrzst s ldozathozatalt ignyelt.
Mindenekeltt azonban Johnnak nemet kellett volna mondania a sajt, bels dn
tsre, amellyel felldozta a kd minsgt a hatrid oltrn. Figyeld meg, mit mond
John a j kdrl s az egysgtesztekrl:
"[ . . . ] a tbbletmunkt csak gy ellenslyozhatom, ha gyorsabban kdolok. Felejtsd
el az elvont gyrat! sszettel helyett hasznlj egy szp kvr ciklust, nincs id!"
s mg egyszer:
"
Nyolc napon t megszllottan kdoltam. Minden rendelkezsre ll eszkzt meg
ragadtam, hogy vgezni tudjak: msoltam s beillesztettem (nevezzk kd-jrahasz
nostsnak), mgikus szmokat hasznltam (hogy az llandkat csak egyszer kelljen
meghatroznom, s elkerljem az jbli begpels rettenett), s egyltaln NEM r
tam egysgteszteket! (Ki akar ilyenkor piros hibajelzseket? Csak elveszik az ember
kedvt!)"
Ezek a dntsek voltak a kudarc valdi okai. John elfogadta, hogy a sikerhez vezet
egyetlen t az amatr munka, ami aztn el is nyerte a mlt jutalmt.
62 2. FEJEZET
Lehet, hogy mindez kegyetlenl hangzik, pedig mi sem ll tvolabb tlem, mint
az rzketlensg. A knyv korbbi rszben lertam, hogy a plyafutsom sorn n is
tbbszr elkvettem ugyanezt a hibt. Hatalmas a csbts, hogy hss vljunk, s
"megoldjuk a problmt". Azzal azonban mindnyjunknak tisztban kell lennnk,
hogy a szakmai elvek feladsa nem a problmk megoldsnak az tja. Az elvek fel
adsa csak jabb problmkat szl.
gy mr megvlaszolhatjuk John eredeti krdst:
"
Nem ltezik j kd? Lehetetlen profinak lenni?"
Az n vlaszom: nem.
3. FEJEZET
IGENT MONDANI
Tudtad, hogy n talltam fel a hangpostt? Komolyan. Pontosabban hrman szaba
dalmaztattuk: Ken Finder, Jerrry Fitzpatrick s n. A 80-as vek legelejn trtnt,
amikor a Teradyne nev vllalatnl dolgoztunk. A vezrigazgat megbzott minket,
hogy lljunk el egy jfajta termkkel, s mi feltalltuk az
"
elektronikus recepcist",
rviden az ER-t.
Mindnyjan ismerjk az ER-t. Az ER nem ms, mint az a szrny gp, amelyik
"felveszi" a telefont az gyflszolglatokon, s agyzsibbaszt krdseket tesz fel,
IGENT MONDANI 65
amelyekre a telefon gombjainak megnyomsval vlaszolhatunk (
"
Az angol nyelv
gyflszolglathoz nyomja meg az l-es gombot.
"
).
A mi ER-nk gy kezelte a cg telefonhvsait, hogy arra krte a hvt, hogy
mondja be a keresett szemly nevt, majd trcszta az illett. Eltte visszaigazolst
krt, hogy a hvs megfelel-e, s igenl vlasz esetn kapcsolta a hvott szemlyt.
Az ER-nek megmondhattad, hol vagy, s tbb telefonszmot is megadhattl neki,
amivel prblkozhatott. Ha teht ppen valaki msnak az irodjban tartzkodtl,
otthon vagy egy msik vrosban voltl, az ER akkor is meg tudott tallni. Ha pedig
a megadott helyek egyikn sem bukkant rd, zenetet lehetett hagyni nla. Ebben
kapott szerepet a hangposta.
Klns mdon a Teradyne-nak fogalma sem volt, hogyan adja el az ER-t. A pro
jekt tllpte a kltsgvetst, s talakult valami olyasmiv, amirl a cg tudta, ho
gyan lehet rtkesteni: CDS (Craft Dispatching System), vagyis diszpcserrendszer
lett belle; olyan, mint amilyet a telefonszerelk munkabeosztsra hasznltak. Ezen
kvl a Teradyne lemondott a szabadalomrl is - anlkl, hogy neknk szlt volna.
(!) A szabadalom jelenlegi tulajdonosa hrom hnappal utnunk nyjtotta be a k
relmt. (! !)1
Jval az utn, hogy az ER-bl CDS lett, de mg az eltt, hogy megtudtam volna,
hogy a szabadalrat ejtettk, a cgvezetre vrtam egy fn - az plet eltt volt egy
nagy tlgyfa; felmsztam r, s vrtam, hogy a vezr begrdljn a JagurjvaL Sike
rlt elcspnem az ajtban, s krtem tle pr percet.
Arrl prbltam meggyzni, hogy jra kellene indtanunk az ER projektet, mert
biztos vagyok benne, hogy komoly anyagi haszonnal kecsegtet. Nagy meglepetsemre
ezt vlaszolta:
"
Ok, Bob, dolgozz ki egy tervet. Mutasd meg, hogyan tudnnk pnzt
keresni vele - ha meggyz lesz, folytatjuk az ER projektet.
"
Erre nem szmtottam. Azt hittem, azt fogja mondani, hogy
"
Igazad van, Bob.
jra elindtom a projektet, s kitallom, hogyan csinljunk belle pnzt.
"
azonban
az n vllamra rakta ezt a terhet, s n nem voltam biztos benne, hogy elbrom. Vgl
is, az n asztalom a szoftver, nem a pnzgyek. n dolgozni akartam az ER progra
mon, nem felelssget vllalni az esetleges profitrt vagy vesztesg rt. A bizonytalan
sgomat ugyanakkor nem akartam kimutatni, ezrt megkszntem a lehetsget, s
ezekkel a szavakkal tvoztam:
"
Ksznm, Russ. Vllalom a feladatot ... azt hiszem.
"
Most pedig kvetkezzen Roy Osherove, aki elmondja, mirt volt ez sznalmas ki
jelents.
l Nem mintha a szabadalom brmennyi pnzt is rt volna nekem, mivel eladtam a Teradyne-nak
l dollrrt, ahogy a munkaszerzdsem megkvetelte. (Egybknt azt az l dollrt sem kaptam meg.)
66 3. FEJEZET
A KTELEZETTSGVLLALS NYELVE
Roy Osherove
Mondd ki! Gondold komolyan! Tedd meg!
Ktelezettsget vllalni valamire hrom dolgot jelent:
l. Azt mondod, hogy megcsinlod.
2. Komolyan gondolod, hogy megcsinlod.
3. Tnyleg megcsinlod.
De gondold csak vgig, milyen gyakran tallkozol olyanokkal (a jelenlevk persze
kivtelnek szmtanak), akik soha nem tesznek eleget mindhrom fenti kvetel
mnynek:
Megkrdezed az informatikust, hogy mirt olyan lass a hlzat, s azt
mondja:
"
Ja, ja, j rtereket kne beszereznnk." Termszetesen tudod, hogy
az gyben semmi nem fog trtnni.
Megkred a csapat egyik tagjt, hogy futtassan le pr manulis tesztet a for
rskd benyjtsa eltt, s azt vlaszolja:
"
Persze, semmi gond. Ha minden
igaz, mg ma megcsinlom." Ilyenkor valahogy rzed, hogy msnap meg kell
majd krdezned, hogy tnyleg volt-e brmilyen teszt a benyjts eltt.
A fnkdbetrappol a szobba, s azt morogja, hogy
"
gyorsabban kne ha
ladnunk". Ilyenkor tudod, hogy valjban gy rti, hogy NEKED kellene
gyorsabban haladnod. semmit sem fog tenni az gy rdekben.
Nagyon kevs az olyan ember, aki amikor meggr valamit, akkor azt komolyan is
gondolja, s valban teljesti is, amit grt. Vannak, akik tnyleg hiszik, amit monda
nak, de a tettekig mr nem jutnak el - s sokkal tbben, akik mg csak nem is gon
doljk komolyan az greteiket. Biztos hallottad mr, hogy valaki azt mondja,
"H, most mr tnyleg fogynom kellene pr kilt", hogy aztn - a vrakozsaidnak
megfelelen - ne csinljon semmit a slyval. Mindennapos dolog.
Mirt van folyton az a furcsa rzsnk, hogy az emberek nem igazn akarjk tny
leg megtenni, amit grnek?
Ennl is rosszabb, hogy a megrzsnk gyakran megcsal. Nha hinni szeretnnk,
hogy az illet tnyleg komolyan gondolja, amit mond, pedig nem. Hinni akarunk
a sarokba szortott programoznak, amikor azt mondja, hogy kpes egy ht alatt be
fejezni az eredetileg kt hetes feladatot, pedig nem lenne szabad.
Ahelyett, hogy a megrzseinkre hagyatkoznnk, rdemesebb kommunikcis
trkkkkel kiderteni, hogy mennyire komoly egy vllals. Azltal, hogy mi mskpp
fogalmazunk, kiknyszerthetjk a fenti lista els kt pontjnak teljeslst: rvehet
jk az embereket, hogy kimondjk, hogy megtesznek valamit, s komolyan is gondol
jk azt.
IGENT MONDANI 67
AZ ELKTELEZETTSG HINYNAK FELISMERSE
Amikor valaki gretet tesz valamire, az, ahogy fogalmaz, illetve amilyen szavakat
hasznl, rulkodik arrl, hogy mire szmthatsz. Ha bizonyos bvs szavak hinyoz
nak az gretbl, nagy az esly r, hogy az illet nem gondolja komolyan, amit mond,
vagy nem hiszi, hogy az gret teljesthet.
A kvetkez nhny sz, illetve kifejezs jelenlte viszont ppen az elktelezettsg
hinyra utal:
Kne/Lenne. "Ezt meg kne csinlnunk.
"
"Fogynom kne.
"
"J lenne, ha ezt
valaki megcsinln.
"
Remlem/Brcsak "Rem lem, ksz leszek holnapra.
"
"Rem lem, mg tall
kozunk.
"
"Brcsak lenne r idm.
"
"Brcsak gyorsabb lenne ez a szmt
gp.
"
"Csinljuk ezt vagy azt" (nem "n . . . "). "Tallkozzunk valamikor.
"
"Fejez
zk be ezt a dolgot.
"
Ha odafigyelsz, nagyon gyakran hallhatod ezeket a kifejezseket- st valszn
leg te is srn hasznlod ket. Az ember hajlamos mindent elkvetni annak rdek
ben, hogy semmire ne kelljen ktelezettsget vllalnia.
Az azonban egyltaln nincs rendben, ha a munkd vagy valaki msnak a munkja
ilyen greteken ll vagy bukik. Az els lpst mindazonltal megtetted: odafigyelsz,
hogy felismerd az elktelezettsg hinyt, msokban s nmagadban egyarnt.
Azt teht mr tudod, hogyan hangzik egy komolytalan gret. De hogyan ismer
heted fel a valdi ktelezettsgvllalst?
MILYEN A VALDI KTELEZETTSGVLLALS?
A fenti kifejezsekben az a kzs, hogy vagy olyasmit feltteleznek, ami nem "raj
tunk
"
mlik, vagy egyszeren elhrtjk a szemlyes felelssget. Az ember mindkt
esetben gy viselkedik, mintha nem ura, hanem ldozata lenne a krlmnyeknek
Az igazsg azonban az, hogy MINDIG van valami, aminek az alakulsa szemlye
sen rajtad mlik, teht mindig van valami, amirt felelssget vllalhatsz.
A valdi ktelezettsgvllalst az ilyen mondatokrl lehet felismerni: "n ezt s
ezt fogom tenni, ekkorra s ekkorra.
"
(Pldul: "Keddre be fogom fejezni ezt a felada
tot.
"
) Mik azok a titkos sszetevk, amelyek jelentsget adnak az ilyen monda
toknak? Kijelentesz valamit, amit TE fogsz megtenn i, mgpedig egy konkrtan megha
trozott idpontig. Nem msrl beszlsz, hanem sajt magadrl. Olyan tettekrl
beszlsz, amelyeket te vgre fogsz hajtani. Nem "taln
"
vagy "ha esetleg marad r id",
hanem biztosan.
Ebbl aszbeli ktelezettsgvllalsbl (elvileg) nincs kibv. Azt mondtad, hogy
megteszed, ezrt csak ktfle kimenetel lehetsges: vagy megteszed, vagy nem.
68 3. FEJEZET
Ha nem, akkor a fejedre olvashatjk, hogy nem tartottad be az gretedet, s emiatt
szgyellni fogod magad. Knosnak fogod rezni, ha valakinek azt kell mondanod,
hogy nem tetted meg, amit grtl (amennyiben az illet fltanja volt az gretnek).
Ijeszt, ugye?
Teljes felelssget vllalsz valamirt, legalbb egy tan eltt. Nem egyedl llsz
vagy lsz egy tkr vagy a szmtgp kpernyje eltt, hanem egy msik emberrel
beszlsz szemtl szemben, s gretet teszel valamire. Itt kezddik a ktelezettsgvl
lals: amikor felvllalsz egy olyan helyzetet, amely arra knyszert, hogy megtegyl
valamit.
Ha megvltoztatod a kifejezseket, amelyeket hasznlsz, s helyettk a ktelezett
sgvllals nyelvt beszled, a kvetkez kt lps - az, hogy komolyan is gondolod,
amit grsz; illetve az gret teljestse - is knnyebb lesz.
Elszr lssuk, milyen okai lehetnek annak, hogy nem gondolsz komolyan egy
gretet, vagy hogy nem teljested azt - s milyen megoldsok lehetsgesek.
NEM FOG SIKERLN!, MERT X-EN MLIK, HOGY KSZ LEGYEN . Csak olyasmire vllal
hatsz ktelezettsget, ami kizrlag rajtad mlik. Ha a clod pldul az, hogy befejezz
egy modult, amelynek az elkszlte egy msik csapattl is fgg, nem grheted meg,
hogy teljesen ksz leszel a modullal, az emltett csapat munkjt is belertve. Bizo
nyos tettekre, amelyek kzelebb visznek a clhoz, viszont vllal ha tsz ktelezettsget.
Az albbiakat megteheted:
Lelsz egy rra Gary-vel az infrastruktra-csapattl, hogy megbeszljtek
a fggsgeket.
Elksztesz egy felletet, amely elvontt teszi a modulodat, hogy ne fggjn
a msik csapat ltal ltrehozott infrastruktrtL
A hten legalbb hromszor egyeztetsz az sszeszerkesztsrt felels fick
val, hogy az ltalad vgrehajtott mdostsok biztosan mkdjenek a cg
sszeszerkeszt rendszerben.
Elkszted a sajt sszeszerkesztett vltozatodat, amely lefuttatja a modulod
egyttmkdsi tesztjeit.
rzed a klnbsget?
Ha a vgcl elrse msoktl fgg, olyan feladatok elvgzsre kell gretet tenned,
amelyek kzelebb visznek a clhoz.
NEM FOG SIKERLN!, MERT NEM VAGYOK BIZTOS BENNE, HOGY SIKERLHET.. Ha a vgcl
nem rhet el, attl mg elktelezheted magad olyan tettek mellett, amelyek kzelebb
visznek a clhoz - ebbe akr az is beletartozhat, hogy kiderted, vgrehajthat-e
a feladat!
IGENT MONDANI 69
Ahelyett, hogy azt grnd meg, hogy a kiads eltt kijavtod mind a 25 fennma
rad programhibt (ami nem biztos, hogy kivitelezhet), vllalhatod pldul az alb
biakat:
Vgigmsz mind a 25 hibn, s megprblod elidzni ket.
Egyeztetsz a minsgellenrkkel, akik felfedeztk a hibkat, hogy tisztban
legyl a pontos rszletekkel.
A hten minden iddet ezeknek a hibknak a kijavtsra fordtod.
NEM FOG SIKERLN!, MERT NHA EGYSZEREN NEM JN SSZE,.. A siker sohasem biztos:
mindig kzbejhet valamilyen vratlan esemny, hiszen az let mr csak ilyen. Pro
fiknt azonban mindig arra treksznk, hogy eleget tegynk az elvrsoknak Ebbl
pedig az kvetkezik, hogy ha valami gubanc van, az elvrsoknak kell megvltoz
niuk, mgpedig minl hamarabb.
Ha nem tudod teljesteni azt, amit vllaltl, az a legfontosabb, hogy minl hama
rabb jelezd ezt annak, akinek gretet tettl.
Minl hamarabb nyomod meg a vszcsengt, hogy minden rintett hallja, annl
nagyobb r az esly, hogy a csapat meg tud llni, t tudja rtkelni az ppen foly te
vkenysgt, s el tudja dnteni, hogy tehet-e valamit, vagy vltoztathat-e valamin
(pldul a feladatok elsbbsgi sorrendjn). Lehet, hogy a vllalsod gy mr teljest
hetv vlik, vagy legalbbis j vllalst tehetsz.
Lssunk nhny pldt:
Ha megbeszlsz egy tallkozt egy munkatrsaddal egy belvrosi kvhzb a,
de elakadsz a forgalomban, ktsgess vlik, hogy idben oda tudsz rni, ahogy
meggrted. Amint erre rjssz, felhvhatod a kollgdat, s tudathatod vele
a helyzetet, hogy kzelebbi tallkahelyet keressetek, vagy esetleg elhalassz
tok a tallkozt.
Ha meggrted, hogy kijavtasz egy hibt, amirl gy gondoltad, hogy el
hrthat, de egyszer csak rjssz, hogy a hiba bonyolultabb annl, mint
amilyennek elsre tnt, leadhatod a vszjelzst, hogy a csapat megoldst ta
llhasson az gret teljestsre (prmunka vagy tletbrze rvn), vagy el
revehessen egy msik feladatot, s pldul egy msik, egyszerbb hiba kija
vtsval bzzon meg.
Rendkvl fontos, hogy ha nem szlsz valakinek a lehet leghamarabb a poten
cilis problmrl, eslyt sem adsz r, hogy valaki segtsen a vllalsod teljest
sben.
sszEGZS .. A ktelezettsgvllals nyelvnek elsajttsa nehznek tnhet, de ren
geteg olyan kommunikcis problmt- becslsek, hatridk, szemlyes flrertsek
stb. - megoldhat, amivel a mai programozk szemben szaktk tallni magukat.
70 3. FEJEZET
Ha ezt a nyelvet beszled, komoly szoftverfejlesztnek fognak tartani, aki llja a sza
vt - ez pedig az egyik legjobb dolog, amit csak ebben az ipargban remlhetsz.
TANULD MEG, HOGYAN MONDJ IGENT!
Azrt krtem meg Roy-t, hogy jruljon hozz a knyvhz a fenti cikkel, mert megpen
dtett bennem egy hrt. Mr j ideje prdiklok arrl, hogy milyen fontos megtanulni
nemet mondani - de ppen ilyen lnyeges az is, hogy tudd, hogyan mondj igent.
A "PRBLKOZS" MSIK OLDALA
Tegyk fel, hogy Peter felel az rtkelmotor bizonyos mdostsainak vgrehajts
rt Becslse szerint a mdostsokkal t-hat nap alatt fog elkszlni, a hozzjuk kap
csold dokumentcit pedig nhny ra alatt tudja megrni. Htf reggel fnke,
Marge, megkrdezi, hogy ll a munkval:
Marge:
"
Peter, kszen lesznek az rtkelmotor mdostsai pntekre?
"
Peter:
"
Szerintem megoldhat.
"
Marge:
"
A dokumentcival egytt?
"
Peter:
"
Azzal is megprblak vgezni.
"
Marge taln nem veszi szre a bizonytalansgat Peter kijelentseiben, pedig Peter
nem tesz egyrtelm greteket. Marge olyan krdseket tesz fel, amelyekre igennel
vagy nemmel lehetne felelni, Peter azonban kds vlaszokat ad.
Figyeld meg, hogyan l vissza a
"
prblkozni
"
igvel. Az elz fejezetben apr
blkozni igt gy hatroztuk meg, mint
"
igyekezni, tovbbi erfesztseket
tenni
"
, itt azonban Peter
"
taln igen, taln nem
"
jelentsben hasznlja.
Jobb lett volna, ha Peter ilyen vlaszokat ad:
Marge:
"
Peter, kszen lesznek az rtkelmotor mdostsai pntekre?
"
Peter:
"
Valsznleg, de lehet, hogy csak htfre.
"
Marge:
"
A dokumentcival egytt?
"
Peter:
"
A dokumentci mg jab b nhny ra, gyhogy a htf elkpzelhet, de
lehet, hogy az mr tcsszik keddre.
"
Ebben az esetben Peter megfogalmazsa szintbb, mert a bizonytalansgt nem rejti
el Marge ell. Lehet, hogy Marge szmra ennyi bizonytalansg elfogadhat, de az is
lehet, hogy nem.
FEGYELMEZETT KTELEZETTSGVLLALS
Marge:
"
Peter, egyrtelm igent vagy nemet szeretnk. Kszen lesz az rtkel
mator a dokumentcival egytt pntekre?
"
IGENT MONDANI 71
Ez Marge rszrl teljesen korrekt krds, hiszen tartania kell magt az temtervhez,
s egyrtelmen tudnia kell, hogy szmthat-e a pnteki befejezsre. Hogyan vla
szoljon Peter?
Peter:
"
Ebben az esetben nemet kell mondanom, Marge. A legkorbbi biztos idpont,
amikor a mdostsokkal s a dokumentcival is kszen leszek, a kedd.
"
Marge:
"
Vllalod, hogy keddre teljesen kszen leszel?
"
Peter:
"
Igen, keddre mindennel elkszlk.
"
De mi a helyzet akkor, ha Marge-nak tnyleg pntekre kellenek a mdostsok
a dokumentcival egytt?
Marge:
"
Peter, a kedd nekem mr tl ks. Willy, aki a hasznlati utastst kszti,
htftl r r, s t napja lesz befejezni a kziknyvet. Ha htf reggelre
nem kapom meg az rtkelmotor dokumentcijt, Willy nem tudja meg
csinlni idre a kziknyvet. Elre tudnd venni a dokumentcit?
"
Peter:
"
Nem. A mdostsokat kell elbb megcsinlni, mert a dokumentcit
a tesztfuttatsok kimenetbl lltjuk el.
"
Marge:
"
rtem. De nincs r valamilyen md, hogy a mdostsokkal s a doku
mentcival is eikszlj htf reggel eltt?
"
Peternek most dntenie kell. J esly van r, hogy pntekre elkszl az rtkel
mator mdostsaival, s taln mg a dokumentcit is megcsinlhatja, mieltt ha
zamegy a htvgre. Ha a munka tovbb tartana, mint ahogy remli, esetleg szomba
ton is dolgozhatna pr rt. Mit mondjon ht Marge-nak?
Peter:
"
Nzd, Marge, j esllyel mindennel vgezhetek htf reggelre, ha tlr
zom kicsit szombaton.
"
Ez megoldja Marge gondjt? Nem, csupn az eslyeken vltoztat- s Peternek ezt
kell kzlnie Marge-dzsal:
Marge:
"
Akkor szmthatok r, hogy minden meglesz htf reggelre?
"
Peter:
"
Valsznleg, de biztosra nem tudom mondani.
"
Ez lehet, hogy nem elg Marge-nak:
Marge:
"
Nzd, Peter, nekem tnyleg hatrozott vlasz kell. Van r brmilyen md,
hogy htf reggelre biztosan vllalni tudd a befejezst?
"
Peter ezen a ponton ksrtst rezhet, hogy laztson a szakmai fegyelmen. Lehet,
hogy gyorsabban vgez, ha nem r teszteket. Lehet, hogy gyorsabban vgez, ha nem
vgez jratervezst. Lehet, hogy gyorsabban vgez, ha nem futtatja le a teljes regresz
szis tesztcsomagot
Egy profi itt hzza meg a hatrt. Elszr is, Peter egyszeren tved. Nem fog gyor
sabban vgezni, ha nem rja meg a teszteket. Nem fog gyorsabban vgezni, ha nem
vgez jratervezst. Nem fog gyorsabban vgezni, ha kihagyja a teljes regresszis
tesztcsomagot Az vek sorn felhalmozott tapasztalatok azt mutatjk, hogy a fegye
lem megtrse csak lelasst minket.
72 3. FEJEZET
Msodsorban, Peternek profiknt tartania kell magt egy bizonyos szakmai szn
vonalhoz. A kdot ellenrizni kell, ezrt muszj teszteket rnia hozz. Peter kdjnak
tisztnak kell lennie, s Peternek meg kell bizonyosadnia rla, hogy a kd nem teszi
tnkre a rendszer egyetlen meglev rszt sem.
Mivel Peter profi, mr elktelezte magt a fenti szakmai szablyok mellett, ezrt
minden ms ktelezettsgvllalst ezeknek kell alrendelnie. Az emltett rvelst te
ht teljes egszben el kell vetni:
Peter: "Nem, Marge, semmilyen kedd eltti idpontot nem mondhatok biztosra.
Sajnlom, ha ez bekavar az temtervedbe, de ez a vals helyzet.
"
Marge: "A fenbe. Tnyleg szmtottam r, hogy hamarabb meglesz. Egszen biz
tos, hogy nem fog menni?
"
Peter: "Igen, teljesen biztos, hogy akr keddig is elhzdhat a dolog.
"
Marge: "Ht akkor azt hiszem, beszlek Willy-vel, htha t tudja temezni a fel
adatait.
"
Ebben az esetben Marge elfogadja Peter vlaszt, s ms megoldsokat keres. De
mi a helyzet akkor, ha Marge mr kimertett minden lehetsget, s Peter az utols
remnye?
Marge: "Nzd, Peter, tudom, hogy nagyon nagy krs, de tnyleg muszj, hogy
tallj r valamilyen mdot, hogy mindennel eikszlj htf reggelre. Lt
fontossg lenne. Tudsz valamit tenni az gy rdekben?"
Peter most vgiggondolja, hogy jelentsen tlrznia kellene, valsznleg egsz
htvgn. Amikor felmri, hogy milyen kitartan tud dolgozni, s mennyi energit
tud mozgstani, nagyon szintnek kell lennie sajt magval szemben. Mondani
knny, hogy jelents haladst tudsz elrni a htvgn, de sokkal nehezebb elegend
energit gyjteni ahhoz, hogy magas sznvonal munkt vgezz.
A profik ismerik a korltaikat. Tudjk, mennyi tlrt tudnak hatkony munkval
tlteni, s azzal is tisztban vannak, hogy milyen ron.
Ebben az esetben Peter meglehetsen biztos benne, hogy nhny plusz ra htkz
ben, illetve a htvgn elg lesz:
Peter: "Ok, Marge, a kvetkezket tudom tenni. Hazatelefonlok, s megbesz
lem a csalddal, hogy tudok- e tlrzni valamennyit. Ha rblintanak,
akkor htf reggelre ksz leszek a munkval, s be is jvk htf reggel,
hogy segtsek mindent megbeszlni Willy-vel. Utna viszont hazamegyek,
s szerdig be sem jvk jra. ll az alku?''
Ez gy teljesen korrekt. Peter tudja, hogy el tud kszlni a mdostsokkal s a do
kumentcival, ha tlrzik, de azzal is tisztban van, hogy utna pr napig hasznl
hatatlan lesz.
IGENT MONDANI 73
SSZEFOGLALS
Egy profitl nem azt vrjk, hogy mindenre rblintson, amit krnek tle, de mindig
kreatvan keresnie kell a megoldsokat, hogy
"
igen
"
-t mondhasson. Amikor pedig
egy profi igent mond, a ktelezettsgvllals nyelvt hasznlja, hogy semmi ktsg ne
legyen afell, hogy mit grt meg.
4. FEJEZET
KDOLS
Egy korbbi knyvemben1 hosszasan rtekeztem a tiszta kd szerkezetrl s term
szetrl. Ez a fejezet a kdolst mint tevkenysget s az ezt a tevkenysget krlvev
krnyezetet trgyalja.
18 ves koromban meglehetsen jl tudtam gpelni, de csak gy, ha a szememet
a billentykn tartottam - vakon nem ment a dolog. Ezrt egyik este gy dntttem,
l [Martin09]
KDOLAS 75
hogy rsznak nhny rt, s egy IBM 029-es krtyalyukasztha begpeltem egy
programomat, amelyet kdol rlapokra rtam, gy, hogy knyszertettem magamat,
hogy ne nzzek az ujjaimra. Begpels utn megvizsgltam minden krtyt, s eldob
tam azokat, amelyeket hibsan rtam be.
Az elejn elg sok krtya ment a szemtbe, de az este vgre szinte mindegyik t
kletesen sikerlt Azon az estn rjttem, hogy a vakon gpels lnyege a magabiz
tossg. Az ujjaim tudtk, melyik billenty hol tallhat, nekem csak ssze kellett
szednem az nbizalmamat, hogy nem fogok hibzni. Ebben sokat segtett, hogy rez
tem, amikor flretttem. Az este vgre szinte rgtn tudtam, ha hibztam, s egy
szeren flredobtam a krtyt, anlkl, hogy rnztem volna.
Kpesnek lenni arra, hogy rezd, amikor hibzol, rendkvl fontos - nem csak
a gpelst illeten, hanem mindenben. rzkenynek lenni a sajt hibidra azt jelenti,
hogy nagyon gyorsan lezrod a visszacsatolsi hurkot, s gyorsabban tanulsz a hib
idbl. A 029-essel eltlttt nap ta nagyon sok kszsget s a legklnflbb tudo
mnygakat sajttottam el, de minden esetben gy talltam, hogy a tuds kulcsa
a magabiztossg s a hibarzkenysg.
Ebben a fejezetben a sajt kdolsi elveimet s szablyaimat mutatom be. Ezek az
elvek s szablyok nem magra a kdra vonatkoznak, hanem a kdols sorn tans
tott viselkedsemre, hangulatomra s hozzllsomra, teht a kdrshoz szksges
szellemi, erklcsi s rzelmi krnyezetet rjk le. Ezekben gykerezik az n bizalmar
s a hibarzkenysgem.
Valsznleg nem fogsz mindennel egyetrteni, amit mondok- vgtre is, mlyen
szemlyes dolgokrl lesz sz. Mg az is lehet, hogy hevesen vitatsz majd bizonyos el
veket s viselkedsi mintkat. Ezzel nincs semmi gond - nem abszolt igazsgokat
nyilatkoztatok ki, csak olyasmit, ami rm rvnyes: egyetlen ember nzeteit arrl,
hogy mit jelent profi programoznak lenni.
SSZPONTOSTS
A kdols szellemileg megerltet s kimert tevkenysg, amely olyan fok tuda
tossgot s sszpontostst ignyel, amit csak kevs ms szakma. Ennek az az oka,
hogy a kdols sorn sok egymssal verseng tnyezvel kell zsonglrkdni:
76
l. Elszr is, a kdnak muszj mkdnie. Meg kell rtened, hogy mi a meg
oldand problma, s r kell jnnd, hogyan oldhat meg, majd meg kell
bizonyosadnod rla, hogy az ltalad rt kd hen brzolja az adott megol
dst. A megolds minden rszlett ki kell dolgoznod, mghozz az adott
nyelv, platform, architektra s rendszer keretein bell, egysgesen.
2. A kdnak ki kell elgtenie a megrendel ignyeit. Gyakran elfordul, hogy
a megrendel ltal tmasztott kvetelmnyek valjban nem oldjk meg
4. FEJEZET
a megrendel problmjt - a te feladatod, hogy ezt felismerd, s megbe
szld a dolgot a megrendelvel, hogy azt kapja majd, amire valban szk
sge van.
3. A kdodnak illeszkednie kell a meglev rendszerbe, s nem szabad merevebb,
trkenyebb vagy tlthatatlanabb tennie azt. gyelned kell a rendszer ele
mei kztti fggsg ekre. Rviden, a kdodnak szigor mrnki elveket kell
kvetnie.2
4. A kdod olvashat kell legyen ms programozk szmra. Ez nem csupn
annyit jelent, hogy tetszets megjegyzseket rsz hozz: magt a kdot kell
gy megszerkesztened, hogy elrulja a szndkaida t. Ez nem knny, st le
het, hogy ez az, amit egy programoz a legnehezebben kpes elsajttani.
Egyszerre zsonglrkdni mindezekkel a szempontokkal nem egyszer. Fizikailag
kimert hossz ideig fenntartani az sszpontosts szksges szintjt, s ehhez jn
nek mg a csapatm unkval kapcsolatos problmk, valamint a mindennapi let apr
csepr gondjai. A tanulsg: knnyen elvonhatja valami a figyelmedet.
Ha nem tudsz kell mrtkben sszpontostani, a kd, amit rsz, hibs, rossz fel
pts, tlthatatlan s tlbonyoltott lesz, s nem fog vlaszt adni a megrendel va
ldi problmjra. Rviden: t kell majd dolgozni, vagy teljesen ellrl kell kezdeni.
Az sszpontosts nlkl vgzett munka hulladkat termel.
Ha fradt vagy sztszrt vagy, ne kdoi, mert csak azt red el vele, hogy ellrl kell
kezdened a munkt. Helyette kszbld ki valahogy a figyelmedet elvon tnyezket,
s pihentesd az agyad.
HAJNALI HROMKOR rRT KD
A legrosszabb kd, amit valaha rtam, hajnali 3 rakor szletett, 1988-ban, amikor
a Clear Communications nev indul telekommunikcis cgnl dolgoztam. Mind
nyjan kemnyen tlrztunk, hogy izzadsgbl halmozzunk fel "tkt". Termsze
tesen mindnyjan arrl lmodoztunk, hogy gazdagok lesznk.
Egy nap ks jjel - vagy mondjunk inkbb kora hajnalt, nehogy idzavarba ke
rljek- zenetet kldettem a kdommal sajt magnak az esemnyindt rendszeren
keresztl (ezt hvtuk "zenetkldsnek"). Ez rossz megolds volt, de hajnali hrom
kor nagyszer tletnek tnt. Valjban tizennyolc rnyi folyamatos kdols utn
(nem beszlve a 60-70 rs munkahetekrl) ez volt az egyetlen tletem.
Emlkszem, milyen bszke voltam magamra, amirt ilyen sokat dolgoztam. Elk
telezettnek reztem magam. Azt hittem, hajnali hromkor csak egy igazi profi dolgo
zik. Mekkort tvedtem!
2 [Martin03]
KDOLS 77
Az akkor rt kd jra s jra visszatrt, hogy megkesertse az letnket. Olyan hi
bs felptst eredmnyezett, amit mindenki hasznlt, de folyton meg kellett kerlnie.
Mindenfle furcsa idztsi problmkat s visszacsatolsi hurkokat okozott: vgtelen
zenetciklusok jttek ltre, mert az egyik zenet hatsra a rendszer elkldtt egy
msikat is, majd mg egyet, s gy tovbb. Soha nem volt idnk kitiszttani ezt a sebet
(legalbbis ezt hittk), de arra mindig talltunk alkalmat, hogy jab b s j abb ragta
paszokat tegynk r. A kts egyre csak ntt a hajnali hromkor rt kd krl, egyre
nagyobb tehert jelentett a rendszernek, s egyre tbb mellkhatssal jrt. vekkel k
sbb a csapat llandan ezen vicceldtt. Amikor fradt vagy dhs voltam, mindig
ezt mondtk:
"
Vigyzat! Bob megint zenetet fog kldeni magnak!
"
.
A trtnet tanulsga az, hogy ne rj kdot, ha fradt vagy. Az elktelezettsg s
a profizmus nem a munkark szmn, hanem sokkal inkbb a fegyelmen mlik.
gyelj az egszsgedre s arra, hogy eleget aludj, s az letviteledet gy alaktsd ki,
hogy hatkonyan tudj dolgozni naponta nyolc rt.
GONDTERHELT KD
Elfordult mr veled, hogy veszekedtl a proddal vagy egy bartoddal, aztn meg
prbltl kdot rni? szrevetted, hogy az eszed mg mindig a veszekedsen jr, s
azon trd a fejed, hogyan tehetnd meg nem trtntt, vagy legalbbis hogyan b
klhetnl ki az illetvel? Az agyad hts zugaiban cikz gondolatok nha a mellkas
odra nehezed nyomsknt vagy a gyomrodat grcsbe rnt idegessgknt jelentkez
nek, mintha tl sok kvt vagy dits klt ittl volna. A nyomaszt gondok pedig
elvonjk a figyelmedet.
Amikor n gondterhelt vagyok egy gyflnl felmerlt vszhelyzet miatt, vagy
mert beteg a gyerek, vagy mert veszekedtem a felesgemmel, nem tudok sszponto
stani. Csak bmulom a kpernyt, az ujjaimat a billentyzeten tartva, s nem csin
lok semmit. Lebnulok, mintha tetszhalott lennk. Az agyar messze jr, s nem az
elttem hever programozsi feladat, hanem a httrben a nyugodni nem hagy
problma megoldsn dolgozik.
Nha knyszertem magam, hogy a kdon trjem a fejem. Egy-kt sort esetleg si
kerl is megrnom, vagy egy-kt tesztet teljestenem. A figyelmemet azonban nem
tudom fenntartani. Elkerlhetetlenl visszasllyedek a merev rzketlensgbe, res
tekintettel bmulok magam el, s a bensmet tovbbra is a megoldatlan magnleti
problmim rgjk.
Az idk sorn megtanultam, hogy az ilyen idszakok alkalmatlanok a kdrsra.
Brmilyen kdot rsz is, szemtreval lesz. Kdols helyett ilyenkor a lelkedet nyo
maszt gondoktl kell megszabadulnod.
Termszetesen sok problma nem oldhat meg egy-kt ra alatt, a munkaadd
viszont nem valszn, hogy sokig elnzi a munkakptelensgedet, mikzben a ma
gnleti problmidat prblod elhrtani. A megolds: meg kell tanulnod, hogyan
78 4. FEJEZET
rtheted ki az agyadbl a gondokat, vagy legalbbis hogyan szmzheted ket a ht
trbe, hogy ne vonjk el folyamatosan a figyelmedet.
n ezt gy rem el, hogy felosztom az idmet. Ahelyett, hogy kdrsra knysze
rtenm magam, mikzben ms gondok aggasztanak, meghatrozott idt- mondjuk
egy rt - adok magamnak, hogy kikszbljem a zavar tnyezket. Ha a gyerekem
beteg, hazatelefonlok, hogy megtudj am, hogy van. Ha vitatkoztam a felesgemmel,
felhvom, s megbeszlem vele a vits krdseket. Ha pnzzavarba kerltem, vgig
gondolom, hogyan oldhatnm meg az anyagi gondjaimat. Tudom, hogy kicsi r az
esly, hogy egyetlen ra alatt megoldjam a problmkat, a szorongsomat azonban
cskkenthetem, s lecsendestheter az agyam.
Idelis esetben a szabadiddben tudsz foglalkozni a magnleti problmkkal.
A munkahelyeden nem lenne ildomos ezzel tlteni egy rt. A profi programozk
gy osztjk be a szabadidejket, hogy a munkahelyen tlttt id a lehet leghatko
nyabb legyen. Ez azt jelenti, hogy otthon arra is kifejezetten idt kell szaktanod, hogy
kikszbld a feszltsget okoz tnyezket, hogy a magnleti gondjaidat ne vidd
magaddal a munkahelyedre.
Ms rszrl, ha ppen a munkahelyeden tartzkodsz, amikor rjssz, hogy a ma
gnleti problmid elszvjk az energid a munkdtl, jobb, ha rsznsz egy rt
a megoldsukra, mint ha ernek erejvel olyan kd rsra knyszertend magad,
amit aztn gyis a szemthe kell dobnod (vagy - ami mg rosszabb - amivel egytt
kell majd lned).
AZ RAMLSI ZNA
Az "ramlat"-knt (flow) ismert, rendkvl produktv llapotnak jelents irodalma
van. Egyes programozk gy hvjk ezt az llapotot, hogy
"
a Zna", de nem szmt,
minek nevezzk, az llapot valsznleg ismers a szmodra: arrl a rendkvli ssz
pontostst eredmnyez, elmlylt tudatllapotrl van sz, amelybe a programozk
pldul akkor kerlnek, amikor kdot rnak. Ebben az llapotban rezzk hatkony
nak a munknkat. Ebben az llapotban hisszk azt, hogy tvedhetetlenek vagyunk.
Ezrt treksznk mindig ennek az llapotnak az elrsre, s rtkeljk magunkat
aszerint, hogy mennyit idt vagyunk kpesek az ramlsi znban el tlteni.
me egy j tancs valakitl, aki mr jrt ott, s visszatrt: Kerld a Znt! Ez a tu
datllapot valjban nem hiperproduktv, s a legkevsb sem tesz tvedhetetlenn.
Csupn egy enyhe meditatv llapot, amelyben a racionalitst bizonyos fokig el
nyomja a sebessg rzete.
Szeretnk vilgosan fogalmazni: a Znban ktsgkvl tbb kdot tudsz rni; ha
a tesztvezrelt fejleszts elveit kveted, a piros-zld-jratervezs ciklusokat gyorsab
ban tudod vgrehajtani; s eitlthet nmi eufria vagy a diadal rzse. A gond csak
KDOLS 79
az, hogy a Znban szem ell veszted a tgabb kpet, gy nagy esllyel olyan dnt
seket hozol, amelyeket ksbb fell kell majd vizsglnod. A Znban rt kd lehet,
hogy gyorsabban elkszl, de utna tbbszr szorul mdostsra.
Manapsg, ha azon kapom magam, hogy tcssztam a Znba, tartok nhny perc
sznetet, s emailekre vlaszolok, vagy Twitter-zeneteket nzegetek, hogy kitisztt
sam a fejem. Ha az id mr dlre jr, elmegyek ebdelni. Ha csapatban dolgozom,
keresek magamnak egy programozprt.
A pros programozs egyik nagy elnye, hogy a pr lnyegben soha nem tud t
csszni a Znba. A Zna kommunikcimentes llapot, mg a prmunka intenzv
s folyamatos eszmecsert ignyel. A prmunkval kapcsolatban ppen arra szoktak
panaszkodni, hogy megakadlyozza a belpst a Znba. Nagyszer! A Zna nem az
a hely, ahol lenni szeretnl.
Ez persze nem tejesen igaz. Megesik, hogy ppen a Znt szeretnd elrni- ami
kor gyakoro lsz. Errl azonban egy msik fejezetben lesz sz.
ZENE
A Teradyne-nl a 70-es vek vgn sajt dolgozszahm volt. n voltam a PDP lll60-
asunk rendszergazdj a, ezrt egyike lettem annak a nhny programoznak, aki pri
vt terminlt hasznlhatott A terminl egy 9600 baud sebessg VTlOO-as volt, amely
25mternyi RS232-es kbellel csatlakozott a PDP ll-eshez; a kbelek az lmennye
zethez erstve futottak a dolgozszobmtl a szmtgpteremig.
A dolgozszobmban volt egy hifi-rendszer: egy rgi lemezjtsz s egy erst,
hangfalakkaL Vinyl ("bakelit") lemezekbl jelents gyjtemnnyel rendelkeztem: ott
sorakoztak a Led Zeppelin s a Pink Floyd albumai, s a tbbi klasszikus - rted, mire
gondolok.
Amikor leltem kdot rni, bekapcsoltam a cuccot, s feltekertem a hangert. gy
gondoltam, segt az sszpontostsban - de tvedtem.
Egy nap visszatrtem egy modulhoz, amit korbban a The Wall hallgatsa kzben
szerkesztettem. A kdhoz fztt megjegyzsek tele voltak az album dalszvegeibl
vett rszletekkel, illetve szerkeszti rtekezsekkel zuhanbombzkrl s sr cse
csemkrL
Akkor dbbentem r, mit tettem. A kd olvasjaknt tbbet tudtam meg a szerz
(vagyis sajt magam) lemezgyjtemnyrl, mint a problmrl, amelyet a kd meg
oldani igyekezett.
Rjttem, hogy egyszeren nem kdolok jl, ha kzben szl a zene. A zene nem
segt sszpontostani, st, a zenehallgats szemmel lthatan ltfontossg erforr
sokat von el az agyamtl, amelyekre pedig szksge lenne, hogy tiszta s jl tervezett
kdot alkosson.
Nem kizrt, hogy ez nlad mskpp mkdik. Lehet, hogy a zene neked tnyleg
segt a kdols ban. Sok embert ismerek, aki fejhallgatval a fejn r kdot. Elfogadom,
80 4. FEJEZET
hogy a zene segthet nekik, de ers a gyanm hogy valjban abban nyjt segtsget,
hogy belpjenek a Znba.
MEGSZAKrTS
Kpzeld el, hogy a munkallomsodnl lsz, s kdot rsz. Hogyan reaglsz, ha valaki
krdez tled valamit? Rmordulsz? Levltd a hajt? Testbeszddel jelzed neki,
hogy tnjn el, mert sok a dolgod? Rviden: gorombn vlaszolsz?
Vagy abbahagyod, amit ppen csinlsz, s udvariasan segtesz annak, aki elakadt?
gy viselkedsz vele, ahogy azt szeretnd, hogy veled viselkedjenek, ha elakad tl?
A goromba vlasz sokszor a Znbl rkezik. Neheztelhetsz, amirt kirngattak
a Znbl, vagy mert megakadlyoztak benne, hogy lemerlj a Zna bugyraiba.
A gorombasg tbbnyire mindkt esetben a Znhoz fzd viszonyodbl ered.
Nha azonban nem a Zna a hibs, csupn arrl van sz, hogy ppen valamilyen
bonyolult dolgot prblsz megrteni, ami sszpontostst kvn. Ha ez a helyzet, tbb
fle megolds is knlkozik.
A prmunka nagy segtsget nyjthat a megszaktsok kezelsben. A progra
mozprod kzben tarthatja a feladatot, mikzben te elintzel egy telefont, vagy v
laszolsz egy kollga krdsre. Amikor aztn visszatrsz a munkhoz, a prod segt,
hogy gyorsan visszarzdj a megszakts eltti szellemi kerkvgsba.
A tesztvezrelt fejleszts ugyancsak hasznos. Ha az egyik teszt kudarcot vall, akkor
pontosan rgzti, hol tartasz, gy egy megszakts utn visszatrhetsz a munkhoz, s
folytathatod a kd rst, amg az ki nem elgti az emltett teszt kvetelmnyeit.
Termszetesen mindig lesz valami, ami megszaktja a munkd, elvonja a figyelmed,
s idt rabol tled. Ilyenkor gondolj arra, hogy legkzelebb lehet, hogy neked kell
megzavarnod valakit, hogy segtsget krj. A profi hozzlls teht az elzkeny se
gtsgnyjts.
RI VLSG
Nha elfordul, hogy a kd egyszeren nem akar megszletni. Velem is megesett mr
ilyesmi, s msokat is lttam hasonl helyzetben: csak l az ember a szmtgpe
eltt, s semmi sem trtnik.
Ilyenkor ltalban ms elfoglaltsgot keresnk. Elolvassuk az emaileket. Elolvas
suk a Twitter-csiripeket. Knyveket, dokumentumokat, temterveket lapozgatunk
rtekezletet hvunk ssze. Beszdbe elegyednk valakivel. Brmit, csak ne kelljen b
mulni a munkalloms kpernyjt, amin az istennek sem akar megjelenni a kd.
Mi okozza az ilyen rvidzrlatokat? Mr szmos tnyezt - gondterheltsg, agg
ds, levertsg - emltettem, de az n esetemben van mg egy, ami nagyon fontos: az
alvs. Ha nem alszom eleget, egyszeren nem tudok kdot rni.
KDOLS 81
Furcsa mdon van egy nagyon egyszer megolds, ami szinte mindig mkdik,
knnyen kivitelezhet, s megadhatja a kell lendletet ahhoz, hogy egy csom kdot
megrj: keress egy programozprt.
Rejtly, hogy ez mirt mkdik olyan jl, de amint lelsz valaki mell, hogy k
zsen dolgozzatok, a zrlatot okoz problmk egy csapsra eltnnek. A kzs munka
fiziolgiai vltozst eredmnyez. Nem tudom, hogy mit, de hatrozottan rzem.
Valamifle kmiai vltozs ll be az agyarban vagy a testemben, ami ttri a gtat,
s jra beindt.
A prmunka nem tkletes megolds. A vltozs hatsa nha csak egy-kt rig
tart, aztn olyan slyos kimerltsg vesz ert rajtam, hogy el kell szakadnom a p
romtl, hogy lepihenjek valami nyugodt helyen. Mg az is elfordul, hogy csak lk
a prom mellett, s nem vagyok kpes tbbre, mint hogy mindenben egyetrtsek vele.
Tbbnyire azonban gy reaglak a prmunkra, hogy visszanyerem a lendletem et.
KREATrV TLTS
A rvidzrlatok elkerlse rdekben egyb dolgokat is szaktam tenni. Mr rgen meg
tanultam, hogy a kreatv alkotshoz (
"
kimenet
"
) kreatv tlts (
"
bemenet
"
) szksges.
Sokat olvasok, mghozz mindenfle tmrl: szoftver, politika, biolgia, csillag
szat, fizika, kmia, matematika, s gy tovbb. Ugyanakkor tapasztalatom szerint semmi
sem villanyazza fel jobban a kreativitsomat, mint a tudomnyos fantasztikum.
A te esetedben lehet, hogy valami ms ri el ugyanezt a hatst: taln egy j detek
tvregny, egy vers vagy akr egy romantikus trtnet. Azt hiszem, az egsznek az
a kulcsa, hogy a kreativits kreativitst szl (persze a htkznapok szrkesgbl val
meneklsnek is lehet szerepe). Ha nhny rra elszakadsz a mindennapi probl
mktl, s elgondolkodtat, kreatv tletekkel stimullod az agyad, szinte ellenllha
tatlan ksztetst rezhetsz arra, hogy te magad is alkoss valamit.
Engem a kreatv bemenetnek nem minden fajtja tlt fel alkot energival. A t
vzs pldul ltalban nem ksztet alkotsra. A mozi jobb egy kicsit, de csak egy
fokkal. A zenehallgats nem segt a kdrs ban, de a bemutatk s eladsok megter
vezsben, illetve a videk sszelltsban igen. Az n esetemben a kreatv tlts
egyetlen formja sem mkdik jobban egy rgi j ropernl.
HIBAKERESS
A hibakeresst illeten plyafutsom egyik legszrnybb lmnyt 1972-ben ltem t.
A fuvarosok szakszervezetnek szmlzrendszerhez csatlakoz terminlok min
dennap lefagytak egyszer-ktszer, s a hibt semmilyen mdon nem lehetett szn
dkosan elidzni. A hiba nem ktdtt egyetlen konkrt terminlhoz vagy alkal
mazshoz sem, s az sem szmtott, hogy a felhasznl mit csinlt a lefagys eltt.
82 4. FEJEZET
Az egyik percben a terminl tkletesen mkdtt, majd minden elzetes figyelmez
tets nlkl lefagyott.
A problma oknak feldertse hetekbe telt - a fuvarozk persze kzben egyre ide
gesebbek lettek. Minden alkalommal, amikor egy terminl lefagyott, az ott dolgoz
szemlynek abba kellett hagynia a munkt, s vrnia kellett, amg a tbbiek is befe
jeztk azt, amit ppen csinltak, hogy az illetkesek felhvhassanak minket, hogy in
dtsuk jra a rendszert. Valdi rmlom volt.
Az els pr hetet csupn adatgyjtssel tltttk: kikrdeztk azokat, akik lefa
gyst tapasztaltak Megkrdeztk tlk, hogy mit csinltak ppen, amikor a terminl
lefagyott, illetve azt megelzen. A tbbi felhasznltl megtudakoltuk, hogy szre
vettek-e brmi szakatlant a sajt terminljukon, amikor a lefagys bekvetkezett.
Minden krdst telefonon tettnk fel, mert a terminlok Chicago belvrosban vol
tak, mi viszont 30 mrflddel szakra, a kukoricamezk kztt dolgoztunk.
Nem voltak naplfjljaink, szmllink vagy hibakeres (debugger) programjaink.
A rendszer belsejhez kizrlag az ells panel fnyein s kapcsolin keresztl frtnk
hozz. Lellthattuk a szmtgpet, s krlnzhettnk a memriban, egyszerre
egy-egy memriaszt megvizsglva, de ez nem tarthatott t percnl tovbb, mert
a szakszervezetnek szksge volt a rendszerre.
Rszntunk nhny napot, s rtunk egy egyszer vals idej vizsgl programot,
amelyet a konzolunk szerept betlt ASR-33 telexgprl vezrelhettnk Ennek se
gtsgve! gy is krlszimatolhattunk a memriban, hogy kzben a rendszer futott.
Naplzeneteket adtunk a rendszerhez, amelyek a kritikus pillanatokban zeneteket
nyomtattak ki a telexgpen. A memriban szmllkat hoztunk ltre, amelyek sz
mon tartottk az esemnyeket, s rgztettk a rendszerelzmnyeket, hogy megvizs
glhassuk azokat a vizsglprogramunkkaL Termszetesen mindezt a semmibl kel
lett megrnunk, assembly nyelven, s a teszteket jjel kellett vgrehajtan unk, amikor
a rendszert nem hasznltk
A terminlok megszaktsvezreltek voltak. A terminlokra kldtt karaktereket
krkrs tmeneti trak (buffer) troltk Minden alkalommal, amikor egy soros
csatol befejezte egy karakter kldst, egy megszaktsra kerlt sor, s a rendszer
kldsre elksztette a krkrs tmeneti trban tallhat kvetkez karaktert.
Vgl rjttnk, hogy a terminlok lefagyst az okozza, hogy a krkrs tmeneti
trat kezel hrom vltoz nincs sszhangban. Fogalmunk sem volt, hogy mirt, de
legalbb volt egy nyom, amelyen elindulhattunk Valahol az 5 KSLOC-nyi felgyel
kdban megbjt egy hibs rsz, amelyik rosszul kezelte az egyik mutatt.
Ez az j informci azt is lehetv tette, hogy kzi mdszerrel "felolvasszuk" a le
fagyott terminlokat A vizsglprogram segtsgvel alaprtelmezett rtkeket tlt
hettnk az emltett hrom vltoz ba, s a terminlok varzstsre ismt letre keltek.
Vgl rtunk egy apr javtkdot, amelyik vgignzte az sszes szmll t, s ha azok
nem voltak sszhangban, kijavtotta az rtkket. A kdot kezdetben gy hvtuk
KDOLS 83
meg, hogy megnyomtunk egy klnleges, a felhasznli megszaktsokat kezel kap
csolt az ells panelen, amikor a fuvarozk felhvtak minket, hogy bejelentsenek
egy j abb lefagyst, ksbb azonban egyszeren msodpercenknt lefuttattuk a jav
tprogramot
gy egy hnappal ksbb a lefagysok problmja lekerlt a napirendrl, leg
albbis ami a fuvarozkat illette. Idnknt elfordult, hogy valamelyik terminljuk
lellt egy fl msodpercre, de a msodpercenknt 30 karakteres alapsebessgnl ezt
nemigen vette szre senki.
De mirt cssztak el egymstl folyton a szmllk? Tizenkilenc ves voltam, s
eltkltem, hogy kidertem.
A felgyel kdot Richard rta, aki idkzben tvozott, mert felvettk a fiskolra.
Kzlnk, akik ott maradtak a cgnl, senki sem ismerte a szban forg kdot, mert
Richard nem szvesen adta ki a kezbl. A kd az gyermeke volt, s neknk nem
engedte meg, hogy kutakodjunk benne. Richard tvozsval azonban megnylt az
t, gy ht elvettem a tbb hvelyk vastag iratkteget, s oldalrl oldalra elkezdtem
tnylazni.
A rendszerben tallhat krkrs vrakozsi sorok egyszer FIFO-adatszerkezetek
voltak, vagyis sima vrakozsi sorok (queue). Az alkalmazsok addig toltak (push)
karaktereket a vrakozsi sor egyik vgre, amg a sor meg nem telt, a megszaktsvezrl
fejek (interrupt head) pedig lepattintottk (pop) a karaktereket a sor msik vgrl,
ha a nyomtat kszen llt a fogadsukra. Amikor a sor kirlt, a nyomtat lellt.
A hibs kdrsz miatt az alkalmazsok azt hittk, hogy a sor tele van, mikzben
a megszaktsvezrlk meg voltak gyzdve rla, hogy a vrakozsi sor res.
A megszaktsvezrlk minden ms kdrsztl eltr
"
szlban
"
futnak, ezrt az
olyan szmllkat s vltozkat, amelyeket megszaktsvezrlk s egyb kdok is
kezelnek, vdelemmel kell elltni az egyidej frisstssei szemben. Esetnkben ez azt
jelentette, hogy ki kellett kapcsolnunk a megszaktsokat minden olyan kdrsz k
rl, amelyik hozznylt az emltett hrom vltozhoz. Mire leltem tnzni a kdot,
mr tudtam, hogy egy olyan helyet kell keresnem benne, ahol a kd mdostja a vl
tozk rtkt, de nem kapcsolja ki eltte a megszaktsokat.
Manapsg termszetesen rengeteg hatkony eszkz ll a rendelkezsnkre, ame
lyeknek a segtsgvel megkereshetjk az sszes kdrszt, amely mdostja az emltett
vltozkat. Pillanatok alatt kiderthetnnk, hogy melyek azok a kdsorok, amelyek
hozznylnak a vltozkhoz, s azt is, hogy melyek azok, amelyek elmulasztjk
a megszaktsok kikapcsolst. Mindez azonban 1972-ben trtnt, s nekem egyetlen
ilyen eszkz sem volt a kezemben. Csak a sajt szememre hagyatkozhattam.
Vgignylaztam a kd minden lapjt, a vltozk utn kutatva, de sajnos azt tall
tam, hogy a kd mindenhol hasznlja ket. gy vagy gy, de szinte minden kdlap
hozzjuk nylt. A hivatkozsok kz l jnhny nem kapcsolta ki a megszaktsoka t,
84 4. FEJEZET
mert csak olvashat s gy rtalmatlan hivatkozsokrl volt sz. Az volt a gond, hogy
az adott assemblerben nem igazn lehetett kiderteni a kd logikjnak vgigkvetse
nlkl, hogy egy hivatkozs csak olvashat-e. Ha a kd kiolvasott egy vltozt, k
sbb mdosthatta s elraktrozhatta azt. Ha ez olyankor trtnt, amikor a megsza
ktsok engedlyezve voltak, a vltozkba hibs rtkek kerlhettek.
A kd tbb napi intenzv tanulmnyozsa utn vgre rbukkantam a hibra. A kd
kzepn talltam egy rszt, amely frisstette a hrom vltoz egyikt, mikzben
a megszaktsok be voltak kapcsolva.
Szmolni kezdtem. A sebezhet rsz mintegy kt mikromsodpercig tartott.
A rendszerhez egy tucat terminl kapcsoldott, mindegyik 30 karakter/msodperc
sebessggel, teht krlbell 3 ezredmsodpercenknt kerlt sor megszaktsra. A fel
gyel kd mrett s a CPU rajeit figyelembe vve a hiba napi egy-kt lefagyst
kellett eredmnyezzen. Bing!
Termszetesen kijavtottam a hibt, de soha nem volt btorsgom kikapcsalni az
automatikus hibajavtt, amely megvizsglta s kijavtotta a szmllkat. A mai napig
nem vagyok meggyzdve rla, hogy kdban nem voltak ms hibk is.
A HIBAKERESSRE FORDfTOTT ID
Valamilyen okbl kifolylag a szoftverfejlesztk nem gy tekintenek a hibakeressre
fordtott idre, mint a tnyleges kdrssal tltttre. A hibakeress olyan nekik, mint
a termszet hv szava -egyszeren nincs mit tenni, muszj engedelmeskedni neki:
ha menni kell, akkor menni kell. Pedig a hibakeresssel tlttt id ppen olyan klt
sges egy zleti vllalkozs szmra, mint a kdrs, ezrt brmi, amit a kikszb
lse vagy a lervidtse rdekben tehetnk, hasznos.
Manapsg sokkal kevesebb idt tltk hibakeresssel, mint tz vvel ezeltt. Nem
mrtem le a klnbsget, de azt hiszem, gy a tizede lehet. Ezt a valban radiklis
cskkenst a tesztvezrelt fejlesztsnek (TDD, Test Driven Development) ksznhe
tem, amelyrl egy msik fejezetben lesz sz rszletesebben.
Akr a TDD, akr egy msik hasonlan hatkony fejlesztsi mdszer- elveit kve
ted, profiknt rd hrul annak a felelssge, hogy a hibakeressre fordtott idt a mi
nimumra -lehetleg nullra - cskkentsd. A "nulla" termszetesen elrhetetlen, en
nek ellenre ez a cl.
Az orvosok nem szvesen nyitnak fel jra egy beteget, hogy kijavtsanak egy hibt,
amelyet elkvettek. Ugyangy az gyvdek sem szvesen vllalnak el jra egy olyan
gyet, amelyet elvesztettek Azt az orvost vagy gyvdet, aki rendszeresen ilyesmit
3 n mondjuk nem ismerek aTDD-hez hasonlan hatkony szaftverfejlesztsi mdszert, de te taln
igen.
KDOLS 85
tesz, nem igazn tekintik hozzrtnek Ehhez hasonlan egy szoftverfejleszt, aki
tl sokat hibzik, ugyancsak szakszertlen viselkedst tanst.
OSZD BE AZ ERD!
A szaftverfejleszts maratoni futs, nem sprintels. A versenyt nem nyerheted meg
azzal, hogy a startvonaltl kezdve olyan gyorsan futsz, ahogy csak tudsz. A gyze
lemhez az vezet, ha beosztod az erforrsaidat s az energidat. Egy maratoni fut
egyarnt gyel a testre a verseny eltt s a verseny kzben. Egy profi programoz
ugyanilyen gondosan takarkoskodik az energijval s a kreativitsval.
TUDD, MIKOR KELL ABBAHAGYNOD!
Nem mehetsz haza addig, amg meg nem oldottl egy bizonyos problmt? Dehogynem,
st muszj is sznetet tartanod! Az alkotkedv s a szellemi frissessg ml llapot: ha
fradt vagy, megsznik. Ha ilyenkor tlrzva knzod a mkdskptelenn vlt agya
dat, hogy megoldj egy problmt, csak mg inkbb lefrasztod magad, s cskented az
eslyt annak, hogy a kocsiban hazafel vagy otthon, a zuhany alatt megvilgosodj.
Ha fradt vagy, s ezrt megakadsz, tarts sznetet, s adj eslyt a kreatv tudatalat
tidnak a problma megoldsra. Ha gyelsz az erforrsaidra, tbbet vgezhetsz r
videbb id alatt s kisebb erfesztssel. Oszd be a sajt erdet s a csapatod erejt,
ismerd meg az isteni szikrk kipattansnak ritmust, s hasznld ki ezt a ritmust
ahelyett, hogy felbortand.
HAZAFEL
n szmtalan problmt oldottam mr meg hazafel az autban. A vezets jelents
mennyisg mechanikus szellemi erforrst ignyel: a feladathoz szksged van
a szemedre, a kezedre s az agyad bizonyos rszeire, gy a munkahelyi problmkat
automatikusan kikapcsolod. A kikapcsols valamilyen oknl fogva lehetv teszi az
agyadnak, hogy ms, kreatvabb megoldsok utn kutasson.
A ZUHANY ALATT
A zuhany alatt ennl is tbbszr vilgosadtam meg. Lehet, hogy a kora reggeli vzper
met az, ami felbreszt, s felidzi az agyar ltal alvs kzben kidolgozott megoldsokat.
Amikor egy problma megoldst kutatod, nha tl kzel kerlsz a problmhoz,
ezrt nem ltod az sszes lehetsget. Elegns megoldsok kerlik el a figyelmedet,
mert az sszpontosts ereje elnyomja az agyadnak a kreatv gondolkodsrt felels
rszt. Ahhoz, hogy rlelj a megoldsra, nha az a legclravezetbb, ha hazamsz,
megvacsorzol, tvt nzel, lefekszel aludni, majd msnap reggel lezuhanyozol.
86 4. FEJEZET
KS S
A munkd sorn biztosan el fog fordulni, hogy tl lped a hatridt. Ez a legjobbak
kal s a legszorgalmasabbakkal is megesik. A becslseink nha egyszeren tvesnek
bizonyulnak, s kifutunk az idbl.
A kssek kezelsnek kulcsa a korai felismers s az szintesg. A legrosszabb eset
akkor kvetkezik be, ha tovbbra is azt mondod mindenkinek- egszen az utols pil
lanatig -, hogy idben ksz leszel, aztn cserben hagyod ket. Ne tedd. Helyette rend
szeresen mrd, mennyit haladtl a cl fel, s fektess le hrom\ tnyeken alapul cld
tumot: az idelis esetre, az tlagosra (nvlegesre) s a legrosszabbra. A hrom idpontot
a lehet legszintbben mrd fel: a remnyeidet ne ptsd bele a becslsbel Tudasd mind
hrom dtumot a csapatoddal s az rdekelt felekkel, s mindennap frisstsd ket.
REMNY
Mi van, ha az emltett dtumok azt vettik elre, hogy elfordulhat, hogy kicsszol
egy hatridb l? Tegyk fel pldul, hogy tz nap mlva lesz egy szakkillts, s a cg
be szeretn ott mutatni a termket. De tegyk fel azt is, hogy a becslsed - a hrom
szm, ami kifejezi, hogy idelis, norml (nvleges) s rossz esetben hny nap mlva
vgzel a feladatoddal- gy fest: 8/12/20.
Ne remnykedj, hogy telesen vgezni fogsz tz napon bell! A projekteket a remny
keds li meg. A remny tnkreteszi az temterveket, s megtpzza a programozk
hrnevt. A remny csak bajba kever. Ha a szakkillts tz nap mlva lesz, s az tla
gos haladst alapul vev becslsed 12 nap, akkor nem fogsz vgezni. Gondoskodj rla,
hogy a csapat s a tbbi rdekelt tisztban legyen a helyzettel, s ne engedj, amg el
nem llnak egy B-tervvel. Ne hagyd, hogy brki ms remnykedjen.
KAPKODS
Mi trtnik, ha a fnkd behvat, s arra kr, hogy prblj hatridre ksz lenni? Mi
a teend, ha a fnk ragaszkodik hozz, hogy
"
tgy meg minden tled telhett
"
?
Tartsd magad a becslseidhez! Az eredeti becslseid pontosabbak, mint brmilyen
vltoztats, amit a fnkd knyszert ki belled. Kzld a fnkkel, hogy mr mr
legelted a lehetsgeket (mert valban gy is tettl), s az egyetlen mdja annak, hogy
tartani tudd az temtervet, ha kevesebb feladattal kell vgezned. Ne hagyd, hogy kap
kodsra knyszertsenek!
J aj annak a szerencstlen programoznak, aki sszeroskad a nyoms alatt, s
beleegyezik, hogy megprblja tartani a hatridt! Az ilyen fejleszt rvidzras
4 Errl bvebben is sz lesz a becslsrl szl fejezetben.
KDOLS 87
megoldsokhoz folyamodik, s bennmarad tlrzni abban a hi remnyben, hogy
csodt tud tenni. Ez biztos receptje a katasztrfnak, mert hamis remnyt tpll
a programozban, a csapatban s a vezetkben, s lehetv teszi a szmukra, hogy
ne nzzenek szembe a valsggal, s ksleltessk az elkerlhetetlen slyos dnt
seket.
Nincs r md, hogy gyorsts a tempn. Nem tudsz gyorsabban kdot rni, s nem
tudod magad arra knyszerteni, hogy gyorsabban oldd meg a problmkat. Ha meg
prblod, csak lelasstod magad, s olyan katyvaszt lltasz el, ami mindenki mst
is lelasst.
Az egyetlen vlasz teht, amit a fnkdnek, a csapatodnak s minden rdekelt
flnek adhatsz, az, hogy megfosztod ket a remnytl.
TLRA
Teht a fnkd azt mondja:
"
Mi lenne, ha rdobnl naponta kt rt? s ha szar
baton is dolgoznl? Ugyan mr, csak kell lennie valamilyen mdnak arra, hogy be
szorts mg pr rt, hogy ksz legyen a cucc!
"
A tlrzs megoldst jelenthet, s nha szksges is. Megeshet, hogy egy egybknt
lehetetlen hatridt tz rs munkanapokkal s egy-kt szombattal tartani lehet, de ez
nagyon kockzatos. Nem valszn, hogy ha 20%-kal tbb idt dolgozol, 20%-kal tbb
munkt sikerl elvgezned. St mi tbb, a tlrzs biztosan nem segt, ha kt-hrom
htnl tovbb tart.
Ezrt ht nem szabad beleegyezned a tlrba, hacsak (l) szemlyesen meg nem
engedheted magadnak, (2) nem rvid tvra - legfeljebb kt htre - szl, s (3) nincs
a fnkdnek valamilyen B-terve arra az esetre, ha a tlrzs nem hozn meg a k
vnt eredmnyt.
Az utols felttel a legfontosabb. Ha a fnkd nem tudja, mit fog tenni, ha a tl
ra sem segt, akkor nem szabad rllnod a tlrzsra.
HINYOS TELJESTS
A szakszertlen viselkeds minden fajtja kz l, amelyet egy programoz tansthat,
taln az a legrosszabb, amikor azt lltod, hogy kszen vagy a munkval, pedig tudod,
hogy nem. Nha szimpla hazugsgrl van sz, ami ppen elg rossz, de sokkal alat
tomosabb, ha ehelyett trtelmezed a
"
ksz
"
fogalm t, meggyzd magad, hogy eleget
tettl, s tovbblpsz a kvetkez feladatra, azzal rvelve, hogy a fennmarad munka
ksbb is elvgezhet, amikor tbb idd lesz.
Ez a fajta viselkeds raglyos. Ha az egyik programoz erre vetemedik, a tbbiek
is kvetik a pldjt. Az egyikk aztn mg tovbb nyjtja a
"
ksz
"
fogalmt, a tb
biek pedig tveszik az j meghatrozst. Tapasztalatbl tudom, hogy ez milyen szr
nyen szlssges formt lthet: az egyik gyfeler gy dnttt, hogy a
"
ksz
"
azt je
lenti, hogy
"
checked-in
"
(benyjtva a vltozatkvet rendszerbe). A kdnak mg csak
88 4. FEJEZET
lefordthatnak sem kellett lennie. Nagyon knny "ksznek" lenni, ha semminek
nem kell mkdnie!
Ha egy fejlesztcsapat ebbe a csapdba esik, a vezetk azt fogjk hallani, hogy
minden rendben halad, s minden llapotjelents azt fogja mutatni, hogy mindenki
tartja a hatridket. Olyan, mintha vakok piknikeznnek a vasti sneken: egyikk
sem ltja a befejezetlen munka tehervonatt feljk robogni; csak akkor halljk meg,
amikor mr tl ks.
HATROZD MEG, MIT JELENT A .KSZ"!
A hinyos teljests problmjt gy kerlheted el, ha a "ksz
"
fogalma fggetlen meg
hatrozst kap. A legjobb megolds az, ha az zleti elemzk s a tesztelk automatizlt
elfogadsi teszteket5 ksztenek, amelyeknek teljeslnik kell, mieltt kijelenthetnd,
hogy kszen vagy. Ezeket a teszteket egy olyan tesztnyelven kell megrni, mint pldul
a FIT N ESSE, a Selenium, a RobotFX, vagy a Cucumber. A teszteknek vilgosaknak kell
lennik a megrendelk s az zletemberek szmra, s srn kell futtatni ket.
SEGTSG!
A programozs nehz. Minl fiatalabb vagy, annl kevsb hiszed el ezt. Hiszen csak
egy raks if s while utastsrl van sz! Ahogy azonban tapasztaltabb leszel, r
jssz, hogy az, ahogy ezeket az if s w h i l e utastsokat kombinlod, ltfontossg.
Nem eresztheted ket egyszeren ssze, hogy aztn a legjobbakat remld. Ehelyett
gondosan apr, ttekinthet egysgekre kell bontanod a rendszert, amelyeknek a le
het legfggetlenebbnek kell lennik egymstl - s ez az, ami nehz.
A programozs valjban annyira nehz, hogy egyetlen ember kpessgei nem
elegendek a sikerhez. Nem szm t, mennyire rted a dolgod, mindig tanulhatsz ms
programozk tleteibl s megoldsaibL
MSOKNAK SEGTENI
Mindezek miatt a programozk ktelessge, hogy segtsenek egymsnak. A szakmai
etika megsrtse, ha elszigeteled magad egy irodban, s elutastasz minden krde
zskdst. A munkd nem annyira fontos, hogy ne tudj valamennyi idt szaktani
msokra. A tisztessg megkvnja, hogy egy profi felajnlja a segtsgt, amikor csak
szksg van r.
Ez termszetesen nem azt jelenti, hogy ne lenne szksged nmi idre, amit
egyedl tltesz, de ezt szintn s udvariasan kell kzlnd. Megkrheted pldul
5 Lsd a 7. fejezetet (Elfogadsi tesztek)
KDOLS 89
a tbbieket, hogy dleltt 10 ra s dl kztt ne zavarjanak, hozztve, hogy dlutn
l s 3 kztt az ajtd nyitva ll.
Tisztban kell lenned azzal, hogyan boldogulnak a csapattrsaid. Ha szreveszed,
hogy valaki szemmel lthatan gondterhelt, ildomos felajnlani a segtsgedet. Meg
fogsz lepdni, mekkora hatst rhet el a segtsged. Nem arrl van sz, hogy annyival
okosabb lennl msoknl: a friss nzpont nmagban mlyrehat vltozsokat ered
mnyezhet egy problma megkzeltsben.
Amikor segtesz valakinek, lj le mell, s rjatok kdot kzsen. Sznj r legalbb
egy rt. Lehet, hogy nem fog addig tartani, de nem szabad, hogy gy tnjn, mintha
minl hamarabb szeretnl vgezni. Szenteld a figyelmedet a feladatnak, s tgy valdi
erfesztst a problma megoldsa rdekben. Valsznleg tbbet tanulsz majd, mint
amennyit a sajt tudsodbl tadtl.
SEGTSGET KRNI
Ha valaki felajnlja a segtsgt, lgy hls neki. Boldogan fogadd el a segtsget, s fi
gyelj a msikra. Ne vdelmezd a terletedet. Ne hrtsd el a segtsget azt gondolva,
hogy csak htrltatna, pedig gy is szort az id. Adj a msiknak legalbb fl rt. Ha
a segtsg ennyi id elteltvel is haszontalannak bizonyulna, udvariasan mentsd ki
magad, s ksznd meg a segtsget. Ne feledd: ahogy a tisztessg megkvnja tled,
hogy felajnld a segtsgedet, gy azt is megkveteli, hogy elfogadd msok segtsgt.
Tanuld meg, hogyan krhetsz segtsget. Ha elakadtl, sszezavarodtl, vagy
egyszeren csak nem tudod rlltani az agyadat egy problmra, krj meg valakit,
hogy segtsen. Ha a csapat kzs szabban dolgozik, csak htra kell dlnd, s azt
mondani: "Elkelne egy kis segtsg." Ha mindenkinek sajt helye van, vedd ignybe
a Y ammert vagy a Twittert, kldj emailt, vagy vedd fel a telefont, s hvj segtsget.
Ez is rsze a szakmai etiknak: egy profi nem hagyja, hogy elakadjon, amikor a se
gtsg knnyen elrhet.
Most lehet, hogy azt vrod, hogy nekelni kezdem a Kumbaya-t, mikzben boly
hos kis nyuszikk pattannak unikornisok htra, hogy boldogan repljenek t a re
mny s a vltozs szivrvnya felett. Mi sem ll tvolabb tlem. A programozk
igenis hajlamosak arra, hogy arrognsak s nteltek legyenek, s csak magukkal
trdjenek. Nem azrt vlasztottuk ezt a hivatst, mert szeretjk az embereket. A leg
tbbnk azrt lett programoz, mert szvesebben tanulmnyoz elmlylten steril,
mikroszkopikus rszleteket; zsonglrkdik prhuzamosan szmtalan fogalommal;
s ltalban vve szvesebben bizonytja nmagnak, hogy bolyg mret aggyal ren
delkezik, mint hogy ms emberek zrzavaros szemlyisgvel kelljen kapcsolatba
keverednie.
90 4. FEJEZET
Igen, ez sztereotpia. ltalnosts, ami all rengeteg kivtel van. A valsg azon
ban az, hogy a programozk ltalban nem csapatjtkosok6, mikzben az egytt
mkds ltfontossg a hatkony programozshoz. Mivel pedig a legtbbnk
szmra a csapatmunka nem sztns, szablyokra van szksgnk, amelyek egytt
mkdsre knyszertenek minket.
MESTEREK S TANTVNYOK
Ennek a tmnak egy egsz fejezetet szentelek a knyv ksbbi rszben, ezrt most
csak annyit mondank, hogy a kezd programozk tantsa a tapasztaltabbak kteles
sge. A tanfolyamok nem kpesek tadni a kell tudst. A knyvek nem kpesek meg
tantani a lnyeget. Semmi sem juttathat magasabb szintre gyorsabban egy ifj szoft
verfejlesztt, mint a sajt eltkltsge s az idsebbek rt tmutatsa. Ismt csak azt
mondhatom teht, hogy a szakmai etika megkvnja a tapasztaltabb programozktl,
hogy a szrnyuk al vegyk a fiatalabbakat, s oktsk ket, s ugyangy a kezd prog
ramozknak is szakmai ktelessge, hogy tmutatst krjenek az idsebbektL
IRODALOMJEGYZK
[Martin09]: Robert C. Martin: Clean Code. Upper Saddle River, NJ. Prentice Hall,
2009. (Magyarul: Tiszta kd. Budapest, Kiskapu, 2010.)
[Martin03]: Robert C. Martin: Agile Software Development: Principles, Patterns, and
Practices. Upper Saddle River, NJ. Prentice Hall, 2003.
6 Ez a frfakra sokkal inkbb ll, mint a nkre. Egyszer izgalmas eszmecsert folytattam @desi-vel
(D esi McAdammal, a DevChix alaptjval) arrl, hogy mi motivlja a ni programozkaL Elmond
tam neki, hogy amikor n mkdsre brok egy programot, az olyan, mintha ledfnm a srknyt,
mire azt felelte, hogy szmra s ms n ismersei szmra kdot rni olyan, mint letet adni
valaminek.
5. FEJEZET
TESZTVEZRELT FEJLESZTS
Tz v telt el a tesztvezrelt fejleszts (TDD, Test Driven Development) mdszernek
megszletse ta. A TDD az extrm programozs (XP) rszeknt indult, de az elveit
azta tvette a Serum s lnyegben az sszes tbbi agilis mdszertan is. Mg az agi
lis programozst nem kvet fejlesztcsapatok kzl is sokan alkalmazzk
1998-ban, amikor elszr hallottam a programozsnak
"
a teszt az els
"
megkze
ltsrl, nem igazn hittem benne. Ki ne ktelkedett volna? Elszr az egysgteszte
ket megrni? Ki tenne ilyen ostobasgot? Akkor azonban mr harminc ve profi prog
ramozknt kerestem a kenyeremet, s sok divatot lttam jnni-menni az ipargban.
TESZTVEZRELT FEJLESZTS 93
Megtanultam, hogy nem szabad semmit ibl elutastani, klnsen ha olyasvalaki
ajnlja, mint Kent Beck.
gy aztn 1999-ben az Oregon llambeli Medfordba utaztam, hogy tallkozzak Kent
tel, s elsajttsam tle a tesztvezrelt fejleszts fortlyait Megdbbent lmny volt!
Leltnk Kenttel a munkallomshoz, s nekilttunk megoldani egy egyszer
kis feladatot Java nyelven. n rgtn meg akartam rni a programot, de Kent nem
engedett, s lpsrl lpsre megmutatta, mit kell csinlni. Elszr megrta egy egy
sgteszt aprcska rszt, ami alig volt kdnak tekinthet, aztn ppen csak annyi
kdot adot hozz, hogy a teszt lefordthat legyen. Ez utn rt mg egy kis tesztet,
aztn megint egy kis kdot.
Az, hogy az egyes kdolsi ciklusok mennyit idt vettek ignybe, teljesen szakatlan
volt a szmomra. n ahhoz voltam hozzszokva, hogy majd' egy rig kdot rjak,
mieltt megprblhatnm lefordtani vagy futtatni azt, Kent azonban sz szerint fl
percenknt vgrehajtott egy-egy kdrszletet. Teljesen ledbbentem!
St mi tbb, felismertem a ciklusidt! Ugyanaz a ciklusid volt, mint amit vekkel
azeltt, klykknt alkalmaztam1, amikor jtkokat programoztam olyan rtelmezett
nyelveken, mint a Basic vagy a Logo. Ezekben a nyelvekben a program felptse nem
ignyel idt: csak bersz egy kdsort, s vgrehajtod, vagyis a ciklus nagyon gyors. Emi
att pedig ezeken a nyelveken nagyon gyorsan lehet nagy mennyisg programot rni.
Az igazi programozs vilgban azonban ez a ciklusid kptelensgnek tnt. Az
igazi programozs sorn rengeteg idt kellett kdrssal tlteni, majd mg tbbet az
zal, hogy a kd lefordthat legyen - s mg annl is tbbet a kd hibamentestsvel.
A fenbe is: n C++-programoz vagyok! A C++-ban pedig le kell fordtani (compile),
s ssze kell szerkeszteni (link) a kdot, ami perceket, nha rkat vesz ignybe!
A harminc msodperces ciklusidt elkpzelhetetlennek tartottam.
Kent azonban ott lt, s harminc msodperces ciklusokban lefzt a Java-prog
ramjt, s semmi sem utalt r, hogy hamarosan lasstania kne. Kent irodjban las
san rbredtem, hogy ezt az egyszer mdszert kvetve valdi programnyelveken
programozhatok a Logo ciklusidej vel! Beleszerettem a dologba.
AZ ESKDTSZK HATROZOTT
Azta megtanultam, hogy a tesztvezrelt fejleszts sokkal tbb egy egyszer trkknl,
amely lervidti a ciklusidt A TDD mdszertana szmtalan elnyt knl, amelyeket
a kvetkezkben rszletesen bemutatok
l Az akkori nzpontom szerint mindenki klyknek szmtott, aki fatalabb volt 35 vesnL A hszas
veim j rszt azzal tltttem, hogy buta kis jtkokat rtam rtelmezett nyelveken: rhborkat,
kaland jtkokat, lversenyeket, kgys jtkokat, szerencsejtkokat- amit csak el tudsz kpzelni.
94 5. FEJEZET
Elszr azonban le kell szgeznem az albbiakat:
Az eskdtszk hatrozott.
A vitnak vge.
A GOTO kros.
A TDD pedig mkdik.
Igen, az vek sorn sok-sok ellentmondsos cikk s hlagbejegyzs szletett s szle
tik mg ma is a tesztvezrelt fejlesztsrL Kezdetben komoly kritikkat rtak rla- mel
lette s ellene egyarnt-, de manapsg mr csak res sznoklatokkal tallkozik az em
ber. A lnyeg az, hogy a TDD mkdik, s ezt mindenkinek illene tudomsul vennie.
Tudom, hogy ezek kemny s ellentmondst nem tr szavak, de a tapasztalatokat
figyelembe vve azt hiszem, hogy ugyangy, ahogy a sebszeknek sem kell rveket
sorolniuk a kzmoss mellett, a programozknak sem kell tbb a tesztvezrelt fej
leszts vdelmre kelnik.
Hogyan is tekinthetnd magadat profinak, ha nem tudod biztosan, hogy minden
kdod mkdik? Honnan tudhatnd, hogy minden kdod mkdik, ha nem ellen
rzd minden alkalommal, amikor vltoztatsz rajta valamit? Hogyan tesztelhetnd
minden alkalommal a kdot, amikor vltoztatsz rajta valamit, ha nincsenek automa
tizlt egysgtesztjeid, amelyek nagyon magas lefedettsget biztostanak? Hogyan k
szthetnl nagyon magas lefedettsget biztost automatizlt egysgteszteket, ha nem
kveted a tesztvezrelt fejleszts elveit?
Az utols krds nmileg rszletesebb magyarzato t ignyel. Elszr ugyanis tisz
tznunk kell, hogy pontosan mit is rtnk tesztvezrelt fejleszts alatt.
A TESZTVEZRELT FEJLESZTS HROM TRVNYE
l. Tilos brmilyen zemi kdot rn od, amg elbb nincs egy nem teljesl egy
sgteszted.
2. Csak annyit szabad megrnod egy egysgtesztbl, amennyi elgsges a ku
darchoz - a le nem fordthatsg pedig kudarcnak szmt.
3. Csak annyit szabad megrnod az zemi kdbl, amennyi elgsges ahhoz,
hogy a jelenleg nem teljesl teszt sikerrel fusson le.
Ez a hrom trvny egy krlbell harminc msodperces ciklus ba knyszert. Elszr
megrod egy egysgteszt egy apr rszt. Pr msodpercen bell azonban muszj
megemltened egy olyan osztly vagy fggvny nevt, amelyet mg nem rtl meg,
gy az egysgteszt lefordtsa kudarcot vall. Ezrt meg kell rnod a teszt lefordtst
lehetv tev zemi kdot, ennl tbbet azonban tilos rnod, gy az egysgteszt kd
jnak bvtsvel kell folytatnod a munkt.
TESZTVEZRELT FEJ LESZTS 95
gy megy krbe-krbe a ciklus. Egy kicsivel bvted a tesztkdot, aztn egy kicsi
vel az zemi kdot. A kt kdfolyam prhuzamosan nvekszik egymst kiegszt
sszetevkk: a tesztek gy illeszkednek az zemi kdhoz, mint egy antitest egy an
tignhez.
AZ ELNYK LISTAJA
BIZONYOSSG Ha a szakmdban a tesztvezrelt fejleszts elveit kveted, akkor min
den nap tesztek tucatjai t, minden hten tesztek szzait, s minden vben tesztek ezreit
fogod megrni, ezen fell pedig ezeket a teszteket a kezed gyben fogod tartani, s
minden alkalommal le fogod futtatni, amikor vltoztatsz valamit a kdon.
n vagyok a vezet fejlesztje s karbantartja a FITNESSE2 nev, Java alap esz
kznek, amely az elfogadsi tesztek automatizlsra szletett. E knyv rsnak ide
jn a FIT N ESSE 64 OOO kdsorbl llt, amelybl 28 OOO-et tbb mint 2200 nll egy
sgteszt tartalmazott. Ezek a tesztek az zemi kdnak legalbb a 90%-t lefedik3, s
krlbell 90 msodpercbe telik lefuttatni ket.
Minden alkalommal, amikor vltoztatok valamit a FITNESSE brmelyik rszn,
egyszeren lefuttatar az egysgteszteket Ha teljeslnek, majdnem biztos lehetek
benne, hogy a vltoztats nem tett semmit mkdskptelenn. Mennyire biztos
a
"
majdnem biztos
"
? Elgg ahhoz, hogy a kd tadsra (leszlltsra) ksznek legyen
minsthet.
A FITNESSE minsgellenrz folyamata az ant release parancs. Ez a parancs
az alapoktl jrapti a FITNESSE-t, majd lefuttatja az sszes egysg- s elfogadsi
tesztet Ha ezek mind teljeslnek, a kd tadsra ksz.
HIBA-BEFECSKENDEZS! ARNY A FITNESSE nem ltfontossg alkalmazs. Senki
sem hal meg, s nem is veszt dollrmillikat, ha valahol hiba marad benne, ezrt
megengedheter magamnak, hogy tadhatnak tekintsem pusztn a sikeresen lefut
tesztek alapjn. Msrszrl azonban a FITNESSE-nek tbb ezer felhasznlja van. Sze
rencsre, annak ellenre, hogy a rendszer az elmlt vben 20 OOO j kdsorral bvlt,
a hibalistja csupn 17 programhibt tartalmaz (amelyeknek a tbbsge kozmetikai
jelleg), gy tudom, hogy a hiba-befecskendezsi arnyar nagyon alacsony.
Ez nem elszigetelt eset.Szmos jelents4 s tanulmnt rt le ehhez hasonlan jelen
ts hibaarny-cskkenst. Az IBM-tl a Microsoftig, a Sabre-tl a Symantecig, egyre
2 http://fitnesse.org
3 A 90% a minimum. A vals szm ennl magasabb, de nehz pontosan kiszmtani, mert a lefedetts
get mr eszkzk nem ltjk a kls folyamatokban, illetve a catch blokkokban fut kdokat.
4 http://www.objectmentor.com/omSolutions/agile_customers.html
5 [Maximilien], [George2003], [Janzen2005], [Nagappan2008]
96 5. FEJEZET
tbb cg s fejlesztcsapat tapasztalta a hibaarny ktszeres, tszrs vagy akr tzsze
res cskkenst. Ezeket a szmokat egyetlen profi sem hagyhatja figyelmen kvl.
BTORSG . Mirt nem javtasz ki egy rossz kdot, amint felfedezed? Amikor egy
elrontott fggvnnyel tallkozol, az els reakcid az, hogy "Ez egy katyvasz! Ki kell
pucolni!
"
- a msodik viszont ez: "n hozz nem nylok!". Mirt? Mert tudod, hogy
ha hozznylsz, azt kockztatod, hogy tnkreteszed a kdot. Ha pedig tnkreteszel
valamit, akkor meg kell venned - onnan kezdve mr a tid.
De mi lenne, ha biztos lehetnl benne, hogy a tisztogats nem tett tnkre semmit?
Ha te is rendelkeznl a korbban emltett bizonyossggal? Mi lenne, ha megnyom
hatnl egy gombot, s 90 msodpercen bell tudnd, hogy a vltoztatsaid semmit
nem tettek mkdskptelenn, s csak jtkony hatssal voltak a kdra?
Ez az egyik legnagyobb elnye a tesztvezrelt fejlesztsnek. Ha van egy tesztcso
magod, amelyben megbzol, egyltaln nem kell flned a vltoztatstL Ha rossz k
dot ltsz, azon nyomban kitisztthatod. A kd agyagg vlik, amit biztonsgosan
egyszer s tetszets szerkezetekk formlhatsz.
Amikor egy programoz nem fl tbb a tisztogatstl, akkor tisztogatni kezd,
a tiszta kd pedig ttekinthetbb, knnyebben mdosthat, s knnyebben bvt
het. A hibk eslye tovbb cskken, mert a kd egyszerbb vlik, a kdalap pedig
egyenletesen javul az ipargban megszakott rothads helyett.
Melyik profi programoz hagyn, hogy a rothads folytatdjon?
DOKUMENTCi. Hasznltl mr valaha kls fejleszts keretrendszert? A fejleszt
gyakran mellkel hozz egy csinosan formzott kziknyvet, amelyet a dokument
cirk ksztettek. Egy tipikus kziknyvben van vagy 27 darab 20x25 centimteres,
fnyes, sznes kp, krkkel s nyilakkal, a htoldalukon szvegekkel, amelyek elma
gyarzzk, hogyan kell belltani, zembe helyezni s kezelni az adott keretrendszert
A knyv vgn, a fggelkben pedig gyakran egy csnya kis rsz kap helyet, amelyben
a kdpldkat tallod.
Mit lapozol fel elszr a kziknyben? Ha programoz vagy, akkor a kd pldkat.
Azrt a kdhoz lapozol, mert tudod, hogy az elrulja neked az igazsgot. A 27 darab
20x25-s, fnyes, sznes kp, krkkel, nyilakkal s a htoldalon szveggel, lehet, hogy
szp, de ha tudni szeretnd, hogyan kell hasznlni a kdot, akkor a kdot kell elolvasnod.
Ha a tesztvezrelt fejleszts hrom trvnyt kveted, az ltalad ksztett egysg
tesztek mindegyike egy-egy kdban megrt plda, amely elmagyarzza, hogyan kell
hasznlni a rendszert. Ha kveted a hrom trvnyt, akkor lesz egy egysgteszted,
amelyik lerja az sszes lehetsges mdjt annak, hogy miknt lehet ltrehozni a rend
szer egyes objektumait; egy msik, amelyik azt rja le, hogy milyen mdokon lehet
rtelmesen meghvni a rendszer egyes fggvnyei t; s gy tovbb. Mindenhez, amirl
tudnod kell, hogyan kell csinlni, lesz egy egysgteszt, amelyik rszletesen lerja.
TESZTVEZRELT FEJLESZTS 97
Az egysgtesztek dokumentumok, amelyek a rendszer legalacsonyabb szint felp
tst rjk le. Egyrtelmek, pontosak, olyan nyelven rjk ket, amelyet a clkznsg
megrt, s olyannyira formlisak, hogy vgrehajthatk. Alacsonyszint dokument
cibl nem ltezik ennl jobb. Melyik profi ne akarna ilyen dokumentcit?
FE LPITS ". Ha kveted a hrom trvnyt, s elszr a tesztjeidet rod meg, akkor egy
dilemmval szembeslsz. Gyakran pontosan tudod, milyen kdot akarsz rni, de
a hrom trvny kimondja, hogy elszr egy egysgtesztet kell elksztened, amelyik
kudarcot vall, mert a tesztelend kd - az, amit meg akarsz rni - mg nem ltezik.
A kdtesztelssei az a gond, hogy a tesztelend kdot el kell szigetelned. Gyakran
nehz egy olyan fggvnyt tesztelni, amelyik ms fggvnyeket hv meg. A teszt meg
rshoz tallnod kell valamilyen mdot arra, hogy levlaszd a krdses fggvnyt
a tbbirl. Ms szavakkal, az a kvetelmny, miszerint a teszt az els, arra knyszert,
hogy vgiggondold, mi a helyes felpts.
Ha nem a teszteket rod meg elszr, akkor semmi sem akadlyoz meg abban,
hogy a fggvnyeket egy ellenrizhetetlen masszba olvaszd ssze. Ha a teszteket k
sbb rod meg, a massza bemenett s kimenett taln ellenrizheted, de az egyes
fggvnyeket bajosan.
Ha viszont kveted a hrom trvnyt, s elszr a teszteket rod meg, egy olyan
er jn ltre, amely jobban tagolt felptsre knyszert. Melyik profi ne alkalmazna
olyan eszkzket, amelyek jobb felptst eredmnyeznek?
"
A teszteket igenis meg lehet rni ksbb is
"
- makacskodhatsz. Nem, nem lehet.
Pontosabban, bizonyos teszteket esetleg megrhatsz ksbb, s mg magasabb teszt
lefedettsget rhetsz el, ha gondosan mred azt. Az utlag megrt tesztek azonban
vdekez, mg az elre megrt tesztek tmad jellegek. Az utlagos teszteket olyanok
rjk, akik mr elmerltek a kdban, s ismerik a problma megoldst, ezrt ezek
a tesztek soha nem kpesek gy prbra tenni a kdot, mint az elzetesen megrtak.
A PROFIK VLASZTSA
A tanulsg mindebbl az, hogy a profik a tesztvezrelt fejlesztst vlasztjk. A TDD
olyan mdszer, amely nveli a bizonyossgat s a btorsgot, cskkenti a hibaarnyt,
s jobb dokumentcit, illetve felptst eredmnyez. Ha mindezeket figyelembe vesz
szk, kimondhatjuk, hogy a TDD elveit nem alkalmazni szakmaiatlan.
Ml NEM A TESZTVEZRELT FEJLESZTS?
Minden elnye ellenre a tesztvezrelt fejleszts nem valls, s nem is varzsige. A h
rom trvny kvetse egyik emltett elnyt sem szavatolja. Attl mg rhatsz rossz
kdot, hogy elszr a teszteket kszted el - st akr rossz teszteket is rhatsz.
98 5. FEJEZET
Ebbl kvetkezen lehetnek olyan helyzetek is, amikor a hrom trvny egysze
ren nem alkalmazhat, vagy nem praktikus kvetni ket. Az ilyen esetek ritkk, de
attl mg lteznek. Egyetlen profi szoftverfejlesztnek sem szabad kvetnie egy md
szert, ha az tbb krt okoz, mint amennyi hasznot hajt.
IRODALOMJEGYZK
[Martin09]: Robert C. Martin: Clean Code. Upper Saddle River, NJ. Prentice Hall,
2009. (Magyarul: Tiszta kd. Budapest, Kiskapu, 2010.)
[Martin03]: Robert C. Martin: Agile Software Development: Principles, Patterns,
and Practices. Upper Saddle River, NJ. Prentice Hall, 2003.
[Maximilien]: E. Michael Maximilien s Laurie Williams: Assessing Test-Drven
Development at IBM. http://collaboration.csc.ncsu.edu/laurie/Papers/MAXIMILIEN_
WILLIAMS.PDF
[George2003]: B. George s L. Williams: An Initial Investigation of Test-Drven
Development in Industry. http://collaboration.csc.ncsu.edu/laurie/Papers/TDD
paperv8.pdf
[Janzen2005]: D. Janzen s H. Saiedian: Test-drven development concepts,
taxonomy, and future direction. IEEE Computer, Volume 38, Issue 9, 43-50. oldal
[Nagappan2008]: Nachiappau Nagappan, E. Michael Maximilien, Thirumalesh
Bhat s Laurie Williams: Realizing quality improvement through test driven
development: results and experiences of four industrial teams. Springer Science+ Bu
siness Media, LLC 2008: http: / /research.microsoft.com/en-us/projects/esm/
nagappan_ t dd. pdf
6. FEJEZET
GYAKORLS
Minden profi vgez kszsgfejleszt gyakorlatokat, hogy a megfelel szinten tartsa
a szakmai tudst. A zenszek sklznak, a labdargk gumiabroncsokon gzolnak
t, az orvosok a sebek sszevarrst s a klnfle sebszi eljrsokat, mg az gyv
dek az rvelst, a katonk pedig a harci feladatokat gyakoroljk. Ha a teljestmny,
a sebessg s a minsg szmt, a profik gyakorolnak. Ez a fejezet arrl szl, hogy mi
mindent tehet egy programoz, hogy megrizze a szakmai sznvonalt.
GYAKORLS 101
NHNY SZ A GYAKORLSRL
A gyakorls nem jdonsg a szoftverfejlesztsben, de csak az ezredfordul utn is
mertk fel, hogy valjban gyakorlsrl van sz. Az els formlis gyakorlprogram
taln ez volt ([K&R-C], 6. oldal):
main()
{
printf("hello, world\n");
Ki az, aki kzlnk mg soha nem rta meg ezt a programot ilyen vagy olyan for
mban? Ezt a programot hasznljuk arra, hogy prbra tegynk egy j fejlesztkr
nyezetet vagy programozsi nyelvet - ha meg tudjuk rni, s vgre tudjuk hajtani, az
bizonytja, hogy brmilyen programot kpesek vagyunk megrni s futtatni az adott
nyelven vagy krnyezetben.
Jval fiatalabb koromban az egyik els program, amelyet megrtam egy j szm
tgpen, a SQINT volt, amely egsz szmok ngyzett szmtotta ki. Elksztettem
assembler, BASIC, FORTRAN, CO BOL s kismilli ms nyelven, hogy bizonytsam,
hogy arra tudom utastani a szmtgpet, amire csak akarom.
A szemlyi szmtgpek a 80-as vek elejn jelentek meg az ruhzak polcain.
Amikor csak a kezembe kerlt egy, pldul egy VIC-20-as, egy Commodore-64-es
vagy egy TRS-80-as, rtam egy aprcska programot, amely "\
"
s
"
/
"
karakterek vg
telen sort rta ki a kpernyre. A program ltal eredmnyezett sorminta kellemes
volt a szemnek, s sokkal bonyolultabbnak nzett ki, mint amilyen az azt elllt
program volt.
Br az ehhez hasonl kis programok termszetesen gyakorlprogramok voltak,
a programozk ltalban vve nem gyakoroltak. szintn szlva, az tlet fel sem me
rlt bennnk. Tlsgosan lekttt minket a kdrs ahhoz, hogy a kszsgeink
fejlesztsvel foglalkozzunk. Egybknt is, mi rtelme lett volna? Akkoriban a prog
ramozs nem ignyelt gyors reaglkpessget vagy hajlkony ujjakat. Egszen a 70-es
vek vgig nem hasznltunk kpernys szerkesztprogramokat. Az idnk nagy r
szt a kd lefordtsra vrva, vagy iszonytatan hossz kdok hibamentestsvel
tltttk. A tesztvezrelt fejleszts rvid ciklusidejt mg nem talltk fel, ezrt nem
is volt szksgnk arra a finomhangolsra, amit csak a gyakorls adhat meg.
HUSZONKT NULLA
A programozs hskora ta azonban sokminden megvltozott. Bizonyos dolgok ha
talmas mrtkben, mg msok csak alig vagy egyltaln nem.
Az egyik els szmtgp, amelyen programot rtam, egy PDP-8/I volt, 1,5 mik
roszekundumos ciklusidvel, s 4096 12 bites szval a magmemriban. A mrete
egy htszekrnyvel vetekedett, s jelents mennyisg ramot fogyasztott. A lemezes
102 6. FEJEZET
meghajtja 32K-nyi 12 bites szt tudott trolni, s egy 10 karakter/msodperc sebes
sg telexgpen keresztl kommunikltunk vele. Azt hittk, ez aztn igazn ers gp,
s csodkat tettnk vele.
Nemrg vettem egy Macbook Pro laptopot. 2,8 G Hz-es ktmagos processzor, 8 GB
RAM s egy 512 GB-os SSD-lemez van benne, s 17 hvelykes, 1920x1200 kppont
felbonts LED-kpernyvel rendelkezik. Magammal viheter a htizskomban, elfr
az lemben, s nem egszen 85 wattot fogyaszt.
A laptopom nyolcezerszer gyorsabb, ktmilliszar tbb memrival rendelkezik,
tizenhat milliszor nagyobb trterletet knl, mint a PDP-8/1, az energiafogyasztsa
s a helyignye az 1%-a, az ra pedig a huszontd rsze a PDP-8/1-nek. Vgezzk
csak el a szmtst:
8000 x 2 OOO OOO x 16 OOO OOO x 100 x 100 x 25 = 6,4 x 1022
Ez hatalmas szm. A huszonkettedik hatvnyrl beszlnk! Ennyi angstrom tall
hat a Fld s az Alfa Centauri kztt. Ennyi elektron van egy ezst dollrrmben.
Ennyiszer nagyobb a tmege a Fldnek Michael Moore-nl. risi szm. s itt l az
lemben - s valsznleg a tidben is.
s mit csinlok ezzel a 1022-szer nagyobb teljestmnnyel? Lnyegben ugyanazt,
mint amit a PDP-8/1 -vel tettem. I utastsokat, w h ile ciklusokat s rtkadsokat rok.
Persze jobb eszkzk, s jobb programozsi nyelvek llnak a rendelkezsemre
ezeknek az utastsoknak a megrsra. Az utastsok termszete azonban egsz id
alatt mit sem vltozott. Egy 2010-ben rt kdot egy programoz ugyangy megrt,
mint egy olyat, amelyet az 1960-as vekben rtak. Az ltalunk gyrt agyag ngy v
tized alatt alig vltozott.
FORDULSIID
Az a md azonban, ahogyan dolgozunk, drmai vltozson ment keresztl. A 60-as
vekben elfordult, hogy egy vagy kt napot kellett vrni egy fordts eredmnyre.
A 70-es vek vgn egy 50 OOO sorbl ll program lefordtsa akr 45 percig is eltart
hatott. Mg a 90-es vekben is a hossz fordtsi id volt a megszokott.
A mai programozknak azonban nem kell a fordtsra vrniuk.1 A programozk
nak ma olyan irdatlan er van az ujjaik alatt, hogy a piros-zld-jratervezs ciklussal -
msodpercek alatt vgezhetnek
n pldul egy 64 OOO soros Java-projekten dolgozom, amelynek a neve FIT N ESSE.
Egy teljes fordts (build), belertve valamennyi egysg- s egyttmkdsi tesztet,
l Az a tny, hogy egyes programozknak mgis vrniuk kell a lefordtott programvltozatokra, tra
gikus, s hanyagsgra utal. A mai vilgban a fordtst msodpercekben, s nem percekben - s vg
kpp nem rkban - kellene mrni.
GYAKORLS 103
kevesebb mint 4 perc alatt vgrehajthat. Ha az emltett tesztek sikerrel lefutnak,
a termk leszlltha t. Teht a teljes minsgellenrzsi folyamat, a forrskdtl az
tadsi g, kevesebb mint 4 percet ignyel! A fordtsi id szinte nem is mrhet. A rsz
leges tesztek msodpercekig tartanak. A fordtsi-tesztelsi ciklus sz szerint percen
knt tzszer vgrehajthat!
Persze nem mindig blcs dolog ilyen gyorsan haladni. Gyakran jobb lelasstani, s
vgiggondolni a dolgokat. 2 Mskor azonban az az igazn hatkony, ha az emltett
ciklust a lehet leggyorsabban tudjuk prgetni.
Ha valamit igazn gyorsan szeretnl tudni csinlni, az gyakorlst ignyel. A k
dolsi-tesztelsi ciklus gyors prgetshez tudnod kell nagyon gyors dntseket hozni.
A gyors dntshez rengeteg fle helyzet s problma felismersre kell kpesnek len
ned, s egyszeren tudnod kell, hogyan oldhatod meg ket.
'
Vegynk pldul kt, egymssal kzd harcmvszt. Mindkettejknek kpesnek
kell lennie arra, hogy felismerje, mivel prblkozik a msik, s megfelel vlaszt adjon
r, a msodperc trtrsze alatt. Harci helyzetben nem adatik meg az a luxus, hogy
kimerevthesd a pillanatot, tanulmnyozhasd az ellenfl testtartst, s vgiggondol
hasd, mi a megfelel vlasz. Harci helyzetben muszj azonnal reaglnod. Ezt valj
ban a tested teszi meg, mikzben az agyad egy magasabb szint stratgia kidolgoz
sn dolgozik.
Amikor percenknt tbbszr is vgrehajtod a kdolsi-tesztelsi ciklust, a tested
az, ami tudja, milyen billentyket kell lenyomnod. Az agyad sztns rsze felismeri
a helyzetet, s a msodperc trtrsze alatt a megfelel vlaszt adja r, mikzben az
agyad tbbi rsze szabadon sszpontosthat a magasabb szint problmra.
A sebessg a harcmvszetek s a programozs esetben egyarnt a gyakorlson
mlik - s az edzgyakorlatok is hasonlak: kivlasztunk nhny problma-megol
ds prt, s addig ismtelgetjk azokat, amg lmunkbl felbresztve is tudjuk.
Vegynk pldul egy olyan gitrost, mint Carlos Santana, akinek a fejben szl
zene egyszeren kiramlik az ujjain. Nem figyeli, hov kell helyeznie az ujjait, s ho
gyan kell pengetnie. Az agya szabadon tervezgetheti a magasabb szint meldi
kat s harmnikat, mikzben a teste alacsonyszint ujjmozgsokk alaktja ezeket
a terveket.
A jtk ilyesfajta knnyedsgt azonban csakgyakorlssallehet elrni. A zenszek
sklkat, etdket s riffeket ismtelgetnek jra meg jra, amg azok sztnsen be
ljk nem ivdnak
2 Ezt a mdszert hvja Rich Hickey
"
fgggy-vezrelt fejlesztsnek
"
(HDD, Hammock-Driven
Development).
104 6. FEJEZET
A KDOLK DDZSJA
2001 ta tartok bemutatkat a tesztvezrelt fejlesztsrl, amelynek az alapjt az lta
lam The Bowling Game-nek3 (Tekejtk) nevezett egyszer kis gyakorlat adja, ami
krlbell harminc percet ignyel. Van benne konfliktus, tetpont s a vgn megle
pets. A [PPP2003]-ban egy egsz fejezetet rtam errl a gyakorlatrl.
Az vek sorn tbb szz, de az is lehet, hogy tbb ezer alkalommal adtam el ezt
a bemutatt. Nagyon jl csinltam. lmombl felbresztve is kpes lettem volna r.
A minimumra cskkentettem a billentyletseket, behangoltam a vltozneveket,
s addig finomtgattam az algoritmus szerkezett, amg tkletes nem lett. Akkoriban
ugyan nem tudtam, de ez volt az els katm.
2005-ben rszt vettem az XP2005 konferencin az angliai Sheffieldben, s megte
kintettem Laurent Bassavt s Emmanuel Gaillot mhelyt, a Coding Dojo-t (A k
dolk ddzsja vagy edzterme). A rsztvevk bekapcsolt laptoppal ltek, s egytt
kdoltak az eladkkal, a tesztvezrelt fejleszts szablyait kvetve, hogy megrjk
Conway
"
letjtkt
"
(Game of Life). A gyakorlatot
"
katnak
"
neveztk, s az tlet
eredetijt' Dave Thomasnak, a
"
Pragmatikusnak
"
5 tulajdontottk.
Azta sok programoz tvette ezt a harcmvszeti metafort a gyakorlatokra,
a
"
kdolk ddzsja
"
6 nv pedig, gy tnik, megragadt. Elfordul, hogy programo
zk egy csoportja sszejn, s gy edzenek egytt, mint a harcmvszek. Mskor
pedig nllan vgeznek formagyakorlatokat - megint csak ugyangy, mint a harc
mvszek.
gy egy vvel ezeltt fejlesztk egy csoportjt tantottam Omahban. Az egyik
ebdnl meghvtak, hogy csatlakozzak hozzjuk a kdol ddzsjukban. Csak b
multam, ahogy hsz programoz kinyitotta a laptopjt, s billentyletsrl billen
tyletsre kvette, amint a vezetjk vgigcsinlja a
"
Tekejtk
"
katt.
Egy dcizsban tbbfle tevkenysgre kerlhet sor. me nhny kzlk:
KATA
A harcmvszetekben a kata egy meghatrozott koreagrfit kvet mozdulatsor,
amelynek az elemei megfelelnek azoknak a mozdulatoknak, amelyeket egy prvia-
dalban az egyik kzd fl tenne. A cl, ami csak kzeltleg rhet el, a tkletessg.
A harcmvsz arra trekszik, hogy minden egyes mozdulatot tkletesen megtant-
3 Ez azta nagyon npszer kata (formagyakorlat) lett- egy Google-keresssel szmtalan vltozatot ta
llhatsz belle. Az eredeti itt tallhat: http://butunclebob.com/ArticleS.UncleBob.TheBowling
GameKata.
4 http://codekata.pragprog.com
5 A
"
Pragmatikus
"
jelz t azrt kell hasznlnunk, hogy megklnbztessk a
"
Nagy
"
Dave Thomastl
az OTI-tl.
6 http://codingdojo.org/
GYAKORLS 105
son a testnek, s a mozdulatokat kpes legyen elegns, raml egysgknt vgrehaj
tani. Egy jl vgrehajtott kata gynyr ltvny.
Brmilyen gynyr is azonban egy kata, a harcmvsz nem azrt tanulja meg,
hogy egy sznpadon eladja. A kata clja a test s az elme felksztse arra, hogyan
reagljon egy adott harci helyzetben. A clja az, hogy a tkletesre csiszolt moz
dulatokat sztnss s automatikuss tegye, hogy maguktl jjjenek, amikor szk
sg van rjuk.
A programozsi kata pontosan meghatrozott ("koreograflt") billentyletsek
s egrmveletek sorozata, amelyek egy bizonyos programozsi problma megoldst
modellezik. Valjban nem a problma megoldsa a cl, hiszen a megoldst mr is
mered. Csupn a mozdulatokat s a problma megoldsban szerepet jtsz dntse
ket gyakorlod.
Ebben az esetben is a tkletessg megkzeltse a cl. jra s jra megismtled
a gyakorlatot, hogy az agyadat s az ujjaidat megtantsd, hogyan reagljanak s mo
zogjanak. Ahogy gyakorolsz, a mozdulataid, st maguk a megoldsok is finomod
hatnak, s hatkonyabb vlhatnak.
A katasorozatok vgrehajtsa kivlan alkalmas arra, hogy megtanuld a klnfle
billentykombincikat s navigcis mveleteket, illetve elsajttsc az olyan md
szereket, mint a tesztvezrelt fejleszts (TDD) vagy a folyamatos bepts (CI, Con
tinuous Integration). A legfontosabb azonban az, hogy ezen a mdon remekl beget
heted a tudatalattidba a leggyakrabban elfordul problma-megolds prokat, gy
rgtn tudni fogod a megoldst, ha vals programozsi helyzetben tallkozol egy
problmval.
Mint minden harcmvsznek, egy programoznak is szm os klnbz ka tt kell
ismernie, s rendszeresen kell gyakorolnia azokat, hogy ne kopjanak ki az emlke
zetbL Sok katt tallhatsz pldul a http. //katas.softwarecraftsmanship.org vagy
a http://codekata.pragprog.com cmen. me nhny a kedvenceim kzl:
The Bowling Game: http://butunclebob.com/ArticleS.UncleBob.
TheBowlingGameKata
Prime Factors: http://butunclebob.com/ArticleS.UncleBob.
ThePrimeFactorsKata
Word Wrap: http:/!thecleancoder.blogspot.com/2010/10/craftsman-62-
darkpath.html
Ha igazi kihvst akarsz, prblj olyan tkletesen megtanulni egy ka tt, hogy zenre
is vgre tudd hajtani. Ezt nagyon nehz jl csinlni?
7 http://katas.softwarecraftsmanship.org/?p=7l
106 6. FEJEZET
WASA
Amikor dzsiu-dzsicuzni tanultam, a dczsban azzal tltttk a legtbb idt, hogy
prokban waskat gyakoroltunk. A wasa olyan, mint egy ktszemlyes kata. A po
zcikat s mozdulatokat pontosan az emlkezetnkbe vssk, s visszajtsszuk azo
kat. Az egyik kzd a tmad, mg a trsa a vdekez szerept jtssza. A mozdulato
kat jra s jra elismteljk, s minden mozdulatsor vgn szerepet cserlnk
A programozk hasonlan gyakorolhatnak a ping-pong nev jtk8 segtsgveL
Minden pr vlaszt egy katt vagy egy egyszer programozsi problmt. Az egyik
programoz r egy egysgtesztet, a msiknak pedig el kell rnie, hogy a teszt teljesl
jn. Ez utn a programozk szerepet cserlnek.
Ha a partnerek egy ismert ka tt vlasztanak, akkor az eredmny elre tudhat, gy
a programozk azt gyakorolhatjk, hogy milyen jl memorizltk a katt, s kom
mentlhatjk egyms billenty- s egrhasznlatt Msrszrl, ha egy j megoldand
problma mellett dntenek, a jtk rdekesebb vlhat, mert a tesztet r programoz
arnytalanul nagy mrtkben szabhatja meg a problma megoldsnak mdjt, s
hatalmban ll komoly megszortsokat is tennie. Ha a programozk pldul egy
rendez algoritmus megvalstst vlasztjk, a tesztr knnyen olyan korltozso
kat vezethet be a sebessgre s a memriaterletre nzve, amelyek jelents kihvs el
llthatjk a trst. A jtk gy igazi versengss s szrakoztatv vlhat.
RANDORI
A randori egyfajta ktetlen prharc. A dzsiu-dzsicu dcizsnkban klnfle harci
helyzeteket modelleztnk, aztn vgigjtszottuk azokat. Nha egyetlen ember jt
szotta a vdekez fl szerept, s a tbbiek sorban egyms utn tmadtk. Nha ket
ten vagy mg tbben tmadtak egyszerre egyre (ilyenkor ltalban a sensei volt a v
dekez, aki szinte mindig nyert), nha ketten kettre, s gy tovbb.
A szimullt harci gyakorlatok nem igazn ltethetk t a programozsra, de van
egy randori nev jtk, amelyet sok kdol dcizsban jtszanak. Nagyon hasonlt
a ktszemlyes waskra, ahol a prok egy problmt oldanak meg, de tbb rsztvev
vel, s a szablyokban van egy kis csavar. A szmtgp kpernyjt kivettik a falra,
az egyik rsztvev megr egy tesztet, majd lel. A kvetkez ember megrja a teszt
teljeslshez szksges kdot, majd a kvetkez tesztet, s gy tovbb. Lehet sorban
haladni, ahogy a rsztvevk az asztal krl lnek, de gy is, hogy jelentkezik, aki
a kvetkez szeretne lenni. A gyakorlat mindkt esetben nagyon szrakoztat lehet.
Figyelemre mlt, milyen sokat lehet tanulni egy ilyen gyakorlatbL Rengeteget
megtudhatsz arrl, hogyan oldanak meg msok egy problmt. Ez a tuds szlesti
a ltkrdet, s fejleszti a kszsgeidet.
8 http:/ /c2 .com/cgi/wiki?PairProgrammingPingPongPattern
GYAKORLS 107
SZLESTSD A LTKRD!
A profi programozk gyakran szenvednek attl, hogy a megoldand problmk nem
tl vltozatosak. A munkaadk gyakran egyetlen nyelvet, platforrot s tartomnyt
erltetnek rjuk, amelyben dolgozniuk kell. A ltkrt szlest hatsok nlkl ez
a gondolkodsod s a szakmai tapasztalataid nagyon egszsgtelen beszklshez
vezethet. Az ilyen helyzetben lev programozk esetben nem szokatlan, hogy felk
szletlenl rik ket az ipargon rendszeresen tspr vltozsok.
NYrL FORRS
A problma megelzsnek egyik mdja, ha azt teszed, ami az gyvdek s az orvo
sok: valamilyen jtkony cl munkt vgzel, pldul hozzjrulsz egy nylt forrs
program fejle'sztshez. Rengeteg ilyen projekt ltezik, s valsznleg nincs jobb
mdszer a szakmai palettd bvtsre, mint olyasmin dolgozni, ami valaki msnak
a szvgye.
Ha teht Java-programoz vagy, vegyl rszt egy Rails-projektben. Ha a munkahe
lyeden C++-kdok tmkelegt kell megrnod, keress egy Python-projektet, s vegyl
rszt abban.
A GYAKORLS ETIKJA
A profi programozk a szabadidejkben gyakorolnak. A munkaaddnak nem kte
lessge, hogy segtsen edzsben tartani, fejleszteni a kszsgeidet, s szlesteni a szak
mai tapasztalataid krt. A betegek nem azrt fizetnek az orvosnak, hogy gyakorolja
a sebek sszevarrst; a futballrajongk (ltalban) nem azrt vesznek jegyet, hogy
lssk, ahogy a kedvenceik gumiabroncsokon ugrlnak keresztl; a koncertltogatk
pedig nem azrt nylnak a pnztrcjukba, hogy azt hallgassk, ahogy a mvsz sk
lzik. Programozknt tged sem azrt tartanak, hogy gyakorolj.
Mivel azonban a szabadiddet fordtod gyakorlsra, nem kell ugyanazokat a nyel
veket s platformokat hasznlnod, mint a munkahelyeden. Tetszleges nyelvet v
laszthatsz, s annyi nyelven tarthatod szinten a tudsodat, amennyin csak akarod.
Ha :NET-mhelyben dolgozol, ebdidben vagy otthon gyakorolj egy kis Javt vagy
Ruby-t.
SSZEFOGLALS
gy vagy gy, de minden profi gyakorol. Azrt teszik, mert szeretnk a lehet legjob
ban vgezni a munkjukat. St mi tbb, a szabadidejkben gyakorolnak, mert tudjk,
hogy a sajt felelssgk- s nem a munkaadjuk -,hogy szinten tartsk a tudsu
kat. Amikor nem fizetnek, gyakorolj - azrt, hogy aztn jl meg akarjanak fizetni.
108 6. FEJEZET
IRODALOMJEGYZK
[K&R-C]: Brian W. Kernighan s Dennis M. Ritchie: The C Programming Language.
Upper Saddle River, NJ. Prentice Hall, 1975. (Magyarul: A C programozsi nyelv.
Mszaki Knyvkiad, 1996.)
[PPP2003]: Robert C. Martin: Agile Software Development: Principles, Patterns, and
Practices. Upper Saddle River, NJ. Prentice Hall, 2003.
7. FEJEZET
ELFOGADSI TESZTEK
v'
"
.
Egy profi szoftverfejlesztnek nem csak a programozsban, hanem a kommunikciban
is jnak kell lennie. Ne feledd, hogy a
"
szemt be, szemt ki
"
szably a programozkra
is rvnyes, ezrt a profi programozk gyelnek r, hogy a csapatuk tagjaival, illetye
az zleti vezetkkel tiszta s egszsges kommunikcit folytassanak.
A KVETELMNYEK KZLSE
A programozk s a cgvezetk kztti kommunikci egyik sarkalatos pontja a kve
telmnyek kzlse. Az zletemberek kzlik, hogy mire van szksgk, a programozk
ELFOGADSI TESZTEK 111
pedig felptik, amit szerintk az zletemberek lertak. A dolognak legalbbis gy
kellene mkdnie. A valsgban azonban a kvetelmnyek tadsa rendkvl nehz,
hibk tmkelegre lehetsget ad folyamat.
1979-ben, amikor a Teradyne-nl dolgoztam, egyszer megltogatott Tom, a telept
s karbantart csapat fnke, s arra krt, hogy mutassam meg neki, hogyan lehet egy
egyszer hibajelz rendszert kszteni az ED-402 szvegszerkeszt segtsgveL
Az ED-402 szerkesztprogram a Teradyne sajt PDP-8-klnjhoz, az M365-hz
kszlt. Szvegszerkesztnek kimondottan nagy tuds volt: beptett parancsnyelv
vel rendelkezett, amelyet mindenfle egyszer, szveges alkalmazs ksztsre hasz
nltunk
Tom nem tanult programozst, de az alkalmazs, amelyet elkpzelt, nem tnt bo
nyolultnak, ezrt gy gondolta, hogy gyorsan meg tudom tantani neki a szksges
ismereteket, pedig aztn maga is megrhatja az alkalmazst. Naiv mdon n is ugyanezt
hittem. Vgl is, az emltett parancsnyelv alig volt tbb egy a szerkesztsi parancsokhoz
kszlt makrnyelvnl, nagyon kezdetleges dntsi s ciklusszerkezetekkel.
gy ht leltem vele megbeszlni, hogy mit szeretne, mire legyen kpes az alkal
mazs. a nyitkpernyvel kezdte, n viszont megmutattam neki, hogyan hozhat
ltre egy szvegfjlt, amely a parancsnyelvi utastsokat trolja, s brzolhatja a szer
kesztsi parancsokat szimblumokkal ebben a parancsfjlban. Amikor azonban a
szembe nztem, csak ressget lttam. A magyarzatomnak az szmra nem volt
se fle, se farka.
Elszr szembesltem ezzel a problmval. Nekem pofonegyszer volt a szerkeszt
parancsait szimblumokkal brzolni. A Control+ B parancshoz pldul (ez helyezte
a kurzort az aktulis sor elejre) csak be kellett rnom a parancsfjlba, hogy "B.
Ez azonban Tomnak semmit sem mondott. Nem volt kpes thidaini a szakadkat
egy fjl szerkesztstl egy msik fjlt szerkeszt fjl szerkesztsig.
Tom nem volt buta. Azt hiszem, gyorsan rjtt, hogy ez nehezebb, mint amilyen
nek elsre gondolta, s nem akart idt s szellemi energit pazarolni arra, hogy egy
olyan nyakatekert dolgot tanuljon meg, mint egy szerkesztprogram vezrlse egy
szerkesztprogram segtsgveL
gy aztn lassan azon kaptam magam, hogy elkszter az alkalmazst, mikzben
ott l, s figyel. Hsz percen bell vilgoss vlt, hogy mr nem az a fontos neki,
hogy megtanulj a, hogyan ksztheti el az alkalmazst sajt maga, hanem hogy gyel
jen r, hogy n azt csinljam, amit akar.
Az egsz nap rment a dologra. Lert egy szolgltatst, n pedig megvalstottam,
mikzben figyelt. Az egyes ciklusok nem tartottak tovbb t percnl, gy nem volt
oka r, hogy elmenjen, s valami mst csinljon. Ha azt krte, hogy az alkalmazs
legyen kpes X-re, t percen bell kpes volt X-re.
Gyakran egy paprlapra rajzolta fel nekem, hogy mit szeretne. Bizonyos kvns
gait nehz lett volna az ED-402-ben megvalstani, ezrt ilyenkor valami mst java-
112 7. FEJEZET
soltam neki. Vgl megegyeztnk valamiben, s n gondoskodtam rla, hogy a dolog
mkdjn.
Amikor azonban kiprbltunk egy-egy ilyen szolgltatst, meggondolta magt.
ltalban valami ilyesmit mondott:
"
Ht igen. Ez nem pont gy mkdik, ahogy el
kpzeltem. Prbljuk meg mskpp.
"
rkon t babrltuk, gyurmztuk s noszogattuk az alkalmazst, hogy a kvnt
formba ntsk. Megprbltunk valamit, aztn valami mst, aztn megint mst.
Egyrtelmv vlt a szmomra, hogy a szobrsz, n pedig a szerszm, amivel kifa
ragja a szobrot.
Vgl megkapta az alkalmazst, amit szeretett volna, de fogalma sem volt, hogy
legkzelebb hogyan kszthetne el egy hasonlt. Ezzel szemben n fontos leckt kap
tam abbl, hogyan fedezik fel a megrendelk, hogy valjban mit is akarnak. Megta
nultam, hogy egy alkalmazsrl elzetesen alkotott kpk gyakran nem li tl a sz
mtgppel val tnyleges tallkozst.
KORAI PONTOSrTS
Mind az zleti vezetk, mind a programozk hajlamosak a korai pontosts (premature
precision) csapdjba esni. Az elbbiek pontosan tudni akarjk, hogy mit fognak
kapni, mieltt rblintannak egy projektre, mg az utbbiak pontosan tudni akar
jk, hogy mit kell leszlltaniuk, mieltt becslseket ksztennek a projekthez. Mind
kt fl olyan precizitst szeretne, ami nem lehetsges, s gyakran hajland egy va
gyont elklteni arra, hogy elrje.
A BIZONYTALANSG l ELV. A gond az, hogy minden mskpp nz ki papro n, mint egy
mkd rendszerben. Amikor a dntshozk megltjk, hogy miknt fest valami,
amit lertak, futs kzben, rjnnek, hogy teljesen mst akartak. Amint ltjk a k
vetelmnyeket testet lteni, mris jobban tudjk, mit is akarnak valjban - s az
ltalban nem az, amit ltnak.
Ebben a megfigyel s a megfigyels trgya kztti viszonyt ler bizonytalansgi
elv rhet tetten. Amikor bemutatsz egy szolgltatst a dntshozknak, tbb infor
mcihoz jutnak, mint amennyivel korbban rendelkeztek, s az j informcik ha
tssal vannak arra, ahogy az egsz rendszert ltjk.
Vgeredmnyben, minl pontosabban rjk le a kvetelmnyeket, annl kevsb
lesznek azok fontosak a rendszer megvalstsa sorn.
A BECSLSEK MIAT T IDEGESSG.. A fejlesztk szintn beleeshetnek a pontosts csap
djba. Tudjk, hogy elzetesen fel kell mrnik a rendszert, s gyakran azt hiszik,
hogy ez precizitst ignyeL Tveds.
Elszr is, mg ha a rendelkezsre ll informcik tkletesek is, a becslsek ha
tal mas szrst mutathatnak. Msodszor, a bizonytalansgi elv a korai pontostst
ELFOGADSI TESZTEK 113
rtelmetlenn teszi: a kvetelmnyek biztosan vltozni fognak, gy a pontosnak hitt
lers vitathatv vlik.
Egy profi programoz tudja, hogy a becslseket nem szabad tlzottan pontos k
vetelmnyekre alapozni, s hogy a becslsek csupn becslsek. Ennek rdekben
a profi programozk mindig mellkelnek hibaoszlopokat is a becslseikhez, hogy az
zleti dntshozk tudatban legyenek a bizonytalansgnak (lsd a becslsrl szl
10. fejezetet).
KSI TISZTZATLANSG
A korai pontosts gy kerlhet el, ha a pontostst a lehet legksbbre halasztjuk
A profi szoftverfejlesztk nem dolgoznak ki egy kvetelmnyt, amg kzvetlenl
a megvalstshoz nem rtek. Mindazonltal ez egy msik problmhoz, a ksi
tisztzatlansghoz (late ambiguity) vezethet.
A dntshozk gyakran nem rtenek egyet, s knnyebbnek talljk kimagyarzni
a nzetklnbsgeket, mint megoldst tallni a problmra. Mindig tallnak vala
milyen mdot arra, hogy gy fogalmazzk meg a szban forg kvetelmnyt, hogy
mindenki egyetrthessen vele, anlkl, hogy tnylegesen feloldank a vits krdse
ket. Tom DeMarco ezt gy jellemezte egyszer: "Ha egy kvetelmnyeket ler doku
mentum nem egyrtelm, az a dntshozk kztti vitra utal.
"
1
Termszetesen nem kell vita vagy nzetklnbsg sem ahhoz, hogy valami flre
rthet legyen. A dntshozk gyakran egyszeren felttelezik, hogy a kvetelmny
lerst olvask rtik, mire gondoltak. Lehet, hogy az szemszgkbl teljesen vilgos
a dolog, a programoznak azonban egszen mst jelenthet. Ez a "krnyezeti ktrtel
msg
"
akkor is jelentkezhet, amikor a megrendelk s a programozk kzvetlenl,
szemlyesen trgyalnak egymssal:
Sam (fnk): "Nomrmost, ezekrl a naplfjlokrl biztonsgi msolatot kell k-
szteni.
"
Paula: "J. Milyen gyakran?
"
Sam: "Minden nap.
"
Paula: "Rendben. Hov mentsk ket?
"
Sam: "Ezt hogy rted?
"
Paula: "Azt szeretnd, hogy egy bizonyos alknyvtrba kerljenek?
"
Sam: "Igen, az j lenne.
"
Paula: "Mi legyen a knyvtr neve?''
Sam: "Mit szlntok a "backup
"
-hoz?
"
Paula: "Persze, az tkletesen megfelel. Teht a naplfjlt minden nap a "backup"
knyvtrba kell rni. Mikor?
"
l XP lmmersion, 2000. mjus 3. http://c2.com/cgi/wiki?TomsTalkAtXplmmersionThree
114 7. FEJEZET
Sam: "Minden nap.
"
Paula: "gy rtem, milyen idpontban szeretnd kiratni a fjlt?
"
Sam: "Mindegy.
"
Paula: "Esetleg dlben?
"
Sam: "Nem, nyitvatarts alatt nem j. Az jfl jobb lenne.
"
Paula: "J, akkor legyen jfl.
"
Sam: "Nagyszer, ksznm!
"
Paula: "Nagyon szvesen.
"
Ksbb Paula kzli a csapattrsvat Peterrel a feladatot:
Paula: "A naplfjlt egy "backup
"
nev alknyvtrba kell msolni minden nap
jflkor.
"
Peter: "J. Mi legyen a fjl neve?''
Paula: "Szerintem a log.backup j lesz.
"
Peter: "Rendben.
"
Egy msik irodban Sam telefonon beszl a megrendelvel:
Sam: "Igen, igen, a naplfjlokat menteni fogjuk.
"
Carl: "J. Ltfontossg, hogy egyetlen naplfjlt se vesztsnk el. Hnapokkal
vagy akr vekkel ksbb is szksg lehet r, hogy vgig tudjuk nzni az
sszes naplfjlt, ha ramkimarads vagy valamilyen hiba trtnik, vagy
nzeteltrs merl fel.
"
Sam: "Ne aggdjon, ppen most beszltem PaulvaL A naplfjlokat egy "backup
"
nev knyvtrba fogjk menteni, minden nap jflkor.
"
Carl: "Rendben, ez nagyszeren hangzik.
"
Felttelezem, hogy az olvas rzkeli a ktrtelmsget. A megrendel kvnsga
az, hogy minden naplfjlt mentsenek, Paula azonban azt hiszi, hogy csak az utols
esti naplfjira van szksg. Amikor aztn a megrendel majd tbb hnap naplfjl
jainak a biztonsgi msolatait keresi, csak az elz jjelit fogja tallni.
Ebben az esetben Paula s Sam a hibs, ugyanis a profi fejlesztk (s dntshozk)
felelssge, hogy gondoskodjanak rla, hogy a kvetelmnyek teljesen egyrtelmek


Ez nem knny, s csak egy mdszert ismerek az elrsre.
ELFOGADSI TESZTEK
Az elogadsi teszt kifejezst tbbfle rtelemben s tl sokszor hasznljk. Vannak,
akik felttelezik, hogy azokrl a tesztekrl van sz, amelyeket a felhasznlk f uttatnak
ELFOGADSI TESZTEK 115
le, mieltt elfogadnnak egy programvltozatot. Msok azt hiszik, hogy a fogalom
a minsgellenrzsi teszteket jelenti. Elfogadsi tesztek alatt azonban azokat az z
leti vezetk s programozk ltal kzsen rt teszteket rtjk, amelyek azt hatrozzk
meg, hogy mikor minsl egy kvetelmny telestettnek.
A
"
KSZ
"
FOGALMNAK MEGHATROZSA
Profi szoftverfejlesztknt taln a "ksz
"
fogalmnak tisztzatlansgval szembes
lnk a leggyakrabban. Mit jelent, amikor egy programoz azt mondja, hogy elkszlt
egy feladattal? Abban az rtelemben ksz, hogy az adott modult teljes magabiztossg
gal leszllthatja? Vagy gy rti, hogy a modul kszen ll a minsgellenrzsre? Eset
leg csak arrl van sz, hogy megrta a kdot, s egyszer lefuttatta, de igazn mg nem
tesztelte?
Dolgoztam mr olyan csapatokkal is, akik mst rtettek a "ksz
"
s a "teljestve"
alatt. Volt olyan is, amelyik a "ksz
"
s a "ksz-ksz
"
kifejezst is hasznlta.
A profi szoftverfejlesztk azonban csak egyetlen meghatrozst ismerik a "ksz"
nek: a "ksz
"
azt jelenti, hogy
"
ksz
"
. Minden kdot megrtak, minden teszt teljesl,
a minsgellenrk s a dntshozk pedig elfogadtk a munkt. Ez a "ksz
"
.
De hogyan rhet el a "ksz
"
-sgnek ez a foka gy, hogy kzben gyorsan lehessen
haladni a munkafzisokkal? Automatizlt teszteket kell ltrehozni, amelyek sikeres
lefuts esetn minden fenti kvetelmnyt kielgtenek! Ha az adott modul elfogadsi
tesztjei teljeslnek, akkor vagy ksz.
A profi szoftverfejlesztk a kvetelmnyek meghatrozst egyenesen beptik az
automatizlt elfogadsi tesztekbe. A dntshozkkal s a minsgellenrkkel egytt
mkdve biztostjk, hogy ezek az automatizlt tesztek teljes s pontos meghatro
zst adjk a "ksz
"
fogalmnak:
Sam: "Nomrmost, ezekrl a naplfjlokrl biztonsgi msolatot kell kszteni."
Paula: "J. Milyen gyakran?
"
Sam: "Minden nap.
"
Paula: "Rendben. Hov mentsk ket?
"
Sam: "Ezt hogy rted?
"
Paula: "Azt szeretnd, hogy egy bizonyos alknyvtrba kerljenek?
"
Sam: "Igen, az j lenne.
"
Paula: "Mi legyen a knyvtr neve?''
Sam: "Mit szlntok a "backup
"
-hoz?
"
Tom (tesztel): "A "backup
"
tl ltalnos nv. Mit trolunk valjban ebben
a knyvtrban?
"
Sam: "A biztonsgi msolatokat.
"
Tom: "Minek a biztonsgi msolatait?
"
Sam: "A naplfjlokt.
"
Paula: "De ht csak egy naplfjl van.
"
116 7. FEJEZET
Sam:
"
Nem. Egy csom- minden napra egy."
Tom:
"
gy rted, egyetlen aktv naplfjl van, s sok biztonsgi msolat?"
Sam:
"
Termszetesen."
Paula:
"
! Azt hittem, csak egy tmeneti biztonsgi msolat kell."
Sam:
"
Nem. A megrendel mindet meg akarja rizni rkre."
Paula:
"
Ez nekem j, de rlk, hogy ezt tisztztuk."
Tom:
"
Az alknyvtr nevnek vilgosan el kell rulnia, hogy mi van a knyvtrban."
Sam:
"
Az sszes rgi, inaktv naplt troljuk benne."
Tom:
"
Akkor hvjuk "old_ inactive _ logs"-nak."
Sam:
"
Nagyszer."
Tom:
"
Mikor kell ltrehozni ezt a knyvtrat?"
Sam:
"
Tessk?"
Paula:
"
Szerintem a rendszer indulsakor kellene ltrehozni a knyvtrat, de csak
akkor, ha a knyvtr mg nem ltezik."
Tom:
"
Akkor ez megadja az els tesztnket. Elindtom a rendszert, megnzem,
hogy az old_ inactive _ logs knyvtr ltezik-e, aztn hozzadok
egy fjlt, lekapcsalom a rendszert, jraindtom, s meggyzdk rla, hogy
a knyvtr s a fjl mg mindig ltezik."
Paula:
"
Ezt a tesztet tl sokig tartana lefuttatni. A rendszerindts mr gy
is 20 msodperc, s egyre hosszabb lesz. Ezen kvl nem szeretnm minden
alkalommal jrapteni a teljes rendszert, amikor lefuttatar az elfogadsi
teszteket."
Tom:
"
Akkor mit javasolsz?"
Paula:
"
Hozzunk ltre egy SystemStarter (
"
rendszerindt") osztlyt. A f
program tltse be ezt az osztlyt egy halom StartupCommand (
"
ind
tparancs") objektummal, a Parancs (Command) mintt kvetve, majd
rendszerindts kzben a SystemStarter egyszeren utastsa az sszes
StartupCommand objektumot, hogy fussanak le. Az egyik indtpa
rancs hozza ltre az old_ inactive _ logs knyvtrat, amennyiben
az mg nem ltezik."
Tom: ", akkor csak azt a bizonyos StartupCommand parancsot kell tesztel
nem! Arra rhatok egy egyszer FITNESSE-tesztet."
Tom odamegy a tblhoz:
"
Az els rsz valahogy gy fog kinzni:"
given the command LogFileDirectoryStartupCommand
given that the old inactive logs directory does not
exist
when the command is executed
then the old inactive logs directory should exist
ELFOGAD
S
I TE
S
ZTEK 117
and it should be empty
(ha adott a LogFileDirectoryStartupCommand
s az old inactive logs knyvtr nem ltezik
a parancs vgrehajtsakor
akkor az old inactive logs knyvtrnak lteznie kell
s resnek kell lennie)
"A msodik rsz pedig gy:
"
given the command LogFileDirectoryStartupCommand
given that the old inactive logs directory exists
and that it contains a file named x
when the command is executed
then the old inactive logs directory should still
ex ist
and it should still contain a file named x
(ha adott a LogFileDirectoryStartupCommand
s az old inactive logs knyvtr ltezik
s tartalmaz egy x nev fjlt
a parancs vgrehajtsakor
akkor az old inactive logs knyvtrnak tovbbra is
lteznie kell
s tovbbra is tartalmaznia kell egy x nev fjlt)
Paula: "Igen, azt hiszem, ez kielgt teszt."
Sam: "Hha. Tnyleg szksges ez az egsz?''
Paula: "Sam, a kett kzl melyik nem elg fontos ahhoz, hogy meghatrozzuk?"
Sam:
"
Csak gy rtettem, hogy elg sok munka kigondolni s megrni ezeket
a teszteket.
"
Tom: "Persze, hogy az, de nem tbb, mint megrni egy manulis tesztelsi tervet.
Egy kzi tesztet jra s jra vgrehajtani pedig sokkal tbb munka.
"
KOMMUNIKCI
Az elfogadsi tesztek clja a kommunikci, a kvetelmnyek vilgoss s egyrtel
mv ttele. Lefektetskkel a fejlesztk, a dntshozk s a tesztelk mind tudomsul
veszik, hogy a rendszernek mi a tervezett viselkedse. A meghatrozs egyrtelmstse
az rintett felek egyttes felelssge. Egy profi szaftverfejleszt ktelessgnek rzi,
hogy egyttmkdjn a dntshozkkal s a tesztelkkel, hogy minden rintett fl
tisztban legyen vele, hogy mi az, aminek a felptsn dolgoznak.
118 7. FEJEZET
AUTOMATIZLS
Az elfogadsi teszteket mindig automatizlni kell. Egy szoftver letciklusban meg
van a maga helye a manulis tesztelsnek is, de ezeknek a teszteknek soha nem szabad
manulisnak lennik. Az ok egyszer: a kltsgek.
Vegyk a 7.1. brn lthat kpet, amelyen egy nagy internetes cg f minsgel
lenre egy dokumentumot tart a kezben. A dokumentum a manulis tesztelsi terv
tartalomjegyzke. A menedzser al klss kzi tesztelk egsz hada tartozik, akik
hathetente vgrehajtjk ezt a tervet- minden alkalommal tbb mint egy milli dol
lrrt. Azrt mutatta meg nekem a paprkteget, mert ppen egy rtekezletrl jtt,
amelyen a fnke arrl tjkoztatta, hogy 50%-kal cskkentenik kell a kltsgve
tst. "Melyik felt ne futtassam ezeknek a teszteknek?" - tette fel nekem a krdst.
7.1. bra
Manulis tesztelsi terv
A "katasztrfa
"
nagyon enyhe kifejezs lenne erre. A manulis tesztelsi terv vg
rehajtsnak kltsge olyan hatalmas volt, hogy gy dntttek, egyszeren felldoz
zk, s egytt lnek azzal a tnnyel, hogy a termkk felrl egyltaln nem fogjk
tudni, hogy mkdik-e!
ELFOGADSI TESZTEK 119
Egy profi szaftverfejleszt nem engedi meg, hogy ilyesmi megtrtnjen. Az elfo
gadsi tesztek automatizlsnak kltsge olyan alacsony a manulis tesztel si tervek
vgrehajtsnak kltsgvel sszehasonltva, hogy gazdasgilag semmi rtelme em
beri vgrehajtsra sznt parancsfjlokat rni. Egy profi fejleszt ktelessgnek rzi,
hogy gondoskodjon az elfogadsi tesztek automatizlsrL
Szmos nylt forrs s kereskedelmi eszkz ltezik az elfogadsi tesztek automa
tizlsnak elsegtsre. Ott van pldul a FIT N ESSE, a Cucumber, a cuke4duke, a ro
bot framework vagy a Selenium - hogy csak nhnyat emltsek. Ezek az eszkzk
mind lehetv teszik, hogy az automatizlt teszteket olyan formban add meg, amit
azok is kpesek elolvasni, megrteni, st akr szerkeszteni, akik nem rendelkeznek
programozi tudssal.
TBBLETMUNKA
Sam szrevtele a munkamennyisgrl rthet. Tnyleg gy tnik, mintha a fentihez
hasonl elfogadsi tesztek megrsa jelents tbbletmunkt ignyeine. A 7.1. brt
figyelembe vve azonban vilgos, hogy nincs is igazn sz tbbletmunkrl: ezeknek
a teszteknek a megrsa egyszeren a rendszer lersa. Mi, programozk, csak ilyen
rszletessg lers rvn tudhatj uk, mit jelent "ksznek" lenni. Az zleti vezetk csak
ilyen rszletessg lers rvn biztosthatjk, hogy a rendszer, amelyrt fizetnek, va
lban azt fogja csinlni, amire szksg van. Ezen fell pedig csak ilyen rszletessg
lers rvn lehet sikeresen automatizlni a teszteket. Ne tbbletmunkaknt tekints
ht ezekre a tesztekre: vedd figyelembe, milyen rengeteg idt s pnzt takartanak
meg. Ezek a tesztek akadlyozzk meg, hogy rosszul valstsd meg a rendszert, s ezek
teszik lehetv, hogy tudd, mikor vagy ksz.
Kl rRJA AZ ELFOGADSI TESZTEKET S MIKOR?
Egy idelis vilgban a dntshozk s a minsgellenrk rjk meg kzsen ezeket
a teszteket, s a fejlesztk ellenrzik, hogy kvetkezetesek-e. A valsgban ugyanak
kor a dntshozknak ritkn van idejk vagy kedvk a kell szint rszletessghez,
ezrt a feladatot tadjk az zleti elemzknek, a minsgellenrknek, st akr
a programozknak. Ha vgl a fejlesztknek kell megrniuk az elfogadsi teszteket,
gyelni kell r, hogy ne ugyanazok rjk ket, mint akik megvalstjk az ellenr
zend modult.
Az zleti elemzk rendszerint a derlt teszteseteket ( happy path) rjk meg,
mert ezek rjk le az zleti rtkkel rendelkez viselkedst. Aminsgellenrk ezzel
szemben a negatv utas teszteseteket (unhappy path), illetve a sarok- s hatreseteket
( corner case, boundary case), valamint a kivteleket fogalmazzk meg, mert az fel
adatuk azt vgiggondolni, hogy mi thet ki balul.
A "ksi pontosts
"
elvt kvetve az elfogadsi teszteket a lehet legksbb cl
szer megrni - rendszerint nhny nappal a krdses szolgltats megvalstsa
120 7. FEJEZET
eltt. Az Agile projektekben a teszteket az utn rjk meg, hogy a szolgltatsokat ki
vlasztottk a kvetkez Iteration-re vagy Sprint-re.
Az els nhny elfogadsi tesztnek kszen kell lennie az adott munkafzis (itera
tion) els napjra. Ez utn mindennap tovbbi teszteket kell elkszteni, amg el nem
rnk a munkafzis kzephez, amikorra az sszes tesztnek kszen kell llnia. Ha
a munkafzis kzepre nincs ksz valamennyi elfogadsi teszt, akkor tovbbi prog
ramozknak kell beszllniuk, hogy befejezzk ket. Ha ez srn elfordul, akkor
a csapatot tovbbi zleti elemzkkel, illetve minsgellenrkkel kell bvteni.
A FEJLESZT SZEREPE
Egy szolgltats megvalstsn akkor kezddik a munka, ha a hozz tartoz elfoga
dsi tesztek elkszltek. A fejlesztk vgrehajtjk az j szolgltats elfogadsi teszt
jeit, s megvizsgljk, mirt nem teljeslnek, majd az elfogadsi teszteket a rendszer
hez kapcsoljk, s megkezdik a kvnt szolgltats megvalstst, hogy a tesztek
sikeresen lefuttathatk legyenek:
Paula:
"
Peter, segtenl nekem egy kicsit?
"
Peter:
"
Persze, Paula. Mi a gond?
"
Paula:
"
Itt ez az elfogadsi teszt. Amint lthatod, nem teljesl.
"
given the command LogFileDirectoryStartupCommand
given that the old inactive _ logs directory does not
exist
when the command is executed
then the old_ inactive logs directory should exist
and it should be empty
Peter:
"
Persze, minden lmpa piros. Egyik eset sincs megvalstva. Megrom az
elst.
"
lscenariolgiven the command
lcreate commandl@cmdl
lcmdl
Paula:
"
Mr van createCommand mveletnk?
"
Peter:
"
Igen, a CommandUtilitiesFixture-ben, amit a mlt hten rtam meg.
"
Paula:
"
J, akkor most futtassuk le a tesztet.
"
Peter (lefuttatja a tesztet):
"
Ok, az els sor zld. Rtrhetnk a kvetkezre.
"
Az esetekkel (scenario) s a tartozkokkal (fixture) nem kell klnsebben trdnd;
ezek csupn
"
vezetkek
"
, amelyeket azrt kell megrnod, hogy a teszteket sszekap
csolhasd a tesztelni kvnt rendszerrel. Elg annyit tudnod, hogy mindegyik eszkz
ad r valamilyen mdot, hogy mintailleszts segtsgvel felismerd s rtelmezd
ELFOGADASI TESZTEK 121
a teszt utastsait, majd meghvd azokat a fggvnyeket, amelyek betplljk a teszt
ben szerepl adatokat a tesztelend rendszerbe. Ez nem ignyel klnsebb munkt,
s az esetek, illetve a tartozkok a legklnflbb tesztekben jrahasznosthatk
Mindebbl az a lnyeges, hogy a fejleszt feladata, hogy az elfogadsi teszteket
a rendszerhez kapcsolja, majd gondoskodjon rla, hogy a tesztek teljesljenek.
A TESZTEK MEGVITATSA S A PASSZV-AGGRESSZV VISELKEDS
A teszteket emberek rjk, akik nha hibznak. Elfordul, hogy a tesztek abban a for
mban, ahogy megrtk ket, rtelmetlennek bizonyulnak, amikor elkezded megva
lstani azokat. Lehet, hogy tl bonyolultak; lehet, hogy esetlenek; lehet, hogy ostoba
felttelezseket tartalmaznak - vagy egyszeren csak tvesek. Ez nagyon bosszant
lehet, ha te vagy az a fejleszt, akinek sikeresen futtathatv kell tennie az adott tesz
tet.
Profi szoftverfejlesztknt a te felelssged, hogy megvitasd a tesztet a szerzjvel,
s jobb tesztet esikarj ki belle. Amihez azonban soha nem szabad folyamodnod,
a passzv-aggresszv viselkeds, amikor ezt mondod:
"
Nekem aztn tkmindegy.
A teszt ezt mondja, gyhogy ezt fogom csinlni.
"
Ne feledd, hogy profiknt ktelessged, hogy segts a csapatodnak a lehet legjobb
szaftvert megalkotni. Ez azt jelenti, hogy mindenkinek oda kell figyelnie a hibkra
s mellfogsokra, s egytt kell mkdnik, hogy kijavtsk azokat:
Paula:
"
Tom, ez a teszt nincs teljesen rendben.
"
ensure that the post operation finishes in 2 seconds
(biztositani, hogy az utmvelet 2 msodperc alatt befeje-
zdjn)
Tom:
"
Nekem jnak tnik. A kvetelmny az, hogy a felhasznlknak ne kelljen
kt msodpercnl tbbet vrniuk. Mi a gond?
"
Paula:
"
A gond az, hogy erre csak statisztikai rtelemben adhatunk biztos-
tkot.
"
Tom:
"
Tessk? Ez mellbeszlsnek hangzik. A kvetelmny kt msodperc.
"
Paula:
"
Igen, de ezt csak az esetek 99,5%-ban tudjuk elrni.
"
Tom:
"
Paula, nem ez a kvetelmny.
"
Paula:
"
Viszont ez a valsg. Ennl tbbet semmikppen nem lehet garantlni.
"
Tom:
"
Sam dhrohamot fog kapni.
"
Paula:
"
Taln nem. Mr beszltem vele errl. Nincs ellene kifogsa, amg az t
lagelhasznl kt msodpercet vagy kevesebbet tapasztal.
"
Tom:
"
J, de akkor hogy rjar meg ezt a tesztet? Nem mondhatom egyszeren
azt, hogy
"
az utmvelet ltalban kt msodperc alatt befejezdik
"
.
"
Paula:
"
Fejezd ki statisztikailag.
"
122 7. FEJEZET
Tom:
"
gy rted, futtassak le ezer utmveletet, s gyzdjek meg rla, hogy leg-
feljebb t mvelet tart tovbb kt msodpercnl? Ez kptelensg.
"
Paula:
"
Dehogy. gy egy ra alatt lefuttathat az egsz. Mit szlnl ehhez?
"
execute 15 post transactions and accumulate times.
ensure that the Z secre for 2 seconds is at least 2.57
(vgrehajtani 15 utmveletet, s sszesteni az idej-
ket
meggyzdni rla, hogy a 2 msodperc Z-pontszma leg
albb 2, 57)
Tom:
"
Mi az rdg az a Z-pontszm?
"
Paula:
"
Csak egy statisztikai kifejezs, de ok, akkor legyen gy:
"
execute 15 post transactions and accumulate times.
ensure odds a re 99.5% that time will be le ss t han 2
seconds
(vgrehajtani 15 utmveletet, s sszesteni az idejket
meggyzdni rla, hogy 99,5% az eslye, hogy az id ke
vesebb lesz 2 msodpercnl)
Tom:
"
Igen, ez tbb-kevsb olvashat, de megbzhatk a mgtte lev matema
tikai szmtsok?
"
Paula:
"
Gondoskodom rla, hogy minden kztes szmts benne legyen a teszt
jelentsben, hogy ellenrizhesd ket, ha ktsgeid lennnek.
"
Tom:
"
Ok, ez rszemrl rendben.
"
ELFOGADSI TESZTEK S EGYSGTESZTEK
Az elfogadsi tesztek nem egysgtesztek. Az egysgteszteket programozk rjk prog
ramozknak. Formlis tervdokumentumok, amelyek a rendszer legalacsonyabb
szint felptst s viselkedst rjk le. A clkznsgket a programozk, s nem
az zletemberek jelentik.
Az elfogadsi teszteket ezzel szemben zletemberek lltjk ssze az zleti vl
lalkozs szmra (mg akkor is, ha vgl neked, a fejlesztnek kell megrnod ket).
Formlis kvetelmnylersok, amelyek azt hatrozzk meg, hogy a rendszernek z
leti szempontbl hogyan kell viselkednie. Egyarnt szlnak a zletembereknek s
a programozknak.
-
Csbt lehet kikszblni a
"
tbbletmunkt
"
arra a felttelezsre alapozva, hogy
a ktfle teszt kzl az egyik felesleges. Igaz ugyan, hogy az egysg- s az elfogadsi
tesztek gyakran ugyanazokat a dolgokat vizsgljk, ennek ellenre mindkettre sz k
sg van.
ELFOGADSI TESZTEK 123
Elszr is, br lehet, hogy ugyanazt tesztelik, ms-ms mdon s eljrsokon
keresztl teszik ezt. Az egysgtesztek a rendszer zsigereiig hatolnak, s konkrt osz
tlyokban tallhat tagfggvnyeket hvnak meg, mg az elfogadsi tesztek sokkal
tvolabbrl, az API, st nha a felhasznli fellet szintjrl rik el a rendszert. A vg
rehajtsi tvonalak teht jelentsen klnbznek a kt teszttpus esetben.
Mindazonltal az igazi oka annak, hogy egyik teszt sem felesleges, az, hogy az el
sdleges szerepk nem a tesztels. Az, hogy formailag tesztekrl van sz, mellkes
krlmny. Az egysgtesztek s az elfogadsi tesztek elszr is dokumentumok, s
csak ez utn tesztek. Elssorban azt a clt szolgljk, hogy formlisan lerjk a rendszer
felptst s viselkedst. Rendkvl hasznos, hogy automatikusan megerstik az l
taluk lert szerkezetet s viselkedst, de a valdi cljuk a rendszer meghatrozsa.
GRAFIKUS FELLETEK S MS KOMPLIKCIK
A grafikus felleteket (GUI) nehz elzetesen meghatrozni. Lehetsges, de ritkn
sikerl jl. Ennek az az oka, hogy szubjektv - s gy vltoz -, hogy mikor ki mit
tall eszttikusnak A felhasznlk szeretnek babrZni a grafikus felletteL Szeretik
prblgatni s alaktani azt. Ki akarjk prblni a klnfle bet tpusokat, szneket,
elrendezseket s eszkzket. A grafikus felletek folytonos vltozson mennek
keresztl.
Ez az, ami nagyon megnehezti, hogy elfogadsi teszteket rj grafikus felletekhez.
A megolds az, hogy gy kell megtervezni a rendszert, hogy a grafikus felletet gy
kezelhessk, mintha egy alkalmazsprogramozsi fellet (API) lenne, nem pedig
gombok, csszkk, rcsok s menk halmaza. Ez furcsn hangozhat, pedig ez a j
tervezs alapja.
Van egy tervezsi elv, amelyet az
"
egyetlen felelssgi kr elvnek
"
(Single
Responsibility Principle, SRP) hvnak. Ez az elv azt mondja, hogy el kell vlasztani
egymstl azokat az elemeket, amelyek klnbz ok miatt vltoznak, s egyv kell
csoportostani azokat, amelyek ugyanabbl az okbl kifolylag mdosulnak. Ez all
a grafikus felletek sem jelentenek kivtelt.
A grafikus fellet elrendezse, klleme s hasznlati mdja idvel eszttikai s
hatkonysgi okok miatt megvltozik, de a GUI httrben megbv kpessgei a vl
tozsok ellenre ugyanazok maradnak. Ezrt amikor egy grafikus fellethez rsz el
fogadsi teszteket, azokra a httrben lev elvont szolgltatsokra kell tmaszkodnod,
amelyek nem vltoznak tl srn.
Egy oldalon pldul tbb gomb is lehet. Ahelyett, hogy olyan teszteket rnl, ame
lyek az oldalon elfoglalt helyk szerint kattintanak a gombokra, clszerbb nv sze
rint kivlasztanod a gombokat Ennl is jobb, ha minden gombnak van egy egyedi
azonostja, amelyet hasznlhatsz. Sokkal hasznosabb olyan tesztet rni, amelyik az
ok_ button azonostj gombot vlasztja ki, mint a rcs 3. oszlopnak 4. sorban
lev gombot clba venni.
124 7. FEJEZET
TESZTELS A MEGFELEL FELLETEN KERESZTL ..,_ Mg jobb, ha olyan teszteket rSZ,
amelyek a mgttes rendszer szolgltatsait nem a grafikus felleten, hanem egy
valdi API-n keresztl hvjk meg. Ennek az API-nak ugyanannak az API-nak kell
lennie, mint amelyikre a grafikus fellet tmaszkodik. Ez nem jdonsg. A tervezsi
szakemberek vtizedek ta mondjk neknk, hogy vlasszuk el a grafikus felletein
ket a mkdsi szablyoktL
A grafikus felleten keresztli tesztels mindig problms, hacsak nem magt
a grafikus felletet vizsglod. Ennek az az oka, hogy a grafikus fellet tbbnyire foly
ton vltozik, gy a tesztek nagyon trkenyek lesznek. Ha a grafikus fellet minden
vltozsa ezer tesztet tesz tnkre, vagy eldobod a teszteket, vagy lelltod a grafikus
fellet vltozst. Egyik sem j megolds. Inkbb gy rd meg a mkdsi szablyo
kat vizsgl teszteket, hogy egy kzvetlenl a grafikus fellet alatti API-n keresztl
hajtdjanak vgre.
Egyes elfogadsi tesztek magnak a grafikus felletnek a viselkedst rjk le.
Ezeknek a teszteknek muszj a grafikus felletet vizsglniuk-a mkdsi szablyo
kat viszont nem, gy aztn nem is ignylik azoknak a grafikus fellethez kapcsolst.
A grafikus felletet s a mkdsi szablyokat teht clszer sztvlasztani, s az
utbbiakat csonkokkal helyettesteni, amikor magt a grafikus felletet teszteled.
A GUI-tesztek szmt szortsd a lehet legalacsonyabbra. Ezek a tesztek trke
nyek, me rt a grafikus fellet vltozkony. Minl tbb GUI-teszted van, annl kevsb
valszn, hogy meg fogod tartani ket.
FOLYAMATOS BEPfTS Gondoskodj rla, hogy minden egysg- s elfogadsi teszted
naponta tbbszr lefusson egy folyamatos beptst (continuous integration, CI)
vgz rendszerben. Ezt a rendszert a forrskd-kezel rendszernek kell elindtania.
Minden alkalommal, amikor valaki vglegest egy modult, a CI-rendszernek el kell
indtania egy sszelltott programvltozatot (build), majd le kell futtatnia az sszes
tesztet a rendszerben. Ennek a tesztfuttatsnak az eredmnyt a csapat minden tag
jnak el kell kldeni emailben.
NYOMDAGPEKET LEALLlTAN l! Nagyon fontos, hogy a CI -tesztek minden alkalommal
lefussanak. Soha nem szabad kudarcot vallaniuk. Ha ez mg- is bekvetkezne, akkor
az egsz csapatnak abba kell hagynia, amit ppen csinl, s arra kell sszpontostania,
hogy a sikertelen teszteket ismt sikeresen futtathatv tegye. Egy hibs sszelltott
vltozatra a CI-rendszerben gy kell tekinteni, mint vszhelyzetre-olyan esemnyre,
amikor
"
minden nyomdagpet azonnal le kell lltani
"
.
n adtam mr tancsokat olyan csapatoknak, amelyek nem vettk komolyan a si
kertelen teszteket.
"
Tl elfoglaltak
"
voltak ahhoz, hogy kijavtsk a hibt, ezrt egy
szeren flretettk ezeket a teszteket, gretet tve arra, hogy ksbb majd foglalkoz
nak velk. Az egyik esetben a csapat sz szerint kivette a sikertelen teszteket az
ELFOGAD
S
I TE
S
ZTEK 125
sszelltott programvltozatbl, mert knos volt ltni, hogy kudarcot vallanak. K
sbb, miutn tadtk a vltozatot a megrendelnek, rjttek, hogy elfelejtettk visz
szatenni ezeket a teszteket az sszelltott vltozatba - sajnos onnan, hogy az gyfl
a hibajelentsek miatt dhsen felhvta ket.
SSZEFOGLALS
A rszletek megbeszlse soha nem knny. Ez klnsen igaz akkor, amikor prog
ramozk s zleti dntshozk igyekeznek tisztzni egy alkalmazs rszleteit. Mind
kt flnek az a legknnyebb, ha csak legyint, s felttelezi, hogy a msik rti, mirl
van sz. A felek tl gyakran vlnak el abban a hitben, hogy mindent rtenek, mikz
ben teljesen ms elkpzelsk van ugyanarrl.
n csak egyetlen mdszert ismerek a programozk s a dntshozk kztti kom
munikcis hibk hatkony kikszblsre: az automatizlt elfogadsi tesztek rst.
Ezek a tesztek olyannyira formlisak, hogy vgre is hajthatk. Teljesen egyrtelmek,
s mindig sszhangban maradnak az alkalmazssl. Nincs nluk tkletesebb lersa
a kvetelmnyeknek.
8. FEJEZET
TESZTELSISTRATGIK
Egy profi szaftverfejleszt teszteli a kdjait. A tesztels azonban nem csupn annyibl
ll, hogy runk nhny egsgtesztet vagy pr elfogadsi tesztet. Ezeknek a teszteknek
a megrsa hasznos, de messze nem elgsges. Amire minden profi fejlesztcsapatnak
szksge van, az egy j tesztelsi stratgia.
1989-ben a Rational cgnl dolgoztam a Rose els kiadsn. gy havonta egyszer
a minsgellenrzsrt (QA, Quality Assurance) felels vezet egsz napos "bo
grvadszatot" tartott. A csapat sszes tagja, a programozktl a menedzsereken s
titkrnkn keresztl az adatbzis-felgyelkig, lelt a Rose mell, s megprblta
TESZTELS! STRATGIK 127
hibra knyszerteni. A klnbz tpus programhibk felfedezsrt jutalom jrt.
Az, aki a rendszert sszeomlaszt hibt tallt, egy ktszemlyes vacsort nyerhetett,
mg aki a legtbb hibt szedte ssze, egy htvgt Monterrey-ben.
AMINSGELLENRK NEM TALLHATNAK SEMMILYEN HIBT
Mr korbban is mondtam, de jbl elismtlem: annak ellenre, hogy egy cgnek k
ln minsgellenrz rszlege van a szaftver tesztelsre, a fejlesztsi osztlynak azt
a clt kell kitznie maga el, hogy a minsgellenrk ne talljanak semmilyen hibt.
Termszetesen nem valszn, hogy ezt a clt folyamatosan sikerl elrni. Vgtre
is, amikor egy csapat intelligens ember azon tri magt, hogy minden hinyossgat
s egyenetlensget felfedjen egy termkben, komoly esly van r, hogy tallni is fog
nak nhnyat. Ettl fggetlenl, minden alkalommal, amikor a minsgellenrzs
tall valamit, a fejlesztcsapatnak el kell szrnyednie, fel kell tennie magnak a kr
dst, hogy miknt fordulhatott el ilyesmi, s lpseket kell tennie annak rdekben,
hogy az eset a jvben ne ismtldhessen meg.
A MINSGELLENRK IS A CSAPATHOZ TARTOZNAK
Az elz bekezdsbl gy tnhet, hogy a minsgellenrk s a fejlesztk kztt r
dekellentt ll fenn, ezrt a viszonyuk ellensges lehet. De nem ez a cl: ppen ellen
kezleg, a minsgellenrknek s a fejlesztknek egytt kell mkdnik, hogy biz
tostsk a rendszer minsgt. A minsgellenrk akkor hajtjk a legnagyobb
hasznot a csapat szmra, ha a kvetelmny- s viselkedslerk szerept tltik be.
A MINSGELLENRK, MINT KVETELMNYLEfRK
A minsgellenrk egyik feladata az kell legyen, hogy az zleti elemzkkel egytt
mkdve megalkossk azokat az automatizlt elfogadsi teszteket (acceptance test),
amelyek a rendszer valdi kvetelmnylersaknt szolglnak. Fokozatosan ssze kell
gyjtenik az zleti kvetelmnyeket, s olyan tesztekk kell formlniuk azokat,
amelyek lerjk a fejlesztknek, hogy a rendszernek hogyan kell viselkednie (lsd az
elfogadsi tesztekrl szl 7. fejezetet). Az zleti elemzk rendszerint a derlt tesz
teseteket (happy path) rjk meg, mg a minsgellenrk a negatv utas teszteseteket,
illetve a sarok- s hatreseteket ( corner case, boundary case) fogalmazzk meg.
A MINSGELLENRK, MINT VISELKEDSLEfRK
A minsgellenrk msik feladata, hogy feltr tesztelssei (
"
prbafrssal
"
,
exploratory testing)1 elksztsk a mkd rendszer valdi viselkedsnek s jellem-
l http://www.satisfice.com/articles/what_is_et.shtml
128 8. FEJEZET
zinek lerst, s jelentsk ezt a viselkedst a fejlesztknek s az zleti elemzknek.
Ebben a szerepben a minsgellenrzsi rszleg nem rtelmezi a kvetelmnyeket,
csupn meghatrozza a rendszer tnyleges jellemzit.
A TESZTAUTOMATIZLSI PIRAMIS
A profi fejlesztk a tesztvezrelt fejleszts (Test Driven Development, TDD) elveit k
vetve alkotjk meg az egysgteszteket (unit test). Egy profi fejlesztcsapat elfogadsi
tesztek segtsgvel hatrozza meg a rendszert, s folyamatos beptssei (continuous
integration; lsd a 7. fejezetben) akadlyozza meg a visszalpst. Ezek a tesztek azon
ban csak egy rszt jelentik a trtnetnek. Hasznos, ha van egy egysg- s elfogadsi
tesztekbl ll tesztcsomagunk, de emellett magasabb szint tesztekre is szksg van
annak a biztostshoz, hogy a minsgellenrk ne talljanak semmi gubancot.
A 8.1. brn a tesztautomatizlsi piramist lthatod 2, amely azoknak a tesztfajtknak
a kpi brzolsa, amelyeket egy profi fejlesztcgnek alkalmaznia kell.
Rendszertesztek
Egyttmkdsi tesztek
sszetevtesztek
Egysgtesztek
100%
8.1. bra
A tesztautomatizlsi piramis
2 [COHN09]3ll-312. oldal
TESZTELS! STRATGIK 129
EGYSGTESZTEK
A piramis aljn az egysgtesztek tallhatk. Ezeket a teszteket programozk rjk
programozknak, a rendszer programozsi nyelvn, s a cljuk a rendszer lersa
a legalacsonyabb szinten. Annak rdekben, hogy meghatrozzk, mit is kell elksz
tenik, a fejlesztk mg az eltt megrjk ezeket a teszteket, hogy belekezdennek az
zemi kdba. Az egysgtesztek a folyamatos bepts rszeknt hajtdnak vgre, gy
biztostva, hogy a kd megfeleljen a programozk eredeti szndknak.
Az egysgteszteknek sszer keretek kztt teljes lefedeasgre kell trekednik. Ez
a gyakorlatban ltalban valamilyen 90 szzalk feletti rtket kell jelentsen. Lnye
ges, hogy az egysgteszteknek valdi lefedettsget kell biztostaniuk, szemben a hamis
tesztekkel, amelyek anlkl hajtanak vgre kdot, hogy meggyzdnnek annak az
eredeti szndk szerinti viselkedsrl.
SSZETEVTESZTEK
Az sszetevtesztek (component test) az elz fejezetben emltett elfogadsi tesztek
kz tartoznak, s ltalban a rendszer egyes nll sszetevit vizsgljk. A rendszer
sszetevi foglaljk magukba az zleti szablyokat, gy az egyes sszetevk tesztjei
valjban ezeknek az zleti szablyoknak az elfogadsi tesztjei.
Ahogy a 8.2. brn lthat, az sszetevtesztek egy-egy sszetevt burkolnak be.
Bemen adatokat adnak t az sszetevnek, s kimen adatokat gyjtenek ssze be
lle, azt vizsglva, hogy a kimenet megfelel-e a bemenetnek Megfelel lczssal s
teszthelyettest technikkkal a rendszer minden ms sszetevjt le kell vlasztani
a tesztrL
8.2. bra
sszetev-elfogadsi teszt
130
..
N
V
Q
..
v
-r
-
r
C
-

,
'
il
sszetev
!l
\
8. FEJEZET
Az sszetevteszteket a minsgellenrk s az zleti elemzk rjk meg, a fejlesztk
segtsgve!, s egy olyan sszetev-tesztel krnyezetben lltjk ssze ket, mint a
FITNESSE, a JBehave vagy a Cucumber. (A grafikus fellet-GUI-sszetevit olyan
GUI-tesztel krnyezetekben tesztelik, mint a Selenium vagy a Watir.) Ez azt a clt
szolglja, hogy az zleti elemzk kpesek legyenek elolvasni s rtelmezni, st akr
szerkeszteni is ezeket a teszteket.
Az sszetevtesztek a rendszernek durvn a felt fedik le, s inkbb a derlt,
valamint a nyilvnval sarok- s hatreseteket, illetve alternatv vgrehajtsi tvona
lakat vizsgljk. A negatv utas esetek tlnyom tbbsgt egysgtesztek fedik le, s
az sszetevtesztek szintjn rtelmetlenek.
EGYTTMKDSI TESZTEK
Az egyttmkdsi teszteknek (integration test) csak a sok sszetevbl ll, na
gyobb rendszerekben van rtelme. Ahogy a 8.3. bra mutatja, ezek a tesztek sszete
vcsoportokat vizsginak, abbl a szempontbl, hogy az sszetevk mennyire hat
konyan kommuniklnak egymssal. A rendszer egyb sszetevit a szoksos mdon,
megfelel lczssal s teszthelyettestkkel le kell vlasztani a tesztrL
Az egyttmkdsi tesztek koreogrfiatesztek. Nem zleti szablyokat vizsginak,
hanem inkbb azt, hogy az egyes sszetevk hogyan tudnak "tncolni" egymssal.
Vezetkteszteknek is tekinthetjk ket, mert arrl gyzdnek meg, hogy az sszetevk
sszekttetse megfelel-e, s vilgosan tudnak-e kommuniklni egymssal.
8.3. bra
Egyttmkdsi teszt
.
N
V
<
.
V
'<
"
:Q

':
E
.
.
::
>
O
U
F

|

TESZTELS! STRATGIK

|
sszetev

`
Osszeo /
sszetev
l
sszetev

l
131
Az egyttmkdsi teszteket jellemzen a rendszertervezk-vagy a rendszer ve
zet tervezi - rjk, hiszen ezek a tesztek gondoskodnak rla, hogy a rendszer szer
kezeti felptse egszsges legyen. Teljestmny- s teresztkpessgi tesztekkel
szintn ezen a szinten tallkozhatunk.
Az egyttmkdsi teszteket rendszerint ugyanazon a nyelven s krnyezetben
ksztik el, mint az sszetevteszteket. Jellemzennem hajtdnak vgre a folyamatos
bepts rszeknt, mert ltalban hosszabb a f utsi idejk. Ehelyett idszakosan
(minden jjel, hetente stb.) hajtjk vgre ket, ahogy a szerzk szksgesnek tlik.
RENDSZERTESZTEK
A rendszertesztek automatizlt tesztek, amelyek a teljes, integrlt rendszert vizsgljk,
gy a vgs egyttmkdsi teszt szerept tltik be. Nem tesztelnek kzvetlenl zleti
szablyokat; ehelyett azt vizsgljk, hogy a rendszer megfelelen lett-e sszehuzalozva,
s a rszei a tervnek megfelelen mkdnek-e egytt. A rendszertesztek csomagjban
teljestmny- s teresztkpessgi tesztek is helyet kell kapjanak.
A rendszerteszteket a rendszertervezk s a mszaki vezetk rjk, s ltalban
ugyanazon a nyelven s krnyezetben ksztik el, mint a felhasznli fellet egytt
mkdsi tesztjeit A futsi idejk fggvnyben viszonylag ritkn kerl sor a futta
tsukra, de minl gyakrabban hajtjk vgre ket, annl jobb.
A rendszertesztek a rendszernek taln a 10%-t fedik le. Ennek az az oka, hogy
nem a rendszer helyes viselkedsnek, hanem a rendszer helyes felptsnek a bizto
stsa a cljuk. A mgttes kd, illetve sszetevk helyes viselkedsrl a piramis ala
csonyabb szintjein tallhat tesztek gyzdnek meg.
MANULIS FELTR TESZTEK
Ezek azok a vizsglatok, amelyeket emberek vgeznek, a kezket a billentyzeten,
a szemket pedig a kpernyn tartva. Nem automatizlt tesztek, s nincs is rott for
gatknyvk. A cljuk az, hogy a rendszerben vratlan viselkeds utn kutassanak,
mikzben megerstik az elvrt viselkedst. A rendszer ilyesfajta vizsglathoz s fel
dertshez emberi agyra s emberi kreativitsra van szksg, amelynek egy rsban
rgztett tesztdsi terv ellentmondana.
Egyes fejlesztcsapatok kln szakemberekkel vgeztetik ezt a munkt, mg msok
egyszeren kineveznek egy-egy napot
"
bogrvadsz
"
napnak, amikor is a lehet leg
tbben - a menedzsereket, a titkrnket, a programozkat, a tesztelket s a doku
mentcirkat is belertve -
"
gyrik
"
a rendszert, hogy lssk, vajon sikerl-e trdre
knyszerteni.
A cl ebben az esetben nem a minl nagyobb lefedettsg. Ezekkel a tesztekkel nem
azt akarjuk bizonytani, hogy minden egyes zleti szably s minden egyes vgrehaj
tsi tvonal hibtlan, hanem azrt vgezzk el ket, hogy meggyzdjnk rla, hogy
132 8. FEJEZET
a rendszer megfelelen kveti az emberi utastsokat, s annyi
"
furcsasgra
"
bukkan
junk, amennyire csak tudunk.
SSZEFOG LAL AS
A tesztvezrelt fejleszts hatkony megkzelts, az elfogadsi tesztek pedig kitnen
alkalmasak arra, hogy kifejezzk s kiknyszertsk az elvrt viselkedst. Mind
azonltal az elfogadsi tesztek csak egy rszt kpezik a teljes tesztdsi stratgi
nak. Annak rdekben, hogy a minsgellenrk valban
"
ne talljanak semmilyen
hibt
"
, a fejlesztcsapatoknak ssze kell fogniuk a minsgellenrkkel, s egytt kell
kidolgozniuk az egysg-, sszetev-, egyttmkdsi, rendszer- s feltr tesztek hi
erarchijt. Ezeket a teszteket aztn a lehet leggyakrabban kell futtatni, hogy a lehet
legszlesebb kr visszajelzshez jussunk, s biztostsuk a rendszer folyamatos tisz
tasgt.
l RODALOMJEGYZK
[COHN09]: Mike Cohn: Succeeding with Agile. Boston, MA. Addison-Wesley, 2009.
9. FEJEZET
AZ ID BEOSZTSA
Nyolc ra meglehetsen rvid id: csupn 480 perc, vagy 28 800 msodperc. Profi
knt arra kell trekedned, hogy ezt a nhny rtkes msodpercet olyan hatkonyar
s hasznosan hasznld fel, ahogy csak tudod. Milyen stratgival biztosthatod, hogy
ne vesztegesd el azt a kis idt, ami a rendelkezsedre ll. Hogyan oszthatod be hat
konyar az iddet?
1986-ban Angliban, a Surrey grfsgbeli Littie Sandhurst-ben ltem. Egy 15 szem
lyes szaftverfejlesztsi osztlyt vezettem a Teradyne szmra Bracknellben. A napjaim
AZ ID BEOSZTSA 135
kusza sszevisszasgban teltek: telefonhvsok, rgtnztt rtekezletek, karbantartsi
problmk, llandan flbeszaktott munka. Annak rdekben teht, hogy brmivel
vgezni tudjak, meglehetsen drasztikus szablyokat kellett letbe lptetnem az idm
beosztsra:
Minden reggel hajnali 5-kor keltem, s a kerkprommal a bracknelli iro
dba kerekeztem, gy, hogy reggel6-ra odarjek. gy 2 s fl rnyi nyugodt
idhz jutottam, mieltt a szoksos napi kosz megkezddtt volna.
rkezskor felrtam az temtervet a tblra. Az idt 15 perces szeletekre osz
tottam, s bertam, hogy az egyes idszeletekben mit fogok csinlni.
Az temterv els hrom rjt teljesen kitltttem. Minden rban hagytam
egy 15 perces lyukat, amelyben gyorsan elintzheter a vratlanul felmerl
dolgok tbbsgt, hogy utna folytathassam a munkt.
Az ebd utni idt nem osztottam be, mert tudtam, hogy addigra gyis el
szabadul a pokol, s a nap htralev rszben improvizlnom kell. Ha egy
dlutn vletlenl mgsem tombolt a kosz, egyszeren a legfontosabb ten
nivalmat folytattam (amg vgl mgis csak ki nem trt a kosz).
Az temtervet nem mindig tudtam tartani. Nem mindig sikerlt hajnali tkor
felkelnem, a kosz pedig nha teljesen felbortotta a gondosan megtervezett napiren
demet, s felemsztette az egsz napot. A terv azonban az esetek tbbsgben alkal
masnak bizonyult arra, hogy a fejemet a vz felett tartsa.
RTEKEZLETEK
Az rtekezletek rsztvevnknt s rnknt krlbell 200 dollrba kerlnek, a
fizetseket, juttatsokat, brleti djakat s egyebeket is figyelembe vve. Legkze
lebb, amikor rszt veszel egy rtekezleten, szmtsd ki a kltsgeket. Meg fogsz
dbbenni.
Kt igazsgot kell tudnod az rtekezletekrl:
l. Az rtekezletek szksgesek.
2. Az rtekezletek rengeteg idt pocskolnak el.
Ez a kt kijelents gyakran egyformn igaz ugyanarra az rtekezletre: a rsztvevk
nmelyike felbecslhetetlen rtknek tallja, mg msok feleslegesnek vagy haszon
talannak.
Egy profi tisztban van az rtekezletek magas kltsgvel, s azzal is, hogy a sajt
ideje rtkes, hiszen kdot kell rnia, s tartania kell a hatrid ket, ezrt hatrozottan
visszautastja a rszvtelt minden olyan rtekezleten, amely nem jr azonnali s je
lents elnnyel.
136 9. FEJEZET
VISSZAUTAS fT S
Nem kell minden rtekezleten rszt venned, amelyre meghvnak. St mi tbb, ama
tr dolog folyton rtekezleteken lni. Az iddet blcsen kell beosztanod, ezrt gon
dosan meg kell vlogatnod, mely rtekezletekre msz el, s melyeken hrtod el ud
variasan a rszvtelt.
Az a szemly, aki rtekezletre hv, nem felels az idd beosztsrt - ez csak rd
tartozik. Amikor teht meghvt kapsz egy rtekezletre, csak akkor fogadd el, ha a
rszvteled halaszthatatlanul s felttlenl szksges ahhoz, hogy haladni tudj azzal
a munkval, amit ppen vgzeL
Elfordul, hogy az rtekezlet tmja rdekel, de az adott pillanatban nem srgs a
dolog. Ilyen esetben dntened kell, hogy belefr-e az iddbe. Gondosan mrlegelj -
a kelletnl tbb rtekezlet knnyen rtkes napokat rabolhat el tled.
Az is megesik, hogy az rtekezlet olyasmirl szl, amirl lenne mondanivald, de
az ppen vgzett munkd szempontjbl nincs kzvetlen haszna. Ilyenkor is mde
gelned szksges, hogy megri-e idt elvenni a sajt projektedtl a msik rdekben.
Cinikusnak hangozhat, de te elssorban a sajt projektjeidrt felelsz. Mindazonltal
gyakran hasznos, ha az egyik csapat segti a msikat, ezrt clszer lehet megvitatni
a rszvteledet a csapatoddal, illetve a fnkddeL
A rszvteledet egy rtekezleten nha egy magasabb beoszts szemly ignyli,
pldul egy msik projekt felelse vagy vezet mrnke. Ilyen esetben azt kell eldn
tened, hogy a hivatali sly nyom tbbet a latban, vagy a munkatemterved. A dnts
meghozatalban ismt csak a csapatod s a felettesed segthet.
A felettesed egyik legfontosabb feladata, hogy tvol tartson az rtekezletektL Egy
j fnk kill a rszvtelt visszautast dntsed mellett, hiszen neki ppen olyan fon
tos az idd, mint neked.
TVOZS
Az rtekezletek nem mindig alakulnak a terv szerint. Megesik, hogy egy olyan rte
kezleten tallod magad, amire biztosan nem mentl volna el, ha elre tudod, mi lesz.
Nha j tmk merlnek fel, vagy valakinek a vesszparipja uralja a megbeszlst.
n ezrt az vek sorn fellltottam egy egyszer szablyt: ha az rtekezlet unalmass
kezd vlni, tvozz!
Amint mr emltettem, ktelessged jl gazdlkodni az idddeL Ha egy rtekezlet
csak vesztegeti az iddet, mdot kell tallnod arra, hogy udvariasan tvozz.
Termszetesen nem clszer egyszeren kiviharzani azzal a felkiltssal, hogy
"
Ez
dgunalom!
"
. Semmi szksg a gorombasgra. Egyszeren krdezd meg egy alkal
mas pillanatban, hogy a jelenlted mg mindig felttlenl szksges-e. Elmagyarz
hatod, hogy a bokros teendid nem igazn teszik lehetv, hogy tovbb maradj, eset
leg megkrdezheted, hogy fel lehetne-e gyorstani a megbeszlst, vagy elbbre venni
bizonyos napirendi pontokat.
AZ ID BEOSZTSA 137
Fontos, hogy megrtsd, hogy egy olyan rtekezleten ottmaradni, amely csak id
pocskols a szmodra, s amelyhez nem tudsz tbb rdemben hozzszlni, ama
tr dolog. Ktelessged, hogy okosan hasznld fel a munkaadd idejt s pnzt,
ezrt szakmailag az az indokolt, ha egy alkalmas pillanatot kivlasztva udvariasan
tvozol.
MINDIG KELL NAPIREND S CL
Azrt vagyunk hajlandak eltrni az rtekezletek kltsgt, mert egy bizonyos cl
elrse rdekben nha valban szksg van az rintettek sszehvsra. Ahhoz vi
szont, hogy a rsztvevk idejt blcsen hasznostsuk, az rtekezletnek vilgos cllal
s napirenddel kell rendelkeznie, az egyes tmkra sznt id megjellsvel.
Ha arra krnek, hogy vegyl rszt egy rtekezleten, tudd meg, milyen tmkrl lesz
sz, mennyi idt sznnak rjuk, s mik az elrend clok. Ha nem kapsz vilgos v
laszt ezekre a krdsekre, akkor udvariasan mondd le a rszvtelt.
Ha elmsz egy rtekezletre, s gy tallod, hogy a napirend felborult, vagy a meg
beszls egszen ms tmra tereldtt, krd, hogy temezztek be az j tmt, s
trjetek vissza az eredeti napirendhez. Ha ez nem trtnik meg, az els adand alkalom
mal udvariasan mentsd ki magad, s tvozz.
LLRTEKEZLETEK
Az llrtekezletek az agilis mdszertan szerves rszt kpezik. A nevk onnan ered,
hogy a rsztvevk llnak, amg az rtekezlet tart. A rsztvevk egyms utn hrom
krdsre felelnek:
l. Mit csinltam tegnap?
2. Mit fogok csinlni ma?
3. Mi akadlyozza a munkmat?
Ennyi az egsz. Egyik krds megvlaszolsa sem szabad, hogy tbbet ignyeljen
hsz msodpercnl, teht egy-egy rsztvevre legfeljebb egy perc jut. Egy ilyen rte
kezlet mg egy tz fs csapat esetben is lezavarhat tz perc alatt.
MUNKAFZIS-TERVEZSI RTEKEZLETEK
Az agilis mdszertanban ezek a fajta rtekezletek a legnehezebbek. Ha rosszul csinlja
az ember, tl sok idt emsztenek fel. Szakrtelem kell ahhoz, hogy jl szervezd meg
ket - ezt a tudst azonban nagyon is megri elsajttani.
A munkafzis-tervezsi rtekezletek clja azoknak az elmaradsban lev tenniva
lknak a kivlasztsa, amelyeket a kvetkez munkafzisban el kell vgezni. A szba
jhet munkkra, illetve az zleti rtkre vonatkoz becslseknek mr kszen kell
lennik. Egy igazn j cgnl ekkorra mr az elfogadsi s sszetev-teszteket is meg
rjk, vagy legalbbis felvzoljk
138 9. FEJEZET
Az rtekezletnek gyorsan kell haladnia az egyes munkahtralkok rvid megvita
tsval, majd azok elbbre sorolsval vagy elvetsvel. Egyetlen ttelre sem szabad
t-tz percnl tbbet sznni. Ha hosszabb megbeszlsre van szksg, azt egy msik
idpontra clszer betemezni a csapat rintett rszvel.
n azt az alapszablyt kvetem, hogy az rtekezletnek nem szabad tbbet ignyel
nie a munkafzis 5%-nl. Ha az adott munkafzis teht egy htig (negyven rig)
tart, az rtekezletnek kt ra alatt be kell fejezdnie.
MUNKAFZIS-RTKELSEK S BEMUTATK
Ezekre az rtekezletekre, amelyeken a csapat tagjai megvitatjk, mi az, amit sikerlt
elrni, s mi az, amit nem, az egyes munkafzisok vgn kell sort kerteni. A vezetk
ugyanitt tekinthetik meg az jonnan elkszlt szolgltatsok bemutatjt. Az rt
kel rtkezletek sokszor csnyn flresiklanak, s rengeteg idt emszthetnek fel,
ezrt rdemes a munkafzis utols napjnak vgre idzteni ket, a munkaid letelte
eltt 45 percceL A visszatekint rtkelsre nem szabad 20, a bemutatra pedig
25 percnl tbbet sznni, hiszen csak egy-kt ht telt el a legutbbi hasonl rtekezlet
ta, teht tl sok mindenrl nincs mit beszlni.
VITK S NZETELTRSEK
Ezt a blcsessget Kent Becktl hallottam:
"
egy olyan vita, amit nem lehet elsimtani
t perc alatt, nem oldhat meg vitatkozssal
"
. A vita elhzdsa vilgoss teszi, hogy
egyik oldal sem tud egyrtelmen meggyz rveket felhozni - a vita nyilvn hitkr
dsekrl, s nem tnyekrl folyik.
A szakmai nzeteltrsek gyakran a vgtelensgbe nyl vitkat eredmnyeznek.
A felek mindenfle rvet felhoznak az llspontjuk igazolsra, de adatokat csak nagy
ritkn. Adatok nlkl azonban egy vita, amely nem vezet megegyezshez nhny (t
harminc) percen bell, egyszeren soha nem zrhat le. Csak egy megolds lehets
ges: adatokhoz kell jutni.
Vannak, akik a szemlyisgk erejvel prblnak megnyerni egy vitt: ordtoznak,
az arcodba msznak, vagy leereszked stlusban beszlnek veled. Nem szm t, milyen
eszkzkhz folyamodnak, a puszta akarater nem sznteti meg tartsan a nzetel
trseket - csak az adatok kpesek erre.
Egyesek passzv-aggresszv viselkedst mutatnak. gy csinlnak, mintha elfogad
nk az rvei det, csak hogy vget vessenek a vitnak, a megoldsbl azonban kivonjk
magukat, s szabotljk a munkt. Ezt mondjk magukban:
"
Ha gy akarod, akkor
oldd meg magad.
"
Ez valsznleg a legrosszabb fajta szakmaiatlan viselkeds, ami
csak ltezik. Soha ne csinlj ilyet! Ha elfogadsz valamit, akkor kteless
g
ed tartani
magad a megegyezshez.
Hogyan szerezheted meg az adatokat, amelyekre szksged van egy vita felold
shoz? Bizonyos esetekben ksrletezhetsz, vagy modellezheted valamilyen mdon
AZ ID BEOSZTSA 139
a helyzetet, nha azonban a legjobb megolds egyszeren feldobni egy rmt, hogy
ki vlaszd, a kt vits t kz l melyiken indulj el. Ha az adott t sikerhez vezet, akkor
az volt a helyes. Ha nem, mg mindig visszamehetsz, s elindulhatsz a msik ton.
Clszer megszabni egy idkeretet, valamint a feltteleket arra, hogy a vlasztott utat
mikor jobb elhagyni.
vakd j az olyan rtekezletektl, amelyek csak sznteret biztostanak egy vitnak,
s tmogatst igyekeznek szerezni egyik vagy msik oldalnak, s kerld el azokat,
ahol csak az egyik fl mutathatja be az llspontjt.
Ha egy nzeteltrst mindenkppen el kell simtani, akkor krd meg mindkt felet,
hogy legfeljebb t percben adja el az rveit a csapatnak, majd bocssd szavazsra
a krdst. gy az egsz rtekezlet nem tart tovbb tizent percnl.
FKUSZMANNA
Elre is elnzst krek, ha gy reznd, hogy ez a rsz kicsit New Age-szer meta
fizikai jegyeket mutat, vagy a Brtnk s srknyok (Dungeons & Dragons) jtk
filozfijt kveti. Ennek csupn az az oka, hogy a tmrl leginkbb ilyesmik jutnak
az eszembe.
A programozs szellemi gyakorlat, amely hossz tv sszpontostst ignyel.
A fkusz azonban ritka kincs- olyan, mint a manna.1 Ha elhasznltaci a
"
fkuszman
ndat
"
, legalbb egy rn t sszpontostst nem ignyl tevkenysgeket kell vgez
ned, hogy jratltsd a raktrakat
Nem tudom, mi lehet a fkuszmanna, de rzsem szerint egy fizikai szubsztancia
(vagy annak hinya), ami hatssal van az bersgre s a figyelemre. Brmi is legyen,
rzed a jelenltt, s azt is, ha kifogytl belle. A profi szoftverfejlesztk megtanuljk,
hogy gy osszk be az idejket, hogy optimlisan hasznlhassk fel a fkuszmann
jukat. Akkor runk kdot, amikor a fkuszmanna szintje magas, s ms, kevsb
produktv dolgokat csinlunk, ha a tartalkok megcsappantak.
A fkuszmanna leboml nyersanyag. Ha nem hasznlod fel, amikor rendelkezsre
ll, valsznleg el fogod veszteni. Ez az egyik oka, amirt az rtekezletek elszvhat
jk az energidat. Ha minden fkuszmanndat egy rtekezletre pazarolod, a kd
rsra mr nem fog maradni.
A manna szokvnyos nyersanyag az olyan fantzia- vagy szerepjtkokban, mint a Dungeons &
Dragons. Minden jtkosnak van egy bizonyos mennyisg mannja, ami egy mgikus anyag, s
minden alkalommal cskken a szintje, amikor a jtkos valamilyen bbjt alkalmaz. Minl hat
sosabb a varzsige, annl tbb fogy a mannbl. A manna lass, rgztett tempban tltdik jra,
ezrt mr nhny varzslattal knnyen el lehet hasznlni az sszes tartalkot.
140 9. FEJEZET
A gondterheltsg s a munkdat flbeszakt zavar tnyezk ugyancsak fkusz
mannt emsztenek fel. A proddal elz este folytatott veszekeds, a lkhrtdon
ma reggel keletkezett horpads, vagy a szmla, amelyet elfelejtettl befizetni a mlt
hten, mind olyan dolgok, amelyek gyorsan elszvhatjk a fkuszmanndat.
ALVS
Az alvs jelentsgt nem tudom elgg hangslyozni. Nekem egy kiads jszakai
alvs utn a legmagasabb a fkuszmanna-szintem. Ht rnyi alvs gyakran elegend
fkuszmannval tlt fel egy teljes, nyolc rs munkanapra. A profi szoftverfejlesztk
gy osztjk be a pihenidejket, hogy feltltsk a fkuszmanna-raktraikat, mire
reggel munkba kell indulniuk.
KOFFEIN
Semmi ktsg, hogy nhnyunk hatkonyabban tudja felhasznlni a fkuszmannjt,
ha mrskelt mennyisg koffeint juttat be a szervezetbe. Ezzel azonban lgy vatos,
ugyanis a koffein furcsn sztszrtt is teheti a figyelmedet. Ha tl sokat fogyasztasz
belle, a figyelmed a legfurcsbb helyekre kalandozhat el. Egy igazn ers koffein
zsongs eredmnyeknt akr egy egsz napot is elvesztegethetsz nem a megfelel dol
gokra sszpontostva.
A koffeinfogyaszts s -trkpessg egynenknt vltoz. n egy cssze ers k
vt szaktam inni reggel, ebdhez pedig egy dits klt. Nha megduplzar ezt az
adagot, de ennl tbb koffeint ritkn fogyasztok
JRATLTDS
A fkuszmanna-raktr rszben jratlthet azzal, ha ms, ers sszpontostst nem
ignyl dolgokkal foglalkozol. Egy kiads sta, egy beszlgets a bartaiddal, st akr
az is, ha egy ideig csak bmulsz kifel az ablakon, segthet, hogy jra megemeld a f
kuszmanna-szintedet. Vannak, akik meditlnak, vannak, akik szunyklnak egyet,
mg msok rdit hallgatnak, vagy tlapoznak egy magazint.
Tapasztalataim szerint, ha a manna elfogyott, erltetni sem tudod az sszponto
stst. Ilyenkor is rhatsz kdot, de szinte biztos, hogy msnap jra kell rnod - vagy
hnapokig, esetleg vekig egytt kell lned egy rothad masszval. Ennl jobb meg
olds, ha egy fl vagy akr egy egsz rig nem sszpontostasz a munkra.
IZOMFKUSZ
Van valami klns az olyan fizikai tevkenysgekben, mint a kzdsportok, a tai esi
vagy a jga: br jelents mrtk sszpontostst ignyelnek, ez msfajta fkusz, mint
amire a kdrsnl szksg van. Nem szellemi, hanem az izmok. Az "izomfkusz"
pedig valamirt segt jratlteni a szellemi tartalkokat. Nem is egyszer jratltsrl
AZ ID BEOSZTSA 141
van sz: tapasztalataim szerint az izmok rendszeres edzse nveli is a szellemi ssz
pontostsra val kpessget.
n testedzsnek a biciklizst vlasztottam. Kerekezni szaktam egy-kt rt, nha
hsz-harminc mrfldet is megtve. A Des Plaines folyval prhuzamosan fut s
vnyen szaktam bringzni, ezrt nem kell autkat kerlgetnem.
Biciklizs kzben csillagszati vagy politikai tmj podeastokat hallgatok, esetleg
a kedvenc zenimet. Nha pedig kikapcsalom a kszlket, s a termszet hangjait
figyelem.
Vannak, akik ktkezi munkval pihentetik az agyukat: frnak-faragnak, madel
leket ptenek, vagy kertszkednek Brmilyen tevkenysget vgezzenek is, van va
lami az izmok megdolgoztatsban, ami serkenti az agymkdst.
BEMENET S KIMENET
Az sszpontosts fenntartsa rdekben van mg egy dolog, amit ltfontossgnak
tartok: megfelel bemenettel tpllni magamat, hogy kiegyenslyozzam a kimenetet.
Szaftvert rni alkot tevkenysg, n pedig akkor rzem magamban a legtbb alkot
energit, ha msok alkotsaibl tplkozhatom, ezrt sok-sok sci-fit olvasok. A szer
zk kreativitsa valamilyen okbl kifolylag engem is j tletekre sarkall szaftverrs
kzben.
IDDOBOZOLS S PARADICSOMOK
Az egyik nagyon hatkony mdszer, amelyet az idm s az sszpontostsi kpess
gem beosztsra alkalmazok, a kzismert Pomodoro-technika2, amit "paradicso
mok" nven is ismernek. Az alaptlet nagyon egyszer. Belltasz egy htkznapi,
konyhai idmrt (hagyomnyosan paradicsom alakt) 25 percre, s amg az idzt
fut, nem hagyod, hogy brmi megzavarjon abban, amit csinlsz. Ha csng a telefon,
felveszed, s udvariasan megkrdezed, hogy visszahvhatnd-e az illett 25 perc mlva.
Ha valaki odajn hozzd, mert krdezni szeretne tled valamit, udvariasan elhrtod
azzal az grettel, hogy 25 perc mlva megkeresed. Nem szmt, mi szakt flbe, csak
az utn foglalkozhatsz vele, hogy az idzt lejrt. Vgl is, kevs dolog annyira let
bevg, hogy nem vrhat 25 percet!
Amikor a paradicsom csenget, azonnal abbahagyod, amit csinlsz, s sort kertesz
azoknak a dolgoknak az elintzsre, amelyek az idmrs kzben felmerltek Ezt
kveten tartasz pr perc sznetet, majd az idztt ismt belltod 25 percre, s ne-
2 http://www.pomodorotechnique.com/
142 9. FEJEZET
kiltsz a kvetkez
"
paradicsomnak
"
. Minden negyedik paradicsom utn hosszabb
- gy harminc perces - pihent tartasz.
Ennek a mdszernek tekintlyes irodalma van, amelyet a szves figyelmedbe ajn
lok. A fenti lers mindazonltal jl szemllteti a technika lnyeg t.
Ezt a mdszert alkalmazva az iddet
"
paradicsom
"
s
"
nem paradicsom
"
idegy
sgekre (
"
dobozokra
"
) osz tod. A paradicsarok jelkpezik a tevkeny idt. A paradi
csomokon bell vgzel igazi munkt, mg a paradicsomokon kvli idben rendezed
a mellkes krdseket, rtekezleteken veszel rszt, pihensz, illetve egyb olyan dol
gokkal foglalkozol, amelyek nem kzvetlenl a munkdhoz tartoznak.
Hny paradicsommal vgezhetsz egy nap alatt? Egy j napon akr tizenkettvel,
st akr tizennggyel, de ha rossz napod van, lehet, hogy csak kett-hrommal.
Ha szmolod ket, s brzolod a teljestmnyt, gyorsan felmrheted, mennyire ered
mnyesek a napjaid, s mennyi idt tltesz
"
egyebekkel
"
.
Vannak, akiknek annyira bejn ez a mdszer, hogy paradicsomban adjk meg
a becslsket arra nzve, hogy mennyi id szksges egy-egy feladat elvgzshez,
s a heti sebessgket is paradicsomban mrik. Ez azonban csak hab a tortn.
A Pomodoro-technika igazi elnyt a 25 perces tevkeny idegysgek jelentik, ame
lyeket a lehet leghatrozottabban meg kell vdened minden zavar tnyezvel
szemben.
ELKERLS
Nha elfordul, hogy egyszeren nem tudod rvenni magad a munkra. Lehet, hogy
az elvgzend feladat ijeszt, knyelmetlen vagy unalmas. Az is lehet, hogy gy v
led, sszetkzsre fog knyszerteni valakivel, vagy olyan mocsrba vezet, amibl
nem tudsz majd kikeveredni. De az is megeshet, hogy egyszeren nincs kedved
a feladathoz.
ELSBBSG-MEGFORDrTAS
Brmi is legyen az ok, tallni fogsz r mdot, hogy elkerld a munka elvgzst. Meg
gyzd magad, hogy valami ms srgsebb, s inkbb azzal foglalkozol. Ezt hvjk
elsbbsg-megfordtsnak (priority inversion): megemeled egy feladat fontossgi szint
jt, hogy elhalaszthasd a valjban elsbbsget lvez feladat elvgzst. Ha megfor
dtod az elsbbsgi viszonyokat, magadnak hazudsz. Nem tudsz szembenzni azzal,
amit meg kell tenned, ezrt meggyzd magad, hogy egy msik feladat fontosabb.
Tudod, hogy nem az, de inkbb hazudsz magadnak.
Pontosabban nem is magadat csapod be: valjban elksztesz egy hazugsgot,
amit majd mondani fogsz, ha valaki megkrdezi, mit csinlsz, s mirt azt csinlod.
A vdelmedet pted fel msok tletvel szemben.
AZ ID BEOSZTSA 143
Vilgos, hogy ez szakmaiatlan viselkeds. Egy profi felmri a feladatok fontoss
gt, s a szemlyes flelmeit s vgyait flretve azokat hajtja vgre, amelyek valban
elsbbsget lveznek.
VAKVGNYOK
A vakvgnyok minden szaftverfejleszt szakember letnek a rszt kpezik. Nha
hozol egy dntst, s elindulsz egy olyan szakmai ton, ami sehov sem vezet. Minl
rdekeltebb vagy a dntsed sikerben, annl tovbb fogsz bolyongani a vadonban.
Ha a szakmai hrnevedet tetted kockra, sosem keveredsz ki az erdbl.
A tapasztalat s az elvigyzatossg segt, hogy elkerlj bizonyos vakvgnyokat,
de soha nem kerlheted el az sszeset Az igazi szakrtelem ahhoz kell, hogy gyorsan
felismerd, ha tvton jrsz, s legyen btorsgod visszafordulni. Ezt nha "A gdrk
szablynak" (The Rule ofHoles) hvjk: ha egy gdrben tallod magad, hagyd abba
az sst.
Egy profi igyekszik elkerlni, hogy olyannyira rdekelt legyen egy tlet sikerben,
hogy ne tudjon lemondani rla, s visszakozni. Egy profi nyitott ms tletekre is,
hogy ha zskutcba jutna, mindig legyen kit.
MOCSARAK, DAGONYK, INGOVNYOK
S MINDENFLE SZEMTHALMOK
A szemthalmok a vakvgnynl is rosszabbak, mert csak lelasstanak de nem lltanak
meg. Akadlyozzk az elrehaladst, de nyers ervel tverekedve magad rajtuk tovbb
mehetsz. A szemthalmok azrt rosszabbak a vakvgnyoknl, mert mindig ltod az
elre vezet utat, s az mindig rvidebbnek tnik, mint a visszat (pedig nem az).
Lttam mr szemthalomm vltozott szoftver miatt tnkretett termkeket s
csdbe ment cgeket, s lttam hatkonyan dolgoz csapatokat mindssze nhny h
nap alatt zombiv vlni. Semminek sincs mlyebb s tovbb tart negatv hatsa egy
szaftverfejleszt csapat termelkenysgre, mint egy szemtkupacnak. Semminek.
A problma az, hogy a szemthalmok ugyangy elkerlhetetlenek, mint a vakv
gnyok. A tapasztalat s a krltekints segthet ksleltetni a megjelensket, de
elbb-utbb meg fogsz hozni egy olyan dntst, ami szemthalomhoz vezet.
A szemthalom alattomosan nvekszik. Kidolgozo! egy megoldst egy egyszer
problmra, gyelve r, hogy a kd tiszta s ttekinthet maradjon. Ahogy azonban
a problma kiterjedse s bonyolultsga n, bvteni kezded a kdalapot (persze to
vbbra is igyekszel, hogy a kd a lehet legtisztbb maradjon). Egy ponton egyszer
144 9. FEJEZET
csak rjssz, hogy mr az elejn rossz tervezsi dntst hoztl, s a kcod nem mre
tezhet jl abban az irnyban, amerre a kvetelmnyek tartanak.
Ez a fordulpont. Ekkor mg mindig visszam ehetsz, s kijavthatod a szaftver szer
kezett, de tovbb is haladhatsz elre. Visszakozni kltsgesnek tnik, mert t kell
dolgoznod a mr meglev kdot, csakhogy ksbb csak nehezebb lesz visszafordulni.
Ha tovbb gzalsz elre, a rendszert egy macsrba vezeted, amelybl lehet, hogy soha
tbb nem tud kiszabadulni.
A profik sokkal jobban tartanak a szemthalmoktl, mint a vakvgnyoktL Min
dig beren vizslatjk, hogy nem kezd-e mrtktelen nvekedsbe egy szemtkupac,
s minden szksges erfesztst megtesznek annak rdekben, hogy a lehet leggyor
sabban kikecmeregjenek a macsrbL
Elregzolni egy mocsrban, mikzben tudod, hogy az egy mocsr, az elsbbsg
megfordts legrosszabb fajtja. Az elre haladssal hazudsz magadnak, a csapatod
nak, a cgednek s a megrendelknek is. Azzal nyugtatod ket, hogy minden rendben
lesz, mikzben egytt merltk el a vgzetes mocsrban.
SSZEFOGLALS
A profi szoftverfejlesztk krltekinten igyekeznek beosztani az idejket, s meg
rizni az sszpontostsi kpessgket. Tisztban vannak az elsbbsgek megford
tsra csbt tnyezkkel, s becslettel kzdenek ellenk. Nyitottak az alternatv
megoldsokra, hogy minden t szabadon maradjon elttk; soha nem kockztatnak
annyit egy megoldssal, hogy ne tudjk feladni azt; s mindig beren figyelik a n
vekv szemtkupacokat, hogy azonnal eltakarthassk ket, amint felismerik. Nincs
szomorbb ltvny egy olyan szaftverfejleszt csapatnl, amelyik eredmnytelenl
vonszolja magt elre egy egyre mlyl mocsrban.
10.FEJEZET
BECSLS
A becsls az egyik legegyszerbb, ugyanakkor legijesztbb tevkenysg, amivel
a profi szaftverfejlesz tk szembeslnek. Egy vllalkozs sorsa vagy a hrnevnk ml
hat rajta. Sokszor ez ll a szarongsaink s a kudarcaink mgtt. A becsls az zlet
emberek s a fejlesztk kz bevert legfontosabb k, s szinte teljes egszben innen
ered a viszonyukat ural bizalmatlansg.
1978-ban vezet fejlesztje voltam egy assembly nyelven rt, 32K-s, begyazott
Z-80-programnak. A programot 32 darab lK x 8 EEprom lapkba gettk. Ezt a 32
lapkt hrom krtyra szereltk, amelyek mindegyike 12 lapkt trolt.
BECSLS 147
A terepen eszkzk szzaival rendelkeztnk, amelyek telefonkzpontokban voltak
teleptve szerte az Egyeslt llamokban. Minden alkalommal, amikor kijavtottunk
egy programhibt, vagy hozzadtunk egy szolgltatst a szoftverhez, minden egy
sgbe karbantartkat kellett kldennk, hogy kicserljk mind a 32 lapkt.
Egy rmlom volt. A lapkk s a krtyk trkeny anyagbl kszltek, a lapkk ti
knnyen meghajlottak s eltrtek, a krtyk folytonos hajltgatsa pedig krosthatta
a forrasztsakaL Hatalmas volt a trs s a hibk kockzata, a kltsgek pedig tls
gosan magasnak bizonyultak a cg szmra.
A fnkm, Ken Finder, arra krt, hogy oldjam meg ezt a problmt. Azt szerette
volna, hogy gy lehessen vltoztatni egy lapkn, hogy ne kelljen az sszes tbbit is
kicserlni. Ha olvastad a korbbi knyveimet, vagy hallottad valamelyik eladsomat,
akkor tudhatod, hogy sokat beszlek a fggetlen telepthetsgrL Ez volt az az eset,
amikor elszr szembesltem ennek fontossgvaL
A gondot az jelentette, hogy a szaftver egyetlen sszeszerkesztett, vgrehajthat
llomnybl llt. Ha j kdsorral bvtettk a programot, akkor a kd rkvetkez
sszes sornak megvltozott a memriacme. Mivel minden lapja lK-t trolt a cm
trbl, lnyegben minden lapka tartalma megvltozott.
A megolds meglehetsen egyszernek bizonyult. Minden lapkt fggetlenteni
kellett a tbbitl. Olyan nll fordtsi egysgekk kellett alaktani ket, amelyeket
egymstl fggetlenl lehet begetni.
Megmrtem ht az alkalmazs sszes fggvnynek mrett, s rtam egy egy
szer programot, amely kiraksjtkknt helyezte el azokat a lapkkon, krlbell
100 bjtnyi helyet hagyva a ksbbi bvtsnek Minden lapka elejn elhelyeztem egy
tblzatot a lapkn tallhat fggvnyek mutatival. Rendszerindtskor ezek a mu
tatk a RAM-ba kerltek, a rendszer kdjt pedig gy mdostottuk, hogy a fggv
nyeket soha ne kzvetlenl, hanem kizrlag ezeken a RAM-vektorokon keresztl
hvja meg.
Igen, jl rted. A lapkkat v-tblkkal rendelkez objektumknt, a fggvnyeket
pedig tbbalakknt (polimorfknt) kezeltem. gy tanultam meg az objektumkz
pont tervezs bizonyos elveit- jval azeltt, hogy egyltaln tudtam volna, mi az az
objektum.
Mindez hatalmas elnykkel jrt. Nem csak hogy nllan telepthettk a lapk
kat, hanem a terepen bizonyos fggvnyeknek a RAM-ba helyezsvel s a vektorok
tirnytsval foltozst is vgezhettnk Ez a terepen vgrehajtott hibakeresst, il
letve menet kzbeni javtst sokkal knnyebb tette.
De egy kiss elkalandoztam. Amikor Ken odajtt hozzm, s felkrt a problma
megoldsra, felvetette, hogy esetleg prblkozzak fggvnymutatkkal. Egy-kt nap
alatt kidolgoztam az tletet, majd bemutattam neki egy rszletes tervet. Ken megkr
dezte, mennyi idbe telik megvalstani a tervet, n pedig azt feleltem, hogy krl
bell egy hnapba.
148 10.FEJEZET
Hrom hnapig tartott.
letemben csak ktszer rgtam be, s csak egyszer voltam igazn rszeg: a Teradyne
karcsonyi bulijn, 1978-ban. 26 ves voltam.
A bulit a Teradyne irodjban tartottuk, ami jrszt egy nyitott labor volt. Min
denki korn rkezett, a zenekarnak s az telfutrnak azonban tjt llta egy hatal
mas hvihar. Szerencsre pia volt bven.
Nem emlkszem tl sok mindenre abbl az jszakbl, de amire igen, azt is jobb
lenne elfelejteni. Egy megrendt pillanatot azonban megosztank az Olvasval.
Trklsben ltem a padln Kennel (a fnkmmel, aki mr 29 ves volt akkor,
s nem rgott be), s arrl panaszkodtam neki, hogy milyen sokig tart a vektorizcis
munka. Az alkohol kiengedte az elfojtott flelmeimet s ktsgeimet a becslsemmel
kapcsolatban. Azt hiszem, a fejemet nem hajtottam az lbe, de a rszletekre csak ho
mlyosan emlkszem.
Arra emlkszem, hogy megkrdeztem, haragszik-e rm, s gy gondolja-e, hogy
tl sokig tart nekem a dolog. Br az jszaka egsze kdbe vsz, azt, amit vlaszolt,
vtizedekkel ksbb sem felejtettem el. Ezt mondta:
"
Igen, szerintem nagyon sokig
tart, de ltom, hogy kemnyen dolgozol az gyn, s jl haladsz. Erre tnyleg szk
sgnk van, gyhogy nem, nem haragszom rd.
"
MIT JELENT A BECSLS?
Az a baj, hogy mindenki mskpp rtelmezi a becslseket Az zletemberek ktele
zettsgvllalsknt tekintenek a becslsekre, a fejlesztk azonban tallgatsknt -
mrpedig ez alapvet klnbsg.
KTELEZETTSGVLLALS
A ktelezettsgvllals azt jelenti, hogy valamit teljestened kell. Ha ktelezettsget
vllalsz arra, hogy valamivel eikszlsz egy bizonyos hatridre, akkor egyszeren
muszj akkorra elkszlnd. Ha ez azt jelenti, hogy napi 12 rt kell dolgoznod, a ht
vgket is belertve, s le kell mondanod a csaldi nyaralsrl is, akkor azt kell ten
ned. Ktelezettsget vllaltl, gyhogy llnod kell a szavad.
Egy profi nem vllal ktelezettsget, hacsak nem tudja biztosan, hogy kpes lesz tel
jesteni. Ennyire egyszer. Ha arra krnek, hogy ktelezd el magad valami mellett, ami
ben nem vagy biztos, hogy el tudod vgezni, akkor a tisztessg azt kvnja, hogy vissza
utastsd a krst. Ha arra krnek, hogy vllalj be egy olyan hatridt, amirl tudod, hogy
elrhet, de tlrzst, htvgket s kihagyott csaldi vakcikat ignyel, akkor a dn
ts a te kezedben van - de jobban jrsz, ha ksz vagy megtenni, amit csak kell.
A ktelezettsgvllals alapja a bizonyossg. Akik fel vllalsz valamit, azok ter
veket fognak alapozni a vllalsodra. Ha nem teljested, amit vllal tl, azrt a hrneved
BECSLS 149
s k is hatalmas rat fizetnek. Egy vllals nem teljestse tisztessgtelen, s csak egy
fokkal kevsb slyos, mint a nylt hazugsg.
BECSLS
A becsls ezzel szemben tallgats. Nem jelent ktelezettsgvllalst Nem tartalmaz
gretet. Ha egy becsls tvesnek bizonyul, az semmilyen mdon nem tekinthet tisz
tessgtelensgnek. Azrt ksztnk becslseket, mert nem tudjuk, hogy egy adott fel
adat elvgzse mennyi idbe fog telni.
Sajnos a legtbb szaftverfejleszt szrnyen rosszul becsl. Emgtt nem az ll,
hogy a becslshez valamifle titkos kpessg kell - sz sincs rla. Azrt becslnk
gyakran nagyon rosszul, mert nem rtjk a becsls valdi termszett.
A becsls nem szm, hanem eloszls. Vegyk a kvetkez pldt:
Mike:
"
Becslsed szerint mennyi id kell a Frazzle-feladat elvgzshez?
"
Peter:
"
Hrom nap.
"
Peter tnyleg ksz lesz hrom nap alatt? Lehetsges, de mennyire valszn? A v
lasz az, hogy fogalmunk sincs. Hogy rtette Peter azt, amit mondott, s mit tudott
meg belle Mike? Ha Mike hrom nap mlva felkeresi Petert, lepdjn meg, ha Peter
esetleg nincs ksz? Mirt kellene meglepdnie? Peter nem vllalt ktelezettsget. Nem
arrl beszlt, hogy mennyivel valsznbb a hrom nap, mint a ngy vagy az t.
Mi trtnt volna, ha Mike megkrdezi Petert, hogy mennyire valszn, hogy v-
gezni tud a becslt hrom nap alatt?
Mike:
"
Mennyire valszn, hogy vgezni tudsz hrom nap alatt?
"
Peter:
"
Elgg.
"
Mike:
"
Tudnd szmszersteni?
"
Peter:
"
tven-hatvan szzalk.
"
Mike:
"
Teht knnyen lehet, hogy ngy nap lesz belle.
"
Peter:
"
Igen, st akr t vagy hat is, br azt ktlem.
"
Mike:
"
Mennyire valszntlen?
"
Peter:
"
Ht, nem is tudom ... Kilencvent szzalkig biztos vagyok benne, hogy
kevesebb, mint hat nap alatt elkszlk.
"
Mike:
"
gy rted, ht nap is lehet?
"
Peter:
"
Csak akkor, ha semmi nem jn ssze. De ha tnyleg minden flresiklik,
akkor akr tz-tizenegy nap is lehet. De az nem tl valszn, hogy ennyire
pechnk legyen.
"
Most mr kzeltnk az igazsg fel. Peter becslse egy valsznsg-eloszls.
Peter egy olyan diagramknt ltja a befejezs valsznsgt a fejben, mint amilyet
a 10.1. brn lthatsz.
150 10.FEJEZET
gy mr vilgos, mirt becslt Peter elszr hrom napot. Ez a legmagasabb oszlop
a diagramon - ez jelkpezi, hogy Peter mit tekint a feladat legvalsznbb idigny
nek Mike azonban mskpp ltja a dolgokat. a diagram jobb oldali oszlopait nzi,
s aggdik, hogy Peter esetleg tnyleg csak tizenegy nap alatt fog vgezni.
50%
45%
40%
35%
30%
25%
20%
15%
10%
5%
-
-
O%
2
10.1. bra
Valsznsg-eloszls
-
-
-
1-
3 4
l l r -
5 6 7 8 9 10 11
De valban kell-e Mike-nak aggdnia emiatt? Termszetesen! Murphy1 biztosan
elszrakozik majd Peterrel, teht lesznek olyan dolgok, amelyek balul tnek ki.
BELERTETT KTELEZETTSGVLLAL 5
Mike-nak teht van egy gondja: nem tudja biztosan, mennyi ideig fog tartani Peter
nek a feladat vgrehajtsa. A bizonytalansg lehet legkisebbre cskkentse rdek
ben megkrheti Petert, hogy vllaljon ktelezettsget, Peter azonban nincs abban
a helyzetben, hogy gretet tehessen:
Mike: "Peter, tudnl mondani nekem egy biztos idpontot, amire kszen leszel?
"
Peter: "Nem, Mike. Ahogy mondtam, csak azt tudom, hogy valsznleg hrom,
esetleg ngy nap kell.
"
Mike: "Maradhatunk akkor ngyben?
"
Peter: "Nem, mert az t vagy a hat sincs kizrva."
l Murphy trvnye kimondja, hogy ha valami elromolhat, akkor el is romlik.
BECSLS 151
Eddig mindkt fl korrekten viselkedik. Mike ktelezettsgvllalst kr, Peter
azonban tapintatosan visszautastja. gy aztn Mike mssal prblkozik:
Mike:
"
Rendben, Peter, de meg tudod prblni, hogy ne tartson tovbb hat napnl?
"
Mike krse elg rtatlannak hangzik, s Mike-nak ktsgkvl nincsenek hts szn
dkai. De pontosan mire is kri Mike Petert? Mit jelent a
"
megprblni
"
?
A 2 fejezetben mr szba kerlt ez. A
"
prblkozni
"
ige megtveszt kifejezs.
Ha Peter beleegyezik, hogy
"
megprblja
"
, akkor flrerthetetlenl elktelezi magt
a hatnapos hatrid mellett. Ha beleegyezel abba, hogy
"
megprblod
"
, akkor kte
lezettsget vllalsz a sikerre.
Milyen ms rtelmezs lehetsges? Pontosan mit fog tenni Peter, hogy
"
megpr
bljon
"
vgezni? Tbbet fog dolgozni napi nyolc rnl? Ez elg egyrtelmen benne
van. Htvgn is dolgozni fog? Igen, ez is belerthet. Kihagyja a csaldi programo
kat? Igen, hallgatlagosan ebbe is belemegy. Mindezek hozz tartoznak a
"
prblko
zshoz
"
. Ha Peter mgsem lenne hajland ilyesmikre, akkor Mike azzal vdolhatn,
hogy nem tesz meg mindent.
Egy profi vilgosan meghzza a hatrt a becsls s a ktelezettsgvllals kztt,
s kizrlag akkor vllal ktelezettsget, ha biztosan tudja, hogy sikerrel fog jrni.
gyel r, hogy ne tegyen semmilyen belertett ktelezettsgvllalst. A becslsei va
lsznsg-eloszlst igyekszik a lehet legvilgosabban a msik tudomsra hozni,
hogy a dntshozk megfelelen tudjanak tervezni.
PERT
A Program Evaluation and Review Technique (PERT; programrtkel s fellvizsgl
mdszer) 1957-ben szletett, s az amerikai haditengerszet Polaris tengeralattjr
programja szmra alkottk meg. A PERT egyik elemt a becslsek kiszmtsnak
mdja jelenti. A sma nagyon egyszer, de igen hatkony mdszert biztost a becslsek
dntshozk szmra felhasznlhat valsznsg-eloszlsokk alaktsra.
Amikor megbecsld egy feladat idignyt, hrom szmot adsz meg. Ezt hvjk
hromvaricis analzisnek:
O: Optimista becsls. Ez a szm szlssgesen optimista. Csak akkor tudod
ilyen gyorsan vgrehajtani a feladatot, ha minden tkletesen klappol. A ma
tematikai szmts valjban csak akkor mkdik, ha ennek a szmnak 1%
nl sokkal kisebb az elfordulsi eslye.2 Peter esetben, ahogy a 10.1. bra
mutatja, az optimista becsls l nap.
2 A pontos szm norml eloszlsnll:769, vagy 0,13% ,vagy 3 szigma. Az egy az ezerhez esly valsz
nleg alkalmazhat.
152 10.FEJEZET
N: Nvleges becsls. Ennek a becslsnek van a legnagyobb eslye a sikerre.
Ha oszlopdiagramot kellene rajzolnod, ez lenne a legmagasabb oszlop. A 10.1.
brn ez a 3 nap.
P: Pesszimista becsls. Ez ismt csak szlssges becsls, amelybe mindent
bele kell szmolni, kivve a hurriknokat, az atomhbort, az elkborolt fe
kete lyukakat s ms katasztrfkat. Ebben az esetben is igaz, hogy a mate
matika csak akkor mkdik, ha ennek a szmnak 1%-nl sokkal kisebb az
elfordulsi eslye. Peter esetben ez a szm mr nem is frt fel a diagram
jobb oldalra. Teht 12 nap.
Ha adott a fenti hrom becsls, a valsznsg-eloszlst gy rhatjuk fel:
Jl=0+4N+P
6
A l a feladat vgrehajtsnak vrhat idtartama. Ez Peter esetben (l +12+ 12)/6,
vagyis 4,2 nap. A legtbb feladatnl nmileg pesszimista szmot kapunk,
mert az eloszlsi fggvny jobb oldali farka hosszabb, mint a bal oldali. 3
c=P-0
6
A c a feladat valsznsg-eloszlsnak szrsa4 (standard eltrse), ami azt
adja meg, hogy mennyire bizonytalan a feladat befejezse. Ha ez a szm nagy,
akkor a bizonytalansg is az. Peter esetben ez a szm (12- 1)/6, vagyis k
rlbell l,S nap.
Peter 4,2/1,8 becslse alapjn Mike megrti, hogy a feladat valsznleg ksz lesz t
napon bell, de hat vagy akr kilenc napot is ignybe vehet.
Mike azonban nem csak egyetlen feladatrt felel, hanem egy sok rszfeladatbl ll
projektrt Ezek kzl hrom tartozik Peterre, akinek sorban egyms utn kell vg
rehajtania azokat. Peter a 10.1. tblzatban lthat becslseket adta az emltett felada
tokra:
3 A PERT felttelezi, hogy ez kzeltleg bta eloszlst eredmnyez. Ez sszer, hiszen egy feladat
minimlis idignye gyakran biztosabb a maximlisnL [McConnell2006]1-3. bra
4 Ha nem tudod, mi az a szrs (standard eltrs), akkor keress egy j sszefoglalst a valsznsg
szmtsrl, illetve a statisztikai szmtsokrL Az alapelvet nem nehz megrteni, s nagyon j
szolglatot tehet.
BECSLS 153
10.1. tblzat Peter feladatai
Feladat Optimista becsls Nvleges becsls Pesszimista becsls
l
a
Alfa l 3 12 4,2 1,8
Bta l 1,5 14 3,5 2,2
Gamma 3 6,25 ll 6,5 1,3
Mirt ilyen furcsk a
"
Bta
"
feladat szmai? gy tnik, Peter elgg biztos a gyors
elvgzsben, de van valami, ami ha rosszul sl el, jelentsen kizkkentheti a kerk
vgsbl. Hogyan rtelmezze ezt Mike? Mire szmtson tervezskor: mikor vgez
Peter mindhrom feladattal?
Nos, nhny egyszer szmtssal Mike egyestheti Peter feladatait, s felvzol
hatja azok sszestett valsznsg-eloszlst. A matematika meglehetsen egyszer:

fsorozat
=
Lffeladat
Brmely feladatsorozat esetben a vrhat idtartam a sorozatban tallhat fel
adatok vrhat idtartamnak egyszer sszege. Ha teht Peternek hrom feladatot
kell vgrehajtania, s az ezekre vonatkoz becslsek 4,2/1,8; 3,5/2,2; s 6,5/1,3, akkor
Peter valsznleg krlbell 14 nap alatt fog vgezni mindhrom feladattal, mert
4,2+ 3,5+6,5 = 14,2.
a = .LSa 2
sorozat feladat
A sorozat szrsa az egyes feladatok szrsa ngyzetnek sszegbl vont ngy-
zetgyk. Peter hrom feladatnak szrsa teht krlbell 3:
(1,82 + 2,22 + 1Y)''2 =
(3,24 + 2,48 + 1,6
9
)1
1
2 =
9
,77
1
1
2 = -
3,13
Ez azt mondja Mike-nak, hogy Peter valsznleg 14 nap alatt fog vgezni a felada
taival, de a vgrehajtsuk 17 (la), esetleg 20 napot (2a) is ignybe vehet, st a dolog
akr tovbb is tarthat, de ez elg valszntlen.
Nzd meg ismt a becslsek tblzatt rzed a nyomst, hogy mindhrom fel
adattal eikszlj t nap alatt? Vgl is, az optimista becsls l , l s 3, de mg a nv
leges becsls is csak 10 napot tesz ki sszesen. Hogyan lesz ebbl 14, plne 17-20
nap? A vlasz az, hogy az egyes feladatokban rejl bizonytalansg sszeaddik, s
ez adja meg a terv valszersgt.
Ha mr sokves tapasztalattal rendelkez programoz vagy, valsznleg lttl
optimistn becslt projekteket, amelyek hromszor-tszr hosszabb ideig tartottak
a remltnL Az imnt bemutatott PERT-sma hasznlata az egyik alkalmas mdszer
154 10.FEJEZET
arra, hogy elbe menj a tlzottan optimista vrakozsoknak. Egy profi szaftverfej
leszt nagyon gyel r, hogy csak relis vrakozsokat keltsen, s ne engedjen a nyo
msnak, hogy prbla meg a gyorsabb haladst.
A FELADATOK IDIGNYNEK MEGBECSLSE
Mike s Peter hatalmas hibt kvettek el. Mike megkrdezte Petert, hogy mennyi
idbe telik, amg vgez a feladataival, Peter pedig szinte, hromvaricis vlaszokat
adott, de mi a helyzet a csapat tbbi tagjval? Nem lehet, hogy k ms vlemnyen
lettek volna?
A becslsek legfontosabb forrst a krltted lev emberek jelentik. k olyasmit
is lthatnak, amit te nem, gy segthetnek pontosabban megbecslni a feladataid id
ignyt, mint amire te magad kpes vagy.
"
SZLESKR DELPHI
"
Az 1970-es vekben Barry Boehm bemutatott neknk egy becslsi mdszert,
amelynek a neve "szleskr Delphi"5 (wideband Delphi), s amelynek az vek sorn
szmos vltozata alakult ki. Vannak kztk formlisak s informlisak, de egy va
lami mindegyikben kzs: a konszenzus.
A stratgia egyszer. A csapat sszegyl, megvitat egy feladatot, megbecsli an
nak idignyt, majd addig folytatja a megbeszlst s a becslst, amg kzsen meg
nem egyeznek valamiben.
A Boehm ltal eredetileg felvzolt megkzelts tbb rtekezletet s dokumentu
mot tartalmazott, ami az n zlsemnek tl sok felesleges formasg. n inkbb az
albbiakban vzolt egyszer, alacsony kltsg megoldsokat rszester elnyben.
REPL UJJAK A rsztvevk krbelnek egy asztalt. A feladatokat egyesvel vitatjk
meg. Minden feladat esetben megbeszlik, mibl ll a feladat, mi zavarhatja meg,
vagy teheti bonyolultabb, s hogyan lehet megvalstani. Ezt kveten a rsztvevk
a kezket az asztal al teszik, s attl fggen, hogy szeriotk milyen sokig fog tar
tani a feladat elvgzse, felemelik 0-5 ujjukat. A vitavezet hromig szmol, a rszt
vevk pedig hromra megmutatjk a kezket.
Ha mindenki ugyanazt a szmot mutatta fel, rtrnek a kvetkez feladatra, egyb
knt pedig folytatjk a vitt, hogy kidertsk, mirt nem rtettek egyet. Az eljrs ad
dig ismtldik, amg konszenzusra nem jutnak.
5 [Boehm81]
BECSLS 155
Az egyetrtsnek nem kell abszolt teljesnek lennie. Az is elg, ha a rsztvevk
becslsei kzel esnek egymshoz. Ha mindenki hrmat vagy ngyet mutat fel, az
egyetrtsnek szmt. Ha viszont mindenki ngy ujjt mutatja, de egy valaki csak
egyet, akkor a vita mg nincs lezrva.
A becslsi sklt a rsztvevk az rtekezlet elejn dntik el. Ez lehet az egy-egy fel
adathoz szksges napok szma, de valami izgalmasabb is, mondjuk
"
az ujjak szma
szorozva hrommal
"
vagy
"
az ujjak szmnak ngyzete
"
.
Fontos, hogy mindenki egyszerre mutassa fel az ujjait, nehogy a tbbiek kezt ltva
egyesek megvltoztassk a becslsket.
TERVEZPKER A tervezpkert (Planning Poker) 2002-ben mutatta be James
Grenning egy kitn rsban. 6 A szleskr Delphinek ez a varicija annyira np
szer lett, hogy szmos cg reklmajndkknt tervezpker-krtyapaklikat kezdett
osztogatni_? Mg egy webhely is szletett planningpoker.com nven, amelynek a se
gtsgve! az Interneten keresztl lehet tervezpkerezni, ha a csapat tagjai kln
bz fldrajzi helyeken tevkenykednek.
Az alaptlet nagyon egyszer. A becslst vgz csapat minden tagjnak ki osztunk
nhny krtyt, amelyeken klnbz szmok vannak. A 0-tlS-ig terjed leoszts
jl mkdik, mert ez logikailag megfelel a
"
repl ujjak
"
mdszernek.
A csapat ez utn kivlaszt egy tmt, s megvitatja. Egy ponton a vitavezet meg
kri a rsztvevket, hogy vlasszanak egy krtyt. A csapat tagjai kivlasztjk azt
a krtyt a kezkbl, amelyiknek a szma megfelel a sajt becslsknek, s felmutat
jk azt, htlappal kifel, hogy a tbbiek ne lssk, milyen szm van rajta. Ez utn
a vitavezet megkri a rsztvevket, hogy fedjk fel a krtyjukat.
A tbbi ugyanaz, mint a
"
repl ujjak
"
esetben. Ha mindenki egyetrt, akkor
a becslst elfogadottnak tekintik; ha nem, akkor viszont mindenki visszateszi a kr
tyt a sajtjai kz, s a
"
jtkosok
"
folytatjk a feladat megvitatst
A kiosztand krtyk megfelel rtknek kivlasztsra klnfle
"
tudomnyos
"
elmletek szlettek. Egyesek odig merszkedtek, hogy Fibonacci-sorozatoknak megfe
lel krtykat hasznlnak, mg msok paklijban a vgtelen s a krdjel is szerepel. Sze
mlyes vlemnyem szerint a O, l, 3, 5, 10 szmozs krtyk tkletesen megfelelnek.
VISZONYfT BECSLS .. A szleskr Delphi egy klnsen rdekes vltozatt Lowell
Lindstrom mutatta meg nekem vekkel ezeltt, s a megoldst jelents sikerrel alkal
maztam klnfle megrendelknl s csapatoknL
Minden feladatot krtykra runk, mindenfle becsls nlkl. A becslst vgz
csapat krlll egy asztalt, amelyre vletlenszeren kitertjk a krtykat (de egy
6 [Grenning2002]
7 http://store.mountaingoatsoftware.com/products/planning-poker-cards
156 10. FEJEZET
zentblra is fel lehet tzni ket). A csapat tagjai nem beszlnek, csak egyszeren
rendezni kezdik a krtykat egymshoz kpest. A hosszabb idt ignyl feladatok
jobbra, mg a kisebbek balra kerlnek.
A csapat brmelyik tagja brmikor elmozdthatja brmelyik krtyt, akkor is, ha
azt valaki ms mr elhelyezte. Ha egy krtyt q alkalomnl tbbszr helyeznk t,
akkor azt a krtyt flretesszk megvitatsra.
A nma rendezs egyszer csak vget r, s akkor megkezddhet a vita, hogy egyet
rtenek-e a rsztvevk a krtyk elhelyezsveL A konszenzus elrse rdekben gyors
terveket vagy kzzel felrajzolt vzlatokat is lehet kszteni.
A kvetkez lpsben vonalakat hzunk a krtyk kztt, amelyek a
"
vdrk
"
mrett brzoljk. A
"
vdrk
"
lehetnek napok, hetek vagy pontok is. Hagyomnyo
san t
"
vdrt
"
szoktak hasznlni egy Fibonacci-sorbl (l, 2, 3, 5, 8).
HROMVARICis BECSLS A szleskr Delphi-eljrsnak ezek a vltozatai arra al
kalmasak, hogy egy feladathoz egyetlen nvleges becslst hatrozzunk meg, de ahogy
korbban emltettem, a legtbbszr hrom becsls szksges, hogy felvzolhassuk
a valsznsg-eloszlst. Az egyes feladatok optimista s pesszimista rtkei a szles
kr Delphi-eljrs brmelyik vltozatval nagyon gyorsan elllthatk Ha pldul
a tervezpkert alkalmazzuk, csak meg kell krnnk a csapat tagjait, hogy mutassk
fel a pesszimista becslskhz tartoz krtyt, majd ki kell vlasztanunk a legna
gyobb szmot tartalmazt. Az optimista becslst ugyangy hatrozhatjuk meg, csak
a legkisebb szmot kell vlasztanunk.
A NAGY SZMOK TRVNYE
A becslseknl nagy a tveds eslye - ezrt hvjk ket becslsnek A tves becslsek
kezelsnek egyik mdja a nagy szmok trvnynek kihasznlsn alapul. 8 Ebbl
a trvnybl kvetkezik, hogy ha egy nagy feladatot sok kisebb feladatra bontunk, s
kln-kln becsljk meg az idignyket, az gy becslt idtartamok sszege pon
tosabban kzelti meg a valsgot, mint ha egyetlen becslst adnnk az eredeti, na
gyobb feladatra. A nagyobb pontossgnak az az oka, hogy a kisebb feladatok idig
nynek megbecslsekor kisebb a hibk eslye.
Ez termszetesen optimista megkzelts. A becslsi hibk inkbb albecslsknt
s nem tlbecslsknt jelentkeznek, ezrt az sszegzs bajosan lesz tkletes. Ezzel
egytt a nagyobb feladatok kisebbekre bontsa, s a kisebb egysgek kln-kln
megbecslse j mdszer. A hibk rszben valban kiegyenltik egymst, a felbonts
8 http://en.wikipedia.org/wiki/Law_of_large_numbers
BECSLS 157
rvn pedig jobban megrthetjk a feladatokat, s kikszblhetjk a kellemetlen
meglepetseket.
SSZEFOGLALS
A profi szoftverfejlesztk tudjk, hogyan lssk el az zleti dntshozkat olyan gya
korlati becslsekkel, amelyeket azok felhasznlhatnak a tervezshez. Nem tesznek
olyan greteket, amelyeket nem tudnak betartani, s nem vllalnak ktelezettsget
olyasmire, aminek a teljestsben nem biztosak.
Amikor egy profi mgis ktelezettsget vllal, konkrt szmokat s idpontokat
mond, s tartja is magt hozzjuk. A legtbb esetben azonban a profik nem tesznek
ilyen ktelezettsgvllalst. Ehelyett a valsznsgt becslik meg annak, hogy vrha
tan mikorra fejeznek be egy feladatot, s hogy ettl milyen eltrsek lehetsgesek.
A profi szoftverfejlesztk a csapatuk tbbi tagjval kzsen igyekeznek mindenki
szmra elfogadhat becslseket adni a dntshozknak
Az ebben a fejezetben ismertetett eljrsok csak pldk azokra a klnbz md
szerekre, amelyeknek a segtsgvel a profi programozk gyakorlati becslseket k
sztenek. Lteznek ms hasonl eljrsok is, amelyek esetleg mg jobbak is lehetnek.
Csak azrt ezeket mutattam be, mert ezek azok, amelyek nlam bevltak.
IRODALOMJEGYZK
[McConnell2006]: Steve McConnell: Software Estimation: Demystifying the Black Art.
Redmond, WA. Microsoft Press, 2006.
[Boehm81]: Barry W. Boehm: Software Engineering Economics. Upper Saddle River,
NJ. Prentice Hall, 1981.
[Grenning2002]: James Grenning: Planning Poker or How to A void Analysis Paralysis
while Release Planning. http://renaissancesoftware.net/papers/14-papers/44-plann
ing-poker.html, 2002. prilis.
11. FEJEZET
NYOMS
Kpzeld el, hogy testen kvli lmnyben van rszed, s ltod magad a mtasztalon,
mikzben a sebsz nyitott szvmttet hajt vgre rajtad. A sebsz megprblja meg
menteni az leted, de az id szkre szabott, ezrt gyorsan kell vgeznie: mg
"
lap
zrta
"
- az leted lapjainak lezrsa - eltt.
Milyen viselkedst vrsz el az orvostl? Azt szeretnd, ha nyugodt s sszeszedett
lenne? Azt szeretnd, ha vilgos s precz utastsokat adna az asszisztenseinek? Azt sze
retnd, ha azt csinln, amire tantottk, s a szakmja szablyaihoz tartan magt?
NYOMS 159
Vagy azt akarod, hogy izzadjon s kromkodjon? Csapkodja az asztalt, s orvosi
eszkzket hajigljon? Szidja a vezetst a kptelen elvrsok miatt, s meglls nlkl
panaszkodjon, hogy semmire sincs elg id? Azt szeretnd, hogy profiknt viselked
jen, vagy gy, mint egy tipikus szoftverfejleszt?
Egy profi programoz nyoms alatt is higgadt s dntskpes marad. Ha a nyoms
n, a szakmai tudsra tmaszkodik, mert tudja, hogy ez a legjobb mdja annak,
hogy tartani tudja a hatridket, s eleget tudjon tenni a vllalt ktelezettsgeinek,
amelyek a vllt nyomjk.
1988-ban a Clear Communications nev jdonslt cgnl dolgoztam, amely iga
zn soha nem tudott elemelkedni a fldtl. Az els klcsnnek hamar a nyakra hg
tunk, gy msodszor, majd harmadszor is klcsnrt kellett folyamodnunk.
A termknkrl alkotott kezdeti elkpzelsnk gretesnek tnt, de a termk fel
ptst nem igazn sikerlt kitallnunk Kezdetben egyarnt gondolkodtunk szaft
verben s hardverben, aztn csak a szoftver maradt. A szaftverplatform PC-krl
Sparcstation-kre vltozott, a megrendelink kre pedig az ignyes vsrlktl elto
ldott a belp szint fel. Vgl a cg teljesen elvetette az eredeti termktervet, mi
kzben olyasvalamit igyekezett tallni, ami bevtelt tudna termelni. A kzel ngy v
alatt, amelyet ott tltttem, a vllalkozs valsznleg egy fillrt sem keresett.
Taln mondanom sem kell, hogy mi, szoftverfejlesztk, jelents nyoms alatt ll
tunk. Jnhnyszor tlrztunk, s egsz htvgket tltttnk az irodban, a termi
nlunknl. Olyan C-fggvnyeket rtunk, amelyek 3000 sornyi hosszsgak voltak.
Ordtozssal s egyms szidalmazsval tarktott vitkat folytattunk Frtuk egymst,
s rgyeket kerestnk, hogy kibjhassunk a feladatok all. Volt, aki kllel verte
a falat, msok a tollukat vgtk a tblhoz, karikatrkat vstek a falra ceruzaheggyel
az idegest kollgkrl, s a dh s a stressz soha nem fogyott ki az utnptlsbL
A hatridket klnfle esemnyekhez igaztottk. Az egyes szolgltatsokkal
szakmai vsrokra s gyflbemutatkra kellett elkszlnnk Brmit is krt egy
gyfl, mi elksztettk a kvetkez bemutatra, fggetlenl attl, hogy mekkora os
tobasg volt. Mindig szkben voltunk az idnek, s mindig elmaradsban voltunk
a munkval. Az temtervek mindig fesztett tempt diktltak.
Ha 80 rt dolgoztl egy hten, hs lehettL Ha sszecsaptl valami szemtkupa
cot egy gyflbemutathoz, akkor is. Ha elg sokszor csinltad, ellp tettek. Ha nem,
akkor kirgtak. Indul cgknt minden az
"
izzadsgbl felhalmozott tkrl
"
szlt.
1988-ban, kzel 20 v tapasztalattal a htam mgtt, tetszett az tlet.
Fejlesztsi vezetknt n voltam az, aki tbb s gyorsabb munkra utastottam az
alm tartoz programozkat Jmagam a
"
80 rsok
"
kz tartoztam, aki hajnali
kettkor 300 0 soros C-fggvnyeket rt, mikzben a gyerekei otthon durmoltak gy,
hogy alig lttk az apjukat. n is vgtam tollakat a tblhoz, s n is ordtoztam.
Kirgattar azokat, akik kptelenek voltak sszekapni magukat. Szrny voltam.
Rettenetes.
160 11.FEJEZET
Egy napon aztn a felesgem arra knyszertett, hogy alaposan nzzem meg ma
gam a tkrben. Nem tetszett, ami lttam. A felesgem azt mondta, nem szvesen
mutatkozna egytt velem, s egyet kellett rtenem vele. Persze kibortott a dolog,
ezrt dhsen kiviharzottam a hzbl, s cltalanul bolyongani kezdtem. Vagy fl
rt stltam, magamban fortyogva, amikor eleredt az es.
Ekkor valami a helyre kattant az agyamban, s einevettem magam. Az ostobas
gomon nevettem. A feszlt idegllapotomon. A frfin a tkrben, a szerencstlen bal
fcnon, aki megkesertette a sajt s msok lett - mirt is?
Aznap minden megvltozott. Abbahagytam az rlt tlrzst Feladtam a stresszes
letmdot. Nem hajigltam tbbet tollakat, s nem rtam 3000 soros C-fggvnyeket.
Eltkltem magamban, hogy lvezni fogom a munkm, gy, hogy jl csinlom, s
nem ostobn.
A tlem telhet legnagyobb szakmai korrektsggel otthagytam az llst, s tancs
adknt folytattam a plyafutsomat Azta a nap ta senkit nem szltok
"
fnknek
"
.
A NYOMS ELKERLSE
A legjobb mdja annak, hogy nyoms alatt is nyugodt maradj, ha elkerld azokat
a helyzeteket, amelyek nyomst eredmnyeznek. A kitr viselkeds nem biztos, hogy
teljesen megsznteti a nyomst, de jelentsen cskkentheti azt, s lervidtheti a leg
nagyobb stresszel jr idszakokat.
KTELEZETTSGVLLALS
Ahogy a 10. fejezetben lthattad, fontos, hogy ne vllalj ktelezettsget olyan hatr
idkre, amelyeket nem biztos, hogy tartani tudsz. Az zleti dntshozk mindig
ragaszkodnak az ilyen ktelezettsgek vllalshoz, mert ki akarjk kszblni a koc
kzatakat Amit azonban neknk tennnk kell, az az, hogy szmszerstsk a kock
zatokat, s tudassuk ezeket a szmokat a dntshozkkat hogy megtehessk
a megfelel lpseke t. Ha kptelen vllalsokba megynk bele, azzal meghistjuk ezt
a clt, s krt okozunk mind az zleti vllalkozsnak, mind magunknak.
Nha elfordul, hogy msok vllalnak ktelezettsget a nevnkben. Megesik, hogy
a cg anlkl tesz greteket az gyflnek, hogy elbb megbeszln velnk a dolgot.
Ha ilyesmi trtnik, ktelessgnk segteni a vllalkozsnak, hogy megoldst talljon
ezeknek a vllalsoknak a teljestsre. Mindazonltal, arra nem ktelez semmi, hogy
elogadjuk a nevnkben tett vllalsokat.
Ez lnyeges klnbsg. Egy profi mindig segt a cgnek, hogy mdot talljon
a cljai elrsre, de nem felttlenl fogadja el a megkrdezse nlkl tett greteket.
Ha nincs md egy vllals teljestsre, vgssoron annak kell vllalnia a felelssget,
aki az gretet tette.
NYOMS 161
Ezt persze mondani knny, de ha a vllalkozs a tnk szlre kerl, s a teljestet
len vllalsok miatt ksik a fizetsi csekked, rd is ugyngy nyoms fog nehezedni.
Ha viszont profiknt viselkedtl, legalbb felemelt fejjel nzhetsz j lls utn.
A TISZTASG MEGRZSE
Ahhoz, hogy gyorsan haladhass, s tartani tudd a hatridket, meg kell rizned
a tisztasgo t. Egy profi nem enged a csbtsnak, hogy a gyors halads rdekben csak
gy sszecsapjon valamit. A profik tisztban vannak vele, hogy a "gyors s piszkos
"
nellentmonds: a "piszkos
"
mindig "lasst" jelent.
A nyomst gy kerlheted el, ha a rendszereidet, a kdjaidat s azok szerkezett
annyira tisztn tartod, amennyire csak lehetsges. Ez nem azt jelenti, hogy a vgte
lensgig fnyestgeted a kdot, csupn azt, hogy nem trd el a rendetlensget. Tudod,
hogy a szemthalmok csak lelasstanak; miattuk leksed a hatridket, s kptelen
leszel teljesteni a vllalsaidat, ezrt mindent megteszel annak rdekben, hogy a kd
jaid a lehet legtisztbbak legyenek.
AZ ELVEK MEGRZSE VSZHELYZETBEN
Ha megfigyeled, hogyan viselkedsz vszhelyzetben, megtudhatod, miben hiszel. Ha
vszhelyzetben a szakmai alapelveidet kveted, akkor valban hiszel bennk. Ha vi
szont ilyenkor megvltoztatod a viselkedsed, akkor nem igazn vagy meggyzdve
a szoksos megoldsaid hatkonysgrl.
Ha szokvnyos esetben a tesztvezrelt fejleszts elveit kveted, de vszhelyzetben
feladod azokat, akkor valjban nem hiszel benne, hogy a tesztvezrelt fejleszts segt.
Ha szokvnyos esetben gyelsz a kdjaid tisztasgra, de vszhelyzetben szemthalma
kat gyrtasz, akkor valjban nem hiszel benne, hogy a szemthalmok lelasstanak Ha
vszhelyzetben pros programozshoz folyamodsz, de mskor ltalban nem, akkor a
prmunkt valjban hatkonyabbnak gondolod az nll programozsnL
Vlassz olyan szakmai megoldsokat, amelyeket vszhelyzetben is meggyzds
sel tudsz kvetni, majd minden krlmnyek kztt ragaszkodj hozzjuk. gy kerl
heted el a legbiztosabban a vszhelyzeteket
Vlsgos pillanatokban se vltaztass a viselkedseden. Ha valban a legjobb megol
dsokat vlasztottad, akkor a legslyosabb helyzetekben is ezeket kell alkalmaznod.
A NYOMS KEZELSE
A nyoms megelzsre, enyhtsre s kikszblsre tett lpsek hasznosak, de
nha minden vintzkeds ellenre nyoms al kerlsz. Lehet, hogy a projekt egysze
ren tovbb tart, mint brki gondolta volna. Az is megeshet, hogy az eredeti terv
162 11. FEJEZET
egyszeren rossz, s t kell dolgozni. Elfordul, hogy elveszted a csapat egy rtkes
tagjt vagy egy rtkes gyfelet. Nha olyasmit vllalsz, amit vgl nem tudsz telje
steni. Mit tehetsz ilyen esetben?
NE ESS PNIKBA!
Ne add meg magad a stressznek Az lmatlan jszakk nem gyorstjk fel a munkt.
Ha csak lsz, s bosszankodsz, az sem. A legrosszabb pedig, amit tehetsz, ha kap
kodni kezdesz. Ennek a csbtsnak mindenron llj ellen. A kapkods csak mlyti
a ktyt, amelybe kerltL
Ehelyett lassts, s gondold t a problmt. Tervezd meg a lehet legjobb kimene
telhez vezet utat, majd sszer, egyenletes tempban menj vgig rajta.
KOMMUNIKLJ!
Tudasd a csapatoddal s a feletteseiddel, hogy bajban vagy. Ismertesd velk, hogy mi
lyen terveid vannak arra, hogy kikecmeregj a ktybL Krj tlk segtsget s t
mutatst. Ne okozz kellemetlen meglepetseket, mert semmi sem dhti fel, s
fosztja meg az sszer gondolkodstl jobban az embereket, mint egy kellemetlen
meglepets. Minden meglepets tzszeresre nveli a nyomst.
TMASZKODJ A SZAKMAl ELVEIDREl
Ha nehzsgekbe tkzl, bzz a szakmai elveidben. Azrt vannak szakmai elveid,
hogy tmutatst adjanak, amikor nagy rajtad a nyoms. Ilyenkor klnsen oda kell
figyelned a kvetskre. Nem ez az a pillanat, amikor meg kell krdjelezned vagy fel
kell adnod ket.
Ahelyett, hogy ktsgbeesetten kutatnl valami - brmi - utn, ami segthet, hogy
gyorsabban vgezz, mg eltkltebben kvesd a vlasztott elveidet. Ha a tesztvezrelt
fejleszts mellett tetted le a voksod, akkor rj mg tbb tesztet a szoksosnl. Ha knyr
telen jratervez vagy, akkor vgezz mg tbb jratervezst. Ha a lehet legrvidebb
fggvnyek rsra szaktl trekedni, akkor rj mg rvidebb fggvnyeket. A nyomst
csak gy gyrheted le, ha arra tmaszkodsz, amirl mr tudod, hogy mkdik.
KRJ SEGfTSGET!
Keress magadnak prt. Ha forr a helyzet, keress valakit, aki hajland prban prog
ramozni veled. gy gyorsabban s kevesebb hibval vgezhetsz. A trsad gyel r, hogy
a szakmai elveidhez tartsd magad, s ne ess pnikba. A trsad kiszr olyan dolgokat
is, amelyek elkerltk a figyelmedet, hasznos tletekkel ll el, s tveszi a helyed, ha
mr nem tudsz sszpontostani.
Ugyangy, ha azt ltod, hogy valaki ms kerlt nyoms al, ajnld fel, hogy betr
sulsz mell. Segts neki kikeemeregni a ktybL
NYOMS 163
SSZEFOGLALS
A nyomst gy kezelheted a legjobban, ha elkerld, ha csak tudod, s ellenllsz neki,
ha nem tudsz elle kitrni. gy kerlheted el, ha megfontoltan vllalsz ktelezetts
geket, mindig kveted a szakmai elveidet, s megrzd a kdjaid tisztasgt; s gy
llhatsz neki ellen, hogy nyugodt maradsz, kommuniklsz, megint csak kveted
a szakmai elveidet, s segtsget krsz.
12.FEJEZET
EGYTTMKDS
A legtbb szaftvert csapatok ksztik, a csapatok pedig akkor a leghatkonyabbak, ha
a tagjaik kztt szakmai egyttmkds van. Egy csapatban magunkba zrkzni s
elklnlni a tbbiektl amatr viselkeds.
1974-ben 22 ves voltam. Alig hat hnappal korbban vettem el nagyszer feles
gemet, Ann Marie-t. Els gyermeknk, Angela, csak egy vvel ksbb szletett. Ak
koriban a Teradyne Chicago Laser Systems nev rszlegnl dolgoztam.
Munkatrsam volt a kzpiskolai haverom, Tim Conrad. Tim s n jnhny cso
daszmba men dolgot alkottunk. Szmtgpeket ptettnk a pincjben, Jkob
EGYTTMKDS 165
lajtorjjt az enymben. Megtantottuk egymst a PDP-8 programozsra, illetve
hogy miknt lehet integrlt ramkrket s tranzisztorokat sszedrtozva mkd
szmolgpet kszteni.
Programozknt egy olyan rendszeren dolgoztunk, amely lzerrel vgott mretre
elektronikai alkatrszeket, pldul ellenllsokat s kondenztorokat, rendkvl nagy
pontossggal. Mi ksztettk pldul a kristlyt az els digitlis rhoz, a Motorola
Pulsarhoz.
A szmtgp, amelyet programoztunk, a Teradyne sajt PDP-8-klnja, az M365-s
volt. A programokat assemby nyelven rtuk, a forrsfjlokat pedig mgnesszalag-te
kercseken troltuk. Br kpernyn is vgezhettk volna a szerkesztst, az eljrs elg
bonyolult volt, ezrt a legtbb kdunkat kinyomtatva olvastuk, s az els fzisban gy
is szerkesztettk.
Semmilyen eszkznk nem volt, amivel a kdalapban kereshettnk volna. Nem
volt r md, hogy megtalljuk egy adott fggvnyhvs vagy lland sszes elfor
dulsi helyt. Nyilvn el tudod kpzelni, mennyire htrltatott ez minket.
Ezrt aztn egy nap Tim s n elhatroztuk, hogy runk egy kereszthivatkozs
elllt programot, amely kpes beolvasni a forrsszalagokat, s kirni az sszes
szimblumot az llomny s sor szmval, ahol az adott szimblum elfordul.
A program els vltozatt meglehetsen knny volt megrni. A program egysze
ren beolvasta a forrsszalagot, elemezte az assembler nyelvtant, ltrehozott egy
szimblumtblt, s hozzadta a hivatkozsokat a tbla elemeihez. Nagyszeren m
kdtt, de borzaszt lass volt. A f kezelprogramunk (a "MOP" - Master Operating
Program) feldolgozsa tbb mint egy rig tartott neki.
Azrt volt ilyen lass, mert az egyre bvl szimblumtblt egyetlen tmeneti
memriatrban troltuk. Amikor j hivatkozsra bukkantunk, beszrtuk azt az t
meneti trba, a tr tartalmt pedig nhny bjttal lejjebb cssztattuk, hogy helyet
csinljunk.
Tim s n nem voltunk szakrti az adatszerkezeteknek s az algoritmusoknak.
Soha nem hallottunk mg hasttblkrl vagy binris keressrL Fogalmunk sem
volt, hogyan gyorsthatnnk fel egy algoritmust. Csak azt tudtuk, hogy amit alkot
tunk, az tl lass.
Ezrt aztn klnfle megoldsokkal prblkoztunk. Megprbltuk a hivatkoz
sokat lncolt listkba helyezni. Prbltunk helyet hagyni a tmbben, s csak akkor
nvelni az tmeneti tr mrett, ha minden hely betelt. Megprbltunk lncolt list
kat ltrehozni az res helyekbl. Mindenfle rlt tletet kiprbltunk
Az irodnkban llt egy tbla, amelyre diagramokat rajzoltunk az adatszerkezete
inkrl, s szmtsokat vgeztnk, hogy megjsoljuk a hatkonysgukat. Minden nap
j tlettel rkeztnk. Megszllottan tmogattuk egymst.
Akadtak prblkozsaink, amelyek nveltk a hatkonysgot, msok azonban
csak tovbb lasstottak a programon. rjt volt. Ekkor tudatosult bennem elszr,
166 12.FEJEZET
milyen nehz optimlis mkdsre brni egy szoftvert, s milyen nehz rjnni
a megoldsra.
Vgl sikerlt 15 perc al szortanunk az idt, ami nagyon kzel volt ahhoz,
amennyi idbe telt egyszeren beolvasni a forrsszalagot. Elgedettek voltunk az
eredmnnyel.
PROGRAMOZK S EMBEREK
Nem azrt vlasztottuk a programozi hivatst, mert szeretnk emberek kztt dol
gozni. A szemlyes kapcsolatokat tbbnyire macersnak s kaotikusnak tallj uk. Azok
nak a gpeknek a tiszta s megjsolhat viselkedst szeretjk, amelyeket programo
zunk. Akkor vagyunk a legboldogabbak, ha rkon t egyedl lhetnk a szobnkban,
s egy igazn rdekes problma megoldsra sszpontosthatunk
Na j, ez ersen eltlzott ltalnosts, ami all rengeteg a kivtel. Nagyon sok
programoz jl tud egytt dolgozni msokkal, s lvezi a kihvst. Az tlag azonban
inkbb arra hajlik, amit lertam. Mi, programozk, lvezzk, ha nmileg kevesebb
rzkszervnket kell hasznlnunk, s begubzva elmlylhetnk valamiben.
PROGRAMOZKSMUNKAADK
A hetvenes-nyolcvanas vekben, mikzben programozknt dolgoztam a Teradyne-nl,
megtanultam, hogyan lehetek nagyon j a hibakeress ben. Imdtam a kihvst, s nagy
lendlettel, lelkesen vetettem r magam minden problmra. Egyetlen hiba sem rej
tzhetett ellem sokig.
Amikor megfejtettem egy hiba okt, az olyan diadalittas rzs volt, mintha vgez
tem volna a Gruffacsrral. Ilyenkor rgtn szaladtam a fnkmhz, Ken Finderhez,
a dfke pengvel a kezemben, s szenvedlyesen eljsgoltam neki, milyen izgalmas
hiba volt. Egy nap vgl Ken mrgesen kifakadt:
"
A hibk nem izgalmasak. A hibkat
csak ki kell javtani!
"
Valamit megtanultam aznap: rdemes szenvedllyel csinlni azt, amit csinlsz, de
az sem rt, ha szem eltt tartod azoknak a cljait, akiktl a fizetsed kapod.
Egy profi programoznak az az elsdleges ktelessge, hogy kielgtse a munka
adja ignyeit. Ebbe beletartozik, hogy a fnkeiddel, az zleti elemzkkel, a teszte
lkkel s a csapat ms tagjaival egyttmkdve igyekezz vilgosan megrteni az zleti
clokat. Ez nem azt jelenti, hogy ltnys tkfejj kell tkpezned magad, azt viszont
igen, hogy tisztban kell lenned vele, mirt rod a kdot, amit ppen rsz, s hogyan
fog hasznot hzni belle a tged foglalkoztat cg.
A legrosszabb, amit egy profi programoz tehet, hogy angyali nyugalommal be
zrkzik a technolgia srkamrjba, mikzben az zleti vllalkozs recsegve-ropogva
sszedl krltte. A munkd rsze, hogy a vz felett tartsd a vllalkozs hajjt.
EGYTTMKDS 167
Egy profi programoz teht idt szakt r, hogy megrtse az zlet mkdst. Be
szl a felhasznlkkal a szoftverrl; megkrdezi az rtkestket s a reklmszakem
bereket, hogy milyen problmkat kell megoldaniuk; megtudakolja a feletteseitl,
hogy milyen rvid s hossz tv clokat tztek ki a csapat szmra.
Rviden, figyelmet szentel a hajnak, amelyen szolgl.
Az egyetlen alkalomra, amikor kirgtak egy programozi llsbl, 1976-ban ke
rlt sor. Akkoriban az Outboard Marine Corp.-nl dolgoztam; egy gyrtsautomati
zl rendszer megrsban segdkeztem, amely IBM System/7 tpus szmtgpek
segtsgvel alumniumfrccsnt gpek tucatjait felgyelte.
A munka szakmai szempontbl kihvst jelentett, s nagyon sokat lehetett tanulni
belle. A System/7 lenygz felptssel rendelkezett, maga a gyrtsautomatizl
rendszer pedig kimondottan rdekes volt.
Ezen fell a cg remek csapatot szedett ssze. A csapatot egy hozzrt s lelkes
szakember, John vezette, s a kt segtksz programoztrsammal is kellemes volt
egytt dolgozni. A projekt szmra lefoglaltak egy labo rt, s mindnyjan ott vgeztk
a munknkat. Az zleti partnernk, aki rdekldtt a munknk irnt, szintn ott
volt velnk a laborban. A fnknk, Ralph, rtette a dolgt, mindig szem eltt tartotta
a clt, s kzben tartotta a csapatot.
Mindennek nagyszeren kellett volna alakulnia. A problmt n jelentettem.
A projekthez s a technolgihoz elg lelkesen lltam hozz, de lemedett kor 24
vesknt egyszeren nem tudtam magam rvenni, hogy rdekeljen az zlet vagy
a vllalkozs bels politikai viszonyai.
Az els hibt mr a legels munkanapomon elkvettem. Nyakkend nlkl jelen
tem meg. Az llsinterjra ktttem egyet, s lttam, hogy mindenki ms visel nyak
kendt, de nem raktam ssze a kpet. gy aztn az els napomon Ralph odajtt hoz
zm, s szimpln ennyit mondott: "Mi itt nyakkendt hordunk.
"
El nem tudom mondani, mennyire zokon vettem ezt. Mlyen megsrtdtem. Min
dennap ktttem nyakkendt, de gylltem. De mirt? Tudtam, mibe megyek bele.
Tudtam, mi a szoks. Mirt dhtett fel mgis ennyire a dolog? Azrt, mert egy nz,
nimd kis grcs voltam.
Egyszeren kptelen voltam idben berni a munkahelyemre, radsul azt hittem,
hogy ez nem lnyeges - hiszen "j munkt vgeztem". Ez igaz is volt: nagyon j prog
ramokat rtam. Messze n voltam a legjobb programoz a csapatban. Gyorsabban s
jobb kdot rtam, mint brki ms. Gyorsabban ismertem fel s oldottam meg a prob
lmkat. Tudtam, hogy rtkes vagyok. gy aztn a pontossg s a hatridk mit sem
szmtottak nekem.
A dnts akkor szletett meg a kirgsomrl, amikor elmulasztottam megjelenni
egy kiemeit fontossg rtekezleten. John mindnyjunkkal tudatta, hogy htfn be
kell mutatnunk a mr mkd szolgltatsokat - bizonyra n is rtesltem rla, de
a dtumokat s idpontokat egsz egyszeren nem tartottam fontosnak.
168 12.FEJEZET
A fejleszts kzepn jrtunk; a rendszert mg nem adtuk t. Semmi sem indo
kolta, hogy a rendszer akkor is fusson, ha ppen senki nem tartzkodik a laborban.
Pnteken valsznleg n tvoztam utolsknt, s nyilvn lekapcsoltam a rendszert.
Az a tny, hogy htfn fontos nap lesz, egyszeren nem ragadt meg az agyamban.
Htfn egy rt kstem, s amikor megrkeztem, azt lttam, hogy mindenki ko
maran ll a nem mkd rendszer krl. John krdre vont:
"
Mirt nem mkdik
ma a rendszer, Bob?
"
. Azt feleltem, hogy fogalmam sincs, s leltem, hogy megkeres
sem a hibt. Mg ekkor sem bredtem r, hogy aznap bemutatt kellene tartani, de
a tbbiek testbeszde elrulta, hogy valami nem stimmel. Aztn John odajtt hoz
zm, s a flembe sziszegte:
"
Mi van, ha Stenberg gy dnt, hogy benz?
"
, s undo
rodva elstlt.
Stenberg az automatizlsrt felels igazgat-helyettes volt-ma informatikai igaz
gatnak hvnnk-, ezrt nem is rtettem a krdst.
"
s akkor mi van?
"
- gondol
tam. -
"
A rendszert mg nem helyeztk zembe. Mire a felhajts?
"
Aznap dlutn megkaptam az els figyelmeztet levelemet. Azt rtk benne, hogy
vagy haladktalanul vltoztatok a hozzllsomo n, vagy
"
zros hatridn bell meg
szntetik a munkaviszonyomat
"
. Elborzadtam.
Beletelt nmi idbe, mire kielemeztem a viselkedsemet, s rbredtem, mit csi
nltam rosszul. Beszltem rla Johnnal s Ralph-faL Elhatroztam, hogy megvlto
zom, s komolyan veszem a munkm.
gy is tettem! Nem kstem tbbet. Figyelni kezdtem a munkahelyi erviszonyokat.
Kezdtem rteni, mirt tartott John Stenbergtl. Lassan felfogtam, milyen knos hely
zetbe hoztam t azzal, hogy a rendszer nem mkdtt htfn.
De ez tl kevsnek bizonyult, s tl ksn jtt. A kocka el volt vetve. Egy hnappal
ksbb megkaptam a msodik rsbeli figyelmeztetst egy jelentktelen hiba miatt,
amit elkvettem. Ezen a ponton r kellett volna jnnm, hogy a levelek nem jelente
nek tbbet puszta formalitsnl, mert a kirgsomrl szl dnts mr megszletett.
De eltkltem, hogy megmentem a helyzetet, ezrt mg kemnyebben dolgoztam.
Nhny httel ksbb behvattak, s tadtk a felmondlevelemet.
Hazamentem a 22 ves, terhes felesgemhez, s meg kellett mondanom neki, hogy
kirgtak. Azt az rzst soha nem szeretnm jra tlni.
PROGRAMOZKSPROGRAMOZK
A programozknak gyakran okoz nehzsget ms programozkkal egytt dolgozni,
ami szrny problmkhoz vezet.
SAJAT KD .. Az egyik legslyosabb jele annak, hogy egy csapat nem mkdik jl, ha
minden programoz falat pt a sajt kdja kr, s nem engedi meg a tbbi programo
znak, hogy hozznyljon. Egyes cgeknl olyat is tapasztaltam, hogy a programozk
me
g
mutatni sem hajlandk a kdjukat egymsnak. Ez a katasztrfa biztos receptje.
EGYTTMKDS 169
Egyszer tancsokat adtam egy cgnek, amelyik cscsminsg nyomdagpeket
gyrtott. Ezek a kszlkek szmos klnbz alkatrszbl - adagol, nyomtatfej,
nyomattlca, tzgp, vggp stb.- lltak, amelyek ms-ms rtket kpviseltek az
zleti vllalkozs szmra. Az adagolkat fontosabbak tartottk a nyomattlcknl,
s semmi sem volt fontosabb, mint a nyomtatfej.
Minden programoz a sajt eszkzn dolgozott. Egyikk az adagol, msikuk
a tzgp kdjt rta. Mindnyjan titokban tartottk az ltaluk alkalmazott megol
dsokat, s senkinek sem engedtk meg, hogy hozznyljon a kdjukhoz. Az egyes
programozk politikai ereje kzvetlen l sszefggtt azzal, hogy a vllalkozs meny
nyire tartotta rtkesnek a hozzjuk tartoz eszkzt. Az a programoz, aki a nyom
tatfejen dolgozott, rinthetetlen volt.
Mszaki szempontbl mindez katasztrft eredmnyezett. Tancsadknt lttam,
hogy a kdban hatalmas mrtk az ismtlds, s a modulokat sszekapcsol fel
letek teljesen torzak. Egyetlen rver sem tudta azonban meggyzni a programozkat
(vagy az zleti dntshozkat), hogyvltoztassanak a munkamdszerkn, mert a fi
zetsemelsk elvlaszthatatlan volt a kezkben lev eszkz jelentsgtL
Kzs TULAJDON'"' Sokkal jobb lebontani az sszes falat, ami krlveszi a kdok tu
lajdonjogt, s a csapat kezbe adni a teljes kdot. n az olyan csapatokat rszester
elnyben, ahol brmelyik tag brmelyik modult megvizsglhatja, s brmilyen m
dostst vgrehajthat rajtuk, amit szksgesnek vl. Azt szeretem, ha a kd a csapat,
s nem az egyes programozk tulajdonban ll.
Egy profi programoz nem llja tjt annak, hogy msok is belenyljanak a kdba,
s nem pt birtokhatrt jelz falakat a kd kr. Ehelyett a tbbiekkel kzsen mun
klkodik, mghozz a rendszer lehet legnagyobb rszn. A profik tanulnak egyms
tl, mikzben kzsen dolgoznak a rendszer klnbz rszein.
PARMUNKA Sok programoz utlja a pros programozst. n ezt klnsnek tal
lom, hiszen a legtbb programoz vszhelyzetben ppen hogy prmunkhoz folya
modik. Mirt? Mert egyrtelmen ez a leghatkonyabb mdja a problma megold
snak. Ahogy a monds is tartja: tbb szem tbbet lt. Ha viszont vszhelyzetben
a prmunka a leghatkonyabb mdszer arra, hogy megoldjunk egy problmt, akkor
mirt nem tartjuk a leghatkonyabb mdszernek ms krlmnyek kztt is?
Nem fogok tanulmnyokat idzni, br van nhny, amelyet rdemes lenne. Nem
fogok anekdotkat meslni, br sok j sztorim van. Azt sem fogom megmondani ne
ked, hogy mennyi prmunkt vgezz. Csak annyit mondok, hogy a profik prban
szaktak programozni. Mirt? Mert - legalbbis bizonyos problmk esetben - ez
a leghatkonyabb megolds. De nem ez az egyetlen ok.
A profik azrt is programoznak prban, mert gy oszthatjk meg a legjobban a tu
dsukat egymssal. Egy profi nem pt tudsraktrakat Inkbb trsul valakivel, hogy
170 12. FEJEZET
megismerje a rendszer s az zleti vllalkozs klnbz rszeit. Tisztban van azzal,
hogy br a csapat minden tagjnak megvan a maga posztja, minden csapattagnak
tudnia kell jtszani ms posztokon is, ha gy hozza a szksg.
A profik azrt programoznak prban, mert ez a legjobb mdszer a kd fellvizs
glatra. Egyetlen rendszernek sem lenne szabad olyan kdot tartalmaznia, amelyet
nem vizsgltak fell ms programozk. A kd-fellvizsglat lefolytatsnak szmos
mdja van, de a legtbbjk egyltaln nem hatkony. A kd-fellvizsglat leghatko
nyabb mdszere az, ha a kdot tbben, kzsen rjk.
KISAGYAK
2000 egyik reggeln, a dot com-fellendls cscsn, Chicagba vonatoztam. Ahogy
lelptem a vonatrl a platformra, egy hatalmas reklmtbla fogadott a kijrat felett.
Egy jl ismert szaftvercg jele dszelgett rajta, amely programozkat igyekezett tobo
rozni. Aszveg ez volt: "Come rub cerebellums wi th the best" (
"
Gyere, s drgld sz
sze a kisagyad a legjobbakval!
"
).
Azonnal padlt fogtam a reklm szrny ostobasgtL A szerencstlen reklm
szakemberek a programozk magas mszaki tuds, tanult, intelligens rtegt igye
keztek megszltani, akik viszont nem valami jl trik az ostobasgot. Akik a rekl
mot ksztettk, azt a kpet igyekeztek a clkznsg el vetteni, hogy a cgnl nagyon
intelligens emberek osztjk meg a tudsukat, csakhogy szerencstlen mdon az agy
nak arra a rszre (kisagy, cerebellum) hivatkoztak, amelyik a finom izommozgso
krt, s nem az intelligencirt felel. gy aztn pontosan azok legyintettek megvet
gnnyal a hirdetsre, akikhez a hirdetk szlni szerettek volna.
De volt mg valami ms is a hirdets ben, ami szget ttt a fejembe. Megprbl
tam elkpzelni, milyen az, amikor emberek sszedrglik a kisagyukat. Mivel a kis
agy az agy hts rszn tallhat, ez gy megy a legknnyebben, ha egymsnak ht
tal llunk. Lttam magam eltt a flkkben dolgoz programozk csapatt, akik
a sarokban, egymsnak httal lve bmuljk a kpernyjket, a flkn fejhallgat
val. Na, gy lehet sszedrglni a kisagyakat Csakhogy ez nem csapat.
A profik egytt dolgoznak. Ha viszont a sarokban lsz, a fleden fejhallgatvaL
nem tudsz egytt dolgozni msokkal. Ahhoz krl kell lni egy asztalt, egymssal
szemben. rezni kell egyms minden rezdlst. Meg kell hallani, amit valaki ide
gesen mormol. Verblis s testbeszden keresztli, izgalmas kommunikcira van
szksg. Egyetlen egysgknt kell mkdni.
Lehet, hogy azt hiszed, hogy egyedl jobban tudsz dolgozni. Taln igazad is van,
de ez nem jelenti azt, hogy a csapat is jobban dolgozik, ha te magadban tevkenykedsz.
Valjban az is rendkvl valszntlen, hogy neked tnyleg jobban megy a munka,
ha egyedl dolgozol.
EGYTTMKDS 171
Vannak helyzetek, amikor az a helyes, ha egyedl dolgozol. Megesik, hogy egysze
ren alaposan vgig kell gondolnod egy problmt. Az is lehet, hogy a feladat annyira
egyszer, hogy pazarls lenne mg egy embert rlltani. ltalban azonban az a leg
jobb, ha szorosan egyttmkdsz msokkal, s az id legnagyobb rszben prban
programoztok.
SSZEFOGLALS
Lehet, hogy nem azrt vlasztottad a programozi hivatst, hogy emberek kztt le
gyl. Peched van, mert a programozs ppen arrl szl, hogy msokkal kzsen dol
gozol. Egytt kell mkdnd az zleti dntshozkkal, s a programoz munkatr
saiddal is.
Tudom, tudom. Nagyszer lenne, ha egyszeren bezrnnak egy szobba hat hatal
mas kpernyvel, egy T 3-as vonallal, prhuzamosan dolgoz szupergyors processzorok
kal, korltlan memria- s lemezterlettel, s soha ki nem fogy ditskla-s fszeres
kukoricacsipsz-kszlettel. Ez azonban sajnos csak vgylom. Ha tnyleg programoz
knt szeretnl tevkenykedni, meg kell tanulnod beszlgetni - az emberekkeP
l Utals a Zld szja (Soylen Green) cm flm zrszavra.
13.FEJEZET
CSAPATOK S PROJEKTEK
Mi a helyzet akkor, ha a csapatodnak sok kis programot kell elksztenie? Hogyan
oszd el a feladatokat a programozk kztt? s ha egyetlen nagy projektet kell tet
al hoznotok?
VEGYTH ET?
Az vek sorn szmos banknak s biztosttrsasgnak dolgoztam tancsadknt, de
gy tnt, egy valami kzs bennk: az a furcsa md, ahogy a feladatokat kiosztjk.
CSAPATOK S PROJEKTEK 173
A bankoknl a szaftverprojektek viszonylag kis munkk, amelyek egy-kt prog
ramozt ktnek le nhny htre. A projektet ltalban egy projektvezet irnytja,
aki al ms projektek is tartoznak. A munkban rszt vesz egy zleti elemz, aki ms
projektek szmra is sszellt kvetelmnyeket, programozk, valamint egy-kt
tesztel, akik egyarnt dolgoznak ms projekteken is.
Ltod, hogyan mkdik a dolog? A feladat annyira kicsi, hogy senkit nem lehet
teljes idben rlltani- az idejnek mindenki csak az 50 vagy akr csak a 25 szza
lkt tlti a projekttel.
Pedig van egy alapszably: nincs olyan, hogy fl ember.
Semmi rtelme arra utastani egy programozt, hogy az ideje egyik felt az "P, a m
sik felt pedig a
"
B
"
projekttel tltse, klnsen ha a kt projekten ms-ms projekt
vezetk, zleti elemzk, programozk s tesztelk dolgoznak. Hogy az rdgbe lehet
egy ilyen borzalmat csapatnak hvni? Ez nem csapat, hanem valami katyvasz, ami
kijtt a turmixgpbl.
AZ SSZESZOKOTT CSAPAT
Egy csapatnak id kell, hogy kialakuljon: a csapat tagjai kztt kapcsolatok szvd
nek; megtanulnak egymssal egyttmkdni; megismerik egyms rigolyit, erss
geit s gyengit, mg vgl a csapat elkezd sszeszokni.
Egy sszeszokott csapatban van valami igazn varzslatos. Egy sszeszokott csa
pat csodkra kpes. Kitalljk egyms gondolatait, falaznak egymsnak, tmogatjk
egymst, s kihozzk egymsbl a legjobbat. Megvalstjk az lmokat.
Egy sszeszokott csapat rendszerint gy egy tucat emberbl ll. Lehetnek hszan,
vagy akr csak hrman is, de a csapattagok idelis szma krlbell tizenkett. A csa
patban helyet kell kapjanak programozk, tesztelk s elemzk, s lennie kell egy
projektvezetnek is.
A programozk s tesztelk, illetve elemzk arnya eltr lehet, de a 2:1-hez j ki
indulpont. Egy jl sszeszokott, tizenkt emberbl ll csapatban teht lehet mond
juk ht programoz, kt tesztel, kt elemz s egy projektvezet.
Az elemzk kidolgozzk a kvetelmnyeket, s automatizlt elfogadsi teszteket r
nak hozzjuk. A tesztelk ugyancsak automatizlt elfogadsi teszteket rnak- a kett
kztt a nzpont jelenti a klnbsget. Mind az elemzk, mind a tesztelk kvetel
mnyeket lltanak fel, de az elemzk az zleti rtkre, mg a tesztelk a program
helyessgre sszpontostanak Az elemzk a derlt teszteseteket rjk meg, a tesz
telk azonban azzal foglalkoznak, ami elromolhat, s a negatv utas teszteseteket,
illetve a hatreseteket fogalmazzk meg.
A projektvezet nyomon kveti, hogyan halad a csapat, s gyel r, hogy annak
minden tagja tisztban legyen az temtervvel s a feladatok fontossgi sorrendjveL
A csapat egyik tagja rszben egyfajta oktat ("mester") szerepet is betlthet; eb
ben az esetben az feladata, hogy gyeljen a csapat elveire s munkamegosztsra.
174 13.FEJEZET
a csapat lelkiismerete, aki vigyz, hogy a csapat a hatridk szortsban se trjen
le a helyes trl.
RS Egy ilyen fajta csapatnak idbe telik, amg a tagjai elsimtjk a nzetklnb
sgeiket, megszakjk egymst, s valban sszerzdnak - taln hat hnapba, de az
is lehet, hogy egy egsz vbe. Ha azonban a csapat egyszer kialakult, onnantl mr
csodlatosan mkdik. Egy sszeszokott csapat kzsen tervez, kzsen oldja meg
a problmkat, kzsen nz szembe a nehzsgekkel, s elri a clt.
Ha a csoda megtrtnt, nevetsges csak azrt megbontani a csapatot, mert egy
projekt vget rt. A legjobb egytt tartani ket, s tovbbi feladatokat adni nekik.
MELYIK VOLT ELBB: A CSAPAT VAGY A PROJEKT? A bankok s a biztosttrsasgok
projektek kr prblnak csapatokat szervezni, ami ostoba megkzelts, az ilyen
csapatok ugyanis nem tudnak sszeszokni. A tagjaik csak rvid ideig, s akkor is csak
rszidben dolgoznak az adott projekten, ezrt soha nem tanuljk meg, hogyan ke
zeljk egymst.
A professzionlis fejlesztcgek meglev, sszeszokott csapatokat bznak meg egy
egy projekt lebonyoltsval, nem pedig projektekhez rendelnek embereket. Egy sz
szeszakott csapat prhuzamosan tbb projekten is kpes dolgozni, s a sajt beltsa,
illetve a tagjai kpessgei s erssgei szerint osztja szt a feladatokat. Egy sszeszo
kott csapat tbb projekttel is megbirkzik, s elri a clt.
DE HOGYAN LEHET MINDEZT KZBEN TARTANI?
Minden csapatnak van egy sebessge (velocity).1 Egy csapat sebessge egyszeren az
a munkamennyisg, amit adott id alatt el tudnak vgezni. Egyes csapatok pont per
htben mrik a sebessgket, ahol egy-egy pont egy egysgnyi bonyolultsgot jelent.
A csapat felbontja a program szolgltatsait, amelyen dolgozik, s megbecsli azok
pontrtkt; majd azt mri, hogy egy ht alatt hny pontot tud teljesteni.
A sebessg statisztikai mrszm. A csapat az egyik hten lehet, hogy 38 ponttal
vgez, egy msik hten 42-vel, egy harmadikon pedig 25-t teljest. Idvel ezek az r
tkek egy tlagot adnak ki.
A vezets klnfle clokat tzhet ki a csapatnak kiosztott projektekhez. Ha a csa
pat tlagos sebessge pldul 50, s hrom projekten dolgoznak egyidejleg, a vezets
arra krheti ket, hogy az erfesztseiket 15-15-20 arnyban osszk meg.
Azon fell, hogy egy sszeszokott csapat dolgozik a projekteken, ennek a rendszernek
l [RCM2003] 20-22. oldal; [COHN2006] A sebessg tmakrhez kitn hivatkozsokat tallsz a
trgymutatba n.
CSAPATOK S PROJEKTEK 175
az is elnye, hogy vszhelyzetben a vllalkozs azt mondhatja, hogy
"
a B projekt ktyba
jutott, ezrt a kvetkez hrom htben fordtsatok minden energit erre a projektre
"
.
A feladatok fontossgi sorrendjnek ilyen gyors vltoztatsa egy sszeturmixolt
csapat esetben szinte lehetetlen, a prhuzamosan kt-hrom projekten dolgoz, sz
szeszakott csapatok azonban sokkal rugalmasabbak.
A PROJEKTGAZDA DILEMMJA
Az ltalam hirdetett megkzeltssel szemben az egyik kifogs, amit fel szoktak
hozni, hogy a projektgazda rszben elveszti a hatalmt s biztonsgos helyzett. Az
a projektgazda, akinek a projektjn egy kizrlag erre a feladatra kijellt csapat dol
gozik, szmthat a csapat erforrsaira - mivel egy csapat sszelltsa, illetve meg
szntetse kltsges mvelet, az zleti vllalkozs rvid tv clok rdekben nem
fogja sztszedni a csapatot.
Msrszrl, ha a projekteket sszeszokott csapatokra bzzk, amelyek prhuzamo
san tbb projekten dolgoznak, a vllalkozs szabadon, a pillanatnyi ignyek szerint
vltoztathatja a prioritsokat. Emiatt a projektgaz<k bizonytalannak rezhetik a j
vjket, hiszen az erforrsokat, amelyekre tmaszkodnak, brmikor elvonhatjk.
szintn megmondom, hogy n ez utbbi megoldst rszester elnyben. Egy
zleti vllalkozsnak nem szabad, hogy megksse a kezt a csapatok kialaktsnak
s megszntetsnek szksgtelen nehzsge. Ha a vllalkozs gy dnt, hogy az
egyik projekt elnyt kell lvezzen egy msikkal szemben, kpesnek kell lennie gyor
san tcsoportostani az erforrsokat. Az mr a projektgazda feladata, hogy rveljen
a sajt projektje mellett.
SSZEFOGLALS
Egy csapatot nehezebb felpteni, mint egy programot, ezrt elnysebb lland csa
patokat kialaktani, amelyek egytt haladnak projektrl projektre, s egyidejleg
tbb projektet is kpesek fel vllalni. Egy csapat kialaktsnak akkor van rtelme, ha
a csapatnak van elg ideje sszeszokni, s a csapat egyttmarad, hogy szm os projekt
motorja lehessen.
IRODALOMJEGYZK
[RCM2003]: Robert C. Martin: Agile Software Development: Principles, Patterns, and
Practices. Upper Saddle River, NJ. Prentice Hall, 2003.
[COHN2006]: Mike Cohn: Agile Estimating and Planning. Upper Saddle River, NJ.
Prentice Hall, 2006.
14.FEJEZET
MESTEREK, TANTVNYOK S
A MESTERSGBELI TUDS
A friss diploms informatikusok folyamatosan csaldst okoznak nekem. Nem arrl
van sz, hogy ne lennnek okosak vagy tehetsgesek, csak ppen nem tantjk meg
nekik, hogy mirl is szl valjban a programozs.
A KUDARC FOKOZATAl
Egy llsinterjn egyszer egy olyan ifj hlgyet kellett elbrl nom, aki ppen akkor
dolgozott a mesterdiplomjn egy hres egyetem szmtgp-tudomnyi szakn, s
MESTEREK, TANTVNYOK ... 177
nyri szakmai gyakorlatra jelentkezett. Megkrtem, hogy rjon velem egy kis kdot,
mire azt felelte:
"
Nem igazn szaktam kdot rni.
"
Krlek, olvasd el mg egyszer a fenti bekezdst, majd ugorj a kvetkezre.
Megkrdeztem, hogy milyen programozsi kurzusokat vett fel a mesterfokozat
hoz. Azt vlaszolta, hogy semmilyet
Lehet, hogy most ellrl szeretnd kezdeni a fejezetet, csak hogy biztos legyl benne,
hogy nem kerltl t vletlenl egy alternatv univerzumba, s nem is csak egy rossz
lom ez az egsz.
Most nyilvn azon tprengsz, hogy miknt lehetsges, hogy egy informatikbl
mesterfokozatra kszl hallgatnak nem muszj semmilyen programozi kurzust
felvennie. n is ezt krdeztem magamtl - s ma sem tudom a vlaszt.
Ez termszetesen a legszlssgesebb plda azoknak a csaldsoknak a sorozatbl,
amelyeken a vgzs plyzk llsinterjin t kellett esnem. Nem minden frissen vg
zett informatikus ekkora csalds - messze nem. Azt azonban szrevettem, hogy azok
ban, akik nem okoznak csaldst, van valami kzs: szinte mindegyikk nerbl tanul
meg programozni, mieltt felvennk az egyetemre, s ksbb is nllan kpzi magt.
Ne rts flre. Nem tartom lehetetlennek, hogy egy egyetemen kivl oktatsban
rszeslj. Csak ppen ugyangy lehetsges, hogy gy tekergzz t a rendszeren, hogy
a msik vgn kicsusszanva csak egy diploma legyen a kezedben, semmi ms.
s van mg egy gond. ltalban mg a legjobb szmtstudomnyi szakok sem
ksztik fel a hallgatkat arra, ami az ipargban vrja ket. Ezt nem annyira szemre
hnysnak sznom az informatikai kpzs fel - szinte minden tudomnygat te
kintve ez az igazsg. Amit az iskolban tanulsz, s amivel egy valdi munkahelyen
szembeslsz, gyakran g s fld.
SZAKMAl TMUTATS
Hogyan tanulunk meg programozni? Hadd mondjam el, n hogyan sajttottam el
a szakma fogsait.
DIGI-COMPl-AZ ELS SZAMfTGPEM
1964-ben desanym egy kis manyag szmtgpet vett nekem a tizenkettedik sz
letsnapomra. Az volt a neve, hogy Digi-Camp J.l Hrom darab ktlls manyag
kapcsal s hat logikai s-kapu volt rajta. Az elbbiek kimenett hozz lehetett kap
csalni az utbbiak bemenethez, s az s-kapuk kimenett is a ktlls kapcsolk
bemenethez. Rviden, egy hrombites vges llapotgpet lehetett ltrehozni vele.
l Tbb webhely is ltezik, ahol szimultorokat tallhatsz ehhez az izgalmas kis gp hez.
178 14.FEJEZET
A kszlethez jrt egy hasznlati utasts, amelyben szerepelt nhny futtathat
program. A gpet gy lehetett beprogramozni, hogy az ember apr csveket (kis sz
vszl-darabokat) hzott a ktlls kapcsolkbl kill csapokra. A hasznlati uta
sts pontosan lerta, hov kell tenni az egyes csveket, de azt nem, hogy azok mit is
csinlnak. Ezt nagyon bosszantnak talltam.
rkig bmultam a gpet, s kiokoskodtam, hogyan mkdik a legalacsonyabb
szinten, de az istennek sem tudtam rjnni, hogyan vehetnm r, hogy azt csinlja,
amit n akarok. A hasznlati utasts utols oldala azt mondta, hogy ha kldk nekik
egy dollrt, akkor visszakldenek nekem egy kziknyvet, amely elrulja, hogyan
lehet programozni a gpet. 2
Bekldtem a dollrt, s a tizenkt vesek trelmetlensgvel vrtam a vlaszt.
Amikor a kziknyv megrkezett, azonnal rvetetter magam, s mg aznap felfal
tam. Egyszer rtekezs volt a logikai algebrrl, amely tartalmazta a logikai egyen
letek alaptnyezkre bontst, a trstsi s tagolsi trvnyeket, s a DeMorgan-ttelt.
A kziknyv megmutatta, hogyan lehet egy problmt logikai egyenletek sorozatval
kifejezni, s azt is, hogy miknt lehet ezeket az egyenleteket gy reduklni, hogy be
lefrjenek hat s-kapuba.
Kigondoltam az els programomat Mg ma is emlkszem a nevre: Mr. Patternson's
Computerized Gate (Mr. Patternsan komputerizlt kapuja). Megrtam az egyenlete
ket, redukltam ket, s megfeleltettem a gp csveinek s csapjainak Mkdtt!
Ezt lerni mg ma is borzongat rzs. Ugyanolyan mmort, mint amilyennek
kzel fl vszzada, tizenkt vesen reztem. Meg voltam babonzva, s az letem
rkre megvltozott.
Emlkszel mg arra a pillanatra, amikor elszr lttad mkdni egy programodat?
Megvltoztatta az leted? Elindtott egy ton, amelyrl nem lehetett tbb letrteni?
Persze nem teljesen egyedl talltam ki az egszet. tmutatst kaptam. Nhny
nagyon kedves s hozzrt ember (akiknek rk hlval tartozom) vette a frads
got, s megrt egy kziknyvet a logikai algebrrl, gy, hogy egy tizenkt ves is
megrtse. A matematikai elmletet sszektttk a kis manyag szmtgp gyakor
lati hasznlatval, s tadtk nekem azt a tudst, amivel a kszlket rvehettem,
hogy azt csinlja, amire utastom.
Rongyosra olvastam azt a vgzetes kziknyvet. Ma mr egy visszazrhat tasak
ban tartom, de az id vasfoga alaposan kikezdte: a lapjai megsrgultak s trkenny
vltak. A szavak ereje azonban ma is ugyangy ragyog a lapokrL A logikai algebra
elegns lersa mindssze hrom oldalt ignyelt. A kszlkhez kapott eredeti prog
rarak egyenletein lpsrl lpsre vgigvezet tmutat ma is lenygz. Igazi
2 A kziknyvet mg mindig rzm - kitntetett helye van az egyik knyvespolcomon.
MESTEREK, TANTVNYOK ... 179
mestermunka, ami legalbb egy fiatalember lett megvltoztatta. A szerzi nevt
azonban valsznleg soha nem fogom megtudni.
KZPISKOLA: ECP-18
Tizent ves koromban, els ves kzpiskolai tanulknt, szerettem a matekterem
ben lgni. (Ezt kapd ki!) Egy nap begrgettek egy asztalifrsz-mret gpet: egy
kzpiskolknak sznt oktatsi szmtgp volt, egy ECP-18-as, amelyet az iskolnk
kthetes kiprblsra kapott.
A httrbl figyeltem, mirl beszlnek a tanrok s a technikusok. A gp 15 bites
szavakkal (Mi az a
"
sz"?) s 1024 szavas mgnesdob-memrival dolgozott. (A mg
nesdob-memria addigra mr nem volt ismeretlen a szmomra, de csak elmletben.)
Amikor bekapcsoltk, a gp olyan sivt hangot adott, mint amikor egy sugrhaj
ts repl felszll. Gondolom, a mgnesdob felprgsnek a hangja volt. Miutn
a dob elrte a megfelel sebessget, a gp mr viszonylag halkan zemelt.
Imdtam azt a gpet. Lnyegben egy rasztal volt egy csodlatos vezrlpanellel,
ami gy llt ki a tetejbl, mint egy hadihaj parancsnoki hdja. A vezrlpanelt egy
sor lmpa dsztette, amelyek nyomgombknt is mkdtek. Olyan volt az eltt a gp
eltt lni, mintha Kirk kapitny szkben lnk.
Mikzben figyeltem, ahogy a technikusok a gombokat nyomkodjk, szrevettem, hogy
a bennk lev lmpa felkapcsoldik, amikor a gombot megnyomjk, a kvetkez gomb
nyomsra pedig kialszik a fny. Azt is megfigyeltem, hogy a technikusok tovbbi gombo
kat is megnyomnak, amelyeken olyan feliratok lltak, mint a deposit vagy a run.
A gombokat minden sorban hrom darab ts csoportba osztottk. Az n Digi
Compom szintn hrombites volt, ezrt el tudtam olvasni egy binrisan kifejezett oktlis
szmjegyet. Nem volt nagy szm rjnni, hogy itt csupn t oktlis szmjegyrl van sz.
Mikzben a technikusok a gombokat nyomogattk, hallottam, ahogy magukban
mormolnak. Amikor megnyomtk az l, 5, 2, O, 4 sorozatot a memory bujfer sorban,
ezt mondtk: "trols 20 4-ben
"
. Aztn megnyomtk a l, O, 2, l, 3 sorozatot, s ezt
motyogtk: "213 betltve az akkumultorba". Az egyik gombsor felett az accumulator
felirat dszelgett.
Elg volt tz perc, s a tizent ves agyar tkletesen sszerakta, hogy a 15 a tro
lst, a 10 pedig a betlts t jelenti; hogy az akkumultor tartalma az, aminek a trol
srl vagy betltsrl sz van; s hogy a tbbi szm a mgnesdobon tallhat 1024
sz egyikt adja meg. (Teht ezt jelenti a sz!)
Tudsra szomjaz agyar aprnknt egyre tbbet rtett meg az elmletbl s az
utastskdokbL Mire a technikusok tvoztak, tisztban voltam a gp mkdsnek
alapjaivaL
Aznap dlutn, mikzben a tanulk a kzs helyisgben rtk a leckjket, belo
pztam a mateklaborba, s jtszadozni kezdtem a szmtgppeL Mr jval korbban
megtanultam, hogy bocsnatot krni egyszerbb, mint engedlyt. Beptygtem egy
180 14.FEJEZET
aprcska programot, ami kettvel megszorozta az akkumultor tartalmt, s hozz
adott egyet. Aztn betttem egy 5-st az akkumultorba, futtattam a programot, s
az akkumultor 138 -at rt ki. A program mkdtt!
Betplltar mg nhny ehhez hasonlan egyszer programot, s mindegyik gy
mkdtt, ahogy elterveztem. n voltam a vilgegyetem ura!
Pr nappal ksbb rjttem, milyen ostoba- s szereness- voltam. A matekla
borban ugyanis talltam egy hasznlati utastst, amelyen a klnbz utastsok s
mveletkdok szerepeltek, kztk sok olyan, amit nem tudtam ellesni a technikusok
tl. Elgedettsggel tlttt el, hogy helyesen rtelmeztem azokat, amelyek ismersek
voltak a szmomra, a tbbit pedig nagyon izgalmasnak talltam. Az ismeretlen uta
stsok kztt azonban szerepelt egy HLT nev is. Ez trtnetesen a halt-ot (lellts)
jelentette, s egy csupa nullbl ll sz jelkpezte. Puszta vletlen volt, hogy ppen
egy csupa nullbl ll szt tettem minden programom vgre, hogy az akkumul
torba betltve kirtsem azt. A lellts elve fel sem merlt bennem. Azt hittem, a fut
tats csak gy lell, ha egy program vget rt.
Emlkszem, egyszer a mateklaborban figyeltem, ahogy az egyik tanr kszkdik,
hogy mkdsre brjon egy programot. Kt tzes szmrendszer szmot prblt be
rni a szmtgphez kapcsolt telexgpen, majd kirni az sszegket. Brki, aki pr
blt mr ehhez hasonl programot rni gpi nyelven, miniszmtgpen, tudja, hogy
messze nem egyszer a dolog. Be kell olvastatni a karaktereket, szmjegyekk kell
alakttatni azokat, majd binris alakra hozni, sszeadni, visszaalaktani decimlis
alakra, s visszakdoini karakterekk. Nekem elhiheted, ez sokkal rosszabb, mintha
binrisan tpllnd be a programot a vezrlpanelen.
Figyeltem, ahogy a tanr betpllja a lelltst a programba (Milyen j tlet!), majd
lefuttatja a vgig. Ez a primitv trspont lehetv tette neki, hogy megvizsglja a
regiszterek tartalmt, s lssa, mit csinlt a program. Emlkszem, ahogy azt dny
nygte:
"
H, ez aztn gyors volt!
"
. Te j g, ha tudn!
Fogalmam sem volt, milyen algoritmust alkalmazott. Ez a fajta programozs ak
kor mg mindig rejtlyes volt a szmomra, pedig soha nem szlt hozzm, mikzben
a hta mgl figyeltem. Valjban senki nem magyarzta el nekem a szmtgp m
kdst. Azt hiszem, olyan nygnek tekintettek, akivel jobb nem foglalkozni, hadd
zizegjen csak a mateklaborban, mint egy molylepke. Azt hiszem, sem n, a dik, sem
a tanrok nem lltak tl magas fokn a trsas rintkezsnek.
A tanr vgl mkdsre brta a programjt. Lenygzve figyeltem. A kt szmot
lassan rta be, mert korbbi felkiltsa ellenre a gp nem volt gyors. (Gondolj csak
bele, milyen lehetett kt egymst kvet szt beolvasni egy forg mgnesdobrll967-
ben.) Amikor lettte a Return-t a msodik szm utn, a szmtgp vad villdzsba
kezdett, majd elkezdte kirni az eredmnyt - gy msodpercenknt egy szmjegyet.
Amikor az utols kivtelvel az sszes szmjegyet kirta, mg vadabbul kezdett vil
ldzni, majd gy t msodperccel ksbb kirta az utols szmjegyet is, s lellt.
MESTEREK, TANrTVNYOK ... 181
Mirt llt meg az utols szmjegy eltt? Soha nem tudtam meg, de a dolog r
bresztett arra, hogy egy problma megkzeltse dnt hatssal lehet a felhasznl ra.
Br a program helyes eredmnyt adott, gy reztem, valami nem stimmel vele.
Ez is rsze volt a szakmai kpzsemnek - persze nem az a fajta tmutats, amiben
remnykedtem. J lett volna, ha valamelyik tanr a szrnyai al vesz, s megmutatja,
mit kell tennem. De nem szmtott, mert nzhettem ket, s szdt iramban szvtam
magamba a tudst.
AZ TMUTATS SZDKATLAN FORMl
Azrt mondtam el ezt a kt trtnetet, mert mindkett ms-ms mdjt rja le a szak
mai tmutatsnak, s egyik sem illik bele a kifejezs ltal hagyomnyosan sugallt
kpbe. Az els esetben egy nagyon jl megrt kziknyv szerzitl tanultam, mg
a msodikban azltal, hogy olyan embereket figyeltem, akik igyekeztek tudomst sem
venni rlam. A tuds azonban, amelyre szert tettem, mindkt esetben mlyrehat s
ltfontossg volt.
Termszetesen msfajta mesterektl is tanultam. Volt pldul egy kedves szom
szdunk, aki a Teletype-nl dolgozott, s egyszer egy harminc telefonrelt tartalmaz
dobozt hozott nekem, hogy jtsszak vele. Adj egy srcnak pr relt s egy villanyvo
nat-transzformtort, s meghdtja a vilgot!
Akkor ott volt az a kedves szomszd, aki rdisknt dolgozott, s megmutatta ne
kem, hogyan kell hasznlni egy ram- s ellenlls-mrt (amit rgtn tnkre is tet
tem); az irodaszer-boltos, aki megengedte, hogy
"
jtsszak
"
a mregdrga programoz
hat szmolgpvel; vagy a Digital Equipment Corporation rtkestsi irodja, ahol
lehetv tettk, hogy
"
babrljak
"
a PDP-8-asukkal s PDP-10-eskkel.
s persze tanultam a BAL-programoz nagy Jim Carlintl, aki segtett nekem
hibamentesteni egy a tudsomat meghalad Cobol-programot, s gy megmentett at
tl, hogy kirgjanak az els programozi llsombl. Megtantotta, hogyan kell elol
vasni egy maglenyomatot (core dump), s hogyan lehet formzni a kdokat res so
rokkal, csillagokbl ll sorokkal s megjegyzsekkel. adta meg nekem a kezdlkst
az igazi mestersgbeli tuds megszerzse fel. Sajnlom, hogy nem tudtam viszonozni
a szvessgt, amikor egy vvel ksbb esett ldozatul a fnk elgedetlensgnek
De szintn szlva nagyjbl ennyi. A hetvenes vek elejn nem volt tl sok tapasz
talt programoz. Minden ms helyen, ahol dolgoztam, n voltam a rangids. Senki
sem tudott segteni abban, hogy milyen is az igazi professzionlis programozs. Nem
volt pldakpem, aki megtantott volna, hogyan viselkedj ek, vagy hogy mit becsljek
meg. Mindezekre magamnak kellett rjnnm, s egyltaln nem volt knny.
KEMNY TSEK
Ahogy korbban mr emltettem, 1976-ban a gyrtsautomatizl rendszert kszt
cgnl mr nem sztam meg a kirgst. Br szakmailag felkszlt voltam, nem ta-
182 14. FEJEZET
nultam meg, hogy az zleti cloknak is figyelmet kell szentelni. Semmibe vettem
a dtumokat s hatridket. Megfeledkeztem egy fontos htfi bemutatrl, mk
dskptelen llapotban hagytam a rendszert pnteken, s htfn ksve rkeztem, gy
aztn mindenki dhsen nzett rm.
A fnkm kldtt nekem egy figyelmeztet levelet, amelyben azt rta, hogy vagy
haladktalanul vltoztatok a hozzllsomo n, vagy kirgnak Ez kijzantlag hatott
rm. trtkeltem az letemet s a plyafutsamat, s jelentsen vltoztattam a visel
kedsemen - de errl mr szt ejtettem ebben a knyvben. Ez azonban tl kevsnek
bizonyult, s tl ksn jtt. Mr minden tettemet gyanakodva figyeltk, s olyan ap
rsgok is jelentss vltak, amelyek korbban nem szmtottak volna. gy, br ke
mnyen prblkoztam, vgl ajtt mutattak.
Mondanom sem kell, hogy cseppet sem szvdert ilyen hrrel belltani, amikor
az embert egy llapotos felesg s egy ktves kislny vrja otthon. De sszeszedtem
magam, s a kvetkez munkahelyemen mr nem feledtem ezt az lettl kapott lec
kt. Tizent vig maradtam ott- az az lls alapozta meg igazn a ksbbi plyafu
tsomat, s azt, aki ma vagyok.
Vgl tlltem a csapst, s sikeres lettem. Mindazonltal alakulhatott volna sze
renessebben is a dolog. Sokkal jobb lett volna, ha lett volna egy igazi mesterem, aki
megtantja nekem a szakma minden csnjt-bnjt; akit figyelhettem volna, mikzben
segtek neki a kisebb feladatok elvgzsben; aki felgyelte s gyengden irnytotta
volna a kezdeti szrnyprblgatsaimat; aki pldaknt llt volna elttem, s megta
ntotta volna nekem, mik a kvetend rtkek, s milyen a helyes viselkeds. Egy
sensei. Egy valdi mester.
INASVEK
Mit csinlnak az orvosok? A krhzak taln gy veszik fel a vgzs medikusokat,
hogy rgtn belltjk ket a mtbe, hogy az els munkanapjukon hajtsanak vgre
egy szvmttet? Persze hogy nem.
Az orvosi szakma ritulkkal krlbstyzott s hagyomnyokkal megolajozott,
intenzv gyakornokoskodst r el. Az orvosi egyetemek szigor szakmai felgyelet
alatt llnak, s megkvetelik tlk, hogy a lehet legjobb kpzst nyjtsk a hallgatk
nak. Amerikban a kpzs nagyjbl egyenlen oszlik meg az elmleti tanulmnyok
s a krhzakban, szakemberek irnytsa alatt elvgzend klinikai gyakorlat kztt.
A vgzs orvostanhallgatknak, mieltt megkapnk az engedlyket, ktelez jel
leggel egy v szakmai gyakorlatot kell teljestenik, amelynek sorn tapasztalt orvo
sok felgyelik s irnytjk a munkjukat. Ez alatt az idszak alatt intenzv gyakorlati
kpzsben rszeslnek, s az ket oktat orvosok pldaknt llnak elttk.
Miutn a ktelez klinikai gyakorlat vget rt, brmely szakirny kpests meg
szerzshez tovbbi hrom-t v, felgyelet mellett vgzett szakmai gyakorlat szk
sges - ezt hvjk rezidenskpzsnek A rezidensek (gyakorl orvosok) gy tesznek
MESTEREK, TAN[TVNYOK ... 183
szert magabiztossgra, hogy egyre nagyobb felelssggel jr feladatokat bznak r
juk, mikzben tovbbra is tapasztaltabb orvosok veszik krl ket, akik felgyelik
a munkjukat.
Szmos szakirnyou ezen fell mg egy-hrom v gyakornokoskodst kvetel
nek meg, hogy a szakorvosjellt megszerezze a szksges szakirny kpzst s gya
korlatot.
Csak ez utn tehetik le a vizsgikat, s kaphatjk meg a szakorvosi bizonytvnyukat
Az orvosi szakma fenti lersa nmileg idealizlt, s valsznleg rendkvl pon
tatlan, de a tny ettl mg tny marad: ha sok forog kockn, nem zrunk be csak gy
friss diplomsokat egy szobba, s doblunk be nekik idnknt nmi hst, azt vrva,
hogy valami j sl ki belle. De akkor mirt tesszk ezt a szoftverfejlesztkkel?
Igaz, hogy a szaftverhibk szmljra viszonylag kevs halleset rhat. Viszont
gyakran okoznak jelents pnzgyi vesztesget. Egyes cgek hatalmas sszegeket
vesztenek a szoftverfejlesztik elgtelen kpzse miatt.
A szaftverfejlesztsi ipar valamirt abban a hitben l, hogy a programozk egysze
ren programozk, akik miutn megkaptk a diplomjukat, mris tudnak kdot rni.
Egyltaln nem szokatlan, hogy egy cg kzvetlen l az iskolapadbl toborozzon sr
. cokat,
"
csapatokat
"
alaktson bellk, majd arra krje ket, hogy ltfontossg rend
szereket ptsenek neki. rlet!
A szabafestknl nem csinlnak ilyet. A vzvezetk-szerdknl sem. A villanysze
relknl sem. Szerintem taln mg a gyorsttermi szakcsoknl sem. Hiszem, hogy
azoknak a cgeknek, amelyek vgzs informatikusokra vadsznak, tbbet kellene
a szoftverfejlesztik kpzsbe fektetnik, mint amennyit a McDonalds invesztl
a pultosaiba.
Ne ltassuk magunkat azzal, hogy ez lnyegtelen, mert nagyon sok forog kockn.
Az egsz civilizcinkat szmtgpes prograrak mkdtetik. Szmtgpes prog
rarak mozgatjk s kezelik a mindennapi letnket t- meg tszv informcikat
Szoftver vezrli az autinkban a motort, a sebessgvltt s a fket. Szoftver szmtja
ki a bankszmlnk egyenlegt, utalja t a szmlink ellenrtkt, s fogadja a fizet
snket. Szoftver mossa ki a ruhnkat, s mutatja neknk az idt. Szoftver jelenti meg
a kpet a tvnken, kldi el az SMS-einket, trcszza az ltalunk hvott szmokat, s
szrakoztat minket, ha unatkozunk. Mindentt jelen van.
Mivel az aprsgoktl a legfontosabb dolgokig az letnk minden mozzanatt
szoftverfejlesztkre bzzuk, ajnlatos lenne, ha a szoftverfejlesztk kell idej kpz
sen s felgyelet mellett vgzett szakmai gyakorlaton esnnek t.
SZAKMAl GYAKORLAT SZOFTVERFEJLESZTKNEK
Hogyan vezesse be a szaftverfejleszti szakma a friss diplomsokat a profik vilgba?
Milyen lpcsfokokat msszanak meg? Milyen kihvsokkal nzzenek szembe? Mi
lyen clokat kelljen elrnik? Haladjunk visszafel!
184 14. FEJEZET
MESTEREK .. Mesternek azt a programozt tekinthetjk, aki mr tbb jelents szaft
verprojektet is irnytott. Jellemzen legalbb tz vnyi tapasztalattal rendelkezik, s
tbbfle platformon, nyelven s opercis rendszeren dolgozott. Tudja, hogyan kell
irnytani s sszehangolni egyszerre tbb csapatot, hozzrt tervez, s gond nl
kl brkit lekrz a kdolsban. Ajnlottak mr neki vezeti llst, de vagy vissza
utastotta azt; visszakozott, miutn elfogadta; vagy megtartotta mellette az elssor
ban szakmai feladatt. Ezt a szakmai feladatot gy ltja el, hogy olvas, kpzi magt,
gyakorol, tevkenyen rszt vesz a munkban, s tant. A cgek mindig egy mesterre
bzzk a projektek szakmai vezetst. Gondolj Scotty-ra.
INASOK. Az inasok azok a programozk, akik kpzettek, hozzrtk s energikusak.
Plyafutsuknak ebben a szakaszban megtanuljk, hogyan kell csapatban hatko
nyan dolgozni, s hogyan vlhatnak egy csapat vezetjv. Ismerik a legjabb tech
nolgikat, de jellemzen nem rendelkeznek tbbfle rendszeren szerzett tapasztala
tokkal. ltalban csak egy nyelvet, rendszert s platforrot ismernek behatan, de
tovbbiakat is tanulmnyoznak. A tapasztalatuk szintje ersen vltoz, de ltalban
mintegy t v ll a htuk mgtt. A legtbb tapasztalattal rendelkezk mr megk
zeltik a mesteri szintet, mg azok, akik a legkevesebb idt tltttk el a szakmban,
nemrg mg gyakornokok voltak.
Az inasokat mesterek vagy tapasztaltabb inasok terelgetik. A kezd inasok ritkn
kapnak nllsgot; az munkjukat szarosan felgyelik, a kdjukat tzetesen t
vizsgljk. Ahogy nagyobb tapasztalatra tesznek szert, az nllsguk n, a felgye
let rnyaltabb, kevsb kzvetlen lesz, majd vgl talakul egyenrang felek kztti
vlemnycserv.
GYAKORNOKOK .. A vgzsk gyakornokknt kezdik a plyafutsukat. A gyakornokok
nem rendelkeznek nllsggal, ehelyett inasok szaros felgyelete alatt llnak. Kez
detben egyltaln nem bznak rjuk feladatokat; csupn besegtenek az inasoknak.
Ebben az idszakban nagyon intenzv pros programozsra van szksg, mert ekkor
tanuljk meg s tudatostjk magukban a szakma alapelveit s fogsait, s ekkor ala
pozzk meg az rtkrendjket
A gyakornokok tanti az inasok. k gondoskodnak rla, hogy a gyakornokok
megismerjk a tervezsi elveket, mintkat, eljrsokat s ritulkat. Az inasok tant
jk meg ket a tesztvezrelt fejlesztsre, az jratervezsre, a becslsre, s gy tovbb.
Az inasok olvasmnyokat s gyakorlatokat osztanak ki a gyakornokoknak, s felgye
lik a haladsukat.
Egy v gyakornokoskods szksges. Ez utn, amennyiben az inasok hajlandak
maguk kz fogadni a gyakornokot, beajnljk t a mestereknek. Amestereknek meg
kell vizsglniuk a gyakornok alkalmassgt: elbeszlgetnek vele, s ttekintik az ad
digi eredmnyeit. Ha a mesterek beleegyeznek, a gyakornokbl inas vlhat.
MESTEREK, TANTVNYOK ... 185
A VALSG
A fentiek termszetesen ezttal is egy elkpzelt, idealizlt vilgot festenek le. Ha vi
szont kicserled a neveket, s hunyortva nzed a szavakat, rjhetsz, hogy ez a vilg
egyltaln nem ll messze a mai elvrsai nktl. A friss diplomsokat fiatal csapatve
zetk irnytjk, ket pedig projektvezetk, s gy tovbb. A gond csak az, hogy ez az
irnyts a legtbb esetben nem szakmai! A legtbb cgnl egyltaln nincs szakmai
felgyelet. A programozk csupn azrt kapnak fizetsemelst s vgl ellptetst,
mert a programozkat ezzel szoktk jutalmazn i.
A mai gyakorlat s az n idealizlt gyakornaki programom kztt az a klnbsg,
hogy n a hangslyt a szakmai kpzsre, felgyeletre s irnytsra helyezem. A k
lnbsg magban az elvben rejlik, hogy a szakmai rtkrendet s gondolkodst tan
tani, gondozni, tpllni s sztnzni kell. A jelenlegi steril megkzelts legnagyobb
hinyossga, hogy nem kveteljk meg az idsebbektl, hogy tantsk a fiatalokat.
MESTERSGBELI TUDAS
Most mr meghatrozhatjuk, mit is jelent a mestersgbeli tuds kifejezs. Mit rtnk
mestersgbeli tuds alatt? Ahhoz, hogy ezt megrthessk, a mesterember szbl kell
kiindulnunk Ha ezt a szt halljuk, a szakrtelem, a minsg, a tapasztalat s a hoz
zrts jut az esznkbe. A mesterember olyasvalaki, aki gyorsan, de nem kapkodva
dolgozik, relis becslseket ad, s elvgzi, amit vllalt. Egy mesterember tudja, mikor
mondjon nemet, de arra trekszik, hogy igent mondhasson. A mesterember: profi.
A mestersgbeli tuds a mesterember gondolkodsmdja. A mestersgbeli tuds
egy mm, amely szakmai rtkek, ismeretek, eljrsok, viselkedsformk s megol
dsok sszessgt takarja.
De hogyan teszi ezt a mmet a magv egy mesterember? Hogyan sajttja el ezt
a gondolkodsmdot?
A mestersgbeli tuds mmjt a szakemberek adjk t egymsnak. Az idsek meg
tantjk a fiataloknak, az azonos szinten llk kicserlik egyms kztt. Betartjk s
jratanuljk a szablyait, ahogy az idsek figyelik a fiatalokat. A mestersgbeli tuds
fertzs, egyfajta szellemi vrus, amelyet gy kaphatsz el, hogy msokat fgyelsz, s
megengeded, hogy a mm beld hatoljon.
MEGGYZ ER
Senkit nem beszlhetsz r, hogy mesterember legyen. Nem gyzheted meg arrl, hogy
magba fogadja a mestersgbeli tuds mmjt. Az rvek mit sem rnek. Az adatok
lnyegtelenek. Az esettanulmnyok semmit sem jelentenek. Egy mm elfogadsa nem
annyira racionlis, mintsem rzelmi dnts. Mlyen emberi dolog.
186 14.FEJEZET
De akkor hogyan vehetsz r valakit, hogy a magv tegye a mestersgbeli tuds
mmjt? Emlkezz vissza: a mm fertz, de csak akkor, ha megfigyelhet. A mmet
teht megfigyelhetv kell tenned. Te leszel a pldakp. Elszr magad is mesterem
berr vlsz, majd hagyod, hogy a mestersgbeli tudsod sztsugrozzon. A mm
gondoskodik a tbbirl.
SSZEFOGLALS
Az iskola meg tudja tantani a szmtgp-programozs elmlett, arra azonban nem
kpes - s nem is teszi meg-, hogy tadja azt a szakmai tudst s gyakorlatot, amely
lyel egy mesterembernek rendelkeznie kell. Ezeket a dolgokat csak szakemberek sze
mlyes tmutatsa rvn, vek alatt sajtthatod el. Itt az ideje, hogy mi, akik a szaft
veriparban dolgozunk, szembenzznk a tnnyel, hogy nem az egyetemekre, hanem
rnk hrul a feladat, hogy utat mutassunk a szoftverfejlesztk kvetkez nemzed
knek. Itt az ideje, hogy kialaktsuk a szakmai gyakorlat s a hossz tv szakmai
tmutats programjt.
A FGGELK
ESZKZK
1978-ban a Teradyne -nl dolgoztam azon a telefonvizsgl rendszeren, amelyrl ko
rbban mr beszltem. A rendszer mintegy 80KSLOC-nyi M365 assembler-kdbl
llt. A forrskdot mgnesszalagokon troltuk
A szalagok hasonltottak azokhoz a 8-svos sztere kazettkhoz, amelyek olyany
nyira npszerek voltak a 70-es vekben. A meghajt csak egy irnyban tudta moz
gatni a vgtelentett szalagot. A tekercsek 3, 7,5, 15 vagy 30mternyi szalagot troltak.
Minl hosszabb volt a szalag, annl tovbb tartott visszatekerni, mivel a meghajtnak
addig kellett elre mozgatnia, amg el nem rt a
"
betltsi ponthoz
"
. Egy 30mteres
ESZKZK 189
tekercs t perc alatt rt el a betlt si ponthoz, ezrt gondosan vlasztottuk meg, hogy
milyen hossz tekercseket hasznlunk.1
A szalagoklogikailag llomnyokra (fjlokra) oszlottak. Egy szalagon annyi llomny
lehetett, amennyi csak elfrt rajta. Ha meg akartunk keresni egy fjlt, akkor betltttk a
szalago t, majd egyenknt elreugrltunk a fjlok kztt, amg meg nem talltuk a keresett
llomnyt. A forrskd-knyvtr tartalmrl volt egy listnk, amit kitettnk a falra, hogy
tudjuk, hny fjlt kell tugranunk, mire elrnk ahhoz, amelyikre szksgnk van.
A forrskdrl volt egy 30 mteres tekeresre rt msolatunk, amit a laborban tar
tottunk, a polcon. A MASTER cmke llt rajta. Ha mdostani akartunk egy fjlt, be
tltttk a MASTER forrsszalagat az egyik meghajtba s egy 3 mteres res tekereset
a msikba. Addig ugrltunk elre a MASTER szalagon, amg el nem rtk a keresett
llomnyt, majd a fjlt az res szalagra msoltuk. Ezt kveten mindkt szalagat
"
visszatekertk
"
, s a MASTER tekereset visszatettk a polcra.
A mesterszalag tartalmrl kln listnk volt egy tbln a laborban. Miutn le
msoltuk a szerkeszteni kvnt fjlt, egy sznes gombostt tettnk a tbln a neve
mell. Ez felelt meg a fjl
"
kivtelnek
"
(check out).
A szalagokat egy kpernyn szerkesztettk. A szvegszerkesztnk (egy ED-402-es)
kifejezetten jl mkdtt- nagyon hasonltott a vi-re. Beolvastunk egy
"
oldalt
"
a szalagrl, mdostottuk a tartalmt, majd kirtuk az oldalt, s beolvastuk a kvet
kezt. Egy oldal jellemzen 50 kdsorbl llt. A szalagon nem lehetett elrekukkan
tani, hogy lssuk, milyen oldalak kvetkeznek, s vissza sem lehetett menni a mr
szerkesztett oldalakhoz, ezrt kinyomtatott kdlistkat hasznltunk
A vgrehajtani kvnt mdostsokat valjban a nyomtatott kdlistkon jelltk
meg, s csak ez utn szerkesztettk a fjlokat, a jellseknek megfelelen. Senki sem
rt vagy mdostott kdot a terminlnL ngyilkossg lett volna.
Miutn minden mdostani kvnt fjlon vgrehajtottuk a szksges vltoztatso
kat, beleolvasztottuk a fjlokat a mesterpldnyba, hogy ltrehozzunk egy munkapl
dnyt. Ezt a szalagat hasznltuk a fordtsi s a tesztmveletek futtatshoz.
Amikor vgeztnk a tesztelss el, s meggyzdtnk rla, hogy a mdostsok m
kdnek, megnztk a tblt. Ha nem voltak rajta j gombostk, egyszeren t
cmkztk a munkapldnyt MASTER-r, s kihztuk a gombostinket. Ha viszont
idkzben felkerlt nhny j t a tblra, a sajt tink levtele utn tadtuk a mun-
Amint emltettem, a szalagokat csak egy irnyban lehetett mozgatni, ezrt ha olvassi hiba merlt
fel, nem lehetett egyszeren visszatekerni a szalagot, s megismtelni a beolvasst. Abba kellett
hagynunk, amit csinltunk, vissza (pontosabban elre) kellett tekernnk a szatagot a betltsi pont
hoz, majd ellrl kezdeni az egszet. Ez naponta kt-hrom alkalommal megesett. Az rsi hibk
ugyancsak megszakottak voltak, a meghajt azonban nem volt kpes szlelni ezeket, ezrt a szala
gokat mindig prban rtuk, s amikor elkszltnk, ellenriztk a msikt. Ha valamelyik szalag
hibsnak bizonyult, rgtn msolatot ksztettnk a prjrL Ha mindkett hibs volt, ami nagyon
ritkn fordult el, az egsz r veletet ellrl kezdtk. Ilyen volt az let a 70-es vekben.
190 A FGGELK
kaszalagat annak, akinek a ti mg ott voltak a tbln, s neki kellett elvgeznie az
sszeolvaszts t.
Hrman dolgoztunk a laborban, s mindegyiknk ms-ms szn gombostket
hasznlt, gy knnyen t lehetett tekinteni, hogy ki milyen fjlokat vett ki mdos
tsra. Mivel pedig egy helyisgben dolgoztunk, s folyamatosan beszltnk egyms
hoz, fejbl tudtuk, hogy mi van a tbln. A tbla teht ltalban felesleges volt, s
sokszor nem is hasznltuk.
ESZKZK
A szoftverfejlesztk ma eszkzk szles krbl vlogathatnak. A tbbsgkkel nem
ri meg veszdni, de van nhny, amelynek a hasznlatt minden szaftverfejlesz tnek
el kell sajttania. Ez a fejezet az n jelenlegi eszkztramat rja le. Nem vgeztem
teljeskr felmrst a ltez egyb eszkzkrl, ezrt a lers semmikppen sem te
kinthet tfog rtkelsnek, csupn az ltalam hasznlt eszkzket mutatja be.
FORRSKD-KEZELS
Ha forrskd-kezelsrl van sz, ltalban a nylt forrs eszkzk bizonyulnak a leg
jobb vlasztsnak. Mirt? Mert fejlesztk rjk ket fejlesztknek - sajt maguknak,
amikor olyasmire van szksgk, ami tnyleg mkdik.
Jnhny drga, kereskedelmi forgalomban kaphat,
"
vllalati
"
(enterprise) vlto
zatkvet rendszer ltezik, de tapasztalataim szerint ezeknek nem igazn a fejlesztk
jelentik a clcsoportj t, hanem a menedzserek s dntshozk, valamint egy bizonyos
"
eszkzcsoportot
"
hasznlk. Az ilyen rendszerek kpessgeinek listja igencsak fi
gyelemremlt - csak sajnos ppen azokat a szolgltatsokat nem nyjtjk, amelyekre
a fejlesztknek tnylegesen szksgk lenne. A legfontosabb ezek kzl a sebessg.
EGY
"
VLLALATI
"
FORRSKD-KEZEL RENDSZER
Tegyk fel, hogy a cged kisebb vagyont ruhzott be egy
"
vllalati
"
forrskd-kezel
rendszerbe. Ha ez a helyzet, rszvtem. Politikailag valsznleg nem kifizetd kr
berohanni, s mindenkit figyelmeztetni, hogy
"
Bob bcsi azt mondta, ne hasznl
juk!
"
. Van viszont egy egyszer megolds.
Az egyes munkafzisok vgn (gy kthetente) betltheted (
"
bejelentkeztetheted
"
,
check in) a forrskclod a
"
vllalati
"
rendszerbe, mikzben addig valamelyik nylt
forrs rendszert hasznlod. gy mindenki boldog lesz, nem szegsz meg semmilyen
cges elrst, viszont hatkonyan tudsz dolgozni.
ESZKZK 191
PESSZIMISTA S OPTIMISTA ZROLS
A pesszimista zrols j tletnek tnt a 80-as vekben, hiszen az egyidej mdosts
problmjt a mdostsok sorba lltsval a legegyszerbb kikszblni: ha n szer
kesztek egy fjlt, te jobb, ha nem teszed. A sznes gombostk rendszere, amelyet
a 70-es vek vgn mi hasznltunk, valjban a pesszimista zrols egyik fajtja volt.
Ha egy fjl neve mellett gombostt lttam, tudtam, hogy nem szabad szerkesztenem
azt a fjlt.
A pesszimista zrolsnak termszetesen megvannak a maga htulti. Ha zrol ok
egy fjlt, majd elmegyek szabadsgra, mindenki ms, akinek mdostania kellene az
adott fjlt, elakad. Ha egy fjlt egy-kt napig zrolva tartok, akr szndkosan is ks
leltethetem msok munkjt.
Az eszkzeink azta sokkal gyesebb vltak a prhuzamosan szerkesztett forrs
fjlok beolvasztsban. Ha az ember belegondol, egszen lenygz, mire kpesek.
Az eszkz megvizsgl kt klnbz fjlt, illetve azok kzs st, majd klnfle
mdszerekkel kitallja, hogyan egyestheti az egyidejleg vgrehajtott mdostsokat
- s egsz jl csinlja.
A pesszimista zrols kora teht vget rt. Amikor kivesznk (
"
kijelentkeztetnk
"
,
check out) egy fjlt a rendszerbl, tbb mr nem kell zrolnunk azt. Valjban egy
ltaln nem kell trdnnk az egyes fjlok kijelentkeztetsvel - kivehetjk az egsz
rendszert, s tetszleges fjlokat mdosthatunk benne.
Amikor kszen llunk a mdostsok visszatltsre, egy
"
frisstsi
"
mveletet
(update) kell vgrehajtanunk A mvelet elrulja neknk, hogy bejelentkeztetett-e
kdot valaki ms is elttnk, automatikusan beolvasztja (merge) a legtbb mdos
tst, megkeresi az tkzseket, s segt a fennmarad mdostsok beolvasztsban.
Ezt kveten vglegesthetjk (commit) az sszeolvasztott kdot.
A fejezet ksbbi rszben bvebben is szt ejtek arrl, hogy milyen szerepet jt
szanak az automatizlt tesztek s a folyamatos bepts ebben a folyamatban, most
azonban csak azt szeretnm leszgezni, hogy soha nem jelentkeztetnk be olyan k
dot, amelyik nem teljesti valamennyi tesztet Soha, de soha.
CVS/SVN
A rgi j
"
kszenlti
"
forrskd-kezel rendszer a CVS. A maga korban nagysze
ren megfelelt, de a mai projektekhez mr kiss elavult. Az egyes fjlok s knyv
trak kezelsben nagyon j, de az llomnyok tnevezsvel vagy a knyvtrak
trlsvel mr vannak gondjai. A padlsa pedig ... nos, minl kevesebbet tudunk
rla, annl jobb.
A Subversion (SVN) ezzel szemben kitnen mkdik. Lehetv teszi, hogy egyet
len mvelettel kijelentkeztesd a teljes rendszert; a frissts, az sszeolvaszts s a vg
legests egyszeren vgrehajthat; s amg nem kell kdgakkal foglalkozni, az SVN
rendszerek meglehetsen knnyen kezelhetk.
192 A FGGELK
KDELGAZTATS A legegyszerbb formit kivve 2008-ig kerltem a kdelgazta
tst (branching). Ha egy fejleszt j kdgat hozott ltre, az gat a munkafzis vgn
vissza kellett csatornzni a fgba. Olyan szigor voltam a kdelgztatssal kapcso
latban, hogy az ltalam vezetett projektekben csak nagyon ritkn fordult el ilyesmi.
Ha az SVN-t hasznlod, szerintem ma is ezt az elvet rdemes kvetned. Ugyanak
kor megjelent nhny j eszkz, amelyek teljesen talakthatjk a jtkszablyokat.
Az elosztott forrskd-kezel rendszerekre gondolok, amelyek kz l a g i t a kedven
cem, ezrt bvebben is ki szeretnk trni r.
GIT .. A g i t-et 2008 vgn kezdtem hasznlni, s teljesen megvltoztatta, amit a for
rskd-kezelsrl korbban gondoltam. Azt elmagyarzni, hogy mirt vltoztatja
meg a jtkszablyokat ez az eszkz, tlmutatna ennek a knyvnek a keretein, de r
demes rviden sszevetni az A. l. s A.2. brkat.
Az A.l. bra a FITNESSE projekt nhny htnyi fejlesztst mutatja, az SVN fel
gyelete alatt. Lthatod rajta a kdelgaztatst szigoran tilt szablyaim hatst.
Egyszeren nem hoztunk ltre kdgakat. Ehelyett nagyon srn vgeztnk friss
tst, sszeolvasztst s vglegestst a fgon.
A.l. bra
Mre bug fixes
t Docs now say that Java 1.5 is reqired.
Bug fix
, Mny usability and behaviorial imrovements.
Clean up
t Added PAGE_NAME an PAGE_PAT H to pre-delined variables.
Added . to !pth widgt
link to the Iixtura gallery
Iixtur gallery release 2.0 (208-06.9) cpied into the !ruk wiki at
Firefax cmpatablity for invisible cllapsibia sectios; remeved .c
Updaed documentaion suite for a chanes sinc last releae.
Enhancemnt to handie nulls in saved and realled symbos. Adde
Added a "Prune" Propeties aUributa to exclude a page and ils ch l<
FIXed type-o
Added chek for existing child page on rename.
Added "Renam link to Symbolic Links proparty section; renmad
Adjusted page properties on rcntly aded pages such that they c
Enhanced Symbolic Links to allo ali relative and absaiute pth for
Cleaned up renamPageReponer a bit more.
Cleaned Up PathParsar names a bit. Pop -> RemveNaeFroE
Cleaned up RenamePageResponder a bit. Fixed TestContentsHell
udated usage mssage
Fixed a bug wherein varab es delind in a parent's peformated bl
Added epicit responde "getPae" to render a page i n case query
Tweas to TOC help text.
New proery: Help text; TOCWidget has rollover balcon with new
Redundant to the JUnii tests and elemantal acptac tests.
+ Remved the Iasi of the [ac tags.
! !conents -1 option enhacment to show suite fillars in TOC list; fix
TOC enhancmnts for proprties (-p and PROPERTY_TOC an F
1) Render the tas on non-WikiWor links;
Added hHpJ/ prefix to google.cm for firewall transparency.
Isolate query action from adilianl qery argumnts. For exarle
Acmmodte query strings like "?suite&suiteFilter=X"; prior logic \
; leep AliaslinkWidget a bit.
A FitNesse a Subversion-ban
ESZKZK 193
Az A.2. bra ugyanennek a projektnek mutatja nhny heti fejldst, de ezttal a
QJThasznlatvaL Amint lthatod, tele van elgazsokkal s sszeolvasztsokkaL En
nek nem az volt az oka, hogy laztottam a kcelgaztats tilts n - egyszeren ez volt
a legkzenfekvbb s legknyelmesebb mdja a munknak. Az egyes fejlesztk nagyon
rvid let kdgakat hoztak ltre, majd igny szerint sszeolvasztottk azokat.
P.2.DI
P|\NCSSC Q|\DCD
l!
o o o
l
ImpJemented fixture chinng with instancs
Refactord, 8 that MethdExecutionResult keeps 1
Fixure Chaining wi th instancs stord in Slim varia
! .-
Mrge reote branh 'upstreammaster'
husekeeping
l '
fixed bg which included TearDown in SuiteStUp
' husekeeping
1
Mrge branch master' of https:J/github.cm/rkus

Mrge branch master' of github.cm:MarkusGaertn
,.. Mrge branch 'master' of http:/github.cmunclel

fixed a bug which Joannes Link mentioned fc


l
Mrge branch 'master' of http://github.cml
Mrge branch 'master' of http://github.cr
!
Mrge branch 'master' of http:/github.cr
removed eror warning abut duplicated i
husekeeping
t+--:t.Line breaks pass through in un
L7
t
;.-Tracker [ -:-tDon't cunt fixture in l

JJJ husekeeping
methods in MehodExecuto protectec
fix orer of preopile sceario libarias
ad beginTable and endai e cal ls to Decisi or
Precmila Snarios at and above the suite lev1
otimzed i mports
mrge
Show test and suite rutims i n Ul
Remve static BseForatter.testme
husekeeping
Mrge branch master' of http:/github.cmclarelfitn
Aded Help widget 8 the "help text" that apears il
Remte_debug shold now work for more langagE
Mrge branch master' of http://github.cmMarkusC
aded missing properie files
Aapted Payroll example test as shown by Gojko o
husekeeping
.
Arra is felfigyelhetsz, hogy nem lthat egy igazi fg-mert nincs ilyen. Ha a QJt-et
hasznlod, nincs olyan, hogy kzponti kdtr (central repository) vagy fg (main
line). Minden fejleszt kln pldnnyal rendelkezik a projekt teles trtnetbl a
sajt gpn. Ezt a helyi msolatot jelentkeztetik be s ki, s akkor olvasztjk ssze
a tbbiekvel, amikor szksges.
Igaz, hogy fenntartok egy klnlegesen becses trol t, amelyben elraktrozam az
sszes kztes s kiadsi vltozatot, de ezt a trat fgnak hvni tveds lenne. Csupn
194 A FGGELK
egy knyelmesen megtekinthet pillanatfelvtelt nyjt a projekt teljes trtnetrl,
amelyet minden fejleszt a sajt gpn alakt.
Ha nem vilgos a dolog, sebaj. A g i t elsre okoz nmi fejtrst-hozz kell szak
nod, hogyan mkdik. A vlemnyem azonban az, hogy agit s a hozz hasonl
eszkzk jelentik a forrskd-kezels jvjt.
SZERKESZTK S FEJLESZTKRNYEZETEK
Fejlesztknt kdok olvassval s szerkesztsvel tltjk a legtbb idt. Az erre
a clra hasznlt eszkzeink ugyanakkor hatalmas vltozson mentek keresztl az v
tizedek sorn. Vannak kztk olyanok, amelyek rendkvl nagy tudsra tettek szert,
de olyanok is, amelyek alig vltoztak a 70-es vek ta.
VI
Azt hihetnd, hogy azok a napok, amikor a vi-t hasznltuk els szm programszer
keszt eszkzknt, mr rgen elmltak, hiszen manapsg mr olyan eszkzk ltez
nek, amelyek messze tlszrnyaljk a vi s a hozz hasonl egyszer szerkesztk
kpessgeit. Az igazsg azonban az, hogy egyszersgnek, knny hasznlhats
gnak, gyorsasgnak s rugalmassgnak ksznheter a v i ismt komoly npsze
rsgnek rvend. Lehet, hogy a v i nem olyan sokoldal, mint az Emacs vagy az
Eclipse, de mg mindig gyors s hatkony szerkesztnek szmt.
Ezzel egytt ma mr nem vagyok vi-guru. Volt id, amikor gy ismertek, mint
a
"
vi-istent
"
, de annak mr rgen vge. Idrl idre elveszem a vi-t, ha gyorsan kell
szerkesztenem egy szvegfjlt, st nemrg egy tvoli krnyezetben lev Java-forrs
fjlon hajtottam vgre vele egy gyors mdostst, de az elmlt tz vben elenyszen
kevs alkalommal hasznltam valdi kdolsra.
EMACS
Az Emacs mg mindig az egyik legsokoldalbb szerkeszt a piacon, s valsznleg
mg vtizedekig az is marad. Ezt a bels Lisp-modell szavatolja. Az ltalnos cl
szerkeszteszkzk kztt semmi sem rhet a nyomba. Msrszrl, azt hiszem, az
Emacs nem igazn kpes versenyre kelni a ma a piacot ural egyedi cl egyestett
(integrlt) fejlesztkrnyezetekkel (IDE). A kdszerkeszts ugyanis nem ltalnos
cl szerkesztsi feladat.
A 90-es vekben megszllott rajongja voltam az Emacs-nek. Semmi mst nem
voltam hajland hasznlni. Az akkori rmutats-kattingats szerkesztk nevetsges
jtkszerek voltak csupn, amelyeket egyetlen fejleszt sem vehetett komolyan.
A 2000-es vek elejn azonban megismerkedtem az IntelliJ-vel, amely ma a kedvenc
fejlesztkrnyezetem, s soha tbb nem nztem vissza.
ESZKZK 195
E CLl PS E/l NTELLIJ
InteiliJ-felhasznl vagyok. Egyszeren imdom. Java-, Ruby-, Clojure-, Scala-, Java
Script- s szmtalan ms nyelv kdot rok benne. Ezt az eszkzt programozk k
sztik, akik rtik, mire van szksge egy programoznak, amikor kdot r. Az vek
sorn ritkn okoztak csaldst, s szinte mindig a kedvemre tettek.
Az Eclipse az InteliiJ-hez hasonl tuds s hatkonysg eszkz. Mindkett
nagysgrendekkel az Emacs felett ll, ha Java-kd szerkesztsrl van sz. Lteznek
msIDE-k is ebben a kategriban, de nem trek ki rjuk, mert nincs kzvetlen ta
pasztalatom a mkdskrl.
Az, ami ezeket a fejlesztkrnyezeteket az Eracs-hoz hasonl eszkzk fl emeli,
a rendkvli sokoldalsg, ahogy a kdokat kezelhetjk bennk. Az InteiliJ-ben pl
dul egyetlen paranccsal kinyerheted egy osztly sosztlyt. Ezenkvl tnevezhetsz
vltozkat, kinyerhetsz tagfggvnyeket, rklst sszettell alakthatsz t - s ez
csak nhny a szmtalan nagyszer szolgltats kzl.
Ezekkel az eszkzkkel a kdszerkeszts tbb nem annyira sorokrl s karakte
rekrl szl, mint sszetett mveletekrl. Nem a kvetkezknt begpelend nhny
karakteren s soron kell trnd a fejed, hanem az eltted ll transzformcikon.
Rviden, a programozsi modell jelentsen klnbzik, s rendkvl hatkony.
Ennek a sokoldalsgnak persze megvan az ra. Az emltett fejlesztkrnyezetek hasz
nlatt idbe telik megtanulni, s a projektek belltsa sem megy gyorsan. Ezek az esz
kzk nem pehelyslyak, s a futsukhoz jelents szmtsi erforrsokat ignyelnek.
TEXTMATE
A TextMate sokoldal s pehelysly. Nem rendelkezik olyan csodlatos kpessgek
kel, mint az IntelliT vagy az Eclipse, hinyzik belle az Emacs hatkony Lisp-motorja
s knyvtra, s nem olyan gyors s knnyed, mint a v i. Msrszrl azonban egy
szeren megtanulhat a hasznlata, s a kezelse sztnsen elsajtthat.
n idnknt hasznlom a TextMate-et, klnsen akkor, ha vletlenl C++-kdot
kell rnom. Egy nagyobb C++-projekthez az Eracs-et vlasztanm, de mivel tbb
nyire csak apr feladatokat kell C++-ban vgrehajtanom, nem veszdm vele.
PROBLMAKVETS
Jelenleg a Pivotal Trackert hasznlom. Elegns s egyszeren hasznlhat rendszer,
amely jl illeszkedik az agilis/iteratv megkzeltshez, s gyors kommunikcit tesz
lehetv a dntshozk s a fejlesztk kztt. Nagyon elgedett vagyok vele.
A legkisebb projektekhez nha a Lighthouse-t vlasztom, mert nagyon gyors,
knnyen bellthat, s egyszeren hasznlhat. A hatkonysga azonban messze
nem mrhet a Trackerhez.
196 A FGGELK
Az is elfordul, hogy egyszeren egy wi kit hasznlok. A wikik bels projektekhez
tkletesen megfelelnek. Tetszleges smra be lehet lltani ket, gy nem knysze
rlsz egy adott eljrs vagy egy merev struktra alkalmazsra. A wikik knnyen
ttekinthetk s hasznlhatk.
Nha a legjobb problmakvet rendszer egy csomag krtya s egy tbla vagy fa
lijsg. A tblt fel lehet osztani olyan oszlopokra, mint
"
Tennivalk
"
,
"
Folyamatban
"
s
"
Ksz
"
, gy a fejlesztknek csak t kell helyeznik a krtykat egyik oszlopbl
a msikba, ahogy elrehaladnak a munkval. Valsznleg ez a legelterjedtebb prob
lmakvet rendszer, amelyet ma az agilis csapatok hasznlnak.
n azt javaslom az gyfeleimnek, hogy kezdjk egy olyan manulis rendszerrel,
mint a falijsg, mieltt bemhznnak egy problmakvet eszkz be. Ha a manulis
rendszert mr rutinosan tudjk hasznlni, elegend ismerettel fognak rendelkezni
ahhoz, hogy kivlasszk a megfelel eszkzt. Mg az is lehet, hogy az a legjobb dn
ts, ha maradnak a manulis rendszer hasznlata mellett.
A PROBLMK SZMA
A fejlesztcsapatoknak termszetesen szksgk van egy listra, amelyen az elvg
zend feladatok szerepelnek, belertve az jonnan megvalstand szolgltatsokat
s a feldertend programhibkat is. A listn brmely viszonylag mretesebb (5-12
fs) csapat esetben nhny tucat, legfeljebb pr szz elem lehet. Nem tbb ezer.
Ha tbb ezer programhibt kell felderteni, akkor valami gond van. Ha szolglta
tsok ezreit kell megvalstani, vagy feladatok ezreit kell elvgezni, szintn. A teendk
listjnak ltalnossgban viszonylag rvidnek s gy kezelhetnek kell lennie egy
olyan pehelysly eszkz segtsgve!, mint egy wiki, a Lighthouse vagy a Tracker.
Lteznek olyan kereskedelmi eszkzk, amelyek elg jnak tnnek. Nekem mg
nem volt szerenesm kzvetlen l dolgozni velk, de az gyfeleim kztt akadtak, akik
hasznltk ket. Nem vagyok ellene az ilyen eszkzknek, amg a teendlista rvid s
kezelhet. Ha viszont egy problmakvet eszkzt tbb ezer ttel kvetsre knysze
rtnk, akkor a
"
problmakvets
"
sz elveszti az rtelmt, s inkbb beszlhetnk
"
problmalerakrl
"
(ami gyakran olyan szagot is raszt, mint egy szemtlerak).
FOLYAMATOS BEPTS
Az utbbi idben a Jenkinst hasznlom motorknt a folyamatos beptshez, mert pe
helysly, egyszer, s a hasznlataszinte azonnal megtanulhat. Csak letltd, elind
tod, gyorsan elvgzel nhny egyszer belltst, s mr dolgozhatsz is. Nagyon klassz.
A folyamatos beptssei kapcsolatos filozfim egyszer: kapcsold ssze a forrs
kd-kezel rendszerrel. gy amikor csak valaki bejelentkeztet egy kdot, a rendszer
nmkden bepti, majd llapotjelentst kld a csapatnak.
ESZKZK 197
A csapatnak csak annyi a dolga, hogy mkdkpesen tartsa az ppen felptett
kdvltozatot Ha a felpts kudarcot vall,
"
le kell lltani a nyomdagpeket
"
, s a
csapatnak vszrtekezletet kell tartania, hogy gyorsan megoldja a problmt. Semmi
lyen krlmnyek kztt nem szabad hagyni, hogy a hiba egy egsz napig vagy mg
tovbb fennlljon.
A FITNESSE projekten minden fejlesztvel lefuttatom a folyamatos beptst vg
rehajt parancsfjlt, mieltt vglegestene egy kdot. A felpts kevesebb mint t
percet ignyel, ezrt a mvelet nem megterhel. Ha problmk merlnek fel, a fejlesz
tknek meg kell oldaniuk ket, mieltt vglegestik a kdot. gy az automatikus fel
pts ritkn vall kudarcot. A leggyakrabban a krnyezettel kapcsolatos okok miatt
kvetkezik be ilyesmi, mivel az automatikus felptst vgz rendszerem jelentsen
klnbzik a programozk fejlesztkrnyezettL
EGYSGTESZTEL ESZKZK
Minden nyelvnek megvan a maga kedvenc egysgtesztel eszkze. n a J avhoz a
JUNIT-ot, a Ruhy-hoz az RSPEC-et, a .N et-hez az NUNIT-ot, a Clojure-hoz a Midje-t,
a C-hez s a C++-hoz pedig a CPPUTEST-et vlasztom.
Nem szmt azonban, melyik egysgtesztel eszkz mellett dntesz, bizonyos
alapszolgltatsokkal mindegyiknek rendelkeznie kell:
l. Az eszkznek lehetv kell tennie a tesztek gyors s egyszer futtatst. Az, hogy
ezt IDE-bvtmnyeken vagy egyszer parancssori eszkzkn keresztl ri el,
lnyegtelen - az a fontos, hogy a fejlesztk brmikor, igny szerint lefuttathassk
a teszteket: Az ehhez szksges parancsnak pofonegyszernek kell lennie.
n a CPPUTEST-tesztjeimet pldul gy futtatom, hogy berom a command -M
parancsot a TextMate-be. Ezt a parancsot gy lltottam be, hogy futassa a
make file-omat, amely automatikusan lefuttatja a teszteket, s egy egyso
ros jelentst r ki rluk, ha minden teszt sikeresen lefutott. Az INTELLIJ a
JUNIT-ot s az RSPEC-et egyarnt tmogatja, gy csak annyit kell tennem,
hogy megnyomok egy gombot. Az NU NIT esetben a tesztgombot a RESHARPER
bvtmny biztostja.
2. Az eszkznek vilgos kpi jelzst kell adnia a sikerrl, illetve kudarcrl. Az
mindegy, hogy ezt egy grafikus zld svval vagy egy
"
Minden teszt teljesl
"
szveg konzolzenettel ri el. A lnyeg az, hogy gyorsan s egyrtelmen
meg tudd llaptani, hogy minden teszt sikeresen futott -e le. Ha ehhez egy
tbbsoros jelentst kell el olvasnod, vagy - ami mg rosszabb - kt fjl kime
nett kell sszehasonltanod, akkor ez a kvetelmny nem teljesl.
3. Az eszkznek vilgos kpi jelzst kell adnia az elrehaladsrL Amg meg
tudod llaptani, hogy minden rendben halad, s a tesztek nem akadtak meg
198 A FGGELK
vagy lltak-e le, addig nem szmt, hogy ezt egy grafikus folyamatsv vagy
pontok sorozata biztostja.
4. Az eszkznek meg kell akadlyoznia, hogy az egyes tesztesetek rintkezze
nek egymssal. A JUNIT ezt gy ri el, hogy minden tesztfggvnyhez j
pldnyt hoz ltre a tesztosztlybl, gy a tesztek nem kommuniklhatnak
egymssal pldnyvltozkon keresztl. Ms eszkzk vletlenszer sorrend
ben futtatjk a tesztfggvnyeket, gy azok nem tmaszkodhatnak a tesztek
sorrendjre. Nem szmt, hogy az eszkz milyen megoldst alkalmaz, a l
nyeg az, hogy a teszteket fggetlentse egymstl. Az egymstl fgg tesztek
olyan mly csapdt jelentenek, amelybe nem tancsos beleesni.
5. Az eszkznek gyerekjtkk kell tennie a tesztek megrst. A JUNIT ezt gy
ri el, hogy egy knyelmes API-t biztost a megerst lltsokhoz (assertion),
valamint visszatekintst (reflection) s Java-jellemzket alkalmaz, hogy meg
klnbztesse a tesztfggvnyeket a norml fggvnyektL Ez egy j fejlesz
tkrnyezetnek lehetv teszi, hogy nmkden azonostsa valamennyi
tesztedet, ami szksgtelenn teszi a tesztcsomagok sszedrtozst, s meg
akadlyozza a hibs tesztlistk ltrehozst.
SSZETEV-TESZTEL ESZKZK
Ezek az eszkzk az sszetevk tesztelsre valk az API szintjn. A feladatuk az,
hogy meggyzdjenek rla, hogy egy sszetev viselkedst olyan nyelven hatroztk
meg, amelyet az zleti elemzk s a minsgellenrk is megrtenek. Valjban az az
idelis, ha az zleti elemzk s a minsgellenrk az eszkz segtsgvel meg tudjk
rni ezt a meghatrozst.
A
"
KSZ
"
FOGALMNAK MEGHATROZSA
Elssorban sszetev-tesztel eszkzk segtsgvel hatrozzuk meg, hogy mit is je
lent a
"
ksz
"
. Ha az zleti elemzk s a minsgellenrk kzsen dolgoznak ki egy
lerst, amely meghatrozza egy sszetev viselkedst, s ezt a lerst egy sikert vagy
kudarcot eredmnyez tesztcsomag formjban vgre lehet hajtani, akkor a ksz tel
jesen egyrtelm jelentst kap: azt, hogy
"
Minden teszt teljeslt
"
.
FITNESSE
A kedvenc sszetev-tesztel eszkzm a FITNESSE. A nagy rszt n rtam, s n
vagyok az els szm felhasznlja. Vagyis az n gyermekem.
A FIT N ESSE egy wiki alap rendszer, amelynek a segtsgvel az zleti elemzk s
a minsgellenrk nagyon egyszer, tblzatos formban rhatnak teszteket. Ezek
a tblzatok mind formjukat s cljukat tekintve hasonlak a Parnas-fle tblkhoz.
ESZKZK 199
A tesztek gyorsan sszellthatk csomagokk (suite), s a csomagok brmikor, igny
szerint lefuttathatk.
A FITNESSE Javban rdott, de brmilyen nyelv rendszert kpes tesztelni, mert
a httrben egy olyan tesztrendszerrel kommunikl, amely tetszleges nyelven meg
rhat. A tmogatott nyelvek kz tartozik a Java, a C#/.NET, a C, a C++, a Python,
a Ruby, a PHP, a Delphi s mg tbb ms nyelv.
A FITNESSE alapjt kt rendszer jelenti: a Fit s a Slim. A Fit szerzje Ward Cun
ningham; eredetileg ez a rendszer ihlette a FITNESSE-t s a hozz hasonl rendszere
ket. A Slim sokkal egyszerbb s hordozhat bb tesztrendszer, amely manapsg np
szer a FrTNESSE-felhasznlk krben.
EGYB ESZKZK
Az albbi eszkzk szintn sszetev-eszkzknek tekinthetk:
RobotFx: A RobotPx-et a Nokia mrnkei fejlesztik. A FIT N ESSE-hez hasonl
tblzatos formt hasznl, de nem wiki ala p, hanem
"
lapos
"
, az Excel vagy
egy msik hasonl programmal elksztett fjlokat hasznl. Az eszkzt
Python nyelven rtk, de megfelel hiadk segtsgvel brmilyen nyelv
rendszert kpes tesztelni.
Green Pepper: A Green Pepper kereskedelmi termk, amely sok hasonls
got mutat a FrTNESSE-szel, s a npszer Conf luence-wikin alapul.
Cucumber: A Cucumber egy sima szveges eszkz, amelyet egy Ruby-motor
hajt, de szmos klnbz platform tesztelsre kpes. A Cucumber nyelve
a npszer
"
ha adott-amikor-akkor
"
(Given/When/Then) stlust kveti.
JBehave: A JBehave hasonlt a Cucumberhez, s a Cucumber logikai szl
jnek tekinthet. Java nyelven rtk.
EGYTTMKDS-TESZTEL ESZKZK
Az sszetev-tesztel eszkzk sok egyttmkdsi teszthez is hasznlhatk, de nem
igazn alkalmasak azokhoz, amelyeket a felhasznli felleten keresztl kell vgre
hajtani. ltalban vve nem ajnlatos tl sok tesztet vgrehajtani a felhasznli fel
leten keresztl, mert a felhasznli fellet hrhedten vltozkony, ami az ilyen tesz
teket nagyon trkenny teszi.
Ezzel egytt vannak tesztek, amelyeket muszj a felhasznli felleten keresztl
vgrehajtani - elssorban a magt a felhasznli felletet vizsgl teszteket, de ezen
kvl bizonyos egymshoz illeszked teszteknek is vgig kell vizsglniuk az egsz
rendszert, belertve a felhasznli felletet is.
A felhasznli fellet tesztelshez n a Seleniumot s a Watirt hasznlom a leg
szvesebben.
200 A FGGELK
UML/MDA
A 90-es vek elejn nagyon remnykedtem benne, hogy a CASE-eszkzket gyrt
iparg radiklis vltozst hoz a szoftverfejlesztk munkamdszerben. Ahogy elre
tekintettem azokban a mmort napokban, azt lttam magam eltt, hogy mindenki
diagramok segtsgvel fog kdoini egy magasabb elvonatkoztatsi szinten, s a sz
veges kd a mlt kdbe vsz.
Istenem, mekkort tvedtem! Nem csak hogy nem vlt valra ez az lom, de min
den ebbe az irnyba mutat prblkozs sznalmas kudarcba fulladt. Vannak ugyan
eszkzk s rendszerek a piacon, amelyekben megvan a lehetsg, de egyszeren kp
telenek igazn valra vltani az lmot, s gy tnik, alig akad valaki, aki hajland
lenne hasznlni ket.
Az lom az volt, hogy a szoftverfejlesztk maguk mgtt hagyhatjk a szveges
kddal val pepecselst, s a diagramok magasabb szint nyelvn alkothatnak rend
szerekeL Az lom szerint lehet, hogy egyltaln nem lenne szksg programozkra.
A szaftvertervezk egsz rendszereket kszthetnnek UML-diagramokbl, amelye
ket nagy tuds, hideg, a mezei programozk szmra utlatos motorok alaktannak
vgrehajthat kdd. Ez volt a modelvezrelt architektra (MDA, Model Driven
Architecture) nagy lma.
Ennek a csods lomnak azonban sajnos van egy aprcska hibja. Az MDA azt
felttelezi, hogy a problma a kdban rejlik. Csakhogy nem a kd a problma. Soha
nem is volt az. A problmt a rszletek jelentik.
A RSZLETEK
Mi, programozk, a rszletekkel foglalkozunk. Ez a munknk. Rendszerek viselke
dst hatrozzuk meg a legaprbb rszletekbe menen. Ehhez trtnetesen szveges
nyelveket ( kdot) hasznlunk, mert a szveges nyelvek rendkvl knyelmesek (ve
gyk pldul az angolt).
Mifle rszletekre kell gyelnnk?
Tudod, mi a klnbsg a \n s a \r karakter kztt? Az els, a \n, soremelst ( line
feed) jelent. A msodik, a \r, kocsivisszt (carriage return). De mi az a kocsi (carriage)?
A 60-as vekben s a 70-es vek elejn a szmtgpek egyik szokvnyos kimeneti
eszkze a telexgp volt. A legszlesebb krben az ASR-33-ast2 hasznltk Ez a ksz
lk egy nyomtatfejbl llt, amely msodpercenknt tz karaktert tudott kinyomtatni.
A nyomtatfejet egy apr henger alkotta, amelyen a dombor karakterek sorakoztak.
A henger gy fordult el s emelkedett meg, hogy a megfelel karakter kerljn szembe
a paprral, majd egy apr kalapcs hozzttte a hengert a paprhoz. A henger s
2 http://en.wikipedia.org/wiki/ASR-33_Teletype
ESZKZK 201
a papr kztt egy tintval titatott szalag futott, gy a kalapcs egy karakter form
jban tintt vitt t a paprra.
A nyomtatfej egy kocsin lt. A kocsi minden karakter kinyomtatsakor egy hely
lyel jobbra csszott, magval cipel ve a nyomtatfejet. Amikor a kocsi elrt a 72 karak
terbl ll sor vgre, kifejezett utastst kellett neki adni a kocsivissza karakterekkel
(\r= O x OD), hogy lljon vissza a sor elejre, klnben a nyomtatfej a tovbbi ka
raktereket is a 72. oszlopba rta, ami gy ronda fekete ngyszgg vltozott.
Ez termszetesen nem volt elg. A kocsi visszalltsa nem grdtette tovbb a pa
prt a kvetkez sorba. Ha visszalltottad a kocsit, de nem adtad ki a soremels pa
rancst (\n = O x OA), akkor az eszkz az elz sor tetejre nyomtatta az jat.
AzASR-33 telexgp esetben teht a sorvgi parancs a
"
\r\n
"
volt. gyelni kellett
a helyes parancsra, mert a kocsinak egytized msodpercnl tovbb tarthatott, amg
visszallt a sor elejre, gy ha azt az utastst adtad ki, hogy
"
\n\r
"
, akkor a kvetkez
karakter j esllyel a kocsi mozgsa kzben nyomdott a paprra, egy elmosdott ka
raktert eredmnyezve a sor kzepn. Ezrt aztn a sorvgi utastst a biztonsg ked
vrt gyakran egy-kt trlkarakterreP (rubout) prnztuk ki (O x FF).
Ahogy a 70-es vekben a telexgpek lassan kikaptak a hasznlatbl, a UNIX-hoz
hasonl opercis rendszerek a
"
sor vge
"
utastst egyszeren
"
\n
"
-re rvidtettk.
Ms opercis rendszerek - pldul a DOS - ugyanakkor megtartottk a hagyom
nyos
"
\r\n
"
parancsot.
Mikor tallkoztl utoljra olyan szvegfjlokkal, amelyek nem a
"
megfelel
"
sor
vge parancsot adtk ki? n legalbb vente egyszer belefutok egy ilyenbe. Kt azonos
tartalm forrsfjl nem egyezik, s ms-ms ellenrzsszeget eredmnyez, mert
mskpp jellik a sor vgt. A szvegszerkesztk nem tudjk helyesen, a szavak vgn
megtrni a sorokat, vagy ketts szkzket szrnak be a szvegbe, mert a sorvgek
"
helytelenek
"
. Az res sorokra nem szmt prograrak sszeomlanak, mert a
"
\r\n
"
utastst kt sornak rtelmezik. Egyes prograrak felismerik a
"
\r\n
"
parancsot, de
a
"
\n\r
"
-t nem. s mg folytathatnm.
Ezt rtem rszletek alatt. Prbld csak kdba nteni a sorvgek tisztzsra szol
gl szrny logikt UML-ben!
NINCS REMNY, NINCS VLTOZS
Az MDA-mozgalom azzal a remnnyel kecsegtetett, hogy a rszletek jelents rszt
kikszblhetjk, ha kd helyett diagramokat hasznlunk. Ez eleddig hi brndnak
3 A trlkaraktereknek nagy hasznt vettk a lyukszalagok szerkesztsekor. A szably az volt, hogy
a trlkaraktereket figyelmen kvl kell hagyni. A kd juk, a O x FF, azt jelentette, hogy a szalag
adott sorban minden pontot ki kell lyukasztani. Ebbl kvetkezen tlyukasztssal brmely karak
tert trlkarakterr lehetett alaktani. Ha teht hibt kvettl el a programod bersakor, csak egy
"visszt
"
kellett nyomnod a lyukaszts utn, majd "trlst'' (rubout), s folytathattad a gpelst.
202 A FGGELK
bizonyult. Kiderlt, hogy egyszeren nincs annyi fls rszlet a kd ba gyazva, amit
kpekkel ki lehetne kszblni. St mi tbb, maguk a kpek is tartalmaznak esetleges
rszleteket. A kpeknek sajt nyelvtanuk, mondattanuk, szablyaik s megktseik
vannak, gy aztn a rszleteket illet klnbsgek vgeredmnyben elhanyagolhatak.
Az MDA remnysugara az volt, hogy a diagramok magasabb elvonatkoztatsi
szinten mkdhetnek a kdnl, ugyangy, ahogy a Java magasabb szint az assemb
lernL Ez is tvedsnek bizonyult. Az elvontsg szintjben jelentkez klnbsg a leg
jobb esetben is csak aprcska.
Vgezetl, tegyk fel, hogy egy nap valaki tnyleg feltall egy valban hasznos di
agramnyelvet. A diagramokat azonban nem szoftverptszek, hanem programozk
fogjk megrajzolni. Csupn annyi trtnik, hogy a diagramok vlnak az j kdd.
Programozkra ugyangy szksg lesz, hogy megrajzolk a kdot, mert a kd vgs
soron a rszletekrl szl, a rszletek pedig a programozkra tartoznak.
SSZEFOGLALS
Ma mr lnyegesen tbb s hatkonyabb szaftverfejleszt eszkz ll rendelkezsre,
mint amikor programozni kezdtem. Az n jelenlegi eszkztramban csak egy apr
tredke tallhat meg a teljes knlatnak A forrskd-kezelshez a g i t-et, a prob
lmakvetshez a Trackert, a folyamatos beptshez a Jenkinst, IDE-knt az IntelliJ-t,
a tesztelshez az XUnit-ot, az sszetev-tesztelshez pedig a FITNESSE-t hasznlom.
A szmtgpem egy Macbook Pro, 2,8 GHz-es Intel Core i7 processzorral, 17 h
velykes matt kpernyvel, 8 GB memrival, 512 GB-os SSD-meghajtval, s kt ki
egszt manitorraL
TRGYMUTAT
20 ra 39
A
acceptance test 128
agilis programozs 93
alkot energia 82, 142
alkudozs 48
alumniumfrccsnt gp 168
alvs 81, 141
ant release 96
ASR-33 201
automatizls 119
automatizlt egysgteszt 95
automatizlt
minsgellenrzs 36
automatizlt tesztek 116

llapottmenet-diagram 40
llsinterj 178
llrtekezlet 138
ramlsi zna 79
ramlat 79
teresztkpessgi teszt 132
tlagos sebessg 175
B
Basic 94
btorsg 97
becsls 113, 147, 149, 150
becslsi hibk 157
bejelentkeztets 191
belertett
ktelezettsgvllals 151
bemenet 142
bemutat 139
biciklizs 142
bizonyossg 96, 149
bizonytalansg 151, 153
bizonytalansgi elv 113
bocsnatkrs 35
Boehm 155
204
bogrvadszat 127
Brtnk s srknyok 140
boundary case 120, 128
Bowling Game 41
branching 193
B-terv 87, 88
buffer 83
build 103
c
cl 138
cldtum 87
cerebeHum 171
check in 191
check out 192
Chicago Laser Systems 165
CI 125
ciklusid 94
Clear Communications 160
component test 130
continuous
integration 125, 129
Conway 105
corner case 120, 128
CPPUTest 198
Cucumber 89, 120, 131, 200
cuke4duke 120
cvs 192
Cs
csapat 174
csapatjtkos 51, 91
csapattagok idelis szma 174
cserkszek szablya 37
D
debugger 83
derlt tesztesetek 120, 128
DFD40
diagramok 201
Digi-Camp I 178
diploma 178
ddzs 105
dokumentci 97
dntsi tbla 40
Dungeons & Dragons 140
dzsiu-dzsicu 107
E
Eclipse 196
ECP-18 180
ED-402 112
edzterem 105
egyetem 178
egyetrts 156
egyetlen felelssgi
kr elve 124
egyidej frissts 84
egyidej mdosts 192
egymstl fgg tesztek 199
egysgteszt 95, 129
egysgtesztek 36, 123, 130
egysgtesztel eszkzk 198
egyttmkds 91, 165
egyttmkdsi tesztek 131
egyttmkds-tesztel eszk-
zk 200
elektronikus recepcis 65
elfogadsi teszt 129
elfogadsi tesztek 89, 115, 119,
120, 123, 128
elkerls 143
elktelezettsg hinynak
felismerse 68
ellenttes szerepek 48
elrehalads 198
eloszls 150
elosztott forrskd-kezel
rendszerek 193
elsbbsg-megfordts 145
elvrsok 70
elvek feladsa 63
elvek megrzse 162
Emacs 195
emberek 167
TRGYMUTAT
ER 65 formagyakorlat 105 harmadik fl 57
erbeoszts 86 forrskd-kezels 191 hromvaricis analzis 152
erforrsok 176 friss diploms hromvaricis becsls 157
eszkzk 191 informatikus 177 hatreset 120, 128
exploratory testing 128 frissts 192 hatrid 87
extrm programozs 93 fggetlen telepthetsg 148 hatridk 161
fgggy-vezrelt
hazafel 86

fejleszts 104
HDD 104
fuvarosok 45
helyes felpts 98
jszakai rutin 33
fuvarosok szakszervezete 82
hinyos teljests 88
letjtk 105 hibaarny-cskkens 96
rs 175
G
hiba-befecskendezsi
rtekezlet 136 arny 96
s-kapu 178
Game of Life 105
hibarzkenysg 76
gpels 76
hibk 35
git 193, 194
hibakeress 82, 85, 167
F
Gdrk szablya 144
hibakeressre
GOF40
fordtott id 85
fradtsg 77, 86
gombost 192
hibaszzalk 35
fegyelem 72
gondterhelt kd 78
HLT 181
fegyelmezett
Gorilla Mart 56
hs 62
ktelezettsgvllals 71
gorombasg 81
huszonkettedik hatvny 103
fejlesztkrnyezet 195 GOTO 95
fejlesztkrnyezetek 19 5
grafikus fellet 131
fejleszt szerepe 121
grafikus felletek 124
felelssg 32, 34
grafikus felleten keresztli
fl ember 174
tesztels 125
IBM System/7 168
felpts 37, 98
Green Pepper 200
IDE 195
felhasznli fellet
GUI 131
idbeoszts 135
tesztelse 200
GUI-tesztek 125
iddobozols 142
feltr teszt 128
GUI-tesztel krnyezet 131
igen 65,71
fellet 124
igen ra 55
Fit 200
Gy
inasok 185
FitNesse 36, 89, 103, 120, integration test 131
131, 199
gyakorls 41, 101
IntelliJ 196
f low 79
gyakorlatok 41
iPhone 56
fg 194
gyakorl orvos 183
izomfkusz 141
fokozatos bepts 40
gyakorlprogram 102
izzadsgbl felhalmozott
fkuszmanna 140
gyakornokok 185
tke 160
folyamatbra 40
gyakornokoskods 183
folyamatos bepts 125, 129,
197
H
folyamatos mdostgats 38
ri vlsg 81
folyamatsv 199 hajltgats 38
fontossgi sorrend 176 hajnali hromkor rt kd 77
J
fordtsi id 103 Hammock-Driven
fordtsi-tesztdsi ciklus 104 Development 104 JBehave 131, 200
fordulsi id 103 hangposta 65, 66 Jenkins 197
fordulpont 144 happy path 120, 128 JUnit 198
TRGYMUTAT 205
K
Kanban 40
kapkods 87, 163
kr 34
karrier 39
kata 41, 105
Kent Beck 94
kereszthivatkozs-elllt 166
kss 87
ksi pontosts 120
ksi tisztzatlansg 114
ksz 88, 199
ksz fogalma 116
kszsgfejleszt
gyakorlatok 101
kezd programozk 91
kziknyv 97
kzi tesztels 119
kigs 39
kijelentkeztets 192
kikapcsols 86
kimenet 142
kisagy 171
kivtelek 120
kocsi 202
kocsivissza 201
kclelgaztats 193
kdols 75
kdolk ddzsja 105
kdpldk 97
kd-jrahasznosts 58
koffein 141
kommunikci 118, 163
konszenzus 155
knyrtelen jratervezs 37
korai pontosts 113
koreogrfiateszt 131
krkrs tmeneti tr 83
korltok 73
krnyezeti ktrtelmsg 114
ktelezettsgvllals 67, 149,
161
ktelezettsgvllals nyelve 74
kvetelmnyek lll
kvetelmnyler 128
kzs cl 48
kzs munka 42
kzs tulajdon 170
kzponti kdtr 194
206
kreativits 142
kreatv tlts 82
kreatv tudatalatti 86
kudarc 95
L
late ambiguity 114
ltkr 108
lellts 181
Lean 40
lefagys 82
lehetetlen kd 61
lehet legjobb megolds 48
le nem fordthatsg 95
Lighthouse 196
Lindstrom 156
logikai algebra 179
Logo 94
M
M365 112, 166
magabiztossg 76
magnleti problmk 79
magasabb szint tesztek 129
mgikus szmok 58
mgnesszalagok 189
magyarzat 50
majdnem biztos 96
manna 140
manulis feltr tesztek 132
manulis tesztels 119
maraton 86
MDA201
medikus 183
megdicsls 62
megfelel fellet 124
megkzeltsek 40
meglepets 163
megoldstartomny 42
megszakts 81
megszaktsvezrl 84
mm 186
merciless refactoring 37
mester 174
mesterek 185
mesterember 186
mesterfokozat 178
mestersgbeli tuds 186
metafizika 140
Midje 198
Mirt? 50
mi s k 43
mindennapi feladatok 41
minsgellenrzs 35, 128
mocsr 145
Model Driven
Architecture 201
modelvezrelt
architektra 201
mdszertanok 40
Motorola Pulsar 166
mkds 34, 36
munkaad43
munkaadk 167
munkafzis-rtkels 139
munkafzis-tervezsi
rtekezlet 138
munkamorl 38
Murphy trvnye 151
mtasztall59
N
nagy szmok trvnye 157
napirend 138
naplzenetek 83
negatv utas tesztesetek 120,
128
Ngyek Bandja 40
nem 47
nma rendezs 157
nemet mondani 47
nem teljesl
egysgteszt 95
nvleges becsls 153
New Age 140
nzeteltrs 139
ni programoz 91
NUnit 198
nylt forrs 108
nylt forrs eszkzk 191
nyoms 159
nyoms elkerlse 161
nyoms kezelse 162
nyomaszt gondok 78
nyomdagp 170
TRGYMUTAT
o Planning Poker 156 s
Pomodoro-technika 142
objektumkzpont
pontosts 113
sajt kd 169
tervezs 40
pont per ht 175
Santana 104
optimlis mkds 167
POSA40
sarokeset 120, 128
optimista becsls 152, 157
precizits 113
Serum 40,93
optimista zrols 192
premature precision 113
sebessg 104, 175
orvos 183 sebsz 159
oszlopdiagram 153
Prime Factars 41
segtsg 89, 90, 163
Outboard Mari ne Corp 168
prmtnyezk 41
segtsgnyjts 81
priorits 176
Selenium 89, 120, 131, 200

priority inversion 143
siker 95
prbafrs 128
sikertelen tesztek 125
nbizalom 76
prblkozs 53
Single Responsibility
nmkd egysgtesztek 36
prblkozni 71, 152
Principle 124
sszeszokott csapat 174
problmk szma 197
Slim 200
sszetev-elfogadsi
profzmus 32
SOLID 40
teszt 130
programhibk 128
sor 84
sszetevtesztek 130, 131
programozsi kata 106
sor vge 202
sszetev-tesztel
programozpr 82
SQINT 102
eszkzk 199
projektgazda 176
SRP 124
sszetev-tesztel
projektgazda
standard eltrs 153
krnyezet 131
dilemmja 176
Structured Analysis 40
sszpontosts 76
Structured Design 40
Q
struktra 37
p
strukturlt analzis 40
QA 35,127
strukturlt
plyzati felhvs 56
Quality Assurance 127
programozs 40
pnik 163
queue 84
strukturlt tervezs 40
pr 163
Subversion 192, 193
paradicsorak 142
SVN 192
prhuzamosan szerkesztett R
System/7 168
forrsfjlok 192
randori 107
prhuzamosan tbb
projekt 176
Rational127
Sz
prmunka 170
remny 87
pros
rendszertesztek 132
szabadid 39
programozs 40, 80, 170
repl ujjak 155
szakmai elmenetel 39
passzv-aggresszv
Resharper 198
szakmai elvek 63, 163
viselkeds 49, 54, 122
rszletek 201
szakmai etika 90
PDP-8 /I 102
rezidenskpzs 183
szakmai gyakorlat 183, 184
PERT 152
Rich Hickey 104
szakmai nzeteltrs 139
pesszimista
robot framework 120
szakmai tmutats 178
becsls 153, 157
RobotFx 200
szmll 83
pesszimista zrols 192 RobotFX89
szleskr Delphi 155, 156
Petri-hl 40 Rose 127
szemlyes kapcsolatok 167
ping-pong 107 rvidzrlat 81 szemthalom 144
piros-zld- rspec 198 szerkeszt 195
jratervezs 79, 103 ruhout202 szerkezeti diagram 40
Pivotal Tracker 196 rugalmassg 37 sztszrtsg 77
TRGYMUTAT 207
sznes gombostk 192
szoftver mkdse 34
szrs 153
T
tallgats 149, 150
tants 42
tanuls 38
tapasztaltabb
programozk 91
tartomny 42
tvozs 137
TDD 36, 85, 93, 129
tekejtk 41, 105
telexgp 201
teljestmnyteszt 132
Teradyne 32
terminl 83
tervezsi elvek 40
tervezsi mintk 40
tervezpker 156
Test Oriven Development 36,
85,93,129
testedzs 142
tesztautomatizlsi
piramis 129
tesztek 38
tesztek automatizlsa 36
tesztek fggetlentse 199
tesztek megvitatsa 122
tesztels 12 7
tesztdsi stratgia 127
tesztlefedettsg 36
tesztnyelv 89
tesztvezrelt fejleszts 36, 40,
85,93,95,98,129
tesztvezrelt fejleszts hrom
trvnye 95
tt 50
TextMate 196
The Bowling Game 105
The Rule ofHoles 144
tipikus projektkirs 56
tisztasg megrzse 162
tisztzatlansg 114
tbbletmunka 120
trlkarakter 202
tovbbkpzs 38
tulajdonjog 170
tlra 88
u
UML40, 201
unhappy path 120
unit test 129
update 192
utlag megrt tesztek 98

jratltds 141
tmutats 91

zleti szablyok 130
zletkeres 57
v
vakon gpels 76
vakvgny 144
vllalati forrskd-kezel
rendszer 191
valdi ktelezettsg
vllals 68
valdi lefedettsg 130
vals idej szmlz-
rendszer 45
valsznlsg-eloszls 150
valsznsgszmts 153
vltozatkvet rendszer 191
vrakozsi sor 84
velocity 175
vszcseng 70
veszekeds 78
vszhelyzet 162
vezetkteszt 131
Vi 195
viselkedsler 128
visszautasts 137
viszonyt becsls 156
vita 139
Vzess 40
vizsglprogram 83
w
wasa 107
Waterfall40
Watir 131, 200
webszolgltats 57
widebaud Delphi 155
wiki197
x
XP 40,93
z
zrols 192
zene 80
Zna 79
zuhany 86
Zs
zskutca 144

Potrebbero piacerti anche