(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 ( ) 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

Test med NUnit. Denne artikel introducerer NUnit. Den forklarer ideen med NUnit. Og den viser hvordan man konkret bruger det.

Test med NUnit. Denne artikel introducerer NUnit. Den forklarer ideen med NUnit. Og den viser hvordan man konkret bruger det. Denne guide er oprindeligt udgivet på Eksperten.dk Test med NUnit Denne artikel introducerer NUnit. Den forklarer ideen med NUnit. Og den viser hvordan man konkret bruger det. Den forudsætter kendskab

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

Lektion 6. Grundlæggende programmering i VR

Lektion 6. Grundlæggende programmering i VR Lektion 6 Grundlæggende programmering i VR Plan for i dag Simpelt FPS Triggerzones og animationer C# og objekt orienteret programmering Interfaces Generics Google Cardboard Video om VRs fremtid App til

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

SWC Elementer i klassedefinition

SWC Elementer i klassedefinition SWC Elementer i klassedefinition Indhold Eksempel... 2 Karakteristika for en klasse... 3 Karakteristika for et instance field... 4 Karakteristika for en constructor... 5 Karakteristika for en property...

Læs mere

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne.

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne. Exercise 1: Opgave 9.1 på CodeJudge. a) Lav klasserne Cirkel, Rektangel og Kvadrat, som implementerer vedhæftede interface From.java (se CodeJudge). Lav Rektangel før du laver Kvadrat. Kan du bruge nedarvning

Læs mere

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

Design by Contract Bertrand Meyer Design and Programming by Contract. Oversigt. Prædikater Design by Contract Bertrand Meyer 1986 Design and Programming by Contract Michael R. Hansen & Anne Haxthausen mrh@imm.dtu.dk Informatics and Mathematical Modelling Technical University of Denmark Design

Læs mere

Test med JUnit 3. Denne artikel introducerer JUnit 3. Den forklarer ideen med JUnit. Og den viser hvordan man konkret bruger det.

Test med JUnit 3. Denne artikel introducerer JUnit 3. Den forklarer ideen med JUnit. Og den viser hvordan man konkret bruger det. Denne guide er oprindeligt udgivet på Eksperten.dk Test med JUnit 3 Denne artikel introducerer JUnit 3. Den forklarer ideen med JUnit. Og den viser hvordan man konkret bruger det. Den forudsætter kendskab

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

Ugeseddel 4 1. marts - 8. marts

Ugeseddel 4 1. marts - 8. marts Ugeseddel 4 1. marts - 8. marts Læs følgende sider i kapitel 6 i lærebogen: s. 233 258 og s. 291 317 (afsnit 6.3 overspringes). Begynd at overveje, hvad afleveringsopgaven skal omhandle. Læs vejledningen,

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

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

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

Dvs. at give dit program muligheden for at loade og bruge plugins som andre har lavet.

Dvs. at give dit program muligheden for at loade og bruge plugins som andre har lavet. Denne guide er oprindeligt udgivet på Eksperten.dk Refleksion med.net Refleksion bruges til at undersøge klasser på runtime tidspunktet. Se hvordan du f.eks. loader en klasse fra en DLL, gennemkigger dens

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

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

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

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

Introduktion til NAnt

Introduktion til NAnt Denne guide er oprindeligt udgivet på Eksperten.dk Introduktion til NAnt Denne artikel beskriver NAnt, som er et værktøj til at builde.net applikationer med. Den beskriver nogle af de mest brugte NAnt

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

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

.NET 4.0 og C# 4.0. Denne artikel beskriver nogle af de nye features i.net 4.0 og C# 4.0. Den forudsætter et vist kendskab til.net og C#.

.NET 4.0 og C# 4.0. Denne artikel beskriver nogle af de nye features i.net 4.0 og C# 4.0. Den forudsætter et vist kendskab til.net og C#. Denne guide er oprindeligt udgivet på Eksperten.dk.NET 4.0 og C# 4.0 Denne artikel beskriver nogle af de nye features i.net 4.0 og C# 4.0. Den forudsætter et vist kendskab til.net og C#. Skrevet den 14.

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

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

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

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

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

ATTRIBUTES MULTITHREADING DYNAMIC PROGRAMMING. Grundlæggende programmering Lektion 11

ATTRIBUTES MULTITHREADING DYNAMIC PROGRAMMING. Grundlæggende programmering Lektion 11 ATTRIBUTES DYNAMIC PROGRAMMING MULTITHREADING Grundlæggende programmering Lektion 11 1 ATTRIBUTES Information om adfærd 2 ATTRIBUTES En attribut er en deklarativ tag, der bruges til at formidle information

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

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

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

dsoftark E2007 Gruppe 14: Anders, Troels & Søren 15. november 2007 Rapport til a. 1 'TDD rytmen'

