Læringsmål for forelesningen

Like dokumenter
class Book { String title; } class Dictionary extends Book { int wordcount; } class CartoonAlbum extends Book { int stripcount; }

Arv. Book book1 = new Book(); book1. title = "Sofies verden" class Book { String title; } class Dictiona ry extends Book {

EKSAMEN I FAG TDT4100 Objekt-orientert programmering. Fredag 3. juni 2005 KL

Læringsmål for forelesningen

TDT4100 Objektorientert programmering

INF1010 våren januar. Objektorientering i Java

Læringsmål for forelesningen

UNIVERSITETET I OSLO

Introduksjon til objektorientert programmering

EKSAMEN I FAG TDT4100 Objekt-orientert programmering. Fredag 3. juni 2005 KL

IN1010 våren januar. Objektorientering i Java

BOKMÅL Side 1 av 7. KONTINUASJONSEKSAMEN I FAG TDT4100 Objektorientert programmering / IT1104 Programmering, videregående kurs

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

Repitisjonskurs. Arv, Subklasser og Grensesnitt

TDT4100 Objektorientert programmering

Kapittel 8: Programutvikling

TDT4100 Objektorientert programmering

Post-it spørsmål fra timen (Arv og subklasser)

TOD063 Datastrukturer og algoritmer

Algoritmer og datastrukturer E Løkker i Java

Account. valideringslogikken. Det er vanligst å bruke en såkalt unchecked exception (usjekket unntak), som IllegalArgumentException.

EKSAMEN I FAG TDT4100 Objektorientert programmering. Fredag 2. juni 2006 Kl

Leksjon 7. Filer og unntak

Læringsmål for forelesningen

Fakultet for informasjonsteknologi, Institutt for datateknikk og informasjonsvitenskap

GJENNOMGANG UKESOPPGAVER 9 TESTING

Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier. 11. okt Siri Moe Jensen Inst. for informatikk, UiO

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

Eksamen Oppgave a) public class DayTime { public final int hours, minutes;

UNIVERSITETET I BERGEN Det matematisk-naturvitenskapelige fakultet

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

UNIVERSITETET I OSLO

IN1010 V19, Obligatorisk oppgave 2

UNIVERSITETET I OSLO

TDT4100 Objektorientert programmering

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

UNIVERSITETET I OSLO

IN1010 våren 2018 Tirsdag 15. mai. Repetisjon av subklasser og tråder. Stein Gjessing Institutt for informatikk Universitetet i Oslo

Klasser skal lages slik at de i minst mulig grad er avhengig av at klienten gjør bestemte ting STOL ALDRI PÅ KLIENTEN!

Eksamen INF1010 V2009 Del B prøveeksamen V2010 Vekt 60 %

UNIVERSITETET I OSLO

Seminaroppgaver IN1010, uke 2

Hvorfor objektorientert programmering? Objektorientert programmering i Python: Introduksjon. Læringsmål uke 7. Undervisning og pensum IN1000

INF1010 våren 2019 Onsdag 30. januar. Mer om unntak i Java (med litt repetisjon av I/O først)

Forklaring til programmet AbstraktKontoTest.java med tilhørende filer Konto.java, KredittKonto.java, SpareKonto.java

Hvorfor objektorientert programmering?

Side 1 av 11, prosesser, tråder, synkronisering, V. Holmstedt, HiO 2006

Objektorientert design av kode. Refaktorering.

INF Uke 10. Ukesoppgaver oktober 2012

INF Notater. Veronika Heimsbakk 10. juni 2012

La oss begynne med en repetisjon av hva som skjer når du kjører Javaprogrammet

Læringsmål uke 7. Objektorientert programmering i Python: Introduksjon. Innhold uke 7. Lite tilbakeblikk: Programflyt og skop

Læringsmål for forelesningen

INF våren 2017

INF Obligatorisk innlevering 5

Løse reelle problemer

INF1000: Forelesning 7. Konstruktører Static

TDT4100 Objektorientert programmering

programeksempel Et større En større problemstilling Plan for forelesingen Problemstillingen (en tekstfil) inneholdt ordet "TGA"

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I

INF1000: Forelesning 7

INF1000 Metoder. Marit Nybakken 16. februar 2004

AlgDat 12. Forelesning 2. Gunnar Misund

Jentetreff INF1000 Debugging i Java

KONTINUASJONSEKSAMEN I FAG TDT4100 Objekt-orientert programmering. Onsdag 17. august 2005 KL

Konstruktører. Bruk av konstruktører når vi opererer med "enkle" klasser er ganske ukomplisert. Når vi skriver. skjer følgende:

UNIVERSITETET I OSLO

LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring. Else Lervik, januar 2012.

UNIVERSITETET I OSLO

Eksamensoppgave i TDT4100 Objektorientert programmering med Java

Løse reelle problemer

Praktisk informasjon. Repetisjon: While-løkker. I dag. INF1000 (Uke 5) Mer om løkker, arrayer og metoder. Oblig 2 er lagt ut

TDT4100 Objektorientert programmering

INF 1010, vår 2005 Løsningsforslag uke 11

Leksjon 6. Objekt. Evt. importsetninger. public class Klasse { Konstruktør. Objektmetoder. Innkapsling (private): set-og get-metoder

IN1010 V18, Obligatorisk oppgave 5

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Velkommen til. INF våren 2016

UNIVERSITETET I OSLO

Object interaction. Innhold. Abstraksjon Grunnleggende programmering i Java Monica Strand 3. september 2007.

Objektorientert Programmering Ekstraordinær eksamen 2014

Dagens tema: Mer av det dere trenger til del 1

INF Innleveringsoppgave 6

Videregående programmering 6

Del 3: Evaluere uttrykk

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

Obligatorisk oppgave 4: Lege/Resept

Eksamen. Objektorientert Programmering IGR 1372

Kapittel 9: Sortering og søking Kort versjon

INF1010 våren Grensesnitt (interface)

TDT4100 Objektorientert programmering

UNIVERSITETET I OSLO

INF1010 våren Interface (Grensesnitt)

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

TDT4100 Objektorientert programmering

Innhold uke 7. Objektorientert programmering i Python: Introduksjon. Lite tilbakeblikk: Programflyt og skop. Lite tilbakeblikk: Funksjoner er uttrykk

OO-eksempel. Modellen ser slik ut: Studenter + antstudenter : int = 0

Transkript:

Læringsmål for forelesningen Objektorientering Regler for oppførsel Java-programmering JUnit-testing Eclipse Opprette JUnit-test og kjøre den 1

Pensum Testing dekkes ikke av Liang! Er en viktig del av programvareutvikling og en viktig del av pensum! Pensum for dette er: Forelesingsnotater Øvingene, inkludert testene som legges ved Enkel teori å lære, men krever øving! 2

Først litt repetisjon! Innkapsling og metode-grensesnitt Innkapsling av et objekt, ved å definere et metode-grensesnitt som sikrer riktig bruk, er et sentral poeng innen objektorientering 3

Illustrasjon av innkapsling object Client Methods Data 4

Et grensesnitt er mer enn et sett metoder, metodene må også garantere en bestemt oppførsel! For å gjøre beskrivelsen av et grensesnitt komplett, må en også beskrive regler for hvordan metodene skal oppføre seg Høres vanskelig og abstrakt ut? La oss se på et enkelt eksempel 5

Regler for oppførsel Noen metoder leser tilstanden, mens andre endrer tilstanden. En måte å beskrive oppførsel på er å vise hvordan endringsmetodene skal påvirke resultatene fra lesemetodene. Eksempler: etter konto = new SavingsAccount() konto.deposit(1000) vil konto.getbalance() returnere 1000 videre, etter konto.withdraw(750) vil konto.getbalance() returnere 250 6

Regler for oppførsel Ved systematisk gjennomgang av metodene, kan en formulere mange slike regler Regler formulert på denne måten, kan kodes som et testprogram som setter en tilstand, utfører endringer, og tester resultatet av lesinger og sier fra om feil 7

Regler for oppførsel 1. konto = new SavingsAccount() => konto.getbalance() == 0 2. konto.deposit(1000) => konto.getbalance() == 1000 3. konto.deposit(1000) => konto.getbalance == 2000 4. konto.withdraw(1500) => konto.getbalance == 500 5. konto.withdraw(500) => konto.getbalance() == 0 6. konto.withdraw(500) => konto.getbalance() == 0 8

Mål Vi ønsker objekter som oppfører seg som planlagt! Reglene definerer ønsket oppførsel Testing er nødvendig for å sjekke at objektene oppfører seg i henhold til reglene Systematisk testing må til for å avdekke feil i koden som vi lett kan overse 9

Testing så langt i kurset Frem til nå har vi testet metoder vha.: main-metoder som skiver ut tilstanden til objektene etter at vi har gjort endringer utskrift i metodene som viser endringer metodene gjør kjøring i debug-modus JExercise Lite systematisk De fleste har sikkert opplevd at det kan finnes feil som først blir synlige etterhvert som kun oppstår i spesielle tilfeller m.m. 10

Eksemplet kodet som testmetode 11 Ikke veldig elegant, men uten andre testverktøy er dette en veldig nyttig og praktisk metode.

Hjelpemetoder for testing En hjelpemetode for å sjekke testresultat og si fra om feil hjelpemetode Vi fletter testkode inn i koden som setter opp objektstrukturen vår testkode Det er bedre å skille testkoden fra programkoden og gjøre mer systematisk testing av ulike samhandingsmønstre. JUnit er et rammeverk for dette testing som dere skal lære å bruke... 12

Regler og testmetoder Et grensesnitt er mer enn et sett metodedefinisjoner, metodene må også garantere en bestemt oppførsel! For å gjøre beskrivelsen av et grensesnitt komplett, må en også beskrive regler for hvordan metodene skal oppføre seg. Reglene kan kodes som testmetoder som sjekker resultatet av å utføre endringer på objektene våre. 13

Testing som del av programvare-utvikling Testing som en integrert del av koden er en lite egnet metode for systematisk testing Det er best å skille testkoden fra programkoden og gjøre mer systematisk testing JUnit-rammeverket er basert på denne teknikken og den skal dere lære å bruke. 14

JUnit-testing Enhetstesting (eng: unit testing) er en systematisk testing av enkeltklasser eller grupper av tett koblede klasser JUnit er et rammeverk for enhetstesting av Javaklasser, metoder og grupper av klasser En JUnit TestCase er en klasse med testkode som tester oppførselen for en eller flere andre klasser En TestCase består i hovedsak av et sett test-metoder, som hver typisk fokuserer på en eller et lite antall regler for oppførsel. 15

JUnit TestCase En TestCase-klasse er en helt vanlig Javaklasse, men må skrives etter spesielle regler for å kunne kjøres av JUnit-rammeverket arver (extends) junit.framework.testcase definerer et test-metoder som har public-modifikatoren har navn som må begynne på test ikke har noen parametre test-metodene blir kalt en etter en og hver metode vil typisk fokusere på én spesifikk regel for oppførsel kan i tillegg definere metodene setup og teardown setup blir kalt før første test-metode og blir gjerne brukt til å opprette objektinstansene en skal teste på teardown blir kalt etter at test-metodene er kjørt 16

La oss prøve JUnit Lager oss en enkel Teller-klasse og en TestCase-klasse med testkode 17

Counter-klassen En klasse som teller opp til en max-verdi count-metoden øker telleren med 1 getcount returnerer teller-verdien ismax sjekker om vi har nådd maximumsverdien 18

19 Ønsket oppførsel

Opprette TestCase 20 Testen for <klasse> heter <klasse> Test

Testmetoder Testing implementeres vha. testmetoder prefiks test Hver metode tester én regel (så langt det er mulig) Testing av konstruktør: assertequals-metoder brukes for å sjekke regler assertequals(<forventet verdi>, <faktisk verdi>) eller ved bruk av double: assertequals<forventet verdi>, <faktisk verdi>, <slakk/delta>); evt. variant med melding (String) som første parameter 21

Testklassen To testmetoder En for konstruktør En for count-metoden JUnit-rammeverket kaller testmetodene i sekvens Resultatet angis i et eget panel 22

assert-metoder 23 asserttrue(boolean) rapporterer feil hvis boolean er false assertfalse(boolean) rapporterer feil hvis boolean er true assertnull(object) rapporterer feil hvis referansen IKKE er null assertnotnull(object) rapporterer feil hvis referansen er null assertequals() for objekter, strenger og basistyper rapporterer feil hvis de er forskjellig fail() (tilsvarer asserttrue(false)) gir feil direkte, brukes ifm. brutt kontrollflyt Overlagring er benyttet for assert-metodene Med og uten String-verdi for feilidentifisering Samme metodenavn uavhenging av datatypene for verdiene som sammenlignes Etc.

Konsistens mellom objekter I svært mange tilfeller finnes det avhengigheter mellom objekter, slik at en må sikre konsistens på tvers av objekter Eksempel: Person-klasse med partnerattributt (ekteskap/partnerskap) en person kan ha 0 eller 1 partner en person kan ikke ha seg selv som partner (!) dersom x er partneren til y, må y være partneren til x setpartner(person partner) må kodes slik at partner-attributtet i mer enn ett Person-objekt må holdes konsistent mye vanskeligere enn en skulle tro 24

Partner-eksempel Før #1.setPartner(#2) og etter: #1: Person #2: Person #1: Person Deretter #1.setPartner(null): #2: Person #1: Person #2: Person #1: Person #2: Person Før #1.setPartner(#4) og etter: #1: Person #3: Person #1: Person #3: Person #2: Person #4: Person #2: Person #4: Person 25

Hvordan kodes dette i en JUnit-test? 26

Partner-eksempel #1: Person Dersom en Person settes til sin egen partner, skal det kastes en IllegalArgumentException Tre tilfeller: 1. ingen exception: feil 2. IllegalArgumentException: riktig! 3. en annen type Exception Hvordan teste det? 27

try { p1.setpartner(p1); fail(); } catch (IllegalArgumentException e) { } catch (Exception e) { fail(); } Tre varianter try { p1.setpartner(p1); fail(); } catch (Exception e) { asserttrue(e instanceof IllegalArgumentException); } 28 Exception ex = null; try { p1.setpartner(p1); } catch (Exception e) { ex = e; } asserttrue(ex instanceof IllegalArgumentException);

Læringsmål for forelesningen Objektorientering Regler for oppførsel Java-programmering JUnit-testing Eclipse Opprette JUnit-test og kjøre den 29