Felsökning. Översikt. Felsökning (debugging) Kodstandard. Kommentarer. Kommentarer. Praktiska råd

Relevanta dokument
Felsökning, UML. Översikt. Java starkt typat. Typomvandling (casting) Exempelhierarki. Stark typning

Testning av program. Verklig modell för programutveckling

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Föreläsning 3 Innehåll. Generiska klasser. Icke-generisk lista ArrayList, skiss av implementering. Icke-generisk lista Risk för fel

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Objektorienterad Programmering (TDDC77)

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Tentamen ID1004 Objektorienterad programmering May 29, 2012

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Några grundläggande begrepp

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Föreläsnings 9 - Exceptions, I/O

Felhantering TDDD78, TDDE30, 729A

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Laboration: Whitebox- och blackboxtesting

Länkade strukturer. (del 2)

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Föreläsning 3. Stack

Objektorienterad Programmering (TDDC77)

Översikt. Installation av EasyPHP 1. Ladda ner från Jag använder Release Installera EasyPHP.

Överlagring, static, testning, formella metoder och undantag! Förelasning 13!! TDA540 Objektorienterad Programmering!

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

Föreläsning 10. ADT:er och datastrukturer

Objektorienterad programmering

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Klassdeklaration. Metoddeklaration. Parameteröverföring

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering

F4. programmeringsteknik och Matlab

Att skriva till och läsa från terminalfönstret

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

Testning och felhantering

Föreläsning 3. Stack

Numeriska Metoder och Grundläggande Programmering för P1, VT2014

Typkonvertering. Java versus C

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

Länkade strukturer, parametriserade typer och undantag

1 Comparator & Comparable

Objektorienterad programmering

Undantagshantering. Fördjupad Java. Undantag. Fel. Grupper av Undantag. Fånga Undantag

Undantag. Engelska: exceptions. Skansholm: exceptionella händelser

SMD 134 Objektorienterad programmering

F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander

Fördjupad Java. Undantagshantering. Fel

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Undantagshantering. Fördjupad Java. Fel. Undantag. Fånga Undantag. Grupper av Undantag

Configuration testing Why? Vad det är tänkt att koden ska göra. Performance testing Kommentarer Skriva om koden som kommentar

OOP Objekt-orienterad programmering

Föreläsning 14. Filhantering

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Objekt, klasser. Tillstånd Signatur Kommunikation Typ. Fält, parametrar och lokala variabler. Konstruktorer Metoder DAVA15

Planering av ett större program, del 2 - for och listor. Linda Mannila

729G04 Programmering och diskret matematik. Python 3: Loopar

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Arrayer (fält)

Översikt. Skriva och läsa data. Kontrollflöde. Två sorters loopar. For-loop. For-loop

Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klass

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Programmering A. Johan Eliasson

Översikt. Programmering tillämpningar och datastrukturer. Vad kursen täcker. Lärare. Rekommenderad litteratur. Kursmål 729G58 (HKGBB7)

TDDI02. Programmeringsprojekt. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Objektorienterad Programmering DAT043. Föreläsning 4 23/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Föreläsning 3-4 Innehåll

Kopiering av objekt i Java

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 1 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Föreläsning 15: Repetition DVGA02

/* * * Lösningsförslag tentamen DIT950 * Datum * */ /* * -1 - */ För samtliga gäller,se föreläsningsanteckningar.

Föreläsning 4 Innehåll

Programmering för språkteknologer II, HT2014. Rum

ID1004 Laboration 4, November 2012

Tentamen i Algoritmer & Datastrukturer i Java

Lösningar för tenta 2 DAT043,

Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Tentamen i Algoritmer & Datastrukturer i Java

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

Exceptions (undantag) Murach s: kap 7

Föreläsning 8: Exempel och problemlösning

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Föreläsning 3: Booleans, if, switch

Föreläsning 2. Länkad lista och iterator

Programmeringsteknik II

