Objektorienterede metoder



Relaterede dokumenter
Objektorienterede metoder

Visual Studio Team System. Team Build en grundpille i søgen efter it-projektproduktivitet?

IT-Universitetet, Projekt- og Programledelse November 2013 AGIL PROGRAMLEDELSE

Kvalitetssikring og agile udvikling

INTERAKTIONSDESIGN PROCESSEN (KAP 9), REPETITION, KÅRING AF ÅRETS BEDSTE MUSIKVIDEO OG PROJETK

Bierhverv Ekstern Lektor på Institut for Ledelse. Uddannelse Cand. Oecon. Master i Organisationspsykologi PRINCE 2, Scrum-Master, Pædagogikum, etc.

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

SWC eksamens-spørgsmål. Oversigt

Videregående programmering i Java

Curriculum Vitae. Uddannelse: 2001 Civilingeniør fra Danmaks tekniske universitet, fagprofil: styring og regulering.

Dag 10 Flertrådet programmering

Jacob Nordfalk. Ingeniørhøjskolen i København. Nykøbing F itvisioncenter 24. februar 2004

Det vigtigste først! Dette er måske den vigtigste bog der nogensinde er skrevet om agile vs. vandfald. Muligvis fordi det vel stadig er den eneste

Databaseadgang fra Java

Kursusarbejde 2 Grundlæggende Programmering

C#, ASP.NET 4.0, HTML5, CSS3, WPF,

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11

Iterativ og Agil udvikling

Scrum er ikke Agilt! Jesper Boeg, Agile Coach, Developer, Lean Consultant, Januar 19, 2010

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation).

Test af It-komponent

extreme Programming, motivation og baggrund november 2002 november 2002 Erfaringer fra XP og non-xp projekter - ved Carsten Juel Andersen 1

Brugervejledning Avery Skabeloner i Microsoft Word. Dansk Version til -

Udfordringer og problemstillinger. En liste over de udfordringer og problemstillinger, der er ved Java og JEE udvikling

Programmering I Java/C#

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

Arkitektur for begyndere

Hvordan vælger jeg dokumentprofilen?

Software test i Socialstyrelsen. af: Jan Kristensen. Nov 2013

Notat til Statsrevisorerne om orientering om Rigsrevisionens undersøgelse af rejsekortprojektet. December 2010

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen.

Ide med Diff. Mål. Tidsplan. 1.uge: 2.uge:

Videregående programmering i Java

Bits, bit operationer, integers og floating point

Model og Metode til Programudvikling. Jens Dalsgaard Nielsen

Skriftlig eksamen i Datalogi

Singleton pattern i Java

Dokumentation. Karen-Louise Fejerskov

//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!

Bypassing the. Brian Marick

Succesfuld implementering af automatiseret test

Responsivt Design - DMAA0213. Afgangsprojekt DMAA0213

Konsulent resume. Referencer Svend Holm Henriksen IT-udviklingschef Region Syddanmark +45/

Læringsprogram. Christian Hjortshøj, Bjarke Sørensen og Asger Hansen Vejleder: Karl G Bjarnason Fag: Programmering Klasse 3.4

FØR DU TESTER TILGÆNGELIGHED PÅ HJEMMESIDER

Curriculum vitae. Personlige oplysninger. Præsentation. Projekterfaring

Curriculum Vitae PETER VILLADSEN MOBIL: RAVNSBORGVEJ 91 DK-4600 KØGE

Agil-model versus V-model set i lyset af en testers dilemmaer

Web- og serverprogrammering

Uge 5.3: (Search,) Select & implement and development methods

02101 Indledende Programmering Introduktion til Eclipse

Programmering C Eksamensprojekt. Lavet af Suayb Köse & Nikolaj Egholk Jakobsen

Synopsis: Tema: Design og vurdering af et edbsystem i samarbejde med brugere

Scrum er ikke Agilt! Jesper Boeg, Agile Coach 2. september, 2010

extreme Programming Hvad er XP?

SigmaT.

Det er muligt at chekce følgende opg. i CodeJudge: og

Undtagelseshåndtering i C#

DM507 Algoritmer og datastrukturer

Specifikationsdokument for PDF Validator API

Kursusarbejde 3 Grundlæggende Programmering

Tema: Design og vurdering af et edbsystem i samarbejde med brugere. Synopsis:

Introduktion til funktioner, moduler og scopes i Python

MySQL i Java. Tutorial lavet af Jákup W. Hansen TSU semester 05.januar 2007

Sprog billeder kortlink.dk/rudd

Første OCIT-udbud i Danmark En status fra Aarhus

Tema: Half Double i digitaliseringsprojekter

DM502. Peter Schneider-Kamp

OrCAD Capture TCL IDE med Eclipse

Hvorfor skal vi bruge objekt orienteret databaser?

