Programming Project Report. Programmeringsprojekt i PaSOOS fagpakken Bobby Nielsen; Jon Rune Jørgensen

Størrelse: px
Starte visningen fra side:

Download "Programming Project Report. Programmeringsprojekt i PaSOOS fagpakken. 20097733 Bobby Nielsen; 20097626 Jon Rune Jørgensen"

Transkript

1 Programming Project Report Programmeringsprojekt i PaSOOS fagpakken Underviser: Henrik Bærbak Christensen

2 Indhold 1 Udvikling og test af binær søgning TDD på binær søgning Endelig test list Interessante iterationer Reflektioner Savoia, TDD og Black-Box Testing Sammenligning af Savoias tilgang ift. TDD principper TDD tilgang ift. Savoia fordele, ulemper og defekter Black-Box Testing teknikker Sammenligning af vores TDD test cases med vores EC+BV tests Sammenligning af vores EC+BV test cases med Savoias tests Beautifulness HotGammon GUI Boardgame framework Vores implementering Klassediaqgram Rollediagram Sekvensdiagram Move checker Udviklingsprocessen Samlede erfaringer Distributionseksperiment vha. Architectural Prototyping Dice roll scenariet Flyt af brik scenariet (Move checker)... 22

3 1 Udvikling og test af binær søgning 1.1 TDD på binær søgning En opgave der går ud på at udvikle algoritmen for binær søgning vha. TDD, en algoritme vi alle kender. Det store spørgsmål er om TDD er relevant til en sådan opgave Endelig test list 1. Returner -1, for array (Ø), hvor der søges efter værdien 1 (target). 2. Returner -1, for array (1,2,3), hvor der søges efter værdien 0 (target). 3. Returner 1, for array (1,2,3), hvor der søges efter værdien 2 (target). 4. Find midt af array: Returner 1, for array (1,2,3) med tre elementer. 5. Find midt af array: Returner 0, for array (1) med 1 element. 6. Find midt af array: Returner 2, for array (1,2,3,4) med 4 elementer. 7. Find første halvdel: Returner true, for array (1,2,3), hvor der søges efter værdien 1 (target). 8. Find anden halvdel: Returner false, for array (1,2,3), hvor der søges efter værdien 2 (target). 9. Returner 0, for array (1,2,3), hvor der søges efter værdien 1 (target). 10. Delarray: Find target med værdien 1 i array (1), og returner index Delarray: Returner -1 for array (2), hvor der søges efter 1 (target). 12. Delarray: Returner 0 for array (1,2), hvor der søges efter 1 (target). 13. Delarray: Returner 2 for array (1,2,3), hvor der søges efter 3 (target). 14. Returner 7, for array (0,1,2,3,4,5,6,7,8,9), hvor der søges efter værdien 7 (target) Interessante iterationer Iteration 3 Test 3: Fjern fake it. Vi har behov for at finde den del af array som indeholder target. Derfor har vi brug for at finde midten af array, og teste om target er større eller mindre. Vi skriver en test, som kan drive udviklingen af en metode, som kan finde midten af array. Vi tilføjer test 4 til testlisten, og sætter iteration 3 på stand by, mens vi går videre med test 4. Test list 1. Returner -1, for array (Ø), hvor der søges efter værdien 1 (target). 2. Returner -1, for array (1,2,3), hvor der søges efter værdien 0 (target). 3. Returner 1, for array (1,2,3), hvor der søges efter værdien 2 (target). 4. Find midt af array: Returner 1, for array (1,2,3) med tre elementer. Det interessante ved iteration 3 er anvendelse af TDD princippet Child Test. Test 3 er egentlig en test af den endelige metode til binær søgning. Idet vi har brug for en metode til at håndtere en mindre del af algoritmen, introducerer vi en mindre test case for at fremdrive en ny metode, en hjælpemetode om man vil. Efterfølgende tog vi fat i test 3 igen i iteration 9, hvor testen endte med at blive fuldført med succes. Iteration 7

4 Vi kan nu finde midten af arrayet, og har brug for at finde ud hvilken halvdel, som target findes i. Vi har altså behov for at undersøge om target er mindre end værdien i midtpunktet (første halvdel) eller større eller lig med midtpunktet (anden halvdel). Test 7: Vi skriver en test som kan fremtvinge en metode til at bestemme, hvilken halvdel som target er i. Vi anvender Fake It, og lader blot metoden returnere true. Vi skriver endnu en test for at triangulere, og fremdrive metodens andet retursvar (returtypen er en boolean). Test list 1. Returner -1, for array (Ø), hvor der søges efter værdien 1 (target). 2. Returner -1, for array (1,2,3), hvor der søges efter værdien 0 (target). 3. Returner 1, for array (1,2,3), hvor der søges efter værdien 2 (target). 4. Find midt af array: Returner 1, for array (1,2,3) med tre elementer. 5. Find midt af array: Returner 0, for array (1) med 1 element. 6. Find midt af array: Returner 2, for array (1,2,3,4) med 4 elementer. 7. Find første halvdel: Returner true, for array (1,2,3), hvor der søges efter værdien 1 (target). 8. Find første halvdel: Returner false, for array (1,2,3), hvor der søges efter værdien 2 (target). Iteration 7 indførte en boolsk metode, til bestemmelse af om target er i første eller anden halvdel af den del af array som der søges i. Denne iteration viser anvendelsen af Fake It, med efterfølgende triangulering ved at tilføje en ny test til listen, som kan teste/fremdrive metodens andet retursvar. Iteration 13 Test 12: Testen skrives, og den fejler. Det viser sig, at det ikke er helt let at få testen igennem. Vi taget et break, og laver en do over. Efter at være startet forfra på søgning i delarray fuldføres testen OK, andre tests fejler, men de guider os i retningen af løsningen. Efterhånden fuldføres alle tests OK. Et par dages break og en do over resulterede i, at vi hurtigt fik denne test igennem. Refactoring: I vores metode til at finde midtpunktet af array har vi overført arrayet som parameter, hvilket vi ser ikke er nødvendigt. Vi retter testene af metoden til, og lader dette drive fjernelsen af parameteren. Alle tests er OK igen. Vi ser et behov for at triangulere yderligere, og tilføjer test 13. Test list 1. Returner -1, for array (Ø), hvor der søges efter værdien 1 (target). 2. Returner -1, for array (1,2,3), hvor der søges efter værdien 0 (target). 3. Returner 1, for array (1,2,3), hvor der søges efter værdien 2 (target). 4. Find midt af array: Returner 1, for array (1,2,3) med tre elementer. 5. Find midt af array: Returner 0, for array (1) med 1 element.

5 6. Find midt af array: Returner 2, for array (1,2,3,4) med 4 elementer. 7. Find første halvdel: Returner true, for array (1,2,3), hvor der søges efter værdien 1 (target). 8. Find anden halvdel: Returner false, for array (1,2,3), hvor der søges efter værdien 2 (target). 9. Returner 0, for array (1,2,3), hvor der søges efter værdien 1 (target). 10. Delarray: Find target med værdien 1 i array (1), og returner index Delarray: Returner -1 for array (2), hvor der søges efter 1 (target). 12. Delarray: Returner 0 for array (1,2), hvor der søges efter 1 (target). 13. Delarray: Returner 2 for array (1,2,3), hvor der søges efter 3 (target). Iteration 13 må nok siges, at være en af de vigtigste iterationer i vores løsning. Det er her vi formår, at finde frem til target i et array med mere end et element. Test First og Assert First er de principper som først anvendes. Test First, som det primære i public void shouldreturnindex0for2elementsarraywithtarget() { assertequals( 0, bs.searchpartarray(new int[]{1,2}, 1, 0, 1) ); } Iterationen startede med en session af et par timers varighed, som ikke førte til at vores nye, og de gamle tests kunne fuldføres med succes. Udviklingen gik i stå. Vi kom ingen vegne. Sessionen endte med beslutningen om at bruge to TDD principper: Break og Do Over. Efter et par dage, blev udviklingen genoptaget, dvs. iterationen startet forfra fra scratch, og efterfølgende blev iterationen afsluttet på ca. en halv time. Et godt eksempel på både Break og Do Over. I iterationen er det en kombination af den nye test og de gamle tests, som fremdriver produktionskoden. Efter at den nye test var OK, var der ældre tests som fejlede, og som derfor var med til at triangulere en løsning på plads. I løbet af iterationen viste det sig, at metoden til at finde midtpunktet i array ikke var optimal. Der var bl.a. ikke behov for at overføre vores array, som parameter, hvilket testene skrevet mhp. på metoden ellers havde fremdrevet. Lidt refactoring: Rettelse til parameterlisten medførte en ændring af metoden, som efterfølgende udførte opgaven bedre, og på en måde som var mere anvendelig i omfavnende metoder Reflektioner Efter vores mening er TDD ikke velegnet til at fremmane en defineret algoritme. Med TDD udvikles funktionalitet, der som sådan er defineret med test cases. Disse tests tester som sådan produktionskoden, som en black box, og tager ikke hensyn til algoritmen, som er anvendt i metoderne. En af de gode ting ved TDD er netop, at algoritmen i produktionskoden ikke vurderes. Det betyder, som vi ved, at vi kan ændre en algoritme, og hvis testen fuldføres OK, så er algoritmen, set fra en funktionel vinkel, i orden. Det var ikke en let opgave, at forsøge at fremtvinge en binær søgealgoritme med TDD. Det at ingen produktionskode må skrives, uden at en test kræver det, finder vi noget besværligt ifm. at udvikle algoritmen. Man skal tage virkelig små skridt for at sikre, at man følger TDD til punkt og prikke, hvilket betyder, at man i udviklingen af en algoritme, som denne, skal indføre en masse metoder for at produktionskoden skal være drevet frem af testkoden. Dette kan betyde, et performance overhead. I vores første forsøg kom vi frem til en metode, som kunne returnere det delarray, hvori target befandt sig. Det

6 betød, at der blev oprettet et array, hver gang den sorterede række af elementer blev halveret. Et performance overhead, som er stærkt uønsket i en søgealgoritme. Vi har anvendt TDD Rhythm og TDD principper, er som sådan lykkedes med at anvende principperne. Det er vores opfattelse, at TDD generelt ikke er velegnet til udvikling af algoritmer, men derimod udvikling af produktionskode, som repræsenterer noget funtionalitet.