Övning vecka 6. public void method2() { //code block C method3(); //code block D }//method2

Programmering för språkteknologer II, HT2014. Rum

725G61 - Laboration 2 Loopar och arrayer. Johan Falkenjack

Föreläsning 2. Länkad lista och iterator

Klassen javax.swing.timer

Föreläsning 1. Abstrakta datatyper, listor och effektivitet

Objektorienterad Programkonstruktion. Föreläsning jan 2016

Föreläsning REPETITION & EXTENTA

Algoritmer. Två gränssnitt

Översikt MERA JAVA OCH ECLIPSE. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning

Tentamen Grundläggande programmering

Transkript:

Översikt Felsökning Praktiska råd Felsökning i IDE Javadoc Kommersiella mjukvaruprojekt Allmänt om felhantering i Java Catch - throw Systematisk testning av större system Programmering tillämpningar och datastrukturer 2 Felsökning (debugging) Kodstandard Kan följa programmet steg för steg Syftet med kodstandard Step into Step over Andra programmerare ska kunna känna igen sig i koden Regler för Breakpoints Watch Variabelnamn Indentering Placering av klammer Kommentarer TODO Var konsekvent Följ gärna Skansholm Programmering tillämpningar och datastrukturer 3 Programmering tillämpningar och datastrukturer 4 Kommentarer Kommentarer Viktigt att dokumentera För sig själv, för medarbetare, utomstående Hur tänkte jag här» Vilket problem löste jag och hur Hur koden är tänkt att användas/anropas TODO (saker som ska åtgärdas) Underlättar framtida underhåll Hjälper utomstående Förstå koden Bra verktyg i NetBeans: Tools Auto Comment Hjälper till med de olika delarna av Javadoc-kommentarer Build Generate Javadoc Genererar html-dokumentation Använda koden på rätt sätt! Programmering tillämpningar och datastrukturer 5 Programmering tillämpningar och datastrukturer 6 1

Eclipse Javadoc för hand Bra verktyg i Eclipse: Skriv in dina kommentarer i filen Project Generate Javadoc Genererar html-dokumentation Debug perspective Variables Show logical structure Tasks-fliken Expressions Watch Sedan >> javadoc MinKlass.java Om du vill att även privata variabler och metoder ska dokumenteras: >> javadoc -private MinKlass.java Programmering tillämpningar och datastrukturer 7 Programmering tillämpningar och datastrukturer 8 Kommentarer Kommentarer Exempel på Javadoc kommentar: /** * Creates an iterator for LinkedList objects. * @return the new iterator object. */ public MyListIterator iterator() { return new MyListIterator(0); Exempel på kommentar som inte kommer att tas med i Javadoc: /* Checks that there is at least one element in the list * */ Kortkommando i Eclipse: Alt-Shift-J else { // we are now at the beginning of the list first = lastret.next; Programmering tillämpningar och datastrukturer 9 Programmering tillämpningar och datastrukturer 10 Kommersiella mjukvaruprojekt Större projekt Mjukvaror har lång livscykel Måste kunna förändras (p.g.a. förändrade krav) Underhållas (fel rättas) Oftast inte av samma team som utvecklade systemet! Programmering tillämpningar och datastrukturer 12 2

Systemets livscykel Aktiviteter som ingår Olika faser Vattenfallsmodellen (waterfall model) Steg-för-steg progression Moment 1 avslutas innan moment 2 Unified software lifecycle model Överlappande arbetsflöden (workflows) Kravspecifikation Design Systemarkitektur Komponentnivå (paket) Detaljerad nivå (individuella klasser) Implementation Test Enhets integrations systemtest Installation (utbildning av användare) Underhåll Programmering tillämpningar och datastrukturer 13 Programmering tillämpningar och datastrukturer 14 Kravspecifikation Design Analys av kundens krav på systemet Typer av användare Datorvan teknisk personal Administratörer Användningsfall Use cases, dvs. hur en typisk sekvens av interaktion med systemet kan se ut Från användarhåll Önskemål om funktioner som systemet ska tillhandahålla På olika nivåer Systemarkitektur Delsystem Programenheter Kan implementeras av en eller ett par programmerare Ex. abstrakta datastrukturen lista Funktioner eller klasser Kommunikation mellan dessa Programmering tillämpningar och datastrukturer 15 Programmering tillämpningar och datastrukturer 16 Structured design Objektorienterad design (OOD) Fokus på vad ska utföras (actions) Dela upp i delproblem Delarna är lättare att lösa var för sig Modellering av ingående objekt (t.ex. klasser) och deras metoder Substantiv i kravspec objekt Fokus på data-enheter Vilka enheter som behövs Verb i kravspec metoder Vad som ska kunna utföras på dessa enheter Programmering tillämpningar och datastrukturer 17 Programmering tillämpningar och datastrukturer 18 3

Implementering Programfel Förverkliga de klasser och metoder som ska finnas enligt designen Kommentera koden Syfte med koden, dess funktion Vilka argument (namn, beskrivning) Vilket resultat (namn, beskrivning) Ytterligare kommentarer om hur koden är tänkt att användas @throws IllegalArgumentException om Syntaktiska fel Upptäcks av kompilatorn Fel under körning (exceptions) Upptäcks när programmet kraschar Logiska fel Upptäcks kanske aldrig! Leder kanske inte till krasch, utan till konstigt beteende Ex. avslutar loop efter ett varv Programmering tillämpningar och datastrukturer 19 Programmering tillämpningar och datastrukturer 20 Exempel på logiskt fel Exempel på logiskt fel public boolean containselement(el el, MyList lista) { while (i<lista.size()) { if (lista.get(i)==el) { return true; else { return false; public boolean containselement(el el, MyList lista) { while (i<lista.size()) { if (lista.get(i)==el) { return true; return false; Programmering tillämpningar och datastrukturer 21 Programmering tillämpningar och datastrukturer 22 Syntaktiska fel Fel under körning Glömda eller felaktigt placerade { ; Använt fel operator på primitiva datatyper Kan orsakas av dels yttre, dels inre omständigheter Yttre orsaker Ex. if (sträng == Kalle ) istf sträng.equals( Kalle ) Användaren ger felaktigt in-argument Glömt return ; i en metod Odeklarerade, oinstansierade variabler Filen finns inte Inre orsaker Loop över array Index hamnat utanför Oändlig loop har ätit upp allt minne Programmering tillämpningar och datastrukturer 23 Programmering tillämpningar och datastrukturer 24 4

Fel under körning Exeptions Bearbetningen stoppas Exceptions genereras genom throw JVM skapar ett exception-objekt Info om typ av fel Sträng-meddelande Var felet uppstod Kedjan av anrop som ledde hit (stack trace) Variabelbindningar i detta ögonblick else { throw new NoSuchElementException(); Programmering tillämpningar och datastrukturer 25 Programmering tillämpningar och datastrukturer 26 Typer av exceptions Exceptions Checked (utanför din kontroll) Beror på yttre omständigheter File not found Unexpected end of file (EOF) IO (t.ex. fel vid inmatning) Unchecked (ofta självförvållat) Mildare programmeringsfel Index out of bounds Totalkrasch Out of memory Checked (tom fil, IO-fel, inmatningsfel) Måste hanteras av programmeraren Unchecked (null pointer, index out of ) Behöver inte hanteras Unchecked (out of memory) Bör inte hanteras! Ytterligare körning av programmet kan förvärra läget Programmering tillämpningar och datastrukturer 27 Programmering tillämpningar och datastrukturer 28 Hantering av exceptions Exceptions-hierarkin Try catch try { // fråga efter och läs in ålder från inputfönster catch(ioexception ex) { System.err.println( Inmatningsfel ); // informera användaren ålder = DEFAULT_ÅLDER; // sätt till defaultvärde Programmering tillämpningar och datastrukturer 29 Programmering tillämpningar och datastrukturer 30 5

Multipla catch Multipla catch try { // fråga efter och läs in filnamn catch(ioexception ex) { catch(filenotfoundexception ex) { Går ej att nå! (ger syntax error) try { // fråga efter och läs in filnamn catch(filenotfoundexception ex) { catch(ioexception ex) { Programmering tillämpningar och datastrukturer 31 Programmering tillämpningar och datastrukturer 32 Finally Throw try { // fråga efter och läs in antal catch(numberformatexception ex) { // var ej positivt heltal finally { if (antal > MAX) { // se till att antal alltid < MAX antal = MAX; public void lägginnamn(string namn) { if (!rättformat(namn)) { throw new IllegalArgumentException(<meddelande>); // annars utför metod Ett eget fel(meddelande) genereras Programmering tillämpningar och datastrukturer 33 Programmering tillämpningar och datastrukturer 34 Mer om catch Throws Hierarki av catch-klausuler i anropskedjan Ska helst fånga upp felet där orsaken finns Störst chans att kunna åtgärda problemet där det uppstod Ex. anrop av metod med argument utanför tillåtet intervall Bäst att hantera detta hos anroparen Kanske felet orsakades högre upp i anropshierarkin? Throws: sätt att låta någon annan (t.ex anroparen till anroparen) hantera en exception public void läsdata throws IOException, EOFException { Felet uppstår här, men public void initieradata() { kastas vidare upp till try { ;.läsdata(); anroparens anropare catch (EOFxception ex) { ex.printstacktrace(); catch (IOException ex) { System.err.println(... ); Programmering tillämpningar och datastrukturer 35 Programmering tillämpningar och datastrukturer 36 6

Logiska fel i programmet Logiska fel Målet med testning En satellit störtade p.g.a. följande fel Försöka upptäcka alla logiska fel Upptäcks kanske aldrig om det ligger i en del av programmet som inte körs igenom if (höjd > maxhöjd) skickameddelandeomattmaxhöjdenäröverskriden(); Men det är ju lika bra att justera höjden på en gång, tyckte någon annan i teamet if (höjd > maxhöjd) skickameddelandeomattmaxhöjdenäröverskriden(); höjd = höjd - 1; Programmering tillämpningar och datastrukturer 37 Programmering tillämpningar och datastrukturer 38 Lärdom Strukturerad genomgång Använd alltid klammer för att markera blocken i villkorssatser Även om just nu bara en sats i blocket Designern förklarar algoritmen för andra team-medlemmar Handsimulerar programmet inför andra team-medlemmar Programmering tillämpningar och datastrukturer 39 Programmering tillämpningar och datastrukturer 40 Enhetstest (unit testing) Integrationstest Test av enskilda moduler Hur modulerna interagerar Klass Komplex metod I ett större projekt: Den kod som en enskild programmerare har skrivit Hur anrop exekveras (vad som returneras) Hur kod från olika programmerare fungerar tillsammans Testfall baseras ofta på use-cases Test av interaktion med användaren och externa enheter för specifika användningssekvenser Programmering tillämpningar och datastrukturer 41 Programmering tillämpningar och datastrukturer 42 7

Systemtest Acceptanstest Test av hela systemet som ska levereras Program ingår ofta i ett större sammanhang Ska fungera tillsammans med andra program MPEG decoder Drivrutiner Mjukvara för redigering av video Filhantering i operativsystemet Filhantering på DVD-skivan Utförs oftast hos kunden efter installation Test om systemet uppfyller funktionskraven Innehåller de funktioner som utlovats till kunden Fungerar i den miljö som kunden har (Windows) Programmering tillämpningar och datastrukturer 43 Programmering tillämpningar och datastrukturer 44 Testmetoder Metoder för att testa Blackbox-testning (funktionell testning) Testar input output relationen Tar inte hänsyn till programstrukturen White-box testning (coverage testing) Testar olika vägar i programmet Programmering tillämpningar och datastrukturer 46 White-box testning White-box (coverage) testning Målet är att testa så många alternativa vägar som möjligt men kombinationen av olika utfall på if-satser, etc. är för stort Statement coverage Alla satser ska köras under testning åtminstone en gång Tar inte hänsyn till vilken väg fram till denna programsats, dvs. hur variabler är satta Branch coverage Alla grenar (if-satser, switch, loops) körs åtminstone en gång Testar alla kombinationer på sats-nivå Path coverage (i praktiken omöjligt) Testar alla kombinationer av grenar (= alla vägar genom programmet) n grenar ger 2 n vägar för n if-satser Programmering tillämpningar och datastrukturer 47 Programmering tillämpningar och datastrukturer 48 8

Förbereda testing Förbereda testning (forts) Testdata bör bestämmas redan under analys- och design-fasen Testplan ska upprättas tidigt under design-fasen (ex.vis) strukturerad genomgång med teamet kan pågå delvis parallellt med designen Defensiv programmering underlättar Inkludera kod som upptäcker och hanterar ogiltiga data Om en metod förutsätter n > 0, testa för detta i början av metoden och generera en Exception Annars kan felet propageras, och orsaka konstigt beteende någon annanstans i programmet Kan vara svårt att spåra felet tillbaks till ursprunget Programmering tillämpningar och datastrukturer 49 Programmering tillämpningar och datastrukturer 50 Leta fel Vanliga fel (forts) Randvillkor Om n ska ligga mellan 0 och 10, testa vad som händer när n = -1 (utanför listan) 0 (i början på listan) 5 (inne i listan) 10 (i slutet på listan) 11 (utanför listan) Blir det körningsfel eller oväntade, konstiga svar från metoden? Arrayer Om element med en viss egenskap söks i array a, testa vad som händer när det sökta elementet är Först (index 0) Sist (index a.length-1) Finns ej med Fler än ett element har sökta egenskapen a är tom (har inga element) Programmering tillämpningar och datastrukturer 51 Programmering tillämpningar och datastrukturer 52 Vanliga fel (forts) Extrem programmering Loopar Kolla vad som händer om while-testet är falskt från början (= 0 loopar körs) En loop körs Om for-loopen körs till slutet Pinsamt (ibland farligt) fel: Loopen stannar aldrig Programmerare jobbar i par Den ena programmerar Den andra utvecklar testfall (utifrån kravspec) Turas om Undviker fällan att man inte ser sina egna misstag Att man inte testar de självklara fallen Programmering tillämpningar och datastrukturer 53 Programmering tillämpningar och datastrukturer 54 9

Stubs Stubs (forts) Fusk-kod innan den riktiga koden är klar Används för att simulera svar från metod i en annan modul Stub = fusk-kod för den anropade metoden Samma header som metoden kommer att ha, men förenklad kod Ex. skriv ut att du har blivit anropad, med vilka argument Returnera enkla, förutsägbara värden Sätt interna variabler enligt förenklad regel Programmering tillämpningar och datastrukturer 55 Programmering tillämpningar och datastrukturer 56 Drivers Tester Speciell anropare av en modul Testfall Deklarerar variabler, skapar och initierar objekt Anropar metoden med lämpliga argument Registrerar (och/eller skriver ut) alla output-värden Uppsättning av en miljö (variabler) + ett anrop Testsvit En samling testfall Kan köra igenom en testsvit och automatiskt jämföra resultatet Korrekt/felaktigt svar från programmet Programmering tillämpningar och datastrukturer 57 Programmering tillämpningar och datastrukturer 58 Testramverk JUnit Mjukvarumiljö för att köra igenom testsviter Bra för bl.a. regressionstest Har ändrat i en modul, hur påverkas resten av programmet? Kan köra igenom en lagrad testsvit och automatiskt registrera (rätt/fel) på varje gammalt testfall Testramverk för Java Levereras med NetBeans och JBuilder Kan även laddas ner separat från junit.org Programmering tillämpningar och datastrukturer 59 Programmering tillämpningar och datastrukturer 60 10