SAX Simple API for XML.

Installationsguide. Integration af erhvervsdata fra NN Markedsdata til Microsoft Dynamics NAV 2015

Grundlæggende OOA - OOD

Eksempel: et ordresystem note 5 Lagdeling s. 1

Transkript:

Objektorienterede metoder Gang 13. Adrætte processer Ekstremprogrammering (XP) Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html

projektopgaven i OOM Projektvejledning Marcelo Bombaci holdbarhedsdokumentationen Peter DIMS (softwaredistributionssystem) Ilsemarie Brian baseline tool (tjekke versioner af filer) Jan Bjerregaard Madsen udenlandske vareforsendelser Torben Henrik Klarskov Morten Jens Lisbeth Friis Luftforureningsvarslingssystem Anders Jørgen et PoS system Nasser Mobaraki Andedammens Regnskab Klaus Elmquist design af procedurale mønstre Anders Unittest framework for X++

Udviklingsprojekter i virkeligheden Tre projekter jeg har været involveret i Optimal udskæring af planker rejseplanen.dk Oprensning af meterologiske data

Udviklingsprojekter i virkeligheden Optimal udskæring af træplanker Del af savskærermaskine Optimeringsopgave 1) Matematisk løsning: Lineær programmering 2) Udvikler prototype i C++ Linjestykke objekter til en kurve, "matemarisk API" 3) "joh, men DSPen kan kun tage ANSII C" 4) Konverterer til "objektorienteret" C kode (svært læselig) 5) "spild skal alt andet lige placeres i for/bag/fordeles ligeligt Linjestykke objekter med krumning 6) "Nu er APIet klar kan du skrive om til at understøtte det?" 7) Etc Nye ønsker/krav dukker op løbende afvisning eller accept?

Udviklingsprojekter i virkeligheden rejseplanen.dk rejseplanen v0 Færdigt tysk produkt Modificeret med CGI script, der modificerede HTMLen Kun station til station rejseplanen v1 Funktioner som v0 CGI script i C++ API til motor tilgængeligt fra projektstart OO design + programmering + HTML skabeloner styret af mig Prøveballon: Ingen krav om design før programmering Andre parter: 1 assistent til API kodning, 1 projektleder med kundekontakt v1 blev en stor succes

Udviklingsprojekter i virkeligheden rejseplanen v2 Adressefremsøgning (hjemmelavet), kort fra Krak, billetreservation,... Uklar mudret "magtfordeling" fra start I DSB informatik: konflikt programmør databasemand Bus tog samarbejde hyrede DSB Interaktiv(!) som kunde til DSB Informatik Problematisk kunde leverandørforhold Kunstig at én virksomhed leger kunde leverandør Java servlet til Javaprogram, der kalder "motor" med API (C) "Rigtigt projekt med kunde", prestigefuldt 1) Foranalyse (krav + estimater) 2) Analyse (nye estimater) 3) Design 4) Programmering (nye krav med ønsker om nye estimater dukker op) Ønsker om hvordan adressefremsøgning skulle fungere blev lavet om flere gange af DSB Interaktiv 5) Afprøvning Mange parter, hvem bestemmer? DSB Informatik Databasefolk Programmører (flere og flere som tiden skred frem) Projektledere (skiftende) og ledere Bus tog samarbejde DSB Interaktiv: Projektledere (skiftende) HTML designhus(e!)

Udviklingsprojekter i virkeligheden rejseplanen v2 (fortsat) Jeg siger op (med ½ års varsel) Alligevel er ingen klar til at overtage overblikket Driftsproblemer rejseplanen v3 (nuværende) Færdigt tysk produkt Nye ønsker/krav dukker op løbende afvisning eller accept?

Udviklingsprojekter i virkeligheden Oprensning af meterologiske data (Cavemet2) Interpolation fra målestationer nogle af dem upålidelige Beregningskrævende Skulle efterligne Cavemet1 (fortran) Datafiler og noget af GUI er faslagt Noget af GUI lavet, manglede motor helt Jeg kommer ind som "nødhjælp" 3 måneder før projektafslutning Mange ting uafklarede Oprensningsmetoder Skal nedbør med? Jeg vælger XP lignende metode Jeg: projektleder, designer, underviser, indpisker Parprogrammering Bedre kode Undervisning Overlevering, konsensus Masser af Unit test Nye ønsker/krav dukker op løbende accept!!!

