Jag tillbringade hela förra veckan på Øredev, för första gången sedan -06 och det var sannerligen roligt att uppleva igen. Jag tog en hel del anteckningar, och tänkte återge någon sorts referat av dem mest för att själv bearbeta materialet och få ner alla referenser och tips på pränt, men också för att ge en liten bild av konferensen som jag upplevde den.
Diana Larsen — Agile Retrospectives
Efter att ha läst boken var jag otroligt inspirerad att använda retrospektiv för att komma närmare kontinuerlig förbättring. Av olika anledningar rann det ut i sanden, och jag har gått och funderat på ämnet ett tag. Att få höra hela idén från hästens mun igen kändes otroligt värdefullt.
- Diana berättade om någon som hade frågat ”does the retrospective always happen at the end of the iteration?” och hennes syn på det var att planering-arbete-retrospektiv snarare löper i en cykel, där retrospektivet snarare kanske är någonstans i mitten. Det påminde mig om Sysavs motto: ”Mitt i kretsloppet”, som jag tycker är otroligt fyndigt.
- Retrospektiv skall gärna ha en struktur bestående av Set the stage, Gather data, Generate insights, Decide what to do, Close. Vi pratade en del om Gather data, och hur den delen har som uppgift att få fram maximalt med information för att, om möjligt, ge alla en liknande bild av vad som har hänt. Man ska också ha klart för sig att Gather data inte bara ska ta fram kall data, utan också belysa känslomässiga intryck och förändringar under perioden som förflutit.
- När retrospektivet stängs (Close) har man ett bra tillfälle att samla in feedback om retrospektivet självt. Värt att notera här är att feedbacken inte är till den som faciliterat utan tillbaka till deltagarna som grupp — ”har vi kommit fram till något vettigt?” ”var det här värt min tid?”
- Diana visade en fin övning hon kallar ”Circles and Soup” som kan användas för att undersöka deltagarnas känsla av vad de kan påverka. Se hennes blogginlägg för detaljer.
På det hela taget fick jag en mycket bättre bild av hur ett retrospektiv går till och hur mekanismerna är tänkta att fungera. Och jag inser också att som aktiv team-medlem kan jag inte gärna facilitera retrospektiv för oss, så jag funderar på ett utbytesprogram på jobbet.
Jutta Eckstein — Agile Software Development for Distributed Teams
Vi är för närvarande ett samsittande team om två på jobbet, men vi väntar hjälp från fem personer i Bangalore. Den här workshoppen verkade vara ett utmärkt sätt att få lite mer kött på benen kring förväntade problem och tekniker för att lösa dem. Jutta var väldigt tillmötesgående och ödmjuk inför problemet och eventuella kontextuella begränsningar och hade mycket intressanta erfarenheter.
- Det första jag reagerade på, som var väldigt befriande, var att hon direkt sa (parafras): ”Det är väldigt svårt att spara pengar på outsourcing. Vill man använda distribuerade team ska man göra det av andra skäl, och ett distribuerat kommer med stor sannolikhet aldrig att bli lika effektivt som ett geografiskt samlat team. Men så här tänker jag att man kan använda agila principer för att underlätta.”
- Jutta talade om iterationer som ett ”heartbeat for a development effort” — så snart man arbetar med mer än ett team, distribuerade eller inte, i ett utvecklingsarbete, tror jag det ligger rätt mycket i det här. Det känns värdfullt att alla planerar mot samma horisont, jobbar i ungefär samma takt och synkar sinsemellan med samma frekvens.
- Vi pratade också en del om hela team, och hur man kan arbeta med t.ex. feature-team + specialist-föreningar där varje feature-team innehåller all kompetens som behövs för att leverera färdig mjukvara, men där man regelbundet träffar andra i sitt fack från andra team för att göra mer överordnad synkronisering.
- Hennes erfarenhet var att ca 10% av personalstyrkan borde vara tillägnad CM-arbete, dvs sköta byggsystem, versionshanteringssystem, etc, för att feature-team ska kunna arbeta mer eller mindre ostört. Vi råkar ha just den fördelningen, och jag kan bara instämma: det funkar väldigt bra.
- ”Video conferences never really worked for us”
- Ömsesidig respekt — det är ingen god idé att möten ständigt schemaläggs så att det är mest bekvämt för huvudkontoret. Hellre låta alla lida ibland än att alltid låta vissa lida.
- Det talades om en ambassadörsroll, alltså någon som kan hjälpa till att ”tolka” mellan olika företags-, team- eller nationella kulturer. Någon form av utbyte mellan de olika ställena.
- Jutta talade också om högsta gemensamma nämnare avseende kommunikation. Dagliga stå-upp-möten, t.ex. kan genomföras helt över Skype, även om teamet är delat i två grupper om fyra, som vardera sitter tillsammans. Detta för att alla kommunicerar med samma ”fidelity”, vilket gör att alla är lika handikappade i kommunikationen och alla måste anstränga sig lite extra för att nå fram.
- Boktips: Juttas egen Agile Software Development with Distributed Teams
- Boktips: Geert Hofstedes Culture’s Consequences
Jag kom hem med en hel del idéer för hur vi kan underlätta samarbetet med våra nya kolleger.
Steven ”Doc” List — Facilitation Patterns
Jag tog inte med mig jättemycket ifrån den här, men fick massor av bra uppslag till vidare läsning.
Jeremy D. Miller — Patterns for Building Internal DSLs
- Glöm att försöka få ditt DSL att flyta som naturligt språk. Det är programmerare som ska använda det, så håll igen på prepositioner, etc, och koncentrera dig på att få ett begripligt API. Amen.
- Utnyttja auto-completion för att bygga ett självdokumenterande API
- Använd DSL:er för att bygga objektgrafer som sedan kan exekveras. DSL = konfiguration, resultatet = run-time.
- Boktips: Martin Fowler, Domain-Specific Languages
På det hela taget tycker jag Jeremy presenterar väldigt bra, men 50 minuter är ingen lång stund, och han lät sig luras in i långa resonemang av frågor, och kom inte riktigt igenom sitt material med något större genomslag. Jag hade gärna läst ett eller flera bloggpost om samma idéer.
Rachel Davies — Building Trust
- Trust definieras som ”confidence to collaborate”
- Lärande som ett sätt att bygga tillit — man lär sig genom att misslyckas, och genom att misslyckas tillsammans bygger man förtroende
- Synlighet (transparency) är ett sätt att stimulera förtroende
- Rachel sa klokt apropå svårigheter att engagera att någon som vägrar göra någonting oftast har en bra anledning. Det kan vara värt att försöka ta reda på exakt vad, och angripa det problemet för att komma vidare.
- Trust = (Credibility + Intimacy + Reliability) / Self-orientation. Någon som arbetar för att själv vinna fördelar (self-orientation) kommer att ha extra svårt att bygga tillit.
- Boktips: David Maister, The Trusted Advisor
Efter presentationen hade jag inte så mycket tankar kring det här, och kunde inte återge vad som sagts, men nu när jag gått igenom mina anteckningar känner jag att den gav massor av praktiska användbara tips för att förstå mekanismerna som styr tillit.
Jeremy D. Miller — Web Application Testing
- En experience report från Dove Tail, om hur de gör sin end-to-end-testning.
- De använder Selenium RC och StoryTeller för att driva sina webtester
- StoryTeller har specifika fixtures för att sätta upp testdata
- De har kapslat allt Selenium-jox i ”screen drivers” som ger ett tydligt C#-API att använda från StoryTeller-fixturerna
- Deras turnaround-tid för en testkörning är 30-40 minuter, så de kör testerna som ett separat CI-steg om build + unit tests har gått igenom (fast build/slow build).
Jag gillade deras ”screen drivers” som kapslar detaljerna i att driva applikationen, vilket gör att underhållsarbetet blir mycket mindre. Jag har haft liknande planer, som jag snart hoppas kunna sätta i verket.
Ulrich Freiberg — Building a Test Framework Imposes a lot of Challenges
- Han har styrt bygget av ett testramverk för ett antal system om totalt 10 miljarder rader kod (det här sista tror jag var en felsägning. Hoppas det!)
- Principerna har varit ”compiler quality” och pluggbarhet.
- Med ”compiler quality” menade han nog att ramverket måste vara robust så att ett test failure alltid beror på issues i produktionssystemet, inte i testramverket. Annars tappar folk förtroende ganska snabbt.
- Med pluggbarhet menar han en mekanism för att bygga domänspecifika libraries för att testa delar av produktionssystem. T.ex. visade han ett test som använde ett library för FX — Foreign Exchange. Genom att kapsla access till de externa systemen i likartade bibliotek kan man ganska enkelt skriva tester som arbetar över flera domäner, t.ex. FX och Savings. I teorin i alla fall.
- Över huvud taget pratade han mycket om inkapsling, och det är något som jag själv tror stenhårt på för att göra tester någorlunda underhållsbara. Ju färre delar av testerna som direkt accessar målsystemet, desto enklare blir det att refaktorera det senare.
Jag fick intrycket att han var väldigt nöjd med det som byggts, men det var svårt att få grepp om hur det rent faktiskt hängde ihop, och hur bra det faktiskt fungerade.
Gojko Adzic — Agile Acceptance Testing Success Stories
- Gojko hade intervjuat deltagare från totalt 50 projekt om deras erfarenheter av agil acceptanstestning och försökt destillera ut det som skilde lyckade initiativ från mindre lyckade
- ”Tests are hard to maintain when a small change in the business model requires a massive change in tests and software” — vi återkommer ständigt till inkapsling…
- Gojkos grundläggande tes verkade vara att acceptanstester helst ska vara en dokumentation av företagets affärsprocesser som kan drivas av ett testramverk och utvärderas mot målsystemet. Han är ju ett stort FitNesse-fan, så det är inte svårt att se vad det betyder i praktiken, men han gjorde tydligt att verktygen spelar mindre roll, så länge testerna är på en sådan nivå att de fungerar som dokumentation snarare än kod.
Jag var nog lite trött och okoncentrerad, för jag tog inte med mig så vansinnigt mycket från det här.
James Shore — Alternatives to Acceptance Testing
- James menar att Fit lämpar sig för ”customer unit tests”, dvs ett samarbetsverktyg för XP Customers att specificera och utvärdera affärsregler emot målsystemet…
- … men tyvärr har tiden utvisat att Customers väldigt sällan känner sig bekväma med verktyget, vilket har lett till att programmerare sitter och trixar med Fit för att skapa läsbara testfall som ingen läser
- Idén att Fit skulle vara extra väl lämpat för end-to-end-testning menar han är rent nys
- Han refererade till Nancy van Schooenderwoerts redogörelse från Agile 2006-konferensen och särskilt jämförelsen med Capers Jones statistik. En sak jag reagerade på var Jones mät-triplett: Totalt antal defekter funna/procentandel hittade och korrigerade under utveckling/antal hittade hos kund. Det kändes som att det här vore användbart för att mäta hur en processförändring påverkar kvalitet. Om man kommer ihåg att mäta…
- James snavade lite på orden, och råkade mynta ordet ”Testemers” — testers/customers, testare som arbetar främst med att utvärdera systemet i domänkontext.
- Rekommendationen var att ersätta automatiserade acceptanstester med stark kundnärvaro, extrema mängder enhetstester och fokuserade integrationstester samt manuell testning för att hitta luckor i processen följt av processförändringar för att eliminera rot-orsaken.
James Shore känns som en av branschens mest hängivna utövare, och mot bakgrund av att han var en av männen bakom Fit, såg jag mycket fram emot att höra hur han såg på tekniken idag.
Roy Osherove — How to do Test Reviews
Inga anteckningar härifrån. Osherove är tongivande i TDD-sammanhang, och saluför TypeMock.NET, ett av de enda ramverken som tillåter mockning av annat än abstraktioner, t.ex. konkreta klasser och statiska klasser. Sessionen verkade handla om TDD best-practices.
En sak jag tog med mig var ett starkare argument för one-assertion-per-test: Om ett test fallerar på sin första assertion, man försöker rätta till problemet och nästa assertion fallerar, så vet man inte om man introducerat ytterligare ett problem eller om #2 hade gått fel hela tiden. En assertion per test ger alltså mer finkornig information, vilket i vissa fall kan vara värdefullt.
Han avslutade med en sång. Fin röst har han, gossen.
Neal Ford — Testing the Entire Stack
Här har jag bara ett litet citat
Test a weaker language with a stronger one
Principen var att språk som lämpar sig för DSL-byggande (Groovy i hans exempel) är bättre att skriva tester i, för att de blir mycket mer läsliga. Groovy har dessutom featuren (?) att den ignorerar private-deklarationer, så man kan testa privata metoder, vilket Ford tyckte var jättebra. I övrigt tyckte jag inte att den här sessionen hade så mycket att ge.
Gojko Adzic — Challenging Requirements
Gojko levererade en underhållande presentation av konstiga krav han fått genom åren, och hur han arbetat med dem för att hitta kärnan och kunna välja en hållbar lösning.
- Han presenterade fyra ”regler” för att nå bra krav — vägra lösningsförslag, vägra teknikförslag, vägra lösa problem som inte är ursprungsproblem och känn dina stakeholders/användare.
- För att komma till ursprungsproblemet rekommenderar han att: ”Ask why until you get to the money”.
- Börja inte med user stories. Börja med specifika exempel av en vision.
- Sammanfattningsvis: Förstå problemet och den som har det
- Boktips: Ingrid Ottersten, Effektstyrning av IT — Gojko hade läst den på engelska, men nämnde att den var svensk i originalutgåva.
Väl förberett och väl levererat, tycker jag. Mycket fokus på att vägra, men mina erfarenheter av kravarbete säger att det nog inte är någon dum strategi att försöka gå till botten med varje enskilt krav, och förstå bakgrunden.
Jeremy D. Miller — Compositional Design with Responsibility-Driven Design
- Första gången jag hör talas om GRASP patterns. Känner att jag missat något, och måste läsa på.
- Vi får en blixtpresentation av Rebecca Wirfs-Brocks stereotyper (som jag läst en hel bok om, men inte har någon klar bild av): Information holder (t.ex. Customer), Structurer (t.ex. Cache), Coordinator (t.ex. event handler — kan separera scheduling från logik), Service Provider (t.ex. HashCalculator) och Interfacer (en adapter eller fasad, t.ex. EmailSender).
- Få objekt är renodlade stereotyper, och de flesta samverkar med andra stereotyper för att uppfylla sina ansvarsområden
- En tanke som slog mig under presentationen som inte direkt hade något med saken att göra: ”Lämpar sig behavioral patterns bättre för mock-baserad testning än state-baserad testning?”. Kan vara värt att undersöka.
Återigen kändes det lite rumphugget, men väldigt givande.
James Shore & Kim Gräsman — Let’s Play TDD
På fredagmorgonen stötte jag på James Shore och vi kom överens om att parprogrammera ett par avsnitt av hans screencast-serie Let’s Play TDD. Sagt och gjort, vi låste in oss i ett rum på andra våningen och spelade in, och roade oss kungligt. Tror jag är med i avsnitten 53-55, som väl postas med början nästa vecka.
Neal Ford — Emergent Design
- Efferent och Afferent coupling, dvs hur många andra klasser en klass refererar respektive hur många andra klasser som refererar en klass. Jag har läst om det här tidigare, men inte insett hur lätt det är att mäta och vilken förment trevlig kvalitetsindikator det kan bli.
- Artikeltips: Collaborative Diffusion
Greg Young — 19½ things to make you a better OO programmer
- SOLID-principerna är inte lagtext. SRP t.ex. kan trade-offas med cohesion. Högre cohesion kan göra att en klass samlar på sig fler ansvarsområden.
- Afferent/Efferent coupling och cohesion är metrics som kan konkretisera SO(L)ID — LSP är undantaget
- DRY/Eliminate duplication kan trade-offas med coupling
- Han rekommenderade alla att läsa på om Design by Contract som nu har library- och kompilatorstöd i .NET.
Daniel Brolund & Ola Ellnestam — Large-scale refactorings using the Mikado Method
- Använd scratch refactorings för att bygga en refactoringstrategi
- Bygg en graf av beroenden mellan refactoringsteg
- Attackera lövnoder i grafen, som är relativt enkla refactorings
- Detta möjliggör inkrementella storskaliga förändringar
- Utkast till boken finns här och en mailinglista för diskussion här
Sammanfattning
En iakttagelse jag gjorde var att Dave Hoover och Patrick Kua höll de i särklass skönaste presentationerna, för att de var relativt dämpade och avslappnade (tyvärr såg jag bara halva av varje och har inga anteckningar därifrån). Teknikpresentationerna var överlag mer testosteronstinna, högljudda och predikande.
Jag vill också höja ett glas för maten, som jag tycker var enastående under förutsättningarna.
Det enda negativa är det som nämnts ett par gånger redan i Øredevosfären: ljudläckor mellan de olika föreläsningssalarna var ganska irriterande. Jag vet att arrangörerna gjorde sitt bästa för att eliminera det, men lokalerna var nog inte optimalt lämpade för den här typen av prat-täta konferenser.
Med det sagt tycker jag Slagthuset var ett utmärkt ställe på alla andra sätt; interiören är trevlig (jag gillar tegel) och stället sväljer folk!
Sammanfattningsvis kan man säga att jag hade en väldigt inspirerande vecka.