7 1.2 Savoia, TDD og Black-Box Testing En sammeligning af Alberto Savoias tilgang til test af algoritmen for binær søgning ift. TDD og Black-Box Testing principper Sammenligning af Savoias tilgang ift. TDD principper I følgende tabel diskuteres hvorvidt Savoia anvender principper fra Test Driven Development (TDD). TDD Principle Test First Test List One Step Test Isolated Test Evident Tests Savoia s approach Savoia tager udgangspunkt i en kendt algoritme for binær søgning, og derfor anvender han ikke dette princip. Ydermere laver han en lille rettelse af produktionskoden, da han er bekendt med et problem, som opstår med meget store arrays. Efterfølgende ønsker han at lave tests som kan bevise algoritmens korrekthed. Hen ad vejen er der dele af funktionen, som han gerne vil teste for sig selv. Dog vælger han ikke at skrive testen først. Derimod koder han den ændring som han gerne vil teste før han skriver testen. Så han driver ikke noget på plads med tests. Han laver sine tilpasninger for, at han kan lave tests af dele af funktionen. Savoia opretter ikke en test liste, som han kan tage udgangspunkt i og vedligeholde hen ad vejen. I stedet beskriver han en strategy for hvordan han vil udføre en række tests. Hans strategi er at starte med en smoke test, tilføje nogle tests af grænseværdier, fortsætte med flere grundige og udtømmende tests, og slutte af med nogle performance tests. Hen ad vejen beskriver Savoia meget kort hvad det er for noget, han vil teste, men han har ikke en struktureret liste, hvor alle hans test cases er beskrevet. På et tidspunkt i forløbet begynder Savoia at definere nogle teorier, som egentlig er nogle udsagn, som skal gælde for den binære søgefunktion. Disse teorier programmerer han som tests. Efterhånden finder han på flere teorier, som danner grundlag for tests. Listen af teorier er det nærmeste Savoia kommer en egentlig TDD Test List, men han er ikke konsekvent omkring definitionen af teorier for alle tests. Savoia starter med smoke tests, som er test af det mest basale i algoritmen. De simpleste tests laver han først, og fortsætter med mere og mere komplekse tests. Som sådan starter han med tests som han er sikker på og lette at lave, og som han egentlig lærer af i forhold til at finde på flere og mere udtømmende tests. Savoia bruger også sine smoke tests til at opbygge en tillid til produktionskoden. Tests som man hurtigt kan eksekvere hver dag. Som sådan er det samme ide, som findes i TDD, da man her også gøres tryg af at se tests gå succesfuldt igennem. Savoia vælger at samle flere af sine tests, i hvad der svarer til en junit test case. Eksempelvis samler han fem tests i en ifm. sine grænseværditests af midtpunktsberegningen. Dette betyder at han mindre præcist ved hvori en eventuel fejl ligger i beregningen. Ydermere laver han tests som egentlig udfører op imod 1000 tests med tilfældige værdier på flere af hans test teorier i en udførsel. Denne samling af flere tests gør det igen sværere at få et præcist indblik i hvad og hvordan der testes, samt hvor og hvordan fejl opstår. Savoia s testkode er ikke nødvendigvis særlig simpel. I flere tilfælde anvender han løkker og tilfældighedsgeneratorer for at udføre en større mængde tests. Dette gør testkoden testkoden langt mere kompleks og mindre præcis, end hvis man havde defineret hver enkelt test med konstante værdier for

8 Fake It Triangulation Assert First Break Evident Data Obvious Implementation Representative Data Automated Test Test Data Child Test Do Over Regression Test parametre. Dette vil også betyde, at testen kan udføres præcis ens hver gang. Man kan stille spørgsmålstegn ved, om der bør være et eneste tilfældigt element i testkode. Savoia bruger som sådan ikke princippet. Der er dog et tilfælde, hvor han indfører noget midliertidigt produktionskode, som han anvender til at finde ud af om hans tests er gode nok. En form for Fake It-kode som returnerer et resultat, som kan bruges til at verificere testen. Savoia triangulerer ikke produktionskode på plads. Han laver tests af grænseværdier, der som sådan er enslydende tests, blot med forskellige parametre. Dette svarer som sådan til en triangulation, og han kan tilpasse produktionskoden i fald testen fejler. Savoia tester produktionskode som er skrevet, og dermed benytter han ikke dette princip. I de enkelte tilfælde hvor han retter produktionskoden, gør han det før han skriver sine tests. Savoia skriver, at hvis man vil lave smuk kode, kan det hjælpe at træde væk fra produktionskoden, og se på den med kritiske øjne, ved at lave tests. Dette kan muligvis hjælpe, hvis man er kørt fast i et problem i udviklingen. Mht. til evident data kan vi ikke sige meget til Savoias tests. Hovedsagligt er det simpelt at forstå hvad der testes, hvilket dog også skyldes, at testdataene naturligt er simple. I Savoias test, hvor han anvender en tilfældighedsgenerator, er det af gode grunde ikke til at vide, hvad det er for testdata der anvendes. Disse tests er knap så gennemskuelige, og det er kun givet hvad antallet af tests er, max antal elementer i array, samt max værdi i array. Savoia vælger,at opdele koden i flere funktioner. Det gør han for at muliggøre test af delelementer af algoritmen. Disse funktioner, som er simple, implementerer han uden videre. I gennem sit forløb med skrivning af tests af søgealgoritmen kommer Savoia godt rundt om de områder der er vigtige at teste. Hans får testet grænseværdierne, både med hensyn til værdierne i arrayet og indexværdierne. Savoia anvender junit til at automatisere sine tests. Savoia går ind for udviklere skriver automatiseret tests til deres kode, men han mener, at der vil gå en rum tid før størstedelen af udviklere er overbevist og skriver testkode i deres daglige udviklingsarbejde. Savoias testdata er rimelig tilfældig. Det kommer særdeles til udtryk iden del af hans tests, som anvender en tilfældighedsgenerator til generering af testdata. Kun i Savoias tests af grænseværdier er der tænkt over testdataene. Her ser vi dog, at han tænker godt og grundigt over testdata, og kommer godt rundt. Savoia udfører som sådan ikke nogen child tests på baggrund af en for stor test. Men han omskriver sin produktionskode for at teste et delement af algoritmen, og skriver dernæst en mindre test, som kan teste dette delemenet. I forløbet med at teste den binære søgealgoritme kommer Savoia ikke til et punkt, hvor han ikke umiddelbart kan komme længere, og har derfor ikke behov for at lave en Do Over. Savoia går ind for regression test. Det giver udvikleren tillid til koden. Savoia skriver også, at han er glad for at samle alle sine smoke tests i en test suite,

9 som kan hurtigt kan udføres ifm. hver build. Tillid og tro på koden er vigtigt for Savoia, ligesom det er en vigtig grundsten i TDD TDD tilgang ift. Savoia fordele, ulemper og defekter Fordele ved TTD ift. Savoias tilgang: 1. Der er tests til al produktionskode. Ikke kun tests til de elementer af funktionen, som synes kritiske. Savoias tests udspringer groft set fra hans fantasi, hvilket betyder, at hans fantasi sætter grænsen for hvad der bliver testet. 2. Alle vores TDD tests kan genproducere en eventuel fejl 100 % sikkert. Det skyldes, at vi ikke som Savoia indfører tests, med tilfældigt input. I de tests, hvor Savoia anvender tilfældigt input, kan han ikke udføre præcis den samme test hver gang, hvilket er en risiko, da han ikke 100 % sikker kan genteste en fejl. Ydermere bliver Savoias tests unødvendigt komplicerede, og han kan lettere komme til at indføre fejl i testkoden. 3. TDD sikrer, at alle udviklere har det samme mål, nemlig det mål at skabe noget kode, ved at skrive nogle tests som driver koden frem. Savoias tilgang er hans egen, og det er hans ideer om tests, som kommer til udtryk. Som han skriver, er det forskelligt fra udvikler til udvikler. Med TDD er der en række principper, man som udvikler skal følge, hvilket betyder en større ensretning af de tests der skrives ift. den funktionalitet som skal skabes. Ulemper ved TDD ift. Savoias tilgang: 1. TDD er grundlæggende anvendelig til udvikling af kode (produktionskode), og ikke til test af kode, som er givet. Mange af TDD principperne tager udgangpunkt i at der skal skrives noget produktionskode, og ikke bare testkode. Derfor ser vi i vores udvikling ikke så meget på hvad der er vigtigt at teste for algoritmen. Derimod søger vi at skrive tests, som kan skabe algoritmen. For Savoias vedkommende er algoritmen givet, og han kan koncentrere sig om, at skrive tests som tester algoritmen. Forskellen er derfor, at vi søger at skabe en algoritme vha. TDD, hvor Savoia går efter at teste om algoritmen er korrekt, og om er der dele af implementeringen der vil medføre fejl. 2. Vi har i denne opgave erfaret, at TDD ikke er specielt egnet til udvikling af en særlig algoritme. Som sådan er valget af algoritmer ligegyldig ifm. med TDD. Ved udvikling med TDD, søger vi netop, at skrive tests som tester funktionaliteten, og lader valget af algoritmer være åbent. Således kan algoritmer optimeres eller udskiftes, uden at det påvirker funktionaliteten. 3. Vi har, med vores TDD udvikling, ikke nogen tests, som søger at teste grænseværdier. Årsagen til dette er, at TDD ikke lægger op til tests af grænseværdier, men derimod til tests som kan drive udvikling af noget funktionalitet. Defekter nævnt af Savoia, som eksisterer i vores implementation: 1. Vores implementation risikerer at resultere i en integer overflow exception, da vi ikke har været opmærksomme på at teste søgning i arrays af så stor størrelse, så denne exception kunne forekomme. Idet vores søgemetode er opdelt i mindre metoder, med forskelligt ansvar, så kan vi let indføre en test, som kan teste aspekterne af at finde midtpunktet i array, og dermed teste os frem til en løsning, som ikke medfører en overflow exception.

