(Unit) Testing. Det skal du

Størrelse: px
Starte visningen fra side:

Download "(Unit) Testing. Det skal du"

Transkript

1 (Unit) Testing Det skal du 1

2 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? 3. White Box testing Få aftestet så meget af koden som muligt ved at analysere input værdier 4. Isolerede unit tests Med håndskrevne mocks/stubs eller via Isolations framework 2

3 Hvad er test og hvorfor teste? Program test er udførelse af et program med den hensigt at finde fejl. Formålet med at teste er, at sikre at et program opfører sig som forventet, og ikke indeholder fejl (bugs). En god test har høj sandsynlighed for at afdække en fejl. Testing er dyrt men fejl er dyrere Jo før vi finder fejl jo bedre. Jo senere fejl opdages, jo dyrere er de at rette. Worst case: Fejl opdages efter produkt er shippet (tilbagekaldelse, kompensation, dårlig pr, etc.) Next-worst case: Fejl kan vise sig at kræve et redesign 3

4 Forskellige former for tests Forskellige former for tests bruges på forskellige tidspunkter til forskellige ting: Unit Test: Aftestning af programmets mindste enheder (metoder) i isolation. Integration Test: Delene er testet med unit tests Nu testes interaktionen mellem komponenter System Test: Tester systemet som et hele Acceptance Test: Aftestning via slutbruger afviger systemet fra kundens krav? Dækkende unit tests er byggeblokken for efterfølgende tests. 4

5 Integrations testing Fra The art of Unit Testing, Roy Osherove 5

6 Hvad er unit tests? En unit test består af en metode der kalder en anden metode (kode under test - CUT) og tjekker korrektheden af bestemte antagelser. Hvis antagelsen er forkert har unit testen fejlet En unit test kan opdeles i tre dele: Arrange: Data der skal bruges som input til testen klargøres. Act: En sekvens der udfører koden under test med data fra Arrange skridtet. Assert: Assertions verificerer korrektheden af bestemte antagelser for koden under test. 6

7 Unit Test frameworks I princippet kunne vi lave vores eget test framework, men der er ingen grund til at genopfinde hjulet I stedet bruges et unit testing framework (fx NUnit) Unit test frameworks automatiserer tests. Indeholder runners der kan udføre én, flere, eller alle tests på én gang. Indeholder assertions til at validere forventet opførsel Unit testing frameworks letter processen med at skrive tests. 7

8 Eksempel på en Unit Test Unit tests kan opdeles i Arrange-Act-Assert afdelinger: //I tilstand Q3 skal input 0 rejectes (returner false) [Test] public void Take0_ReturnFalse() { //Arrange Dfa dfa = new Dfa(); Q3State target = new Q3State(dfa); int input = 0; bool expected = false; //Act bool actual = target.take0(index); //Assert Assert.AreEqual(expected, actual); } 8

9 Getting started med NUnit 1. Download NUnit fra nunit.org 2. Lav (test) projekt der indeholder unit tests af kode-projekt -> vi adskiller tests fra kode. 3. I testkode-projektet: add reference til nunit.framework.dll (../Nunit <version>/bin/net-2.0/framework/) 4. Skriv tests 5. Kør tests: Åbn Nunit -> Åbn test-projekt -> Kør 9

10 Eksempel test Area() metode Kode-projektet har en Rectangle klasse. - Dens constructor tager højde/breddre parametre. - Dens Area() metode returnerer arealet (højde * bredde). //1. Lav test projekt using NUnit.Framework; Add reference using RectangleProject; //Rectangle defineret her namespace RectangleTestProject { 1. Opret test projekt [TestFixture] 2. Importer nunit og CUT public class RectangleTest 3. Lav test klasse (fixture) { 4. Lav test case [Test] 5. Kør test i Nunit public void TestArea() 1. Åbn og kør testprojekt { Rectangle q = new Rectangle(2, 3); Assert.IsTrue(q.Area() == 6); } } 10

11 [TestFixture] Opsætning af fælles ressource (indlæs fra DB el. lign public class RectangleTest { [TestFixtureSetUp] <- Udføres én gang før første test public void SetUpSuite() {...} [TestFixtureTearDown] <- Udføres én gang efter sidste test public void TearDownSuite() {...} [TearDown] <- Udføres efter hver test public void TearDownTest() {...} [SetUp] <- Udføres før hver test public void TestCaseSetup() {...} Isolation er vigtigt } [Test] public void SomeUnitTest() { Rectangle r = new Rectangle(2, 3); int area = q.area(); Assert.IsTrue(q.Area() == 6); } //Arrange //Act //Assert Importer Kode-projekt Unit test 11

12 Test attributter Følgende grundlæggende (og stort set identiske) attributter findes i ethvert unit testing framework: TestFixture, Test, SetUp, TearDown, TestFixtureSetUp, TestFixtureTearDown, ExpectedException, parametriseret test) [ExpectedException(ExceptionType)] Angiver forventet exception. Hvis exception = pass, hvis ikke = fail Parametriseret test kan angive forskellige input værdier til samme test: [TestCase(15, 3, Result=5)] Assert her [TestCase(24, -4, Result = -6)] public double Divide_ValidNumbers_ValidResult(int a, int b) { Person p = new Person(); return p.divide(a, b); } 12

13 ASSERTIONS 1. EQUALITY ASSERTS 2. IDENTITY ASSERTS 3. CONDITION ASSERTS 4. COMPARISON ASSERTS 5. TYPE ASSERTS 6. EXCEPTION ASSERTS 7. STRING ASSERT 8. COLLECTION ASSERT 9. UTILITY METHODS Assertions Assertions bruges til at verificere at koden under test opfører sig som forventet. Assertions er opdelt i følgende kategorier: 13

14 1 og 2: Equality og Identity Asserts Equality Assertions Assert.AreEqual(expected, actual) Numeriske værdier og object. Assert.AreEqual(expected, actual, delta) Assert.AreNotEqual(expected, actual) Numeriske værdier og object Identity Assertions Assert.AreSame(expected, actual) //reference til samme objekt? Assert.NotSame(expected, actual) Alle asserts har overload der tillader at man kan angive en besked til brugeren når assert fejler. 14

15 3. Condition Asserts Assert.IsTrue(bool) Assert.IsFalse(bool) Assert.IsNaN(double) Assert.IsEmpty(string) Assert.IsNotEmpty(string) Assert.IsEmpty(ICollection) Assert.IsNotEmpty(Icollection) 15

16 4. Comparison Asserts Assert.Greater(arg1, arg2) Assert.GreaterOrEqual( int arg1, int arg2 ); Assert.Less(arg1, arg2) Assert.LessOrEqual( int arg1, int arg2 ); Gælder for numeriske værdier og IComparable 16

