Å jobbe effektivt med drittkode

CropperCapture[44]Michael C. Feathers’ Working Effectively with Legacy Code er en ikke direkte ukjent bok. Jeg leste den i sommer, som en slags forberedelse til å begynne i ny jobb. Den hjalp meg til å hoppe uredd og med stor iver inn en voksende kodebase med varierende kvalitet. For dem som ikke kjenner Michaels mesterverket fra før, her er en kort beskrivelse:

Uttrykket “Legacy Code” brukes i utgangspunktet om gammel kode, kode som man arver fra andre. Benevnelsen innebærer at det er vanskelig å forså hvordan koden fungerer, og det er vanskelig å gjøre endringer. Michael Fethers definisjon på Legacy Code er kode uten automatiserte tester, fordi slik kode nettopp er vanskelig å forstå og å endre. Kode med tester derimot vil gi deg øyeblikkelig tilbakemelding på om du har ødelagt noe, og om endringene du har gjor fungerer som forventet.

Working Effectively with Legacy Code handler i bunn og grunn kun om én ting; nemlig hvordan man får på plass automatiserte tester rundt kode som i utgangspunktet ikke er designet for det, slik at man kan jobbe videre med koden uten å være redd. Gjennom kapitler som I Don’t Have Much Time and I Have to Change It og I Don’t Understand the Code Well Enough to Change It lærer Michael oss pragmatiske og presise teknikker som gjør oss mere komfortable med å ta i “drittkode”.

Kapitler som I Can’t Get This Class into a Test Harness, med avsnitt som The Case of the Irritating Parameter og The Case of the Hidden Dependency er gull verdt, og åpner øynene dine for hvordan det som ser helt håpløst ut faktisk kan løses. Dette er en oppskriftsbok, med en lang liste teknikker Feathers har funnet effektive i sin praksis. Mange av teknikkene er fokusert rundt det å bryte avhengigheter, som for eksempel Break Out Method Object, Expose Static Method, Extract and Override Call, Extract Implementer, Pull Up Feature og Push Down Dependency.

Hvem som bør lese denne boken, og hvorfor..

Denne boken har gitt meg en helt ny holdning til “dårlig kode”. Kode som er vanskelig å endre og som ikke har enhetstester er ikke lenger noe jeg gruer meg til å ta i – jeg ser nå på det som en spennende utfordring. Jeg gleder meg til å sette tenna i metoder på over tusen linjer og ekstremt høy kompleksitet. Helt seriøst, denne boken har tatt noe av det jeg likte minst ved yrket mitt, og gjort det om til noe av det jeg liker mest!

Hvis du kun jobber i perfekte softwareprosjekter, med elegant kode og høy test coverage, så har du ikke bruk for Michaels bok.

Ikke særlig mange sliker jobber, er det vel?

Hvis du derimot er på et team som sliter med en stor og uregjerlig kodebase.., hvis dere har problemer med å få laget gode enhetstester – eller å komme i gang med automatisert testing i det hele tatt.., hvis dere ikke er fornøyd med kvaliteten på koden dere jobber med, og den er vanskelig å forstå.., ja, da er Working Effectively with Legacy Code et uvurderlig hjepemiddel som dere bare må lese med en eneste gang. Legg ned utviklingen et par-tre dager, det er det faktisk verdt om utviklerne lærer seg disse teknikkene og lar seg inspirere til å bruke dem.

Kategorier: Bøker, Testing / TDD.
RSS feed for kommentarene. Tilbaketråkk.