10 2. Vi har ikke nogen tests, som søger at teste grænseværdier. Årsagen til dette er, at TDD ikke lægger op til tests af grænseværdier, men derimod til tests som kan drive udvikling af noget funktionalitet. 3. Vi har ingen tests, som sikre, at vores implmentation rent faktisk er en binær søgning. Savoia gør det, at han laver en særlig implementering af den binære søgning, hvor han tilføjer nogle linier kode, som tæller antallet af sammenligninger, og det resultat, som han lader metoden returnere er antallet af sammeligninger, som der skal til for at finde target, men han leverer ikke positionen af target med retur, hvilket vil sige, at metoden kun kan bruges til at tælle antal sammenligner, og dermed om algoritmen tilsvarer effektiviteten af en binær søgning. I vores implementation kunne vi tilpasse koden lidt, og tilføje en decorator (Decorator pattern), som kunne have til ansvar, at tælle antal sammenligninger. 4. Ingen af vores tests indeholder negative tal, hvilket betyder, at vi som sådan ikke er sikre på, at vores algoritme kan håndtere negative tal. Men som sagt bør test skrevet ifm. TDD ikke stå alene, men bør bistås af tests som udspringer af ækvivalensklassepartitionering og grænseværdianalyse Black-Box Testing teknikker Applikering af black-box testing teknikkerne Equivalence classes (EC) og boundary value analysis (BV) på algoritmen for binær søgning. 1. Equivalence classes Condition Invalid ECs Valid ECs Input array er tomt Array.length = 0 [1] Input array indeholder Array.length = 1 [2] et element Input array indeholder Array.length mod 2 = 1 [3] et lige antal elementer Input array indeholder Array.length mod 2 = 0 [4] et ulige antal elementer Input array indeholder Array[0..n] < 0 [5] negative elementer Input array indeholder Array[0..n] > 0 [6] positive elementer Input array indeholder Array[0..n] = 0 [7] neutrale (0) elementer Preconditions Integer [8]; Sorted [9] tilfredsstillet Preconditions ikke tilfredsstillet Non integer [10]; Not sorted [11] Target i array Integer [12] Target ikke i array Integer [13] Target er positivt Integer [14] Target er negativt Integer [15] Target er 0 Integer [16] 2. Test cases, hvor vi udelader alle ECs hvor preconditions ikke tilfredsstilles.

11 ECs covered Test case Expected output [1],[13],[16] ({Ø}, 0) -1 [2],[7],[12],[16] ({0}, 0) 0 [2],[7],[13],[14] ({0}, 1) -1 [3],[6],[12],[14] ({0,1,2}, 1) 1 [3],[6],[13],[14] ({0,1,2}, 4) -1 [4],[6],[12],[14] ({0,1}, 1) 1 [4],[6],[13],[14] ({0,1}, 2) -1 [3],[6],[12],[14] ({0,1,2}, 1) 1 [3],[6],[13],[14] ({0,1,2}, 4) -1 [2],[7],[13],[15] ({0}, -1) -1 [3],[5],[12],[15] ({-3,-2,-1}, -1) 2 [3],[6],[13],[15] ({0,1,2}, -4) -1 [3],[5],[13],[15] ({-3,-2,-1}, -4) -1 [4],[5],[12],[15] ({-1,0}, -1) 0 [4],[6],[13],[15] ({0,1}, -2) -1 [4],[5],[13],[15] ({-1,-2}, -3) -1 [3],[5],[12],[15] ({-3,-2,-1}, -1) 2 [3],[6],[13],[15] ({0,1,2}, - 4) Boundary value analysis Test case Expected output ({Ø}, 0) -1 ({0}, 0) 0 ({0}, Integer.MIN_VALUE) -1 ({0}, Integer.MAX_VALUE) -1 ({Integer.MIN_VALUE, 0}, Integer.MIN_VALUE) 0 ({0, Integer.MAX_VALUE }, Integer.MAX_VALUE) 1 De EC og BV test cases vi her er kommet frem til, kan vi kode tests ud fra. Vi kan dermed supplere vores TDD test cases, og opnå en mere udtømmende test af vores algoritme for binær søgning Sammenligning af vores TDD test cases med vores EC+BV tests En sammenligning af hvorvidt vores TDD test cases matched vores EC og BV tests. Vi ser på om henholdvis TDD fandt nogle tests som EC og BV ikke gjorde, og omvendt. Vores TDD test cases dækker delementer af algoritmen, hvorfor nogle af vores TDD tests ikke er sammenlignelige med vores EC og BV tests. I vores TDD test cases har vi ingen tests, hvor array indeholder negative værdier, eller hvor target er negativt. Det har vi derimod i vores EC og BV tests. Derudover har vi ingen TDD tests hvor array indeholder et enkelt neutralt element (0) eller udelukkende neutrale elementer (kun 0 er). Vi har heller ingen TDD test cases som grænseværdierne for en integer, hvilket vores BV tests gør. Øvrige EC og BV tests dækkes af vores TDD tests, dog ikke med helt de samme arrays og targets, men forskellene her er kun en mindre forskydning af værdier i array eller target. Til gengæld dækkes vores TDD

12 test case 14 ikke af EC og BV tests, og det er den af vores test med det største array. Egentlig burde vi have tests, som tester de øvre grænser for størrelsen af array Sammenligning af vores EC+BV test cases med Savoias tests 1. Savoia tester med nogle arrays, som er væsentligt større en alle de arrays, vi har i vores tests. Derfor kan han være mere sikker på, at søgning også fungerer efter hensigten med de større arrays. Han tester dog heller ikke de øvre grænser for størrelsen af array. 2. Ligesom os tester Savoia med et array med element, hvor target henholdsvis er og ikker er i array. 3. Savoia tester ikke den binære søgemetode, som en black box, idet han går ind og ekstrahere midtpunktberegning i en selvstændig metode, således han kan teste for integer overflow exception. I vores EC og BV analyse har vi set på søgningen som en black box, hvorfor vi ikke her har tests af midtpunktberegningen. 4. Ligesom Savoia tester vi, hvor vi forventer, at target er på henholdsvis første midterste og sidste plads i array. 5. Ligesom Savoia tester vi med arrays indeholdende Integer MIN_VALUE og MAX_VALUE, og hvor vi søger efter disse to grænseværdier i array. 6. Vi har ikke som Savoia nogle test, hvor værdier er genereret tilfældigt. 7. Savoia har en test af effektiviteten af søgningen, hvilket vi ikke har i nogen af vores tests Beautifulness Om noget er smukt (beautiful) er et spørgsmål om smag. Vi mener ikke Savoia s fremgangsmåde er smuk. Han tester de aspekter af algoritmen, som han kan komme frem til på forskellige måder. Men spørgsmålet er om hans tests er fyldestgørende? Efter vores mening er TDD smukkere, idet produktionskoden drives frem af testkoden, som betyder test af produktionskoden som sådan er fyldestgørende, og så er testene med sikkerhed skrevet. Det er smukt. Som bekendt skal TDD ikke stå alene. Der bør suppleres med ækvivalensklasseanalyse, grænseværditests mm. Måske er det smukke ved tests, at det faktisk er en ret stor udfordring at få gennemført en komplet test.

13 2. HotGammon GUI Udvikling af en GUI til HotGammon (Backgammon). 2.1 Boardgame framework I forbindelse med udvikling af en GUI til HotGammon har vi valgt at bruge BoardGame udvidelsen til MiniDraw-frameworket. Det betyder at vi i forbindelse med initieringen af MiniDraw gør brug af bl.a. BoardActionTool og BoardDrawing fra BoardGame. BoardActionTool er et værktøj specielt tilpasset til brætspil, der gør det muligt at flytte brikker og klikke på ubevægelige figurer (Props) og få udført en handling, der er tilknyttet til den aktuelle figur. BoardDrawing er ligeledes specielt tilpasset til brætspil, og håndterer visningen af brætspillets figurer. BoardDrawing er i sig selv et 'frozen spot', men konfigureres via tre hotspots, nemlig FigureFactory, PositionStrategy og PropAppearanceStrategy, der henholdsvis bruges til at definere startopstillingen af spillets figurer, den eksakte placering af figurerne på brættet og til ændring af de ubevægelige figurers fremtræden. BoardDrawing implementerer BoardGameObserver, der spiller Observer-rollen i Observer Pattern, og har ansvaret for at gentegne spillets figurer ved notificering af ændringer i spillet. I forbindelse med FigureFactory defineres Maps med de figurer (BoardFigure) der vises i spillet. En BoardFigure defineres af et billede, en angivelse af om figuren kan bevæges, samt et hotspot til en Command. Denne Command spiller Command-rollen i Command Pattern. 2.2 Vores implementering Ovenstående er udgangspunktet for vores integration af HotGammon- og MiniDraw/BoardGameframeworks. FigureFactory har vi implementeret i klassen 'HotGammonPieceFactory', der initerieres med en instans af Game. Ud fra brikkernes placering i Game genereres et tilsvarende Map over brikkernes placering til brug for MiniDraw. I denne klasse defineres også et Map over de ubevægelige figurer (terningerne). I forbindelse med oprettelsen af figurerne tilknyttes en Command til hver af disse. Vi har implementeret to typer af Commands, nemlig 'MoveCommand' og 'DieRollCommand', der bruges i forbindelse med oprettelse af henholdsvis brikker og terninger. Execute-metoderne i disse Command-implementeringer kalder relevante metoder i Game, når der spilles. PositionStrategy har vi implementeret i klassen 'HotGammonPositioningStrategy'. Her defineres den eksakte placering af brættets figurer. I forbindelse med brikkernes placering bruges hjælpeklassen 'Convert'. For de ubevægelige figurers vedkommende returneres de samme positioner hver gang. PropAppearanceStrategy har vi implementeret i klassen 'HotGammonPropAppearanceStrategy'. Her defineres ud fra terningernes værdier i Game, hvilke billeder der skal vises for de to terninger. Efter initiering af henholdsvis Game og GUI, vil vi gerne have at GUI'en bliver notificeret om ændringer i Game. Derfor har vi tilføjet GUI'en som Observer til Game. Desværre var den type Observer som BoardDrawing implementerer, nemlig BoardGameObserver, ikke kompatibel med den type Observer som

