210 likes | 349 Views
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 fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén andreas.hedren@hgo.se Telefon 0498-299954.
E N D
Föreläsning 6, kapitel 6 Objekt som uppför sig som de skallKursbok: “Objects First with Java- A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén andreas.hedren@hgo.se Telefon 0498-299954
Objekt som beter sig korrekt Den här föreläsningen: • Test • Avlusning/Debugging • Automatisera test • Att skriva för att kunna underhålla
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
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
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
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)
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
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
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.
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
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.
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.
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
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();
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
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.
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
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
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
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
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