Intro
1greatsoftwaredevelopment:Pleasingyourcustomer
TomsTrailsisgoingonline
Mostprojectshavetwomajorconcerns
TheBigBangapproachtodevelopment
Flashforward:twoweekslater
BigbangdevelopmentusuallyendsupinabigMESS
Greatsottwaredevelopmentis...
GettingtothegoalwithITERATION
Eachiterationisamini-project
EachiterationisQUALITYsoftware
ThecustomerWILLchangethingsup
Itsuptoyoutomakeadjustments
ButtherearesomeBIGproblems...
Iterationhandleschangeautomatically(wellsortot)
YoursoftwareisntcompleteuntilitsbeenRELEASED
ToolsforyourSoftwareDevelopmentToolbox
2gatheringrequirements:Knowingwhatthecustomerwants
OrionsOrbitsismodernizing
TalktoyourcustomertogetMOREinformation
Blueskywithyourcustomer
Sometimesyourblueskysessionlookslikethis...
FindoutwhatpeopleREALLYdo
YourrequirementsmustbeCUSTOMER-oriented
Developyourrequirementswithcustomerfeedback
UserstoriesdetinetheWHATofyourproject...
estimatesdefinetheWHEN
Cubicleconversation
PlayingPlanningPoker
Putassumptionsontrialfortheirlives
ABIGuserstoWestimateisaBADuserstoryestimate
Thegoalisconvergence
Therequirementtoestimateiterationcycle
Finally,werereadytoestimatethewholeproject
3projectplanning:Planningforsuccess
CustomerswanttheirsoftwareNOW!
Prioritizewiththecustomer
WeknowwhatsinMilestone1.0(well,maybe)
Ifthefeaturesdontfit,re-prioritize
Morepeoplesometimesmeansdiminishingreturns
Workyourwaytoareasonablemilestone1.0
Iterationsshouldbeshortandsweet
Comparingyourplantoreality
Velocityaccountsforoverheadinyourestimates
ProgrammersthinkinUTOPIANdays...
DevelopersthinkinREAL-WORLDdays...
Whenisyouriterationtoolong?
DealwithvelocityBEFOREyoubreakintoiterations
Timetomakeanevaluation
Managingcustomers
TheBigBoardonyourwall
Howtoruinyourteamslives
4userstoriesandtasks:Gettingtotherealwork
IntroducingiSwoon
Doyourtasksaddup?
Plotjusttheworkyouhaveleft
Addyourtaskstoyourboard
Startworkingonyourtasks
AtaskisonlyinprogresswhenitsINPROGRESS
WhatifImworkingontwothingsatonce?
Yourfirststandupmeeting...
Task1:CreatetheDateclass
Standupmeeting:Day5,endofWeek1...
Standupmeeting:Day2,Week2...
Weinterruptthischapter...
Youhavetotrackunplannedtasks
Unexpectedtasksraiseyourburn-dovmrate
Velocityhelps,but...
Wehavealottodo...
...butweknowEXAC,TLYwherewestand
VelocityExposed
5good-enoughdesign:Gettingitdonewithgreatdesign
iSwoonisinserioustrouble...
Thisdesignbreaksthesingleresponsibilityprinciple
Spottingmultipleresponsibiliesinyourdesign
Goingfrommultipleresponsibiliestoasingleresponsibility
YourdesignshouldobeytheSRP,butalsobeDRY...
Thepost-refactoringstandupmeeting...
Unplannedtasksarestilljusttasks
Partofyourtaskisthedemoitself
Wheneverythingscomplete,theiterationsdone
6versioncontrol:Defensivedevelopment
YouvegotanewcontractBeatBoxPro
AndnowtheGUIwork...
DemothenewBeatBoxforthecustomer
LetsstartwithVERSIONCONTROL
Firstsetupyourproject...
...thenyoucancheckcodeinandout.
Mostversioncontroltoolswilltryandsolveproblemsforyou
TheservertriestoMERGEyourchanges
Ifyoursoftwarecantmergethechanges,itissuesaconflict
Moreiterations,morestories...
Wehavemorethanoneversionofoursoftware...
Goodcommitmessagesmakefindingoldersoftwareeasier
NowyoucancheckoutVersion1.0
(Emergency)standupmeeting
Tagyourversions
Tags,branches,andtrunks,ohmy!
FixingVersion1.0...tbrrealthistime.
WehaveTWOcodebasesnow
WhenNOTtohranch...
TheZenofgoodbranching
Whatversioncontroldoes...
Versioncontrolcantmakesureyoucodeactuallyworks...
ToolsforyourSoftwareDevelopmentToolbox
6.5buildingyourcode:Inserttabaintoslotb...
Developersarentmindreaders
Buildingyourprojectinonestep
Ant:abuildtoolforJavaprojects
Projects,properties,targets,tasks
Goodbuildscripts...
GoodbuildscriptsgoBEYONDthebasics
Yourbuildscriptiscode,too
Newdeveloper,taketwo
ToolsforyourSoftwareDevelopmentToolbox
7testingandcontinuousintegration:Thingsfallapart
ThingswillALWAYSgowrong...
Therearethreewaystolookatyoursystem...
Black-boxtestingfocusesonINPUTandOUTPUT
Grey-boxtestinggetsyouCLOSERtothecode
White-boxtestingusesinsideknowledge
TestingEVERYTHINGwithonestep
Automateyourtestswithatestingframework
Useyourframeworktorunyourtests
AtthewheelofCIwithCruiseControl
Testingguaranteesthingswillwork..,right?
TestingallyourcodemeanstestingEVERYBRANCH
Useacoveragereporttoseewhatscovered
Gettinggoodcoverageisntalwayseasy...
WhatCMdoes...
ToolsforyourSoftwareDevelopmentToolbox
8test-drivendevelopment:Holdingyourcodeaccountable
TestFIRST,notlast
SoweregoingtotestFIRST...
Welcometotest-drivendevelopment
Yourfirsttest...
...failsmiserably.
GetyourteststoGREEN
Red,green,refactor...
InTDD,testsDRIVEyourimplementation
Completingataskmeansyouvegotallthetestsyouneed,andtheyallpass
Whenyourtestspass,moveon!
Simplicitymeansavoidingdependencies
Alwayswritetestablecode
Whenthingsgethardtotest,examineyourdesign
Thestrategypatternprovidesformuhipleimp!ementationsofasingleinterface
Keepyourtestcodewithyourtests
Testingproducesbettercode
Moretestsalwaysmeanslotsmorecode
Strategypatterns,loosecouplings,objectstandins...
Weneedlotsofdifferent,butsimilar,objects
Whatifwegeneratedobjects?
Amockobjectstandsinforrealobjects-
Mockobjectsareworkingobjectstand-ins
Goodsoftwareistestable...
Itsnoteasybeingreen...
Adayinthelifeofatest-drivendeveloper-..
ToolsforyourSoftwareDevelopmentToolbox
9endinganiteration:Itsallcomingtogether...
Youriterationisjustaboutcomplete...
...butthereslotsleftyoucoulddo
SystemtestingMUSTbedone...
...butWHOdoessystemtesting?
Systemtestingdependsonacompletesystemtotest
GoodsystemtestingrequiresTWOiterationcycles
Moreiterationsmeansmoreproblems
Top10TraitsofEffectiveSystemTesting
Thelife(anddeath)ofabug
Soyoufoundahug....
Anatomyofabugreport
ButtheresstillplentyleftyouCOULDdo...
Timefortheiterationreview
Someiterationreviewquestions
AGENERALprioritylistforgettingEXTRAthingsdone
ToolsforyourSoftwareDevelopmentToolbox
10thenextiteration:/fitaintbroke...youstillbetterfixit
Whatisworkingsoftware?
Youneedtoplanforthenextiteration
Velocityaccountsfor..,theREALWORLD
AnditsSTILLaboutthecustomer
SomeoneelsessoftwareisSTILLjustsoftware
Customerapproval?Check!
Testingyourcode
Houston,wereallydohaveaproblem...
TrustNOONE
Itdoesntmatterwhowrotethecode.
IfitsinYOURsoftware,itsYOURresponsibility.
Youwithoutyourprocess
Youwithyourprocess
11bugs:Squashingbugslikeapro
PreviouslyonIteration2
First,youvegottotalktothecustomer
Priorityone:getthingsbuildable
Wecouldfixcode...
...butweneedtofixfunctionality
Figureoutwhatfunctionalityworks
NOWyouknowwhatsnotworking
Whatwouldyoudo?
Spiketesttoestimate
Whatdothespiketestresultstellyou?
Yourteamsgutfeelmatters
Giveyourcustomerthebugfixestimate
Thingsarelookinggood...
...andyoufinishtheiterationsuccessfully!
ANDthecustomerishappy
ToolstbryourSoftwareDevelopmentToolbox
12therealworld:Havingaprocessinlife
Pinningdownasoftwaredevelopmentprocess
Agoodprocessdeliversgoodsoftware
Formalattirerequired...
Someadditionalresources...
Moreknowledge==betterprocess
ToolsforyourSoftwareDevelopmentToolbox
Appendix1leftovers
Appendix2techniquesandprinciples