21
Föreläsning 6, kapitel 6 Objekt som uppför sig som de skall Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar [email protected] Telefon 0498-299948 Andreas Hedrén [email protected] Telefon 0498-299954

Föreläsning 6, kapitel 6

Embed Size (px)

DESCRIPTION

Föreläsning 6, kapitel 6. Objekt som uppför sig som de skall Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling. Fredric Ragnar [email protected] Telefon 0498-299948 Andreas Hedrén [email protected] Telefon 0498-299954. - PowerPoint PPT Presentation

Citation preview

Page 1: Föreläsning 6, kapitel 6

Föreläsning 6, kapitel 6

Objekt som uppför sig som de skall

Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling

Fredric Ragnar [email protected]

Telefon 0498-299948

Andreas Hedrén [email protected]

Telefon 0498-299954

Page 2: Föreläsning 6, kapitel 6

Objekt som beter sig korrekt

Den här föreläsningen:• Test• Avlusning/Debugging• Automatisera test• Att skriva för att kunna underhålla

Page 3: Föreläsning 6, kapitel 6

Vi måste hantera fel

• Tidiga fel är ofta syntaxfel– Kompilatorn hittar de felen

• Senare fel är ofta logiska fel– Kompilatorn kan inte hjälpa till med logiska fel

– Kallas också buggar

• En del buggar har ingen direkt uppenbar betydelse– Kommersiell programvara är sällan utan fel

Page 4: Föreläsning 6, kapitel 6

Förhindra eller Detektera(Utvecklare eller Underhållare)

• Vi kan minska sannolikheten för fel– Använd metoder för programvaruutveckling som t ex inkapsling

• Vi kan öka chanserna att hitta/detektera felen– Använd god programvaruutvecklingsed som modularisering

och dokumentation

• Vi kan utveckla vår skicklighet att hitta fel

Page 5: Föreläsning 6, kapitel 6

Testa och Avlusa

• Detta är mycket viktiga kunskaper och färdigheter• Att testa är att leta efter fel• Att avlusa (eng: debug) är att leta efter vad som är fel.• Felet kan visa sig ganska så långt från själva felet

Page 6: Föreläsning 6, kapitel 6

Tekniker för att testa och avlusa

• Enhetstest (i BlueJ) (eng: unit testing)• Automatisera test• Manuellt gå igenom koden• Utskrifter till skärmen • Avlusningsverktyg (eng: debuggers)

Page 7: Föreläsning 6, kapitel 6

Enhetstest

• Varje enhet av en applikation kan bli testad– Metod, klass, modul (Java: package)

• Kan och borde ske under utvecklingen– Att hitta och fixa tidigt sänker utvecklingskostnaden (t ex

programmerartid)

– En testsvit byggs upp

Page 8: Föreläsning 6, kapitel 6

Grunderna om att testa

• Förstå vad enheten borde göra – enhetens kontrakt– Du letar efter brott mot kontraktet

– Använd positiva test och negativa test

• Testa gränser– Noll, en, full

• Sök i en tom samling (eng: collection)• Lägg till i en full samling

Page 9: Föreläsning 6, kapitel 6

Enhetstest i BlueJ

• Objekt kan skapas av olika klasser• Enskilda metoder kan köras• Med ”inspect” får man uppdaterad information om ett

objekts tillstånd• Utforska med diary-prototype projektet.

Page 10: Föreläsning 6, kapitel 6

Automatisera test

• Att testa på ett bra sätt är en kreativ process, men…• … att testa grundligt tar tid och innebär mycket upprepningar• Regressionstest innebär att upprepa tester, d vs köra tester

igen• Att använda en test-rigg kan underlätta en del.

– Klasser skrivs som utför testerna– Kreativiteten läggs på att skapa dessa testklasser

Page 11: Föreläsning 6, kapitel 6

Automatisera test, mer

• Utforska med diary-testing projektet– Det krävs fortfarande att någon analyserar resultatet

• Utforska en högre grad av automatisering med diary-test-automation projektet– Nu behövs bara åtgärder, dvs mänsklig inblandning om fel

rapporteras.

Page 12: Föreläsning 6, kapitel 6

Modularisering och Gränsnitt

• Applikationer består ofta av olika moduler– T ex så att flera team kan jobba på dem

• Gränssnittet mellan modulerna måste vara klart specificerat.– Stöder oberoende samtidig utveckling– Ökar sannolikheten för en framgångsrik integrering.

Page 13: Föreläsning 6, kapitel 6

Modularisering i en kalkylator

• En modul behöver inte veta hur en annan modul är implementerad, dvs hur den ser ut inuti.

– Modulen som jobbar mot användaren ”User controls” borde vara ett GUI eller en hårdvarumanick som ett tangentbord.

– Modulen som gör beräkningarna ”Arithmetic Logic” kan vara mjukvara eller hårdvara

Page 14: Föreläsning 6, kapitel 6

Metodsignaturer som gränssnitt// Return the value to be displayed. public int getDisplayValue(); 

// Call when a digit button is pressed.public void numberPressed(int number); 

// Call when a plus operator is pressed.public void plus(); 

// Call when a minus operator is pressed.public void minus(); 

// Call to complete a calculation.public void equals(); 

// Call to reset the calculator.public void clear();

Page 15: Föreläsning 6, kapitel 6

Avlusning (Debugging)

• Det är viktigt att bli duktig på att läsa kod– Avlusning gör man ofta på andras kod

• Det finns tekniker och verktyg som stödjer avlusningsprocessen

• Utforska med calculator-engine projektet

Page 16: Föreläsning 6, kapitel 6

Manuellt gå igenom koden

• Relativt ovanligt– Ett low-tech sätt

– Mer kraftfullt än man kan tro

• Gå ifrån datorn!• ”Kör” ett program för hand• Hög-nivå (step) eller låg-nivå (step-into) vyer.

Page 17: Föreläsning 6, kapitel 6

Använd tabell för objektens tillstånd

• Beteendet hos ett objekt beror ofta på tillståndet• Ett felaktigt beteende beror ofta på ett felaktigt tillstånd• Skriv alla fältens värde i en tabell• Dokumentera alla förändringar efter varje att metod körts

Page 18: Föreläsning 6, kapitel 6

Verbala genomgångar

• Förklara för någon annan vad koden gör– De kanske hittar felet

– Genom att förklara så kanske du själv hittar felet

• Det finns formella metoder för att ha genomgångar eller granskningar i grupp

Page 19: Föreläsning 6, kapitel 6

Spårutskrifter

• Den mest populära metoden• Inga speciella verktyg behövs• Alla programmeringsspråk stödjer detta• Bara effektivt om rätt metoder är dokumenterade• Det kan bli väldigt mycket utsktifter• Att kunna slå av och på kräver att man tänker efter före

Page 20: Föreläsning 6, kapitel 6

Avlusare (eng:Debuggers)

• Avlusare är både språk och miljöberoende• BlueJ har en integrerad avlusare• Stödjer brytpunkter• Man kan exekvera med ”Step” och ”Step into”• Man kan se meddelandekedjor• Objektens tillstånd

Page 21: Föreläsning 6, kapitel 6

Summering

• Att program har fel är ett faktum• Bra programvruutvecklingstekniker kan minska felen• Att kunna testa och avlusa är mycket viktigt• Automatisera testerna när det är möjligt• Använd flera avlusningsmetoder