Een korte beschrijving van enkele door mij gevolgde cursussen aan de Open Universiteit. De beschrijvingen zijn afkomstig uit de OU studiegids.

Architectuur van computernetwerken

De Engelstalige cursus Architecturen van computernetwerken geeft een top-downbenadering van het fenomeen computernetwerken. De cursus begint met de protocollen die een rol spelen op applicatieniveau (HTTP, FTP, SMTP, DNS en sockets) en behandelt dan opeenvolgend de rest van de protocolstapel. Vanwege deze aanpak wordt al vroeg in de cursus de nadruk gelegd op de uitgangspunten en samenstelling van de applicatieprogrammeerinterface (API) van een computernetwerk. Het bijbehorende practicum laat u hiermee oefenen, waardoor u een gevoel krijgt voor de rol die protocollen en netwerkconcepten in de praktijk kunnen spelen. Dit geldt ook voor de uitgangspunten (paradigma's) die achter een protocol schuil gaan. Bezig zijn met computernetwerken is veel meer (en mogelijk veel interessanter) dan de bestudering van de standaards die protocolberichten en het gedrag van protocollen beschrijven. Als voorbeeld volgt de cursus de opbouw van het internet (TCP/IP) om de principes en achtergronden van computernetwerken te illustreren. Hiermee krijgt u ook praktische kennis van deze architectuur. Enkele extra aandachtspunten in deze cursus zijn de volgende.
- Draadloze en mobiele netwerken met daarbij een grondige bespreking van WiFi, mobile IP en GSM.
- In totaal worden er nu 12 practicumsessies voorzien: 6 studieopdrachten en 6 practica met de protocolanalyser Wireshark. Uit dit aanbod kunt u een keuze maken op basis van uw interesse. U kiest hieruit twee, met elkaar samenhangende opdrachten waarop u een terugkoppeling ontvangt.
- Aandacht voor peer-to-peernetwerken, beveiliging van draadloze netwerken, DNS en dergelijke.
Software security

De cursus gaat over de beveiliging van software, waarbij technische, organisatorische en ethische aspecten worden belicht. Het doel van software security is ervoor te zorgen dat software vrij is van beveiligingslekken en correct blijft werken, ook als een kwaadwillende hacker deze probeert te misbruiken. Centraal staat de filosofie dat beveiliging niet achteraf gerepareerd moet worden, maar dat software zodanig ontwikkeld wordt dat problemen met beveiliging voorkomen worden.
In de cursus maakt u kennis met kwetsbaarheden zoals SQL-injectie, XSS en buffer overflows. U leert hoe u deze kwetsbaarheden kunt voorkomen tijdens het softwareontwikkelproces aan de hand van ontwerpprincipes, risicomanagement, risicoanalyse, statische codeanalyse en security-testen. De cursus besteedt ook aandacht aan security-aspecten van programmeertalen en ethische aspecten van software security. Naast het bestuderen van theorie voert u diverse praktische opdrachten uit.
De cursus bestaat uit achttien leereenheden, gegroepeerd in vijf blokken.
Het eerste blok bevat een introductie tot software security. Hierin wordt een definitie van software security gegeven, worden basisbegrippen toegelicht en wordt uitgelegd hoe software security geÔntegreerd kan worden in alle fasen van de softwareontwikkeling.
Het tweede blok behandelt een aantal veel voorkomende kwetsbaarheden in software. Er is aandacht voor beveiligingsproblemen rondom validatie van invoer en uitvoer van gegevens, die kunnen leiden tot SQL-injectie en XSS. Verder is er aandacht voor buffer overflows en exception handling. Het blok wordt afgerond met een praktische opdracht waarin u kwetsbaarheden in een webapplicatie opspoort en aangeeft welke mogelijkheden tot misbruik hierdoor mogelijk zijn.
Het derde blok is gewijd aan activiteiten die uitgevoerd worden in verschillende fasen van het softwareontwikkelproces om beveiligde software te creŽren. Er is aandacht voor ontwerpprincipes, risicomanagement, risicoanalyse, statische codeanalyse en security-testen. Het blok bevat twee praktische opdrachten: het uitvoeren van een architectural risk analysis op een webapplicatie en het uitvoeren van een statische codeanalyse met behulp van een moderne tool.
In het vierde blok komen security-aspecten van programmeertalen en programmeerplatformen aan de orde komen. Er is aandacht voor safety van programmeertalen en diverse vormen van access control zoals sandboxing en informatieflowanalyse. Het blok wordt afgerond met een praktische opdracht waarin u access control toevoegt aan een webapplicatie.
In het vijfde blok staan ethische aspecten van software security centraal. Er wordt aandacht besteed aan ethiek van hacking, het publiceren over vulnerabilities en ethiek van security in onderwijs en onderzoek. Het blok wordt afgerond met een opdracht waarin u een ethisch vraagstuk verkent in een case studie.
Requirements Engineering

De eerste stap bij het ontwerpen van een nieuw systeem, of bij een verandering van een huidig systeem, is het vaststellen van de requirements, het analyseren van de requirements en het toedelen van requirements aan hardware, software of mensen. Deze cursus biedt een overzicht van dat gebied van requirements engineering, en geeft een praktische invulling in de vorm van de KAOS-methode.
Het eerste blok van de cursus bevat een breed overzicht van het vakgebied. U krijgt hierdoor inzicht in de huidige stand van zaken, maar zonder actieve beheersing van alle genoemde methoden en technieken. Onderwerpen die uitgebreid aan bod komen, zijn requirements evaluation, specification en documentation, en het concept goals (doelen): het is mogelijk om de requirements van een systeem op te stellen door te inventariseren welke doelen het systeem heeft en door die doelen te verfijnen en te analyseren.
In het tweede blok van de cursus wordt een systematische en met een tool ondersteunde methode behandeld voor goal-oriented requirements engineering (de KAOS-methode). Hierbij wordt vanuit de systeemdoelen op het hoogste niveau een goal-tree opgebouwd, waaruit min of meer systematisch ook een domeinmodel is af te leiden. Een agentmodel belegt de verantwoordelijkheden voor het verwezenlijken van elk doel (agents kunnen zowel mensen als devices als stukken software zijn); een operatiemodel beschrijft operaties die de doelen verwezenlijken in termen van pre- en postcondities en triggers.
De methode ondersteunt het opstellen van consistente en volledige requirements; het gebruik wordt ondersteund door een tool. Uit de modellen kan (semi)automatisch een requirements-document worden afgeleid. De requirements beschrijven zowel functionele als niet-functionele aspecten. Er wordt specifiek aandacht besteed aan risicoanalyse.
Het derde blok behandelt het semiformeel redeneren over requirements.
Webapplicaties: de clientkant

Applicaties aan de clientkant zijn lange tijd min of meer genegeerd binnen het vakgebied informatica. Dat heeft vooral een historische oorzaak: webapplicaties speelden zich op de server af, en werken met HTML en CSS was iets voor de webdesigner, niet voor de applicatieontwikkelaar.
Maar webapplicaties zijn van aard veranderd. De logica bevindt zich steeds vaker niet meer alleen aan de serverkant; de clientkant speelt een steeds grotere rol. Daarbij heeft de logica aan de clientkant vaak de functie om een applicatie gebruikersvriendelijk te maken: voordat een formulier wordt opgestuurd, wordt gecontroleerd of alles wel is ingevuld en krijgt de gebruiker aanwijzingen, of bij het intypen van bijvoorbeeld de naam van een station krijgt de gebruiker al een aantal bij de eerste letters behorende stations te zien om uit te kiezen. Daarnaast zijn er ook applicaties waarbij de webserver alleen wordt gebruikt om gegevens op te bewaren, terwijl de applicatie geheel aan de clientkant draait. De spreadsheet-applicatie van Google is daar een sprekend voorbeeld van.
Scripting aan de clientkant is daarmee een steeds belangrijker onderdeel geworden van webapplicaties. In deze cursus maakt u kennis met HTML en CSS, en leert u een groot aantal mogelijkheden van JavaScript kennen. We zullen daarbij ook een overzicht geven van de soort technieken die er beschikbaar zijn voor de clientkant, zodat u toekomstige ontwikkelingen kunt duiden.
Blok 1 (context) omvat één oriënterende leereenheid over internet en het world wide web. U krijgt hier een heel korte inleiding in wat het internet eigenlijk is, in de structuur van het world wide web als een systeem van clients en servers, en over de betekenis van termen als URL of HTTP.
Blok 2 (de voorkant van het web: het statische gedeelte) is gewijd aan de twee talen voor webpagina's: HTML (Hypertext markup language), voor de structuur en de inhoud, en CSS (Cascading stylesheets) voor de presentatie en lay-out. Voor beide talen leggen we sterk de nadruk op het juiste gebruik ervan.
CSS is in principe een eenvoudige taal, maar het is lastig om met de beschikbare eigenschappen en waarden het gewenste effect te bereiken. De cursus biedt niet de ruimte om u tot een expert op het gebied van CSS op te leiden. Het doel is om u voldoende inzicht in CSS te geven om als webprogrammeur te kunnen overleggen met CSS-experts, en ook om een basis te bieden waarop u kunt voortbouwen.
Ook het opstellen van webformulieren met HTML behoort tot de leerstof. Om iets te kunnen begrijpen van wat er aan de serverkant met een webformulier gebeurt, krijgt u een heel korte inleiding in PHP. Niet voldoende om er zelf mee te kunnen werken, maar wel voldoende om u iets te kunnen voorstellen bij de verwerking van de ingevulde gegevens aan de serverkant.
Blok 3 (de voorkant van het web: programmeren in de browser) geeft een uitgebreide inleiding in JavaScript. JavaScript is een taal met heel veel mogelijkheden, waarvan we niet alles in detail kunnen laten zien. De enorme flexibiliteit van de taal maakt het ook gemakkelijk om fouten te maken, of erg moeilijk onderhoudbare code te schrijven. We proberen u daarvoor te behoeden door veel programmeeraanwijzingen te geven bij het werken met JavaScript.
Naast een inleiding in JavaScript maakt u in dit gedeelte van de cursus ook kennis met de DOM (Document object model), waarmee u de browser, de pagina en de elementen op de pagina als objecten kunt benaderen en manipuleren.
U maakt ook kennis met een JavaScript library die een aantal zaken gemakkelijker maakt, onder andere het binden van event handlers aan events. Programmeren in de browser gaat over het algemeen event-gebaseerd. U krijgt uitgebreid de mogelijkheid om daarmee te oefenen.
Blok 4 (clientkant-webapplicaties) laat zien hoe u in uw clientkant-webapplicatie kunt communiceren met de webserver, door middel van Ajax. U gebruikt daarvoor een aantal verschillende dataformaten: gewone tekst, XML en JSON.
In dit blok wordt ook uw kennis over HTML aangevuld: u krijgt een aantal aspecten te zien van de versie in wording van HTML, HTML5, en u ziet verschillende manieren om externe bronnen (zoals video) in uw pagina te integreren.
In dit blok zetten we ook de verschillende standaarden voor HTML en CSS nog eens op een rij, en laten we de geschiedenis ervan zien.
Blok 5 (interface design en Web 2.0) laat u verschillende aspecten zien van de term Web 2.0. De term wordt voor een veelvoud van betekenissen gebruikt, zoals voor het idee van content van gebruikers die op allerlei plaatsen wordt ingezet (zoals sociale websites als Facebook laten zien), of voor het gebruik van JavaScript voor webapplicaties die aanvoelen als desktopapplicaties, waarop u elementen kunt verslepen zoals u dat gewend bent.
In deze leereenheid besteden we ook aandacht aan het geschikt maken van webapplicaties voor mensen die bijvoorbeeld een browser gebruiken die voorleest, of die hun browser veel grotere letters laten gebruiken dan u in gedachten had bij het ontwerpen.
Webapplicaties: de serverkant

De cursus beoogt enerzijds een algemeen beeld te geven van webapplicaties en de technieken die daarbij aan de serverkant gebruikt worden en anderzijds de studenten te leren om met behulp van één techniek zelf een goed geconstrueerde webapplicatie te maken.
Het eerste blok behandelt de belangrijkste protocollen van het internet, namelijk TCP/IP als basis en HTTP. Daarnaast wordt kort aandacht besteed aan andere protocollen op applicatieniveau zoals e-mail en telnet.
In het tweede blok leert de cursist webapplicaties te construeren gebruikmakend van Java Server Pages (JSP) en servlets. Het blok bevat leereenheden over JSP, over servlets, over de MVC-architectuur en over het bewaren van informatie tussen verschillende HTTP-requests (sessiebeheer).
In het derde blok wordt eerst aandacht besteed aan het benaderen van databases in een webapplicatie. Daarna wordt een alternatief behandeld voor JSP, namelijk de tag-bibliotheek JSTL (JSP Standard Tag Library).
In het laatste blok wordt een overzicht gegeven van andere benaderingen voor de constructie van webapplicaties, waaronder frameworks. Met twee van deze frameworks maakt u nader kennis, namelijk Struts (een op Java gebaseerd framework) en Ruby on Rails.
Functioneel programmeren

Functioneel programmeren is een programmeerstijl waarin de nadruk wordt gelegd op functies (in plaats van objecten, zoals bij een objectgeoriënteerde taal, of toekenningen, zoals bij een imperatieve taal). Programmas in een functionele taal worden geschreven als een verzameling van functies: deze functies kunnen vervolgens worden meegegeven als argument (net als objecten in een objectgeoriënteerde taal), het resultaat zijn van een functieaanroep en worden opgeslagen in een datastructuur. Door de goede abstractie mogelijkheden kunnen programmas op een hoger niveau worden beschreven. Hierdoor komt er meer nadruk te liggen op het oplossen en specificeren van een probleem, dan op de details van een berekening.
In de cursus komen algemene principes voorbij zoals patroonherkenning, datastructuren, polymorfie, recursie, hogere-orde functies en types. Daarnaast worden enkele wat meer gevorderde onderwerpen besproken: het definiëren van typeklassen, het omgaan met oneindige datastructuren, lazy evaluation (het uitstellen van een berekening totdat het resultaat werkelijk nodig is) en monadische berekeningen (berekeningen met neveneffecten).
De cursus heeft een praktische insteek: u gaat zelf aan de slag met drie programmeeropdrachten om zo kennis te maken met de taal en de achterliggende concepten.
Het eerste deel van de cursus wordt gebruikt om uw kennis van Haskell op te halen. Verondersteld wordt dat de cursussen Concepten van programmeertalen en Talen en ontleders zijn afgerond. Aan de hand van het toegankelijke en compacte tekstboek van Graham Hutton (Programming in Haskell) wordt de basis nogmaals aangeboden. Na bestudering van de stof werkt u de eerste (algemene) programmeeropdracht uit, waarbij er in het bijzonder zal worden gelet op de gehanteerde programmeerstijl. Informatie over deze opdracht is te vinden op de cursuswebsite.
In het tweede deel kiest u twee geavanceerde onderwerpen uit om nader te bekijken. Op de website van de cursus worden een aantal onderwerpen gesuggereerd (met bijbehorende opdracht) waarin u zich verder kunt verdiepen. Dit gebeurt in overleg met de docent. Deze opdrachten hebben een hogere moeilijkheidsgraad, en zullen van tijd tot tijd wisselen. Ter voorbereiding op de door u gekozen onderwerpen krijgt u achtergrondartikelen of ander materiaal aangereikt ter bestudering.
IT en security

De cursus bestaat uit zes blokken.
Het eerste blok begint met een algemene introductie waarin een overzicht van het vakgebied security wordt geschetst, gevolgd door een elementaire inleiding in cryptografie. Cryptografie neemt een centrale plaats in bij de beveiliging van computersystemen. In de volgende blokken maakt u kennis met diverse toepassingen van cryptografie.
Het tweede blok richt zich op de beveiliging van software in algemene zin. U onderzoekt welke kwetsbaarheden programma's kunnen hebben, ongeacht hun functie, en hoe u programma's zodanig kunt ontwerpen dat ze zo weinig mogelijk kwetsbaar zijn.
In het derde blok bekijkt u meer specifiek de beveiliging van twee soorten software: besturingssystemen en databasemanagementsystemen. De kwetsbaarheden van dergelijke systemen worden besproken en ook maatregelen om de veiligheid te vergroten. Hierbij komen onder andere access-controltechnieken aan de orde.
Blok vier is het omvangrijkste blok van de cursus, waarin de veiligheid van computernetwerken en internet aan de orde komt, een onderwerp dat wereldwijd veel aandacht heeft. U bestudeert diverse mogelijke aanvallen. In een virtueel laboratorium kunt u een computernetwerk simuleren waarin u zelf aanvallen uitvoert en beveiligingsmaatregelen treft. Hierbij komt u onder andere in aanraking met de principes, mogelijkheden en beperkingen van firewalls en intrusion detection systems.
Blok vijf gaat in op aspecten van security waarbij de aandacht niet op de technische kant maar op economische en organisatorische aspecten is gericht. Ook is er aandacht voor privacy.
In blok zes komen ten slotte enkele actuele onderwerpen op gebied van security aan bod.
Webservices en applicatie integratie

Een drankengroothandel besluit om voortaan alle inkoop- en verkoopbestellingen en betalingen volautomatisch af te wikkelen via internet. Dit betekent dat met alle leveranciers en met alle afnemers - cafés en slijters - afspraken moeten worden gemaakt: welke gegevens gaan er uitgewisseld worden, hoe moet de ene partij de gegevens aanleveren opdat ze automatisch in de systemen van de ontvanger verwerkt kunnen worden. Verschillende technische oplossingen zijn al geprobeerd, maar fundamentele problemen blijven bestaan.
Met de introductie van XML zijn op dit gebied nieuwe concepten mogelijk geworden, in het bijzonder Webservices en SOA, Service Oriented Architecture.
Door het gebruik van algemeen erkende standaards is het nu mogelijk dat elke partij volledig autonoom kan blijven werken met eigen applicaties, terwijl toch de uitwisseling van gegevens tussen de diverse partijen in de juiste volgorde en op het juiste moment kan verlopen.
Dit deel gaat in op de basisconcepten karakteristieken van webservices en plaatst dit in de context van servicegeoriënteerde architecturen (SOA). Verder wordt in dit blok ingegaan op de infrastructuren die SOA en webservices mogelijk maken. De stof in dit blok zou voor een belangrijk deel herhaling moeten zijn.
In dit deel komen verschillende technieken ter ondersteuning van de implementatie van webservices aan de orde, te beginnen met SOAP: Simple Object Access Protocol. Dan komt WSDL (Web Services Description Protocol) aan bod, de XML-gebaseerde taal voor het beschrijven van webservices. Het geeft informatie over het doel van de service, waar je deze kunt vinden en hoe je deze kunt starten. Ten slotte komt SOA uitvoerig aan bod. Met name wordt ingegaan op de Enterprise Service Bus.
Enterprise applicatie-integratie houdt in: het op gecoördineerde wijze koppelen van bedrijfsproces ondersteunende applicaties, zodanig dat een eenvoudig en overzichtelijk "landschap" van applicaties ontstaat. In het tijdperk van Internet en E-business betekent dit het koppelen van applicaties zowel binnen als buiten het bedrijf. In het vorige blok is al de Enterprise Service Bus geïntroduceerd. Nu komen onderwerpen aan bod zoals Business processen, workflow, compositie, orkestratie en choreografie. De taal BPEL (Business Process Execution Language) komt uitvoerig aan bod. Het is een op XML gebaseerde taal waarin kan worden vastgelegd hoe bedrijfsproces wordt uitgevoerd met behulp van webservices.
De hoofdmoot van dit blok gaat over transactiemechanismen. Wanneer bedrijfsprocessen moeten samenwerken om een bepaalde taak gedaan te krijgen in een netwerk van samenwerkende webservices is het, naast bedrijfsprotocollen, orkestratie- en choreografiemechanismen, van belang om over de juiste transactiemechanismen te beschikken. Immers ook bij 'loosely coupled' webservices is het noodzaak om deze tot een eenheid van werk te smeden, om tot consistente eindresultaten te komen. Naast kortdurende transacties (met toepassing van de traditionele transactietheorie) krijgen we ook te maken met langdurende transacties met disjunctie zowel in tijd als locatie.
Dit blok eindigt met de bespreking van enkele nieuwe ontwikkelingen zoals grid computing en mobile computing.
Software architectuur

De structuur van een modern softwaresysteem is uiterst complex: zo'n systeem kan bestaan uit miljoenen regels programmacode, opgebouwd uit meerdere componenten die op verschillende manieren moeten samenwerken en moeten opereren in een gedistribueerde setting. Stringente eisen die aan dit soort systemen worden opgelegd, zoals een korte time-to-market, een extreme betrouwbaarheid en robuustheid, of harde real-time constraints, vormen uitdagingen waar al van het begin af aan rekening mee moet worden gehouden.
Software architectuur is het vakgebied dat zich bezighoudt met het beschrijven en analyseren van een systeem met behulp van modellen om tegemoet te komen aan het (dikwijls tegenstrijdige) eisenpakket dat is opgesteld door de belanghebbende partijen. Een inschattingsfout in het initiële ontwerp kan verstrekkende en desastreuze gevolgen hebben voor het succes van een softwareproject.
De cursus Software architecture bestaat uit twee delen: een theoretisch en een praktisch gedeelte. Het theoretische gedeelte is onderverdeeld in negen leereenheden en wordt getoetst door middel van een tentamen. De onderwerpen worden besproken aan de hand van een tekstboek waarin een breed overzicht wordt gegeven over wat software architectuur is, en waarbij de nadruk ligt op modellen en technieken die bij het ontwerpen kunnen worden gebruikt. In het praktische gedeelte wordt u gevraagd de theorie toe te passen en zelf een architectuur te ontwerpen voor een bestaand software systeem.
Een software architectuur is een beschrijving op hoog niveau van de componenten waaruit een systeem is opgebouwd en hoe deze componenten onderling samenwerken. Het centrale thema van deze cursus bestaat uit het inventariseren van de belangen (de requirements) van de verschillende betrokken partijen (de stakeholders) en het beschrijven en evalueren van een software architectuur. Verschillende partijen hebben dikwijls tegenstrijdige belangen, en deze zullen door de software architect zo goed mogelijk tegen elkaar moeten worden afgewogen. Meerdere kwaliteitsmodellen komen aan bod voor het eenduidig formuleren en categoriseren van belangen, en om deze belangen te communiceren naar de verschillende partijen. Verder worden er verschillende technieken behandeld om een architectuur te beschrijven, zoals het 4+1 model van Kruchten en de formele Architectural Description Languages (ADL). Aan de hand van scenario's en use-cases kan een architectuur vervolgens worden geëvalueerd ten opzichte van de opgestelde requirements.
Deze cursus gaat ook in op de kenmerken van bedrijfsapplicaties, zoals software voor de boekhouding of voor het roosteren van taken. Deze applicaties hebben dikwijls een soortgelijke architectuur en deze kan worden hergebruikt. Ook wordt er besproken hoe deze bedrijfsapplicaties verder geïntegreerd kunnen worden binnen een bedrijf. Overige onderwerpen die aan bod komen zijn de design by contract (DBC) methodologie en de stijl van service-oriented architecturen (SOA). Ook wordt er een verband gelegd tussen software architectuur en agile software ontwikkelmethoden zoals extreme programming (XP).
In het praktische gedeelte wordt u gevraagd de behandelde theorie toe te passen en een software architectuur te ontwerpen voor het webgebaseerde BaMaS informatiesysteem. Dit systeem beheert informatie over zogenaamde brugprogramma's tussen het bachelor- en masteronderwijs in Nederland. Het systeem moet aan de ene kant onderwijsinstellingen bedienen om de gevraagde informatie aan te kunnen leveren en te beheren. Aan de andere kant moet het systeem door studenten kunnen worden gebruikt die op zoek zijn naar informatie over de brugprogramma's. Een implementatie van het BaMaS systeem vindt u online www.bamas.nl. De ontworpen architectuur voor dit systeem moet voldoen aan de IEEE 1471 standaard. Het is uw taak om alle gemaakte ontwerpbeslissingen zo goed mogelijk te beargumenteren. De eindopdracht bepaalt het eindcijfer voor tweederde deel.
Het vak sluit nauw aan op enkele onderwerpen die ook in andere cursussen aan bod zijn gekomen. Van de negen onderwerpen overlappen er drie gedeeltelijk met andere cursussen: het onderwerp component software overlapt met de cursus Component-based development, architectural patterns komen ook aan bod in de cursus Design Patterns, en service-oriented architecturen worden deels in de cursus XML: theorie en toepassingen behandeld. In de genoemde cursussen zult u reeds ervaring hebben opgedaan met het gebruiken van UML diagrammen.
Model driven development

De cursus heeft drie pijlers. De eerste is platformonafhankelijkheid. Dit wil zeggen modelleren op een zo hoog mogelijk abstractieniveau, los van technische details van een specifiek platform. De tweede is de opbouw van een model uit een informatiemodel (voor generatie van database), een user-interfacespecificatie (voor uiterlijk en gedrag van de applicatie) en logica (voor specifieke bedrijfsregels). De derde pijler is methodisch: het iteratief ontwikkelen en beoordelen van een informatiesysteem met behulp van de ontwikkeltool.
In blok 1 (Modelgestuurd ontwikkelen) maakt u kennis met de drie genoemde pijlers van de cursus. Ook leert u werken met de ontwikkeltool Cathedron.
In blok 2 (Structuur in informatie) ligt de nadruk op het informatiemodel, gevisualiseerd in een UML-klassendiagram. U leert Cathedron in te zetten om uit een informatiemodel een krachtige default applicatie te genereren en deze op zijn merites te beoordelen. U leert informatiepatronen herkennen en toepassen. Complexe problemen leert u door een modulaire benadering op te delen in kleinere deelproblemen.
In wezen bent u voortdurend getuige van experimenten en zelf aan het experimenteren. We laten u overal tegenaan lopen waar een ontwikkelaar in de praktijk ook tegenaan loopt. We leren u via voorbeelden, patronen en oefeningen dat modelleren betekent: afwegingen maken. Bijvoorbeeld tussen harde beperkingsregels en zachtere voorschriften voor een workflow. Zo leert u vanzelf dat 'het model' en 'de methode' niet bestaan.
In blok 3 (Interface en logica) gaat het om het doorontwikkelen van een applicatie met non-defaults, op basis van een gestabiliseerd informatiemodel. De interface wordt verder aangekleed en er wordt 'logica' toegevoegd als implementatie van bedrijfsregels. Een voorbeeld van zo'n regel: een voorraad mag niet negatief worden.
Op basis van dezelfde interfacespecificaties worden zowel Windows-clients als webclients gegenereerd. De interfacetaal is een eenvoudige hiërarchische specificatietaal. De logica wordt geprogrammeerd in een 3GL (Object Pascal).
Blok 4 (Voortgezet modelleren) is gewijd aan meer gevorderde onderwerpen. Allereerst generalisatie: het gebruik van subklassen met de vele afwegingen die daarbij horen. Zoals tussen een eenvoudige structuur met complexe beperkingsregels en een complexe structuur met eenvoudige beperkingsregels.
Verder genericiteit: het streven naar flexibele, generieke oplossingen, zodat het informatiesysteem snelle veranderingen in de buitenwereld kan opvangen.
De tool Cathedron is een professioneel MDD-tool met een grote functionele rijkdom. Niettemin zijn bediening en installatie eenvoudig en is de performance hoog. Het werkt met generatie van metagegevens en niet van code. Hierdoor geldt: het model ís de applicatie, er hoeft niets gecompileerd te worden. De ontwikkelaar kan zodoende snelle iteraties maken, al dan niet met de gebruiker aan zijn zijde. De didactiek van de cursus wordt hiermee optimaal ondersteund.
De cursus krijgt een vervolg in het Ontwikkelpracticum, een cursus in de postpropedeuse waarin een realistische bedrijfscasus wordt uitgewerkt.
Programmeerpracticum

Tijdens de informaticaopleiding wordt in een aantal cursussen theorie aangedragen over objectgeoriënteerd ontwerpen en programmeren, over algoritmen en datastructuren en over gedistribueerd programmeren. Er wordt in die cursussen gelegenheid geboden om alle aspecten van de theorie te oefenen met gerichte opdrachten. Voor een goede beheersing van het programmeren is het tevens noodzakelijk om alle theoretische aspecten in een ruimer kader te plaatsen en te oefenen met het uitwerken van grotere programmeeropdrachten die een integrerend karakter hebben. Het zelf bedenken van een oplossing en deze omzetten in een werkend programma, zonder de mogelijkheid te hebben om naar een beschikbare uitwerking(terugkoppeling) te grijpen, vormt een essentieel onderdeel van het programmeeronderwijs. De cursus bouwt voort op de kennis die is opgedaan in de cursussen Objectgeoriënteerd programmeren in Java 1 en 2, Datastructuren en algoritmen en Distributed computing, en biedt u de gelegenheid om uw programmeervaardigheid in de taal Java te vergroten.
Het practicum bestaat uit vier onderdelen.
In practicum 1 worden basis- en algoritmische vaardigheden geoefend.
Practicum 2 heeft als thema recursie, datastructuren, gevorderde algoritmische en programmeertechnieken op het niveau van de cursus Datastructuren en algoritmen.
Practicum 3 heeft als doel het analyseren, ontwerpen, implementeren in Java, testen en documenteren van een casus.
In practicum 4 wordt functionaliteit toegevoegd aan een bestaand programma, namelijk aan de uitwerking van practicum 3 van een andere student.
ICT architectuur

Aandacht besteden aan architectuur van ict is zeker geen overbodige luxe in deze tijd, het is eerder een conditie sine qua non. Een motivering hiervoor is de grote afhankelijkheid van veel organisaties van ict, de grote hoeveelheden ict die tegenwoordig in organisaties aanwezig zijn en de mogelijkheden die ict op dit moment biedt. De verwachting is dat deze zaken alleen maar zullen toenemen. Er ontstaat op die manier een omvangrijk geheel aan ict-voorzieningen in organisaties dat logischerwijs de volgende beleidsvragen met zich brengt:
- hoe bereikt men dat het geheel de eigenschappen heeft die men wenst?
- hoe zorgt men ervoor dat het geheel beheersbaar blijft?
- hoe zorgt men ervoor dat het geheel zo flexibel en dynamisch is dat men snel en goed reageren kan op nieuwe ontwikkelingen in de omgeving?
Bij het beantwoorden van deze vragen speelt ict-architectuur een wezenlijke rol. Ict-architectuur is gedurende langere tijd geldig en een toetssteen bij het nemen van allerlei (ontwerp)beslissingen. De Gartner Group, de smaakmaker voor het bedrijfsleven en overheid, gebruikt als definitie voor architectuur: 'IT architecture is a series of principles, guidelines or rules used by an enterprise to direct the process of aquiring, building, modifying and interfacing IT resources throughout the enterprise. These resources can include equipment, software, communications, development methodologies, modelling tools and organizational structures'. Daan Rijsenbrij scherpt de definitie van de Gartner Group nog aan: Architectuur is een coherente, consistente verzameling principes, verbijzonderd naar uitgangspunten, regels, richtlijnen en standaarden - soms vastgelegd in patterns - die beschrijft hoe een onderneming, de informatievoorziening, een informatiesysteem of een infrastructuur is vormgegeven en zich voordoet in het gebruik.
Binnen ict-architectuur worden een aantal gebieden, gezichtspunten, abstractieniveaus en aspecten onderscheiden. Meestal worden de volgende vier architectuurgebieden onderscheiden: business, informatie & kennis, informatiesystemen en applicaties, en de technologische infrastructuur. Als gezichtspunten worden onder andere onderscheiden: governance en security en als abstractieniveaus het ondernemingsniveau en het systeemniveau en mogelijkerwijs enkele niveaus daartussen.
Kwaliteitsmanagement

De cursus Kwaliteitsmanagement van ict behandelt softwarekwaliteit in het algemeen en gestructureerd testen in het bijzonder. Dit zijn twee complementaire manieren om kwaliteit van software te benaderen: een methodische aanpak om de kwaliteit van it-projecten te beheersen en het plannen en uitvoeren van tests om de kwaliteit van softwareproducten vast te stellen. De cursus bestaat uit zeven blokken: blok 1 tot en met 4 gaan over het boek Softwarekwaliteit, blok 5 tot en met 7 over het boek Testen volgens TMap®.
In blok 1, Softwarekwaliteit en kwaliteit: een inleiding, wordt onder andere een overzicht gegeven van de verschillende definities van kwaliteit en van de aspecten die softwarekwaliteit anders maken dan kwaliteit bij industriële productie.
De centrale vragen in het boek zijn: Wat wordt verstaan onder de kwaliteit van software? Hoe bepaalt men welke kwaliteit nodig is? Welke factoren beïnvloeden de kwaliteit van software? Kan men deze factoren beïnvloeden?
In blok 2, Productkwaliteit, wordt besproken wat die kwaliteit is; hoe de vertaling plaatsvindt van kwaliteitsbehoeften bij de gebruiker naar kwaliteitseisen aan het systeem en hoe de kwaliteit gemeten en gegarandeerd kan worden.
Het beoordelen van de proceskwaliteit komt in blok 3 aan de orde. Hier voor is een aantal modellen in omloop. Deze kunnen onderverdeeld worden in dynamisch proceskwaliteitsmodellen, zoals CMM (capability maturity model), Bootstrap en SPICE, en statische, zoals ISO en Tickit.
In blok 4, Kwaliteit van resources, wordt aandacht besteed aan het ontwerpen van software. Omdat het ontwerpen hiervan mensenwerk is, is het eindproduct dus niet alleen afhankelijk van een goed proces, maar vooral ook van factoren die met mensenwerk samenhangen, zoals de eigenschappen van de organisatie, het gedrag van het ontwikkelteam en de individuen in dat team. Ook komen de kosten van software aan de orde.
In blok 5, TMap® algemeen, wordt allereerst ingegaan op het kader en belang van testen. Daarnaast wordt een overzicht gegeven van de vier pijlers (fasering, technieken, infrastructuur en organisatie) onder een gestructureerde testaanpak en wordt het TMap® faseringsmodel geïntroduceerd. U zult zien dat TMap® veel aspecten van projectmanagement bevat.
In blok 6, Het testproces volgens TMap®, wordt het testproces in zijn geheel doorlopen. Hierbij komen onder andere de volgende onderwerpen aan de orde: teststrategie, begroten en plannen, testomgeving, opstellen van testgevallen, uitvoeren van testgevallen en het opstellen van het eindrapport over kwaliteit. U voert de tests uit op een speciaal daarvoor ontwikkeld informatiesysteem.
In het laatste onderdeel, blok 7, Specialiteiten, maakt u kennis met specialiteiten op het gebied van testen: het mastertestplan voor optimalisatie van het totale testproces wordt nagestreeft door de afzonderlijke testsoorten op elkaar af te stemmen, test process improvement (TPI®) en testautomatisering.
Nb: TMap® en TPI® zijn door Sogeti Nederland B.V. geregistreerde merken.
Sogeti Nederland B.V. is het resultaat van een fusie in augustus 2002 tussen IQUIP Nederland B.V., G&D en Twinsoft. In het cursusmateriaal wordt de naam IQUIP gebruikt.
XML & Webservices

XML is een familie van talen, ontworpen om wereldwijde, geautomatiseerde gegevensuitwisseling tussen computersystemen mogelijk te maken. Een ontwerpdoel was - anders dan bij HTML - het scheiden van betekenis en weergave. XML-documenten bevatten daarom 'markup' om betekenissen uit te drukken. Een XML-document is leesbaar door machines én mensen, is gebaseerd op internettechnologie en staat los van specifieke besturingssystemen of programmeertalen. Duizenden XML-talen zijn inmiddels ontwikkeld, waaronder gespecialiseerde uitwisselingstalen voor elektronisch zakendoen.
Webservices vormen een belangrijk toepassingsgebied van XML-technologie. Hierbij gaat het om het wereldwijd beschikbaar stellen, zoeken en gebruiken van functionaliteit geleverd door lokale toepassingen, resulterend in nieuwe, gedistribueerde toepassingen. De achterliggende programma's worden volledig afgeschermd, andere programma's 'zien' slechts uitgewisselde gegevens in XML-formaat. Webservices vormen de basis van een op diensten gebaseerde architectuur van processen, toepassingen en systemen. Ook de beschrijving van de diensten die door de programma's beschikbaar worden gesteld, is volledig in XML.
De cursus geeft een goed beeld van de huidige mogelijkheden en het belang van XML-technologie. Naast de theorie zijn er veel praktische oefeningen met Borland's geïntegreerde programmeer- en XML-omgeving JBuilder Professional. De Java-programma's aan zowel client- als serverkant, waarmee XML-gegevens worden bewerkt en uitgewisseld, worden door de student zelf uitontwikkeld.
Het eerste, korte blok Een nieuwe generatie webtechnologieën behandelt de 'push' van de techniek binnen de moderne bedrijfscontext. In dit kader worden nieuwe technologieën voor communicatie tussen en integratie van informatiesystemen besproken, met hun toepassingen en hun invloed op de bedrijfsprocessen. De beschrijving wordt toegespitst op XML en op webservices. De student werkt hier al met de kant en klare toepassingen die in de volgende blokken via praktische opdrachten worden ontwikkeld. Tevens wordt geschetst hoe XML en webservices uit oudere technologieën zijn voortgekomen.
Het tweede blok XML omvat een gedegen inleiding in XML en XML-gerelateerde basistechnologieën: de XML-grammaticatalen DTD en XML Schema, de navigatietaal XPath, manipulatie van XML-data via Java-programma's (met de parsers DOM en SAX of met XML-binding), de transformatie- en programmeertaal XSLT, communicatie in XML-vorm met relationele databases en representatie van XML-data op het web (met cascading stylesheets en XHTML).
Het derde blok Webservices behandelt de theorie (architectuur, talen en protocollen) van webservices met de bijbehorende technieken: SOAP voor communicatie met webservices, WSDL voor specificatie ervan en UDDI voor het publiceren en zoeken van webservices.
In een Epiloog wordt over de grens van de thans gerealiseerde toepassingen naar de toekomst gekeken en naar de obstakels die nu nog een brede toepassing in de weg staan. Tevens wordt een academisch stapje omhoog gedaan door XML en webservices vanuit een hoger abstractieniveau kritisch te beschouwen.
Hoewel de cursus wordt afgesloten met een schriftelijk tentamen, bevatten alle blokken veel praktische opdrachten die lokaal, op de werkplek thuis, kunnen worden uitgevoerd.
De cursus is bedoeld voor wie die de actuele ontwikkelingen rondom het internet wil begrijpen en beoordelen: (toekomstige) ontwikkelaars en andere ict-professionals evenzeer als gebruikers die aan de hierna genoemde voorkennis voldoen.
OO modelleren met UML en patterns

Informatiesystemen voorzien in de informatiebehoeften van organisaties, mensen of installaties/systemen. Voorbeelden zijn het hypotheeksysteem bij een bank, een internet-bestelsysteem van een boek- en platenzaak, de automatische piloot in een vliegtuig, de reisplanner van de NS en een on-line catalogus van de bibliotheek. Informatiesystemen ontwikkelen gebeurt in een dynamisch speelveld van in de praktijk ontstane methoden, eigenzinnige ontwikkelaars, wetenschappelijk onderzoeksresultaten, standaardisatie-initiatieven, commerciële tools en een weerbarstige werkelijkheid.
Het ontwikkelen, bouwen, uitbreiden of vervangen vraagt een doordachte, projectmatige aanpak, waarbij een ontwikkelteam te maken krijgt met voortschrijdende inzichten bij diverse betrokkenen als opdrachtgever, klanten van de opdrachtgever, uiteenlopende gebruikers, onderaannemers, toetsings- en normalisatie-instanties. Belangen van deze partijen zijn vaak strijdig en wijzigen veelvuldig tijdens het ontwikkeltraject.
Als rode draad door het ontwikkeltraject loopt het beantwoorden van vragen van deze partijen door analyse en ontwerp: welke functies dient het systeem te vervullen voor diverse betrokkenen, aan welke specifieke kwaliteitseisen moet het voldoen, welke structuur moet het systeem hebben, op welke technische infrastructuur moet het worden geïnstalleerd en welke bekende technische oplossingen worden gebruikt?
Het ontwikkeltraject kent een aantal karakteristieke activiteiten (eisen, analyse, ontwerp, bouw, implementatie).
In de cursus is aandacht voor het totale ontwikkeltraject, van eisen tot en met implementatie, maar de nadruk ligt op de analyse en het ontwerpen van het informatiesysteem. Andere aspecten (implementatie, testen, projectmanagement) worden minder diepgaand behandeld.
Aan de orde komen:
- het formuleren van eisen (requirements) en daaruit voortvloeiend de specificatie van het informatiesysteem
- iteratieve systeemontwikkeling zoals dat gebeurt in de context van bijvoorbeeld de methode Unified process
- unified modeling language (UML) als taal om ontwerp en analyse modellen in weer te geven
- gebruik van patronen ('patterns'): moderne applicaties worden steeds meer ontwikkeld door hergebruik van bestaande oplossingen. Op deze manier wordt aangeleerd voort te bouwen op kennis en ervaringen in het vakgebied.
- enkele praktijkvraagstukken als combineren van verschillende technologieën: wat verandert er in het objectgeoriënteerde ontwerp als gebruik wordt gemaakt van een relationele database (het persistent maken van objecten).
Door deze accentuering van enkele onderwerpen wordt een diepgang bereikt waarmee problemen uit de dagelijkse, weerbarstige werkelijkheid op te lossen zijn, gebruikmakend van voor handen zijnde, bijdetijdse inzichten.
De cursus is bedoeld voor iedereen die zich verder wil bekwamen in het veld van informatiesysteemontwikkeling en gebruik wil maken van nieuwe technologieën en inzichten in systeemontwikkelprocessen. ontwikkelaars die ervaring hebben in een objectgeoriënteerde taal, maar die relatieve nieuwkomers zijn op het gebied van objectgeoriënteerde analyse en ontwerp. Of degenen die bekend zijn met UML, maar daadwerkelijk willen leren specificaties vast te leggen in een goed model, gevisualiseerd in UML-diagrammen.
CBD

Er zijn verschillende ontwikkelingen geweest die hebben geleid tot de opkomst van Component-based development (CBD).
De belangrijkste ontwikkeling is wel de steeds hoger wordende eis van flexibiliteit. CBD benadert flexibiliteit door te streven naar een situatie waarin samenhangende stukjes software (componenten) aan een systeem kunnen worden toegevoegd, liefst terwijl het systeem operationeel blijft. Componenten komen in allerlei varianten voor. Plugins voor een webbrowser bijvoorbeeld, zijn componenten die zijn gebouwd om binnen de omgeving van zo'n browser te functioneren. Eindgebruikers kunnen door middel van plugins zelf functionaliteit toevoegen aan hun browser.
Enterprise Java Beans (EJB's) zijn een ander voorbeeld. EJB's zijn gebouwd om te fungeren binnen een applicatieserver die allerlei services biedt. Ze zijn onderdeel van J2EE, dat de mogelijkheid biedt om webgebaseerde systemen op te zetten. In de cursus komt u met een breed scala aan componenten in aanraking.
Het eerste blok van de cursus gaat in op de vraag wat we onder componenten en verwante concepten verstaan. Deze theoretische concepten krijgen handen en voeten door middel van een aantal praktische opdrachten waarin u de concepten op verschillende manieren geconcretiseerd ziet. Doordat u materiaal uit verschillende bronnen onder ogen krijgt (een tekstboek, artikelen, handleidingen bij componenttechnologieën) zult u merken dat de concepten lang niet overal dezelfde term krijgen toebedeeld, en lang niet overal op dezelfde manier worden ingevuld.
De teksten in dit blok geven u samen met de opdrachten de mogelijkheid om de concepten rond componenten te begrijpen.
In het tweede blok ziet u een manier om UML te gebruiken bij het ontwerpen van component-gebaseerde systemen. UML is ontstaan in een tijd dat CBD nog niet aan de orde was, en het ligt daardoor niet direct voor de hand hoe UML in te zetten bij CBD. Het tekstboek laat één van de mogelijkheden zien. Daarnaast besteden we aandacht aan het ontwerpen van systemen die gebouwd worden met behulp van bestaande componenten.
Het derde blok gaat nader in op het begrip componentmodel, en laat bovendien ook het verband zien tussen het begrip software architectuur en componenten. Ook in dit blok ziet u de theoretische begrippen in de praktijk in een aantal opdrachten.
In het laatste blok tenslotte, krijgt u een overzicht van een aantal componenttechnologieën, waar J2EE er één van is.
Kunstmatige Intelligentie

Kunstmatige intelligentie: waarom, wat, waarvoor?
Waarom? Veelvuldig komt de huidige informaticus problemen tegen die niet meer of niet goed met de conventionele algoritmes en methoden op te lossen zijn. De laatste decennia zijn hiervoor oplossingen gezocht. Uitgangspunt bij deze oplossingen was veelal de manier waarop de mens problemen oplost.
Wat? De menselijke methode van aanpak bij probleemoplossen (heuristiek) werd zo een belangrijk aspect binnen de nieuw ontwikkelde oplosmethoden. Enerzijds werd de menselijke manier van redeneren als uitgangspunt genomen (symbolische AI-systemen, fuzzy-systemen, rough-set-systemen) anderzijds werden ook biologische aspecten als uitgangspunt genomen (neurale netwerken, genetische algoritmen). Tenslotte worden deze methoden ook nog eens gecombineerd tot hybride systemen die van elke de sterke kanten benutten. Bijvoorbeeld het redeneren volgens fuzzy logic en het lerend vermogen van neurale netwerken of genetische algoritmes wordt gecombineerd in fuzzy-neurale of fuzzy-genetische systemen.
Waarvoor? Voor classificeren, optimaliseren, patroonherkennen, regelen en sturen, voorspellen, plannen, beslissen, ontwerpen, spellen spelen (strategieën), monitoring, diagnose, datamining enzovoorts. Bekende toepassingsgebieden zijn in de financiële wereld: beslissen ten aanzien van leningen, voorspellen van beurskoersen. Bij de nutsbedrijven: voorspellen van drinkwatertoevoer, rioolwaterafvoer en energiegebruik. Bij productiebedrijven: voorspellen van afzet, classificeren van consumenten. Volgen (monitoring), regelen en sturen van processen op diverse gebieden vindt op deze manier plaats. Diagnose en beslissen vindt niet alleen in de medische wetenschap plaats maar ook in vele facetten van de bedrijfsvoering. Optimalisering en ontwerpen van systemen op basis van kunstmatige intelligentie is zeker geen uitzondering meer en wordt steeds meer regel.
De cursus behandelt neurale netwerken (begeleid en zelflerend), genetische algoritmen, fuzzy-systemen, rough sets en chaos.
Na het met goed gevolg afronden van deze cursus zult u de behandelde systemen begrijpen en toe kunnen passen, elk op hun meest geschikte probleemgebied. Daardoor zal uw probleemoplossend vermogen toegenomen zijn.
Design patterns

Objectgeoriënteerd programmeren heeft al vele jaren geleden vaste grond onder de voeten gekregen bij softwareontwikkelaars. Het aantal projecten waarbij objectgeoriënteerde talen wordt gebruikt is in de afgelopen tien jaar dan ook enorm toegenomen. Het succes van nieuw ontwikkelde talen als Java en C# onderstreept deze ontwikkeling. Eén van de belangrijkste redenen van deze verschuiving is het feit dat objectgeoriënteerde systemen flexibeler zijn met betrekking tot veranderingen.
De praktijk bewijst keer op keer dat de eisen aan een systeem niet vastliggen, maar voortdurend blijven veranderen. Systemen moeten dus zo gebouwd worden dat veranderingen met zo weinig mogelijk inspanning aangebracht kunnen worden.
Eén van de belangrijkste principes van objectoriëntatie is het begrip inkapseling (encapsulation), dat inhoudt dat de implementatie van objecten verborgen blijft voor de 'buitenwereld': alles wat communiceert met het object. Daardoor kan de implementatie van een object veranderd worden zonder dat dat consequenties heeft voor de rest van het systeem. In de praktijk blijkt echter dat systemen die keurig objectgeoriënteerd ontworpen en geïmplementeerd zijn, toch niet de flexibiliteit vertonen die mogelijk zou moeten zijn. Design patterns staan in de belangstelling vanwege het feit dat ze helpen die zo belangrijke flexibiliteit van systemen in te bouwen. De cursus laat zien dat het leren begrijpen van design patterns helpt om beter gebruik te maken van de mogelijkheden die objectoriëntatie biedt.
Met andere woorden: u leert niet alleen design patterns te gebruiken voor flexibele oplossingen, maar u wordt daardoor ook een beter ontwerper.
Het eerste blok van de cursus bevat een overzicht van de principes van objectoriëntatie en laat de diagrammen zien van de Unified Modeling Language, UML, die gebruikt zullen worden bij het beschrijven van design patterns. Verder bevat dit blok een introductie tot design patterns, en worden een viertal patterns (Facade, Adapter, Bridge en Abstract Factory) uitgebreid besproken en toegepast in een voorbeeldprobleem.
In het tweede blok worden design patterns verder uitgediept. Behalve een uitgebreide bespreking van een volgende serie patterns (Strategy, Decorator, Singleton, Observer, Template method, Factory method), wordt uitgelegd hoe design patterns samenhangen met objectgeoriënteerde principes. Het blok wordt afgesloten met de algemene ontwerpprincipes achter design patterns. Het derde blok laat patterns in een breder perspectief zien. Patterns worden niet alleen gebruikt bij objectgeoriënteerde ontwerpen, maar ook op bijvoorbeeld het niveau van software architectuur.
Software management

De cursus geeft een overzicht gegeven van de diverse aspecten die van belang zijn voor het succesvol leiden van softwareprojecten en is gebaseerd op originele en beroemde artikelen van de kopstukken van het vakgebied. Onderwerpen die in de diverse artikelen specifiek aan de orde komen zijn: procesbeheersing en -verbetering, projectmanagement, planning, schatten van tijd en kosten, risicomanagement, meten van kwaliteit en problemen rond technologie-overdracht.
Als uitgangspunt van de cursus dient een boek waarin belangrijke artikelen uit de (Engelstalige) wetenschappelijke vakliteratuur op een overzichtelijke wijze bijeen zijn gebracht. Als rode draad zijn door de auteur The '3P's' of software management gehanteerd, waarbij het steeds weer gaat om het juiste evenwicht tussen Product, Proces en Personen.
Onderwerpen die in de diverse artikelen specifiek aan de orde komen zijn: software proces improvement, project management, software estimating, visibility and control, software inspection, risk management, metrics and management, technology transfer en new software management paradigms. In de artikelen worden vooral de algemene principes beschreven die in de praktijk van industriële softwareprojecten daadwerkelijk tot verbeteringen hebben geleid. Zo wordt bijvoorbeeld geschetst hoe CMM (Capability Maturity Model) tot procesverbetering kan leiden, hoe COCOMO 2.0 een grondslag geeft voor kostenschattingen, en hoe een nieuw paradigma zoals de object-oriëntatie of het web-universum ook een nieuwe vorm van management vergt.
Het is de bedoeling dat u leert zelfstandig wetenschappelijke vakliteratuur te verwerken. Het gaat daarbij met name om onderscheid te leren maken tussen hoofd- en bijzaken, tussen sterke en zwakke uitspraken, tussen bereikt succes en verbloemd falen. Ook het vormen van een persoonlijke visie is belangrijk. Daartoe dient een kort verslag gemaakt te worden van het leggen van een verband tussen een eigen werksituatie en een onderdeel van de verworven kennis omtrent softwaremanagement.
Methodologie van informatiesystemen

Volgens de Dikke van Dale betekent methodologie 'leer der methoden'. Daarmee wordt bedoeld: wetenschappelijk en theorievormend onderzoek naar (gewenste) kenmerken van methoden en eventueel technieken die daarbij gebruikt worden. Een methode is een weldoordachte werkwijze om een bepaald doel te bereiken, bijvoorbeeld om voor een gegeven probleem een oplossing te schetsen. Technieken worden daarbij als hulpmiddel gebruikt.
Ook bij informatiesysteemontwikkeling kennen we heel veel verschillende methoden en technieken die ons ondersteunen bij het maken van het juiste informatiesysteem. De moeilijkheid is om bij de grote diversiteit aan probleemsituaties de juiste methode(n) en techniek(en) te vinden voor het ontwikkelen en het modelleren van het gewenste informatiesysteem.
De cursus Methodologie van informatiesysteemontwikkeling gaat ook over theorievorming rondom de (gewenste) kenmerken van methoden, technieken en modellen voor informatiesystemen. In de cursus introduceren we architectuurraamwerken die een algemeen beeld schetsen van de ontwikkeling van informatiesystemen door het aanbieden van een algemene ontwerp- of modelleringsruimte, los van bestaande methoden en technieken. Deze raamwerken zijn er in verschillende soorten en maten met allemaal hun eigen achtergrond en filosofie. Een raamwerk kan dienen als leidraad (een metamethode) voor het kiezen van het juiste oplossingspad bij een gegeven probleemsituatie, maar ook als classificatieschema voor bestaande methoden en technieken. Classificatie en daarmee analyse kunnen vervolgens leiden tot synthese, dat wil zeggen: constructie van de 'ideale' oplossingsmethode voor een gegeven probleemsituatie uit beschikbare componenten.
Een andere invalshoek is het werken met metamodellen.
Zoals gezegd, is het modelleren van een informatiesysteem voor een organisatie een hele kunst. Vooral de kennis waarop die organisatie drijft, in modellen te vangen, vergt nogal wat. Daarbij draait het om communicatie. Ict-experts moeten de eisen van de stakeholders in de organisatie kunnen vertalen. Dan is het belangrijk dat beide groepen dezelfde taal spreken.
De semantiek leggen we daarom vast in een metamodel. Een metamodel is daarmee een precieze definitie van de elementen en regels die nodig zijn voor het formuleren van modellen met semantische betekenis. Er zijn allerlei metamodellen opgesteld. Daarbij valt meteen op dat de meeste metamodellen in de software engineering grafisch georiënteerd zijn. Het meest bekende voorbeeld is wel het UML-metamodel. Grafische modelleertechnieken, waaronder met name trouwens ook de ER-techniek (entity-relationship), zijn populair omdat ze intuïtief aanspreken en relatief gemakkelijk zijn te gebruiken. De meeste metamodellen missen echter precisie, waardoor de modellen die op die metamodellen gebaseerd zijn, vaak voor verschillende interpretaties vatbaar zijn. Verschillende interpretaties kunnen leiden tot misverstanden, onvruchtbare discussies of bijvoorbeeld software-implementaties die niet in overeenstemming zijn met hun vereisten.
Voor het vormgeven van doeltreffende architecturen zijn semantisch verantwoorde metamodellen meer dan wenselijk. Ze maken het mogelijk om de specificaties van een systeem scherp te formuleren en om de bijbehorende modellen te toetsen op consistentie. Conceptuele consistentie is een essentieel kenmerk van een goed model. Uit semantische modellen zijn regels af te leiden die de consistentie vormgeven en die eventueel automatisch getoetst kunnen worden.
Deze cursus kiest dus niet voor alweer de ontwikkeling van een informatiesysteem op basis van een gekozen methode en/of techniek, maar beoogt een en ander in een ruimere context te plaatsen.
Het leereffect zal zijn dat u na bestudering van de cursus een duidelijker inzicht hebt in de problematiek bij informatiesysteemontwikkeling. Het toepassen van de theorie betekent dat u een gegeven probleemsituatie sneller kunt plaatsen en de juiste richting kunt aangeven voor de oplossing.
Software engineering

Software-engineering is het vakgebied dat zich bezig houdt met alle aspecten van het doelmatig produceren van hoogwaardige software die vanwege de omvang of complexiteit of beide redelijkerwijs niet door één of enkele personen ontwikkeld kan worden. De doelmatigheid gebiedt dat zulke software, of onderdelen daarvan, gedurende langere tijd meegaat en dus aanpasbaar moet zijn aan veranderende eisen.
Naast softwaretechnische zaken als analyse, ontwerp en testen, wordt in deze cursus ook aandacht besteed aan organisatorische aspecten van softwareontwikkeling. De implementatie, d.w.z. het programmeren als zodanig, komt slechts zijdelings aan de orde. De cursus geeft een breed overzicht van het gehele vakgebied software-engineering. Vanwege de uitgebreidheid van het vakgebied mist zo'n overzicht vaak diepte. Om dat tegen te gaan is naast een tekstboek dat voor het brede overzicht zorgt, gekozen voor het toevoegen van opdrachten waarin enkele onderwerpen nader uitgediept worden. De verhouding in hoeveelheid studielast tussen tekstboek en opdrachten is ongeveer 2 : 1. De opdrachten maken het ook mogelijk in te gaan op de snel veranderende actualiteit.
Het tekstboek is opgebouwd uit zeven delen.
Deel 1, Overview, is inleidend van aard en geeft een overzicht over het vakgebied, plaatst software-engineering in het bredere kader van systeemengineering, gaat in op procesmodellen van softwareontwikkeling en bespreekt beginselen van projectmanagement.
Deel 2, Requirements, gaat over de eisen aan softwaresystemen. Naast verschillende soorten eisen als functionele en niet-functionele, komt het beschrijven van eisen voor verschillende doelgroepen en het documenteren daarvan aan bod. Verder wordt het proces van het vergaren, valideren en onderhouden van eisen beschreven. Ook worden prototyping als middel voor eisenvergaring en formele specificaties in verband met kritische systemen behandeld.
Deel 3, Design, is gericht op het ontwerp van softwaresystemen. Achtereenvolgens komen systeemarchitectuur, gedistribueerde, objectgeoriënteerde, real-time- en componentgebaseerde systemen en het ontwerpen van de gebruikersinterface aan de orde.
Deel 4, Critical systems, bespreekt kritische systemen en hun specifieke eisen op het gebied van beschikbaarheid, betrouwbaarheid en veiligheid. Daarnaast komen zaken als het specificeren en ontwikkelen van zulke systemen aan de orde.
Deel 5, Verification and validation, gaat in het bijzonder in op technieken van het inspecteren en testen van softwaresystemen in het algemeen en het verifiëren en valideren van kritieke systemen in het bijzonder.
Deel 6, Management, is facultatief. Dit onderwerp komt voor in de cursus Softwaremanagement.
Deel 7, Evolution, is gericht op veranderende softwaresystemen. Het bespreekt legacy-systemen: wanneer en hoe ze te vervangen, en verschillende soorten veranderingen: enerzijds aanpassingen aan veranderde eisen met of zonder behoud van architectuur en anderzijds re-engineering, waarbij de eisen in principe onveranderd blijven.
Deel 7 sluit af met het belangrijke onderwerp configuratiebeheer, onmisbaar bij de ontwikkeling en alle soorten veranderingen van softwaresystemen.
Besturingssystemen

Elke moderne computer wordt bestuurd door een besturingsysteem: een programma dat onontbeerlijk is bij het werken met een computer. Het besturingssysteem is een softwareprogramma dat aan de ene kant de gebruikersinterface naar de gebruikers bepaalt; de gebruiker wordt daardoor afgeschermd voor de complexe hardware bij het uitvoeren van taken zoals tekstverwerken. Aan de andere kant beheert het die complexe hardware en verdeelt de beschikbare (hardware)bronnen, zoals werkgeheugen, processortijd en randapparatuur, over de in uitvoering zijnde programma's. Tegelijkertijd dwingt het besturingssysteem de veilige verwerking en bescherming van componenten af. Tegenwoordige besturingssystemen zijn standaard uitgerust met een grote verzameling van hulpprogrammatuur (waarmee gebruikers systeemtaken kunnen uitvoeren zoals het beheren van de bestanden) en met applicatieprogrammatuur (zoals een mediaspeler of een rekenmachine). Bekende besturingssystemen zijn de Windows-familie van Microsoft (zoals Windows 2000, Windows XP), Mac OS, OS/2, Linux en UNIX.
Na een algemene introductie worden de begrippen proces en draad behandeld. Een proces kan een of meer draden bevatten; een draad is een in uitvoering zijnd programmadeel. Een moderne tekstverwerker laat duidelijk zien dat de verwerking ervan door draden gebeurt; er is een draad voor het gedeelte dat ervoor zorgt dat de gebruiker teksten in kan voeren, er is een draad voor het controleren van de spelfouten en er is een draad voor het afdrukken van de tekst. Alle draden worden 'concurrent' uitgevoerd, dat wil zeggen: schijnbaar gelijktijdig omdat er (doorgaans) maar één processor in de computer zit. In het geval dat er meerdere processoren beschikbaar zijn, kunnen draden wel gelijktijdig worden uitgevoerd. Draden en processen zijn voortdurend in concurrentie met elkaar om gebruik te mogen maken van hardwarebronnen en communiceren voortdurend met elkaar door het uitwisselen van berichten.
Een ander aspect dat het besturingssysteem onder beheer heeft, is het geheugen. Doorgaans is het fysiek aanwezig geheugen (geadresseerd door fysieke geheugenadressen) te klein om het besturingssysteem zelf, de overige systeemsoftware en alle gebruikerstoepassingen onder te brengen. Vandaar dat er gebruik wordt gemaakt van virtueel geheugen (geadresseerd door logische geheugenadressen) dat vele malen groter kan zijn dan het fysieke geheugen en dat gebruikmaakt van achtergrondgeheugen (meestal een harde schijf). Delen van programma's kunnen in het fysieke geheugen worden geplaatst en delen op de harde schijf.
Programma's worden opgeslagen als bestanden op de harde schijf. Ook hiervoor is een mechanisme nodig om bestanden aan te maken, te bewerken en te verwijderen. Dit is het bestandsbeheersysteem. Het bestandsbeheersysteem draagt ook zorg voor de logische bestandsopslagstructuur (die gebruikmaakt van directories) en voor de vertaling daarvan naar de fysieke opslag op de harde schijf (die doorgaans onderverdeeld is in partities). Een belangrijke functie van het bestandsbeheersysteem is de beveiliging; een willekeurige gebruiker mag niet elk bestand benaderen.
Tenslotte wordt het input-output-systeem behandeld. Zonder een dergelijk systeem kan de computer niet met de buitenwereld communiceren. Randapparaten zoals beeldscherm, toetsenbord, muis, printers, scanners en joysticks moeten aangesloten kunnen worden. Interne onderdelen van de computer maken echter ook gebruik van het input-output-systeem. Te denken valt bijvoorbeeld aan harde schijven, cd/dvd-drives, het diskettestation en de grafische controller.
Om de kennis over besturingssystemen ook in de praktijk toe te passen, maakt een tweetal practica deel uit van de cursus. In het Linux-practicum ziet u hoe Linux omgaat met processen en met het bestandsbeheersysteem en maakt u kennis met de specifieke eigenschappen van een commandoregelgestuurd besturingssysteem. In het Windows-practicum bestudeert u daarnaast een aantal specifieke karakteristieken van een grafisch besturingssysteem, en wel aan de hand van de grafische schil in Windows; bij het practicum wordt een aantal in de programmeertaal 'C' geschreven programma's gebruikt.
Databases

In de beginjaren van de automatisering was een database (of gegevensbank) niets meer dan een geautomatiseerde kaartenbak. De kaartenbakken in de vorm van bestanden waren automatisch toegankelijk maar stonden elk op zichzelf. In de jaren zestig werd het mogelijk die verschillende bestanden met elkaar te combineren. Zo is een computer in een bibliotheek niet alleen in staat te laten zien welke boeken er zijn, maar ook of die zijn uitgeleend en zo ja, aan wie, waar die persoon woont en wanneer het boek teruggebracht moet zijn. Maar een databasesysteem doet meer. Het controleert de juistheid en volledigheid van de gegevens en het beschermt de gegevens tegen ongeautoriseerd gebruik. Het bouwen en bevragen van zulke databases staat centraal in deze cursus.
De cursus is een goede theoretische en praktische inleiding in het vakgebied.
De voor de praktijk zo belangrijke 'relationele databases' worden uitgebreid behandeld, evenals de achterliggende relationele theorie. U oefent met de relationele gegevenstaal SQL, waarbij zowel het bevragen, bouwen en beheren van dit type databases aan bod komen. Daarnaast is er bijzondere aandacht voor normalisatie van gegevensstructuren, mechanismen voor regelbewaking (onder meer via 'triggers en stored procedures'), transacties, optimalisatie van bevragingen, het verlenen van databaserechten aan gebruikers (autorisatie) en de wijze waarop een relationeel systeem zijn eigen structuurgegevens administreert als 'metagegevens' in een systeemcatalogus. Ook datawarehouses (grote historiedatabases voor managementinformatie en analyse) en niet-relationele databases hebben een plaats in de cursus.
De cursus is van een bijzondere didactische kwaliteit en wordt op een verrassende manier ondersteund door software op cd-rom.
Blok 1 (Verkenning) omvat één oriënterende leereenheid over databases, hun gebruikers, toepassingen en structuurtypen. Vanuit de structuurtypen (het architectuurperspectief) wordt ook de historie van databases belicht.
De volgende drie blokken zijn gewijd aan één architectuur, gebaseerd op het relationele model van dr. E.F. Codd, die in 1970 een nu nog steeds beroemd artikel publiceerde: A relational model of data for large shared data banks. Hoewel de laatste jaren ook databases op de markt komen, die ontworpen zijn volgens de principes van het objectgeoriënteerde model, ziet het er toch niet naar uit dat de relationele databases zich zomaar laten verdringen. Reden waarom in de volgende drie blokken het relationele model uitvoerig wordt besproken en uitgebreid wordt geoefend met de belangrijke relationele taal SQL.
Blok 2 (Relationele databases) behandelt de relationele structuren, regels en operaties, en gaat in op relationele talen (de relationele algebra en SQL), het relationele model en normalisatie.
Blok 3 (Relationele databases bevragen) behandelt het bevragen van relationele databases en het bewerken van hun gegevensinhoud. SQL92 (een ANSI/ISO-standaard) is de gebruikte relationele databasetaal. Voor de practicumopdrachten wordt gebruik gemaakt van het relationele databasemanagementsysteem (rdbms) InterBase.
Blok 4 (Relationele databases beheren) behandelt het creëren van relationele databases, de mechanismen voor het bewaken van regels, het optimaliseren van bevragingen, beveiliging door autorisatie van gebruikers, en metagegevens.
In Blok 5 (Datawarehouses en OO-databases) wordt ingegaan op datawarehouses (grote gegevenspakhuizen voor managementinformatie en analyses) en op objectgeoriënteerde systemen.
De cursus is bedoeld voor iedereen die zich wil bekwamen in het bouwen en bevragen van relationele databases, en dit wil doen vanuit een breed perspectief (ook andere dan relationele architecturen) en met een goede theoretische ondergrond (het relationele model en normalisatie).
Formele talen en Automatentheorie

De theorie van formele talen houdt zich bezig met het beschrijven van de structuur van talen. Dit kunnen natuurlijke talen zijn (Nederlands, Engels), maar evengoed programmeertalen zoals de taal Java. Wie een zin uit bijvoorbeeld het Nederlands wil vertalen in een andere taal, zoals het Engels, heeft een grondige kennis nodig van zowel de structuur (syntaxis) als de betekenis (semantiek) van de twee talen. Als een vertaling door een computer moet worden uitgevoerd, dan moeten de syntaxis en semantiek op de een of andere manier formeel worden vastgelegd. Dat is voor natuurlijke talen een zeer lastige zaak. Van programmeertalen ligt de structuur wel vast. Deze wordt beschreven door een grammatica. Vanuit deze beschrijving kunnen ontleders gegenereerd worden. Dat zijn programma's die deze structuur herkennen en die programmacode kunnen controleren op syntaxis. Deze controle vormt de eerste stap van de vertaling van een computerprogramma geschreven in een hogere programmeertaal naar machinecode.
In deze cursus komt theorie van formele talen aan de orde en wordt aandacht besteed aan het zelf ontwerpen van grammatica's.
Het eerste blok vormt een algemene inleiding op formele talen.
In het tweede blok worden de eigenschappen van reguliere talen en van eindige automaten behandeld. Context-vrije talen en stapelautomaten zijn het onderwerp van blok drie. In het laatste blok komen turingmachines, de Chomsky-hiërarchie en het begrip beslisbaarheid van problemen aan de orde.
Data structuren

Om goed te kunnen programmeren is een aantal vaardigheden belangrijk. U moet allereerst vertrouwd zijn met de taalconstructies van de programmeertaal waarin u programmeert en u moet in staat zijn om uw programma op een logische en heldere manier te structureren in deelcomponenten. Aan deze vaardigheden wordt in de cursussen Objectgeoriënteerd programmeren in Java 1 en Objectgeoriënteerd programmeren in Java 2 ruime aandacht besteed. In deze cursussen wordt echter relatief weinig aandacht besteed aan algoritmen en de datastructuren waarop deze algoritmen werken. U kunt hierbij denken aan methoden en technieken om gegevens op te slaan, snel op te zoeken, te sorteren, of op een efficiënte manier een optimale weg te vinden in een netwerk. In deze cursus wordt een overzicht gegeven van de datastructuren waarmee gegevens kunnen worden vastgelegd en van de bijbehorende algoritmen.
Na drie inleidende hoofdstukken over ontwerpprincipes en analysetechnieken worden in negen hoofdstukken de basisdatastructuren (en de hierop werkende algoritmen) uit de informatica behandeld: stapels (stacks), wachtrijen (queues), rijen (sequences), bomen, prioriteitswachtrijen (priority queues), verzamelingen, grafen en gewogen grafen. Ook wordt aandacht besteed aan recursie. De algoritmen worden in veel gevallen gepresenteerd in een taalonafhankelijke pseudocode; daarnaast wordt regelmatig (een deel van) de implementatie in Java getoond. Behalve de behandeling van de algoritmen zelf wordt ook de nodige aandacht besteed aan de analyse van algoritmen, in het bijzonder om te kunnen voorspellen hoeveel tijd een algoritme kost voor een probleem van een bepaalde omvang. Een zelfde soort analyse wordt gebruikt voor het bepalen van het ruimtebeslag van de datastructuren waarop de algoritmen werken. Voor deze analyses is een enigszins wiskundige benadering noodzakelijk. Aan het eind van de cursus heeft u een overzicht gekregen van en een inzicht in de standaarddatastructuren en -algoritmen.
Gedistribueerd Programmeren met Java

Afstand is in de moderne maatschappij geen barriŤre meer voor samenwerking en communicatie tussen computers. In de cursus Distributed computing staat het ontwikkelen van gedistribueerde netwerktoepassingen centraal. De cursus geeft een overzicht van de belangrijkste basistechnieken voor gedistribueerd programmeren: sockets, HTTP-protocol, CGI-scripts, Java-servlets en remote objecten. Daarnaast komen ook een aantal gevorderde technologieŽn aan de orde zoals Message Queue System en Mobile Agents. De rode draad door de cursus is een indeling in paradigma's op conceptueel niveau waarbij het verschil in abstractieniveau een rol speelt.
Logica & Informatica

Van oudsher is logica de studie van het correct redeneren. Al in de klassieke oudheid hield men zich bezig met het analyseren van de structuur van redeneringen. Ook nu nog kan logica een belangrijk hulpmiddel zijn wanneer we de correctheid van een redenering willen onderzoeken. Logica wordt dan ook toegepast in tal van wetenschappen zoals taalkunde, filosofie en wiskunde. Een belangrijk recent toepassingsgebied is de informatica.
De cursus bestaat uit twee blokken.
In het eerste blok wordt een formele taal, de propositielogica, geÔntroduceerd waarmee de structuur van redeneringen zichtbaar gemaakt kan worden. Zo kan 'waar rook is, is vuur' vertaald worden in r->v. Een formele taal wordt pas zinvol als de betekenis (semantiek) van deze taal is vastgelegd. De propositielogica maakt hiervoor gebruik van waarheidstabellen. De semantiek stelt ons in staat om te definiŽren wanneer een formule een geldig gevolg is van een andere formule. Met behulp van semantische tableaus kan op een tamelijk efficiŽnte manier de geldigheid van een gevolgtrekking gecontroleerd worden. Naast deze semantische aanpak leert u in dit blok ook om met behulp van een axiomatisch systeem afleidingen te maken. Traditioneel kent de propositielogica slechts twee waarheidswaarden: waar en onwaar. In praktische situaties volstaan deze twee waarden lang niet altijd. Door de waarheidswaarden uit te breiden met bijvoorbeeld de waarde 'onbekend' of 'ongedefinieerd' ontstaat een meerwaardige logica. Dit blok sluit af met een casus over meerwaardige logica.
Om beweringen waarin objecten, eigenschappen van objecten en variabelen een rol spelen te analyseren, is een rijkere taal nodig: die van de predikaatlogica. Deze taal staat centraal in het tweede blok van de cursus. Ook van de predikaatlogica wordt zowel de semantiek als een axiomatisch bewijssysteem uitgelegd. De cursus behandelt twee toepassingen van de predikaatlogica binnen de informatica. De eerste toepassing is gericht op imperatieve talen. U leert hoe 'Hoare-calculus' gebruikt kan worden om de correctheid van programma's te bewijzen. Bij het tweede onderwerp, logisch programmeren, maakt u kennis met algemene resolutie en stellingbewijzen met behulp van skolemiseren. Met de aangeleerde technieken kunt u onder meer de correctheid van een eenvoudig Java-programma aantonen en de achtergronden verduidelijken bij het functioneren van een Prolog-programma. Deze twee onderwerpen worden als casus behandeld bij de betreffende theorie.