17 5. Type Asserts Assert.IsInstanceOf( Type expected, object actual ); Assert.IsNotInstanceOf( Type expected, object actual ); Assert.IsAssignableFrom( Type expected, object actual ); Kan objekt tildeles værdi af given type? Assert.IsNotAssignableFrom( Type expected, object actual ); Generiske udgaver (fra version 2.5): Assert.IsInstanceOf<T>( object actual ) Assert.IsNotInstanceOf<T>( object actual ) Assert.IsAssignableFrom<T>( object actual ); Assert.IsNotAssignableFrom<T>( object actual ); 17

18 6. Exception Asserts a) Exception Assert.Throws( Type expectedexceptiontype, TestDelegate code); b) T Assert.Throws<T>(TestDelegate code); Throws forsøger at kalde en metode (indkapslet som delegate) for at verificere at metoden kaster den angivne exception. void Assert.DoesNotThrow(TestDelegate code); Verificerer at delegate ikke kaster exception. a) Exception Assert.Catch(TestDelegate code); b) T Assert.Catch<T>(TestDelegate code); Verificerer at delegate kaster exception af angivne type eller en nedarvet exception type. [Test] public void TestException() { //throws returnerer exception, der så kan inspiceres ArgumentException ex = Assert.Throws<ArgumentException>( () => { throw new ArgumentException("bad bad arg") }); Assert.That(ex.Message, Is.EqualTo("bad bad arg")); } 18

19 Samme throws test i forskellige versioner [Test] public void Tests() { //.NET 1.x Assert.Throws(typeof(ArgumentException), new TestDelegate(MethodThatBlows) ); //.NET 2.0 Assert.Throws<ArgumentException>( MethodThatBlows() ); Assert.Throws<ArgumentException>( delegate { throw new ArgumentException(); } ); } // C# 3.0 Assert.Throws<ArgumentException>( () => throw new ArgumentException(); } ); void MethodThatBlows() { throw new ArgumentException(); } 19

20 7. String Asserts StringAssert.Contains( string expected, string actual ); StringAssert.StartsWith( string expected, string actual ); StringAssert.EndsWith( string expected, string actual ); StringAssert.AreEqualIgnoringCase( string expected, string actual ); StringAssert.IsMatch( string regexpattern, string actual ); 20

21 8. Collection Asserts CollectionAssert.AllItemsAreInstancesOfType( IEnumerable collection, Type expectedtype ); CollectionAssert.AllItemsAreNotNull( IEnumerable collection ); CollectionAssert.AllItemsAreUnique( IEnumerable collection ); CollectionAssert.AreEqual( IEnumerable expected, IEnumerable actual ); CollectionAssert.AreNotEqual( IEnumerable expected, IEnumerable actual ); CollectionAssert.AreEquivalent( IEnumerable expected, IEnumerable actual); CollectionAssert.AreNotEquivalent( IEnumerable expected, IEnumerable actual ); CollectionAssert.Contains( IEnumerable expected, object actual ); CollectionAssert.DoesNotContain( IEnumerable expected, object actual ); CollectionAssert.IsSubsetOf( IEnumerable subset, IEnumerable superset ); CollectionAssert.IsNotSubsetOf( IEnumerable subset, IEnumerable superset); CollectionAssert.IsEmpty( IEnumerable collection ); CollectionAssert.IsNotEmpty( IEnumerable collection ); CollectionAssert.IsOrdered( IEnumerable collection ); CollectionAssert.IsOrdered( IEnumerable collection, IComparer comparer ); 21

22 9. Utility metoder Assert.Pass(); Tillader en test at bestå øjeblikkeligt Assert.Fail(); Tillader en test af fejle øjeblikkeligt Assert.Ignore(); Angiver at testen midlertidig skal ignoreres Assert.Inconclusive(); Angiver at testen er inconclusive 22

23 Brug en konvention Anbefaling fra The Art of Unit Test af Roy Osherove (arkitekten bag Test Lint): Target Test Projekt Klasse Lav projekt kaldet [Projekt].Tests. - MySuperProject -> MySuperProject.Tests Lav klasse kaldet [Klasse]Tests. - Car -> CarTests Metode Lav (minimum én) metode kaldet [Metode]_[Betingelse]_[Forventning]. Fx. isstrongpassword_strongpass_returnstrue IsStrongPassword_weakPass_ReturnsFalse 23

24 Fordele ved unit testing Unit tests kan bruge til at angive funktionelle krav: Givet at input overholder en precondition, så tjekkes at output overholder en postcondition Test Driven Development starter med tests inden koden skrives tests er drivkraften i designet. En test-suite med høj kode-dækning og mange assertions indikerer kode af god kvalitet. Unit tests kan bruges til at dokumentere korrekt programopførsel. Kort feedback loop fejl opdages og rettes hurtigt. Unit tests fungerer som regressions-tests. Når vi ændrer i koden, fungerer det så stadig? 24

25 Ulemper ved unit testing Kan være trivielt og tidskrævende Kvaliteten af unit tests afhænger af kvaliteten af unit tests (resultat af den investerede tid samt testernes erfaring) Kvalitet afhænger af kode dækning og antal assertions (kode-dækning er ikke i sig selv en garanti, men lav kode-dækning indikerer en risiko) Unit tests kan indeholde bugs + være svære at vedligeholde. 25

26 Test-Driven Development (TDD) Udviklingsproces hvor test skrives inden koden. Tests fungerer som funktionel specifikation TDD består af 3 korte skridt: 1. Skriv en test 2. Kør den og se den fejle 3. Refaktorer koden så testen består. 26

27 fejl Fra The Art of Unit Testing: with Examples in.net 27

28 Regler for test cases En test case skal validere én ting (én Assert) Hvis én assert fejler i en metode udføres resten ikke. Flere asserts betyder flere tests En test skal være simpel og læsbar > nem at forstå; undgå at introducere bugs i testen. Betinget logik er forbudt -> split op i flere tests el. params. Undgå False positives Undgå False negatives En test case skal være reproducerbar. Samme input -> samme output Samme tilstand før hver udførelse af test. Test cases skal udføres i isolation Test cases skal kunne udføres i vilkårlig rækkefølge En test case køres udelukkende i main memory. Den rører ikke nogle eksterne ressourcer (filer eller databaser). Hvis det er tilfældet er det ikke en unit test, men en integrationstest. En sådan test ændrer tilstand for andre tests/senere tests (ikke reproducerbar, ikke vilkårlig rækkefølge). 28

29 Flere regler Gør tests vedligeholdelsesbare Test kun offentlige medlemmer Tests bliver mindre skrøbelige Private medlemmer bliver indirekte testet gennem offentlige medlemmer Don t Repeat Yourself (DRY): Undgå redundant kode. Placer fælles Arrange i metoder (InitializeXXX) Undgå new() brug Factory i tilfælde af constructor ændres. Test logik skal angive forventet opførsel Fail first betyder ikke at skriv en dummy test. Dette medfører at testen ikke koden skal ændres for at få pass Lad Test API fungere som dokumentation -> Brug sigende test navne, giv sigende beskeder ved Assert fejl. Gør tests nemme at køre Hvis de er svære gider folk ikke -> fejl bliver ikke opdaget Flyt (konfigurations-) krævende tests til separat mappe/projekt med instruktioner. 29

30 Hvad skal der testes efter? Forventet opførsel ved forskelligt input Test for grænseværdier Find først ud af hvad grænseværdierne er (ækvivalens klasser og grænseværdi analyse) Test både for success og fejl Opfører koden under test sig som forventet ved både lovligt og ulovlig input 30

31 Input til test Black Box Testing: Drevet af funktionelle krav. Givet bestemt input skal systemet give bestemt output Udtømmende kombinationer af input værdier er ikke muligt (2^32 forskellige ints, et ubegrænset antal strings, ) Mål: En test skal maksimere antallet af fejl der findes med et endeligt antal test cases Hvordan finder vi vores endelige antal test cases? Analyse af input/output domænet Heuristikker 31

32 Input/Output analyse Baseret på ækvivalens partitionering: Input deles ind i et antal klasser (partitioner) hvor følgende antages: Programmet opfører sig ens for input fra samme klasse (all fail all pass) En test med en værdi fra hver klasse er tilstrækkeligt (repræsentativ jf 1) Ækvivalens-klasser kan afgøres fra specifikation (1 <= x <= 10) Mere effektivt er, at inkludere værdier på, lige over, og lige under grænserne -> 32

33 #1 Ækvivalens klasse Værdi Bemærkning 1 x < Tilfældigt tal under nedre grænse 2 1 <= x <=10 0 Lige under nedre grænse 3 1 <= x <=10 1 På nedre grænse 4 1 <= x <=10 2 Lige over nedre grænse 5 1 <= x <=10 4 Tilfældig tal imellem 6 1 <= x <=10 9 Lige under øvre grænse 7 1 <= x <=10 10 På øvre grænse 8 1 <= x <=10 11 Lige over øvre grænse 9 X > Tilfældig tal over øvre grænse 33

34 Heuristikker Vi kan foretage risiko-analyse for at identificere høj-risiko kode: Enheder med uklar specifikation Kode skrevet af uerfarne programmører Kompleks kode Risiko analyse beror på vurdering. 34

35 Kode-dækning Testing never proves the absence of faults, it only shows their presence (Dijkstra) Selv hvis alle vores tests består, betyder det så vores kode er skudsikker? Hvad nu hvis vi kun har testet halvdelen af koden? Kode-dækning (test dækning) er en måde at finde områder i koden der ikke er dækket af tests, og til at definere yderligere tests til at øge dækning Kode-dækning er indirekte et kvalitets-kriterie manglende dækning indikerer lav troværdighed Kode-dækning bygger på antagelsen om at mange fejl er relateret til control flow Kode-dækning kræver at vi dykker ned i koden - white box testing 35

36 White-box Testing Black-box testing udvælger tests på baggrund af funktionelle krav White-box testing udvælger tests baseret på et programs interne struktur White-box testing omhandler kode-dækning kriteriet for udvælgelse af tests er Adequacy Criteria Adequacy kriteriet afgøres af hvor godt en test suite har dækket en Control Flow Graph (CFG) (eller anden model af koden) CFG er en orienteret graf hvor knuder er (en region af) kode, og kanter repræsenter skift mellem koderegioner. En region har et enkelt entry og exit punkt. 36

37 Forskellige metrikker Funktions-coverage: Har vi besøgt alle metoder? Statement coverage: Har vi besøgt alle knuder i CFG? Decision/Branch coverage: Har vi besøgt alle kanter i CFG? Condition coverage: Har hvert boolsk (sub) udtryk været evalueret til hhv sand og falsk? Kode-dæknings værktøjer inkluderer typisk statement- og branch coverage. 37

38 Foo(int x, int y, int z) { if (x > 1 && y == 0) z = z / x; if (x == 2 z > 1) z = z + 1; } 1) X = 2, Y = 0, Z = 3 (abe) statement coverage 1) X = 2, Y = 0, Z = 3 (abe) 2)X = 0, Z = 0 (acd) branch coverage 1) X = 2, Y = 0, Z = 0 (acd) 2) X = 3, Y = 0, Z = 3 (ace) Condition coverage (ikke branch coverage) 38