14 vores Game opererer med, så her blev vi nødt til at lave en Adapter: 'GameObserverAdapter', for at kunne tilføje en Observer af den rigtige type til Game Klassediaqgram Herunder ses klassediagram (figur 1) udvisende de udviklede klasser med implementerede interfaces og deres sammenhæng.

15 GameObserver GameObserverAdapter HotGammon +main(args :String[]) -editor :DrawingEditor -boardgameobserver :BoardGameObserver<Location> +GameObserverAdapter(e :DrawingEditor) +checkermove(from :Location, to :Location) +dicerolled(values :int[]) +setmessage(message :String) Factory -game :Game HotGammonFactory +HotGammonFactory(game :Game) +createdrawingview(editor :DrawingEditor) :DrawingView +createdrawing(editor :DrawingEditor) :Drawing +createstatusfield(editor :DrawingEditor) :JTextField -game :Game PropAppearanceStrategy HotGammonPropAppearanceStrategy +HotGammonPropAppearanceStrategy(game: Game) +calculateimagenameforpropwithkey(key :String) :String Constant +die1propname :String +die2propname :String PositioningStrategy<Location> HotGammonPositioningStrategy +calculatefigurecoordinatesindexedforlocation(location :Location, index :int) :Point +calculatefigurecoordinatesforprops(keyofprop :String) :Point FigureFactory<Location> HotGammonPieceFactory Convert -game :Game +HotGammonPieceFactory(game :Game) +generatepiecemultimap() :Map<Location, List<BoardFigure>> +GeneratePropMap() :Map<String, BoardFigure> -maplocation2rectangle :Map<Location, Rectangle> +xy2location(x :int, y :int) :Location +locationandcount2xy(location :Location, count :int) :Point -definelocation2rectanglemap() -processarectangleforlocation(l :Location, r :Rectangle) -game :Game Command DieRollCommand +DieRollCommand(game :Game) +execute() :boolean +setfromcoordinates(fromx :int, fromy :int) +settocoordinates(tox :int, toy :int) -game :Game -dx, dy, tx, ty :int Command MoveCommand +MoveCommand(game :Game) +execute() :boolean +setfromcoordinates(fromx :int, fromy :int) +settocoordinates(tox :int, toy :int) Figur 1 - Klassediagram

16 2.2.2 Rollediagram Herunder ses et rollediagram (figur 2) som beskriver anvendelsen af patterns, samt sammenhængen mellem de implementerede klasser og interfaces. HotGammon Strategy:Strategy PropAppearanceStrategy HotGammonPropAppearanceStrategy Abstract Factory:Abstract Factory Strategy:Concrete Strategy Factory Strategy:Strategy PositioningStrategy<Location> HotGammonFactory HotGammonPositioningStrategy Abstract Factory:Concrete Factory Abstract Factory:Concrete Product Strategy:Concrete Strategy Abstract Factory:Abstract Factory BoardDrawing FigureFactory<Location> HotGammonPieceFactory Abstract Factory:Concrete Factory Command:Command Command Command MoveCommand Command:Concrete Command Command:Receiver Observer:Subject Adapter:Client <<interface>> Game Adapter:Adaptee <<interface>> BoardGameObserver DieRollCommand Command:Concrete Command <<interface>> GameObserver Adapter:Target GameObserverAdapter Adapter:Adapter Observer:Observer Observer:Concrete Observer Figur 2 - Rollediagram

17 2.2.3 Sekvensdiagram Move checker Herunder ses sekvensdiagram (figur 3) som viser protokollen mellem vores game framework og Minidraw, når en bruger flytter en brik fra en position til en anden.

18 Figur 3 - Sekvensdiagram: Move checker

19 2.3 Udviklingsprocessen Ved udvikling af GUI har vi brugt TDD-principper, idet vi er gået ud fra en testliste og taget små skridt. Vi startede med kun at vise selve brættet og enkelte brikker og terninger. Dernæst gik vi videre til at kunne vise figurer der var defineret i Game og ikke bare i GUI'en. Først ved at bruge et simpelt StubGame med kun to brikker, og siden udvide til at bruge en mere udbygget Gameimplementering. I denne fase har vi fået vores FigureFactory og PositionStrategy på plads. I næste fase er vi begyndt at flytte med brikkerne ved at tilføje BoardActionTool, og en Command til brikkerne (MoveCommand). I første omgang har vi bare udskrevet til konsollen, når en brik er flyttet, for dernæst at kalde move-metoden i en Game-implementering. Her har vi også brugt et simpelt StubGame, der også bare udskrev til konsollen, når et træk var udført. I sidste fase arbejdede vi på at kunne reagere på notificeringer fra Game. Dette drejede sig bl.a. om at kunne vise hvilket terningekast der er blevet slået. Her har vi via en Adapter tilføjet en Observer til Game, og fået udviklet en PropAppearanceStrategy og en Command til terningerne (DieRollCommand). Notificeringer om bevægelse af brikker er også kommet på plads i denne fase. Senere har vi tilføjet muligheden for at vise statustekst i GUI'en. Efter at have lavet en GUI til spillet, var det meget lettere lige at teste forskellige scenarier, som man ellers ikke lige havde tænkt over tidligere. Det kunne f.eks. være at tage modstanderens brik og rykke den i sin egen retning, eller at tage brikker fra brættet, selv om det ikke er tilladt. Det medførte at vi efter kun få spil havde en længere liste over defekter ved vores spil: Selv om man har brikker i baren, kan man rykke med sine andre brikker. Det er altid sort der starter. Man får ikke fire træk ved to ens terninger. Man kan tage brikker fra brættet, selv om man har brikker andre steder end sit indre hjemland. Man kan ikke bruge højere terningekast til at tage brikker fra brættet. Hvornår er der fundet en vinder Brikker der har slået en anden brik ud, opfører sig underligt Disse defekter er dog blevet udbedret nu. 2.4 Samlede erfaringer Set i bakspejlet er det faktisk ikke særlig meget kode, der skal skrives for at integrere Game og GUI. Det betyder imidlertid ikke, at det bare er noget man sætter sig ned og gør på 5 minutter. I hvert fald ikke første gang man bruger et framework. Til indlæring af hvorledes et framework skal bruges, er det en god hjælp at se hvorledes andre projekter gør brug af frameworket. Også selv om det er en helt anden type brætspil.

20 Og når man går i gang med integrationen mellem Game og GUI er det ligeledes en stor hjælp at anvende principper fra TDD, såsom at lave en testliste og tage små skridt. Dermed er det lettere at holde fokus, så man ikke mister overblikket, fordi man vil for meget på en gang. Endelig skal det igen nævnes at for vores vedkommende betød tilstedeværelsen af en GUI, at det blev meget mere synligt, hvilke regler vi ikke havde fået implementeret korrekt fra starten af.

21 3. Distributionseksperiment vha. Architectural Prototyping Målet er at lave en architectural prototype, som vi kan eksperimentere med (sandbox), således vi kan komme frem til en model for distribution af vores spil HotGammon. Vi ønsker at komme frem til en model for distribution, der medfører at domain kode udføres på en server, og GUI kode udføres på en klient (klassisk client/server arkitekttur). I vores AP (arkitektturprototype) er det eneste interessante forbindelsespunkterne mellem domain og GUI. Her vil der ved distribution være behov for implementering af funktionalitet, som kan interagere over netværket. I vores AP vil vi derfor kun fokusere på, at arbejde med protokollen mellem domain og GUI. Det vil vi gøre ved, at udskrive udførte metodekald til skærmen. For at kende rækken af metodekald og dermed forbindelsespunkterne mellem domain og GUI, vil vi indsamle (høste) data om dette fra det oprindelige system (spil) vha. JSeq. JSeq kan f.eks. anvendes til trace af metodekald udført ifm. handlinger udført i et program. 3.1 Dice roll scenariet Step 1 Analyse af dice roll Indsamling af data vedr. dice roll med JSeq. [JSeq] hotgammon.view.dierollcommand.setfromcoordinates [JSeq] hotgammon.view.dierollcommand.settocoordinates [JSeq] hotgammon.view.dierollcommand.execute [JSeq] hotgammon.domain.common.gameimpl.nextturn [JSeq] hotgammon.domain.common.gameimpl.winner [JSeq] hotgammon.domain.variants.gammamonwinnerstrategy.determinewinner [JSeq] hotgammon.domain.common.gameimpl.getcount [JSeq] hotgammon.domain.common.gameimpl.getcount [JSeq] hotgammon.domain.variants.randomdicerollstrategy.rolldice [JSeq] hotgammon.domain.common.gameimpl.identicaldice [JSeq] hotgammon.domain.common.gameimpl.identicaldice [JSeq] hotgammon.view.gameobserveradapter.dicerolled [JSeq] hotgammon.view.hotgammonpropappearancestrategy.calculateimagenameforpropwithkey [JSeq] hotgammon.domain.common.gameimpl.dicethrown [JSeq] hotgammon.view.hotgammonpropappearancestrategy.calculateimagenameforpropwithkey [JSeq] hotgammon.domain.common.gameimpl.dicethrown [JSeq] hotgammon.domain.common.color.tostring [JSeq] hotgammon.view.gameobserveradapter.setmessage Step 1 Harvest og implementation De primære komponenter er GameImpl og GameObserverAdapter. For disse to klasser laver vi stubklasser. hotgammon.domain.common.gameimpl APGameImpl hotgammon.view.gameobserveradapter GUI Vi tager kun den kode (harvesting), som skal til for at lave et scenarie tilsvarende spillets. Det vil sige Observer koden, og kode som er nødvendig for at scenariet har den rigtige sekvens af metodekald. Derudover laver vi en klientklasse (ArchProto), som kan kalde GUI-klassens metoder.

