C: Inlämningsuppgift 3, Automatiserad testning
Den här uppgiften handlar om "professionalism i programmering",
och kräver bara ganska måttliga kunskaper i C-programmering.
Om man går campuskursen (men inte distanskursen) finns det en deadline,
när uppgiften ska vara inlämnad.
Bakgrund
Vi har
redan lärt oss
att man måste testa sina program,
och att det är en ganska svår konst att hitta på lämpliga testfall.
Dessutom räcker det inte med att köra igenom sina testfall en enda gång.
Varje gång man gjort en ändring i programmet,
till exempel för att rätta ett fel,
kan man ha haft sönder något annat.
Därför bör man köra igenom alla testfallen åtminstone en gång efter varje ändring.
Det är opraktiskt att skriva in alla testfallen för hand varje gång.
Därför vill man så långt som möjligt automatisera testerna.
I verkligheten kan man behöva särskilda verktyg för att kunna köra tester automatiskt,
till exempel om man testar ett grafiskt gränssnitt med fönster och knappar.
I den här övningen ska vi prova på ett ganska enkelt sätt att provköra en funktion i ett C-program,
nämligen genom att helt enkelt skriva en main-funktion som får anropa funktionen ett antal gånger,
och kontrollera att resultatet blir det förväntade.
Specifikation
Har vi träffat bollen med racketen?
Man behöver två punkter för att ange en rektangel,
till exempel de två punkterna (x = -1.5, y = 2) och (x = 5, y = 4.9)
i den här figuren:
Punkten (x = 1, y = 3) ligger inuti den rektangeln,
och punkten (x = 2, y = 0.5) ligger utanför.
Funktionen inuti avgör om en punkt ligger inuti eller utanför en rektangel.
Som parametrar tar den sex flyttal med dubbel precision (double):
först x- och y-värdena för en punkt,
och sen x- och y-värdena för två punkter som anger en rektangel.
Den returnerar heltalet 1 om punkten ligger inuti rektangeln,
och heltalet 0 om den ligger utanför.
Exempel:
-
Anropet inuti(1, 3, -1.5, 2, 5, 4.9) ska returnera 1.
-
Anropet inuti(1, 3, 5, 4.9, -1.5, 2) ska returnera 1.
-
Anropet inuti(2, 0.5, 5, 4.9, -1.5, 2) ska returnera 0.
Utförande
Hämta programmet inuti.c.
Det innehåller funktionen inuti,
och en main-funktion som gör att man kan provköra funktionen
genom att skriva in testfall för hand.
Gör om main-funktionen så att den provkör ett antal testfall mot funktionen,
utan inblandning av användaren.
Den ska jämföra resultatet av funktionen med de förväntade resultaten,
och så fort den hittar ett testfall som misslyckades
(dvs, gav ett annat resultat än det förväntade)
ska den skriva ut ett meddelande om detta.
Använd de testfall som du anser behövs för att testa funktionen på ett bra sätt.
Redovisning
Skicka in din main-funktion
(och ytterligare kod, om du lagt till något mer)
till
läraren,
antingen på papper eller med e-post.
Några tips
-
Tänk på att tanken med automatisk testning är att den ska vara just
automatisk. Användaren ska inte behöva mata in något.
-
I ett programmeringsprojekt har man kanske tusentals funktioner, och
när man ändrat något i en av dem vill man förstås dels köra alla sina
tester på den funktionen, men också på alla andra funktioner i hela
projektet, för det kan uppstå följdfel. En lösning som är ganska
vanlig är att man varje dag checkar in de ändringar man gjort i ett
källkodshanteringssystem, och sen byggs och provkörs programmet
automatiskt på natten. Då körs alla tester. När man kommer till jobbet
nästa dag kan man kolla upp om programmet gick att bygga och om
testerna hittade några fel.
Fungerar ditt testprogram i det scenariot?
-
Uppgiften består egentligen av två delar:
- Hitta på testfall.
- Skriv programmet som provkör funktionen med dessa testfall.
Thomas Padron-McCarthy
(Thomas.Padron-McCarthy@oru.se),
22 november 2008