Unit testing Gruppe 2: Kjartan Haugen Jon Gunnar Bjørkmo

Slides:



Advertisements
Liknende presentasjoner
Repetisjon innkapsling static tabell av primitiv datatype LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring.
Advertisements

Tabeller av objekter Klassen ArrayList
14 okt. 2003, Arne Maus Inst. for informatikk, UiO
Uke 10 - Sortering, og hvordan lage en klasse for et klassebibliotek 21 okt. 2003, Arne Maus Inst. for informatikk, UiO.
Målinger generelt •I et moderne samfunn brukes målinger i mange ulike sammenhenger •Eksempler: –Sammenligne priser, lønninger –Høyde: størrelse på klær.
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
1 Litt om OO og programmering Arne Maus. 2 OO og Java (og C++, C#)  Arven fra Simula  Programstruktur i Java  Generering av objekter  Beskyttelse.
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Java 4 Mer om forgreninger While-løkker Ole Christian Lingjærde
Objekt, Instanser og referanser + litt til. Objekter  Instanser  En instans er et objekt av en bestemt klasse  Instanser blir laget ved å kalle klassens.
Objektorientert programmering i PHP del 2
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
IS-102 Klassedefinisjoner
Oblig4 - forklaringer Arne og Ole Christian.
© Lars-Erik Kindblad.  Et platformuavhengig verktøy for å automatisere build prosesser.  Støttes og drives av Apache Software Foundation.  Kommer ferdig.
Tema: Introduksjon Hvorfor Velocity? Installasjon Velocity VS. JSF / JSP Eksempler Oppsumering.
C# for javaprogrammerere
En gang til!? .
Grunnleggende testteori
Verifikasjon og validering
Feilhåndtering. Feil er uunngåelige! Erfaring viser at feil i dataprogrammer som består av mer enn noen få linjer ikke er til å unngå. For å få et godt.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 2.10 Default values – standardverdier ved oppstart MER OM: Sub-prosedyrer og sub-funksjoner.
Gjennomgang av prøven Tidsangivelse. Prøven deles ut Vi fyller ut øvelsen sammen.
Fag LO189D - Objektorientert programmering Objektorientert programmering© Else Lervik, TISIP - HiST/IDB vår-99Leksjon 11 Applet’s Hva karakteriserer applet’sside.
Web-applikasjoner Prosjekt3 Logging Gruppe 9 Malik Muhammad Naeem Kevan Qureshi.
Introduksjon til Java 5.0. Hva er nytt i 5.0? Generiske typer For-løkke med iterator (for-hver løkke) Automatisk innpakking av primitive typer Metadata.
Design Patterns Iterator & Mediator. Gruppe 8 Presentasjonsgruppe:Resten av gruppen: Marianne AtesAndrè Johansen Tom Vidar LundeHege-Kristin Johansen.
Gruppe 3 – Presentasjon 2 Henning Kristiansen, Mats Lindh, André Hauge og Vegard Simensen.
Improving Products Gruppe Presenteres av : Hege-Kristin Johansen Herman Kolås Marianne Ates Marit Finden Jonas Lillevold André Johansen Tom.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Tema: Test First Positivist: Det som ikke kan måles, eksisterer ikke! Reduserer sjanser for defekter! Gir en oppdatert ”TODO-liste” Gir trygghet til å.
INF 295 Algoritmer og datastrukturer Forelesning 7 ADT Lister, Stakker og Køer Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 2 - kapittel 1 Hans F. Nordhaug (Ola Bø)
Dynamiske nettsider PHP Del 2 – Kontrollstrukturer.
Java 3 Mer om uttrykk Terminal I/O Forgreninger
1 Kap 06 Ordnede / Sorterte lister Oppgave nr 06_02 Polynomer Klassehierarki Javadokumentasjon.
Å lese tall fra en fil, klassen Scanner 1.Et Scanner-objekt kan knyttes til et strømobjekt eller til en streng. 2.Kan skanne teksten etter data av ulike.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 18.9 Lesing av data fra fil og skriving av data til fil. Side 411 – 4.. Kap 4.
Oppgaver til kodegenerering etc. INF-5110, 2013 Oppgave 1: Vi skal se på koden generert av TA-instruksjonene til høyre i figur 9.10 i det utdelte notatet,
Programmering sif8005. Praktisk informasjon  Innleveringsfrist øvinger: mandag kl  Alle øvinger er obligatoriske  Studass tilgjengelig 6 timer.
Fra Mitose til Happy-meal Innføring i “Prototype Patterns” og “Builder Patterns” Gruppe 2 Carl-Erik Herheim Leendert Wienhofen Olav Dæhli Thomas Julsen.
Tabeller Dette er en tabell, eller array. Den kan defineres sånn som dette: public int[] heltallsTabell = new int[11]; //Her er 11 tabellens lengde for.
Maintenance problems - Measuring Maintenance characteristics Software Engineering Gruppe 2 Carl-Erik Herheim Leendert Wienhofen Thomas Julsen Kjartan Haugen.
BUCS Utfordringer og valg av fokus Tor Stålhane. Rammebetingelser Første spørreundersøkelse viser at det vi gjør må kunne: Brukes sammen med UML Passe.
INF1000 (Uke 14) Resten av eksamen H03 + del av V05 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Anja B.
Objekt, Instanser og referanser + litt til. Objekter  Instanser  Kan sees på som det samme. Personen Per kan være både et objekt og en instans av klassen.
Main metoden n public static void main(String[] args){ } n Inni denne metoden skjer alt! n Det kan bare finnes en main metode per program. n Den kan ligge.
INF Objektorientert programmering
Object  Klassen i java  Alle klasser arver fra denne om ikke noe annet blir spesifisert  ArrayList.add(Object instans)  Alle elementer formes til Object.
Ekstra mange tips til Oblig 3! 12. mars 2007 Are Magnus Bruaset og Arild Waaler Inst. for informatikk, UiO.
INF1000 (Uke 14) Eksamen V06 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Arild Waaler.
Byggeklosser i java  Klassedefinisjon  Variabel deklarasjon  Metodedeklarasjoner  En ordentlig klasse  Spesielle/kryptiske skrivemåter  løkker og.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Inf1000 (Uke 10) HashMap og ArrayList
INF1000 (Uke 4) Mer om forgreninger, While-løkker
XML og JDOM Helge Furuseth XML  XML = Extensible Markup Language Basert på SGML – Standard Generalized Markup Language  HTML =
Inf1000 (Uke 5) Arrayer, filer og tekst
Finne feil - Debugging Introduksjon til sortering.
Kapittel 3 Bruk av klasser og objekt. 3.1 Å lage objekt Eit variabelnamn i Java representerer Ein primitiv verdi (f eks boolean, int ) Eit objekt (f eks.
Containerklasser – klassifikation og brug.  Michael E. Caspersen, 2001Introducerende objektorienteret programmeringContainerklasser.2 Mange objekter.
Kapittel 7 Array (lister og tabellar). 7.1 Arrayelement Array (lister, tabellar) er kjent frå VB Blir brukt til å organisere data når vi har mange dataelement.
“Industrial approach for testing (2)” Teknikker og verktøy for testing i et Scrum-team Utdrag fra Skatteetatens teststrategi Sten Aksel Heien Skatteetatens.
Iterator i Java boolean hasNext() E next() void remove()
TDT4105 Informasjonsteknologi, grunnkurs
Triks Avslutt alle klasser, metoder og løkker samtidig som du lager dem. Deklarer alle variablene/referansene på begynnelsen av klassen. Hvis du definerer.
IN3030 – Effektiv parallellprogrammering Uke 1 2. del, våren 2019
Utskrift av presentasjonen:

Unit testing Gruppe 2: Kjartan Haugen Jon Gunnar Bjørkmo Leendert Wienhofen Olav Dæhlie Thomas Julsen Carl-Erik Herheim

Unit testing Hvorfor så få tester kode Når man bør teste kode Unit testing frameworks: JUnit Et eksempel på bruk av JUnit Hvorfor så få tester kode: Det er nemlig veldig få utviklere som tar seg tid til å teste koden de lager på ein skikkelig måte Når bør man teste kode: vinkla mot Xtreme Programming Unit Testing Frameworks: Rammeverk / Verktøy for testing av kode * JUnit: Som er det mest brukte verktøyet for testing av Javakode * Eksempel: * Andre: Til slutt gi oversikt over andre verktøy/rammeverk som finnes for andre språk

A vicious cycle Hvorfor tester vi ikke kode? Høyt arbeidspress / dårlig tid Mindre stabil kode Færre tester Grunnen til at så få programmerere/utviklere tester koden sin. Ond sirkel: ..figur som kan vise grunnen til at så få tester koden sin. Mindre produktivitet og nøyaktighet

Unit testing – XP style Når bør man teste kode? Skal du legge til en ny egenskap, lag en test før du lager selve koden. Skal du fikse en feil, lag en test som påviser feilen før du reparer den. Hver gang før du integrerer koden må unit testing være 100% feilfri. ”Don’t let the fear that testing can’t catch all bugs stop you from writing tests that will catch most bugs” Ny feature: det er litt unighet om man bør skrive ein test før eller etter man utvikler koden. Fikse feil: Integrere kode: Før du begynner med Integrasjonstesting (som gr. 3 skal fortelle meir om) må unit testing være feilfri.

The official JUnit home page: http://Junit.org ”JUnit er et enkelt rammeverk for java brukt til å skrive og kjøre gjenntagende tester” The official JUnit home page: http://Junit.org JUnit innkluderer: - Assertions (Påstander): Når man vil sjekke verdier, kaller man f.eks assertTrue() og sender med en boolean som skal være sann hvis testen lykkes. - Test fixtures: Benyttes når man har to eller flere tester som opererer mot de samme objektene. - Test suites: For å kunne kjøre flere tester samtidig. - Graphical and textual test runners: - junit.awtui.TestRunner - junit.swingui.TestRunner (Grafisk) Junit.zip: Inneholder blant annet junit.jar (JUnit API), som man setter klasspath til å peke på. Assertions: ”Metoder som verifiserer resultat” (over 30 stk.) feks. : om man kaller assertEquals("23", Tall.toString(23)); -> for å teste om toString-metoden vår er riktig. Test Fixtures: Om man rellaterer til Junit sitt API: Overloade setUp() for å inititalisere variabler og Overloade tearDown() for å gjøre det motsatte.. fjerne slik at testene blir isolert ifra hverandre --- komme tilbake med eksempel --- TestSuite: JUnit tilbyr et objekt, TestSuite som kan kjøre flerie tester samtidig.

Eksempel på bruk av JUnit 1.) Subklasse av TestCase: import java.util.*; import junit.framework.*; public class SimpleTest extends TestCase { public SimpleTest(String name) { super(name); } 2.) Initialiserer objekt som benyttes i testen: protected void setUp() { collection = new ArrayList(); itr = collection.iterator(); 3.) public void tearDown(){ collection.clear(); //fjerner alle elementer 4.) En samling av påstander (Assertions): public void testEmptyCollection() { Collection collection = new ArrayList(); assertTrue(collection.isEmpty()); public void testNoSuchElementException() { try { Object o = itr.next(); fail("Should raise an NoSuchElementException"); } catch (NoSuchElementException success) {} public void testOneItemCollcetion(){ collection.add("itemA"); assertEquals(1, collection.size()); } 5.) Suite: Lager en samling av alle metodene som starter med ”test”: public static Test suite() { return new TestSuite(SimpleTest.class); 5.) Skrive en main metode som kjører testene: public static void main(String args[]) { junit.textui.TestRunner.run(suite()); 6.) Kjør testen: java SimpleTest java junit.swingui.TestRunner SimpleTest (grafisk) Formål: Teste metoder i iterator og collection (at de er riktig kodet) / At de gjør det me vil de skal gjere. setUp: initialiserer objekt. tearDown: blir kallt opp mellom hver test. testEmptyCollection: Vi påstår at at collection.isEmpty() skal returnere True testNoSuchElementException: Om itr.next() kaster unntak er testen vellykket, ellers blir fail()-kallt opp. testOneItemCollection: tester om collection.size() returnerer 1 etter at vi lagt til et element i ”collection”.

Gjennomgang av kode Walkthrough Code inspection Mindre formell Du presenterer kode og dokumentasjon for et review team, som har kommenterer og endringer. Fokuserer på å finne feil i koden, men ikke nødvendigvis endre koden der og da. Fokus på koden, ikke koderen Code inspection Mer formell metode. Arbeidsoppgaver til test team Gjennomgang av algoritmer for sjekke korrekthet og effektivitet. Gjennomgang om kommentarer samsvarer med koden. Beregning av minneforbruk eller prosesseringshastighet. I tillegg gjennomgang av interface mellom komponenter.

Hvorfor inspeksjon av kode før enhetstesting Desto tidligere en feil er oppdaget i utviklings prosessen, desto lettere og billigere er det å rette den opp. Når enhetstesting er utført, er medarbeiderne lite motivert for inspeksjon av koden. De vet at produktet virker. Kode inspeksjon kan avdekke design feil, som ikke kommer fram i enhetstesting. Du sparer resurser og penger ved inspeksjon av koden før enhetstesting.

Testing av program komponent For å teste en komponent velger vi inndata og betingelser, lar komponenten manipulere dataene, og observerer utdataene. Test case: Eksempel på hvordan man tester en komponent som er laget for å ta imot positive heltall. Komponenten må ha en test case for: Store positive heltall. Et positivt heltall. Et tall større en 0, men mindre en 1. Et positivt desimaltall med faste siffer. Null Negative tall Numeriske karakterer.

Testing versus proving Formal proof technics Uttrykker programmet ved hjelp av matematiske termer og notasjoner slik at det ikke er rom for misforståelser. Vi kan formulere programmet som et sett av teoremer og påstander(assertion), som beviser riktigheten av koden. Fordeler Vi kan oppdage algoritme feil i koden Formell forståelse av koden Vi blir tvunget til å være mer presis i beskrivelsen av datastrukturer og algoritme regler. Ulemper I mange tilfeller tar det lenger tid å bevise at koden er korrekt, en å skrive selve koden. Ikke numeriske program kan være mer kompleks å representere logisk, en numeriske. Parallelle prosesser er vanskelig å håndtere.

Branch vs Random testing Teste ulike veier. 1-2-3-4-5-6-7 1-2-3-4-5-6-1 1-2-4-5-6-7 1-2-4-5-6-1

Sammenligning av teknikker