dsoftark E2007 Gruppe 14: Anders, Troels & Søren 15. november 2007 Rapport til a. 1 'TDD rytmen' dsoftark E2007 Gruppe 14: Anders, Troels & Søren 15. november 2007 'TDD rytmen' Rapport til a. 1 Vi bruger gennem vores arbejde, rytmen fra Test Driven Development-paradigmet. Quickly add a test Run tests

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

I profil-feltet kan imastra-kunder vælge om upload skal ske ligesom filerne var indsendt til mailboksen eller

I profil-feltet kan imastra-kunder vælge om upload skal ske ligesom filerne var indsendt til mailboksen eller Upload fil Upload fil skal ses som et alternativ til at indsende tællefiler vedhæftet til mails Upload fil kan være en hurtigere og mere håndholdt måde at få data ind i Mastra på. Man starter med via Gennemse

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

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

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

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

F# - hvorfor, hvordan og til hvad? Rune Ibsen Jyske Bank

F# - hvorfor, hvordan og til hvad? Rune Ibsen Jyske Bank F# - hvorfor, hvordan og til hvad? Rune Ibsen Jyske Bank 03-10-2018 Rune Ibsen Softwareudvikling Seniorkonsulent Mentoring 10 konsulenter F# Programmeringssprog som oversættes til.net Functional-first,

Læs mere

Sekvensafstand DM34 - Eksamensopgave. Jacob Aae Mikkelsen

Sekvensafstand DM34 - Eksamensopgave. Jacob Aae Mikkelsen Sekvensafstand DM34 - Eksamensopgave Jacob Aae Mikkelsen 19 10 76 kokken@grydeske.dk 27. maj 2005 Resumé Rapporten her beskriver tre forskellige rekursive metoder til at sammenligne tekst strenge med.

Læs mere

Greenfoot En kort introduktion til Programmering og Objekt-Orientering

Greenfoot En kort introduktion til Programmering og Objekt-Orientering Greenfoot En kort introduktion til Programmering og Objekt-Orientering Greenfoot er et computer-program, som kan benyttes til at skrive andre computer-programmer, i et programmeringssprog kaldet Java.

Læs mere

Skriftlig eksamen i Datalogi

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

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

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

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2016 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 29. februar, 2016 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Plan for præsentationen

Plan for præsentationen Rejsen på vej til Test Drevet Udvikling i Uddannelses- og Forskningsministeriet Præsenteret af Klaus Olsen Willy Kofoed kontorchef i Uddannelses- og Forskningsministeriet Kenneth B Andersen IT Minds På

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

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

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2019 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 27. februar, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

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

Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Torsdag Forelæsning Uge 4 Torsdag Algoritmeskabeloner findone, findall, findnoof, findsumof (i mandags) findbest Levetid for variabler og parametre Virkefeltsregler Hvor kan man bruge de forskellige variabler?

Læs mere

Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Torsdag Forelæsning Uge 4 Torsdag Algoritmeskabeloner findone, findall, findnoof, findsumof (sidste mandag) findbest Levetid for variabler og parametre Virkefeltsregler Hvor kan man bruge de forskellige variabler?

Læs mere

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

//Udskriver System.out.println(Hej  + ditfornavn +   + ditefternavn + .); System.out.println(Du er  + dinalder +  aar gammel! Denne guide er oprindeligt udgivet på Eksperten.dk Brugerinput i Java Denne her artikel gennemgår diverse ting ved brug af brugerinput i Java. Den starter med det simple og fortæller derefter skridt for

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

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

Forelæsning Uge 5 Mandag

Forelæsning Uge 5 Mandag Forelæsning Uge 5 Mandag Algoritmeskabeloner findone, findall, findnoof, findsumof (sidste mandag) findbest Brug af klassen Collections og interfacet Comparable BlueJ s Debugger Nyttig til at inspicere

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

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

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

Anvendelse af metoder - Programmering

Anvendelse af metoder - Programmering Denne guide er oprindeligt udgivet på Eksperten.dk Anvendelse af metoder - Programmering En forhåbentlig rigtig god forklaring på hvad metoder er og hvordan de anvendes. Lidt om private og public, retur

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

Som sagt kræves der helst lidt viden om OOP hvis man virkelig vil lærer noget, og ikke bare lave copypaste

Som sagt kræves der helst lidt viden om OOP hvis man virkelig vil lærer noget, og ikke bare lave copypaste Denne guide er oprindeligt udgivet på Eksperten.dk Indkøbsvogn i PHP I denne artikel vil jeg prøve at lave en indkøbskurv som let kan udvides, og som ikke er svær at forstå. Det er bedst med viden om OOP(klasser),

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

Studiepraktik. Thomas Bøgholm Mikkel Hansen Jacob Elefsen

Studiepraktik. Thomas Bøgholm Mikkel Hansen Jacob Elefsen Studiepraktik Thomas Bøgholm boegholm@cs.aau.dk Mikkel Hansen mhan@cs.aau.dk Jacob Elefsen jelefs12@student.aau.dk 1 Studiepraktik -- program Program onsdag 10.00 10.15 Registrering af fremmøde og gennemgang

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

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

