Embrace Change! Note to programmers Extreme programming Even programmers can be whole people in the real world. Extreme Programming is an opportunity to test yourself, to be yourself, to realize that maybe you ve been fine all along and just hanging with the wrong crowd. - Kent Beck Martin Karlsson marka@itn.liu.se K7522 011 36 34 63 07-03-19 Martin Karlsson - XP 2 Vad är Extreme Programming XP är ett påhitt av Kent Beck m.fl., men det är Beck som brukar få beröm eller bära fårahuvudet. XP är en iterativ lättviktsmetod för små till mellanstora projektteam som utvecklar mjuk-vara som antingen är vagt specificerad eller där förutsättningarna kan ändras utan förvarning XP är sunt förnuft Varför heter det då extrem programmering? Extreme Programming? XP tar det sunda förnuftet och drar det till sin spets. XP lovar två saker Att programmerarna varje dag ska få hålla på med något de anser vara meningsfullt. Att de ska slippa bemöta otäcka situationer ensamma och att de får ta besluten som de kan ta bäst själva. Att kunden och ledningen får ut mesta möjliga värde ur varje programmeringsvecka. Att kunden och ledningen får se resultat under utvecklingens gång och att de ska kunna ändra projektets riktning när det behövs. 07-03-19 Martin Karlsson - XP 3 07-03-19 Martin Karlsson - XP 4 Fyra basaktiviteter 12 Practices / sedvanor Designa Testa Koda Lyssna Om kodinspektion är bra, låt oss kodinspektera hela tiden. (Parprogrammering) Om testning är bra, låt oss testa hela tiden (enhetstestning, acceptanstestning med kund) Om designstrategier är bra, låt oss göra det på daglig bas (omfaktorisering) Om enkelhet är bra, låt oss göra den enklaste design som går (enkel design) Om arkitektur är viktigt, låt alla tillsammans definiera och omarbeta arkitekturen (systemmetafor, kollektivt kodägande, kodstandard) Om integrationstest är bra, låt oss integrera och testa varje dag (kontinuerlig integration) Om korta iterationer är bra, så gör vi dem rejält korta (Planeringsspelet, kort releasecykel). Om team-motivation är bra, låt oss skapa det (40-timmarsvecka) 07-03-19 Martin Karlsson - XP 5 07-03-19 Martin Karlsson - XP 6 1
Extreme Programming? Vad är då nytt med XP? XP tar alla dessa sedvanor under sitt paraply, och utelämnar ingen XP ser till att sedvanorna används till sin spets XP ser till att sedvanorna stöder varandra Extreme Programming? XP skiljer sig från andra metoder för Dess tidiga, konkreta och kontinuerliga feedback från korta cykler Dess inkrementella, iterativa approach som snabbt kommer upp med en grundläggande utvecklingsplan Dess förmåga att flexibelt schemalägga funktionalitetsimplementation som motsvarar kundens behov. 07-03-19 Martin Karlsson - XP 7 07-03-19 Martin Karlsson - XP 8 Extreme Programming? Cost of Change Dess tillit till automatiska test skrivna av programmerare och kunder för att övervaka projektets framsteg. Dess tillit till oral kommunikation, test och källkod för att kommunicera projektets mål. Dess tillit till det nära samarbetet mellan vanliga programmerare. Dess tillit till vanliga sedvanor inom systemutveckling Dessa förhållanden bidrar till att vi kan platta till en exponentiella tillväxten på förändringskostnaden. Cost Time Cost Time 07-03-19 Martin Karlsson - XP 9 07-03-19 Martin Karlsson - XP 10 Risker Det grundläggande problemet inom mjukvaruutveckling är risker. Exempel på risker: Försening Nedläggning Bäst-före-datum passeras Buggar Missförstådd kund Ändrad marknad Feature-false Hat från utvecklarna De fyra variablerna De kontrollvariabler, resurser, som finns i ett utvecklingsprojekt är följande: Kostnad Tid Kvalitet Omfattning 07-03-19 Martin Karlsson - XP 11 07-03-19 Martin Karlsson - XP 12 2
De fyra (fem) värdena Kommunikation A little Consideration, a little Thought for Others, makes all the difference. - Eeyore Enkelhet Pooh hasn't much Brain, but he never comes to any harm. He does silly things and they turn out right. - Piglet Feedback Well, either a tail is or isn't there. You can't make a mistake about it. And yours isn't there! - Pooh Mod It is hard to be brave, when you're only a Very Small Animal. - Piglet R e s p e k t Grundläggande principer Konkret och snabb feedback Förutsätt enkelhet Stegvis förändring Satsa på kvalitet Anamma förändring (Embrace change!) 07-03-19 Martin Karlsson - XP 13 07-03-19 Martin Karlsson - XP 14 Arbetsmiljön 12 Practices / sedvanor Om man inte har en trevlig arbetsplats, så har man inte ett trevligt arbete Om man inte har ett trevligt arbete, så blir inte arbetet man utför bra Mod att förändra sin arbetsplats! Planeringsspelet Kort releasecykel Systemmetafor Enkel design Tester Omfaktorisering Parprogrammering Kollektivt kodägande Kontinuerlig integration Fyrtiotimmarsvecka Kund på plats Kodstandard 07-03-19 Martin Karlsson - XP 15 07-03-19 Martin Karlsson - XP 16 Planeringsspelet Varken affärsfrågor eller teknikfrågor ska få ta överhanden Affärsfolkets bekymmer: Omfattning Prioriteringar Sammansättningen av en release Releasedatum Utvecklarnas bekymmer: Estimeringar Följder Processen Detaljerad schemaläggning Spikes Korta releasecykler Så små releaser som möjligt Så mycket affärsvärde som möjligt Releasen ska vara fullständig, dvs. man kan inte släppa ett program med ofullständig funktionalitet, bara med begränsad funktionalitet. Det är bättre att planera en månad eller två i taget, istället för ett halvår. 07-03-19 Martin Karlsson - XP 17 07-03-19 Martin Karlsson - XP 18 3
Metafor Hitta en bra metafor för projketet Kommunicerar pudelns kärna till alla inblandande parter, beställare såväl som utvecklare Manifesterar en samsyn på vad som ska göras Styr allas aktiviteter mot målet Metafor istället för arkitekturplan En 10 000-metersvy av systemet En sammanhängande story av systemet Enkel design Den rätta designen för ett system vid vilken tidpunkt som helst är att: Alla tester går igenom Det inte har någon kod dubblerad (redundans) Once and Only Once Det fastlår viktiga avsikter för programmerarna Det har det minsta möjliga antalet klasser och metoder Put in what you need, when you need it Systemet ska via kod och tester kommunicera allt du vill att det ska kommunicera 07-03-19 Martin Karlsson - XP 19 07-03-19 Martin Karlsson - XP 20 Tester Ingen programfunktionalitet utan test finns. Programmerare skriver enhetstest för att de själva ska känna sig trygga. Kunden skriver funktionstest så att deras tilltro till systemet och programmerarna ska öka Man behöver inte skriva tester för varje metod, bara för alla metoder som är produktions-specifika. Omfaktorisering Vårstäda vid behov Under skrivandets gång kommer problemet att ändra karaktär, förenkla alltid där du kan! Förenkla där du kan, även om det är någon annan som skrivit ursprungskoden! Om en programmerare ser ett fult sätt att få ett test att gå igenom på 1 minut, men även ett sätt som tar 10 minuter men ger enklare design, så är det andra alternativet som är det givna. 07-03-19 Martin Karlsson - XP 21 07-03-19 Martin Karlsson - XP 22 Parprogrammering Föraren tänker på det bästa sättet att implementera den aktuella metoden Observatören tänker strategiskt: Kommer det här att fungera i det stora hela? Finns det några testfall vi inte har kommit på? Finns det något sätt att förenkla systemet så att behovet av denna metoden försvinner? Kollektivt kodägande Vem som helst som ser en möjlighet att förenkla en design får göra så när som helst. Alla tar ansvar för alla delar i ett system. Ingen vet allt, men alla vet något om alla delar av systemet. 07-03-19 Martin Karlsson - XP 23 07-03-19 Martin Karlsson - XP 24 4
Kontinuerlig integration Kod integreras och testas fullständigt efter ett par timmar, upp till en dag som mest. Ett enkelt sätt att lösa detta är att ha en dator som är dedikerad för integration. Alla test måste fungera till 100% för att en integration ska godkännas. Fyrtiotimmarsvecka Work less, work smarter... Övertid är tid som spenderas på kontoret när du inte vill vara där. Då mår man dåligt, vilket innebär att övertid är dåligt. En andra vecka med övertid är fel. Prioritera om! Sustainable pace Så pass hög fart på utvecklingen så att det är lätt att styra (tillräcklig planering), men utan att skada sig om man trillar (jobba över, stress) 07-03-19 Martin Karlsson - XP 25 07-03-19 Martin Karlsson - XP 26 Kund på plats En "riktig kund" måste sitta med teamet, tillgänglig för att besvara frågor, lösa dispyter och sätta småskaliga prioriteter. Utan en kund på plats måste kraven vara väldigt mycket mer detaljerade och missförstånd kan lätt uppstå. Whole team Kund, beställare, ledning, användare, programmerare... alla ingår i teamet Det är aldrig vi mot dem Kodstandard Om du kommer att ha alla dessa programmerare hoppandes från den ena delen av systemet till den andra, bytandes partner ett par gånger per dag och konstant omarbeta varandras kod så har du helt enkelt inte råd att ha skilda kodvanor. Med lite övning så borde det bli omöjligt att säga vem i teamet som skrev vilken kod. Standarden bör sättas så att det blir minsta möjliga ansträngning. Standarden borde framhäva kommunikation. Slutligen, standarden måste antas frivilligt av hela teamet. 07-03-19 Martin Karlsson - XP 27 07-03-19 Martin Karlsson - XP 28 The practices support each other XP value stories Too much to do, too little time Säg: Jag har inte tid Säg: Jag har för mycket att göra Stand-up meetings The theory of constraints 45 90 60+ 15 Alltid minst en begränsning Fasister (sic!) 07-03-19 Martin Karlsson - XP 29 07-03-19 Martin Karlsson - XP 30 5
När XP inte fungerar Aktiviteter Kulturkrockar När ledningen vill styra allt För smarta programmerare Storleken har betydelse Fel fysisk miljö Kunden vill inte ta beslut på grundnivå När organisationen är emot 07-03-19 Martin Karlsson - XP 31 07-03-19 Martin Karlsson - XP 32 Aktiviteter Aktiviteter Release En helhet Acceptanstest Customers approval leder till Release 07-03-19 Martin Karlsson - XP 33 07-03-19 Martin Karlsson - XP 34 6