22 Ved udførsel udskriver de enkelte metoder til System.out, hvilket viser sekvensen af metodekald. Step 1 Konklusion Vi har nu vores AP version 1, hvor vi har høstet (harvest) scenariet fra originalkoden. Vores AP s adfærd efterligner arkitektonisk et terningkast, som det udføres, når en spiller klikker på en terning (dice roll). Vi kan vælge, at tilføje yderligere scenarier, eller at arbejde på distribution af scenariet for terningkastet. Step 2 RMI Vi vælger,at indføre distribution med RMI til vores scenarie i AP en. Vi starter med refactoring af koden, således at hver klasse findes i hver sin fil. Fælles kode lægger vi i archproto.common, klientkode (ArchProto og GUI) i archproto.client og serverkode (APGameImpl) i archproto.server. Vi laver to ant target. Target ap-server starter serveren, og target ap-gui starter klienten. Vi indfører RMI mellem domain og view. APGameImpl o extends UnicastRemoteObject o throws RemoteException o RMISecurityManager o Starter RMI på port (LocateRegistry.createRegistry(60000)) o Binder servicen (Naming.rebind("//" + host + ":60000/Game", apgame);) GUI o o extends UnicastRemoteObject catch(remoteexception re) ArchProto o Forbinder til service (Game game = (Game)Naming.lookup("//" + host + ":60000/Game");) GameObserver o extends Remote o throws RemoteException Game o o extends Remote throws RemoteException Color, Location o implements Serializable java.security.policy (java.policy) Step 2 Resultat Vi kan nu starte vores server i en prompt og klienten i en anden prompt, og se hvorledes programmerne interagerer via RMI (over localhost).

23 Kun view objekter Kun domain objekter Step 2 Konklusion Vi har nu: Modularisering (en klasse pr. fil) Introduceret RMI Henholdsvis server- og klientprogram Build (java.policy fil og run targets) Vi har formået at distribuere terningkastet vha. RMI på localhost. Dette har vi gjort i et sikkert miljø (sandbox), hvor vi ikke har risikeret, at ødelægge vores originalkode. Vi har nu i vores AP et eksempel på den kode, som vi har brug for, til implemetering af RMI i vores spil. 3.2 Flyt af brik scenariet (Move checker) Med samme fremgangsmåde kan vi tilføje, det scenarie, som udspiller sig ifm. flyt af en brik. Vi udfører følgende: Indsamling af sekvens for metodekald med JSeq. Harvesting Indfører kun de nødvendige metoder i vores stubklasser, hvor disse metoder udskriver deres metodenavn til skærmen. Indfører RMI på de nye metoder. Resultat Før indføring af RMI (begge scenarier udført sekventielt):

24 Efter indføring af RMI (begge scenarier udført sekventielt): Konklusion Vi har nu indført RMI for scenarierne for terningkast og flyt af brik i vores AP. I forbindelse med at RMI indføres for det første scenarie, er der en masse RMI opsætning som kommer på plads, og der er knap så mange ændringer som skal laves ved implementering af RMI for de efterfølgende scenarier. Retrofitting af RMI-koden vi er kommet frem til i vores AP i spillet (originalkoden) er ikke noget, vi har udført. Dette var dog heller ikke en del af kravene til opgaven. Anvendelse af en arkitekturprototype anser vi som en god strategi for eksperimentering med forskellige udvidelser til et system. Den oprindelige funktionalitet (originale scenarier) kan simuleres simpelt, og de mere komplekse eksperimenter kan udføres uden at ødelægge originalkoden, og uden at være påvirket af de originale processeringer.

Begreber om Godt Software

Begreber om Godt Software Begreber om Godt Software Maintainability (vedligeholdelse): Softwarens evne til at blive ændret (funktionalitet, rettet, forbedrelser, miljø, krav). - Analyserbart: Evnen til at blive fejldiagnosticeret,

Læs mere

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version Finn Nordbjerg 1/9 Indledning I det følgende introduceres et par abstrakte

Læs mere

Spil Master Mind. Indledning.

Spil Master Mind. Indledning. side 1 af 16 Indledning. Spillet som denne rapport beskriver, indgår i et større program, der er lavet som projekt i valgfaget programmering C på HTX i perioden 9/11-98 til 12/1-99. Spillet skal give de

Læs mere

Projekt - Visual Basic for Applications N på stribe

Projekt - Visual Basic for Applications N på stribe Projekt - Visual Basic for Applications N på stribe Mikkel Kaas og Troels Henriksen - 03x 3. november 2005 1 Introduktion Spillet tager udgangspunkt i det gamle kendte 4 på stribe, dog med den ændring,

Læs mere

Hvad er et distribueret objekt? Plan 12.3. Objekter, objektreferencer, metoder, parameteroverførsel. Objekter: notation

Hvad er et distribueret objekt? Plan 12.3. Objekter, objektreferencer, metoder, parameteroverførsel. Objekter: notation Plan 12.3. Oversigt over grundlæggende begreber Java: eksempel på applikation, programmering og oversættelse Uddybning af grundlæggende begreber Java RMI implementation Forklaring af øvelsen Hvad er et

Læs mere

Software arkitektur. Tobias Brixen Q2-2012

Software arkitektur. Tobias Brixen Q2-2012 Software arkitektur Tobias Brixen Q2-2012 1 Contents 0.1 Diverse defs.............................. 3 1 Test-driven development 3 1.1 Motivation.............................. 3 1.2 Koncepter...............................

Læs mere

Lavet af Danni jensen og David Olsen

Lavet af Danni jensen og David Olsen Projekt Delfin Lavet af Danni jensen og David Olsen 19/5-2008 Indholdsfortegnelse. Side 1: Indholdsfortegnelse og forord. Side 2: Kravsliste. Side 3: Use Case Model. Side 4: Formandens aktørbeskrivelse

Læs mere

Optimering af fraværsregistrering

Optimering af fraværsregistrering Journal Optimering af fraværsregistrering Eksamensprojekt i Programmering C, klasse 3.4, 2011 AFLEVERET 09-05-2014 Indhold Abstract... Fejl! Bogmærke er ikke defineret. Problemformulering... 2 Produktet...

Læs mere

Dag 10 Flertrådet programmering

Dag 10 Flertrådet programmering Videregående programmering i Java Dag 10 Flertrådet programmering Fremlæggelse af programmering/status for projekter Dokumentation med javadoc Flertrådede designmønstre: Arbejdstråd, Producent Konsument,

Læs mere

SmartFraming Et vindue til nationale sundhedssystemer. Version 3.0

SmartFraming Et vindue til nationale sundhedssystemer. Version 3.0 SmartFraming Et vindue til nationale sundhedssystemer Version 3.0 Infrastruktur i dagens sundheds IT Det sundhedsfaglige personale benytter sig i dag af en række forskellige systemer i forbindelse med

Læs mere

RMI med BlueJ. Tutorial lavet af Jákup W. Hansen TSU 2006 3.semester 11. desember 2007

RMI med BlueJ. Tutorial lavet af Jákup W. Hansen TSU 2006 3.semester 11. desember 2007 RMI med BlueJ Tutorial lavet af Jákup W. Hansen TSU 2006 3.semester 11. desember 2007 Hvad er RMI? Når man arbejder med Distribuerede Systemer, som igen vil sige at man ønsker at flere end én komputer

Læs mere

FESD-standardiseringsgruppen Att: Palle Aagaard IT- og Telestyrelsen IT-strategisk kontor Holsteinsgade 63 2100 København Ø

FESD-standardiseringsgruppen Att: Palle Aagaard IT- og Telestyrelsen IT-strategisk kontor Holsteinsgade 63 2100 København Ø FESD-standardiseringsgruppen Att: Palle Aagaard IT- og Telestyrelsen IT-strategisk kontor Holsteinsgade 63 2100 København Ø Høringssvar vedr. FESD GIS-integrationsmodel version 2.0 Geodata Danmark har

Læs mere

PHP 3 UGERS FORLØB PHP, MYSQL & SQL

PHP 3 UGERS FORLØB PHP, MYSQL & SQL PHP 3 UGERS FORLØB PHP, MYSQL & SQL Uge 1 & 2 Det basale: Det primære mål efter uge 1 og 2, er at få forståelse for hvordan AMP miljøet fungerer i praksis, og hvordan man bruger PHP kodesproget til at

Læs mere

Kursusarbejde 3 Grundlæggende Programmering

Kursusarbejde 3 Grundlæggende Programmering Kursusarbejde 3 Grundlæggende Programmering Arne Jørgensen, 300473-2919 klasse dm032-1a 21. november 2003 Indhold 1. Kode 2 1.1. forestillinger.h............................................. 2 1.2. forestillinger.cc.............................................

Læs mere

Efficient Position Updating

Efficient Position Updating Efficient Position Updating Pervasive Positioning, Q3 2010 Lasse H. Rasmussen, 20097778 Christian Jensen, 20097781 12-03-2010 1 Introduktion Denne rapport har til formål at beskrive implementeringen og

Læs mere

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

Jacob Nordfalk. Ingeniørhøjskolen i København. Nykøbing F itvisioncenter 24. februar 2004 Genbrugelige komponenter og designmønstre i Java Jacob Nordfalk Ingeniørhøjskolen i København Nykøbing F itvisioncenter 24. februar 2004 Program Om Jacob Nordfalk introduktion (ikke-teknisk del) Komponentbaseret

Læs mere

Nye testteknikker fra ISTQB - direkte fra hylderne. Ole Chr. Hansen

Nye testteknikker fra ISTQB - direkte fra hylderne. Ole Chr. Hansen Nye testteknikker fra ISTQB - direkte fra hylderne Ole Chr. Hansen TestExpo 29. Januar 2015 Præsentation Ole Chr. Hansen Managing Consultant Fellow SogetiLabs Global Innovation Team Blog - http://ochansen.blogspot.com

Læs mere

Basal TCP/IP fejlfinding

Basal TCP/IP fejlfinding Basal TCP/IP fejlfinding Dette notat beskriver en række enkle metoder til fejlfinding på TCP/IP problemer. Metoderne er baseret på kommandoer, som er en fast bestanddel af Windows. Notatet er opbygget

Læs mere

Viditronic NDVR Quick Guide. Ver. 2.0

Viditronic NDVR Quick Guide. Ver. 2.0 Viditronic NDVR Quick Guide Ver. 2.0 1 Indholdsfortegnelse 1. HOVEDMENU 3 1.1 START 5 1.2 AKTIVITETSINDIKATOR: 7 1.3 INFORMATIONS VINDUE: 7 1.4 PTZ KAMERA KONTROL: 7 1.5 SKÆRMMENU 8 1.5.1 AKTIVER BEVÆGELSE:

