Enhetstester & simulering: en analogi

På senare tid har det blivit alltmer populärt med så kallad virtualisering. Det innebär att man via ett program kan köra andra operativsystem än det man har installerat på datorn. Detta sker genom så kallad mjukvaruemulering.

Det kanske låter som magi, men det är egentligen – i princip – väldigt enkelt. Ett operativsystem som kör på en dator är nämligen inget annat än en massa instruktioner (heltal) i en lång följd, och om man kan följa vad dessa instruktioner betyder, till punkt och pricka, kan man ”lura” operativsystemet att det körs på en äkta, fysisk dator. Men i verkligheten körs (”emuleras”) operativsystemet ”inuti” ett vanligt program!

Ett par populära sådana virtualiseringsprogram, för att simulera PC är VirtualBox och VirtualPC.

Ubuntu + WinXP

Ubuntu + WinXP

Till exempel har jag Ubuntu installerat på min dator hemma. Jag har installerat programmet VirtualBox i Ubuntu, och inuti detta program har jag installerat WindowsXP! På så sätt kan jag köra bägge operativsystemen samtidigt!

Nåja, detta är inte en bloggpost om virtualiseringsteknik, eller emulering som är en vanligare benämning vid simulering av lite äldre datorsystem som wonderboy2Commodore 64 (I love you!) eller TV-spel som Sega-16-bit (love you too!).

Låt mig bara dra en parallell till innan jag kommer till inläggets kärna!

Inom fysiken jobbar man med matematiska modeller av verkligheten. ”Matematisk” betyder bara att modellen består av ekvationer. Modellen är en förenkling av verkligheten, men man strävar såklart efter att den är tillräckligt ‘verklig’ för att, när man via numerisk analys (fint uttryck för simulering!) genomför en så kallad integration eller beräkning av modellen, kunna förutsäga hur fenomenet beter sig i verkligheten.

Numerisk analys

Numerisk analys

Till exempel simulering av solsystemet. Eller luftens passage förbi flygplansvingar, och hur det påverkar vingarna i kombination med hänsyn tagen till gravitation osv.

Båda dessa exempel, virtualisering (eller emulering) och fysik, strävar såklart efter att kunna förutsäga beteendet hos det subjekt man är intresserad av: WindowsXP, Commodore64, flygplansvingar eller solsystemet. 100% träffsäkehet är idealet.

Olika praktiska begränsningar medför att det kan vara svårt att nå de där 100%:en. Inom fysiken är det flera problem man har att brottas med: svårt att mäta indata till systemet, numeriska lösningsmetoder är i sin natur inte exakta (tal i datorer är begränsade i sin nogrannhet), okända fysiklagar (vi har inte en ”teori för allting” ännu) och inte minst: att det krävs oerhörd beräkningskraft för att genomföra beräkningarna (vi har inte tillgång till oändlig beräkningskraft, varken i tid eller minne).

I emuleringsfallet kommer istället svårigheten ifrån att subjektet ifråga, en PC, är komplicerad som attan. Det är svårt att få med allt i simuleringsprogramvaran: en modern PC är en av de mest komplicerade maskiner människan har skapat.

Nu kommer vi äntligen till den ryska dockans minsting! Min observation är följande:ryskdocka

Enhetstestning av programvara fungerar i mångt och mycket som en simulering av (delar av) programmet som utvecklas!


Även i detta fall strävar vi efter 100% prediktionskorrekthet (att kunna specificera programvarans beteende fullständigt), men faller här på praktiska ting som att det är svårt (dvs. dyrt) att enhetstesta vissa delar av program: GUI, tredjepartskod etc. Även den kombinatoriska explosion av användningsmöjligheter mjukvarusystem tyvärr ofta uppvisar, gör det praktiskt taget omöjligt att specificera samtliga vägar ett program kan gå.

Läs gärna mina inlägg om enhetstestning och test-driven utveckling, en moden vidareutveckling av enhetstestning.

Taggar: , , , , , , ,

3 kommentarer till Enhetstester & simulering: en analogi

  1. Mr Destroyer skriver:

    Intressant inlägg. Simulera innebär att efterlikna. Emulera innebär att återskapa. Emulering är förstås svårare eftersom det kräver en total förståelse, och total förståelse kan enbart uppnås för en relativt enkel företeelse. En PC må vara en av de mest komplicerade maskiner människan skapat, men å andra sidan är den ofantligt mycket enklare att förstå sig på än hur luftens alla molekyler beter sig när luftmassan rör sig över en flygplansvinge. Därför går strömningen att simulera men aldrig att med datorkraft emulera.

  2. Olof skriver:

    Tack för dessa förtydliganden MrD!

    Är det verkligen fårståelsen som brister när det gäller simulering på molekylärnivå? Är det inte snarare mätning och beräkningskraft som är för inprecisa respektive futtiga? Jag menar om man bortser från eventuella ”okända krafter” som kan verka i ett sådant ”partikelhav..”.

  3. Mr Destroyer skriver:

    Det beror på. Själva grunden för simulering är att man har en specifik fråga att besvara. Konsten är att avgränsa problemet så att man tar med det som är väsentligt och försummar allt annat. Om simuleringen konsekvent ger resultat som överensstämmer med verkligheten så innebär det att man haft förståelse för vad som varit väsentligt i just de fallen. Det innebär inte att man har förståelse för vad som händer om förutsättningarna radikalt förändras eller om man ställer en helt annan fråga. De molekylmodeller som finns idag kan vara tillräckliga att besvara många intressanta frågor men om man fortsätter ställa frågor så kommer man förr eller senare att komma in på något område där förståelsen brister.

Kommentera

Fyll i dina uppgifter nedan eller klicka på en ikon för att logga in:

WordPress.com Logo

Du kommenterar med ditt WordPress.com-konto. Logga ut / Ändra )

Twitter-bild

Du kommenterar med ditt Twitter-konto. Logga ut / Ändra )

Facebook-foto

Du kommenterar med ditt Facebook-konto. Logga ut / Ändra )

Google+ photo

Du kommenterar med ditt Google+-konto. Logga ut / Ändra )

Ansluter till %s

%d bloggare gillar detta: