Captator deltog på Teknologisk Instituts årligt tilbagevendende Visual
Basic Days. I år foregik arrangementet på Hotel Nyborg Strand den 19. - 20.
november 2002.
Test først programmering - Unit tests i VB .NET
ved Carsten Juel Andersen, Captator
Vi har alle prøvet det - et
godt velfungerende program, der har virket upåklageligt, begynder pludseligt
"uden grund" at te sig underligt. Tilbage til debuggeren. Nogle timer senere
finder vi ud af, at den fejl, vi rettede i sidste uge, desværre havde en uheldig
følgefejl. I de værste situationer bliver en følgefejl først opdaget adskillige
uger efter, den er blevet indført, hvilket kan resultere i flere dages
debugging, før problemerne er løst.
For at undgå sådanne situationer må
der testes, men det at teste systematisk udskydes ofte til senere, det er jo
vigtigere at få programmet færdigt. Eller er det? - Måske kunne de manglende
tests spare os for mere tid, end de tog at skrive. Hvis testene automatiseres,
kan de gentages igen og igen. Så bliver det pludselig let at sikre, at
programmet til stadighed virker.
"Test først programmering" handler om at
gøre automatiske tests til en naturlig del af et programs tilblivelse, og til en
integreret del af din dagligdag som programmør. Fra at være en irriterende
nødvendighed, gøres test til en sikkerhedsfaktor, der giver ro i det daglige
arbejde. Når de automatiske tests melder systemet OK, så kan vi som
kvalitetsbevidste programmører læne os tilbage og være stolte over at have et
velfungerende system.
Dette indlæg vil handle om generel teori ved "Test
først programmering", hvordan det gøres i praksis, samt hvad det er, der gør det
sjovt at programmere på denne måde. Hovedvægten af indlægget vil blive lagt på
at demonstrere, hvorledes testværktøjet NUnit for VB .NET benyttes. Vi kommer
omkring NUnit, således at du efter VB-Days kan benytte værktøjet. Da NUnit er et
OpenSource projekt, er der heller ikke nogle omkostninger ved at komme i gang -
så hvad venter du på!
Systematisk frameworkudvikling - .NET på lykkepiller
ved .Henrik Lykke Nielsen, Captator
NET platformen er en
udviklings- og afviklingsplatform omfattende teknologier, udviklingsværktøjer,
serverprodukter og meget andet. Set fra en udviklers synspunkt er .NET
frameworket, med dets store klassebibliotek, langt den vigtigste del af .NET
platformen. Klassebiblioteket indeholder dog hovedsagligt kun basal teknisk
funktionalitet, der ikke direkte adresserer egentlig bruger- og
systemfunktionalitet. Det er et omfattende og godt udgangspunkt, men som
udvikler indser man hurtigt, at ved udvikling af selv almindelige applikationer
er der stadig utrolig meget, man selv skal håndtere.
Hvis man i længden
skal lave gode applikationer, bør man placere den generiske del af applikationen
i selvstændige genbrugelige komponenter - allerhelst udviklet med henblik på
skabelsen af et sammenhængende framework. Implementation af frameworks drives
dels naturligvis af ønsket om at kunne genbruge funktionalitet på tværs af
applikationer, men dels også af ønsket om at skabe klare opsplitninger mellem
generel funktionalitet og konkret implementation, hvorved der opnås en klarere
arkitektur og langt lettere vedligehold af koden.
Et eksempel: Windows
operativsystemet indeholder ganske vist integreret brugerhåndtering, men i
forbindelse med eksempelvis en webapplikation ønsker man typisk at håndtere
brugeradgangen eksplicit uden om Windows. I .NET findes der naturligvis basal
funktionalitet til at implementere databasetilgang og GUI (til implementation af
login-form og administrationsprogram), men desværre indeholder .NET frameworkets
klassebiblioteker ikke direkte komponenter og værktøjer til at implementere ens
egen brugerhåndtering.
Af andre lignende typiske eksempler på framework
elementer kan nævnes generel fejlhåndtering og logning, håndtering af
konfigurationsfiler, automatisk opbygning af user interface,
internationalisering af applikationer etc.
Indlægget handler om
systematisk udvikling af generiske frameworks. Indlægget, der illustreres med
eksempler fra bl.a. Captators Eifos-framework, fokuserer på teknikker og
best-practices for udvikling af generiske frameworks.