Læs mere

Arkitektur principper og design mønstre til realisering af enterprise applikationer baseret på rige domænemodeller (og.net)

Arkitektur principper og design mønstre til realisering af enterprise applikationer baseret på rige domænemodeller (og.net) Arkitektur principper og design mønstre til realisering af enterprise applikationer baseret på rige domænemodeller (og.net) Kim Harding Christensen EOS A/S Margrethepladsen 3 8000 Århus TLF: 8732 8787

Læs mere

IT-Basecamp 2013. Real World Java EE Patterns Adam Bien. Real World Java EE Patterns, Adam Bien Copyright Lund&Bendsen A/S

IT-Basecamp 2013. Real World Java EE Patterns Adam Bien. Real World Java EE Patterns, Adam Bien Copyright Lund&Bendsen A/S IT-Basecamp 2013 Real World Java EE Patterns Adam Bien 1 Indhold Lidt om mig Baggrund for valg af emnet Bogens opbygning Fra J2EE til JEE 5/6 Overflødiggjorte patterns Fremhæve et par patterns 2 Kenneth

Læs mere

Unity Guide 1 CONTENTS

Unity Guide 1 CONTENTS Unity Guide 1 CONTENTS Unity interface... 2 Components... 4 Materials... 7 Scripts opbygning... 8 Terrain... 8 Animations... 9 Particle system... 11 Audio... 11 Sprites... 12 GUI... 14 UNITY INTERFACE

Læs mere

Kursusarbejde 1 Grundlæggende Programmering. Arne Jørgensen, 300473-2919 klasse dm032-1a

Kursusarbejde 1 Grundlæggende Programmering. Arne Jørgensen, 300473-2919 klasse dm032-1a Kursusarbejde 1 Grundlæggende Programmering Arne Jørgensen, 300473-2919 klasse dm032-1a 3. oktober 2003 Kode //File Name: kaalhovede.cc //Author: Arne Jørgensen //Email Address: arne@arnested.dk, arnjor@niels.brock.dk

Læs mere

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

Programmering C Eksamensprojekt. Lavet af Suayb Köse & Nikolaj Egholk Jakobsen Programmering C Eksamensprojekt Lavet af Suayb Köse & Nikolaj Egholk Jakobsen Indledning Analyse Læring er en svær størrelse. Der er hele tiden fokus fra politikerne på, hvordan de danske skoleelever kan

Læs mere

(Unit) Testing. Det skal du

(Unit) Testing. Det skal du (Unit) Testing Det skal du 1 Overblik I dag skal det handle om testing (unit testing) 1. Kort om forskellige former for tests. 2. Unit Testing (Black Box Testing) Opfører kode under test sig som forventet?

Læs mere

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

Visual Studio Team System. Team Build en grundpille i søgen efter it-projektproduktivitet? Visual Studio Team System Team Build en grundpille i søgen efter it-projektproduktivitet? Agenda: Introduktion Hvorfor Automatiseret Build Microsoft Team Build Rapportering/Data warehouse Commentor A/S

Læs mere

Rekursion C#-version

Rekursion C#-version Note til Programmeringsteknologi Akademiuddannn i Informationsteknologi Rekursion C#-version Finn Nordbjerg 1 Rekursion Rekursionsbegrebet bygger på, at man beskriver noget ved "sig selv". Fx. kan tallet

Læs mere

DDD Runde 2, 2015 Facitliste

DDD Runde 2, 2015 Facitliste DDD Runde 2, 2015 Facitliste Søren Dahlgaard og Mathias Bæk Tejs Knudsen Opgaver og løsninger til 2. runde af DDD 2015. 1 4. 19. februar, 2015 linetest DK v1.0 Line Test Sigurd er begyndt i gymnasiet og

Læs mere

Objektorienterede metoder

Objektorienterede metoder Objektorienterede metoder Denne gang: Designmønstre Skabende designmønstre: Fabrikeringsmetode/Fabrik, Singleton, Abstrakt fabrik (Toolkit), Prototype, Objektpulje Singleton eksempel: Forskellige slags

Læs mere

Struktureret system udvikling Minimodul 5: Testdesign og planlægning af test

Struktureret system udvikling Minimodul 5: Testdesign og planlægning af test Struktureret system udvikling Minimodul 5: Testdesign og planlægning af test Rasmus L. Olsen, 9 April, 2008 Kursusoversigt og tidsplan Mm1: Introduktion til kursus, UML og use cases (13/2, 2008) Mm2: Kravspecifikation

Læs mere

02312 Indledende programmering og 02313 Udviklingsmetoder til IT- Systemer

02312 Indledende programmering og 02313 Udviklingsmetoder til IT- Systemer Projektopgave efterår 2009 jan 2010 02312 Indledende programmering og 02313 Udviklingsmetoder til IT- Systemer Projekt navn: CDIO tre ugers projekt Gruppe nr.: 52 Afleveringsfrist: Mandag d. 18-01-10 Studie

Læs mere

XML webservice for pensionsordninger. Version 1.0 Draft A

XML webservice for pensionsordninger. Version 1.0 Draft A XML webservice for pensionsordninger Version 1.0 Draft A Dokumentoplysninger Titel: Projekt: Webservice for pensionsordninger EDI kontorets branchekoordinerede dataudveksling Forfatter: Bidragsydere til

Læs mere

Software Design (SWD) Spørgsmål 1

Software Design (SWD) Spørgsmål 1 Spørgsmål 1 Unified Process Du skal give en beskrivelse af Unified Process. Beskrivelsen skal indeholde forklaring på følgende begreber: Phase Iteration Discipline Activity Milestone Artifact Spørgsmål

Læs mere

Objektorienteret design med arv og polymorfi:

Objektorienteret design med arv og polymorfi: Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Objektorienteret design med arv og polymorfi: Substitutionsprincippet Composite Design Pattern Finn Nordbjerg Side 1 Objektorienteret

Læs mere

DOtAB. Teknisk rapport

DOtAB. Teknisk rapport DOtAB Teknisk rapport Indholdsfortegnelse Introduktion... 1 Systemarkitektur... 1 Teknologier... 1 Platforme for mobile enheder... 1 Kommunikations interfacet... 2 Udviklingsmiljø... 2 IDOtAB (service

Læs mere

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

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java Kursus i OOP og Java Kursus i Objektorienteret programmering i Java Åben Dokumentlicens Dette foredragsmateriale er under Åben Dokumentlicens (ÅDL) Du har derfor lov til frit at kopiere dette værk Bruger

Læs mere

Løsningen garanterer at finde alle de cookies, som et nationalt tilsyn kan finde. Løsningen er valideret af Audit Bureau of Circulation i England.

Løsningen garanterer at finde alle de cookies, som et nationalt tilsyn kan finde. Løsningen er valideret af Audit Bureau of Circulation i England. Cookievejledningens Tekniske Guide Den tekniske guide beskriver fem skridt til overholdelse af cookiereglerne: 1. Fastlæggelse af webejendom 2. Undersøgelse af om der sættes cookies på hjemmesiden 3. Afgivelse

Læs mere

Start på Arduino og programmering

Start på Arduino og programmering Programmering for begyndere Brug af Arduino Start på Arduino og programmering EDR Hillerød Knud Krogsgaard Jensen / OZ1QK 1 Start på Arduino og programmering Sidste gang (Introduktion) Programmeringssproget

Læs mere

Internet Information Services (IIS)

Internet Information Services (IIS) Internet Information Services (IIS) Casper Simonsen & Yulia Sadovskaya H1we080113 06-11-2013 Indholdsfortegnelse Problemformulering... 2 Hvorfor:... 2 Hvad:... 2 Hvordan:... 2 Problembehandling... 3 Introduktion...

Læs mere

vil jeg blive mindet om det af VBA allerede mens jeg skriver koden, da der er tale om en såkaldt kompileringsfejl:

vil jeg blive mindet om det af VBA allerede mens jeg skriver koden, da der er tale om en såkaldt kompileringsfejl: Fejlhåndtering Selv de bedste programmører laver af og til fejl! Dette kommer sikkert som en overraskelse for de fleste, bortset fra de, der har arbejdet med et hvilket som helst større program. Fejl kan

Læs mere

Vejledning til Kilometer Registrering

Vejledning til Kilometer Registrering Vejledning til Kilometer Registrering iphone Appen som holder styr på dit firma og privat kørsel. Udviklet af Trisect Development 2011. www.trisect.dk For iphone version 4.2 og nyere. Med Kilometer Registrering

Læs mere

Start af nyt schematic projekt i Quartus II

Start af nyt schematic projekt i Quartus II Start af nyt schematic projekt i Quartus II Det følgende er ikke fremstillet som en brugsanvisning der gennemgår alle de muligheder der er omkring oprettelse af et Schematic projekt i Quartus II men kun

Læs mere

XProtect-klienter Tilgå din overvågning

XProtect-klienter Tilgå din overvågning XProtect-klienter Tilgå din overvågning Tre måder at se videoovervågning på For at skabe nem adgang til videoovervågning tilbyder Milestone tre fleksible brugergrænseflader: XProtect Smart Client, XProtect

Læs mere

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

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 WTF? Thomas Schou-Moldt, Miracle A/S (siden 2008) Arkitekt, udvikler, teknisk projektleder, mv. Indtil videre afsonet lidt over 20 år i branchen, ingen udsigt til prøveløsladelse tsm@miracleas.dk, 5374

Læs mere

Dokumentering af umbraco artikeleksport:

Dokumentering af umbraco artikeleksport: Dokumentering af umbraco artikeleksport: Lav en artikel side 2-3. Installationsguide side 3-5. Opsættelse af databasen og web.config side 5-8. Umbraco: templates side 8. Umbraco: borger.dk tab side 8.

Læs mere

Af Thomas Holm/Pixl Aps email@pixl.dk

Af Thomas Holm/Pixl Aps email@pixl.dk Af Thomas Holm/Pixl Aps email@pixl.dk Page: 1 Adobe og ICC profiler Traditionen tro er der sket en del fornyelse omkring den måde Adobe Photoshop 6.0 håndterer farver på. Det kan ikke komme som nogen stor

Læs mere

Om binære søgetræer i Java

Om binære søgetræer i Java Om binære søgetræer i Java Mads Rosendahl 7. november 2002 Resumé En fix måde at gemme data på er i en træstruktur. Måden er nyttig hvis man får noget data ind og man gerne vil have at det gemt i en sorteret

Læs mere

Crash Course i Programmering. HumTek, RUC

Crash Course i Programmering. HumTek, RUC Crash Course i Programmering HumTek, RUC Kursus mål At give en basal introduktion til programmering i sproget Processing At give et overblik over sprogets potentiale At have det sjovt :-) Kursus form Meget

