Planlægningsspil
planningp-planlægning adresserer to centrale spørgsmål i Soft .areudvikling: forudsigelse af, hvad der vil blive opnået inden forfaldsdatoen, og bestemmelse af, hvad der skal gøres næste. Der lægges vægt på at styre projektet – hvilket er ret ligetil – snarere end på nøjagtig forudsigelse af, hvad der vil være nødvendigt, og hvor lang tid det vil tage – hvilket er ret vanskeligt., Der er to vigtige planlægningstrin i XP, der adresserer disse to spørgsmål:
Release Planning er en praksis, hvor kunden præsenterer de ønskede funktioner til programmererne, og programmererne vurderer deres vanskeligheder. Med omkostningsestimaterne i hånden og med viden om vigtigheden af funktionerne udarbejder kunden en plan for projektet. Indledende udgivelsesplaner er nødvendigvis upræcise: hverken prioriteterne eller estimaterne er virkelig solide, og indtil holdet begynder at arbejde, ved vi ikke, hvor hurtigt de vil gå., Selv den første udgivelsesplan er imidlertid nøjagtig nok til beslutningstagning, og teamsp-hold reviderer udgivelsesplanen regelmæssigt.Iterationsplanlægning er den praksis, hvor holdet får retning hvert par uger. XP-teams bygger soft .are i to ugers “iterationer”, der leverer kørende nyttig soft .are i slutningen af hver iteration. Under Iterationsplanlægning præsenterer kunden de ønskede funktioner i de næste to uger. Programmørerne opdeler dem i opgaver og estimerer deres omkostninger (på et finere detaljeringsniveau end i Frigivelsesplanlægning)., Baseret på mængden af arbejde udført i den foregående iteration, holdet tilmelder sig, hvad der vil blive gennemført i den aktuelle iteration.
disse planlægningstrin er meget enkle, men alligevel giver de meget god information og fremragende styrekontrol i kundens hænder. Hvert par uger er mængden af fremskridt helt synlig. Der er ingen “halvfems procent udført” i .p: en funktionshistorie blev afsluttet, eller det var det ikke., Dette fokus på synlighed resulterer i et dejligt lille paradoks: på den ene side med så meget synlighed er kunden i stand til at annullere projektet, hvis fremskridt ikke er tilstrækkeligt. På den anden side er fremskridt så synlige, og evnen til at beslutte, hvad der skal gøres næste, er så komplet, at projectsp-projekter har en tendens til at levere mere af det, der er nødvendigt, med mindre pres og stress.
Kundetest
som en del af præsentationen af hver ønsket funktion definerer Customerp-kunden en eller flere automatiserede accepttest for at vise, at funktionen fungerer., Holdet bygger disse tests og bruger dem til at bevise for sig selv og for kunden, at funktionen er implementeret korrekt. Automatisering er vigtig, fordi man i tidens tryk springes over manuelle test. Det er som at slukke lyset, når natten bliver mørkest.
de bedste customerp-teams behandler deres kundetest på samme måde som de udfører programmerertest: når testen kører, holder teamet det kørende korrekt derefter. Det betyder, at systemet kun forbedrer, altid hak fremad, aldrig tilbageskridt.,
små udgivelser
XP-teams praktiserer små udgivelser på to vigtige måder:
først frigiver teamet kørende, testet soft .are, der leverer forretningsværdi valgt af kunden, hver iteration. Kunden kan bruge denne Soft .are til ethvert formål, hvad enten evaluering eller endda frigive til slutbrugere (stærkt anbefales). Det vigtigste aspekt er, at soft .aren er synlig og givet til kunden i slutningen af hver iteration. Dette holder alt åbent og håndgribeligt.
for det andet frigiver frequentlyp-hold ofte også til deres slutbrugere., Releasep-projectsebprojekter frigives så ofte som dagligt, i husprojekter månedligt eller oftere. Selv krympeindpakkede produkter sendes så ofte som kvartalsvis.
det kan synes umuligt at skabe gode versioner dette ofte, men XP hold over hele gør det hele tiden. Se Kontinuerlig Integration for mere om dette, og bemærk, at disse hyppige udgivelser holdes pålidelige af .ps besættelse af test, som beskrevet her i Kundetest og testdrevet udvikling.
simpelt Design
XP-teams bygger soft .are til et enkelt, men altid passende design., De starter simpelt, og gennem programmør test og design forbedring, de holder det på den måde. Et teamp-team holder designet nøjagtigt egnet til systemets aktuelle funktionalitet. Der er ingen spildt bevægelse, og soft .aren er altid klar til det næste.
Design i .p er ikke en engangs ting, eller en up-front ting, det er en all-the-time ting. Der er design trin i release planlægning og iteration planlægning, plus teams engagere sig i hurtige design sessioner og design revisioner gennem refactoring, gennem løbet af hele projektet., I en trinvis, iterativ proces som ekstrem programmering er godt design vigtigt. Derfor er der så meget fokus på design i løbet af hele udviklingen.
parprogrammering
Al produktionssoft .are i .p er bygget af to programmerere, der sidder side om side, på den samme maskine. Denne praksis sikrer, at al produktionskode gennemgås af mindst en anden programmør, og resulterer i bedre design, bedre test og bedre kode.
det kan virke ineffektivt at have to programmører, der udfører “en programmers job”, men det modsatte er sandt., Forskning i parprogrammering viser, at parring producerer bedre kode på omtrent samme tid som programmerere, der arbejder enkeltvis. Det er rigtigt: to hoveder er virkelig bedre end en!
nogle programmører gør indsigelse mod at parre programmering uden nogensinde at prøve det. Det kræver lidt øvelse at gøre det godt, og du skal gøre det godt i et par uger for at se resultaterne. Halvfems procent af programmører, der lærer parprogrammering, foretrækker det, så vi anbefaler det stærkt til alle hold.Parring ud over at give bedre kode og test tjener også til at kommunikere viden i hele teamet., Når par skifter, får alle fordelene ved alles specialiserede viden. Programmører lærer, deres færdigheder forbedres, de bliver mere værdifulde for holdet og for virksomheden. Parring, selv på egen hånd uden for .p, er en stor gevinst for alle.
testdrevet udvikling
ekstrem programmering er besat af feedback, og i Soft .areudvikling kræver god feedback god test. Top teamsp-teams praktiserer “test-driven development”, arbejder i meget korte cyklusser med at tilføje en test og derefter få det til at fungere., Næsten ubesværet producerer teams kode med næsten 100 procent testdækning, hvilket er et godt skridt fremad i de fleste butikker. (Hvis dine programmører allerede gør endnu mere sofistikerede test, mere magt til dig. Hold det op, det kan kun hjælpe!)
det er ikke nok at skrive test: du skal køre dem. Også her er ekstrem programmering ekstrem. Disse “programmørtest ” eller” enhedstest ” samles alle sammen, og hver gang en programmør frigiver en kode til arkivet (og par frigiver typisk to gange om dagen eller mere), skal hver eneste af programmerertestene køre korrekt., Et hundrede procent, hele tiden! Det betyder, at programmører får øjeblikkelig feedback på, hvordan de laver. Derudover giver disse tests uvurderlig støtte, da soft .aredesignet forbedres.
Designforbedring (Refactoring)
ekstrem programmering fokuserer på at levere forretningsværdi i hver iteration. For at opnå dette i løbet af hele projektet skal soft .aren være godt designet. Alternativet ville være at bremse og i sidste ende sidde fast., Så usesp bruger en proces med kontinuerlig designforbedring kaldet Refactoring, fra titlen på Martin fo .lers bog, “Refactoring: forbedring af designet af eksisterende kode”.
refactoring-processen fokuserer på fjernelse af duplikering (et sikkert tegn på dårlig design) og på at øge kodens “samhørighed”, mens “koblingen”sænkes. Høj samhørighed og lav kobling er blevet anerkendt som kendetegnende for veldesignet kode i mindst tredive år. Resultatet er, at XP-teams starter med et godt, Enkelt design og altid har et godt, Enkelt design til soft .aren., Dette lader dem opretholde deres udviklingshastighed og faktisk generelt øge hastigheden, når projektet går fremad.
Refactoring understøttes naturligvis stærkt af omfattende test for at være sikker på, at når designet udvikler sig, er intet brudt. Således er kundetestene og programmørtestene en kritisk aktiverende faktor. Practicesp-praksis understøtter hinanden: de er stærkere sammen end separat.
Kontinuerlig Integration
ekstreme programmeringshold holder systemet fuldt integreret på alle tidspunkter. Vi siger, at daglige builds er til wiimps: teamsp-hold bygger flere gange om dagen., (Et teamp-team på fyrre mennesker bygger mindst otte eller ti gange om dagen!)
fordelen ved denne praksis kan ses ved at tænke tilbage på projekter, du måske har hørt om (eller endda været en del af), hvor byggeprocessen var ugentlig eller sjældnere, og normalt førte til “integration helvede”, hvor alt brød og ingen vidste hvorfor.
sjælden integration fører til alvorlige problemer på et Soft .areprojekt., Først og fremmest, selvom integration er afgørende for at sende god arbejdskode, holdet praktiseres ikke på det, og ofte delegeres det til folk, der ikke er bekendt med hele systemet. For det andet er sjældent integreret kode ofte – jeg vil normalt sige – buggy kode. Problemer kryber ind på integrationstidspunktet, der ikke opdages af nogen af de test, der finder sted på et utilsigtet system. For det tredje, svag integrationsproces fører til lange kode fryser., Kode fryser betyder, at du har lange tidsperioder, hvor programmørerne kunne arbejde på vigtige shippable funktioner, men at disse funktioner skal holdes tilbage. Dette svækker din position på markedet, eller med dine slutbrugere.
kollektiv kode ejerskab
på et ekstremt Programmeringsprojekt kan ethvert par programmerere til enhver tid forbedre enhver kode. Det betyder, at al kode får gavn af mange menneskers opmærksomhed, hvilket øger kodekvaliteten og reducerer defekter., Der er også en anden vigtig fordel: når kode ejes af enkeltpersoner, kræves funktioner ofte på det forkerte sted, da en programmør opdager, at han har brug for en funktion et eller andet sted i kode, som han ikke ejer. Ejeren er for travlt til at gøre det, så programmøren sætter funktionen i sin egen kode, hvor den ikke hører hjemme. Dette fører til grim, svær at vedligeholde kode, fuld af duplikering og med lav (dårlig) samhørighed.kollektivt ejerskab kan være et problem, hvis folk arbejdede blindt på kode, de ikke forstod., Programmp undgår disse problemer gennem to nøgleteknikker: programmereren tester fangstfejl, og parprogrammering betyder, at den bedste måde at arbejde på ukendt kode er at parre med eksperten. Ud over at sikre gode ændringer, når det er nødvendigt, spreder denne praksis viden i hele teamet.
Kodningsstandard
XP – hold følger en fælles kodningsstandard, så al koden i systemet ser ud som om den var skrevet af et enkelt – meget kompetent-individ., Specifikationerne i standarden er ikke vigtige: det vigtige er, at hele koden ser bekendt ud til støtte for kollektivt ejerskab.
metafor
ekstreme programmeringshold udvikler en fælles vision om, hvordan programmet fungerer, som vi kalder “metaforen”. På sit bedste, den metafor er en simpel stemningsfuld beskrivelse af, hvordan programmet virker, f.eks. “dette program fungerer som en bikube af bier, går ud for pollen og bringe det tilbage til bikuben” som en beskrivelse af en agent-baseret informationssøgning system.
nogle gange opstår der ikke en tilstrækkelig poetisk metafor., Under alle omstændigheder, med eller uden levende billeder, XP hold anvende et fælles system af navne for at være sikker på, at alle forstår, hvordan systemet fungerer, og hvor de skal lede for at finde den funktionalitet, du leder efter, eller til at finde det rigtige sted at sætte den funktionalitet, du er ved at tilføje.
bæredygtigt tempo
ekstreme programmeringshold er i it på lang sigt. De arbejder hårdt og i et tempo, der kan opretholdes på ubestemt tid. Det betyder, at de arbejder overarbejde, når det er effektivt, og at de normalt arbejder på en sådan måde, at de maksimerer produktiviteten uge Ind og uge ud., Det er temmelig godt forstået i disse dage, at death march-projekter hverken er produktive eller producerer kvalitetssoft .are. XP hold er i det for at vinde, ikke at dø.
konklusion
ekstrem programmering er en disciplin inden for soft .areudvikling baseret på værdier af enkelhed, kommunikation, feedback og mod. Det virker ved at bringe hele holdet sammen i nærvær af enkle praksis, med nok feedback til at gøre det muligt for holdet at se, hvor de er, og at tune praksis til deres unikke situation.