Professional Documents
Culture Documents
gedetailleerde eisen en wensen ten aanzien van het bewaren en ophalen van
gegevens of objecten. In wat voor vorm moeten die gegevens opgeslagen
worden? En hoe snel moeten die weer oproepbaar zijn? Veelal zal er een
specialist zijn die zich met deze taak bezighoudt, maar vaakzal de ontwikkelaar
gevraagd worden mee te denken over de persistentie. In dit hoofdstuk wordt
besproken welke werkzaamheden in welke fase van een project worden
uitgevoerd, om te zorgen dat persistentie van gegevens goed geregeld is.
Welke stappen moeten bijvoorbeeld worden doorlopen om te komen tot een
goed datamodel? Wat zijn goede Mechanisms om gegevens op te slaan en
welke kan het beste gekozen worden? Verder kijken we naar veelgebruikte dat
abasemanagementsystemen. De keuze daarvan heeft vanzelfsprekend invloed
op de methode van dataopslag.
Svsteemontwikkelina met RUP
Is de levenscyclus langer dan één sessie, dan moeten objecten worden opgesla-
gen. We spreken over persistente objecten.
Behalve vanuit de eis tot een langere levensduur, kan ook de wens tot gelijktij-
dig en gemeenschappelijk gebruik van dezelfde objecten leiden tot persisten-
tie.
Objecten maken deel uit van een applicatie op een Server of deels op een
Server bevindt, terwijl meerdere Cliënts gelijktijdig communiceren binnen die
applicatie en zijn data. Bij deze communicatie kan het nodig zijn dat objecten
of kopieën daarvan, van de Server naar de Cliënt verhuizen. Het proces dat
hierbij komt kijken, lijkt erg op het proces dat nodig is om objecten persistent
te krijgen.
9 Persistentie
opslag
Figuur 9.1: Persistent object - Levensduur van object langer dan I sessie
00:00:01
Supplernentary
Specifications
Use-Case
Realizations
Anaiysls
Model
\\
e Design
Ciass
\
Data Model
Review
Record
I Project
Specific
Guidelines
Supplementary
Specifications
Rondom persistentie zijn een paar artefacts met name van belang binnen RUP:
de Design Classes uit het Design Model en het Data Model. Niet alle Design
Classes zijn logischerwijs van belang voor persistentie. Alleen Classes die data
bevatten die bij een volgende sessie van de applicatie nog steeds benaderbaar
moet zijn, zijn van belang. Dit zijn de persistente Design Classes. Deze groep
Design Classes vormt de belangrijkste input voor die andere belangrijke arte-
fact, het Data Model.
Zoals in de figuur 9.4 te zien is, bestaat het Data Model uit maximaal twee
bestanddelen: het logische datamodel en het fysieke datamodel. Het logische
datamodel is optioneel.
Analysls C l a n
Analysis Model
-44
Design Model
Database Designer
Er zijn twee scenario's om tot het uiteindelijke datamodel te komen. Het eerste
scenario speelt op het moment dat de Design Classes uit het Design Model
grotendeels overeenkomen met de elementen uit het Data Model. In zo'n geval
namelijk kunnen de Designer en de Database Designer (in het geval van onze
casus Robert en Nico) samen direct het Physical Data Mgdel ontwerpen. Dit
scenario zou eigenlijk de voorkeur moeten hebben. Het is dan namelijk veel
makkelijker om in het Data Model de Design Classes terug te vinden. Zoiets
maakt de applicatie veel doorzichtiger en eenvoudiger te onderhouden.
Stel nu dat de fysieke database noodgedwongen flink moet afwijken van het
Design Model. Met andere woorden, de persistente Design Classes zijn niet
eenvoudig terug te vinden als structuurelementen binnen de database. Dit zou
bijvoorbeeld kunnen gebeuren als het grotendeels overnemen van de persisten-
te Design Classes een hopeloze performance tot gevolg zou hebben. Dit pro-
bleem zal vooral spelen bij gebruik van relationele databases, aangezien een
00-begrip als encapsulatie binnen een relationele database nogal omslachtig
werkt. Een database-object zou dan namelijk alleen mogen communiceren
met een object waar een directe relatie mee is. In een relationele database
worden echter bij voorkeur manipulaties op meerdere tabellen tegelijk in één
query uitgevoerd, in plaats van door een keten van queries die van tabel naar
tabel gaan. In zo'n geval is het gewenst om nog een soort tussenstap te maken
tussen het Design Model en het Physical Data Model, zodat het verband tussen
de logische en de fysieke elementen nog te traceren is. De tussenstap die we
dan maken is die van het Logical Data Model.
In het Logical Data Model legt de Designer vast hoe het datamodel er uit
oogpunt van de persistente classes idealiter uit zou moeten zien. De Database
Designer neemt vervolgens dit logische Data Model als uitgangspunt en gaat
dit omvormen zodat het geoptimaliseerd wordt voor het gekozen database-
managementsysteem.
Veelal zullen Analysis Classes van het 5 p e Entity Classes in ieder geval het
persistentiemechanisme hebben. Immers een Entity Class bevat relevante in-
formatie voor een organisatie en deze informatie zal langer bewaard moeten
worden dan enkel binnen een activiteit.
Systeemontwikkeling met RUP
Een Analysis Mechanism wordt meestal vastgelegd in de vorm van een Inter-
action Diagram. Meestal wordt hiervoor een Collaboration Diagram gebruikt.
Zo'n diagram ziet er als volgt uit.
I p e m inserted
4: Receipt requested
7 /: CustomerPanel : Receivt Printer
X
: Customer
6: Get item values
3: Increment item
Door de Designer worden (al dan niet in samenwerking met de Analyst) ka-
rakteristieken aan de Analysis Mechanisms toegevoegd. Voorbeeld: een arrest
wordt 1000 keer per dag geraadpleegd maar slechts zelden gewijzigd. Daar-
naast wordt I keer per dag een arrest toegevoegd. Het raadplegen is echter
ook parallel en moet snel gebeuren om daarmee het gerechtelijke proces te
ondersteunen (doorlooptijd minder dan één seconde).
9 Persistentie
storage
I I 1
lijk te maken hoe dit mechanisme werkt en hoe iedereen dit moet gebruiken
(uiteraard kan dit dan uitmonden in het maken van instructies of regels die in
de guidelines worden opgenomen).
Op basis van de Design Classes zal de Database Designer gaan werken aan het
omvormen van een class naar een vorm van persistentie voor de database.
Figuur 9,7 probeert het verschil aan te geven tussen Design en Implementation
Mechanisms voor wat betreft Persistentie.
Zoals je ziet geeft het Design Mechanism een wat meer specifieke uitleg aan
de logische begrippen die in het Analysis Mechanism werden gebruikt. Pas in
het Implementation Mechanism wordt echter de precieze technische methode
gekozen waarmee deze Designoplossing technisch uitgevoerd gaat worden.
Merk op dat voor OBMS eigenlijk geen serialisatie nodig is. Wil men toch
dezelfde flexibiliteit hebben (wijzigen van OBMS naar bestand bijvoorbeeld),
dan is dit inderdaad realiseerbaar. Er moet een dummy buffer-subclass wor-
den ontworpen die geen serialisatie uitvoert, maar wel polymorph is met de
overige buffervarianten.
In onze casus heeft ontwikkelaar Jeanette duidelijk niet voor een flexibel per-
sistentiemechanismegekozen door SQL op te nemen in de Class die de opslag
regelt. Deze Class is nu specifiek gebonden aan opslag in een database, en dan
ook nog specifiek aan deze ene Oracle-database.
Allereerst moet een flexibel mechanisme ontworpen of gekozen worden, dat
niet direct afhankelijk is van het opslagmedium dat hier achter ligt. Pas als dat
generieke mechanisme er is, kunnen we dit inzetten voor het persisteren van
gegevens voor ons specifieke opslagmedium, de Oracle-database.
Wel zal schrijven en lezen naar en van schijf iets anders zijn dan zenden en
ontvangen naar en van een netwerk. De Archiver-class wordt vervangen door
een analoge Class met bijvoorbeeld Communicator als naam.
Er is nog een tweede verschil. Tijdens persistentie wordt alleen over de opslag
van objecten gesproken, terwijl het bij communicatie om zowel objecten, maar
meer nog om messages gaat. Willen we hetzelfde mechanisme gebruiken, dan
moeten deze messages worden 'geobjectiveerd'. Er zal een object moeten wor-
den gemaakt dat de drager is van de inhoud van de message, het zogenaamde
Vraagobject. Alle parameters van de message kunnen als attribute (of geën-
capsuleerd object) van het Vraagobject dienen. Het Vraagobject kan nu wor-
den geserialiseerd en de resulterende bits verstuurd. In het andere deel van de
applicatie worden de ontvangen bits weer gedeserialiseerd (=geobjectiveerd).
Systeemontwikkeling met RUP
Het Vraagobject ontstaat weer. Behalve drager van data, is het Vraagobject
ook drager van gedrag. Dit gedrag is als 'method' in het Vraagobject aanwezig
en wordt geactiveerd zodra het Vraagobject ontvangen is. In deze method (met
bijvoorbeeld de naam 'Run') kan het Vraagobject zijn taak uitvoeren, dat wil
zeggen zijn vraag stellen.
Op dezelfde wijze kan een antwoord op een vraag (de returnwaarde van een
message) weer worden geobjectiveerd in een Antwoordobject. Dit Antwoord-
object wordt geserialiseerd, bits worden verstuurd en aan de andere kant ont-
vangen en daar gedeserialiseerd zodat het Antwoordobject weer levend is.
Ook het antwoord is drager van gedrag in een standaard (bijvoorbeeld Run-
method). Wordt het gedrag van het Antwoordobject geactiveerd, dan zal het
antwoord op zoek gaan naar de originele afzender van de vraag (die moet dus
bekend zijn) en daar het inhoudelijke antwoord afgeven.
De ontwerper en Database Designer lopen natuurlijk niet als eerste ter wereld
tegen het probleem van persistentie aan. Integendeel, nagenoeg iedere applica-
tie zal een oplossing voor persistentie moeten gebruiken.
Toch zullen de meeste ontwikkelaars nog nooit zelf een mechanisme voor
flexibele persistentie gebouwd hebben. Hoe is dat mogelijk? Persistentie is al
een van de oudste concepten uit de automatisering en er zijn al veel oplossin-
gen gebouwd en gebruikt. De bedenkers van een framework als J2EE en de
producenten van ontwikkelomgevingen of DBMS-systemen maken gebruik
van ervaringen voor het oplossen van het probleem van persistentie. Vaak is
er daarom al een mechanisme voor persistentie ingebouwd in het framework
of pakket.
Vergeet niet dat ook in een DBMS tegenwoordig veel logica kan worden ge-
stopt. Ook voor de persistentie geldt dat lang niet alle logica in programma-
code hoeft te worden gezet. Het biedt zelfs grote voordelen om dit deels in
het DBMS op te lossen: de performancewinst is vaak aanzienlijk indien je
het persistentiemechanisme zo dicht mogelijk bij de uiteindelijke dataopslag
uitvoert. Hier kleeft echter ook een voor de hand liggend nadeel aan: als de
logica in het DBMS vastligt, zijn we daarmee dus gebonden aan dit DBMS en
verliezen we een belangrijk deel van de flexibiliteit. De vraag is dan: hoe groot
is de kans dat van DBMS gewisseld gaat worden?
op de werking van een applicatie steeds groter worden. Als dan na lange tijd
nog het persistentiemechanismewordt gewijzigd, zal dit veel extra tijd en geld
kosten, gezien het effect van deze wijziging op de architectuur.
In het geval van een ingebakken mechanisme is de Tester in feite een black-
box aan het testen. Eventuele bottlenecks van een ingebakken mechanisme
zijn lastig te achterhalen, aangezien de Tester geen goed inzicht heeft in de
werking ervan. Ook dit probleem speelt niet bij een eigen ontwerp.
Hoe dan ook geldt dat de keuze voor zelf ontwerpen of overnemen altijd expli-
ciet gemaakt dient te worden, hoe klein het project ook is.
Bestanden
In-Memory data structures
e Databases:
o Object Base
0 Relationele Database
0 Hiërarchische Database
o Netwerk Database
Hybride-oplossing
Overigens zal wel vaak een oplossing met losse bestanden worden ge-
kozen voor configuratiegegevens van een applicatie, zodat deze gege-
vens eenvoudig te wijzigen zijn buiten de applicatie om.
gevens, het creëren en initialiseren van de relaties met object, moet zelfs door
middel van datalaag-Classes worden gecodeerd. Omdat bestandsbenadering
per operating systeem varieert, is een goede encapsulatie van dit gedrag in af-
zonderlijke Classes wenselijk. De entity-Classes (waar het eigenlijk om draait)
blijven dan platformonafhankelijk herbruikbaar.
Databases
Dit is verreweg de meest gebruikte vorm van opslag. Bij databases is een be-
heersysteem aanwezig. Een relationele database wordt beheerd door een rela-
tioneel databasemanagementsysteem (RDBMS) en een object base door een
objectbasemanagementsysteem (OBMS). Tezamen worden deze systemen met
de ietwat verwarrende naam databasemanagement systemen (DBMS) aange-
duid.
De ideale situatie van een object base komt in de praktijk nog steeds weinig
voor. Hoewel Gartner in 1998 voorspelde dat in 2003 de omzet van OBMS'en
die van RDBMS'en zou overtreffen, is dit niet uitgekomen. Verreweg de mees-
te bedrijven gebruiken relationele databases. Een mogelijke reden hiervan is
dat 00-systemen overweg kunnen met relationele databases, hoewel daar wel
veel voor moet worden geregeld. Traditionele systemen die gebruikmaken van
relationele systemen worden niet onmiddellijk uitgefaseerd omdat er ergens in
het bedrijf een 00-systeem ontstaat. Deze traditionele systemen worden mis-
schien wel op termijn vervangen. Overgang naar een OBMS is voor de nieuwe
00-systemen een eenvoudige wijze om tot persistentie te komen. Traditio-
nele systemen moeten echter aangepast worden en dat is een onoverkomelijke
horde gebleken.
Relationele databases
Bij gebruik van een RDBMS wordt uitgegaan van het Class Diagram, dat in
een logisch datamodel en vervolgens in een databaseschema wordt omgezet.
Het Class Diagram is leidend. Het databaseschema is veelal niet een I:I-af-
beelding van het Class Diagram; er is dus sprake van transformatie. Deze
transformatie moet vanwege eisen van flexibiliteit buiten de entity-objecten
blijven. De Database Designer, geconfronteerd met performanceproblemen,
zal het databaseschema in zekere mate normaliseren. Dat kan pas gedurende
volgende iteraties nodig blijken. De bulk aan gebouwde software moet door
database- schemawijziging niet beïnvloed worden.
Het gebruik van SQL voor het wegschrijven en inlezen van objecten (het save/
load-protocol) is sterk aan te raden, aangezien SQL door de meeste commer-
ciële relationele databases wordt ondersteund. Ook het gebruik van deze SQL
moet worden geëncapsuleerd, want diverse leveranciers van relationele pak-
ketten hebben elk toch weer hun eigen subdialect.
Voor het vertalen van objecten naar een relationeel model zijn diverse zoge-
naamde object-relational frameworks voorhanden. Het idee achter zo'n frame-
work is dat de fysieke dataopslag geëncapsuleerd wordt, zodat de applicatie
geen rekening meer hoeft te houden met de specifieke eigenschappen van die
data-opslag. Tussen de fysieke opslag en de objecten zit verder een transfor-
matielaag, die de objecten transformeert naar het relationele model. Figuur 9.8
geeft het principe weer:
9 Persistentie
Laag eigenschappen:
- Compacte interface
- Object-relationele vertaling
- Ge-encapsuleerde data-opslag
In Java bevat de EJB (Enterprise Java Bean) Container ook een t001 om een-
voudige mappings van objecten naar relationele data (vaak afgekort tot O/R
mapping) te maken. Een DBMS als Oracle 8i wordt tegenwoordig geleverd
met een versie van deze EJB Container.
Behalve dat men voor een project een relationele ,database met 00-trekken
zou kunnen kiezen, bestaat natuurlijk ook de mogelijkheid van een hybride
oplossing. In zo'n geval wordt bijvoorbeeld een RDBMS als primaire oplos-
sing gekozen, maar voor een onderdeel van de applicatie met veel complexe
objecten zou een OBMS kunnen worden gebruikt.
Fabrikant Model
De notatie van de schematechnieken voor een database kan afwijken van die
van het Class Diagram. Maar zoals uit het voorbeeld blijkt, is er veel verwant-
schap met het Class Diagram. In het diagram van figuur 9.9 kan een Eigenaar
meerdere Auto's bezitten en heeft een Auto altijd precies één kenteken en hoort
een kenteken bij precies één auto et cetera.
Algemeen wordt voor een Design Class van het type Entity een tabel in de
database gemaakt. De Class Arrondissement uit de case bevat een aantal at-
tributen zoals arrondissementcode, naam, omvang, het aantal notarissen en de
verwijzing naar de desbetreffende notarissen. Deze Class kan worden omge-
vormd naar een tabel Arrondissement.
Voor classes die in het Design Model I:N associaties bevatten, kan deze aan-
pak ook gevolgd worden.
Bij Classes die in het Design Model een associatie hebben die aan beide as-
sociatie-einden een multipliciteitbovenwaardehebben van N, is het invoeren
van een relatietabel een veeltoegepaste oplossing.
Als de Class Notaris minstens I associatie heeft met Class Zaak en aan een
Zaak door meerdere Notarissen kan worden gewerkt, dan kan dit in het data-
basemodel omgezet worden door een tabel NotarisZaak te introduceren, die
minimaal de key Notaris en de key Zaak bevat. Deze twee keys vormen samen
de primairy key van de tabel NotarisZaak.
In het Design Model kan een Design Class erven van een abstracte,class, bij-
voorbeeld van de abstract Class Notaris.
Zaak
o..*
Figuur 9.10: Voorbeeld van een Design Class die erft van een abstracte class
9 Persistentie
Tot slot komt in het Design Model vaak een composition voor. Dit betekent dat
het gehele object is samengesteld of bestaat uit één of meer andere objecten.
Het is voor de Database Designer heel belangrijk te beslissen welke oplossing
hij wil toepassen. Veelal wordt iedere Class weer een tabel. Echter, de delen
van een composition kunnen ook niet zonder dit geheelobject bestaan (life
cycle dependancy).
Bij volgende iteraties zal de Database Designer rekening moeten houden met
het bestaande datamodel. Dat geldt uiteraard ook voor een applicatie die uit-
breidingen moet realiseren op een bestaande database.
Er is een nieuwe Class aan het Design Model toegevoegd met een of meer-
dere relaties. In principe betekent dit een nieuwe tabel toevoegen en be-
slissen of de relaties al bestaan. Voor de relatie kan gewerkt worden met
verwijzende sleutels of met relatietabellen.
Er zijn meer subclasses toegevoegd aan het model. Dit betekent een extra
tabel toevoegen en conform eerder aangegeven aanpak verder gaan. Ook
kan het betekenen dat het hanteren van variant één (alle subclasses in een
tabel) niet effectief meer zal werken en een van de andere varianten geko-
zen moet worden.
Door het toevoegen van extra specialisatie in het Design Model kan een
Concrete Class gewijzigd zijn in een Abstract Class met subclasses. Ook
deze aanpassing zal betekenen dat een keuze moet worden gemaakt over de
implementatie van de overerving.
In het Design Model zijn bij verschillende classes nieuwe attributen toege-
voegd. Dit levert een eenvoudige aanpassing. De Database Designer voegt
een kolom toe aan de desbetreffende tabel. Hij kan zelfs al aangeven wat de
defaultwaarde moet worden voor dit attribuut, waardoor meteen alle attri-
buten een waarde bevatten en constraints als Not Nul1 in de database geen
problemen geven bij de conversie. Daarnaast moet de Database Designer
controleren of het toegevoegde attribuut niet een verwijzende sleutel is naar
een andere tabel. In dat geval zal hij moeten beslissen of het DBMS deze
verwijzende sleutel zal controleren en beheren (extra index definiëren en
aanpassen van het schema) of dat deze controle anders geregeld wordt (via
de applicatie zelf).
In het Design Model is er tussen een overervingsstructuur een niveau toe-
gevoegd. Dit komt voor als tussen de superclass en de reële subclasses een
extra superclass wordt gevoegd. Voorbeeld Notaris wordt toegevoegd en
gaat ook nog erven van Persoon. In wezen worden nu de regels van overer-
ving weer toegepast.
Wanneer de Design Classes zijn omgezet naar een of meerdere classes,
kan de Database Designer starten met de definitie van het databaseschema
of dit laten genereren. Hierbij zal hij gebruikmaken van de gegevens over
toegang, gebruikswensen en eisen ten aanzien van performance. Veel van
deze gegevens zijn verzameld en terug te vinden in de Requirements, de
beschrijvingen van de Class en bij de Mechanisms. Op basis van deze ge-
gevens kan besloten worden om deels te denormaliseren (redundante infor-
matie toevoegen om performance te verbeteren; tabel inlezen in de applica-
9 Persistentie
Als dergelijke issues spelen binnen een project, zal de Software Architect hier
direct rekening mee moeten houden. Dit zou zelfs tot gevolg kunnen hebben
dat de keuze voor een bepaald persistentiemechanisme al in deze fase wordt
vastgelegd.
Elaboration
Tijdens de Elaboration-fase moeten in ieder geval de te gebruiken mechanis-
men voor persistentie worden gedefinieerd.Deze vormen een belangrijke basis
voor het ontwikkelwerk tijdens de Construction-fase en moeten tegen die tijd
beschikbaar zijn voor de ontwikkelaars.
Construction en Transition
In de Construction- en Transition-fase is het niet de bedoeling dat er nog grote
wijzigingen aan het Data Model plaatsvinden. Als er zowel een Logical als
een Physical Model gemaakt is, zou in ieder geval het Logical Model niet of
nauwelijks meer moeten veranderen.
Het is natuurlijk mogelijk dat er een meer structurele wijziging komt naar
aanleiding van een change-request, of anders naar aanleiding van een test-
resultaat. Zelfs in de Transition-fase kunnen er dan nog wijzigingen aan het
Physical Data Model zijn.
Hoe dan ook is het zaak, dat de Database Designer te allen tijde het Data Mo-
del gelijk laat lopen met de fysieke database. Vaak worden wel kleine updates
aan een fysieke database gedaan, maar wordt vergeten om deze aanpassingen
direct te verwerken in het Data Model. Dit kan grote (negatieve) gevolgen heb-
ben bij latere onderhoudswerk.
De Designer en Implementer moeten ervan opaan kunnen dat het Data Model
volledig bijgewerkt is tot en met de laatste (zelfs kleine) wijziging. Veel fouten
worden gemaakt doordat een Implementer een component ontwikkelt die ge-
baseerd is op een niet-bijgewerkt datamodel. Regelmatig moet de Implementer
in zo'n geval een deel van zijn werk weggooien en het opnieuw uitvoeren met
het juiste Data Model; een verspilling van tijd.
Als mechanisme voor persistentie zal meestal gekozen worden voor een rela-
tioneel databasemanagementsysteem (RDBMS), maar ook een Object Base
Management System (OBMS), persistentie via losse bestanden of In-Memory-
Storage horen tot de mogelijkheden.
Svsteemontwikkelina met RUP
Hoe dan ook moet er een zo flexibel mogelijk mechanisme voor de persistentie
zijn, zodat bij een eventuele wijziging in de fysieke opslagmethode niet een
groot deel van de applicatie-architectuur gewijzigd hoeft te worden.
Eric J. Naiburg en Robert A., Maksimchuk UML For Database Design. Ad-
dison-Wesley Longman, 2001. ISBN 0201721635.
Wat in het Design Model is ontworpen, gaat in het Implementation Model ge-
bouwd worden. In plaats van direct te gaan programmeren, is het vaak zinvol
ook een Implementation Model te maken. In het Implementation Model wordt
op een gedetailleerd niveau nagedacht over de structuur van de implementatie,
de interfaces en de afhankelijkheden, de verschillende subsystemen, en na-
tuurlijk krijgen ook de componenten zelf er hun plaats.
Hoe kom je nu uitgaande van de Use Cases uit het Use Case Model en de
Supplementary Specifications tot de uiteindelijke executeerbare code? Elke
Use Case is uitgewerkt in een Use Case Realization. De interne communicatie
tussen de objecten in een Use Case Realization is met één of meer interactie-
diagrammen (de Sequence Diagrams of de Collaboration Diagrams) in kaart
gebracht. Daarnaast is zonodig per Use Case een VOPC (View Of Participa-
ting Classes) gemaakt, waarin de classes - en hun relaties - staan die nodig
zijn voor deze Use Case. Elke Use Case wordt op deze manier uitgewerkt tot
samenwerking tussen Analysis Classes.
Svsteemontwikkelina met RUP
Per Analysis Class is door de Software Architect reeds besloten hoe deze Ana-
lysis Class in het Design Model technisch getransformeerd wordt tot één of
meer design elements. Het design element kan zijn: een Design Package, een
Subsystem of een Design Class. Elk design element is uiteindelijk input voor
de codering door de programmeur. Die code wordt gegroepeerd en executeer-
baar gemaakt (compile & build).
De worker die daadwerkelijk gaat bouwen, heeft vaak een of meer van de
volgende rollen: Designer, Implementer of Integrator. Het werk van de Inte-
grator komt in de volgende paragraaf aan bod. In de praktijk gebeurt het veel
dat iemand met de rol van Implementer ook nog de rol van Designer heeft en
beslissingen neemt over bijvoorbeeld de structuur van een package. Er wordt
nauw samengewerkt met de Architect, want deze beschrijft op hoofdlijnen de
structuur van het Implementation Model en de verschillende interfaces.
Dat is best een lastige vraag, maar toch is daar een heel eenvoudig antwoord
op. Maak eerst de Test Case en programmeer dan de functionaliteit. Als de
Test Case slaagt, heb je iets gebouwd wat OK is. Deze aanpak heet het 'test-
first-design' en is beschreven in RUP (de RUP-kennisbank versie zoo3 bevat
een PDF-bestand: RUPtXP Guidelines: Test-first Design and Refactoring).
Test-first design is ook een van de pijlers van Extreme Prograrnming (XP).
Het gebruik van een automated t001 als Junit of Nunit is zeker aan te bevelen
bij een test-first-aanpak (zie het hoofdstuk Testen).
Het antwoord op de vraag 'wat moet ik bouwen?' is ook afhankelijk van de fase
waarin je zit. Het doel van bouwen aan een proof of concept in de Elaboration-
fase is heel anders dan bouwen aan het werkelijke systeem in de Construction-
fase. In deze context is 'goed is goed genoeg' een toepasselijke omschrijving.
Houd altijd het doel in de gaten van als je aan het bouwen bent.
Systeemontwikkeling met RUP
Er zijn vele definities van het begrip component. De definitie van een compo-
nent binnen RUP is niet zeer strak. Een component is een stuk software dat
redelijk onafhankelijk is, op zichzelf staat en een duidelijke functie heeft die is
vastgelegd in de interface. Een component kan op meerdere plekken gebruikt
worden.
Het is bij het implementeren en integreren dus belangrijk uit te gaan van het
bestaande en niet steeds opnieuw trachten het wiel uit te vinden.
Als je kijkt naar de levenscyclus dan zijn er twee soorten prototypen name-
lijk:
User-interface
Alleen de voorkant is geïmplementeerd, de achterkant wordt gesimuleerd.
Het kan bijvoorbeeld zo zijn, dat wat je ook invoert in het systeem, er altijd
eenzelfde uitkomst uit komt rollen, of een beperkt aantal mogelijkheden.
Zo kun je met de gebruiker de User-interface testen. De gebruiker kan
zeggen of de knoppen en de edit-boxen op de juiste plek staan en of de
volgorde van de schermen volgens wens is.
Storyboard
Dit (optionele) RUP-artefact kan vervaardigd worden om een opeenvolging
van acties van een systeem uit te beelden. Dit kan in de vorm van een pa-
pieren prototype of als PowerPoint presentatie. Zo test je met de gebruiker
of de juiste werkwijze geïmplementeerd wordt.
Met prototypes wil je iets testen. Dat kan zijn of de performance acceptabel is,
maar het kan ook zijn dat je met de gebruiker wilt uitzoeken hoe het systeem
10 Implementeren en integreren
moet werken. Een prototype is een krachtig hulpmiddel, omdat je zaken waar
je tot dan toe waarschijnlijk alleen in tekst over gecommuniceerd hebt, heel
concreet maakt. Het voordeel is dat je test, nog voordat je veel tijd en geld hebt
geïnvesteerd in het bouwen van een compleet systeem.
Met welk doel je een prototype ook maakt, stel vooraf de evaluatiecri-
teria vast waaraan je het prototype achteraf gaat toetsen.
Wat doe je met een prototype nadat je de test hebt uitgevoerd? Sommigen zijn
hier heel rigoureus in. Je kunt na gebruik, en dat kan ook een iteratief proces
zijn met meerdere versies van het prototype, het prototype weggooien en op-
nieuw beginnen met het bouwen van het systeem. Een andere benadering is
om bepaalde elementen uit een prototype te gebruiken als startpunt voor het te
bouwen systeem. Het laatste bevat wel een risico. Het bouwen van een proto-
type is niet gericht op het bouwen van een net en onderhoudbaar systeem. Het
kan dus een rommeltje zijn en als dat niet wordt hersteld zal dat een nadelige
invloed hebben op de onderhoudbaarheid van het productiesysteem.
Het resultaat van bouwen in de Inception-fase is altijd een (zeer) tijdelijk re-
sultaat. Niet per se wegwerpsoftware, maar dan toch zeker software met een
beperkte houdbaarheidsdatum. De oplossing is vaak ook niet geschikt voor
onderhoud, maar juist bedoeld is om door een volgende versie of release ver-
vangen te worden.
Er wordt wel wat opgeleverd. Dat kan software zijn, maar als het bijvoorbeeld
gaat om performance-testen, dan kan dat ook heel goed rekenwerk - achter het
bureau - zijn geweest. Dit rekenwerk is ook een Implementation artefact van
de Inception-fase.
Systeemontwikkeling met RUP
Het hoeft overigens niet eens van tevoren duidelijk te zijn welke fysieke vorm
de implementatiezal hebben in de Inception-fase. Het kan zeer goed pas tijdens
die fase duidelijk worden wat handig is, en dan is het vaak weer afhankelijk
van de bemensing op het project wat nog mogelijk is. In feite moet de project-
behoefte natuurlijk de gewenste bemensing bepalen, maar in de praktijk loopt
dat wel eens anders en kun je niet op elk moment de bemensing aanpassen.
Hier is het hebben van verschillende rollen door medewerkers weer handig,
want dan kun je nog laat besluiten wat je gaat doen.
lende functies eerst compleet uitgewerkt en pas als ze gereed en getest zijn,
worden ze toegevoegd aan de reeds bestaande onderdelen van het systeem.
Voordeel van deze manier van (uitgestelde) integratie is dat je sneller kunt
werken, omdat er minder overhead is. Het nadeel is een extra risico op het
vlak van relaties tussen componenten: pas op een laat tijdstip (het moment van
integratie) wordt ontdekt dat onderdelen niet goed op elkaar aansluiten. Deze
manier van integreren komen we wel vaak in de praktijk tegen.
Een CM kan ook controle willen houden over het integratieproces door dit
zelf uit te voeren, meestal in de vorm van een daily build waarbij dagelijks het
complete systeem wordt gecompileerd. Met name later in de Construction-fase
wordt dit belangrijk, want op dat moment zou een build een werkend systeem
moeten opleveren. Als de CM deze taak op zich neemt, blijft het de rol van
de ontwikkelaar om een component pas aan te leveren voor integratie op het
moment dat deze correct de unittest heeft doorstaan.
Als gekozen wordt voor een daily build zal zeker een maal per dag een con-
trole plaatsvinden op onderlinge samenhang van componenten. Vooral als dit
buildproces automatisch verloopt, waarvoor de meeste hedendaagse Configu-
ratie Management tools en ontwikkelomgevingen de mogelijkheden bieden,
biedt dit een zekere mate van kwaliteitsbewaking. Als niet wordt gekozen voor
daily builds maar voor integratiecontroles door de ontwikkelaar, kan dit bete-
kenen dat op een laat tijdstip in de Construction-fase wordt ontdekt dat com-
ponenten niet integreren.
Het Integration Build Plan kan dus verschillend van inhoud zijn. In dit plan
staat wanneer welke onderdelen zullen worden geïntegreerd in iedere iteratie.
Het samenvoegen van componenten wordt gedaan door iemand met de rol In-
tegrator. Bij het maken van .NET-assemblies en Java-packages is dit vaak het
maken van de XML-descriptors. In veel IDE's kan dit al geautomatiseerd zijn.
Ook het maken en uitvoeren van een ANT-script is een praktijkvoorbeeld van
het werk van de Integrator: hij voegt classes (components) samen tot subsyste-
men (packages). De unittests spelen hierbij een belangrijke rol (zie Hoofdstuk
Testen).
10 Implementeren en integreren
Het integratieproces is een heel zorgvuldig karwei. Zeker als er veel handma-
tige handelingen vereist zijn. Vandaar dat een geautomatiseerd buildproces zo
belangrijk is. Als een build- of integratieproces lastig is, zal het vaak worden
uitgesteld zodat inconsistenties en botsende interfaces te laat aan het licht ko-
men.
Het integratieproces moet minimaal bestaan uit: ophalen laatste versies van de
sources, compileren, unittesten, samenvoegen, kopiëren, integratietesten. Als
het integratieproces automatisch verloopt is het eenvoudiger om 'Daily builds'
te maken. In grotere projecten, waar verschillende teams aan verschillende
subsystemen werken, zie je ook wel een wekelijkse build. Van belang is een
vaste periode, die dan als een soort hartslag van het project geldt.
Als er een omgeving is waarin regelmatig builds worden gemaakt, moet bij
het implementeren van een component worden stilgestaan bij de afhankelijk-
heden. Deze afhankelijkheden moeten, om de integratie niet te verstoren, af-
gedekt zijn. Soms is dit niet mogelijk omdat andere onderdelen nog niet klaar
zijn. Dit lossen we op door stubs te gebruiken. Stubs zijn stukjes code die de
interface simuleren. Bijvoorbeeld: op een bepaald moment moet er iets in de
database worden opgeslagen en je krijgt een 'true' of 'fake' terug afhankelijk
van of het gelukt is of niet. Je simuleert dan in de code dat het weggeschreven
wordt en geeft altijd dezelfde return waarde terug. Bij het implementeren van
een component voldoe je dan altijd aan de interface. Òf door de daadwerke-
lijke functionaliteit te bieden (de method bestaat en werkt), òf door de functio-
naliteit te simuleren door middel van een stub.
Iedere ontwikkelaar heeft op enig moment te maken met testen. Is het niet in
de rol van Implementer of Integrator, dan wel in de rol van Designer, Analyst
of Tester. De relatie van de Test-discipline met de andere disciplines in RUP is
beschreven in de RUP-knowledge base en wordt derhalve niet verder beschre-
ven. Het belang van testen is algemeen bekend; wie gaat in een nieuwe auto
zitten zonder dat deze eerst uitvoerig aan allerlei testen is onderworpen? Bij de
aanschaf gaat de nieuwe bezitter uit van een goed werkend product. Dit is ook
zo voor een systeem: de gebruiker en de stakeholder gaan uit van een correct
werkend product volgens de opgegeven specificaties. Om hier aan te voldoen
is testen onmisbaar. Voor een gemiddeld project is de ingeplande testtijd mar-
ginaal (of is als eerste wegbezuinigd). Dit is op zijn minst eigenaardig te noe-
men, omdat juist vanuit het testen een reëel beeld ontstaat van het ontwikkelde
systeem. Door testen gestructureerd en in het project in iedere iteratie op te
pakken (conform RUP) geeft de testdiscipline de toegevoegde waarde aan het
project (en aan de andere disciplines) en een bepaalde objectieve beoordeling
van het ontwikkelde product.
In RUP is testen als een aparte discipline opgenomen. Het belang van testen
wordt door RUP benadrukt en is terug te voeren op de best practice 'Continue
verificatie van de kwaliteit'. Door activiteiten uit de testdiscipline uit te voeren
ben je steeds bezig de kwaliteit te beoordelen, te evalueren en aan te geven
welke delen nog verbeterd moeten worden. Dat bereik je door doorlopend,
Systeemontwikkeling met RUP
niet alleen aan het einde van een iteratie, de best practices voor testen toe te
passen:
De Test-discipline heeft dus een essentiële taak in het vinden van zwakheden
in het op te leveren software product.
In elke testlaag komen testen aan de orde die invulling geven aan de specifi-
caties zoals deze uit de artefacts te voorschijn komen. Het algemene beeld van
testen moet gericht zijn op het beoordelen van het systeem vanuit de gegeven
(test)specificaties. Een tester beoordeelt een systeem specifiek op de imple-
mentatie van de specificaties en niet op wat er is ontwikkeld. Hij test niet wat
het systeem doet, maar wat het behoort te doen. Hiervoor is het noodzakelijk
om de specificaties te koppelen aan de uit te voeren testen. Dit komt later aan
de orde.
Systeemontwikkeling met RUP
i
kJinittest
De unittest is het eerste testniveau binnen elk project. De Test Manager heeft
in zijn testplan reeds nagedacht over invulling van de unittest en zal daarvoor
vaak bij de Developer terechtkomen. Als Developer ben je dus zowel Test De-
signer, Test Analist als Tester. In de rol Test Designer vraag je je af, op basis
van de gebruikte technieken in het project zoals applicatieplatform, infrastruc-
tuur en middleware, op welke wijze de unittest ingevuld moet worden op ba-
sis van de afgesproken diepgang. Gelukkig zijn hiervoor vaak frameworks en
tools aanwezig.
Junit of Nunit;
Microsoft Application Center Test;
Rational Teststudio;
Nunit;
Microsoft FXCoP;
Ndoc;
.MS1 (evtueel plus Crystal reports);
Rational XDE Developer en XDE Tester;
Rational ClearQuest (Defects list).
Het voordeel van unittesten blijkt ook bij aanpassingen. Dan wordt alles op-
nieuw gecompileerd en kun je meteen zien of de methods nog werken en of
nu compatibiliteitsproblemen zijn ontstaan. Bijvoorbeeld doordat de testsuite-
classe nog niet is geüpdatet, of dat een verandering is aangebracht in de data-
structuur waarbij nog niet is gelet op de invoer vanuit de andere classes.
alle situaties van de unit meegenomen in de test (normaliter een eis binnen
unittest) of komen bepaalde testen later aan bod. In sommige situaties kan het
zelfs wenselijk zijn om reeds unittesten via een GUI uit te voeren. In de rol van
Test Analist ziet de Developer ook toe op de voortgang en het kwaliteitsniveau
van de test.
Voor unittesten is het vastleggen van de resultaten een apart verhaal. Unittes-
ten gaan vaak niet via de gebruikte testtools in andere testniveaus en daarom
zal vastleggen van de resultaten apart plaats vinden. In de praktijk gaan de
defects vanuit de unittest niet in een probleem-t001 omdat de developer zelf de
testresultaten gebruikt om voortgang en fouten te verbeteren. Het gaat om vast
te leggen welke unittesten uitgevoerd zijn en wat de status van een artifact is.
Een oplevering naar een volgend niveau van testen zal pas plaatsvinden wan-
neer de unittest volledig succesvol is doorlopen.
ntegratie- en Systeemtest
De integratietest is het volgende niveau in het V-model. Uitgangspunt vormt
een succesvolle unittest. Deze testen kijken echter uitsluitend naar de kleinste
gedefinieerde testeenheid: de samenhang tussen de eenheden komt in een in-
tegratie- en systeemtest aan bod.
bij beetje op te bouwen (per Use Case, per applicatiedeel, per technisch deel)
waarbij uiteindelijk een volledig systeem ontstaat.
Een systeemtest bekijkt bij voorkeur de werking van een geheel systeem, al zal
dit in de praktijk niet altijd het geval zijn. Vaak krijgt een systeemtest de naam
preacceptatie mee om zo in te spelen op het volgende testniveau.
Vaak zijn de integratietesten meer technisch van aard en ligt de focus op een
juiste technische werking van de delen van het systeem, terwijl de systeemtest
een duidelijk functioneel karakter kent. Het opzetten van de testen voor inte-
gratie en systeem hangt sterk samen met de gekozen teststrategie, testdoelen en
testaanpak. Hiermee worden ook de inhoudelijke activiteiten van de testrollen
voor een belangrijk deel bepaald maar moeten alle testrollen vertegenwoordigd
zijn. Wanneer een duidelijk onderscheid ligt in de testaanpak van integratie en
systeemtest, kan het nodig zijn om de testrollen door verschillende personen
in te vullen: een Test Designer voor integratietest en een Test Designer voor
systeemtest. Wanneer de integratie- en systeemtest duidelijk gescheiden zijn is
het tevens eenvoudiger de testvoorbereiding gelijktijdig uit te voeren.
In ieder geval zal het testen van architectuurprototypes op die aspecten waar-
voor het bedoeld is, net zo zorgvuldig moeten worden uitgevoerd als het testen
van het uiteindelijke systeem.
Het testen van prototypes betekent dat ook tijdens de Elaboration-fase of zelfs
de Inception-fase aandachtig getest wordt. Zie je wel, testen is tijdens alle fa-
sen van RUP belangrijk.
Systeemontwikkeling met RUP
Voor elk testniveau geldt het onderscheid in white box- en black box-testen. De
white box-test maakt gebruik van de kennis van de interne technische struc-
tuur van het te testen object controleert of de gekozen oplossing in technische
zin goed functioneert. Doel van de white box-test is het opleveren van een wer-
kend object dat onder normale omstandigheden steeds zinvolle, beoordeelbare
uitvoer oplevert. Bij black box-testen wordt het object van buiten af bekeken en
wordt gecontroleerd of de noodzakelijke eigenschappen van het object aanwe-
zig zijn. De manier waarop dit technisch is gerealiseerd is van minder belang.
Het uitvoeren van black box testen is niet zinvol voordat de white box-testen
achter de rug zijn.
White box-testen komt het meest terug bij de unittest. De integratietest is, af-
hankelijk van de benodigde diepgang en aansluiting op de unittest, een white
box- of black box-test. De systeem- en acceptatietest zijn vaak black box-tes-
ten.
Apart aandacht verdient het testen van de performance. Dit omvat niet alleen
het aspect snelheid, maar ook hoeveelheden, resourcegebruik en het verken-
nen van systeemgrenzen. Dit dient gefaseerd aangepakt te worden. Binnen een
RUP-project is de Elaboration-fase de aangewezen fase om te starten met per-
formancetesten. Performance kan meegenomen worden in nagenoeg elke test-
fase. In unittesten als aanvulling op de bestaande unittestset (als uitbreiding op
het unittestframework zoals Perfunit), binnen integratie- en systeemtesten om
performancescenario's te doorlopen. Ook voor performancetesten geldt dat het
doel zal zijn in een zo vroeg mogelijk stadium met zo min mogelijk middelen
de grootste en meest risicovolle afwijkingen van de Requirements te ontdek-
ken. Vaak is voor performancetesten een separaat testtraject nodig, gezien de
specifieke eisen aan een performancetest zoals benodigde testkennis, tooling
en omgeving.
In de praktijk komt performance vaak (te) laat aan de orde; soms worden af-
wijkingen ten opzichte van de Requirements pas ontdekt tijdens acceptatie. Dit
is deels te verklaren door'de complexiteit in het aantonen van een te behalen
performance in een niet-productieomgeving. Toch vormen performance-eisen
vaak een belangrijk onderdeel uit de verschillende acceptatiecriteria. De Soft-
ware Architect zal samen met Test Analyst en Test Designer een vertaling
dienen te maken van de eisen aan performance naar testen, die in een vroeg
stadium uitvoerbaar zijn. Op het niveau van unittest betekent dit bijvoorbeeld
erstaken simuleren is de integratie- en systeemtest meer
discussie is die over het moment van testen. Het gaat dan
I 87
Systeemontwikkeling met RUP
TESTFASES
Reviewen
L Zijn de requiremenfs duidelijk?
Unit-Test
L Werkt mijn onderdeel?
Integration Test
L Werken de onderdelen samen?
1
2
O
t System Test
L Werkt het Systeem?
L Acceptence Test
Development C- --+ Deployment
Test en
RUP kent een aantal testtypen die zijn gekoppeld aan kwaliteitsdirnensies.
Testen is feitelijk het beoordelen van een kwaliteitsniveau, dus deze koppeling
ligt voor de hand. Een testtype zegt iets over de soort test (bijvoorbeeld func-
tioneel testen, performance testen). Een kwaliteitsdimensie kent de FURPS+
indeling (zie het hoofdstuk Interpreteren Requirements).
Het koppelen van Requirements aan testcases is via testtools (zoals Rational
Testmanager) mogelijk, waarmee tevens de traceerbaarheid van requirements
wijzigingen is opgepakt.
11 Testen
Configuration a Change
In de praktijk is het gehele defectbeheer binnen CCM belegd: hier bepaalt men
op welke wijze de defects opgepakt worden.
Iteratief testen
Het iteratief werken binnen RUP vraagt een specifieke en flexibele aanpak van
testen: per iteratie wordt het gehele testproces doorlopen. Voor elke iteratie
wordt, afgestemd op het Master Test Plan, bepaald welke testen aan bod ko-
Systeemontwikkeling met RUP
men. Het kan hiervoor noodzakelijk zijn om per iteratie een iteratietestplan op
te stellen. Binnen een iteratie komen in ieder geval de testniveaus unittesten
en de integratie- en systeemtesten (of een combinatie) aan bod. Het iteratieve
karakter kan verder ingevuld zijn door de testen een opbouwend karakter te
geven: de volgende iteratie borduurt dan voort op de testen die zijn opgesteld
voor de eerdere iteratie. Deze keuzes vallen onder de noemers teststrategie en
testaanpak, beschreven in het Master Test Plan.
De wijze van het opbouwen van de testomgeving volgt het Iteration Plan. Af-
hankelijk van de gekozen ontwikkelstrategie wordt de testomgeving steeds
aangevuld met een oplevering vanuit een iteratie of volgt vanuit elke iteratie
een geheel nieuwe testomgeving.
zelf ontwikkeld zijn) is het niet mogelijk om deze testen uit te voeren. Het is
onvoorstelbaar om zonder deze ondersteuning 1000 multiple users te simule-
ren die elk 8 uur lang bepaalde schermafhandelingen verrichten.
Wanneer voor geautomatiseerd testen gekozen is, krijgen alle rollen binnen
de testdiscipline hier mee te maken: de Tester bij voorbereiding en vooral uit-
voeren van testen en de Test Designer en Analyst bij het bepalen van de uit
te voeren testen. Het is zaak om tijdig het gebruik van geautomatiseerd testen
vast te stellen en dan desgewenst voor te bereiden (tijdens Inception is beno-
digde ondersteuning voor testen vastgesteld). Vergeet hierbij niet de benodigde
(test)ervaringen met geautomatiseerd testen.
Het is raadzaam om in geval van geautomatiseerd testen voldoende pre-testen
in te plannen en exact te weten wat de geautomatiseerd testen opleveren (test
de geautomatiseerde ondersteuning zelf).
Svsteemontwikkelina met RUP
bsites
Productinformatie over de testsuite:
www.rational.com/products/tstudio/prodinfo.jsp
De Deployment Manager houdt zich onder andere bezig met het schrijven,
testen, verbeteren en zelfs ook het uitvoeren van installatiescripts. Het systeem
dat door de Deployment Manager wordt opgeleverd gaat vergezeld van gebrui-
kersinformatie. Deze kan door de Deployment Manager zelf worden samenge-
steld, maar wordt veelal samengesteld op basis van documentatie aangeleverd
door het team. In de gebruikersdocumentatie vind je onder andere informatie
uit Use Cases, Release Notes en ook uit testrapporten (waar workarounds be-
schreven kunnen zijn).
Ook zorgt de Deployment Manager voor het vergaren van informatie uit de
SCM-repository (Software Configuration Management repository) van confi-
guratiegegevens. Het kan hier gaan om .INI-files of 'registry settings', maar
ook om de eisen die gesteld worden aan het te installeren systeem. De Deploy-
ment Manager zal hier ook samenwerken met de Configuration Manager om
deze informatie te verkrijgen.
Systeemontwikkeling met RUP
In sommige projecten wordt een reeds bestaand systeem (of worden reeds be-
staande systemen) vervangen door een nieuw systeem. Als dit het geval is zal
er ook dataconversie nodig zijn. Tot de taken van de Deployment Manager
behoort dan ook het verzorgen van migratie- of dataconversieprogrammatuur
en het uiteindelijk uitvoeren van de dataconversie.
Een laatste taak (in deze opsomming) van de Deployment Manager is het stel-
len en opschrijven van randvoorwaarden aan het testresultaat. Een Deploy-
ment Manager kan op deze manier zorgdragen voor de kwaliteit van het sy-
steem dat opgeleverd gaat worden. Hiermee wordt voorkomen dat een systeem
met geringe kwaliteit - met andere woorden dat nog bepaalde fouten bevat - in
productie wordt genomen.
Een Deployment Manager krijgt binnen het project te maken met een aantal
groepen of rollen. Deze zijn te verdelen in aanleverende partijen en ontvan-
gende partijen.
Net als voor de vorige omgevingen moeten ook hier weer specificaties worden
opgesteld. De acceptatieomgeving dient, meer dan de testomgeving, gelijk te
zijn aan de productieomgeving. Eventuele problemen van het te bouwen sy-
steem in de productie omgeving dienen hier naar voren te komen.
Systeemontwikkeling met RUP
e installatie handleiding;
backup- en restore procedures;
escalatie procedures;
0 ingerichte changelrequest procedure.
Development = Winzk
JzEE IDE
Test - Linux
Acceptatie = conform productie
Productie = Unix
Linux
OSl~00
NTIwinzk
Het versiebeheer, ofwel het 'beheren' van artefacts, houdt in dat elkaar op-
volgende versies van documentatie, Requirements, maar ook alle source code
en uiteindelijke executables bij elkaar bewaard worden. Van al deze artefacts
worden verschillende versies bewaard en wordt met behulp van SCM aange-
geven welke onderdelen samen een release vormen van een gedeelte of het .
van het gehele systeem. Om alle medewerkers binnen het project goed te laten
werken aan de artefacts en de verschillende versies hiervan, stelt het configu-
ratiemanagement procedures op en zorgt voor de inrichting van tool(s) om dit
alles mogelijk te maken.
Verder houdt SCM zich bezig met het verzorgen van het bouwen (buildma-
nagement) van onderdelen van het systeem of van het gehele systeem, waarna
deze samengevoegd worden vor levering aan bijvoorbeeld het testteam of een
Systeemontwikkeling met RUP
Als laatste, maar zeker niet het minste onderdeel staat genoemd het bepalen
van configuratie-items. Hiermee wordt een systeem opgedeeld in deelsyste-
men die makkelijk zijn te 'configureren'. Afhankelijkheden tussen onderdelen
en verdeling van werk spelen een rol bij het bepalen van de configuratie-items.
In de paragraaf Inrichting van SCM wordt dieper ingegaan op het bepalen van
configuratie-items.
onfiguration
nodig?
SCM is nodig binnen software-ontwikkeltrajectenvan twee personen of meer,
Eén van de hoofddoelen voor het gebruik van SCM is om het tegelijkertijd sa-
menwerken aan artefacts binnen een project mogelijk te maken en te bewaken.
Stel de situatie dat twee ontwikkelaars samen willen werken aan de sources
van dezelfde component. Dan wil je zeker waarborgen dat beide gecontroleerd
aan dezelfde file werken.
Naast het samenwerken aan een release van een component of systeem maakt
het gebruikmaken van SCM het werken aan 'bug fixes' mogelijk. Deze situ-
atie doet zich bijvoorbeeld voor als tijdens het ontwikkelen van versie 2.0 van
een systeem, in versie 1.0, die al in productie is, zich een fout voordoet die
opgelost moet worden voordat versie 2.0 in productie gaat. Het moet dan dus
mogelijk zijn om versie 1.0 te kunnen bewerken zonder dat deze aanpassingen
ook meteen in andere versies beschikbaar komen. Het aangegeven voorbeeld
kan worden beschouwd als parallel ontwikkelen.
Met name omdat binnen RUP-projecten iteratief gewerkt wordt, waarbij steeds
een stukje functionaliteit wordt toegevoegd, is het van belang dat dit goed
wordt ondersteund door het SCM. De gebruikte SCM-tools spelen hierbij een
belangrijke rol: als zij parallel ontwikkelen aan kunnen, is bug fixing op oude
release mogelijk, zonder dat de huidige ontwikkelversie wordt aangetast.
Behalve het kunnen werken aan verschillende versies van artefacts, speelt ook
autorisatie een rol bij SCM. Vooral in grote teams mag niet iedereen aan alle
artefacts veranderingen aanbrengen. Een voorbeeld van autorisatie kan zijn:
het testteam mag wel de Requirements zien, maar hier geen aanpassingen aan
doen.
De System Analyst maakt gebruik van deze SCM-omgeving om het Use Case
Model in bij te houden (opeenvolgende versies). Een ontwikkelaar die sources
aanpast in verband met een bug fix, behoort de juiste versie van de sources te
selecteren uit de SCM omgeving.
Over het algemeen is het dus zo dat iedereen die artefacts maakt of wijzigt,
goed moet opletten welke versie van een artefact wordt gebruikt voor het aan-
passen en hier dus ook tot op zekere hoogte verantwoordelijk voor is. Een ieder
volgt dus de door de Configuration Manager opgestelde procedures.
De inrichting van het SCM is per project verschillend en hangt sterk samen
met andere zaken zoals de gebruikte architectuur, het te bouwen systeem of
bijvoorbeeld de projectstructuur.
Bij afhankelijkheid van de architectuur moet worden gedacht aan een systeem
dat gebouwd wordt in een drielagenarchitectuur: een Datalaag, een Busines-
slaag en een Gebruikersinterfacelaag. De hoofdverdeling van de SCM-omge-
ving kan dan bijvoorbeeld zijn zoals in figuur 13.1 is aangegeven. Binnen deze
hoofdverdeling wordt dan vaak per component een onderverdeling gemaakt,
waarin alle documentatie, sources en test gegevens kunnen worden geplaatst.
Op die manier blijven alle onderdelen van één component keurig gegroepeerd.
Zie hiervoor figuur 13.1.
i3 RUPgrolect
O Busmess
Q Data
O GUI
Q !& RUPgroject
i3 &iBusmess
B @i boKlant
l%docJ
src
test
In plaats van de architectuur leidend te maken bij de inrichting van het SCM-
systeem, kan ook de projectverdeling eisen stellen aan de manier waarop SCM
wordt ingericht. Denk hierbij aan teams die op een bepaalde manier samen-
gesteld zijn en dus per team aan een ander gedeelte van het systeem willen
werken (denk aan een team dat bouwt aan de Web-GUI en een ander team dat
de normale Windows-GUI voor zijn rekening neemt).
Labels zorgen voor een unieke identificatie van een 'doorsnede' van het SCM-
systeem op een gegeven moment, bijvoorbeeld bij een daily build. Denk bij
doorsnede aan een deelverzameling van de artefacts, waarbij voor elk artefact
maximaal één exemplaar (of versie) aanwezig is. Deze versies zijn onderling
consistent. Zoals we hieronder zullen zien, kan omgekeerd één artefactversie
wel meerdere labels hebben: denk maar aan een artefact dat in zowel release I
als 1.1 voorkomt, maar geen wijziging heeft ondergaan.
Bij het maken van een zogenaamde baseline van een systeem wordt van alle
artefacts (dus niet alleen van de sourcecode en executables, zoals in een daily
build) een versie gekozen en van een gezamenlijk label voorzien. Hierbij wor-
den dus ook artefacts als Vision document, Use Case modellen, et cetera gela-
beled. De kunst is natuurlijk om te zorgen dat de artefacts binnen zo'n baseline
onderling consistent zijn.
Classl .vb
Baselining of het maken van een baseline is binnen RUP een taak voor de
Integrator. Hij zorgt dat op afgesproken tijden in een ontwikkelproject (af-
spraken staan in het CM plan) een label wordt toegekend aan alle artefacts die
zich bevinden in het SCM systeem (repository). Op deze manier worden alle
artefacts met een bepaalde versie samen uniek geïdentificeerd (zie figuur 13.3)
en kunnen in een later stadium deze versies op eenvoudige wijze uit het SCM
13 Configuratiemanagement e n c h a n a e s
Label Rell.0
l
Het maken van een baseline komt binnen RUP op twee plekken in de work-
flow voor, namelijk in 'Change and Deliver Configuration Items' en in 'Ma-
nage Baselines & Releases'. Op de eerste plek wordt bedoeld het baselinen ten
behoeve van het projectteam, bijvoorbeeld het toevoegen van een configuratie-
item -een ontwikkelaar heeft een nieuwe component die moet worden toege-
voegd - aan een bepaalde release. In 'Manage Baselines & Releases' gaat het
vooral om het baselinen ten behoeve van het opleveren naar een testteam of
naar een productiesysteem.
e ontwikkelaar?
SCM betekent voor een ontwikkelaar met name dat hij artefacts die hij wij-
zigt op een juiste wijze vanuit de SCM-repository uitcheckt en incheckt. Het
inchecken is hierbij cruciaal. Als we even kijken naar sources, dan wordt ver-
wacht dat deze getest (unit-test) zijn door de ontwikkelaar en werkend zijn
bevonden voordat ze worden ingecheckt. Verder moeten deze sources van
bruikbaar commentaar zijn voorzien.
Svsteemontwikkelina met RUP
De door de CM opgestelde procedures voor het uitvoeren van bug fixes en pa-
rallel ontwikkelen, moeten door de ontwikkelaar nauwgezet gevolgd worden.
Alleen op die manier is te waarborgen dat SCM goed wordt uitgevoerd binnen
een project.
Een andere don't in dit rijtje heeft te maken met de nauwgezetheid die een ont-
wikkelaar zich aanmeet bij het werken met het SCM-systeem. Als een ontwik-
kelaar zich bijvoorbeeld slechts gedeeltelijk of zelfs helemaal niet aan de door
de CM opgestelde procedures voor in- en uitchecken van bestanden houdt, kan
dit op allerlei momenten problemen opleveren. Denk aan een niet werkende
component, die opgeleverd (ingecheckt) is door een ontwikkelaar en ervoor
zorgt dat bij integratie van de componenten - in daily build bijvoorbeeld - zich
een fout voordoet. Als de ontwikkelaar hierbij dan commentaar toevoegt als
'veranderingen aangebracht', moet helemaal opnieuw zoek gegaan worden
naar de veranderingen.
Het proces Change Management staat in het teken van het omgaan met veran-
deringen en wijzigingen. In een iteratief project weet je als ontwikkelaar dat
er wijzigingen optreden. De wereld staat niet stil tijdens de projectuitvoering,
dus zullen ook de eisen aan het systeem veranderen. Je zou deze veranderingen
kunnen negeren, maar dan weet je zeker dat het eindproduct niet voldoet aan
de eisen die de gebruikers hebben op het moment van opleveren. Je kunt er
natuurlijk beter in mee gaan, maar dan op een gecontroleerde manier: Change
Management.
Een change met impact heeft gevolgen voor de afspraken die met de gebrui-
kersorganisatie zijn gemaakt. Mogelijk moet er, om ruimte vrij te maken, an-
dere functionaliteit worden geschrapt. Deze kan dan in latere fases opgepakt
worden. Ook kan de change zelf worden uitgesteld en later worden geïmple-
menteerd.
Het volledige changeproces blijft binnen de scope van een project. Hier-
voor is het noodzakelijk dat de benodigde beslissingsbevoegdheid dan ook
binnen het project zit. De Change Control Board (CCB) hoeft alleen beslis-
singen te nemen met betrekking tot het project. Dit zal het geval zijn als het
project geen relaties heeft met operationele systemen of andere projecten.
e Change Management of een deel ervan wordt extern belegd in de vorm van
een externe Change Control Board. Dit zal nodig zijn als de impact van
changes buiten de scope van het project kan vallen.
Voor een ontwikkelaar maakt de keuze niet uit: belangrijk is het om te signa-
leren wanneer changes worden aangeboden enlof aan te geven wat de changes
gaan betekenen. Als ontwikkelaar moet je het uitgangspunt hanteren dat je
niet de verantwoordelijkheid en bevoegdheid hebt om changes goed te keuren.
Zorg er altijd voor dat de procedure gevolgd wordt. Niets is zo erg als een niet-
gedocumenteerde en goed ' afgetikte' change.
Als je merkt dat er op een project geen vastgestelde changeprocedure is, trek
dan aan de bel. Je hebt dan een major risk voor het project ontdekt. Het op-
pakken van dit risico zal altijd een projectmanagement of CCB taak zijn (die
vervolgens weer gedelegeerd kan zijn).
Van change requests zal een impactanalyse gemaakt worden op basis van kos-
ten, doorlooptijd,risico's en complexiteit. Op basis van de afgesproken criteria
waaraan changes moeten voldoen en hoe deze verder worden opgepakt zal het
change request worden ingepland en uitgevoerd. Een change zal dan leiden tot
een gewijzigd applicatiedeel, component, database-structuur et cetera. Dit zal
weer leiden tot een nieuwe (dee1)oplevering.
Wanneer een change verwerkt wordt, zal de gehele keten opnieuw doorlopen
worden. Requirements gaan op de schop, gevolgd door wellicht analyse en
design. Een test zal in ieder geval opgezet dan wel opnieuw uitgevoerd gaan
worden.
Wanneer een gebruiker, collega of medeprojectlid aan je bureau staat met al-
weer de zoveelste change, helpt het om hem of haar te verwijzen naar een
over.
Op het moment dat de procedure gevolgd wordt, kunnen de mensen die het
overzicht hebben de prioritering van de changes afwegen en eventuele verban-
den naar andere wensen leggen. Het gebruiken van dit soort procedures levert
stuurinformatie op: hoeveel changes hebben we nu eigenlijk voor onze kiezen
gehad (en waarom is dus de planning gewijzigd)? Met name is dit van belang
als wijzigingen eigenlijk toevoegingen zijn op datgene wat is afgesproken. Het
gevaar van ongecontroleerde uitbreiding - zogenoemde scope creep - ligt an-
ders op de loer.
Svsteemontwikkelina met RUP
De vraag die hier speelt is het moment waarop je fouten (bug fixes) gaat vast-
leggen: ben je vol in ontwikkeling en zijn er nog veel 'open eindjes' dan zal het
vastleggen van fouten niet zoveel toegevoegde waarde hebben. Fouten moeten
doorgegeven of vastgelegd worden indien ze buiten je scope liggen.
e tuning van activiteiten zoals bug fixing en verbeteringen ten behoeve van
performance en bruikbaarheid;
bereiken van overeenstemming dat de baselines compleet zijn en dat ze
consistent zijn met de evaluatiecriteria uit het Vision-document.
In de rest van dit hoofdstuk wordt niet de RUP-aanpak beschreven, maar een
aanpak gebaseerd op best practices, aangezien RUP hiervoor weinig handvat-
ten biedt in een situatie van maatwerkontwikkeling.
Bij het afsluiten van de Transition-fase of het bereiken van de Product Release
Milestone kan het product in productie genomen worden. Daarna start het
onderhoud. Dit kan betekenen dat een nieuwe Development-cyclus start voor
aanvullende of toevoegingen aan het product, maar het kan ook het startpunt
van releases zijn waarin slecht kleine aanpassingen worden gedaan.
Transition is een aparte fase waarvoor een apart plan nodig is. De fase start bij
het afsluiten van Construction met de Initia1 Operational Capability Milesto-
ne. Alle functionaliteit is dus ontwikkeld en een eventuele alpha-test is gehou-
den. Het is gewenst dat er al aandacht voor Transition is aan het begin van het
project, tijdens Inception. Dit borgt dat er op dat moment al wordt nagedacht
over bijvoorbeeld het betrekken van toekomstige gebruikers en beheerders in
het projectteam, om kennisoverdracht te vereenvoudigen. Bovendien kan zo
eenvoudig bereikt worden dat de eisen en wensen vanuit beheer betrokken
worden. Beheer is ten slotte een belangrijke stakeholder.
tion'. Dat betekent bij het realiseren van een commercieel softwarepakket dat s
er kopieën vervaardigd, verpakt en verkocht gaan worden, en dat het gebruik
valt buiten de scope van het ontwikkelproject. In de wereld van de maatwer-
kapplicatie betekent in productie dat de applicatie daadwerkelijk draait in een
exploitatieomgeving en gebruikt wordt door eindgebruikers. Net een stapje
verder dus, maar dat is wel de situatie die ons voor ogen staat. Gebruikelijk is
dat het ontwikkelproject in afgeslankte vorm nog korte tijd na in productie ne-
men ondersteuning verleent aan gebruikers en beheerorganisatie. Soms loopt
dat parallel met een nieuw ontwikkelproject voor een volgende release.
RUP is een proces voor software engineering. Het richt zich op het opleveren
van een applicatie en ondersteunende artefacts, maar niet op het implemente-
ren van een systeem, waarbij een systeem gezien mag worden als samenspel
tussen organisatie, processen en applicatie.
Bij het evalueren van deze aspecten moet gekeken worden naar alle partijen die
betrokken zijn bij het invoeren en exploiteren van de nieuwe applicatie. Ver-
wacht mag worden dat de implicaties voor de gebruikersafdeling het grootst
zijn, maar ook voor de beheerorganisatie kunnen aspecten van belang zijn.
punten op de i gezet moeten worden. Wat moet worden opgepakt door het
project en wat door de staande organisatie is afhankelijk van de afspraken
(verantwoordelijkheden 1bevoegdheden) met de organisatie.
Hieronder stippen we de verschillende aspecten kort aan, zodat jij als ontwik-
kelaar beseft dat er nog veel meer speelt dan het realiseren van software die
voldoet aan de Requirements.
CommercieICommunicatie
Onder dit hoofdaspect vallen: Marketing, Externe Communicatie, Imago,
Public Relations, Klantcontacten, Partners. Aandacht voor dit aspect is zeer
belangrijk als het project een product oplevert voor de commerciële markt of
als de gebruikersgroep buiten de eigen organisatie valt. Dit komt bijvoorbeeld
voor bij een touroperator die een extranet-applicatieheeft ontwikkeld ten be-
hoeve van reisboekingen door reisagenten. Die heeft er belang bij om het ge-
bruik van de applicatie te bevorderen, maar blijft eigenaar van de applicatie.
Organisatie en Personeel
Welke consequenties heeft de ingebruikname van de applicatie op organisatie
en personeel? Voor de gebruikersorganisatie kan het betekenen dat personen
moeten afvloeien of juist moeten worden aangetrokken, of dat huidig perso-
neel moet worden opgeleid of bijgeschoold. We zien direct dat bepaalde zaken
veel verdergaande implicaties hebben dan door een softwareontwikkelteam
getrokken kan worden. Dergelijke zaken zouden al tijdens de Inception in de
Business Case naar voren moeten zijn gekomen.
14 Transition
Voor beheer moet bepaald worden hoeveel mensen ermee gaan werken en
welke competenties zij dienen te bezitten. Wie komen hiervoor in aanmerking,
wie zijn beschikbaar, waar in de beheerorganisatie wordt de verantwoordelijk-
heid belegd et cetera. Een opleidingseis die vanuit RUP naar voren komt is dat
medewerkers die verantwoordelijk worden voor het applicatiebeheer kennis
hebben van RUP en UML.
Administratieve Organisatie
Met name op de gebruikersafdeling kunnen administratieve procedures en
processen op de schop gaan. Nieuwe processen moeten ontworpen, vastgelegd
en onderwezen worden.
Misschien zijn er externe partijen (leveranciers, klanten) waarmee op een an-
dere manier moet worden samengewerkt, bijvoorbeeld via internet.
Financiën
Bijna alle punten, genoemd bij de andere aspecten, hebben ook een financiële
component. Maar die is zeker aanwezig bij tarifering (doorbelasting van het
Systeemontwikkeling met RUP
rmatie
Onder dit hoofdaspect vallen: interne communicatie, productinformatie, pro-
jectinformatie, rapportage en verantwoording, mediabeleid, interfaces met an-
dere systemen, informatiehuishouding, externe databases. Een noodzakelijke
factor voor succesvol gebruik door de gebruikersafdeling is draagvlak. Daar-
aan moet al tijdens de loop van het project worden gewerkt door betrokken-
heid te creëren: het bedrijfsjournaal, het intranet, een nieuwsbrief zijn kanalen
waardoor het project naar buiten kan treden.
Juridisch
Zeker als de applicatie impact heeft op doelgroepen buiten het bedrijf, dan
spelen zaken als contractbesprekingen, bezwaarprocedures, wet- en regelge-
ving, jurisprudentie. Ook het eigendom van de applicatie moet goed geregeld
worden zeker als er tijdens ontwikkelen delen zijn uitbesteed aan subcontrac-
tanten of als er componenten van derden worden gebruikt. Ook als het beheer
wordt uitbesteed aan een externe partij, dan zijn er contractbesprekingen over
een SLA.
Technologie
Onder dit hoofdaspect vallen zaken als infrastructuur, netwerken, hardware,
hulpmiddelen en inrichting werkplek. Allereerst geldt dat voor de gebruiker-
somgeving, die wellicht anders ingericht moet worden. Maar alle nieuwe tech-
nologische componenten moeten ook beheerd worden. Veelal in dezelfde be-
heerorganisatie die ook het beheer van de applicatie op zich neemt. De beheer-
organisatie moet de (financiële) middelen krijgen om de applicatie te beheren.
Vaak is de koppeling tussen applicatie en infrastructuur niet een-op-een, maar
zullen in dezelfde infrastructuur verschillende applicaties geëxploiteerd wor-
den. Belangrijk is dat een beheerorganisatie dient te beschikken over een vol-
ledige OTAP-omgeving (Ontwikkel, Test, Acceptatie, Productie). Tooling is
een ander onderwerp waar afspraken over gemaakt dienen te worden. Vaak is
er vanuit het RUP-project gewerkt met standaard tools. De artefacts die hierin
zijn opgesteld kunnen makkelijker worden overgenomen indien de beheerpar-
tij dezelfde tools hanteert. Licenties voor deze tools dienen te worden geregeld,
evenals voldoende werkplekken met de juiste infrastructuur.
uisvesting
Onder dit hoofdaspect vallen vestigingsbeleid, geografische spreiding, huis-
vesting, thuiswerken, facilitaire dienst. Allemaal onderwerpen met impact op
de lange-termijn. Als er door het invoeren van de applicatie wijzigingen nodig
zijn op deze onderwerpen is het zaak dat tijdig aan te kaarten.
14 Transition
De veronderstelling daarbij is dat het project het initiatief neemt zowel richting
gebruikersorganisatie als richting beheer. In de praktijk kan dat anders liggen
zoals hiervoor geschetst.
Een belangrijke activiteit in deze fase is het Project Acceptance Review. Dit
is een formeel review van het projectteam en een representatieve vertegen-
woordiger van de gebruikersorganisatie. Door middel van dit review verifi-
eert de gebruiker of het product en de ondersteunende documentatie door het
project opgeleverd in overeenstemming is met de doelen uit het beschreven in
het Software Development Plan. Voor de ontwikkelaar gaat het erom in deze
periode aan te tonen dat goede kwaliteit is geleverd. De ontwikkelaars die in
deze fase nog participeren zien het accent verschuiven van design, testen en
implementeren naar afmaken van documentatie. Soms kan de ontwikkelaar
een rol krijgen bij het instrueren van toekomstige gebruikers of het verzorgen
van trainingen aan gebruikers en beheerders.
Activiteiten door
Doelstelling voor beheer tijdens de Transition is een goed beeld te krijgen van
de over te nemen applicatie en het maken van afspraken over de dienstverle-
ning. De beheerorganisatie moet daarvoor de volgende activiteiten uitvoeren:
De RUP-documentatie is een zeer belangrijke bron van gegevens voor het be-
heerteam in de Transition-fase. In elk geval bekijken de toekomstig beheerders
de volgende artefacts:
De activiteiten van beheer tijdens deze overdrachtsfase worden vanuit het be-
heerperspectief vastgelegd. Afhankelijk van de situatie in de organisatie kan
dit een onderdeel zijn van het overkoepelend projectplan voor de fase Transiti-
on. In elk geval zullen de datums afgestemd moeten zijn met dat projectplan.
Acceptatieforma
Het formulier waarop de beheergroep aangeeft dat zij akkoord met hetgeen is
opgeleverd en in staat zijn om het beheer correct uit te kunnen voeren.
Tot slot: In het SQP wordt ook vastgelegd of onderhoud met dezelfde (RUP)
tools zal plaatsvinden als de initiële ontwikkeling. Dat lijkt voor de hand te lig-
gen in een organisatie die ontwikkeling en beheer in eigen hand houdt, maar
bij uitbesteding ligt hier echt een beslispunt. En hangt er een kostenplaatje
aan!
In dit hoofdstuk behandelen we wat algemene aspecten en achtergronden van
beheer. Vervolgenswordt aangegeven voor welke soorten van beheer RUP een
interessant proces kan zijn. We belichten de ZTZL-indeling die vaak gebruikt
wordt voor het inrichten van processen in een beheerorganisatie en kijken
naar de overlap en wederzijdse aanvulling tussen RUP en ZTZL. Ook wordt
kort stilgestaan bij ASL, een relatief nieuwe methode voor beheer. We sluiten
af met een paragraaf die aangeeft op welke wijze je als ontwikkelaar tijdens
de initiële ontwikkeling aandacht kunt besteden aan beheer.
Als een applicatie ontwikkeld is, komt hij in een volgend stadium van zijn
levenscyclus: die van exploitatie en beheer. Exploitatie is het operationeel in
de lucht houden met activiteiten als backup en recovery, monitoren van de
werking en analyseren van het gedrag. Beheer richt zich op het onderhoud van
de applicatie. Daarbij kan onderscheid gemaakt worden tussen:
De kosten die gemoeid zijn met het operationeel houden van de applicatie (ap-
plication management) zijn substantieel. Naar schatting gaat het om 80% van
alle kosten gedurende de levenscyclus van een applicatie.
Gebruikersorganisaties zijn zich er steeds meer van bewust dat beheer een
belangrijke rol vervult in de levenscyclus en vragen een zo efficiënt en effectief
mogelijk onderhoud tegen de laagst mogelijke kosten. Tijdens het ontwikkel-
traject moet al serieus rekening gehouden worden met de eisen ten aanzien
van beheer.
Vaak wordt het beheer van de applicatie door een eigen beheerorganisatie ver-
richt. Er zijn echter ook externe partijen die het beheer van applicaties verzor-
gen, veelal in een speciaal AMSC (Applicadon Management Service Center).
Dergelijke aanbieders van beheer moeten scherp zijn op hun proces om hun
diensten concurrerend te kunnen blijven leveren. Standaardisatie van de werk-
wijze en documentatie zijn belangrijke mogelijkheden voor kostenreductie.
Beheer van productiesystemen houdt ook in dat er breder moet worden geke-
ken dan de initieel ontwikkelde applicatie. De gehele infrastructuur staat ten
dienste van de organisatie en storingen hieraan kunnen vergaande gevolgen
hebben. Het wijzigen van, op het eerste oog, onbelangrijke configuratiepara-
meters kan tot gevolg hebben dat applicatieonderdelen niet meer functioneren.
Hier is een belangrijke rol weggelegd voor de Change Manager, die op de
hoogte dient te zijn van alle wijzigingen in het productiedomein en na een ge-
degen impactanalyse goedkeuring geeft voor het doorvoeren van de wijziging.
15 Beheer
Het niveau van dienstverlening wordt vastgelegd in een Service Level Agree-
ment (SLA). Deze overeenkomst wordt opgesteld tijdens de transitie naar de
beheerorganisatie en bevat afspraken met de gebruikersorganisatie, veelal ei-
genaar van de applicatie. Zie ook het hoofdstuk Transition.
Het SQP (Service Quality Plan), ook een artefact gemaakt tijdens de Transi-
tion-fase, is de invulling van de in het SLA vastgelegde afspraken. Hierin is
in detail beschreven hoe de verschillende processen worden uitgevoerd en wat
de werkafspraken zijn, zoals betreffende reactietijden voor storingen. Activi-
teiten en processen die worden beschreven in het SQP zijn de ITIL-processen:
Service Level Management, Incident Management, Problem Management,
Change Management, Availability Management, Configuration Management,
Security Management en Capacity Management.
Zie paragraaf RUP en ITIL.
Er zijn verschillende soorten beheer. Naast het doorvoeren van kleine correc-
tieve wijzigingen om de applicatie draaiende te houden, worden adaptieve wij-
zigingen uitgevoerd om nieuwe functionaliteit toe te voegen. Komt het voor dat
grote stukken functionaliteit worden bijgebouwd, dan kan ook gedacht worden
aan het inrichten van een nieuw ontwikkelproject. Wijzigingen die meer dan
een aantal nader vast te stellen uren gaan kosten, zullen projectmatig opgepakt
worden. Zo'n project krijgt het karakter van (ver)nieuwbouw en daarmee van
een normaal systeemontwikkelprojecten verliest dan de specifieke invalshoek
van hetbeheer. In overleg met de klant wordt zo'n bovengrens voor directe
afhandeling door de beheerorganisatie vastgelegd in de SLA.
Delen van beheer kunnen uitgevoerd worden door verschillende partijen, zoals
de gebruikersorganisatie zelf (vaak functioneel beheer), een eigen beheerafde-
ling bij de gebruikende organisatie (technisch applicatiebeheer), of de moeder-
of zusterorganisatie voor de exploitatie en het technisch beheer.
De organisatie kan ook kiezen voor het outsourcen van beheer naar een on-
afhankelijke commerciële partij, die het totale beheer en exploitatie van de
applicatie, of delen daarvan (hybride model) kan verzorgen.
HTIL en RUP
Configuration Management
Voor applicatiebeheer omvat dit het managen en registreren van de software-
versies en artefacts, maar ook van infrastructuur- en middlewarecomponenten.
Deze laatste twee onderdelen worden als randvoorwaarden in RUP vastgelegd
in het Software Architecture Document. Later, in de operationele fase, zijn zij
een onderdeel van de configuratie. Binnen de ontwikkeling van veranderingen
in de applicaties kan dus wel gebruik gemaakt worden van werkwijzen uit
RUP, die zelfs een eigen discipline Configuratie Management onderkent. Daar
wordt namelijk beschreven hoe voortdurend de iteratieve wijzigingen in de
configuratie worden bijgehouden en gemanaged. Bij opleveren kan dit naad-
loos in de beheerorganisatie opgepakt en voortgezet worden.
Deze processen kunnen putten uit de artefacts die vanuit RUP worden opge-
leverd. Vooral bij het analyseren van een incident, om te bepalen of het daad-
werkelijk om een verstoring van de dienstverlening gaat, wordt gekeken of de
applicatie nog voldoet aan de opgestelde requirements. Traceability van Re-
quirements, ondersteund door RUP, is hierbij een belangrijk voordeel. Afhan-
kelijk hiervan wordt bepaald of er mogelijkerwijs sprake is van een 'change'.
In dat geval gaat de melding over naar het Change-proces.
De afhandeling van wijzigingen op applicaties kan voor wat betreft het ont-
werpen en realiseren van deze wijziging uitgevoerd worden door gebruik te
maken van werkwijzen zoals in RUP beschreven. Deze aanpak wordt beschre-
ven in de Beheer Development Case.
15 Beheer
Een andere, relatief nieuwe methode voor beheer die steeds vaker wordt ge-
bruikt voor het inrichten van processen voor applicatiebeheer is ASL. Een
Systeemontwikkeling met RUP
belangrijke ontwikkeling hierbij is dat niet alleen aandacht wordt besteed aan
operationele en tactische processen, maar ook aan strategische overwegingen.
Innovatie van applicaties en applicatiebeheerorganisaties zijn de sleutel tot
succes van informatie-intensieveorganisaties.
Naast het framework omvat ASL een uniforme woordenlijst. Door het gebruik
daarvan kunnen bij het applications management betrokken partijen beter met
elkaar communiceren.
ASL is een methodiek uit het publieke domein en streeft het doel na niet alleen
binnen één organisatie, maar ook als uniformerende factor tussen organisaties.
ASL sluit ondermeer aan op ITIL, dat zich met name focust op het technisch
beheer. ASL bestaat uit een framework en een library van best practices op
gebied van applicatiebeheer (de partij die de functionaliteit en werking van de
applicatie onderhoudt). ASL beoogt de bedrijfsprocessen optimaal te onder-
steunen met informatiesystemen gedurende de gehele levenscyclus van deze
bedrijfsprocessen.
Al tijdens het ontwikkelen is het van belang om te weten wat de gevolgen van
de gekozen oplossingsrichting zijn voor het onderhoud. Natuurlijk is het leuk
om iets ingewikkelds heel goed uit te werken in design en code, maar als de
documentatie ingewikkeld is en aanpassen ruime studie en kennis vereist, is
het voor de beheerder extra risicovol om deze software in beheer te nemen. Het
kost dan immers veel tijd om het complexe design en de code te begrijpen en
de kans op fouten en extra aanpassingen neemt toe. Dit geldt des te meer als
de documentatie summier is of niet consistent is (telkens een andere vorm of
andere modellen). Vanaf de aanvang moet dus duidelijk zijn welke mate van
documentatie gewenst is en hoe deze later gebruikt gaat worden.
Daarom moet het tijdens een ontwikkeltraject duidelijk zijn wat de consequen-
ties van een bepaalde design- of architectuurkeuze voor beheer zijn. Houd
daarbij niet alleen rekening met het direct in productie brengen en operatio-
neel houden, maar ook met toekomstige wijzigingen van de applicatie.
Tijdens de ontwikkeling van een applicatie moet beheer als belangrijke stake-
holder worden beschouwd, die zijn Requirements inbrengt. Acceptatiecriteria
vanuit beheer kunnen de volgende punten omvatten:
Daarnaast hebben beheerders vaak niet dezelfde kennis en ervaring met be-
trekking tot de werkwijzen en documentatie vanuit het ontwikkelproject: goe-
de overdrachtltransitieis daarmee essentieel voor het beheer.
Het betrekken van beheer bij de ontwikkeling leidt tot een win-winsituatie.
Zowel het project als de beheerorganisatie hebben er baat bij. Immers het suc-
cesvol uitrollen en exploiteren van een applicatie straalt af op beide groepen.
We moeten beseffen dat de kosten van beheer verreweg het grootste van de
kosten uitmaken in de lifecycle van een applicatie; de ontwikkelkosten bedra-
gen veelal niet meer dan 20% van de kosten van de totale lifecycle.
15 Beheer
Vaak zie je dat in projecten allereerst wordt nagedacht over de eisen en wen-
sen van een nieuw stukje functionaliteit. De nadruk ligt logischerwijs op de
nieuwe functionaliteit en het zoeken naar een goede oplossing. Zelfs bij het
opstellen van de planning wordt veelal alleen gekeken naar de nieuwe functio-
naliteit en de risico's voor het ontwikkelen daarvan. Als beheerder of designer
kun je dan een grote bijdrage leveren door gericht met een aantal aspecten te
komen, concreet en meetbaar, die zorgen dat tijdens design, bouw en testen
ook aandacht besteed wordt aan de beheeraspecten.
15 Beheer
Als er nog geen acceptatiecriteria zijn, is het van belang ervaringen uit het
verleden te analyseren en daaruit een aantal aanbevelingen te formuleren die
de mogelijkheden van een succesvol beheer bevorderen.
Dit laatste aspect geeft ook aan dat er nauw moet worden samengewerkt, want
na de overdracht is de beheerorganisatie verantwoordelijk voor het geheel.
Zorg voor een duidelijke kennisoverdracht, niet alleen in de vorm van model-
len en documentatie, maar door geregeld overleg en betrokkenheid bij design
en implementatie. Pas wel op voor de valkuil dat het overleg tussen ontwik-
kelaars en beheerders de aanwezigheid van complete en consistente documen-
tatie kan vervangen.
Er is een aantal vanuit het perspectief van het beheer belangrijke onderwerpen.
Ten aanzien van de onderhoudbaarheid van het ontwerp zijn dat de volgende.
aliteit. Een oordeel over de kwaliteit ontstaat door het bekijken van de
Risk List en van de testresultaten.
wellicht minder creatief werk, maar moet in staat zijn niet alleen te denken
vanuit de techniek, maar ook vanuit de gebruikers en beheerders van de ap-
plicatie. Hij is dus veelzijdig en moet alle facetten van het engineering vak
begrijpen.
RUP-fasen zijn gericht op het bereiken van een mijlpaal. Na het bereiken van
de mijlpaal krijgt een aantal activiteiten een ander accent. Zo zullen in de
Elaboration-fase eerst de risicovolle zaken opgepakt worden en vervolgens de
zaken die belangrijk zijn voor een stabiele architectuur. In de Construction-
fase ligt de nadruk op 'het maken van meters' en het completeren van alle
artefacts.
Ook kan men twee nieuwe fasen onderkennen: Production (of Run) en Retire-
ment (of Run down). Production is gericht op het onderhouden en operationeel
houden van de applicatie, de laatste fase op het afbouwen van de applicatie.
Binnen dit boek hebben we EUP niet gevolgd, omdat het nog geen breed geac-
cepteerde standaard is. Toch zijn de algemene aspecten bruikbaar bij applica-
tiebeheer. Zo is de discipline Operations & Support hier specifiek gericht op
activiteiten die in een beheerproject worden uitgevoerd. EUP haalt een aantal
activiteiten uit de overige disciplines naar Operations & Support. Hetzelfde
resultaat kan bereikt worden door het RUP proces aan te passen, zoals we
beschreven hebben in de paragraaf Beheer Development Case.
Welke overwegingen spelen een rol om voor RUP te kiezen tijdens de beheer-
fase? We sommen hieronder enkele aspecten op.
Er is in ieder geval een methodische aanpak nodig in beheer. RUP als in-
dustriestandaard komt hiervoor in aanmerking.
Eén aanpaktstandaardproces voor zowel de ontwikkel- als de beheerorga-
nisatie biedt verschillende voordelen. Je hanteert hetzelfde begrippenka-
der, spreekt dezelfde taal. Zeker als de organisatie grensoverschrijdend is,
is een internationale standaard als RUP een goede keuze.
Standaardisatie leidt tot kostenreductie. Opleidingen kunnen vervaardigd
worden voor zowel ontwikkelaars als beheerders. Tools worden gemeen-
schappelijk toegepast. Dat biedt schaalvoordelen bij aanschaf.
De organisatie kan flexibeler zijn, omdat ontwikkelaars en beheerders be-
ter uitwisselbaar worden.
Communicatie en derhalve overdracht wordt vereenvoudigd, als de opleve-
ring ook vanuit een RUP project komt.
Als een applicatie volgens RUP ontwikkeld is, ligt het voor de hand deze ook
op basis van RUP in onderhoud te nemen. Hier beschrijven we welke criteria
een rol spelen om, kijkend naar de aard van de werkzaamheden, daadwerkelijk
voor RUP te kiezen:
Herbouw of zeer grote wijzigingen (>50% bij herbouw) vallen buiten be-
heer en zullen opnieuw met RUP projectmatig worden uitgevoerd, als
voortzetting van de initiële aanpak.
Grote wijzigingen die wel door de beheergroep worden uitgevoerd, worden
aangepakt conform de RUP Development Case voor grote wijzigingen.
Systeemontwikkeling met RUP
Bij kleine wijzigingen, als er maar één iteratie is, kan RUP ook worden
toegepast, maar dan volgens een uitgeklede Development Case, de Beheer
Development Case.
Indien de ontwikkeling van een applicatie niet met RUP heeft plaatsgevonden,
kan op basis van een aantal criteria de beslissing worden genomen om het
beheer met RUP uit te voeren.
ken, biedt het werken met RUP als proces niet de optimale ondersteu-
ning. Maar principes als 'risicovolle zaken snel aanpakken, iteratief
werken en aandacht voor requirements' blijven natuurlijk overeind.
Als besloten wordt de deliverables te migreren, dan is daarvoor een aantal
standaardtransformatieregels bekend. Die tonen we in tabel 16.1. Entity
Relationship Diagrammen kunnen eenvoudig naar Class Diagrams worden
omgezet, maar in het algemeen blijft het een arbeidsintensieve aanpak. Be-
zint eer ge begint!
ens exploitatie?
Beheer kent ook een dagelijkse variant: het operationeel houden van de ap-
plicatie. Denk daarbij aan: backups, recovery, het regelen van autorisaties, het
monitoren van de performance en van servers, het netwerk en de computer-
ruimte, het voeren van een servicedesk, beantwoorden van gebruikersvragen
en bieden van eerstelijnsondersteuning aan de klantorganisatie. Hiervoor is
RUP niet geschikt. De verschillende ITIL-processen zijn hiervoor beter ge-
schikt.
Systeemontwikkeling met RUP
Als besloten is om RUP ook voor het beheerproces te gebruiken, zal nog een
aanpassing moeten plaatsvinden gericht op de specifieke beheeromgeving.
Aanpassingen met betrekking tot het proces (bijvoorbeeld wijzigingen aan
fasen, disciplines, artefacts en activiteiten) zijn terug te vinden in de 'Beheer
Development Case'. Een Development Case is een specifieke invulling van het
RUP-proces (Zie het hoofdstuk Projectstructuur).
Het gebruik van een Development Case wordt weleens toegepast in een Ap-
plication Management Service Center (AMSC). Een AMSC is een gespeciali-
seerd centrum voor outsourcing en beheer. Het biedt standaard ingerichte pro-
cessen en een omgeving met infrastructuur voor applicatiemanagement. Door
deze gestandaardiseerde manier van werken is het mogelijk om sneller, beter
en effectiever het beheer uit te voeren. Veel artefacts uit de Beheer Develop-
ment Case, met name voor de ondersteunende disciplines, zijn standaard in het
AMSC aanwezig en worden over de verschillende projecten heen hergebruikt.
Door standaardisatie van proces en omgeving op deze manier wordt het dus
mogelijk om een standaard Development Case tigebruiken.
Een belangrijke input voor het opstellen van een Beheer Development Case is
de omvang en aard van de uit te voeren wijziging. Deze bepaalt of een artifact
wordt opgenomen in de Development Case. Als een kleine wijziging in Use
Cases geen effect heeft op het businessmodel, de architectuur of het design,
dan kunnen de artefacts uit de disciplines Business Modeling, Requirements
en Analysis & Design buiten de Beheer Development Case blijven. Ook zal bij
het opstellen van de Beheer Development Case voor een groot of klein project
voor iedere discipline gekozen moeten worden voor de beheer relevante acti-
viteiten en artefacts. De afspraken die met de klant in het SLA zijn vastgelegd
zullen hierbij een rol spelen. We zien dus dat een aantal Development Cases
ontwikkeld kunnen worden, samenhangend met de aard en omvang van een
wijziging en met de onderliggende SLA. Dat is geheel conform RUP, dat stelt
dat bij ieder project een eigen Development Case moet worden opgesteld. In
beheer zal een aantal typen Development Cases ontstaan, die vervolgens her-
gebruikt kunnen worden bij soortgelijke beheeractiviteiten.
Het aantal artefacts voor kleine beheerprojecten blijft veelal hetzelfde; ze wor-
den aangepast, uitgebreid of gewijzigd en bij nieuwe artefact verschilt de in-
vulling in detaillering van de softwareontwikkeling.In kleine beheerprojecten
is het ook vaak zo dat de Developer meerdere RUP-rollen vertegenwoordigt.
Bij grotere projecten zal vanwege de omvang en het risico het aantal artefacts
uitgebreider zijn en zullen meerdere personen gezamenlijk de verschillende
rollen invullen. De continuïteit van de dienstverlening mag nooit afhankelijk
zijn van één persoon.
Door een project wordt vaak een groot aantal artefacts vervaardigd. Zoals al
vanouds bekend kunnen die worden verdeeld in projectdocumentatie en sy-
steemdocumentatie. De projectdocumentatie is primair bedoeld om het pro-
ject efficiënt te runnen en te beheersen. De systeemdocumentatie beschrijft
primair de opgeleverde applicatie en komt dus in aanmerking voor onderhoud.
Van belang voor beheer zijn:
In figuur 16.3 beschrijven we een Development Case voor een grote onder-
houdsslag in Beheer. We zien verplichte (v) en optionele (o) artefacts. In de
discipline Business Modeling hebben we geen artefacts onderkend. Sowieso
16 RUP als proces in beheer
Business
Modelling
Requirements
Analysis &
Design
- Implementation - Implementation
I I
- Implementation
Implementation
-
Model (v)
Build (v) - Modal (v)
Build (v)
MOdd(V)
- Build (v)
Test
Deployment
Change Mgt
Project Mgt
Environment
We gaan uit van een releasematige aanpak. Dat wil zeggen dat een bundel van
wijzigingen gezamenlijk wordt opgeleverd en uitgerold naar de gebruikersor-
ganisatie. Hiervoor wordt door het onderhoudsteam volgens de in het Service
Quality Plan beschreven werkwijze een iteratieplan opgesteld.
Een beheerder vervult vaak meerdere rollen en heeft soms alle RUP-petten op.
Dit maakt een beheerrol uitdagend en veeleisend. Beheer heeft de verantwoor-
ding om de impact van wijzigingen te toetsen aan de visie en het overall design
van de applicatie. Daaruit vloeit voort dat men adviseert over toekomstige ont-
wikkelingen t.a.v. de applicatie. Beheer raakt ook alle disciplines.
Beheer houdt rekening met een applicatie in productie: wat zijn bijvoorbeeld
consequentie voor de productiedatabase, opleidingen voor gebruikers en hand-
leidingen. Als beheerder in de rol van Analyst of Designer dient je blik dus
erg ruim te zijn.
Bij correctief beheer verloopt het via het Problem- en Changeproces. Er wordt
vanuit Incident Management een analyse gemaakt, waaruit blijkt dat er sprake
van een 'problem', gedefinieerd als: significant groot incident, of clustering
van incidenten met één onderliggende oorzaak. De onderliggende oorzaak van
een probleem is te wijten aan een discrepantie tussen de requirements van het
systeem, zoals ze zijn vastgelegd in de Use Cases en de Supplementary Specs
en de gerealiseerde applicatie.
Indien wordt geconstateerd dat een gemeld incident leidt tot een aanpassing
van de functionele specificaties, betekent dit een functionele aanpassing die
doorgaans als een additionele wijziging (valt dus buiten het correctieve onder-
houd) wordt aangepakt.
Er zijn nog meer triggers mogelijk, ook vanuit de beheerorganisatie zelf, die
op een vergelijkbare manier als boven tot een Wijzigingsvoorstel leiden. Denk
hierbij aan perfectief onderhoud of substantiële veranderingen in de omgeving,
zoals een Windows-upgrade.
RUP gaat er van uit dat disciplines samenwerken en dat de werkwijze iteratief a
is. Dat staat op gespannen voet met een werkwijze waarin de ene partij, als op-
drachtgever, eerst complete functionele specificaties oplevert en de andere par-
tij, als opdrachtnemer, daarvoor een offerte uitbrengt en vervolgens conform
specificatiesrealiseert en oplevert. Maar zo'n lineaire werkwijze is wel in RUP
in te passen en kan uitstekend geschikt zijn als de Requirements inderdaad in
één keer vast te stellen zijn en er geen architecturele risico's zijn. Kortom: bij
wijzigingen van bescheiden omvang.
Systeemontwikkeling met RUP
Eerder hebben we beschreven dat een van de redenen om ook in een beheer-
organisatie met RUP te werken, ligt in de standaardisatie en uitwisselbaarheid
van werkwijzen en tools. Daarbij hebben we natuurlijk het applicatieonder-
houd tijdens beheer voor ogen. Omdat beheer (inclusief exploitatie) breder is
dan applicatieonderhoud, is er vaak een toolset, die afgestemd is op de verza-
meling ITIL-processen die ondersteund moet worden.
Het is een uitdaging om die tools op een goede manier te laten samenwerken
en uitwisselen met ontwikkeltools. In deze paragraaf bespreken we een aantal
aspecten:
configuratiemanagement of versiebeheer;
management van incidenten en wijzigingsverzoeken;
onderhouden van requirements.
databaseontwerp;
functioneel ontwerp materiegebied;
analyse en design;
e Lotus Notes en webapplicaties.
In de lijn werk je met gelijkgestemde collega's aan zaken die continuïteit be-
hoeven. IT-Beheerafdelingen vinden we ook in de lijn. Werk, zeker werk rond