Forord Denne testrapporten beskriver testingen som har blitt utført i løpet av prosjektet. Vi har gjennom hele utviklingsprosessen testet koden manuelt ved hjelp av debugging og ved kjøring med sammenligning av forventede og faktiske resultater. Vi har også laget et enhetstest-prosjekt for å teste Web API-et. 1 Manuell funksjonstesting Den manuelle testingen har testet de ulike funksjonene til de forskjellige prosjektene i løsningen. Testene har blitt utført kontinuerlig, og testene har blitt gjort om igjen for hver utvidelse eller endring av kode. Under følger en oppsummering av resultatene fra siste gang testene ble gjennomført. 1.1 Testing av Gatherer Test Beskrivelse Resultat Innhenting CBIS Programmet mottar data fra CBIS, men kun Innhenting Tellus Programmet mottar data fra Tellus testet på testdatabasen Innhenting TimeOut Automatisk innhenting Konvertering fra Tellus Konvertering fra CBIS Håndtering av timeout-exception; programmet skal forsøke å hente data om igjen Programmet henter automatisk data fra både Tellus og CBIS, og sender dette videre til konvertering og lagring Programmet konverterer automatisk data fra Tellus til objekter av intern domenemodell Programmet konverterer automatisk data fra CBIS til objekter intern domenemodell, men kun testdatabasen til CBIS, men kun testet på den 2
Automatisk konvertering Henting av produkter som skal slettes Programmet konverterer data både fra CBIS og Tellus, og samler alt i en Collection før det sendes til lagring Programmet skal hente data om hvilke produkter som skal slettes noe mangelfulle testdatabasen, men kun testdatabasen til CBIS, men simulert data fra CBIS pga. mangelfull testdatabase 3
1.2 Testing av SaveToDB Test Beskrivelse Resultat Lagring av nye produkter Programmet lagrer nye produkter, inkludert alle tilhørende objekter Håndtering av eksisterende produkter Håndtering av modifiserte produkter Håndtering av full oppdatering Slette et produkt Logging av produkter Logging av oppdateringer Exception-logging Programmet skal ikke lagre produkter som allerede finnes, dersom de ikke skal oppdateres Programmet skal, på produktene som er modifisert siden siste lagring, slette alle lagrede data og legge inn de nye Programmet skal kunne gå igjennom og oppdatere alle produktdataene, og beholde produktenes id-er Programmet skal slette et produkt og dets tilhørende objekter basert på liste av id-er Programmet skal logge hvert produkt som er lagt til, oppdatert eller slettet Programmet skal logge når oppdateringer er kjørt, og hva slags oppdatering det er Programmet skal skrive alle reelle exceptions til fil 1.3 Testing av Web API Test Beskrivelse Resultat Opphenting av data Programmet klarer å hente ut produkter inkludert alle tilhørende objekter fra databasen 4
Konvertering av data Kall på alle produkter Kall på ett produkt Kall på produkter i nærheten Kall på alle lokale organisasjoner Kall på alle produkter i et område Programmet klarer å konvertere dataene fra domenemodellobjekter til objekter av APImodellen API-et gir ut alle produkter på et språk via en http-request API-et gir ut et bestemt produkt på et bestemt språk API-et gir ut produkter innenfor et visst område basert på latitude og longitude API-et gir ut liste av alle lokale organsisasjoner i databasen API-et gir ut alle produkter på et språk innenfor et område, men noe treg, men noe treg 5
2 Testing av tidsforbruk for innhenting, konvertering og lagring Etter mistanke om at lagringen tok lenger tid enn det som virket naturlig, gjennomførte vi flere tester for å måle hvor lang tid programmet brukte. Dette gjorde vi ved å opprette og skrive ut timestamps når programmet startet og når det var ferdig, for så å regne ut differansen. Som tabellen nedenfor viser, fikk vi redusert tidsbruken kraftig ved full oppdatering av 1900 produkter; først fra 19 timer til 10 timer, og så ned til kun 8 minutter. 2.1 Testing av tidsforbruk Dato Test av Antall produkter Tid 31.03 Innhenting og konvertering 3 min 02.04 Innhenting, konvertering og lagring til tom database 04.04 Innhenting, konvertering og full oppdatering 07.04 Innhenting, konvertering og lagring til tom database etter optimalisering 07.04 Innhenting, konvertering og full oppdatering etter optimalisering 09.04 Innhenting, konvertering og full oppdatering etter at vi åpner ny forbindelse til databasen for hvert produkt 10.04 Innhenting, konvertering og oppdatering av oppdaterte produkter 40 min 19 timer 30 min 10 timer 8 min 5 min 6
3 Automatisk enhetstesting av Web API-et Vi opprettet et eget enhetstestprosjekt for å teste kontrollerne og logikken i API-et. Prosjektet har en testklasse per ApiController i API-et, og en eller flere testmetoder per Get-metode. Testene manipulerer logikk-laget via en konstruktør-parameter til å hente data fra DataAccessStub-klassen istedenfor å hente data fra databasen. Testprosjektet tester altså kontrollerne, logikken og mappingen fra domenemodellen til API-modellen. Testene ble sist kjørt 09.05.2014. 3.1 Enhetstester Test Beskrivelse Resultat GetLokalOrgsTest Hente liste av lokale organisasjoner GetNullProductsByCategoryTest GetNullProductsByCountyTest GetNullProductsByMunicipalityTest GetNullProductsByPostTest GetNullProductsNearbyTest GetProductsByCategoryTest Håndtere at det ikke finnes produkter i en kategori Håndtere at det ikke finnes produkter i et fylke Håndtere at det ikke finnes produkter i en kommune Håndtere at det ikke finnes produkter i et postnummerområde Håndtere at det ikke finnes produkter innenfor det avgrensede området i nærheten av konsumenten Hente liste av produkter innen en kategori GetProductsByCountyTest Hente liste av produkter innen et fylke GetProductByLangIdTest Hente et produkt basert på språk og id GetProductsByLocalOrganizationTest GetProductsByMunicipalityTest Hente liste av produkter basert på lokal organsisasjon Hente liste av produkter basert på kommune 7
GetProductsByPostTest Hente liste av produkter basert på postnummer GetProductsByLangTest Hente liste av produkter basert på språk GetProductsByLangIdNullTest Håntere at det ikke finnes et produkt med oppgitt id og språk GetProductsByLangNullTest Håndtere at det ikke finnes produkter i oppgitt språk GetProductsNearbyTest Hente liste av produkter i nærheten av konsumenten 4 Konklusjon Alle tester har blitt gjennomført med akseptable resultater. Vi har ikke kunnet kjørt så nøyaktige tester på behandling av data fra CBIS som vi skulle ønsket, siden vi ikke har fått tilgang til noe annet enn testdatabasen. Vi har likevel ved hjelp av simulerte data fått et inntrykk at av programmet fungerer godt. Enkelte deler av Web API-et er heller ikke like raskt som ønskelig, og da spesielt når man henter ut alle produkter som finnes på et bestemt språk, men det er lite sannsynlig at dette skal hentes ut ofte. Resten av testene har derimot gitt godkjente resultater, og vi er spesielt fornøyde med reduseringen av tidsforbruket fra 19 timer til 8 minutter ved en full oppdatering av databasen. 8