!

Dette materialet blir ikke lenger vedlikeholdt. Du vil finne oppdatert materiale på siden: http://borres.hiof.no/wep/

Testing
Børre Stenseth

Kodetesting

Hva
Testing av programkode

Det er på mange måter rart at databransjen kan overleve med en så dårlig kvalitetskontroll som det vi faktisk finner hos mange produsenter av programvare. Et ikke-trivielt program er en svært komplisert kunstruksjon, og er som sådan svært sårbar for feil. Systematisk testing og feilsøking er en forbløffende umoden og lite anvendt disiplin. Kvalitetskontroll kan og bør selvsagt omfatte mer enn en kontroll av at programmet vårt gjør det det er ment å gjøre, men vi holder fokus på koden i denne modulen.

Testing kan bety så mangt, f.eks.:

  • Brukertesting for å se om brukeren forstår hvordan oppgaver skal utføres/problemer løses.
  • Funksjonstesting for å se om løsningen faktisk løser de problemene den skal løse.
  • Integrasjonstesting for å se om løsningen lar seg installere/integere i de omgivelsene den er ment å fungere i.
  • Kodetesting for å sjekke at den involverte programkoden faktisk gjør det den skal, algoritmene fungerer, metodene leverer det de skal og koden gir relevante feilmeldinger/advarsler ved feilfunksjon.

Problemområdet er stort og vi skal i deissee modulene fokusere på en teknikk for testing av relativt små kodemoduler, og for den saks skyld samlinger av slike moduler.

Det er ikke mulig å snakke om testing uten å sitere en av pionerene i datafaget: Edsger W. Dijkstra. [1] , [2] Han sa for over 30 år siden mye som kan leses med stort utbytte også idag, se referanser nedenfor. En av de tingene han er sitert på er:

Program testing can be used to show the presence of bugs, but never to show their absence!

En konsekvens av dette er at vi aldri kan påstå at et program er feilfritt. Vi kan i beste fall hevde at det er "godt nok". Det er gjort mange forsøk opp gjennom datafagets levetid å angripe programkonstruksjon fra et abstrakt matematisk vinkel for å forsøke å finne programmeringsteknikker der en kan bevise at programmet gjør det som er spesifisert. Den praktisk nytten av dette er liten. Det vi nok kan si som en konsekvens av denne tenkingen er at det finnes programmeringsstiler som er bedre enn andre med tanke på å minimalisere feil. Strukturet programmering med alt det innebærer, f.eks. at alle blokker skal ha en inngang og en utgang er en del av dette.

I praktisk programmering sitter vi med Dijkstras sitat som premiss for vårt testarbeid, vår kvalitetskontroll.

XP (eXtreme Programming) er en utviklingsfilosofi som setter sterkt fokus på testing: "Skriv testen før koden". Vi ser også at testverktøy og testeknikker blir en vanligere del av de språkene og de utviklingsmiljøene vi bruker. Mesteparten av dette har referanser tilbake til et arbeid som er gjort av Ken Beck [3] . Det er fra dette arbeidet vi finner begrepet Unit slik som det er brukt i JUnit for Javatesting, PyUnit for Pythontesting, JSUnit for Javascripttesting, NUnit for .Net-språkene osv.

Referanser
  1. How do we tell truths that might hurt? Edsger W. Dijkstra The University of Texas, Austin www.cs.utexas.edu/users/EWD/transcriptions/EWD04xx/EWD498.html 14-03-2010
  1. Edsger W. Dijkstra Wikiquote en.wikiquote.org/wiki/Edsger_W._Dijkstra 14-03-2010
  1. Simple Smalltalk Testing With Patterns Ken Beck www.xprogramming.com/testfram.htm 14-03-2010
Vedlikehold

Børre Stenseth, juni 2007

( Velkommen ) ( Pythontesting )