Laboration: Whitebox- och blackboxtesting

Relevanta dokument
Tentamen i Introduktion till programmering

Ordlistor, filhantering och ut på webben. Linda Mannila

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Datalogi, grundkurs 1

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Föreläsning 5 Programmeringsteknik DD1310. Modulen doctest. Exempel. Doctest Dictionary Filhantering

Datalogi för E Övning 3

Översikt. Stegvis förfining. Stegvis förfining. Dekomposition. Algoritmer. Metod för att skapa ett program från ett analyserat problem

729G04 Programmering och diskret matematik

Introduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner

DD1314 Programmeringsteknik

Grundläggande datalogi - Övning 1

Erfarenheter från labben

Introduktion till programmering SMD180. Föreläsning 5: Fruktbara funktioner

729G04 Programmering och diskret matematik. Föreläsning 7

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

Uppgifter teknik HT17 (uppdaterad v. 40)

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion

DD1310/DD1314/DA3009 Programmeringsteknik LÄRANDEMÅL... Vilka läser kursen? ...FLER LÄRANDEMÅL. Föreläsning 1

Använda Python Laboration 1 GruDat, DD1344

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

Introduktion till programmering SMD180. Föreläsning 8: Listor

Föreläsning 2 Programmeringsteknik och C DD1316

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Tenta i Grundläggande programmering DD klockan

1/15/2013. DD1310/DD1314/DA3009 Programmeringsteknik. Lärandemål... Vilka läser kursen? ...fler lärandemål VARFÖR? Föreläsning 1

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

Arrayer (fält)

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

Sammanfattning. Listor. List-manipulering. Matris. /home/lindahlm/activity-phd/teaching/11dd1310/exercise3/exercise3.py September 13, 20111

729G04 Programmering och diskret matematik

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Språket Python - Del 2 Grundkurs i programmering med Python

Användarhandledning Version 1.2

729G74 - IT och programmering, grundkurs. Dugga.

Övning 1 - Abstrakta datatyper

729G04 Programmering och diskret matematik. Python 3: Loopar

Några saker till och lite om snabbare sortering

F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

Objektorienterad programmering i Java I

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Python. Vi har ofta behov av att behandla datastrukturer på ett enhetligt sätt så att vi kan göra samma sak i flera olika program.

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Installera Anaconda Python

Multipel tilldelning. Introduktion till programmering D0009E. Föreläsning 6: Iteration. while-satsen. Kom ihåg. Snurror kontra rekursion

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Repetition i Python 3. Exemplen fac. Exemplen fac motivering. Exemplen fac i Python

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

Kurslitteraturen. C-nivå Villkorssatser [kap 8] if & elif & else and & or Loopar [kap 9] for

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

Tenta (TEN3) i kursen 729G04 Programmering och diskret matematik 5 feb 2016, kl 14:00-18:00

Bakgrund. Bakgrund. Bakgrund. Håkan Jonsson Institutionen för systemteknik Luleå tekniska universitet Luleå, Sverige

TDDE44 Programmering, grundkurs

Skolan för Datavetenskap och kommunikation PROGRAMMERINGSTEKNIK FÖRELÄSNING 18

MMA132: Laboration 2 Matriser i MATLAB

725G61 - Laboration 3 Metoder och abstrakta datatyper. Johan Falkenjack

Att skriva till och läsa från terminalfönstret

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

Tentamen , Introduktion till Java, dtaa98, dtea53

Värmedistribution i plåt

Robotar i NXc. En laboration med Mindstormrobotar. Sammanfattning KUNGLIGA TEKNISKA HÖGSKOLAN

Pythons standardbibliotek

Översikt. Installation av EasyPHP 1. Ladda ner från Jag använder Release Installera EasyPHP.

Visual Basic, en snabbgenomgång

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Sätt att skriva ut binärträd

TDDC74 Lab 02 Listor, sammansatta strukturer

Tentamen, EDAA10 Programmering i Java

Tentamen TEN1 HI

Övningsuppgifter kapitel 8

Programmering för språkteknologer II, HT2014. Rum

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

MicroPython Ett textbaserad programmeringsspråk för Micro:bit

Python vecka 41-42: Individuell programmering

Programmering för språkteknologer II, HT2011. Rum

Läsöversikt. Föreläsningar 2-6. Genomförande av laborationer

Problemlösning och algoritmer

TDDI16 Datastrukturer och algoritmer. Algoritmanalys

Malmö högskola 2007/2008 Teknik och samhälle

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

Objektorienterad programmering i Java

Text och strängindexerade fält Grundkurs i programmering med Python

Introduktion till programmering D0009E. Föreläsning 1: Programmets väg

