Göm menyn

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. Om from utelämnas sker en sökning från alla ord till to
  • 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 om from 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