Læs mere

Sporbarhed og Rapportering i Quality Center. Kim Stenbo Nielsen NNIT Application Management Services

Sporbarhed og Rapportering i Quality Center. Kim Stenbo Nielsen NNIT Application Management Services Sporbarhed og Rapportering i Quality Center Kim Stenbo Nielsen NNIT Application Management Services Indhold INTRODUKTION Hvem er jeg Hvad vil jeg fortælle om QC std. rapporteringsfaciliteter EXCEL RAPPORTER

Læs mere

Lønstigning mellem to selvvalgte perioder (Rapport-ID: 67)

Lønstigning mellem to selvvalgte perioder (Rapport-ID: 67) Lønstigning mellem to selvvalgte perioder (Rapport-ID: 67) 1. Hvad er formålet med rapporten? I denne rapport kan du sammenligne lønnen på to forskellige selvvalgte tidspunkter (to løngenerationer) pr.

Læs mere

Bypassing the. Brian Marick

Bypassing the. Brian Marick Bypassing the GUI Brian Marick Problemer med GUI GUI er designet for mennesker, ikke automatisering Automatiseret test af GUI kræver specialiseret værktøjer Har tildens til at bryde ned når der sker ændringer

Læs mere

DM502. Peter Schneider-Kamp (petersk@imada.sdu.dk) http://imada.sdu.dk/~petersk/dm502/

DM502. Peter Schneider-Kamp (petersk@imada.sdu.dk) http://imada.sdu.dk/~petersk/dm502/ DM502 Peter Schneider-Kamp (petersk@imada.sdu.dk) http://imada.sdu.dk/~petersk/dm502/ 1 DM502 Bog, ugesedler og noter De første øvelser Let for nogen, svært for andre Kom til øvelserne! Lav opgaverne!

Læs mere

Agil test tilgang - erfaringer fra projekter

Agil test tilgang - erfaringer fra projekter Agil test tilgang - erfaringer fra projekter af Michael Roar Borlund November 2011 Image Area Agenda Introduktion Agil test Fremtidsvision Agil test tilgang Agil opbygning i QC Resumé og Spørgsmål 2 Introduktion

Læs mere

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

Installationsguide. Integration af erhvervsdata fra NN Markedsdata til Microsoft Dynamics NAV 2015 Installationsguide Integration af erhvervsdata fra NN Markedsdata til Microsoft Dynamics NAV 2015 Indledning Dette dokument indeholder vejledning til installation af modulet NN Markedsdata i Dynamics NAV

Læs mere

APPLIKATIONSARKITEKTUR ERP INFRASTRUKTUR. EG Copyright

APPLIKATIONSARKITEKTUR ERP INFRASTRUKTUR. EG Copyright APPLIKATIONSARKITEKTUR ERP INFRASTRUKTUR EG Copyright Infrastruktur er mere end nogle servere... Den Mentale Infrastruktur Den Fysiske Infrastruktur Den Mentale Infrastruktur Vi vil jo gerne have vores

Læs mere

Procesbeskrivelse - Webprogrammering

Procesbeskrivelse - Webprogrammering Procesbeskrivelse - Webprogrammering Indholdsfortegnelse Forudsætninger... 1 Konceptet... 2 Hjemmesiden... 2 Server-side... 3 Filstrukturen... 3 Databasehåndtering og serverforbindelse... 4 Client-side...

Læs mere

LaserNet v6.6 Release Nyhedsbrev

LaserNet v6.6 Release Nyhedsbrev LaserNet v6.6 Release Nyhedsbrev NY Input Management-Løsning! Indhold: LaserNet v6.6 LaserNet Webinars NY LaserNet Input Management-løsning Nyt Produkt: LaserNet Client Nye Features & Functions Ny medarbejder

Læs mere

Object-Relational Mapping

Object-Relational Mapping Databaser for udviklere () Datamatiker TietgenSkolen Underviser: Allan Helboe 06-06-2010 Problemformulering Denne opgave er et forsøg på at beskrive problemerne der opstår ved anvendelsen af en relationel

Læs mere

Åben uddannelse, Efterår 1996, Oversættere og køretidsomgivelser

Åben uddannelse, Efterår 1996, Oversættere og køretidsomgivelser 3/10/96 Seminaret den 26/10 vil omhandle den sidste fase af analysen og de første skridt i kodegenereringen. Det drejer sig om at finde betydningen af programmet, nu hvor leksikalsk og syntaktisk analyse

Læs mere

Databaseadgang fra Java

Databaseadgang fra Java Databaseadgang fra Java Grundlæggende Programmering med Projekt Peter Sestoft Fredag 2007-11-23 Relationsdatabasesystemer Der er mange databaseservere Microsoft Access del af Microsoft Office MySQL god,

Læs mere

Google App Engine. Google App Engine som platform. Claus Myglegaard Vagner og Jacob von Eyben

Google App Engine. Google App Engine som platform. Claus Myglegaard Vagner og Jacob von Eyben GoogleAppEngine GoogleAppEnginesomplatform ClausMyglegaardVagnerogJacobvonEyben Abstract CloudcomputingerenteknologidervinderfremidengenerelleITinfrastruktur. SocialemediersåsomLinkedIn,TwitterogFacebookharøgetbehovetfor

Læs mere

Digital post Snitflader Bilag A2 - REST Register Version 6.3

Digital post Snitflader Bilag A2 - REST Register Version 6.3 Digital post Snitflader Bilag A2 - REST Register Version 6.3 1 Indholdsfortegnelse A2.1 INTRODUKTION 4 A2.1.1 HENVISNINGER 4 A2.2 OVERSIGT OVER FUNKTIONSOMRÅDE 5 A2.2.1 OPRET / HENT OPLYSNINGER OM SLUTBRUGER

Læs mere

Håndbog Til CPR services. Bilag 6 Anvendelse af CPR Søgeservices, programmeringsvejledning

Håndbog Til CPR services. Bilag 6 Anvendelse af CPR Søgeservices, programmeringsvejledning Håndbog Til CPR services Bilag 6 Anvendelse af CPR Søgeservices, programmeringsvejledning CPR-kontoret Datavej 20, Postboks 269, 3460 Birkerød E-post: cpr@cprdk Telefax 45 82 51 10 Hjemmeside: wwwcprdk

Læs mere

Lilleby Kommunebibliotek

Lilleby Kommunebibliotek Lilleby Kommunebibliotek Første projekt i Systemudvikling Arne Jørgensen, Christian Skovgaard, Lotte Simonsen og Sonny Petersen 3. november 2003 Indledning... Problemformulering... Problemanalyse... Projektafgrænsning...

Læs mere

MJPower engineering Ecu Link.

MJPower engineering Ecu Link. MJPower engineering Ecu Link. Trin for trin instruktioner. I dette eksempel starter vi med at teste en cykel med et Power Commander nul map. Man er nødt til at have en præcis omdrejningstal registrering,

Læs mere

MapBasic &.NET interaktion. MapBasic.NET. Jakob Lanstorp IT konsulent COWI. Odense 23. Juni 2011. 1 8 jun 2011 MapBasic &.

MapBasic &.NET interaktion. MapBasic.NET. Jakob Lanstorp IT konsulent COWI. Odense 23. Juni 2011. 1 8 jun 2011 MapBasic &. MapBasic &.NET interaktion MapBasic.NET Jakob Lanstorp IT konsulent COWI Odense 23. Juni 2011 1 MapBasic &.NET interaktion Erfaring med MapBasic.NET / Visual Studio Anden programmering 2 Program Hurtig

Læs mere

Hassansalem.dk/delpin User: admin Pass: admin INTERFACE DESIGN

Hassansalem.dk/delpin User: admin Pass: admin INTERFACE DESIGN Hassansalem.dk/delpin User: admin Pass: admin INTERFACE DESIGN 1/20 Indledning Dette projekt er den afsluttende del af webudvikling-studiet på Erhvervs Lillebælt 1. semester. Projektet er udarbejdet med

Læs mere

SAX Simple API for XML.

SAX Simple API for XML. SAX Simple API for XML. En API (Application Programming Interface) et bibliotek eller et sæt af funktioner eller metoder. SAX er et sådant bibliotek af abstrakte metoder som f. eks. startdocument() eller

Læs mere

Introduktion til ActionScript, fortsat

Introduktion til ActionScript, fortsat Introduktion til ActionScript, fortsat Kaspar Rosengreen Nielsen kaspar@interactivespaces.net i n t e r a c t i v e s p a c e s. n e t Kaspar Nielsen, kaspar@interactivespaces.net 1 Dagens program Opsamling

Læs mere

Velkommen på kursus hos Microworld

Velkommen på kursus hos Microworld Velkommen på kursus hos Microworld Du ønskes velkommen på kurset Windows 8 Workshop. Dette kursusmateriale er udarbejdet for at kunne fungere som arbejdsmateriale under selve kurset, men det er også meningen,

Læs mere

RSA Kryptosystemet. Kryptologi ved Datalogisk Institut, Aarhus Universitet

RSA Kryptosystemet. Kryptologi ved Datalogisk Institut, Aarhus Universitet RSA Kryptosystemet Kryptologi ved Datalogisk Institut, Aarhus Universitet 1 Kryptering med RSA Her følger først en kort opridsning af RSA kryptosystemet, som vi senere skal bruge til at lave digitale signaturer.

Læs mere

Rejsekort A/S idekonkurence Glemt check ud

