TDD-mönster: testning av icke-deterministisk algoritm

Det verkar på ytan knivigt att testa en icke-deterministisk algoritm.

Låt oss säga att vi har en algoritm som givet indata Input ska ge ett Result-objekt som svar, där Result-objektet beror på "något icke-deterministiskt".

Detta går att lösa genom "dependency injection" så här:

  1. Skicka med slumptalsgeneratorn till algoritmen, säg Rnd()
  2. Använd Rnd() i den icke-deterministiska delen av algoritmen
Nu blir det mycket lättare att förutsäga vad Result blir givet ett visst Input-objekt. Vi kan helt enkelt skapa en dummy-slumptalsgenerator efter tycke i våran testfixtur, t.ex. en generator som alltid ger "0" i svar, eller kanske 1, 2, 3, ...

Plötsligt kan vi testa våran algoritm!

En nackdel med denna teknik är att testkoden blir ganska så "nära" algoritmens implementation, eftersom den i princip måste känna till exakt hur algoritmen kommer fram till sitt svar (i vilken ordning olika val görs i algoritmen beror ju på slumptaltsgeneratorn). Om det är någon som har en bra lösning på detta problem, ge mig tips :)

Lost Highway

image1
Lost Highway. Av David Lynch, kom ut 1997.

Om man sett Mulholland Dr. av samme regissör känner man igen en hel del av denna film. Jag har endast sett Lost Highway en gång, men dristar mig till att säga att denna är mer utflippad plotmässigt; här hänger helt enkelt inga trådar ihop alls, till skillnad från Mulholland Dr. Notera att Mulholland Dr. är min favorit-Lynch all-time.

Musik delvis av Badalamenti. Ibland dyker Rammstein upp som provocerande soundtrack i L.H., känns inte rätt alls, B-igt.

Skum detalj är att Bill Pullman i mycket påminner om Lynch's storfavorit Kyle McLachlan. Patricia Arquette spelar den förföriska frun/lyxprostituerade (svårt att säga vilket i sann Lynch-anda).

Min slutsats blir: sevärd för Lynch-fantaster som vill "komplettera sin lista", men inte mycket mer. Den känns förvirrad och bitvis har den onödigt segt tempo (jag är absolut inte emot segt tempo när det passar; 2001 är min absoluta favoritfilm!).

RSS 2.0