Länkade listor, stackar och köer

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Sökning i ordnad lista. Sökning och sortering. Sökning med vaktpost i oordnad lista

Föreläsning 1 & 2 INTRODUKTION

Laboration A Objektsamlingar

DEL 1 För att få godkänt på tentan (betyg 3) måste du lösa minst fem av sju uppgifter i denna del.

Uppgifter till tenta i 729G04 Programmering och diskret matematik. 17 december 2015, kl 14:00-18:00

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python TDDE24 Funktionell och imperativ programmering del 2

Idag: Centrerad utskrift. Granskning. DD1311 Programmeringsteknik med PBL. Granskning Felhantering GUI. Föreläsning 15.

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT Lars Larsson Algoritmer 1

TENTAMEN I PROGRAMSPRÅK -- DVG C kl. 08:15-13:15

729G04 Programmering och diskret matematik TEN kl 8-12

Transkript:

Tilda11 höstterminen 2011 Laboration: Whitebox- och blackboxtesting Mål med laborationen Du ska lära dig begreppen white-box testing och black-box testing Du ska öva dig på att konstruera testfall Du ska öva dig på att testa program som någon annan har skrivit Du ska för två program hitta både några testfall som fungerar som förväntat och några som inte gör det Introduktion Det är första gången vi genomför den här labben. Om du kör fast kanske det innebär att vi inte har förklarat något tillräckligt bra. Om du behöver hjälp eller har frågor går det bra att skicka ett mail till Diana på följande adress: dianaeks@kth.se. Tveka inte att höra av dig om du har frågor! Den här labben ska genomföras och redovisas individuellt men det är ok att diskutera problemen tillsammans med en kamrat. Om testning I den här labben ska du öva dig på två olika sätta att felsöka program: white-boxtesting (glassboxtesting) och black-boxtesting. Dessa metoder används både för att hitta fel och förebygga fel. Skillnaden är att i white-boxtesting ser du källkoden, ungefär som du är van vid att felsöka dina egna program och i black-boxtesting är källkoden dold. Om systemet BlackBoxTesting I den här laborationen kommer du att testa två program. Du kommer att få problemformuleringarna till båda men källkoden får du bara till det första problemet. Du ska testa dem genom att skicka indata till programmen och jämföra producerad output med förväntad output. För att systematiskt kunna testa program använder du dig av programmet BlackBoxTesting. Detta program tar tre parametrar: den första är namnet på problemet, andra är namnet på din indatafil och tredje är namnet på filen med förväntad output. Programmet kommer köra en gång för varje rad som finns i inputfilen. indata.txt förväntad_output.txt BlackBoxTestsystemet Jämförelse av förväntad output och verklig output.

När systemet har jämfört den verkliga outputen från programmet med den förväntade (som du skickade in) kommer resultatet att presenteras i en tabell. Nedan följer ett exempel: INPUT EXPECTED ACTUAL AGREE? OUTPUT OUTPUT 'hejsan' 'Hejsan java!' 'hej java!' No 'en lång rad som'...(0) 'Hejsan java!' 'hej java!' No '<nothing>' 'Hejsan java!' '<nothing>' No De två första kolumnerna motsvarar de filer du har skickat in till systemet. Den tredje visar den output som programmet du testar verkligen producerade. Den sista kolumnen svarar helt enkelt på frågan om förväntad output (kolumn 2) är samma som verklig output (kolumn 3). Det finns några specialfall som kan uppstå i tabellen: Fotnoter (som på rad 2) dyker upp då en post i tabellen är för stor för att få plats. Alla rader i tabellen som inte har kunnat visas i sin helhet i summeringstabellen presenteras efter att tabellen har visats i en lista. Taggen <nothing> (som i sista raden i exemplet) indikerar att indata eller utdata saknas för en rad i tabellen. Kan exempelvis uppstå om in.txt och ans.txt har olika antal rader. Taggen <Time Limit Exceeded> (fanns inte i exemplet ovan), som indikerar att programmet tog för lång tid att köra för en viss input, om denna dyker upp är det möjligt att det har uppstått en oändlig loop. Uppgifter 1. White-boxtest av binärsökning (a) Studera uppgiftsformuleringen i appendix 1. (Observera att du inte ska programmera någon egen lösning, du behöver bara testa den lösning som redan finns!) (b) Ta en titt på lösningsförslaget i appendix 2 (c) Hitta på testdata för problemet. Spara indata i en fil, exempelvis bin_in.txt. Spara förväntad utdata i en annan fil, exempelvis bin_ans.txt. Du kör testprogrammet från terminalfönstret. Använd följande kommando: /info/tilda11/testlabb/blackboxtest BinSearch bin_in.txt bin_ans.txt Om du får mycket output på skärmen kan det vara bekvämare att pipa in resultatet till en egen fil, tex så här:

/info/tilda11/testlabb/blackboxtest BinSearch bin_in.txt bin_ans.txt > res.txt (d) Dra slutsatser av resultatet. Fortsätt att testa tills du är nöjd. Vid redovisningen: Visa testdata och körningsresultat för åtminstone 8 testfall, i några av dessa testfall ska programmet fungera som förväntat och i några ska det inte fungera som förväntat. 2. Black-boxtest av Select-problemet Utförs på samma sätt som förra uppgiften, steg (a) till (d), men denna gång är inte källkoden tillgänglig. (Du ska inte heller denna gång programmera någon lösning utan endast testa ett program som redan finns.) Problemlydelsen finns i appendix 3. Om du exempelvis döper dina testfiler till select_in.txt och select_ans.txt kan programmet testas med: /info/tilda11/testlabb/blackboxtest Select select_in.txt select_ans.txt Vid redovisningen: Visa testdata och körningsresultat för åtminstone 8 testfall, i några av dessa testfall ska programmet fungera som förväntat och i några ska det inte fungera som förväntat. 3. Reflektiva frågor: (a) Det är ofta inte rimligt att testa alla möjliga indata. Hur väljer man ut lämpliga testfall om man vill ha så få testfall som möjligt men ändå känna att man har testat det mesta? (b) Påstående: Det går inte att bevisa att ett program fungerar som det ska med BlackBoxTestning. Håller du med om det? Förklara varför med minst ett argument. (c) Kan man bevisa att ett program inte fungerar med BlackBox testing? (d) Vilka slutsatser kan man dra om programmet visar TimeLimitExceeded i tabellen? (e) Man kan tänka sig att skriva testfallen till ett program först och skriva själva programmet sist. (Så kallad test-first- och test-last programmering). Antag att det hade varit obligatoriskt att testa kursens labb 6 (formelkoll) med test-first eller test-last men att man fick välja metod själv. Skulle du i så fall välja test-first eller test-last? Förklara varför. (Svara på frågan även om du inte har gjort labb6 ännu) Redovisningen Denna laboration ska du redovisa muntligt för Diana. Boka tid genom att maila och föreslå en tid som passar dig. Före redovisningen ska du dessutom maila dina svar till dianaeks@kth.se. Det räcker med kortfattade skriftliga svar på uppgift 3. Dina svar kommer att anonymiseras och kan komma att användas som exjobbsunderlag och kursförbättring.

Appendix 1. Problemformulering för binärsökning Skriv ett program som implementerar binärsökning. Programmet ska läsa in en sträng på formen [intarray], söktnyckel och returnera den indexposition där nyckeln förekommer. Indexeringen börjar från 0. Om nyckeln inte förekommer ska -1 returneras. Exempel på körning: >python BinarySearch.py [1,2,3],1 0 >python BinarySearch.py [1,2,3],4-1 2. Föreslagen lösning: Binsearch.py # -*- coding: utf-8 -*- #This file may contain bugs! from sys import stdin def binsok(listan, nyckel): '''Söker i "listan" efter "nyckel". Returnerar indexet där nyckeln hittades, -1 om den inte hittades''' vanster = 0 hoger = len(listan)-1 found = False while vanster <= hoger and not found: mitten = int((vanster + hoger)/2) if listan[mitten] == nyckel: found = True return mitten else: if nyckel < listan[mitten]: hoger = mitten else: vanster = mitten return found def getarrayandkey(string):... return int_array, key def main(): inrad = stdin.readline().strip() array,key = getarrayandkey(inrad) print(binsok(array,key)) try: main() except ValueError: print ("Felaktigt format")

3. Problemformulering för Select-problemet Skriv ett program som implementerar select-problemet. Detta problem tar en heltalsarray och ett heltal, k som indata. Dessa hämtar programmet genom att läsa in en sträng på formen [intarray], k. Programmet ska sedan skriva ut det k:te minsta elementet i arrayen. Om k är 1 ska exempelvis det allra minsta elementet returneras. Om det finns flera exemplar av samma element kommer olika k att kunna ge samma resultat. Om k är större än antalet element ska texten För stork k visas. Om k är mindre än 1 ska texten För litet k visas. Om indata inte är på rätt format ska texten Felaktigt format visas. - Se exemplen nedan! Exempel på körning: >Select [1,3,2,4], 2 2 [1,1,5],1 1 [1,1,5],2 1 [1,2,3], 0 För litet k [1,b,3], apa Felaktigt format [1,2,3], 4 För stort k