onsdag 26. november 2008

Hva er egentlig en enhetstest?

Det kan synes rart for mange at det (fortsatt) er diskusjon om hva en enhetstest er og hva en integrasjonstest er. Flytende overganger mellom de to forkludrer forståelsen noe.

Mange utviklere mener alt som ikke kan enkelt automatiseres er en integrasjonstest. Som database og GUI. Men i det øyeblikket det er mulig å automatisere testing av slikt blir de enhetstester? For det er jo nok av verktøy og metoder for automatisering av både database og GUI.

Definert i f.eks. Wikipedia er enhetstester selvsagt all testing som verifiserer enkeltdeler i en applikasjon for seg. Tester du en funksjon isolert og ikke dens kommunikasjon med andre funksjoner eller objekter er det enhetstesting. Når blir en test av en funksjon til en integrasjonstest?

Integrasjonstesting handler om testing av modulers samspill i gruppe. Er du tester og leser dette tenker du sikkert "hva er en modul?". I utgangspunktet er dette bare de samme enhetene som i enhetstesting, men testet i gruppe.

Er det viktig å vite forskjellen? Kanskje ikke så mye for den enkelte utvikler, men i kontraktssammenheng kan det være fantastisk viktig. Kontraktsfester man et nivå av integrasjonstesting vil det jo selvsagt være viktig å vite hva man definerer som enhetstesting og hva som er integrasjonstesting, og det blir fort mye tester. Et stort system koster mye å teste.

onsdag 12. november 2008

Threat Modelling

Jeg er en tur på TechEd2008 i Barcelona, og her er det ogå mye om kvalitet!

En av dagens sesjoner var
"How I learned to Stop Worrying and Love Threat Modeling" av Michael Howard

Sesjonen startet med en liten historie om hvordan MS har endret sine interne sikkerhetsanalyserutiner til å bli SDL-orientert og at Threat Modeling skulle gjøres av alle utviklingsteam. SDL = Security Development Lifecycle

SDL kan brukes på

  • Programvare som skal selges til sluttbruker, onlinetjenester, ja alt av programvare
  • Dekker alt fra start av utvikling til utsending/deployment og oppdateringer
  • Gjør Threat Modeling i design
Denne prosessen bør brukes av alle, mener Michael, og peker på følgende grunner:
  • Programvaren blir designet sikker
  • Angriperne tenker anderledes (enn du tror)
  • Finner sikkerhetsproblemer tidlig
  • Færre designfeil
  • Optimaliserer planlegging av sikkerhetstesting

SDL er iterativ, og man går gjennom fasene
  • Visjon
  • Modellering
  • Identifisering av trusler
  • Fjerne problemer
  • Validere

Det som er spesielt viktig å komme frem til er forståelse av sikkerhetsgrensesetting (sammensatte ord er flotte greier).
"Trust Boundaries" ligger på områdene
  • Integritet/rettigheter
  • Sesjon
  • Filsystem
  • Nettverk

For å finne sikkerhetsproblemer eller områder man bør teste for sikkerhet har MS laget et gratisverktøy de kaller Threat Modeling Tool (TMT). Det ligner på et vanlig modelleringsverktøy, men rettet mot modellering av applikasjoner og moduler ift sikkerhet.
Med TMT kan du
  • Modellere applikasjonen eller deler av den
  • Gi deg råd om modellen og dens innhold (et datalager kan ikke snakke med et annet datalager, så du trenger en prosess, som igjen kan ha sikkerhetsproblemer, osv)
  • Finne områder med potensielle sikkerhetsproblemer
  • Registrere defects for utviklerne slik at de kan jobbe videre med saken
  • Lenke til avhengigheter
  • Legge til antagelser (man ønsker å registrere hva designeren tenkte, spesielt når et sikkerhetsproblem blir ansett som lite)
  • Analysere trusler
  • Rapportere om trusler og applikasjonen ift trusler
  • Få forslag til områder som trenger kryptering/sikring
  • Lese hjelp for SDL
  • Se trusselmodellen til TMT!

TMT kan finnes her: http://msdn.microsoft.com/en-us/security/dd206731.aspx
Mer info her: http://blogs.msdn.com/threatmodeling/