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:

Ett koordinatsystem i x-y-planet med en rektangel och några punkter

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 ska returnera heltalet 1 om punkten ligger inuti rektangeln, och heltalet 0 om den ligger utanför.

Exempel:

Utförande

Hämta programmet inuti.c. Det innehåller en implementation av funktionen inuti, och en main-funktion som gör att man kan provköra funktionen genom att skriva in testfall för hand.

Ändra 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 med e-post. (Inte på papper. Det är så svårt att provköra då.)

Om samarbete på inlämningsuppgifterna: Varje grupp (som normalt består av en eller två studenter) ska göra en egen lösning, och skicka in den, men det är inte förbjudet att samarbeta eller fråga andra studenter om hjälp. Däremot ska man i så fall tydligt ange vilka som man samarbetat med. Varje lösning måste ange namnet på alla som bidrog i arbetet. Samarbete är alltså tillåtet, men måste redovisas.

Några tips


Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se), 12 mars 2012