Udviklingsprojekter i virkeligheden Oprensning af meterologiske data (Cavemet2) Unit test demo: Udregning af funktioner private double udregnfunktion(string navn, double[] fx, double[] fy, double x) { int n = 0; // søg frem til fx[n] > x while (n<fx.length && fx[n] <= x) n++; // Tjek grænser if (n==fx.length n == 0) throw new IllegalArgumentException("Funktionen "+navn+" er ikke defineret for x-værdi "+x); // De to nærmeste punkter er n-1 og n. Udregn vægtningsforholdet a // sådan at: x=fx[n-1] => a=0 og x=fx[n] => a=1 double a = (x-fx[n-1]) / (fx[n]-fx[n-1]); // interpolér mellem de to nærmeste punkter (fy[n-1] og fy[n]) double y = (1-a)*fy[n-1] + a*fy[n]; } System.out.println("udregnFunktion: x="+x+" n="+n+" a="+a+" y="+y); return y;

Udviklingsprojekter i virkeligheden Skrive testmetoden (OK, jeg gjorde det først bagefter) public void testtjekkerafnedboer_udregnfunktion() { TjekkerAfNedboer t = new TjekkerAfNedboer(); double[] fx = { 0, 1, 2, 3, 4, 5, 0, 0, 0, 0}; double[] fy = { 0, 5, 2, 3, 4, 5, 0, 0, 0, 0}; assertequals( 0, t.udregnfunktion("t",fx,fy,0 ), 0.01); assertequals( 0.5, t.udregnfunktion("t",fx,fy,0.1), 0.01); assertequals( 2.5, t.udregnfunktion("t",fx,fy,0.5), 0.01); assertequals( 5, t.udregnfunktion("t",fx,fy,1 ), 0.01); assertequals( 2, t.udregnfunktion("t",fx,fy,2 ), 0.01); assertequals( 3, t.udregnfunktion("t",fx,fy,3 ), 0.01); assertequals( 3.1, t.udregnfunktion("t",fx,fy,3.1), 0.01); assertequals( 3.6, t.udregnfunktion("t",fx,fy,3.6), 0.01); assertequals( 3.9, t.udregnfunktion("t",fx,fy,3.9), 0.01); assertequals( 4, t.udregnfunktion("t",fx,fy,4 ), 0.01); assertequals( 4.999, t.udregnfunktion("t",fx,fy, 4.999 ), 0.01); assertequals( 5, t.udregnfunktion("t",fx,fy,5 ), 0.01); try { t.udregnfunktion("t",fx,fy, -0.1 ); this.fail("bør ikke acceptere -0.1"); } catch (Exception ex) {} } try { t.udregnfunktion("t",fx,fy, 5.1 ); this.fail("bør ikke acceptere 5.1"); } catch (Exception ex) {}

Udviklingsprojekter i virkeligheden Den endelige metode public double udregnfunktion(string navn, double[] fx, double[] fy, double x) { int n = 0; // søg frem til fx[n] >= x while (fx[n] < x && n<fx.length) n++; // -1 && fx[n]<fx[n+1] // Tjek grænser if (x<fx[0] n==fx.length) throw new IllegalArgumentException("Funktionen "+navn+" er ikke defineret for x-værdi "+x); // specialtilfælde: Lige på allerførste x-punkt if (n==0) n++; // De to nærmeste punkter er n-1 og n. Udregn vægtningsforholdet a // sådan at: x=fx[n-1] => a=0 og x=fx[n] => a=1 double a = (x-fx[n-1]) / (fx[n]-fx[n-1]); // interpolér mellem de to nærmeste punkter (fy[n-1] og fy[n]) double y = (1-a)*fy[n-1] + a*fy[n]; } System.out.println("udregnFunktion: x="+x+" n="+n+" a="+a+" y="+y); return y;

Adrætte processer Adræt = letvægt Adaptiv reagere på det der 'dukker op' i modsætning til prediktiv at planlægge alt på forhånd et radikalt opgør med 'vandfaldsmodellen' Godt til Uklare, delvist ukendte eller skiftende krav Ansvarlige og motiverede udviklere Kunder, der forstår og gerne vil involveres i udviklingsprocessen Dårligt til Udviklingsgrupper med over 100 deltagere Kontrakter med fast defineret pris og funktionalitet Manifest for adræt programudvikling Individuals and interactions over processes and tools Working software over comprehensive documentation Customer collaboration over contract negotiation Responding to change over following a plan (citat fra http://agilemanifesto.org/)

Ekstremprogrammering Hyppige afleveringer Fælles metafor (sprog) Testdrevet udvikling Parprogrammering Enkelt design Refaktorering Fælles ejerskab Kunden deltager 40 timers arbejdsuge Fælles kodestandarder Løbende systemintegration

Ekstremprogrammering

Ekstremprogrammering

Ekstremprogrammering

Ekstremprogrammering

Adrætte processer Læsning Artikel The New Methodology http://www.martinfowler.com/articles/newmethodology.htm Manifesto for Agile Software Development http://agilemanifesto.org/ What is Extreme Programming? http://xprogramming.com/xpmag/whatisxp.htm Extreme Programming: A gentle introduction. http://extremeprogramming.org/