Månadsarkiv: september 2015

Safety net tests?

För ett par dagar sedan höll jag en liten informell presentation på jobbet om en metod jag brukar luta mig mot när jag refaktorerar kod. Metoden beskrivs i boken Working Effectively With Legacy Code av Michael Feathers och kallas för The Legacy Code Change Algorithm. Den består av dessa fem enkla steg:

1. Identify change points.
2. Find test points.
3. Break dependencies.
4. Write tests.
5. Make changes and refactor.

Egentligen är väl tanken att algoritmen ska användas för att angripa legacykod utan att riskera land och rike, men om man för en stund bortser från ”make changes” i punkt 5 återstår ju faktiskt ”refactor”.

Nu vore det kanske på sin plats att definiera ”legacy code”. Menar man en stor hög med spagettikod från antiken? Eller betyder det helt enkelt att koden är dammig och bortglömd? Det finns säkert många definitioner där ute, men egentligen behöver vi bara bry oss om hur Feathers definierar begreppet för att förstå hans algoritm. Hans definition är som följer:

”Legacy code is simply code without tests.”

Plain, simple och kanske lite brutalt. Oavsett vad man tycker innebär definitionen alltså att koden kan ha författats igår – utan tester klassar Feathers den som legacy.

Tillbaka till min presentation (och poängen med detta inlägg). I en av mina slides hade jag ställt upp algoritmen för Test-Driven Development (TDD) jämte The Legacy Code Change Algorithm för att på så sätt kunna resonera om hur vi kan förhålla oss till tester som skrivs i respektive algoritm. Här tycker jag att det finns en intressant skillnad som hänger ihop med testernas syften.

I TDD ingår författandet av tester som en del i utvecklingen. Syftet med tester som skrivs här är att öka kvalitén på koden som skrivs och att via tester skapa en slags dokumentation över hur koden används. Om vi sedan tittar på The Legacy Code Change Algorithm syftar testerna istället till att skapa förutsättningar för att genomföra förändringar utan att ta sönder saker. Det betyder också att testerna i sig inte nödvändigtvis behöver vara en naturlig del av koden (som i fallet med TDD).

För mig blir det med ovanstående resonemang mycket enklare att motivera användandet av mocking frameworks såsom Mockito eller PowerMock när jag refaktorerar legacykod. Med sådana frameworks tillämpar man en slags White-box testing där testerna till stor del lutar sig mot hur implementationen ser ut. Helt vanligt refaktoreringsarbete kan då ta sönder sådana tester – trots att kodens beteende fortfarande mycket väl kan vara alldeles riktigt och rätt – eftersom implementationens utformning förändras.

Jobbigt, jobbigt.

Men i en galet komplex kodmassa kan ramverk som Mockito göra hela skillnaden för att få en ärlig chans att refaktorera på ett säkert sätt. Om testerna blir väldigt svårförvaltade kan jag tycka att de på sätt och vis har spelat ut sin roll och kan tas bort. Koden som refaktorerades när testerna skrevs bör i vilket fall vara i ett bättre tillstånd än tidigare, vilket också var det vi ville uppnå.

Kanske vore det läge för en ny benämning för tester som skrivs i detta syfte? Vad sägs om Safety net tests? 😉

Sociala medier är ganska otäcka

Jag tror det var igår som jag av en händelse klickade mig fram till en grupp på Facebook vid namn ”Politiskt Inkorrekt”. Inlägget jag hamnade på där bestod av en film i vilken – om jag förstod det rätt – några syrier klagade på sitt asylboende. Jag måste erkänna att jag inte tittade på filmen eftersom min uppmärksamhet hamnade på de kommentarer som hörde till inlägget. Hundratals människor uttryckte unisont och hatfullt att de lika gärna kunde åka hem (eller värre saker för den delen som jag inte tänker skriva svart på vitt). Det kollektiva hatet i kommentarerna blev för mig riktigt obehagligt och nästan överväldigande. Riktiga människor, helt utan anonymitet, i en slags hatmobb vars beteende verkar vara legitimerat just av att de är så många.

I jakt på förståelse började jag att tänka på vad det gör med människor att se sådana här saker i sitt nyhetsflöde på Facebook (eller i andra sociala medier för den delen). Vad man ser i sitt flöde beror ju till stor del på vad man väljer att ”likea”, alltså sådant som man vill följa och veta mer om. Allt eftersom formas nyhetsflödet till en slags ”verklighetsbild” där det man har valt att följa och sympatiserar med är det enda som i stort sett får plats. Vi som loggar in i Facebook dagligen blir då också dagligen exponerade för denna version av verkligheten – en version som förstärks och bekräftas av andra människor med samma åsikter. Varje dag, året runt. Det ställer väldigt höga krav på oss medborgare, till exempel att vi hela tiden måste jobba på att vara källkritiska.

När man ser på det så är sociala medier ganska otäcka.

Hur står det då till med mitt nyhetsflöde i Facebook? Hur påverkas min världsbild av att jag dagligen matas med ”nyheter” och åsikter från min sida lägret i flyktingfrågan? Även om jag inte har upplevt en aggressiv eller hatisk ton i mitt flöde rycks jag ändå med i det jag läser. Och även om jag vill tro att jag är en ifrågasättande och källkritisk person är min känsla att sociala medier knappast ger mig en mer ”korrekt” världsbild.

Innan kvällen var till ända hann jag även med att se en videosnutt som kom att förändra min världsbild en hel del. Under den knappt tio minuter långa filmen förklarar Hans Rosling väldigt pedagogiskt och grundat i fakta hur fördelningen mellan fattiga och rika ser ut i världen. Samtidigt framställer han mediadrevet i flyktingfrågan som väldigt skev. Det är inte så att alla vill fly till Europa och ”snylta” av vår välfärd. De flesta har det bra och får det hela tiden bättre, men just nu har vi en kris och då ska vi såklart hjälpas åt.

Här måste jag säga att mitt nyhetsflöde på Facebook (och till viss del traditionell media) har misslyckats med att förmedla detta till mig. Med tanke på den hatiska tonen i Facebookgruppen ”Politiskt Inkorrekt” vågar jag knappt tänka på hur långt ifrån en ”korrekt” världsbild sociala medier kan ta människor.