6 kommentarer til “Å jobbe effektivt med drittkode”

  1. Torbjørn Says:

    Og tusen takk til Halvard som lånte meg boken. Snart på tide du får den tilbake nå..

  2. Jonas Follesø Says:

    Helt enig! Sammen med Clean Code er dette en av bøkene “alle” utviklere burde lese. Den fokuserer på noe utrolig viktig og relevant for den jevne utvikler. De færreste jobber med green-field prosjekter eller de nyeste rammeverkene og API-ene. En bok som fokuserer på hvordan lykkes i en “håpløs” kodebase er gull verdt.

    Selv har jeg lest boken i parallell med å jobbe med en større refaktorering av en grusom kodebase. Det har vært en utrolig gøy måte å jobbe på – hvor jeg både har gjort en bedre jobb, samtidig som jeg har hatt større utbytte av boksen siden jeg har hatt mulighet å prøve ideene i praksis.

    Har funnet et par nye teknikker selv planlegger å dele på bloggen etter hvert :)

    - Jonas

  3. Jørgen Says:

    Interessant artikkel! Tror jeg skal begynne å kode igjen ;-) Halvard må få boken sin tilbake snart slik at vi kan ta tak i dette…

  4. Øyvind Fanebust Says:

    Bra tips til alle som sliter med gammelt og ny drittkode. Denne boken er gull verdt!

  5. Jon Arild Tørresdal Says:

    Enig at dette er en veldig bra bok. I etterkant av utgivelsen av boken er definisjonen til Michael diskutert. Ikke alle var enig i den :-) Vet ikke om du husker vi diskuterte definisjonen av legacy code med Dan North? Han hadde også diskutert dette med Michael selv, og de var enige om at den ikke “var riktig”. Dvs den er mer i retning av kode som vanskelig lar seg endre, har mange uønskede dependencies osv. Dvs. det er kode som er testbar som er legacy kode.

    Et annet aspekt jeg synes er viktig å få frem er at legacy kode nødvendigvis ikke gjelder gammel kode. Jeg har sett kode som kommer rett ut av ovnet som jeg vil definere som legacy. Dette er kansje å trekke selve begrepet litt langt, ettersom legacy (i den virkelige verden) oftest omhandler å overta noe fra andre (f.eks. arv), men når det gjelder fokuset og tema til boken vil jeg påstå det er mer riktig. M.a.o. boken er nyttig selv for de som jobber på greenfield prosjekter.

    Et verktøy som er svært nyttig i arbeid med denne type kode er NDepend. Spesielt med tanke på å finne hvor de største utfordringene i koden er, samt å definere regler for uønskede dependecies e.l. Tenker vi kanskje skulle kjørt et legacy tema på NNUG… Jeg kjører gjerne en sesjon om NDepend.

  6. Torbjørn Says:

    Begrepet “Legacy Code” har blitt diskutert mye, men i forhold til boken er det ikke så veldig nøye. For som jeg påpeker handler boken om teknikker man kan bruke for å refakturere fra kode som ikke lar seg enkelt teste med automatisert testing, til kode som enklere lar seg teste. Min egen oversettelse – “drittkode” – var det begrepet jeg ble tilbudt når jeg spurte utviklermiljøet på twitter hva de ville ha oversatt legacy Code med. :)

    Hvis folk ikke har sett NDepend in action fra før så tror jeg det vil kunne bli en populær sesjon på NNUG. Om man skal gå litt mer i dybden er det derimot et ganske tungt tema mener jeg, så da er jeg litt usikker.

Skriv en kommentar

Tillatte tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


Einar W. Høst: Det er jo læringen som gjør det morsomt! Se også http://norvig.com/21-days...

Pagliacci: OBS! tl;wr. Det er vel akuratt det jeg sliter med med min læring innenfor pr...

Torbjørn: La oss anta to ulike definisjoner av Template Method pattern - de to ytterpunkte...

Lars-Petter: Hei igjen. Siden du inviterer til å ta diskusjonen i bloggen, og har tatt deg t...

Torbjørn: Lars-Petter: Det er én måte å se det på. Det er absolutt fortsatt Template M...

Lars-Petter: Hei. Har du ikke i prinsippet her gått over fra Template Method (arv) til Strat...

Christian Abildsø: I alle fall i C#, så føles dette som kode som blir mer fleksibel men vanskelig...

Torbjørn: Hei Henrik, og takk for tilbudet. Ble oppmerksom på Rasberry Pi for under en uk...

Henrik Sandaker Palm: Ang. større hobby prosjekt. Du er som er en slik rakker på programmering har j...

Øivind Nilsen: Slutt å bruke mobilnummeret mitt som eksempel !...

Mulig relaterte linker

 Hold deg oppdatert

Søk i bloggen

Ferske innlegg

  • En historie om programmering
  • Template Method del 4: Multippel arv
  • Template Method Intermesso
  • Template Method del 3: Bare funksjoner
  • Kategorier

  • .net ninja (37)
  • Bøker (17)
  • Diverse prosjekter (35)
  • DSL (10)
  • Erlang (10)
  • F# (5)
  • Hardware (1)
  • Jobb (77)
  • Julekalender (51)
  • kjempekjekt.com (23)
  • LISP/Clojure (33)
  • NNUG / community (60)
  • O/RM & databaser (10)
  • Off topic (116)
  • OO-design/clean code (30)
  • Podcasts (14)
  • Polyglot (77)
  • Ruby (27)
  • Silverlight / RIA (3)
  • Software/verktøy (20)
  • Softwareutvikling (21)
  • Testing / TDD (30)
  • the contiki strip (13)
  • User experience (3)
  • WCF (3)
  • Webutvikling (32)
  • WPF (9)
  • WTF (12)
  • Last ned Wallpaper

    Programmeringsbloggens tøffe skrivebordsbakgrunn med snippets fra ulike språk laster du ned her!

    Abonner via epost

    Om du vil kan du få alle nye blogposter tilsendt til din epost. Abonner nå, det er kjempeenkelt!

    Meta