(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

SWC eksamens-spørgsmål. Oversigt

SWC eksamens-spørgsmål. Oversigt SWC eksamens-spørgsmål Oversigt #1 Typer og variable #2 Aritmetik og logik #3 Klasser (definition, objekter) #4 Klasser (metoder) #5 Klasser (nedarvning, polymorfi) #6 Conditional statements #7 Repetition

Læs mere

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

Tredjepart webservices

Tredjepart webservices Tredjepart webservices 4. juni 2015 USS Dok. Klik her for at angive tekst. 1/12 Indholdsfortegnelse Introduktion... 3 Miljøer... 3 Adgang... 3 API kald... 4 GET: /authorizations... 4 Input 4 Output 4 Output

Læs mere

Design by Contract. Design and Programming by Contract. Oversigt. Prædikater

Design by Contract. Design and Programming by Contract. Oversigt. Prædikater Design by Contract Design and Programming by Contract Anne Haxthausen ah@imm.dtu.dk Informatics and Mathematical Modelling Technical University of Denmark Design by Contract er en teknik til at specificere

Læs mere

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

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2 DM502 Forelæsning 2 Repetition Kompilere og køre Java program javac HelloWorld.java java HeloWorld.java Debugge Java program javac -g HelloWorld.java jswat Det basale Java program public class HelloWorld

Læs mere

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

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11 DM503 Forelæsning 11 Generics Pakker Exceptions Indhold Generics Nedarvning og Generics Generics Nedarvning og Generics Husk Box fra sidst Generics public class Box {! private T object;! public void

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

Abstrakte datatyper C#-version

Abstrakte datatyper C#-version Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Abstrakte datatyper C#-version Finn Nordbjerg 1/9 Abstrakte Datatyper Denne note introducerer kort begrebet abstrakt datatype

Læs mere

A Profile for Safety Critical Java

A Profile for Safety Critical Java A Profile for Safety Critical Java Martin Schoeberl Hans Søndergaard Bent Thomsen Anders P. Ravn Præsenteret af: Henrik Kragh-Hansen November 8, 2007 Forfatterne Martin Schoeberl Udvikler af JOP processoren

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

Assignment #5 Toolbox Contract

Assignment #5 Toolbox Contract Assignment #5 Toolbox Contract Created by: René Kragh Trine Randløv E mail address cph rk70@cphbusiness.dk 23 11 2014 1 Introduktion Dette dokument indeholder en vertikal kontrakt for et system som skal

Læs mere

Systematisk testning af program til udregning af mellemskat

Systematisk testning af program til udregning af mellemskat Systematisk testning af program til udregning af mellemskat Indledning I denne opgave vil vi definere passende cases til systematisk black-box test af et program til beregning af mellemskat. Vi har valgt

Læs mere

Software Construction 1 semester (SWC) Spørgsmål 1

Software Construction 1 semester (SWC) Spørgsmål 1 Spørgsmål 1 Objekter #1 Giv en kort præsentation af begrebet objekt, samt hvorledes du erklærer(declare), opretter(create) og bruger objekter Du kan beskrive o Datatyper o Variable / Instans variable /

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 : 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

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 Opgavebesvarelsen skal afleveres som enten en printerudskrift eller som et passende dokument sendt via email til fjj@noea.dk. Besvarelsen skal

Læs mere

I denne artikel vil vi bruge en User klasse som vi så vil gruppere på forskellige måder.

I denne artikel vil vi bruge en User klasse som vi så vil gruppere på forskellige måder. Denne guide er oprindeligt udgivet på Eksperten.dk Collections i.net Når du kigger i namespacet System.Collections finder du over 10 forskellige klasser. At vælge den rigtige til netop din applikations

Læs mere

DAXIF# - Delegate Automated Xrm Installation Framework. Delegate A/S

DAXIF# - Delegate Automated Xrm Installation Framework. Delegate A/S DAXIF# - Delegate Automated Xrm Installation Framework Delegate A/S Agenda Delegate A/S DAXIF# Kun et programmeringssprog Type stærke script (og selvdokumenterende) filer Unit tests afvikles før assembly

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

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

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag Forelæsning Uge 2 Torsdag Java syntax og style guide Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Brug

Læs mere

Løsning af skyline-problemet

Løsning af skyline-problemet Løsning af skyline-problemet Keld Helsgaun RUC, oktober 1999 Efter at have overvejet problemet en stund er min første indskydelse, at jeg kan opnå en løsning ved at tilføje en bygning til den aktuelle

Læs mere

Forelæsning Uge 6 Mandag

Forelæsning Uge 6 Mandag Forelæsning Uge 6 Mandag Tingene i denne forelæsning er ikke eksamenspensum Forelæsningen afrunder kurset, og forklarer nogle af de begreber, som I har mødt under kurset uden at få detaljeret forklaring

Læs mere

Hvordan vælger jeg dokumentprofilen?

Hvordan vælger jeg dokumentprofilen? Hvordan vælger jeg dokumentprofilen? Valget af OIOUBL profil i en konkret dokumentudveksling vil bl.a. afhænge af, hvilke OIOUBL profiler den anden part i udvekslingen understøtter. Et konkret eksempel

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

ADIS, WS og Meta Service

ADIS, WS og Meta Service ADIS, WS og Meta Service Om ADIS, Web Services, Værktøjer og Meta Service. Michael Jacobsen Technology Network Management Agenda ADIS og dens udvidelse ISOagriNET Web Service med eller uden fuldt objektmodel

Læs mere

Eksempel: et ordresystem note 5 Lagdeling s. 1

Eksempel: et ordresystem note 5 Lagdeling s. 1 Eksempel: et ordresystem note 5 Lagdeling s. 1 Eksempel: et ordre-system NiceHair er et firma, som sælger udstyr, inventar og frisørartikler til frisørsaloner over hele landet. Det er ejet af et ægtepar

Læs mere

Succesfuld implementering af automatiseret test

Succesfuld implementering af automatiseret test Succesfuld implementering af automatiseret test Forudsætningerne og faldgruberne John Fodeh john.fodeh@hp.com 2006 Hewlett-Packard Development Company, L.P. The information contained herein is subject

Læs mere

Klasser og objekter. (Afsnit i manualen)

Klasser og objekter. (Afsnit i manualen) Klasser og objekter (Afsnit 4 + 5 i manualen) Grundbegreber Klasser og objekter beskrivelse oprettelse Attributter og metoder tilstand opførsel Indkapsling afskærmning datarepræsentationsuafhængighed Klasser

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

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004 Overvågningssystem Beskrivelse Bagagesorteringssystemet består af et antal skranker (check-in) til modtagelse og registrering af bagage, et automatiseret sorteringsanlæg samt et antal terminaler (gates),

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

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

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation). Denne guide er oprindeligt udgivet på Eksperten.dk RMI introduktion Denne artikel beskriver Java RMI (Remtote Method Invocation). Den beskriver teorien bag RMI, viser et simpelt kode eksempel og forklarer

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

Affaldsdatasystem Vejledning supplement i system-til-system integration for.net brugere

Affaldsdatasystem Vejledning supplement i system-til-system integration for.net brugere Affaldsdatasystem Vejledning supplement i system-til-system integration for.net brugere Dokument version: 2.0 ADS version: 1.0 Henvendelse vedrørende affald: Miljøstyrelsen Roskilde, Affaldssekretariatet

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

dintprog Manual Revision: 1241 August 24, 2010 I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4

dintprog Manual Revision: 1241 August 24, 2010 I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4 dintprog Manual Revision: 1241 August 24, 2010 Indhold I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4 3 Grundbegreber om modellering 4 III Sprogkonstruktioner 5 4 Klasser

Læs mere

Linguistic support for unit testing

Linguistic support for unit testing Linguistic support for unit testing Af K. E. Gray & M. Felleisen Mads Bach-Sørensen mbs@cs.aau.dk 1. november 2007 1 Indhold Forfatterne TestJava Traditionel Unit-testing Sproglige Konstruktioner i TestJava

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

Specialeforsvar: Fundamentet for et fleksibelt container bibliotek

Specialeforsvar: Fundamentet for et fleksibelt container bibliotek Specialeforsvar: Fundamentet for et fleksibelt container bibliotek Foundations of an adaptable container library Bo Simonsen Datalogisk Institut, Københavns Universitet Denne præsentation, afhandlingen,

Læs mere

Specifikation Abstrakt OO OS-API Rev. 1.7. Specifikation. Abstrakt, objektorienteret operativsystem-api

Specifikation Abstrakt OO OS-API Rev. 1.7. Specifikation. Abstrakt, objektorienteret operativsystem-api Specifikation Abstrakt, objektorienteret operativsystem-api Indhold 1 Indledning... 3 1.1 Introduktion... 3 1.2 Formål... 3 1.3 Overordnede krav... 3 2 Ressourcer i OS-API et... 4 2.1 Tråde... 4 2.2 Timere...

Læs mere

Real-time programming safety in Java and Ada

Real-time programming safety in Java and Ada Real-time programming safety in Java and Ada Bo Sandén Presenter: Thomas Bøgholm 25. oktober 2007 Forfatteren Artiklen Synkroniserings Begreber Bo Sandén Professor på Colorado Technical University Beskæftiger

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

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

Sider og segmenter. dopsys 1

Sider og segmenter. dopsys 1 Sider og segmenter dopsys 1 Lokal vs global sideallokering (1) Med (a) som udgangspunkt giver (b) lokal hhv. (c) global allokering forskellige resultater dopsys 2 Lokal vs global sideallokering (2) Den

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter side 1 af 9 sider Skriftlig eksamen i Datalogi Modul 1 Vinter 1999/2000 Opgavesættet består af 6 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 5% Opgave 2

Læs mere

Sider og segmenter. dopsys 1

Sider og segmenter. dopsys 1 Sider og segmenter dopsys 1 Lokal vs global sideallokering (1) Med (a) som udgangspunkt giver (b) lokal hhv. (c) global allokering forskellige resultater dopsys 2 Lokal vs global sideallokering (2) Den

Læs mere

Hvad er Objekter - Programmering

Hvad er Objekter - Programmering Denne guide er oprindeligt udgivet på Eksperten.dk Hvad er Objekter - Programmering En rigtig god gennemgang af hvad objekter er! Hvordan de oprettes og anvendes! Det er helt klart til nybegyndere, som

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

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

Integrationsmanual. Anvendelse af webservice til kursusoversigt i Campus. Brugervejledning til udviklere

Integrationsmanual. Anvendelse af webservice til kursusoversigt i Campus. Brugervejledning til udviklere Integrationsmanual Anvendelse af webservice til kursusoversigt i Campus Brugervejledning til udviklere Moderniseringsstyrelsen Webservice manual til udviklere 2016 1 1. Indholdsfortegnelse Nyt kapitel

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

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

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

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

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

Specifikationsdokument for PDF Validator API

Specifikationsdokument for PDF Validator API Nets DanID A/S Lautrupbjerg 10 DK 2750 Ballerup T +45 87 42 45 00 F +45 70 20 66 29 info@danid.dk www.nets-danid.dk CVR-nr. 30808460 Specifikationsdokument for PDF Validator API DanID A/S 17. august 2012

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

Videregående programmering i Java

Videregående programmering i Java Videregående programmering i Java Dag 6 Komponenter (og lidt Swing og MVC) Læsning: VP 4, evt. VP 6 Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html Grafiske komponenter

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

16/04/12 50% 50% Waveform Chart Waveform Graph XY Graph Indicator Graph 33% 17% 88% 13%

16/04/12 50% 50% Waveform Chart Waveform Graph XY Graph Indicator Graph 33% 17% 88% 13% Samuel Alberg Thrysøe, PhD, PostDoc, Kontakt info: Email: sat@iha.dk, Tlf: +45 25533552 2 4. 5 Waveform Chart Waveform Graph XY Graph Indicator Graph 4. 33% Waveform Chart Waveform Graph XY Graph Indicator

Læs mere

DM01 DM01. 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 18/3-2003. Side 1 af 11

DM01 DM01. 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 18/3-2003. Side 1 af 11 DM01 DM01 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk D12, Elias 18/3-2003 Side 1 af 11 DM01 Indholdsfortegnelse: BILAG:...2 1 FORMÅL:...3 2 KLASSER:...4 2.1 DILEMMA:...4 2.1.1 METODER:...4

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

2.15 21/05/2013 Tilføjet dokumentation af bvn input for GetEngagementDetailed

2.15 21/05/2013 Tilføjet dokumentation af bvn input for GetEngagementDetailed APOS2 REST API 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

DKAL Snitflader REST Register

DKAL Snitflader REST Register DKAL Snitflader REST Register 1 Indholdsfortegnelse A2.1 INTRODUKTION 3 A2.1.1 HENVISNINGER 3 A2.1.2 LÆSEVEJLEDNING 4 A2.1.2.1 SÅDAN LÆSES EN REST GRAF 4 A2.1.2.2 SÅDAN LÆSES EN RESSOURCE OG EN TYPE 4

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

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

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

Data load og udtræk. 2. iteration: implmentation (test af backend) PHP mysql. Loade og parse XML (SimpleXML, Xpath) Filhåndtering i PHP JSON

Data load og udtræk. 2. iteration: implmentation (test af backend) PHP mysql. Loade og parse XML (SimpleXML, Xpath) Filhåndtering i PHP JSON Data load og udtræk 2. iteration: implmentation (test af backend) 1 PHP mysql Loade og parse XML (SimpleXML, Xpath) Filhåndtering i PHP JSON 2 Data udtræk PHP mysql: Processen 1. Forbind til MySQL server

Læs mere

Brugermanual til MICRO LOOP

Brugermanual til MICRO LOOP Brugermanual til MICRO LOOP 1 Før test Opstart 1. Tænd for apparatet på on/off knappen nederst til højre. 2. På skærmen vil Main menu fremgå. 3. Nederst i skærmens venstre side vil fremgå et batteri. Ved

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

Modern Concurrency Abstractions for C#

Modern Concurrency Abstractions for C# Modern Concurrency Abstractions for C# Nick Benton Luca Cardelli Cédric Fournet Presenter: Henrik Kragh-Hansen September 27, 2007 Motivation for concurrency Forbedring af concurrency Baggrundsinformation

Læs mere

Test af It-komponent

Test af It-komponent Test af It-komponent I programmeringssproget Java Programmet Login service Elev: Mads Funch Klasse 2.4 Mat, It, Programmering Skole: Roskilde Tekniske Gymnasium HTX Underviser: Karl Dato: 31-08-2016 Side

Læs mere

1 Domæne 2 1.1 Design valg... 2 1.1.1 User... 2. 2 Klassediagran 5

1 Domæne 2 1.1 Design valg... 2 1.1.1 User... 2. 2 Klassediagran 5 INDHOLD 1 Domæne 2 1.1 Design valg.................................... 2 1.1.1 User.................................... 2 2 Klassediagran 5 3 Serbio 7 3.1 Kommunikation..................................

Læs mere

Værktøjer fra værktøjskassen. Søren Breddam, Stevns Kommune

Værktøjer fra værktøjskassen. Søren Breddam, Stevns Kommune Værktøjer fra værktøjskassen Søren Breddam, Stevns Kommune sb@stevns.dk 1stevns kommune Mapbasic i Stevns Kommune Data Kørsel af planlagte opgaver, så data altid er opdaterede. Logfil til overvågning Dagligt

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

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 Artifact Milestone Du skal relaterer

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

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

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

STS Designdokument. STS Designdokument

STS Designdokument. STS Designdokument STS Designdokument i STS Designdokument STS Designdokument ii REVISION HISTORY NUMBER DATE DESCRIPTION NAME 0.3 2013-01 N STS Designdokument iii Indhold 1 Introduktion 1 2 Arkitekturoverblik 1 2.1 Eksterne

Læs mere

Polymorfi. Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type. Coercion

Polymorfi. Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type. Coercion Polymorfi Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type Coercion Tvangskonvertering (forfremmelse og begrænsning) Oversigt Abstrakt klasse abstrakt

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

HTX, RTG. Rumlige Figurer. Matematik og programmering

HTX, RTG. Rumlige Figurer. Matematik og programmering HTX, RTG Rumlige Figurer Matematik og programmering Vejledere: Jørn Christian Bendtsen og Karl G. Bjarnason Morten Bo Kofoed Nielsen & Michael Jokil 10-10-2011 In this assignment we have been working with

Læs mere

Alle dip 1 7 sættes til On for at opnå stand-alone operation fra PC.

Alle dip 1 7 sættes til On for at opnå stand-alone operation fra PC. Hurtig opstart af Infranor CD1 p og pm: Dette er en enkelt og kortfattet vejledning i opsætningen af CD 1 p og pm driver til anvendelse i stand-alone mode. Ingen Profibus forbindelse. For senere opkobling

Læs mere

Help / Hjælp

Help / Hjælp Home page Lisa & Petur www.lisapetur.dk Help / Hjælp Help / Hjælp General The purpose of our Homepage is to allow external access to pictures and videos taken/made by the Gunnarsson family. The Association

Læs mere

ELEKTRONISK INDBERETNING BØRNEDATABASEN VIA DGWS 13/1 2010 VERSION 1.02

ELEKTRONISK INDBERETNING BØRNEDATABASEN VIA DGWS 13/1 2010 VERSION 1.02 ELEKTRONISK INDBERETNING BØRNEDATABASEN VIA DGWS 13/1 2010 VERSION 1.02 Indhold Indhold... 2 Introduktion... 3 Den Gode Webservice... 4 ID Kortet... 4 Signering... 4 BDBChildMeasurementReport webservicen...

Læs mere

Serviceoperationer Puls

Serviceoperationer Puls Serviceoperationer Puls Udtraek Miljøportalsekretariatet Punktkildeprojektet Den 4. marts 2015 Indholdsfortegnelse GENERELT FOR ALLE METODER I WEBSERVICEN 2 UDTRAEK.ISALIVE 3 UDTRAEK. HENTUDTRAEK 5 UDTRAEK.

Læs mere

Enigma. Et programmeringssprog. Forfatter: Niels Serup X. Y Vejleder: A B C. Fag: Programmering Uddannelsessted: N M

Enigma. Et programmeringssprog. Forfatter: Niels Serup X. Y Vejleder: A B C. Fag: Programmering Uddannelsessted: N M Enigma Et programmeringssprog Forfatter: Niels Serup X. Y Vejleder: A B C Fag: Programmering Uddannelsessted: N M 25. maj 2010 Indholdsfortegnelse Indledning 3 Sproget 3 Syntax.............................................

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

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

SOFTWARE PROCESSES. Dorte, Ida, Janne, Nikolaj, Alexander og Erla

SOFTWARE PROCESSES. Dorte, Ida, Janne, Nikolaj, Alexander og Erla SOFTWARE PROCESSES Dorte, Ida, Janne, Nikolaj, Alexander og Erla Hvad er en software proces? Et struktureret sæt af AKTIVITETER, hvis mål er udvikling af software. En software proces model er en abstrakt

Læs mere

Nintex Workflow UK/DK

Nintex Workflow UK/DK Nintex Workflow UK/DK Når Nintex Workflows anvendes i et Dansk sproget SharePoint miljø, er der lidt forskel på hvad de forskellige elementer kaldes, såvel som rækkefølgen på disse. Noget er oversat, noget

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2012 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 15. marts, 2012 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

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

10/04/ Front Panel 2. Block Diagram. 1. Front Panel 2. Block Diagram 80% 43% 20%

10/04/ Front Panel 2. Block Diagram. 1. Front Panel 2. Block Diagram 80% 43% 20% Samuel Alberg Thrysøe, PhD, PostDoc, Kontakt info: Email: sat@iha.dk, Tlf: +45 25533552 2 Front Panel Block Diagram 50% 50% 50% 80% 20% 50% Front Panel Block Diagram 43% 29% 5 29% 6 1 100% 0% Loop Tunnel

Læs mere

Underbilag 14 C: Afprøvningsforskrifter til prøver og tests

Underbilag 14 C: Afprøvningsforskrifter til prøver og tests Underbilag 14 C: Afprøvningsforskrifter til prøver tests Udbud om levering, installation, implementering, support, drift vedligehold af Borgeradministrativt System (BAS) Indhold underbilag 14 C Afprøvningsforskrifter

Læs mere

Den forudsætter kendskab til C++ og lidt kendskab til SQL og MySQL C API.

Den forudsætter kendskab til C++ og lidt kendskab til SQL og MySQL C API. Denne guide er oprindeligt udgivet på Eksperten.dk Brug af MySQL i C++ Denne artikel bygger ovenpå artiklen "MySQL C API" og forklarer hvordan man kan programmere mere objekt orienteret. Den forudsætter

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

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