Maj 2003Unit tests i.NET – på vejen mod færre fejl !1 Carsten Juel Andersen Softwarearkitekt Mobil: 2348 0003 Captator Tlf: 8748 0202.

Slides:



Advertisements
Lignende præsentationer
Et projekt til undersøgelse af udviklingsmetodologi.
Advertisements

SPBG.  Test driven development  Unit test frameworks  MOSS TDD  Mocking  Design patterns.
Hvordan programmerer man?? STREAM - en model. Programmører arbejder ofte i teams Hver programmør arbejder på sin del af en større helhed.
1 • Best practice for exception handling • Exception klasser • Division med nul uden exception handling • Division med nul med exception handling •. NET.
Introduktion til ASP.NET 2 Michell Cronberg Microsoft MVP, MCAD TechTalks hos Microsoft.
1 Test – bl.a. med fokus på sharepoint løsninger Automatisering af deploy og test ifm. VSTS •Kort om build jobs med Team Foundation Server •Support for.
Test First Development
Et projekt til undersøgelse af udviklingsmetodologi.
eXtreme Programming – nytænkning eller anarki ?
07 – Kort om OO Introduktion.
Sikkerhed/Otto Knudsen 1 Diagnostics  Debug af web-applikationer.
1 Meget kort om Remote Debugger Og ligeså kort demo af Unity.
T1 – OPGAVE 14.2 LINETT & SABRINA Klasse Varer namespace Opgave_14._2 { class Varer { private string vare; private string farve; private double.
Et projekt til undersøgelse af udviklingsmetodologi.
Distribueret programmering, specielt.NET Remoting Rasmus D. Lehrmann DM
Object-Orienteret Programmering og Design. 2 Nordjyllands Erhvervakademi – 2009 Indhold “Classes, objects and object-oriented programming (OOP) play a.
09 – Arv og polymorfi i java
Hvordan man skriver koden.
01 – Java platform for starters. 2 NOEA2009Java-kursus – Java Platform Introduktion til Java Baggrund Hvad er Java? Faciliteter i Java.
VOOP, 8 april Refleksion i objekt orienterede programmeringssprog Mandag 8/ Kasper Østerbye.
Mød Microsoft – for udviklere & arkitekter Visual Studio, Express og Team System Niels Hilmar Madsen Microsoft
Eksekvering/Otto Knudsen 1 Udrulning Publicering af en web-applikation.
Introduktion/Otto Knudsen 1 Overblik WebForms ASP.NET.
Introduktion til Access (Access, del 1)
Indledende Programmering Uge 5 - Efterår 2006 Om at udvikle korrekte og pålidelige programmer Susanne Lindros.
© 2013 Netcompany A/S Netcompany A/S · Grønningen 19 · 1270 København K · Tlf Side 1 Simon Otto Nielsen Diplomingeniør i informations og kommunikationsteknologi.
GP5, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 5 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
18 – Java Server Faces. 2 NOEA2009Java-kursus – JSF 2 Web-applikationer - 1 Brugere interagerer med en Web-browser Browseren sender forespørgsler til.
Et projekt til undersøgelse af udviklingsmetodologi.
CLR (.NET) og JVM 1.NET vs. Java.NET har fokus på sprog-uafhængighed … Java har fokus på platforms-uafhængighed … Windows OS.NET CLR IL kode (.exe,.dll)
Commentor A/S – Hørkær 24 – 2730 Herlev - (+45) Tel : (+45) Fax : (+45) – Praktisk Brug af Work Items Thomas.
Forelæsning 3.1 Collections Javas for-each løkke
AJAX/Otto Knudsen 1 AJAX Motivation Definition. AJAX/Otto Knudsen 2 Motivation En typisk web-applikation er synkron klienten sender en forespørgsel og.
MSBuild & Team Build i C#/C++ solutions VSTS ERFA d. 25 November.
1..NET Arkitektur. Mål “Microsoft.NET is based on the Common Language Runtime (CLR) and an extensive set of Framework Class Libraries (FCL). The CLR defines.
Lektion 7 Læsestof: Kopier fra Caranno
Fundamentale datastrukturer
1..NET Arkitektur. 2 Nordjyllands Erhvervakademi Mål “Microsoft.NET is based on the Common Language Runtime (CLR) and an extensive set of Framework.
Objekter og klasser Rasmus D. Lehrmann DM
Aalborg Universitet Master i Informationsteknologi, IT i Byggeriet – 2. Års projekt TYPEHUSKATALOG.
Introduktion til Access (Access, del 1). RHS – Informationsteknologi – Fra design til udvikling Vi ved nu, hvordan vi finder et design for en database,
1 Team Build med Team Foundation Server 2008 Konfiguration og udvidelse af build jobs Kort præsentation Hvorfor bruge Team Build Afvikling af et build.
10. Datastrukturer. 2 Nordjyllands Erhvervakademi Collections library Datastrukturer i.NET kaldes normalt Collections Findes i namespace System.Collections.
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
Repetition: Introduktion til OOP med C# og .NET
Comparable Students German Students Composite Pattern State Pattern Observer Pattern Collections Interfaces Abstrakte klasser Design Patterns.
8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
KF04 GRAY Item 2, 12, 22, 32, 42, 52. Consider a builder when faced with many constructor parameters Item 2.
C#: Udtryk og metoder Kilde: Joe Hummel. 2 Nordjyllands Erhvervakademi – 2008 Indhold “With regards to programming statements and methods, C# offers what.
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
C#: Data Typer. 2 Nordjyllands Erhvervakademi Indhold: “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies,
9. Interfaces. 2 Nordjyllands Erhvervakademi Objectives “Good class design starts with good application design — how many classes, do they relate.
GP9, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 11 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
Forelæsning 7.1 – repetition
Paradigmer i Programmering 3. Højere ordens funktioner Idag: Højere ordens funktioner Algebraiske datatyper Næste gang: I/O, Filer, interaktive programmer.
Effective Java Blå gruppe. Item 18: Interfaces frem for abstrakte klasser Kan implementeres i klasser der ikke nedarver Eksisterende klasser kan nemt.
Begreber og Redskaber 4. Plan for idag Om metoder, parametre, returværdier Et par ord om objekt-orientering Håndkøring af programmer.
Begreber og Redskaber 3. Plan for idag Om metoder, parametre, returværdier Overblik over klasser,objekter,nedarvning Et par ord om objekt-orientering.
Web Services. OO (C++/ C#/Java) COM DCOM Web Services.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6A.1 Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Trinvis forfinelse Systematisk, gradvis udvikling af programmer.
Indledende Programmering Uge 6 - Efterår 2006
Programmering med interfaces Separering af specifikation, anvendelse og implementation.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
 Jens Bennedsen 2001Multimedie programmering4.1 Definition af begreber Interface, implements, klasse.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
RMS - Record Management System Record Store En Record er et bytearray af vilkårlig størrelse En RecordStore er et antal Records nummerede.
1.08 Test.
Software Testing Software testing.
Præsentationens transcript:

maj 2003Unit tests i.NET – på vejen mod færre fejl !1 Carsten Juel Andersen Softwarearkitekt Mobil: Captator Tlf: NUNU

maj 2003Unit tests i.NET – på vejen mod færre fejl !2 Agenda Indledning Fra test som et nødvendigt onde til noget bedre Kort om eXtreme Programming Historien bag NUnit Automatisering af unit tests med NUnit NUnit introduktion og demo af automatiske tests med NUnit NUnit users guide Test-først programmering Test-først, simpelt design og refactoring Via demo anskueliggøres disse principper NUnit guidelines og ideer Test af applikationer, komponenter mv. Todo’s / forslag til forbedringer af NUnit

maj 2003Unit tests i.NET – på vejen mod færre fejl !3 Test-først og automatiske test Fra test som et nødvendigt onde Test i kodefase ofte overfladiske og ikke repeterbare ► følgefejl, frygt ved større rettelser Verificerende tests ofte noget, der ligger som en afsluttende aktivitet ►for sent at lave gennemgribende ændringer Til Automatiske test, der giver ro i sindet Repeterbare tests, så testen igen og igen kan afvikles og sikre mod følgefejl og test-først som design redskab fra design, kod, test til design med test, kod, udfør tests

maj 2003Unit tests i.NET – på vejen mod færre fejl !4 Fra JUnit til NUnit 2.0 Kent Beck og Eric Gamma “opfinder” JUnit JUnit porteres til mange sprog, og “open sourced” NUnit - en blandt mange “ports” til.NET NUnit 2.0 udnytter.NET features

maj 2003Unit tests i.NET – på vejen mod færre fejl !5 NUnit 2.0 – Et testværktøj Keep the bar green to keep the code clean... Citat fra

maj 2003Unit tests i.NET – på vejen mod færre fejl !6 Et eksempel – unittest af Calculus Calculus er en “slags lommeregner” Et matematisk udtryk indtastes som en tekststreng Det parses for fejl Hvis udtrykket ikke indeholder fejl, så beregnes resultatet

maj 2003Unit tests i.NET – på vejen mod færre fejl !7 Et eksempel – unittest af Calculus Imports NUnit.Framework Namespace Calculus.Test Public Class CalculatorDoubleAndIntegerResultTester Private valError As New Calculator.ValidationError() Public Sub AddAndSubExpression() Dim calc As New Calculus.Calculator() Assertion.Assert(calc.ValidateExpression(" ", valError)) Assertion.AssertEquals( , calc.CalculateIntegerResult(valError)) End Sub Public Sub ConstantsPropertyMethods()... calc.Constants.Add("const1", 10.0) Try calc.Constants.Add("const1", 20.0) Assertion.Fail() Catch ex As System.ArgumentException ' This should occur End Try... Imports NUnit.Framework Namespace Calculus.Test Public Class CalculatorDoubleAndIntegerResultTester Private valError As New Calculator.ValidationError() Public Sub AddAndSubExpression() Dim calc As New Calculus.Calculator() Assertion.Assert(calc.ValidateExpression(" ", valError)) Assertion.AssertEquals( , calc.CalculateIntegerResult(valError)) End Sub Public Sub ConstantsPropertyMethods()... calc.Constants.Add("const1", 10.0) Try calc.Constants.Add("const1", 20.0) Assertion.Fail() Catch ex As System.ArgumentException ' This should occur End Try... Eksempel på hvordan der testes for, om fejlsituationer resulterer i den forventede fejl Først parses udtrykket. ValidateExpression returnerer true, hvis det gik godt Derefter checkes om Calculus regner rigtigt

maj 2003Unit tests i.NET – på vejen mod færre fejl !8 NUnit 2.0 NUnit loader én assembly af gangen (.dll eller.exe) Finder alle TestFixtures Opbygger træstruktur af alle tests udfra namespace Afvikler den valgte test og alle i de underliggende namespaces Træet viser alle tests i assemblien Her vises fejl (exceptions), hvilke tests der er udeladt m.m.

maj 2003Unit tests i.NET – på vejen mod færre fejl !9 Attributter i.NET Et lille.NET sidespring... Attributter Extra meta-data om typer og members i det kompilerede program Typesikker, declarativ styring af funktionalitet (semantik) Angives i i VB og i [... ] i C# Kan angives på assemblies, klasser, metoder, properties, … Bruges af kompileren, CLR, værktøjer,... Eksempler: AssemblyInfo.vb, Obsolete, Transaction, WebMethod,... Egne attributter... NUnit benytter sig af Attributter

maj 2003Unit tests i.NET – på vejen mod færre fejl !10 NUnit 2.0 – brug af attributter Brug af attributter En klasse skal være en TestFixture for at NUnit leder efter tests i den Setup kaldes inden hver enkelt test Teardown kaldes efter hver enkelt test Ignore kan bruge til midlertidig at sætte en test ud af kraft (gul bar i stedet for grøn) Public Class CalculatorDoubleAndIntegerResultTester... Public Sub PrepareTest()... Public Sub DeallocateTestData()... Public Sub AddAndSubExpression()... Public Sub TestException()... Public Sub AnotherTest() Public Class CalculatorStringResultTester... Public Class CalculatorDoubleAndIntegerResultTester... Public Sub PrepareTest()... Public Sub DeallocateTestData()... Public Sub AddAndSubExpression()... Public Sub TestException()... Public Sub AnotherTest() Public Class CalculatorStringResultTester...

maj 2003Unit tests i.NET – på vejen mod færre fejl !11 Alt kan testes... Pocket PC applikation Kør den som Windows app, og test den her Eksempel – Dam spil til Pocket PC (og windows) Eksterne resourcer DB – lav en test DB Hardware – lav en simulator og test op mod den

maj 2003Unit tests i.NET – på vejen mod færre fejl !12 XP’s programmings praktikker Fortløbende integration Test 37-timers arbejdsuge Kode standarder Programmering i par Kollektivt ejerskab Kunde involvering ”The Planning Game” Simpelt design Refaktorering Kort tid mellem releases Metafor Kort tid mellem releases Test Programmering Team praktikker Proces

maj 2003Unit tests i.NET – på vejen mod færre fejl !13 Refactorering Refactoring is the process of changing a software system in such a way that it does not alter the external behavior of the code yet improves its internal structure. It is a disciplined way to clean up code that minimizes the chances of introducing bugs. In essence when you refactor you are improving the design of the code after is has been written Martin Fowler

maj 2003Unit tests i.NET – på vejen mod færre fejl !14 Refactoring eksempel – Extract Method En af de simpleste og hyppigst anvendte refactoreringer er Extract Method Motiv Der er et kode fragment, der kan grupperes Løsning Lav fragmentet til en metode, hvis navn forklarer hvad formålet med kode fragmentet er void printOwning(double amount) { printBanner(); // print details System.out.println(“name :” + _name); System.out.println(“amount:” + amount); } void printOwning(double amount) { printBanner(); // print details System.out.println(“name :” + _name); System.out.println(“amount:” + amount); } void printOwning(double amount) { printBanner(); printDetails(amount); } void printDetails(double amount) { System.out.println(“name :” + _name); System.out.println(“amount:” + amount); } void printOwning(double amount) { printBanner(); printDetails(amount); } void printDetails(double amount) { System.out.println(“name :” + _name); System.out.println(“amount:” + amount); }

maj 2003Unit tests i.NET – på vejen mod færre fejl !15 Refaktorerings katalog “Refactoring – Improving the Design of Existing Code” beskriver et katalog af 72 refaktoreringer Der er beskrevet et motiv og en løsning for hver Ofte går en refaktorering begge veje alt efter omstændighederne ex: Pull Up Field kontra Push Down Field Eksempler fra bogen Collapse Hierarchy, Encapsulate Field, Extract Class, Inline Class, Introduce Assertion, Introduce Null Object, Move Field, Move Method, Pull Up Field, Push Down Field, Replace Constructor with Factory Method, Replace Inheritance with Delegation, Replace Magic Number with Symbolic Constant

maj 2003Unit tests i.NET – på vejen mod færre fejl !16 Unit tests – ”The short story” Sikkerhed, tiltro og MOD til at lave ændringer i designet Udviklerne skriver unit tests (hele tiden) Før en funktion skrives (test-first programming) Interface til metode er uklart Implementation/algoritme formodes (lidt) indviklet Usædvanlig måde at benytte metoden på (testen kommunikerer brugen) Senere Når der findes en fejl isoleres den i en test Ved refactoreringer af et område der ikke har tilstrækkelige tests Alle tests skal kunne afvikles på nogle få minutter Enhver funktionalitet uden test eksisterer ikke...

maj 2003Unit tests i.NET – på vejen mod færre fejl !17 Test-først cyklus: Design / Test / kod... Skriv den simplest mulige test Prøv testen og se at den fejler Implementer kun lige nok til at kunne compilere Foretag Refactorering for at fjerne duplikeret kode etc. Implementer kun lige nok til at testen går godt Compilér – det fejler, hvis du endnu ikke har implementeret koden, som testen kalder Prøv testen og se at den nu går godt Lav et ”overordnet” design

maj 2003Unit tests i.NET – på vejen mod færre fejl !18 Test-først eksempel - DEMO Opgave: Lav en metode Der lægger beløb sammen og returnere det i danske kroner Vi har en klasse – MonetaryAmount, der repræsenterer et beløb Namespace MoneyDemo Public Enum Currency DKK = 1 EUR... End Enum Public Class MonetaryAmount... Public Property Amount() As Integer... Public ReadOnly Property Currency() As Currency... Public Sub New(ByVal amount As Integer, ByVal currency As Currency)... Public Overloads Function Equals(ByVal obj As Object) As Boolean... Public Overrides Function GetHashCode() As Integer... Public Overrides Function ToString() As String Namespace MoneyDemo Public Enum Currency DKK = 1 EUR... End Enum Public Class MonetaryAmount... Public Property Amount() As Integer... Public ReadOnly Property Currency() As Currency... Public Sub New(ByVal amount As Integer, ByVal currency As Currency)... Public Overloads Function Equals(ByVal obj As Object) As Boolean... Public Overrides Function GetHashCode() As Integer... Public Overrides Function ToString() As String......

maj 2003Unit tests i.NET – på vejen mod færre fejl !19 Guideline: Test af applikationer og komponenter Applikation (.exe assembly) Komponent X (.dll assembly) Komponent Y (.dll assembly) Komponent Z (.dll assembly) X Tester (.dll assembly) Y Tester (.dll assembly) Z Tester (.dll assembly)

maj 2003Unit tests i.NET – på vejen mod færre fejl !20 Guideline: Test af applikationer og komponenter Test af en applikation (.exe assembly) Man kan ikke lave en anden.exe eller.dll, hvori testene ligger... (Det kan man godt i.NET, men Visual Studio understøtter det ikke) Det er ikke noget problem, fordi andre typisk ikke tilgår ens.exe assembly Placer TestFixtures i selvstændige klasser i.exe assembly’en Test af en komponent (.dll assembly) Her vil testklasser være med til at gøre komponentens interface unødigt komplekst Lav en seperat.dll assembly, hvori TestFixtures ligger I begge tilfælde Placer tests af en klasse i et test sub-namespace, eksempel: Test af “Captator.Calculus.Calculator” placeres i “Captator.Calculus.Test.CalculatorTest”

maj 2003Unit tests i.NET – på vejen mod færre fejl !21 NUnit – the good, the bad and...  /  NUnit kan køres fra Visual Studio Mulighed for debugging  (bortset fra uncaught exceptions  ) Men så skal man hele tiden skifte startup projekt  og det kan kun lade sig gøre fra.dll komponenter, ellers skal man ind og rette i project-properties hele tiden !  NUnit kan køres som extern applikation Hurtigere reload, lav en build og afvikl test umiddelbart herefter , ingen debugging  Anbefaling: Hav NUnit kørende som extern app, når du skal debugge så attach NUnit til VS debuggeren

maj 2003Unit tests i.NET – på vejen mod færre fejl !22 NUnit – the good, the bad and...  /  Pt. er det lidt besværligt at lave unit tests “the XP way” med NUnit Hurtigt skift mellem tests af få fixtures til applikations-wide tests Test pr. assembly, ingen hjælp til at lave tests af komplet projekt / solution 

maj 2003Unit tests i.NET – på vejen mod færre fejl !23 Spørgsmål nyheder, artikler, information,...

maj 2003Unit tests i.NET – på vejen mod færre fejl !24 Nunit / XUnit referencer NUnit – Lidt dokumentation samt download XP test framework for Java – JUnit Andre XUnit frameworks Extreme Testing Ron Jeffries, Software Testing & Quality Engineering, V1I2, March/April 1999, pp , Simple Smalltalk Testing: With Patterns Kent Beck, original artikel om XP test. JUNIT: A Cook’s Tour Erich Gamma & Kent Beck; Java Report, Maj 1999

maj 2003Unit tests i.NET – på vejen mod færre fejl !25 Web XP ressourcer Ward Cunninghams Wiki om XP Ron Jeffries XP site Don Wells XP site Object Mentor Martin Fowler Agile Alliance