TDDE22 Datastrukturer och algoritmer
Ht1 2023
TestLab
TestLab är ett verktyg som försöker hjälpa till med testning av era lösningar till laborationerna i kursen. Det är inspirerat av artikeln Executable Examples for Programming Problem Comprehension. Detta är ett experiment för i år, så det är inte obligatoriskt att använda verktyget under laborationerna, men det kan underlätta testningen. Hör gärna av er om ni använder verktyget och säg vad ni tycker.
Idé
Verktyget är tänkt att hjälpa till med skapandet av relevanta tester. Programmet läser in en uppsättning testfall och säger två saker: dels ifall testfallen är korrekta (dvs. att de matchar den specifikation som finns i laborationerna), och dels ifall testfallen är intressanta. Intressanta testfall är i det här fallet testfall som hittar buggar i en av de felaktiga implementationerna som verktyget känner till.
För att detta ska fungera, finns det alltså till varje laboration ett eller flera korrekta program, och ett eller flera felaktiga program. Målet för er är att skriva testfall som dels stämmer överens med de korrekta programmen, och dels hittar de problem som finns i de inkorrekta problemen. Lyckas ni med det så har ni skrivit en bra testsvit!
Användning
Verktyget finns på datorerna i SU-salarna i mappen /courses/TDDE22/test/
. Det
enklaste sättet att använda det på är att lägga till modulen som finns genom att köra:
module add /courses/TDDE22/module
Detta gör att ni kommer åt kommandot testlab
i den terminalen där ni skrev
kommandot. Vill ni att programmet ska vara åtkomligt varje gång ni loggar in, och i alla
terminaler kan ni använda:
module initadd /courses/TDDE22/module
Det kan krävas att ni loggar ut och sedan in igen för att modulen ska laddas ordentligt.
TestLab kan sedan köras genom att skriva testlab
i terminalen. Kommandot tar två
parametrar enligt nedan:
testlab <lab> <testfil>
Där <lab>
är den lab ni vill testa, och <testfil>
är
namnet på er fil med testfall. För att testa de testfall som finns i
filen lab2_tests.txt
kan man alltså skriva:
testlab lab2 lab2_tests.txt
Testfall
Testfallen skrivs i en vanlig textfil med valfri texteditor. Filen består av ett eller flera
testfall avgränsade med en rad med minst två bindestreck (----
). Varje testfall
består i sin tur av en uppsättning parametrar. Parametrarna kan komma i vilken ordning som helst
och de skrivs antingen som:
nyckel: värde
eller som nedan ifall flera rader av data ska matas in:
key\
line1
line2
Notera indenteringen på raderna som följer key\
.
Varje laboration har sitt eget indataformat, vilket beskrivs här nedan:
Lab 2 - AVL-träd
Varje testfall ska innehålla två parametrar: insert
och remove
. Testramverket sätter först in alla värden som anges
efter insert
, och tar sedan bort de som står efter remove
. Sedan
kontrollerar det om trädet ser korrekt ut. Två enkla testfall kan se ut som nedan:
insert: 5 1 8
remove: 8
----
insert: 5 1 8
remove: 1
Lab 4 - Ordkedjor
Varje testfall kan innehålla följande parametrar:
dictionary
Namn på den fil som innehåller ordlistan som ska användas. Kan också vara en lista av ord som ska användas.from
Startordet i sökningen. Omfrom
utelämnas sker en sökning från alla ord tillto
to
Slutordet i sökningen.expected_length
Antal ord i den väg som vi förväntar oss att programmet hittar. Längden 0 motsvarar att ingen lösning finns.expected_first
Det ord vi förväntar oss är först i vägen vi hittar. Kan utelämnas omfrom
finns med.expected_last
Det ord vi förväntar oss är sist i vägen vi hittar. Kan utelämnas.
Testramverket kommer också att titta på den vägen som finns och se ifall det är en korrekt
ordkedja. Nedan finns ett par exempel på hur testfall kan se ut. Notera att rader som börjar med
en fyrkant (#
) är kommentarer:
dictionary: simple.txt
from: aaaa
to: aabb
expected_length: 3
# These are optional:
expected_first: aaaa
expected_last: aabb
----
dictionary: simple.txt
to: aaaa
expected_length: 4
expected_first: babb
# This is optional:
expected_last: aaaa
----
# It is possible to inline the dictionary as well.
dictionary\
aula
gula
gala
gama
jama
sten
to: aula
expected_length: 5
expected_first: jama
# This is optional.
expected_last: aula
----
dictionary\
aaaa
zzzz
from: aaaa
to: zzzz
# 0 means "no solution"
expected_length: 0
Testa er egen lösning
När ni har skapat många bra testfall som hittar alla buggarna i de felaktiga programmen har ni
en bra testsvit för att testa ert eget program. Det går såklart att göra genom att manuellt
testa de testfallen som finns i testfilen, men det är tråkigt och blir lätt fel. Därför
kan testlab
hjälpa till även med detta!
Du kan be testlab
att köra dina tester på din lösning genom att lägga till namnet
på din kompilerade fil sist i kommandoraden. Exempelvis:
testlab lab2 tests.txt AVLTest
eller
eller
testlab lab4 tests.txt Main
Då kommer som sagt alla tester som finns i filen tests.txt
att köras mot din
implementation i stället för de referensimplementationer som finns. testlab
kommer
i slutändan att skriva ut alla testfall som misslyckades, och en liten förklaring till varför de
misslyckades.
Sidansvarig: Magnus Nielsen
Senast uppdaterad: 2023-08-08