39 Demo Kode dækning i Visual Studio Lav unit test projekt Enable code coverage: Test -> Edit Test Settings -> Local -> Data and Diagnostics -> Dobbelt-klik code coverage -> angiv kode under test. Kør unit test Non VS Ncover (http://ncover.sourceforge.net/ ) 39

40 Kode dækning (2) I Test Results : Kode under test: Rød = ikke besøgt, blå = besøgt 40

41 Pex Program EXploration Automatiseret test input generator Branch coverage Hvordan Pex finder input -> (Slides fra -> Download PEX og Moles (Academic version): us/downloads/d f-4d7a-bf05-16fd7eb26559/default.aspx 41

42 Dynamic Symbolic Execution Code to generate inputs for: void CoverMe(int[] a) { if (a == null) return; if (a.length > 0) if (a[0] == ) throw new Exception("bug"); } F F a.length>0 a==null T T Constraints to solve a!=null a!=null && a.length>0 a!=null && a.length>0 && a[0]== Solve Choose next path Data null {} {0} {123 } Execute&Monitor Observed constraints a==null a!=null &&!(a.length>0) a!=null && a.length>0 && a[0]!= Negated condition a!=null && a.length>0 && a[0]== Done: There is no path left. F a[0]==123 T 42

43 Aftestning i isolation Næste sektion omhandler brugen af stubs og mocks til at bryde eksterne afhængigheder Download NMock (Nunit har også indbyggede mocks, men de er lavet til internt brug dokumentationen er ikke-eksisterende) Add reference: NMock2.dll + using NMock2; 43

44 Aftestning i isolation Metoder på ét objekt afhænger tit af metoder på andre objekter Disse afhængigheder kan være: uden for vores kontrol/ tidskrævende/ besværlige/ endnu ikke implementeret (filsystem, db, kald af web services, send mail, etc.) Vi vil gerne fjerne disse afhængigheder, så vi kan teste i isolation -> Vi introducerer istedet Mocks (Stubs) 44

45 Stub Stub: En kontrollerbar erstatning for en ekstern afhængighed. Ekstern afhængighed: Et objekt som koden under test interagerer med og som vi ikke har kontrol over/tidskrævende el. lign. (fil manager, mail manager, db persistens, etc.). Stubs gør at vi kan teste kode, uden at bekymre os om eksterne afhængigheder. Hvad der sker i de eksterne afhængigheder er uvæsentligt for den nuværende test Ved at fjerne afhængigheder gør vi vores kode testbar 45

46 Udskift afhængighed med Stub Lav et interface som afhængigheden arver fra (hvis ikke det er gjort i forvejen) Programmér til et interface (hvis ikke det er gjort i forvejen) Lav stub der arver fra interface 1. Kan laves i hånden 2. Man kan også et isolations-framework (som fx NMock) Udskift afhængighed med stub (Dependency Injection) 46

47 Eksempel med Shopping basket Vi vil afteste ShoppingBasket samt BasketItem ShoppingBasket gemmer indehold af kurv i DB BasketItem indlæser, givet et produktid, produktets navn og pris fra databasen. Database = ekstern afhængighed Vi vil gerne teste uden at kommunikere med den fysiske database. 47

48 Interface for ekstern afhængighed //interface for external dependency (og stub) public interface IShoppingDataAccess { string GetProductName(int productid); decimal GetUnitPrice(int productid); IList<BasketItem> LoadBasketItems(Guid basketid); void SaveBasketItems(Guid basketid, IList<BasketItem> items); } //En database (= external dependency) public interface ShoppingDB : IShoppingDataAccess { public string GetProductName(int productid) {...} public decimal GetUnitPrice(int productid) {...} public IList<BasketItem> LoadBasketItems(Guid basketid) {...} void SaveBasketItems(Guid basketid, IList<BasketItem> items) {..} } 48

49 public class BasketItem Dependency { IShoppingDataAccess _dataaccess; public decimal UnitPrice { get; set; } public string ProductName { get; set; } private int _productid; Ekstern kommunikation public int ProductId { get { return _productid; } set { _productid = value; UnitPrice = _dataaccess.getunitprice(_productid); ProductName = _dataaccess.getproductname(_productid); } } Dependency Injection } public BasketItem( int productid, int quantity, IShoppingDataAccess dataaccess) { this.initialize(productid, quantity, dataaccess); }... 49

50 public class Basket { List<BasketItem> _basketitems; private Guid _baskedid; //bruger også db/stub private IShoppingDataAccess _dataaccess; Dependency og Dependency Injection public Basket(IShoppingDataAccess dataaccess) { Initialize(dataAccess); }... } public void Save() { _dataaccess.savebasketitems( _baskedid, _basketitems.asreadonly()); } 50

51 Og her er så en håndskreven stub: //interfacet for external dependency (og stub) public interface IShoppingDataAccess { string GetProductName(int productid); decimal GetUnitPrice(int productid); IList<BasketItem> LoadBasketItems(Guid basketid); void SaveBasketItems(Guid basketid, IList<BasketItem> items); } //Vores stub for databasen //Returner dummy værdier (fixed el. conditional) ved kald til Stub public interface ShoppingDBStub : IShoppingDataAccess { public string GetProductName(int productid) { } public decimal GetUnitPrice(int productid) {...} public IList<BasketItem> LoadBasketItems(Guid basketid) {...} void SaveBasketItems(Guid basketid, IList<BasketItem> items) {..} } 51

52 Simpel Test med afhængighed fjernet [TestFixture] public class BasketTests { [Test] public void SimpleSaveTest() { ShoppingDBMock dbmock = new ShoppingDBMock(); Basket basket = new Basket(dbMock); BasketItem item = new BasketItem(1, 2, dbmock); basket.add(item); b.save(); <- Mock implementation kaldes //Assert opdateret tilstand Assert.Contains(item, basket.basketitems); } } 52

53 Vi kan også spare krudt på at lave vores egen stub, og i stedet lade NMock gøre det for os using NMock2; [Test] mock objekt fabrik public void SimpleSaveTest() { Nyt mock objekt vha Reflection NMock2.Mockery mockery = new Mockery(); IShoppingDataAccess dbmock = mockery.newmock<ishoppingdataaccess>(); Basket b = new Basket(dbMock); Guid g = Guid.NewGuid(); b.basketid = g; Stub.On(dbMock). Method("SaveBasketItems"). With(g, new List<BasketItem>()); Mock objekt til hvis SaveBasketItems bliver Kaldt med angivne parametre (stub = loose mock) ~SetupResult; strict = false } b.save(); //kalder SaveBasketItems mockery.verifyallexpectationshavebeenmet(); //til ære for Lint 53

54 Mock (eller strict mock) udgave using NMock2; [Test] mock objekt fabrik public void SimpleSaveTest() { Nyt mock objekt vha Reflection NMock2.Mockery mockery = new Mockery(); IShoppingDataAccess dbmock = mockery.newmock<ishoppingdataaccess>(); Basket b = new Basket(dbMock); Guid g = Guid.NewGuid(); b.basketid = g; Expect.Once.On(dbMock). Method("SaveBasketItems"). With(g, new List<BasketItem>()); SaveBasketItems skal kaldes én gang med angivne parametre } b.save(); //kalder SaveBasketItems mockery.verifyallexpectationshavebeenmet(); 54

55 Input værdier og returværdier Mocks/stubs kan også returnere forskellige værdier ved forskelligt input Aftestning af BasketItems constructor der får værdier indlæst fra DB på baggrund af angivet productid 55

56 public class BasketItem { IShoppingDataAccess _dataaccess; public decimal UnitPrice { get; set; } public string ProductName { get; set; } public int Quantity { get; set; } private int _productid; public int ProductId { get { return _productid; } set { _productid = value; UnitPrice = _dataaccess.getunitprice(_productid); ProductName = _dataaccess.getproductname(_productid); } } } public BasketItem(int p, int q, IShoppingDataAccess d) { this.dataaccess = d; this.productid = p; this.quantity = q; } 56

57 [Test] public void SimpleSaveTest() { IShoppingDataAccess dbmock2 = mockery.newmock<ishoppingdataaccess>(); Mocks med returværdier int expectedproductid = 1, expectedquantity = 2; decimal expectedunitprice = 99.0m, expectedsubtotal = 198.0m; string expectedproductname = "Cheese"; //sæt forventninger Expect.Once.On(dbMock2). Method("GetUnitPrice"). With(expectedProductId). Will(Return.Value(expectedUnitPrice)); Expect.Once.On(dbMock2). Method("GetProductName"). With(expectedProductId). Will(Return.Value(expectedProductName)); //to be continued -> 57

58 Fortsat (constructoren kaldes)...fortsat //her kommer kaldet til constructoren: BasketItem item = new BasketItem(expectedProductId, expectedquantity, dbmock2); //Assert korrekt tilstand Assert.AreEqual(item.ProductId, expectedproductid); Assert.AreEqual(item.Quantity, expectedquantity); Assert.AreEqual(item.ProductName, expectedproductname); Assert.AreEqual(item.UnitPrice, expectedunitprice); Assert.AreEqual(item.GetPrice(), expectedsubtotal); } //korrekt opførsel (metoder der blev kaldt) mockery.verifyallexpectationshavebeenmet(); Se mere på: 58

59 Forskel på mocks og stubs Stubs bruges til at returnere data til metode under test, så man kan lave assertions på hvordan metoden håndterer data fra afhængigheder. Hvordan afhængigheder kommer frem til resultatet er ikke væsentligt. Mocks bruges til at specificere forventninger om hvordan metoderne på en afhængighed kaldes af metode under test: Hvor mange gange, med hvor mange argumenter, etc. Forskel i hvordan test resultater verificeres: Tilstands-verifikation vs. Behavior verifikation. Med stubs undersøger vi at metode under test er i bestemt tilstand efter kald til afhængigheder. Med mocks undersøger vi at metode under test kalder afhængigheder på den rigtige måde. Det eneste der assertes på er, at eksterne afhængigheders metoder blev kaldt i den rigtige rækkefølge. Metode under test ændrer ikke nødvendigvis tilstand. 59

60 Værktøjer NUnit: NMock: Typemock Test Lint: NCover: Pex (og Moles): Alternative værktøjer: Unit Testing Framework: MBUnit: Isolations-framework: Rhino Mocks: Moq: 60

61 Opsummering Unit Testing (Black Box Testing) Opfører kode under test sig som forventet? Fortæller ikke noget om hvorvidt vi får aftestet hele koden White Box testing Få aftestet så meget af koden som muligt ved at analysere input værdier Fortæller ikke noget om hvorvidt koden opfylder specifikation Isolerede unit tests Med håndskrevne mocks/stubs eller via Isolations framework 61

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

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

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

Indhold. Senest opdateret:03. september 2013. Side 1 af 8

Indhold. Senest opdateret:03. september 2013. Side 1 af 8 Indhold Introduktion... 2 Scenarier hvor API et kan benyttes... 2 Scenarie 1 Integration til lagerhotel... 2 Scenarie 2 Integration til økonomi system... 2 API Modeller... 2 Webshop2 API Model v1... 3

Læs mere

Indhold. Senest opdateret : 30. juli 2010. Side 1 af 5

Indhold. Senest opdateret : 30. juli 2010. Side 1 af 5 Indhold Introduktion... 2 Scenarier hvor API et kan benyttes... 2 Scenarie 1 Integration til lagerhotel... 2 Scenarie 2 Integration til økonomi system... 2 Webshop2 API Model... 3 Brugen af API et... 4

Læs mere

Database for udviklere. Jan Lund Madsen PBS10107

Database for udviklere. Jan Lund Madsen PBS10107 Database for udviklere Jan Lund Madsen PBS10107 Indhold LINQ... 3 LINQ to SQL og Arkitektur... 3 O/R designere... 5 LINQ Den store introduktion med.net 3.5 er uden tvivl LINQ(udtales link): Language-INtegrated

Læs mere

Udvikling af DOTNET applikationer til MicroStation i C#

Udvikling af DOTNET applikationer til MicroStation i C# Udvikling af DOTNET applikationer til MicroStation i C# Praktiske tips for at komme i gang. Gunnar Jul Jensen, Cowi Hvorfor nu det? Mdl og Vba kan det hele Fordelene er : udviklingsmiljøet er eksternt

Læs mere

Terese B. Thomsen 1.semester Formidling, projektarbejde og webdesign ITU DMD d. 02/11-2012

Terese B. Thomsen 1.semester Formidling, projektarbejde og webdesign ITU DMD d. 02/11-2012 Server side Programming Wedesign Forelæsning #8 Recap PHP 1. Development Concept Design Coding Testing 2. Social Media Sharing, Images, Videos, Location etc Integrates with your websites 3. Widgets extend

Læs mere

Fra idé til virkelig med Azure Mobile Services

Fra idé til virkelig med Azure Mobile Services Fra idé til virkelig med Azure Mobile Services Niels Ladegaard Beck Holion nlb@holion.dk @nielslbeck Windows Developers in Denmark Azure App Service Mobile App Introduktion til Azure Mobile Services Platform

Læs mere

Objektorienteret Programmering

Objektorienteret Programmering Objektorienteret Programmering Struktureret Systemudvikling Jan Bendtsen Automation and Control Indhold Lidt om programmeringssprog Klasser i Java Klasser i C++ Oversættelse og kørsel af kode Et eksempel:

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

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

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

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

Casper Fabricius http://casperfabricius.com. ActiveRecord. O/RM i Ruby on Rails

Casper Fabricius http://casperfabricius.com. ActiveRecord. O/RM i Ruby on Rails Casper Fabricius http://casperfabricius.com ActiveRecord O/RM i Ruby on Rails Casper Fabricius Freelance webudvikler - casperfabricius.com 9 års erfaring med webudvikling 6 år med ASP/ASP.NET/C# 3 år med

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

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

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

Obligatorisk opgave i objektorienteret analyse og design

Obligatorisk opgave i objektorienteret analyse og design Obligatorisk SD-opgave s. Obligatorisk opgave i objektorienteret analyse og design Løs følgende, som en indviduel opgave. I må gerne samarbejde i grupper, men alle har ansvar for at udfærdige sin egen

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

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

TDD og ASP.Net MVC. Finn Vilsbæk fvs@panmedia.dk

TDD og ASP.Net MVC. Finn Vilsbæk fvs@panmedia.dk TDD og ASP.Net MVC Finn Vilsbæk fvs@panmedia.dk 1 Emner Hvad er TDD? Hvad er TDD i konteksten af ASP.Net MVC? Hvordan kan det hjælpe virksomheden? Hvordan kan det hjælpe programmøren? Hvordan får vi det

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

Dagens program. Domæner. change log- screen shots hver gang I har arbejdet med themet. Arkitekturen bag en wp blog. Hvad er widgets.

Dagens program. Domæner. change log- screen shots hver gang I har arbejdet med themet. Arkitekturen bag en wp blog. Hvad er widgets. Dagens program Har alle fået? Har nogen betalt for meget? Hav jeres koder klar Domæner change log- screen shots hver gang I har arbejdet med themet. Arkitekturen bag en wp blog Hvad er widgets Hvad er

Læs mere

Version Dato Beskrivelse 1.0.0 26/11/2012 Initial version 1.2.0 05/03/2013 Tilføjet eksempel med Template Agent, generelt udvidet dokumentet.

Version Dato Beskrivelse 1.0.0 26/11/2012 Initial version 1.2.0 05/03/2013 Tilføjet eksempel med Template Agent, generelt udvidet dokumentet. MOX og APOS2 Forord Dette dokument er en del af APOS version 2 manualerne. APOS version 2 (APOS2 herefter) er et organisation, klassifikation og personale system baseret på Sag & Dokument standarderne.

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

ODIN-webservice ændringer release 2010 v2.0

ODIN-webservice ændringer release 2010 v2.0 DOKUMENTATION OG VEJLEDNING ODIN-webservice ændringer release 2010 v2.0 Indholdsfortegnelse 1. Nye webservice metoder... 2 1.1 Anvendelse af køretøjer og personel fra fremmede beredskaber ifm. indberetning

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

Opsætning af MobilePBX med Kalenderdatabase

Opsætning af MobilePBX med Kalenderdatabase Opsætning af MobilePBX med Kalenderdatabase Dette dokument beskriver hvorledes der installeres Symprex Exchange Connector og SQL Server Express for at MobilePBX kan benytte kalenderadadgang via database

Læs mere

Software Projekt NoSQL vs RMDB

Software Projekt NoSQL vs RMDB Software Projekt NoSQL vs RMDB Skrevet af Carsten Sørensen, Hans Jørgen Frandsen, Peter Haislund Department of Computer Science, University of Aarhus Aabogade 34, 8200 Arhus N, Denmark 201200089, 19960442,

Læs mere

Den røde tråd fra testdækning til releasemetrikker

Den røde tråd fra testdækning til releasemetrikker Den røde tråd fra testdækning til releasemetrikker The art of developing software cheaper, in good quality and at schedule Software-Pro Agenda Den røde tråd fra testdækning til releasemetrikker Mange har

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

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

Installation. Aesiras Internet hjemmeside og webshop. Aesiras -integreret Regnskab, Handel og Internet

Installation. Aesiras Internet hjemmeside og webshop. Aesiras -integreret Regnskab, Handel og Internet Installation Aesiras Internet hjemmeside og webshop Aesiras -integreret Regnskab, Handel og Internet Installationsvejledning Tak fordi du valgte Aesiras Business & Internet. I denne vejledning vil vi guide

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

SAS-programmering med sikkerhedsnet: FUTS (Framework for Unit Testing SAS programs)

SAS-programmering med sikkerhedsnet: FUTS (Framework for Unit Testing SAS programs) SAS-programmering med sikkerhedsnet: FUTS (Framework for Unit Testing SAS programs) Forkerte analyseresultater fra virksomhedens egen SAS-programmør kan have store omkostninger for virksomheden. Derfor

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

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

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

Opret ODBC datakilde Vejledning

Opret ODBC datakilde Vejledning Vejledning V. 1 APRIL 2011 FOR KUNDESERVICE Indholdsfortegnelse 1 Indledning... 3 1.1 Formål... 3 1.2 Målgruppe... 3 1.3 Krav... 3 2 Opret ODBC Datakilde (Open Database Connectivity)... 3 2.1 Forbindelse

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

Programmering i C Intro og grundlæggende C 5. marts 2007

Programmering i C Intro og grundlæggende C 5. marts 2007 Programmering i C Intro og grundlæggende C 5. marts 2007 Mads Pedersen, OZ6HR mads@oz6hr.dk Plan for kurset Ma. 5/3: Ma. 19/3: Ma. 2/4: To. 12/4: Formål, intro, grundlæggende Videre, sprogkonstruktioner

Læs mere

Applikations Virtualisering. Anders Keis Hansen Anders.keis.hansen@atea.dk

Applikations Virtualisering. Anders Keis Hansen Anders.keis.hansen@atea.dk Applikations Virtualisering Anders Keis Hansen Anders.keis.hansen@atea.dk Hvem er jeg Anders Keis Hansen Arbejder i Ateas konsulent afdeling Baggrund som System administrator, IT Arkitekt primært med fokus

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

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

FRA USECASE TIL TESTCASE HP TEST BRUGERKONFERENCE, 10. APRIL 2014

FRA USECASE TIL TESTCASE HP TEST BRUGERKONFERENCE, 10. APRIL 2014 FRA USECASE TIL TESTCASE HP TEST BRUGERKONFERENCE, 10. APRIL 2014 LIDT OM MIG SELV Erfaring NIELS-HENRIK HANSEN 35+ års samlet IT erfaring 15+ år som test manager Certificeret Inspection Leader ISEB Foundation

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

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

3. SEMESTER 2. PROJECT MULB Gruppe 1. 20. september 2015

3. SEMESTER 2. PROJECT MULB Gruppe 1. 20. september 2015 PROJECT DATABASE 3. SEMESTER 2. PROJECT MULB Gruppe 1. 20. september 2015 Ved at underskrive dette dokument bekræfter vi, at det indsendte materiale alt sammen er vores eget materiale og arbejde. Andreas

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

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

APEX i Praksis Martin B. Nielsen. Navn. MBNDATA Emne

APEX i Praksis Martin B. Nielsen. Navn. MBNDATA Emne APEX i Praksis Martin B. Nielsen Navn MBNDATA Emne Foredragsholderen Oracle/APEX Arkitekt/udvikler/DBA Siden Oracle v.5 (1988) APEX Siden 2007, men før (Database provider, HTMLDB) MBNDATA siden 1996 MBNDATA

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

Ivan Overgaard 11/29/2012

Ivan Overgaard 11/29/2012 NSI Seal.Net Version 2.0 Ivan Overgaard 11/29/2012 Revisionshistorik: Version Dato Ændring Ansvarlig 0.8 29-11-2012 Oprettet IO 1.0 04-04-2013 redigeret IO Seal.Net Page 2 of 23 Version 2.0-29. november

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

Bilag 2 og 3 og værktøjer

Bilag 2 og 3 og værktøjer Bilag 2 og 3 og værktøjer Lars Erik Storgaard Geodatastyrelsen, laers@gst.dk Program for workshop Geodatastyrelsen Formål hvorfor workshop? Kvalificering af listen over myndigheder Temakammerater Opmærksomhed

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

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

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

Navision Stat 7.0. GIS Webservice og automatiseret filindlæsning via NST. Overblik. Side 1 af 9. ØSY/CRA/MAC Opr. 20.01.15

Navision Stat 7.0. GIS Webservice og automatiseret filindlæsning via NST. Overblik. Side 1 af 9. ØSY/CRA/MAC Opr. 20.01.15 Side 1 af 9 Navision Stat 7.0 ØSY/CRA/MAC Opr. 20.01.15 GIS Webservice og automatiseret filindlæsning via NST Overblik Introduktion Denne vejledning beskriver hvordan du: installerer Navision Application

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

Tildel fast IP adresse til BC9xx0 via System Manageren

Tildel fast IP adresse til BC9xx0 via System Manageren APP-NOTE 600011 Beckhoff Application Note Date: 2/11/2009 Document Status: 1.1 Beckhoff Automation Aps Naverland 2, DK-2600 Glostrup Phone +45 43 46 76 20 Fax +45 43 46 63 35 Tildel fast IP adresse til

Læs mere

Sektornet VPN. Opsætning af Novell 4.1x server og klient på. Windows 2000/NT/XP

Sektornet VPN. Opsætning af Novell 4.1x server og klient på. Windows 2000/NT/XP Sektornet VPN Opsætning af Novell 4.1x server og klient på Windows 2000/NT/XP UNI C oktober 2002 Sektornet VPN UNI C oktober 2002 v1.0 Af Jesper Skou Jensen 1 Installation og konfiguration af Netware IP

Læs mere

RefWorks en vejledning fra UCL Biblioteket. Indholdsfortegnelse

RefWorks en vejledning fra UCL Biblioteket. Indholdsfortegnelse Indholdsfortegnelse Hvad er RefWorks?... 2 Opret dig som bruger... 2 Inden du går i gang... 3 Klargøring af computer til download af Write-N-Cite v. 4.2... 3 Installation af Write-N-Cite... 4 Installation

Læs mere

EasyIQ Opdatering 5.2.3 -> 5.4.0

EasyIQ Opdatering 5.2.3 -> 5.4.0 EasyIQ Opdatering 5.2.3 -> 5.4.0 Kunde: Forfatter: Thomas W. Yde Systemtech A/S Side: 1 af 17 1 Indholdsfortegnelse 2 GENERELT OMKRING FORUDSÆTNINGEN OG OPDATERINGS FORLØBET... 3 2.1 FORUDSÆTNINGER...

Læs mere

Måle og test I. Lasse Kaae 2012

Måle og test I. Lasse Kaae 2012 Måle og test I Lasse Kaae 2012 Plan for de næste 2 uger Uge 1 grundlæggende VEE NI Labview (Torsdag) Anders Meisner Uge 2 Workshop VEE VEE instrument-styring Labview NI USB 6008 Måle øvelser Lasse Kaae

Læs mere

Delfi Connect. Bruger vejledning 1. TILSLUTNING...2 2. INSTALLATION...3 3. MENUSTRUKTUR...4

Delfi Connect. Bruger vejledning 1. TILSLUTNING...2 2. INSTALLATION...3 3. MENUSTRUKTUR...4 Delfi Connect Bruger vejledning INDHOLD 1. TILSLUTNING...2 2. INSTALLATION...3 3. MENUSTRUKTUR...4 TOOLS...4 4. KOMMUNIKATIONS OPSÆTNING...5 5. GENEREL OPSÆTNING OG DATA KONFIGURATION...6 RECORD...8 BASAL

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

Oasis: Part of the GIRAF System

Oasis: Part of the GIRAF System : Part of the GIRAF System Henrik Klarup, Jens Mohr Mortensen, and Dan Stenholt Møller Aalborg University Juni 26, 2012 AAU, Juni 26, 2012 Slide 1/26 Agenda Multiprojekt Beskrivelse GIRAF Arkitekturen

Læs mere

Web- og serverprogrammering

Web- og serverprogrammering Web- og serverprogrammering Arkitekturer i webprogrammer - dag 6 Model-View-Controller-arkitukturen Flerlags-arkitekturer Læsning: WJSP 10 Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html

Læs mere

Klasser. Grundlæggende Programmering med Projekt. Peter Sestoft Tirsdag 2. september 2008. (Tak til Jakob Bardram for nogle slides) Dagens begreber

Klasser. Grundlæggende Programmering med Projekt. Peter Sestoft Tirsdag 2. september 2008. (Tak til Jakob Bardram for nogle slides) Dagens begreber Klasser Grundlæggende Programmering med Projekt Peter Sestoft Tirsdag 2. september 2008 (Tak til Jakob Bardram for nogle slides) Dagens begreber Felt (field) Metode (method) Parameter (parameter) Sætning,

Læs mere

DM13-1. Obligatoriske Opgave - Kredsløbs design

DM13-1. Obligatoriske Opgave - Kredsløbs design DM13-1. Obligatoriske Opgave - Kredsløbs design Jacob Christiansen moffe42@imada.sdu.dk Institut for MAtematik og DAtalogi, Syddansk Universitet, Odense 1. Opgaven Opgaven består i at designe et kredsløb,

Læs mere

Miniprojekt2011. Formålet er at lære og indlære god objektorienteret programudvikling og programmering med Java, samt undervejs at opfylde studiekrav.

Miniprojekt2011. Formålet er at lære og indlære god objektorienteret programudvikling og programmering med Java, samt undervejs at opfylde studiekrav. Miniprojekt2011 Projektbeskrivelse Der skal fremstilles en lille java application på PC, hvor brugeren kan foretage interaktioner med en simpel database på disken via et grafisk brugerinterface. Formålet

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

Programmeringseksempel til CX/IPC

Programmeringseksempel til CX/IPC APP-NOTE 610004 Beckhoff Application Note Date: 7/17/2009 Document Status: 1.1 Beckhoff Automation Aps Naverland 2, DK-2600 Glostrup Phone +45 43 46 76 20 Fax +45 43 46 63 35 Programmeringseksempel til

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

GIS indlæsning af kreditorer og betalingsform. Brugervejledning 1.0

GIS indlæsning af kreditorer og betalingsform. Brugervejledning 1.0 GIS indlæsning af kreditorer og betalingsform Brugervejledning 1.0 Indhold 1 Indledning... 5 2 Opsætning af GIS grænseflade til kreditor indlæsning... 5 2.1 Oprettelse af en datastrøm... 7 2.2 Filsystem...

Læs mere

Software that connects

Software that connects Software that connects Principper og praktiske forhold omkring automatisk test Præsentation på AAU den 6/5-04 for 4. og 10. semesters studerende Tester af oplægget Der tænkes i test baner. Og oplægget

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

Tidsregistrering. Jacob E., Jacob H., Mathias, Mads H., Jonatan og Dan 3.4. Informationsteknologi B. Roskilde Tekniske Gymnasium 25-11-2014

Tidsregistrering. Jacob E., Jacob H., Mathias, Mads H., Jonatan og Dan 3.4. Informationsteknologi B. Roskilde Tekniske Gymnasium 25-11-2014 2014 Tidsregistrering Jacob E., Jacob H., Mathias, Mads H., Jonatan og Dan 3.4 Informationsteknologi B Roskilde Tekniske Gymnasium 25-11-2014 Indholdsfortegnelse 1 Indledning... 3 2 User stories... 3 3

Læs mere

Introduktion Indtastning Funktioner Scripts Optimering. Matlab

Introduktion Indtastning Funktioner Scripts Optimering. Matlab - robert@math.aau.dk http://www.math.aau.dk/ robert/teaching/2010/matlab 9. august 2010 1/39 Disposition 1. Lidt om. 2. Basiskursus. 3. Opgaver. 4. Mere til basiskursus. 5. Opgaver. 2/39 MATLAB = MATrix

Læs mere

Tlf. +45 7027 1699 Fax + 45 7027 1899

Tlf. +45 7027 1699 Fax + 45 7027 1899 Firmaordninger I firmaoversigten kan du holde styr på dit kundekartotek samt disses bookinger. Der kan desuden oprettes andre firmaer end dit eget. Herved kan der udbydes særlige ydelser på med egne arbejdstider.

Læs mere

NemRefusion VSLight Integrationsvejledning

NemRefusion VSLight Integrationsvejledning NemRefusion VSLight Integrationsvejledning Virksomhedsservice via webservice Dette dokument beskriver hvordan der forbindes til og udveksles beskeder med NemRefusion virksomhedsservice via web servicen

Læs mere

Kom i gang med SAS STPbaserede

Kom i gang med SAS STPbaserede make connections share ideas be inspired Kom i gang med SAS STPbaserede webapplikationer Lars L. Andersson Chefkonsulent Webapplikationer Interaktion med serverbaserede data via skærmbilleder leveret gennem

Læs mere

Kursusbeskrivelse. Forarbejde. Oprettelse af en Access-database

Kursusbeskrivelse. Forarbejde. Oprettelse af en Access-database Kursusbeskrivelse Oprettelse af en Access-database Som eksempel på en Access-database oprettes en simpelt system til administration af kurser. Access-databasen skal indeholde: et instruktørkartotek et

Læs mere

Pronestor Room & Catering

Pronestor Room & Catering Pronestor Room & Catering Modul 2 Installation af tilkøbsmoduler Side 2.0 2.9 Bruger Import (AD integration) Side 2.1 2.4 o Service Accounts (hosted og on-premises) o Active Directory struktur o Installation

Læs mere

Agenda. Muligheder for anvendelse. Komponenter. Features. Restore muligheder. DR og TSM integration. Repository. Demo. Spørgsmål

Agenda. Muligheder for anvendelse. Komponenter. Features. Restore muligheder. DR og TSM integration. Repository. Demo. Spørgsmål Agenda Muligheder for anvendelse Komponenter Features Restore muligheder DR og TSM integration Repository Demo Spørgsmål Muligheder for anvendelse Data Center dmsave/lokal TSM Remote Office Application

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

Introduktion til Flash, fortsat

Introduktion til Flash, fortsat Introduktion til Flash, fortsat Kaspar Rosengreen Nielsen kaspar@interactivespaces.net Dagens program Opsamling på sidste forelæsning. Vi vil beskæftige os med følgende emner i dagens forelæsning: Komponenter

Læs mere

Opsætning af Backup. Hvis programmet registreres korrekt vises nedenstående skærmbillede. Genstart herefter programmet.

Opsætning af Backup. Hvis programmet registreres korrekt vises nedenstående skærmbillede. Genstart herefter programmet. Opsætning af Backup Dette er en guide til opsætning af backup med Octopus File Synchronizer. Det første der skal ske er, at programmet skal registreres (programmet kan dog bruges i 30 dage, hvis det ikke

Læs mere

Softwaretest. - også af "ikke testbar" software. DAPUG erfamøde 7. marts 2012 Thomas Vedel, Thomas Vedel Consult email: thomas@veco.

Softwaretest. - også af ikke testbar software. DAPUG erfamøde 7. marts 2012 Thomas Vedel, Thomas Vedel Consult email: thomas@veco. Softwaretest - også af "ikke testbar" software DAPUG erfamøde 7. marts 2012 Thomas Vedel, Thomas Vedel Consult email: thomas@veco.dk Hvorfor softwaretest? Software er sjældent fejlfri Test sikrer at softwaren

Læs mere

Servlets, Tomcat & BlueJ

Servlets, Tomcat & BlueJ Servlets, Tomcat & BlueJ Tutorial lavet af Jákup W. Hansen TSU 2006 3.semester 05.october 2007 Hvad er Servlets: For at forstå det, må vi først få styr på to begreber, nemlig statiske og dynamiske hjemmesider

Læs mere

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

Programming Project Report. Programmeringsprojekt i PaSOOS fagpakken. 20097733 Bobby Nielsen; 20097626 Jon Rune Jørgensen Programming Project Report Programmeringsprojekt i PaSOOS fagpakken Underviser: Henrik Bærbak Christensen 08-06-2011 Indhold 1 Udvikling og test af binær søgning... 2 1.1 TDD på binær søgning... 2 1.1.1

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

OS2 Opgavefordeler. Løsningsbeskrivelse Version 2. Udarbejdet af Miracle A/S Simon Møgelvang Bang smb@miracle.dk

OS2 Opgavefordeler. Løsningsbeskrivelse Version 2. Udarbejdet af Miracle A/S Simon Møgelvang Bang smb@miracle.dk OS2 Opgavefordeler Løsningsbeskrivelse Version 2 Udarbejdet af Miracle A/S Simon Møgelvang Bang smb@miracle.dk 15/2/2015 Løsningsbeskrivelse for OS2 Opgavefordeler 1. Introduktion... 3 2. Kontekst... 3

Læs mere

! " # $% &'!& & ' '" & # ' "&()(*& + + +,-' "&( # &(! (! " )(!# &!! (!&!! * (! +& (!!! & " " & & / & & (!

!  # $% &'!& & ' ' & # ' &()(*& + + +,-' &( # &(! (!  )(!# &!! (!&!! * (! +& (!!! &   & & / & & (! !" #$ "%!"&! " # $% &'!& & ' '" & # ' "&()(*& + + +,-' "&( # &(! (! " )(!# &!! (!&!! * (! +& (!!! & Workbooks( MedarbUndersøgelse ),-.", & & Worksheets( Data )& Charts( DisplayData )&& )& " " & & / & &

Læs mere

Region Midtjylland Proces for Change Management

Region Midtjylland Proces for Change Management Region Midtjylland Proces for Change Management Version 1.1 Forord Dette dokument beskriver RMIT s Change Management proces. Processen beskriver minimumskravene (need to have) for at få processen til at

Læs mere

Installation af Bilinfo på Windows

Installation af Bilinfo på Windows Installation af Bilinfo på Windows Eksempler i denne vejledning er taget fra Windows 7 og Internet Explorer 8 Download det nødvendige program. Gå ind på www.bilinfo.dk/download Klik på download ud for:

Læs mere

! #!! $ % $! & " &'"! & *+ "! " $ $ ""!,-! $!.! $! " # 1!! &' "

! #!! $ % $! &  &'! & *+ !  $ $ !,-! $!.! $!  # 1!! &' ""# "" # $ % $ & " &'" & " "()" *+ " " $ $ *+" $ %"&'" "( "",- $. + /"&'"-0 $ " # 1 &' " +"% $ %'('" 2 ' ) )030 )030) * )033 " )033 // " " 1 1 41 ")035)036 5- " " " *+773,8 *+ % " " )035& " )036& " 1 %"

Læs mere

Daglig brug af JitBesked 2.0

Daglig brug af JitBesked 2.0 Daglig brug af JitBesked 2.0 Indholdsfortegnelse Oprettelse af personer (modtagere)...3 Afsendelse af besked...4 Valg af flere modtagere...5 Valg af flere personer der ligger i rækkefølge...5 Valg af flere

Læs mere