DM507 Algoritmer og datastrukturer

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

Læs mere

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

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3 DM502 Forelæsning 3 Indlæsning fra tastatur Udskrift til skærm Repetition Beregning af middelværdi Gentagelse med stop-betingelse (while) Heltalsdivision Division med nul Type-casting ( (double) ) Betinget

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

PARALLELIZATION OF ATTILA SIMULATOR WITH OPENMP MIGUEL ÁNGEL MARTÍNEZ DEL AMOR MINIPROJECT OF TDT24 NTNU

PARALLELIZATION OF ATTILA SIMULATOR WITH OPENMP MIGUEL ÁNGEL MARTÍNEZ DEL AMOR MINIPROJECT OF TDT24 NTNU PARALLELIZATION OF ATTILA SIMULATOR WITH OPENMP MIGUEL ÁNGEL MARTÍNEZ DEL AMOR MINIPROJECT OF TDT24 NTNU OUTLINE INEFFICIENCY OF ATTILA WAYS TO PARALLELIZE LOW COMPATIBILITY IN THE COMPILATION A SOLUTION

Læs mere

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Mandag Forelæsning Uge 3 Mandag Niveauer af programbeskrivelser Statiske / dynamiske beskrivelser ArrayList Collection med variabelt antal elementer Der er mange andre Collection typer (se Collection interfacet

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

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

Singleton pattern i Java

Singleton pattern i Java Denne guide er oprindeligt udgivet på Eksperten.dk Singleton pattern i Java Denne artikel beskriver Singleton pattern og implementation i Java. Den forudsætter kendskab til Java men ikke til Singleton.

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

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

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

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

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

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag Forelæsning Uge 2 Torsdag Niveauer af programbeskrivelser Statiske / dynamiske beskrivelser Klassevariabler og klassemetoder Variabler og metoder der et tilknyttet klassen (i stedet for at være tilknyttet

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

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

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

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

Singleton pattern i C#

Singleton pattern i C# Denne guide er oprindeligt udgivet på Eksperten.dk Singleton pattern i C# Denne artikel beskriver Singleton pattern og implementation i C#. Den forudsætter kendskab til C# men ikke til Singleton. Der er

Læs mere

Forelæsning Uge 3 Torsdag

Forelæsning Uge 3 Torsdag Forelæsning Uge 3 Torsdag Billedredigering (bl.a. brug af for-løkker) Gråtonebilleder (som er lidt simplere end farvebilleder) Arrays Kan "opbevare" et antal objekter (som ArrayList) Fast (på forhånd kendt)

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2013 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 5. marts, 2013 Dette projekt udleveres i to dele. Hver del har sin deadline, således

Læs mere

Forelæsning Uge 4 Mandag

Forelæsning Uge 4 Mandag Forelæsning Uge 4 Mandag Algoritmeskabeloner findone, findall, findnoof, findsumof Primitive typer (forfremmelse og begrænsning) Identitet versus lighed (for objekter, herunder strenge) Opfølgning på Skildpadde

Læs mere

Software that connects. Principper og praktiske forhold omkring automatisk test

Software that connects. Principper og praktiske forhold omkring automatisk test Software that connects Principper og praktiske forhold omkring automatisk test Tester af oplægget Der tænkes i test baner. Og oplægget giver ikke svaret på alt. Spørgsmål tages løbende eller tilsidst.

Læs mere

Introduction til.net remoting i C#

Introduction til.net remoting i C# Denne guide er oprindeligt udgivet på Eksperten.dk Introduction til.net remoting i C# Denne artikel beskriver teorien bag.net remoting og viser nogle simple kode eksempler i C#. Den forudsætter kendskab

Læs mere

Introduktion til funktioner, moduler og scopes i Python

Introduktion til funktioner, moduler og scopes i Python Denne guide er oprindeligt udgivet på Eksperten.dk Introduktion til funktioner, moduler og scopes i Python Denne artikel er fortsættelsen af "I gang med Python", som blevet publiceret her på sitet for

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

Øg sporbarhed og produktivitet gennem integration

Øg sporbarhed og produktivitet gennem integration Øg sporbarhed og produktivitet gennem integration Hvem er jeg? De næste 40 minu4er DevOps hos TestHuset En normal case - Problemstillinger - Hvordan vi arbejder med kunden - Løsning Q&A DevOps DevOps is

Læs mere

Vejledning til validator test af metadata

Vejledning til validator test af metadata Vejledning til validator test af metadata Test af metadata finds under kategorien Metadata (Technical Guidance version 1.3). Man kan teste en eller flere ISO 19115/19119 metadata XML og GML filer, ved

Læs mere

DM507 Algoritmer og datastrukturer

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

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