Indledende Programmering Uge 5 - Efterår 2006 Om at udvikle korrekte og pålidelige programmer Susanne Lindros.

Slides:



Advertisements
Lignende præsentationer
Automatiseret GUI-test Lars Kjølholm Testnet maj 2009.
Advertisements

Anskaffelse af ny teknologi
Hvordan bruger jeg MinInstitution?
Hvordan programmerer man?? STREAM - en model. Programmører arbejder ofte i teams Hver programmør arbejder på sin del af en større helhed.
Begreber og Redskaber 6. Afprøvning Formål: •Ekstern afprøvning (Funktionstest). •Hvordan dokumenterer man afprøvning i en rapport. •Hvordan konstuerer.
Brugervenligheds test. n ewline ønsker at gøre deres web- side mere brugervenlig.
DProg2 E Programmering 2 dProg2 E2010
Test First Development
07 – Kort om OO Introduktion.
Sikkerhed/Otto Knudsen 1 Diagnostics  Debug af web-applikationer.
Indledende Programmering Uge 2 - Efterår 2006 Selektioner og interaktion mellem objekter Susanne Brix Lindros.
Hvordan man skriver koden.
VOOP, 8 april Refleksion i objekt orienterede programmeringssprog Mandag 8/ Kasper Østerbye.
Tietgen Skolen Kvalitet og kvalitetssikring Review Test.
Mød Microsoft – for udviklere & arkitekter Visual Studio, Express og Team System Niels Hilmar Madsen Microsoft
Introduktion/Otto Knudsen 1 Overblik WebForms ASP.NET.
FEN IntroJava AAU1 Opsamling: afvikling af Java-programmer Input fra keyboard og fil Fra en prompt Fra BlueJ Fra NetBeans.
Objektorienteret programmering
18 – Java Server Faces. 2 NOEA2009Java-kursus – JSF 2 Web-applikationer - 1 Brugere interagerer med en Web-browser Browseren sender forespørgsler til.
Trigonometrisk Lommeregner
1 Bestanddele i en Windows form-løsning GUI kontroller (eng.: controls) & komponenter (eng.: components) Almindelige egenskaber, metoder & hændelser for.
Forelæsning 3.1 Collections Javas for-each løkke
Interfaces – brug. Overblik Tidligere: –Interfaces Comparable gør det muligt at bruge Collections metoderne –min, max, sort, … –Algoritmemønstre Find.
Items 4, 14, 24, 34, 44, 54 Orange gruppe Liv, Jonas, Thorkil, Søren S og Martin D.
Mønstre En lille introduktion. Singleton Tilgå et objekt igennem klassereference i stedet for objektreference.  Overflødiggør referencer til objektet.
GP 8, 24/ Grundlæggende programmering Efterår 2001 Forelæsning 8 onsdag 24/ kl. 9:15 – 12:00.
Objekter og klasser Rasmus D. Lehrmann DM
Interaktionsformer En begrebsmæssig model kan understøttes med forskellige interaktionsformer Interaktionsformen fastlægger centrale egenskaber: Hvordan.
Struktureret ProgramUdvikling MM 5
Comparable Students German Students Composite Pattern State Pattern Observer Pattern Collections Interfaces Abstrakte klasser Design Patterns.
8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java.
11 - Exceptions. 2 NOEA2009Java-kursus – Exceptions Hvad er en exception? En undtagelse. Typisk en fejl der opstår runtime Afbryder det normale programflow.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
KF04 GRAY Item 2, 12, 22, 32, 42, 52. Consider a builder when faced with many constructor parameters Item 2.
9. Interfaces. 2 Nordjyllands Erhvervakademi Objectives “Good class design starts with good application design — how many classes, do they relate.
GP9, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 11 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
Forelæsning 7.1 – repetition
Effective Java Blå gruppe. Item 18: Interfaces frem for abstrakte klasser Kan implementeres i klasser der ikke nedarver Eksisterende klasser kan nemt.
Begreber og Redskaber 3. Plan for idag Om metoder, parametre, returværdier Overblik over klasser,objekter,nedarvning Et par ord om objekt-orientering.
I o p o DAIMI, AU, November 1999Programkonstruktion I9E.1 Konstruktion og brug af klasser – en stak og en HP-regnemaskine push pop.
 Jens Bennedsen 2002Objektorienteret systemudvikling GRASP mønstre Basale ansvarsplaceringsregler.