Rejsekort A/S idekonkurence Glemt check ud Rejsekort A/S idekonkurence Glemt check ud 9. marts 2015 1 Indhold 1 Introduktion 4 1.1 Problembeskrivelse........................ 4 1.2 Rapportens opbygning...................... 4 2 Ordliste 5 3 Løsning

Læs mere

8 tips og tricks der sender din webshop i superligaen

8 tips og tricks der sender din webshop i superligaen 8 tips og tricks der sender din webshop i superligaen Indhold Intro Kend dine besøgende Gør valget simpelt og vind kunder Sådan får du en optimeret kategoriside Eksempler på to gode kategorisider Brug

Læs mere

Målsætning. Se hovedmål for scenariet og hovedmål for færdighedslæring her. Økonomi

Målsætning. Se hovedmål for scenariet og hovedmål for færdighedslæring her. Økonomi Målsætning Økonomiske beregninger som baggrund for vurdering af konkrete problemstillinger. Målsætningen for temaet Hvordan får jeg råd? er, at eleverne gennem arbejde med scenariet udvikler matematiske

Læs mere

Kom godt igang med Inventar registrering

Kom godt igang med Inventar registrering Kom godt igang med Inventar registrering (InventoryDB) (Med stregkodesupport) programmet fra PetriSoft Introduktion... 1 Inventar registrering... 2 Værktøjsudleje... 3 Service database til reperationer

Læs mere

Løsningsforslag til Camp Let. Case Beskrivelse: Camp Let

Løsningsforslag til Camp Let. Case Beskrivelse: Camp Let Løsningsforslag til Camp Let Case Beskrivelse: Camp Let Firmaet Camp Let har til formål at udleje forskellige typer transportable ferieboliger. Det drejer sig i øjeblikket om campingbusser, campingvogne,

Læs mere

2. SEMESTER PROJEKT 3 INTERAKTIONSUDVIKLING

2. SEMESTER PROJEKT 3 INTERAKTIONSUDVIKLING 2. SEMESTER PROJEKT 3 INTERAKTIONSUDVIKLING Baggrund Udgangspunktet er projekt 2, dvs. en blog om cupcakes, hvor målgruppe, afsender og modtager allerede er defineret. Du bliver nu bedt om at udvikle et

Læs mere

Model Drevet Design i Praksis

Model Drevet Design i Praksis Model Drevet Design i Praksis Dansk IT - På Vej Hjem møde d. 8/9-2009 Jeppe Cramon - TigerTeam ApS Lidt om mig 15 års erfaring som software udvikler Partner i TigerTeam Første erfaring med model drevet

Læs mere

HVORDAN VI DOWNLOADEDE INTERNETTET. Man skal crawle før man kan gå

HVORDAN VI DOWNLOADEDE INTERNETTET. Man skal crawle før man kan gå HVORDAN VI DOWNLOADEDE INTERNETTET Man skal crawle før man kan gå DAGSORDEN Hvem jeg er Behovet for en crawler Arkitektur Nutch og Hadoop MongoDB Udfordringer Tak for i dag JACOB AVLUND Partner i Siblingsoft

Læs mere

Indholdsfortegnelse PSpice modul 3. Forudsætninger. Forberedelse til øvelser

Indholdsfortegnelse PSpice modul 3. Forudsætninger. Forberedelse til øvelser Indholdsfortegnelse PSpice modul 3 Model Editor, opret diode ud fra model fundet på internettet.... 2 Parametrisk Analyse... 6 Ekstra - Parametrisk analyse på diode parameter... 9 Forudsætninger For at

Læs mere

Roskilde Tekniske Gymnasium. Eksamensprojekt. Programmering C niveau

Roskilde Tekniske Gymnasium. Eksamensprojekt. Programmering C niveau Roskilde Tekniske Gymnasium Eksamensprojekt Programmering C niveau Andreas Sode 09-05-2014 Indhold Eksamensprojekt Programmering C niveau... 2 Forord... 2 Indledning... 2 Problemformulering... 2 Krav til

Læs mere

ZBC Vordingborg Marcus Rasmussen, Oliver Meldola, Mikkel Nielsen 17/02 2015. The Board Game

ZBC Vordingborg Marcus Rasmussen, Oliver Meldola, Mikkel Nielsen 17/02 2015. The Board Game The Board Game 1 Målgruppe Før vi kom på vores spil, havde vi lidt en ide om hvad det ville komme til at blive. Vi så på spillet Cards against humanity og vores spil ville blive lidt som det, da der vil

Læs mere

FairSSL Fair priser fair support

FairSSL Fair priser fair support Microsoft IIS 6 Certifikat administration Følgende vejledning beskriver hvordan man installere et certifikat på en IIS 6 For support og hjælp til anvendelsen af denne vejledning kan du kontakte FairSSL

Læs mere

Accelerace og Green Tech Center kommer nu med et unikt tilbud om udvikling af din virksomhed Green Scale Up

Accelerace og Green Tech Center kommer nu med et unikt tilbud om udvikling af din virksomhed Green Scale Up Accelerace og Green Tech Center kommer nu med et unikt tilbud om udvikling af din virksomhed Green Scale Up Accelerace har gennem de seneste 7 år arbejdet tæt sammen med mere end 250 af de mest lovende

Læs mere

Ud af krisen. Software på tværs, 15. juni 2009

Ud af krisen. Software på tværs, 15. juni 2009 Ud af krisen Software på tværs, 15. juni 2009 Om Ative Agile udvikling og rådgivning Klassisk udviklingsmodel Krav Design Ændrer sig Implementering Tager for lang tid Springes over Mareridt Test Deployment

Læs mere

Indlæsning og anvendelse af kontoskema Res_14 til resultatopgørelse 2014. Vejledning

Indlæsning og anvendelse af kontoskema Res_14 til resultatopgørelse 2014. Vejledning Indlæsning og anvendelse af kontoskema Res_14 til resultatopgørelse 2014 Vejledning December 2014 1 Indholdsfortegnelse 1 Formål med denne vejledning... 3 2 Hent filer med kontoskema og kolonneformat...

Læs mere

Kursusarbejde 2 Grundlæggende Programmering

Kursusarbejde 2 Grundlæggende Programmering Kursusarbejde 2 Grundlæggende Programmering Arne Jørgensen, 300473-2919 klasse dm032-1a 31. oktober 2003 Indhold 1. Kode 2 1.1. hotel.h.................................................... 2 1.2. hotel.cc...................................................

Læs mere

Programmering. Det rent og skært nødvendige, det elementært nødvendige! Morten Dam Jørgensen

Programmering. Det rent og skært nødvendige, det elementært nødvendige! Morten Dam Jørgensen Programmering Det rent og skært nødvendige, det elementært nødvendige! Morten Dam Jørgensen Oversigt Undervisningen Hvad er programmering Hvordan er et program organiseret? Programmering og fysik Nobelprisen

Læs mere

Skriftlig opgave. Designtanker i database-nære systemer

Skriftlig opgave. Designtanker i database-nære systemer Skriftlig opgave til eksamen for faget»databaser«designtanker i database-nære systemer Martin Ancher Holm Juni 2010 1 Intro Denne skriftlige opgave indeholder kort de daglige tanker jeg har omkring design

Læs mere

Indhold. Side 2 af 26

Indhold. Side 2 af 26 Tema Design Design, Programmering og test af Adressebog Fra d. 17 april til 20 april 2012 Vejledere: Gunhild Marie Andersen Kis Boisen Hansen Gruppe B Deltagere Side 1 af 26 Indhold Indledning.... 3 Kodestandard...

Læs mere

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

Udfordringer og problemstillinger. En liste over de udfordringer og problemstillinger, der er ved Java og JEE udvikling Java og JEE 1 2 Udfordringer og problemstillinger En liste over de udfordringer og problemstillinger, der er ved Java og JEE udvikling 3 Generelt om Java og JEE 4 Generelt, I Man undervurderer hvor mange

Læs mere

Opsætning af internet gennem Bolignet-Aarhus

Opsætning af internet gennem Bolignet-Aarhus Opsætning af internet gennem Bolignet-Aarhus Denne vejledning er henvendt til brugere af computere, som benytter Windows XP som styresystem. Windows XP adskiller sig en del fra de øvrige styresystemer.

Læs mere

I denne øvelse vil du få vist hvordan opsætningen af netværket foregår. Målet er at du selv kan konfigurere en IP adresse på din lokal maskine.

I denne øvelse vil du få vist hvordan opsætningen af netværket foregår. Målet er at du selv kan konfigurere en IP adresse på din lokal maskine. I denne øvelse vil du få vist hvordan opsætningen af netværket foregår. Målet er at du selv kan konfigurere en IP adresse på din lokal maskine. Opsætningen her er speciel for dette lokalnetværk, der kan

Læs mere

e-tl System til System kommunikationstest

e-tl System til System kommunikationstest e-tl System til System kommunikationstest Version Dato Forfatter Kommentarer Distribueret til 0.5 22/10-07 Anders Bohn Jespersen Udgave til workshop 24/10. 0.6 24/10-07 HGK Opdateret med beskeder. 0.9

Læs mere

DK-Unit Point version 2.xx til PWE 37

DK-Unit Point version 2.xx til PWE 37 Beskrivelse af DK-Unit til Point Yomani og Xenta Dankort terminaler DK-Unit programmet er udviklet til at kunne benyttes sammen med forskellige applikationer, hvor man ønsker at kunne danne en Dankort

Læs mere

Dette dokument beskriver SUMOshop Backend v3, med fokus på ændringer ift. v2.

Dette dokument beskriver SUMOshop Backend v3, med fokus på ændringer ift. v2. 1 SUMOshop Backend v3 Dette dokument beskriver SUMOshop Backend v3, med fokus på ændringer ift. v2. Backend v3 er primært en visuel opdatering i et mere rent og moderne design. Hertil er der en række helt

Læs mere

FairSSL Fair priser fair support

FairSSL Fair priser fair support Exchange 2010 SSL certifikat administration Følgende vejledning beskriver hvordan man vælger hvilke adresser der skal være i ens Exchange 2010 SAN SSL certifikat. Derudover er der tekniske guides til at

Læs mere