DAIMIIntroducerende objektorienteret programmering3B.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
 Henrik B. Christensen, 1999Introducerende objektorienteret programmering8B.1 Interfaces En ren kontrakt.
 Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.1 Interfaces En ren kontrakt.
Fejlfinding Kunsten at finde og rette fejl. DAIMIIntroducerende Objektorienteret Programmering10C.2 Taxonomi  Ingen skriver programmer uden fejl!  Fejl.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6A.1 Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Trinvis forfinelse Systematisk, gradvis udvikling af programmer.
Klassehierarkier Specialisering vha. subklasser. dIntProg, E05Klassehierarkier.2 Oversigt Eksempler på specialisering –Aktør, Koreograf, Skuespiller,
Indledende Programmering Uge 6 - Efterår 2006
Interfaces Afkobling af programkomponenter (eksempel: Comparable)
Objektorienteret analyse og design Ó Bennedsen 2001 Design - part Programmering og systemudvikling Lektion 7 Design - part 2.
Kari Rye Schougaard, Ph.d.-stud. Værktøjer og Teknikker, 2006 A A R H U S U N I V E R S I T E T DATALOGISK INSTITUT Java på 20 minutter (eller lidt mere)
Programmering med interfaces Separering af specifikation, anvendelse og implementation.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
 Jens Bennedsen 2001Multimedie programmering10B.1 Interfaces En ren kontrakt.
 Jens Bennedsen 2001Multimedie programmering4.1 Definition af begreber Interface, implements, klasse.
 Jens Bennedsen 2001Multimedie programmering3B.1 Specifikationer Betingelser, specifikationer og JavaDoc.
DAIMIIntroducerende Objektorienteret Programmering8B.1 Interfaces En ren kontrakt.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
 Jens Bennedsen, 2003, revideret af EE Introducerende objektorienteret programmering MVC Et mønster for grænseflader.
Forelæsning Uge 10 – Torsdag
1.09 Dokumentation.
Forelæsning Uge 5 – Mandag
Afprøvning (test) Vigtigt hvis man ønsker programmer af høj kvalitet
1.08 Test.
Quiz – Uge 3 – mandag – første time
1.08 Test.
IOT – Elkedel på internettet
Dokumentation.
Parametrisering En kort introduktion.
Præsentationens transcript:

Indledende Programmering Uge 5 - Efterår 2006 Om at udvikle korrekte og pålidelige programmer Susanne Lindros

Plan for Automatiseret Test Kvalitetskriterier Testplanlægning Automatiseret test med JUnit Om at indbygge vedligeholdelsesvenlighed Debugging –Skrivebordstest –Testudskrifter –BlueJ’s debugger At teste er at lede efter tilstedeværelsen af fejl. At debugge er at finde ud af hvorfor det fejler.

Kvalitetskriterier Vedligeholdelsesvenlighed Skriv kode så du undgår fejl i første omgang Skriv kode der gør det let at finde og rette de fejl der alligevel opstår Midler til at opnå vedligeholdelsesvenlighed –Kommentarer, strukturering, modularisering, veldefinerede grænseflader Korrekthed og pålidelighed Programmet leverer logisk korrekte resultater og opfører sig altid på samme måde. F.eks. går det ikke pludselig ned engang imellem Midler til at opnå korrekthed og pålidelighed: –Finde fejl (de er der altid) ved at teste programmet –Rette fejl ved at debugge programmet

Fejltyper og testtilfælde Syntaksfejl: fanges af oversætteren Logiske fejl: forsøges fanget ved tests Testtilfælde: –Find de principielt forskellige situationer som programmet skal kunne håndtere Husk både positive og negative tests Husk grænsetilfældene

Oversigt over testtilfælde Gå metoderne igennem og se på de involverede værdier (husk grænsetilfælde, positive og negative tests) MetodeTesttilfældeForventet resultat makeAppointment()Ledig dagAftale registreret kl 9 makeAppointment()Booking af allerede optaget tid Ny aftale ikke registreret makeAppointment()Booking af 2 timers aftale kl 11 hvor der findes en 1times aftale kl 12 Ny aftale ikke registreret findSpace()Ledig dag med start 9Returnerer 9 findSpace()Fuldbooket dagReturnerer -1

Automatiseret Test Manuel test (evt. med BlueJ – kap 6.3) –Man må selv checke at programmet giver de rigtige resultater –Usikkert fordi man overser fejl Fejlrettelser forbedrer ikke altid programmerne –Fejlen rettes men nye fejl dukker op i stedet Regressions-test er vigtig –Efter hver ændring gentages alle tidligere tests –Sikrer at alt det der virkede før rettelsen stadig virker Regressions-test kræver automatiseret test –Et program udfører testen og kontrollerer resultaterne

JUnit test Unit Testing: –Test af de enkelte enheder, f.eks. klasser og metoder JUnit: –Java API, der understøtter regressionstest baseret på Unit Testing –Integreret i BlueJ –Kan downloades fra og anvendes uden for BlueJwww.junit.org

Basis strukturen i JUnit En testklasse for hver klasse i programmet Testmetoder i testklassen, der tester de enkelte testtilfæde Testmetode checker om tilstanden af et objekt før og efter udførelsen af én eller flere metoder er som forventet Assert metoderne fra JUnit API’et anvendes til at udføre dette check, f.eks. assertEquals()

Basis strukturen i JUnit Testklassens fixture (test objekter) kan oprettes i setUp() metoden ”Skelettet” af testklassen genereres automatisk Testmetoderne og testklassens fixture genereres ved ”indspilning”

Automatiseret Test med JUnit Skabelon for JUnit test klasse public class DayTest extends junit.framework.TestCase { // Opretter test fixture. Bliver kaldt inden hver testmetode protected void setUp() { } // Nedlægger test fixture. Bliver kaldt efter hver testmetode protected void tearDown() { } // Testmetode: Checker metode i klasse under test public void testDoubleBooking() { }

Vedligeholdelsesvenlighed Midler: –Kommentarer, strukturering, modularisering, veldefinerede grænseflader Modularisering – hvorfor? –Modulerne kan udvikles individuelt –Lettere at ændre, teste og debugge Klar specificering af modulernes interfaces –Gør dem lettere at udvikle (parallelt?) –Gør dem lettere at integrere

Modularisering i en lommeregner De enkelte moduler behøver ikke at vide noget om hinanden: –Brugergrænsefladen kunne være en GUI eller en hardware enhed –Den aritmetiske logik kunne være implementeret som hardware eller software

Metode signaturer som interface // 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();

Debugging Flere måder at finde og rette fejl på: –Inspektion af kildeteksten (Verbal walkthrough) –Trinvis udførelse af programmet og observation af variablernes værdiskift (tilstandsskift) Vha. debugger værktøj (chapter. 3.13) Vha. skrivebordstest (Manual walkthrough) –Indsæt testudskrifter i programmet (Print statements) Opgave 5 – Trace af TicketMachine

Inspektion af kildeteksten Verbal walkthrough Forklar nogen andre hvad din metode eller klasse laver –Måske finder de fejlen –Måske finder du selv fejlen mens du forklarer Tilsvarende formel metode: “inspections”

Test og debugging hvad skal jeg vælge? Test: –Automatiser hvor det er muligt –Vælg teknikker der ikke ændrer koden Debugging: –Vælg helst teknikker der ikke ændrer koden