TENTAMEN INFORMATIESYSTEMEN (212010) 6 april 2006, 9:00–12:30 uur
BELANGRIJK Dit tentamen bestaat uit 3 opgaven. Voor het beantwoorden van opgave 1 en 2 neemt u het gebruikelijke tentamenpapier, maar U dient iedere opgave op een apart blad te maken (ten behoeve van het nakijken wordt het ingeleverde werk gesplitst). Voor opgave 3 verwijdert u het nietje en gebruikt u de antwoordbladen die aan het eind van dit tentamen zijn opgenomen. Vul Uw naam in op alle antwoordbladen die U inlevert.
Casusbeschrijving voor opgave 1 en 2 Het reisbureau Actieve Reizen organiseert groepsreizen met bestemmingen in verschillende Europese landen. Alle reizen zijn meerdaagse trektochten. Er zijn twee soorten: wandeltochten en kanotochten. De lengte varieert van een paar dagen tot een paar weken. Als een tocht populair is wordt ze meerdere keren per jaar aangeboden. Bijvoorbeeld de wandeltocht “in de sporen van Voskuil” door het hoogland van Auvergne wordt zes keer per jaar gehouden, en is vrijwel altijd volgeboekt. Het komt ook voor dat een tocht niet bevalt of weinig geboekt wordt, dan komt zo’n tocht het volgende jaar niet meer terug in het programma. Er is een klassificatiesysteem om de moeilijkheidgraad van de tochten aan te geven: oplopend van één ster (geschikt voor jong en oud) tot zeven sterren (alleen voor deelnemers die over een zeer goede lichamelijke conditie beschikken). De precieze betekenis van de sterren staat uitvoerig omschreven op de website van Actieve Reizen. Actieve Reizen organiseert onderdak (in tenten of eenvoudige pensions), reisleiding, en de heen- en terugreis vanuit Nederland naar het gebied waar de trektocht wordt gehouden. Omdat vrijwel iedereen tegenwoordig toegang heeft tot Internet heeft de directie van Actieve Reizen besloten de boekingen in het vervolg alleen nog af te handelen via een webinterface. Daartoe moet het informatiesysteem van het reisbureau vernieuwd worden. Hierbij zijn de volgende punten van belang. •
Van iedere tocht wordt in het systeem opgenomen: naam van de tocht, naam van de streek, type onderdak, aantal dagen, moeilijkheidsgraad, maximaal en minimaal aantal deelnemers. Bij wandeltochten wordt bovendien opgenomen: maximale stijging op één dag. Bij iedere kanotocht is er een verhuurbedrijf dat zorg draagt voor de kano’s. In streken waar meerdere tochten zijn wordt meestal gebruik gemaakt van hetzelfde verhuurbedrijf. Van het kanoverhuurbedrijf worden naam, adres, plaats, telefoonnummer en naam van de eigenaar opgeslagen.
•
Aan het begin van het jaar worden de benodigde gegevens voor alle reizen van dat jaar door een medewerker van Actieve Reizen in het systeem ingevoerd, waarbij de tochtgegevens worden aangevuld of aangepast als dat nodig is. Voor iedere reis wordt een begindatum opgenomen (de einddatum hoeft niet apart te worden ingevoerd, deze is af te leiden uit begindatum en reisduur). Ook wordt de prijs per persoon vastgelegd. (De prijs voor een tocht is niet altijd hetzelfde. Bij sommige accomodaties zijn er verschillen tussen hoog- en laagseizoen; dit wordt in de prijs doorberekend. Ook is er jaarlijks een inflatiecorrectie.)
•
Iedere reis heeft een reisleider. Meestal staat aan het begin van het jaar nog niet vast welke reisleider aan welke reis worden toegewezen, een medewerker van Actieve Reizen voert dit op een later tijdstip in. Van iedere reisleider wordt opgenomen: naam, adres, woonplaats, telefoonnummer, en mobiel telefoonnummer waarop deze tijdens de reis te bereiken is. 1
•
Een (potentiële) deelnemer aan een reis kan op de website informatie opvragen en zien hoeveel plaatsen er nog vrij zijn voor de door hem/haar gewenste reis. Is er nog plaats, dan kan een deelnemer een boeking voor die reis maken door het invullen van een webformulier. Op het formulier kunnen de gegevens van maximaal 5 personen worden ingevuld. Degene die het invult geldt als contactpersoon en dient er ook voor te zorgen dat de rekening betaald wordt. Van ieder deelnemer dient te worden opgegeven: naam, adres, woonplaats, nationaliteit, geboortedatum, geslacht; van de contactpersoon ook e-mailadres. Bij een boeking d.m.v. het webformulier krijgt de contactpersoon onmiddelijk een bevestiging, met daarin een boekingsnummer.
•
Binnen 14 dagen na boeking dient een aanbetaling van 15 % van de totale prijs te zijn overgemaakt, anders vervalt de boeking. Het resterende bedrag dient uiterlijk 3 weken voor aanvang van de reis betaald te zijn. Als een maand voor aanvang van de reis deze betaling nog niet binnen is, krijgt degene die de reis geboekt heeft een e-mail ter herinnering. Wordt het geld niet op tijd overgemaakt, dan vervalt de boeking en krijgt de deelnemer evt. de aanbetaling terug.
•
Een reis annuleren kan niet d.m.v. het webformulier, maar alleen schriftelijk of telefonisch bij het kantoor van Actieve Reizen. Een medewerker voert de annulering dan in het systeem in. Bij annulering is een zeker bedrag verschuldigd, de hoogte daarvan hangt af hoe lang vantevoren geannuleerd wordt. Het betaalde bedrag met aftrek van annuleringskosten wordt door Actieve Reizen teruggestort (om het eenvoudig te houden gaan we ervan uit dat de annuleringskosten nooit hoger zijn dan het bedrag dat al is betaald).
•
De directie van Actieve Reizen behoudt zicht het recht voor een reis af te zeggen, bijvoorbeeld als het minimumaantal deelnemers niet gehaald wordt. Gelukkig komt dit slechts sporadisch voor. In dat geval krijgen de deelnemers onmiddelijk bericht. Ook krijgt iedereen terstond zijn geld terug, plus een extra bedrag voor het ongemak, conform de compensatieregeling die vermeld staat in de reisvoorwaarden.
Opgave 1
[75 punten]
Maak een class diagram voor de hierboven beschreven casustekst.
Opgave 2
[75 punten]
(Begin deze opgave op een nieuw vel papier)
(a) Maak een use case diagram voor het hierboven omschreven informatiesysteem. (b) Maak BCE-diagrammen voor alle use cases. N.B.: Het staat u vrij een event list en/of use case list te maken, maar hiervoor krijgt u geen punten. SCHRIJF DUIDELIJK!
2
Bijlage bij opgave 1 en 2: overzicht van notaties
Functiemodellering
meta-notatie: [ ... ] Facultatief (mag weggelaten worden) .. | .. Keuze uit één van de genoemde alternatieven
Eventlist
Gegevensmodellering Class en Associatie
Gebeurtenis
Invoer
Actie
E1: Actor doet iets
Gegevens
E2: ...
...
Actie van het systeem ...
Use case Directe Uitvoer Output
...
Indirecte Uitvoer [later te generen output] ...
Boundary class, Controller class, Entity class Drie- of meerwaardige associatie
Multipliciteit
Associatieclass Create, write, read, read and write an entity; output
Generalisatie
Constraint
Toestandsmodellering
Casusbeschrijving voor opgave 3 Internetbedrijf ‘hallo.nl’ biedt via haar website een datingservice voor mensen die op zoek zijn naar een partner. Dit bedrijf wil een geautomatiseerd informatiesysteem laten ontwikkelen ter ondersteuning van haar activiteiten. Voor dit informatiesysteem zijn de volgende feiten van belang: •
Willekeurige bezoekers van de website kunnen (gratis) gebruik maken van de functie ‘snel zoeken’. Hiertoe vult een bezoeker een klein formulier in op de homepage van hallo.nl: zijn/haar eigen geslacht, of hij/zij op zoek is naar een man/of vrouw en de gewenste leeftijdscategorie. Het systeem produceert vervolgens een lijst met (een selectie uit) leden van hallo.nl van het gewenste geslacht en leeftijdscategorie. De bij ‘snel zoeken’ geproduceerde lijst bevat per persoon voornaam, leeftijd, woonplaats en foto.
•
Om te kunnen communiceren met een lid moet de bezoeker zelf lid worden van hallo.nl. Communiceren is in principe niet gratis. hallo.nl kent twee soorten leden: ‘prepaid members’ en ‘full members’. Een ‘prepaid member’ koopt credits die hij kan gebruiken om contact te leggen met andere leden. Voor het versturen van een bericht wordt één credit verbruikt. Een ‘full member’ wordt voor een aantal maanden lid en betaalt daar een vast bedrag voor. Een ‘full member’ kan, zolang hij/zij lid is, onbeperkt van de communicatiefaciliteiten gebruik maken zonder bij te betalen (credits zijn voor hem/haar dus niet van belang). Van een ‘full member’ wordt de einddatum van de lidmaatschapsperiode vastgelegd.
•
Bezoekers kunnen zich via de website aanmelden als lid. Daarbij moeten een aantal gegevens worden ingevuld (zie hieronder). Dit is op zichzelf gratis, en zij krijgen ook nog eens vijf credits cadeau, dus het nieuwe lid kan meteen communiceren als ‘prepaid member’. Wel moet het nieuwe lid binnen twee weken credits bijkopen of ‘full member’ worden. In de eigen administatie beschouwt hallo.nl een nieuw lid als ‘aspirant-lid’. Om te zorgen dat het bestand niet te zeer vervuilt (men kan zichzelf of anderen voor de gein inschrijven) worden een aspirant-lid – tenzij hij/zij intussen credits heeft bijgekocht of ‘full member’ is geworden – twee weken na inschrijving uit de database verwijderd. Het aspirant-lid krijgt hiervan geen bericht.
•
Om zich als lid op te geven, moet een bezoeker een uitgebreid webformulier invullen dat bestaat uit twee zogenaamde profielen: het eigen profiel en het zoekprofiel. o Het eigen profiel bevat het geslacht, een voornaam, de woonplaats en de geboortedatum van het lid, alsmede allerlei verdere gegevens, zoals opleiding, hobbies, werk, etc. M.b.t. deze verdere gegevens beperken we ons hier tot de opleiding. Gevens over hobbies, werk, etc. hoeven niet in het model te worden opgenomen. In het eigen profiel kan een foto worden opgenomen, maar dit is niet verplicht. o Het zoekprofiel bevat gegevens over de voorkeuren m.b.t een partner: geslacht, leeftijdscategorie, maximale afstand tussen de woonplaats van de partner en de eigen woonplaats, opleiding.
•
Bij het aanmelden geeft de bezoeker tevens een password op. De gebruikersnaam wordt door het systeem aangemaakt door de opgegeven voornaam te combineren met een volgnummer, bijv. “piet176”. Is de aanmelding susccesvol verlopen, dan slaat het systeem de gegevens op en geeft de bezoeker zijn/haar gebruikersnaam.
•
Voor het opgeven van de opleiding en de leeftijdscategorie moet gekozen worden uit bepaalde vaste waarden. Een medewerker van hallo.nl voert de opleidingen en leeftijdscategorieën in. o Voor het vastleggen van de opleiding (in beide profielen) moet gekozen worden uit de lijst van waarden (bijv. ‘HBO’, ‘universitair’, ...). In het eigen profiel mag hoogstens één opleiding worden vastgelegd, in het zoekprofiel een willekeurig aantal (evt. nul). o Voor het vastleggen van de gewenste leeftijdscategorie in het zoekprofiel moet een willekeurig aantal keuzes (minimaal één) gemaakt worden uit een lijst van leeftijdscategorieën (bijv. ’1820’,‘20-25’, ...). Elke leeftijdscategorie heeft een boven- en ondergrens.
•
Een lid van hallo.nl krijgt twee ‘mailboxes’: één waarin de berichten staan die dit lid verstuurd heeft, en één met ontvangen berichten. Deze mailboxes worden door het systeem beheerd.
•
Een lid kan bij volgende bezoeken aan hallo.nl inloggen met zijn/haar gebruikersnaam en password. Het systeem genereert dan een persoonlijke homepage voor deze persoon, met daarop het aantal nog niet gelezen berichten in zijn/haar mailbox voor ontvangen berichten. Als er onlangs nieuwe leden bijgekomen zijn die aan het zoekprofiel van dit lid voldoen wordt dat ook op de persoonlijke homepage gemeld.
4
•
Vanuit de persoonlijke homepage kan het lid een aantal dingen doen: o een lijst opvragen van ontvangen berichten; o een bericht versturen; o een lijst opvragen van leden die aan zijn/haar zoekprofiel voldoen; o zijn/haar zoekprofiel wijzigen; o credits of een aantal maanden ‘full membership’ bijkopen. Hiervoor hoeft een lid alleen het gewenste aantal credits, resp. het gewenste aantal maanden door te geven; we laten de betaling buiten beschouwing.
•
Als een ‘prepaid member’ een bericht verstuurt, dan controleert het systeem eerst of dit lid daarvoor nog voldoende credits heeft. Het door het lid opgegeven bericht wordt vastgelegd (de tekst van het bericht is een string), in de inbox van de geadresseerde (altijd een lid van hallo.nl) geplaatst en in de outbox van de afzender geplaatst, en indien van toepassing wordt het aantal credits van de afzender met één verminderd.
Opgave 3: Completeren van de modellen [50 punten] Bij deze opgave moeten de tabellen worden ingevuld die u aantreft op de laatste bladzijden van dit opgavenpakket. Maak de opgave op deze bladzijden (en vergeet niet Uw naam op ieder blad te vermelden). Het is niet de bedoeling dat U de gegeven onvolledige diagrammen weer inlevert. Beschouw de (mogelijk) incomplete gebeurtenissenlijst (Tabel 1), incompleet state transition diagram (Figuur 1), incompleet class diagram (Figuur 2), incompleet use case diagram (Figuur 3), en incomplete BCE diagrammen (Figuur 4–6) op de volgende pagina’s, die gebaseerd zijn op de casusbeschrijving. Voer vervolgens de onderstaande controles uit. N.B. bij iedere controle gebruikt u de genoemde diagrammen in de vorm waarin ze staan afgedrukt. Bent u op grond van andere controles tot de conclusie gekomen dat een diagram uitgebreid zou kunnen worden, dan hoeft u de voorgestelde uitbreiding niet in de gevraagde controle te betrekken. Geef bij iedere controle alle mogelijkheden die volgens u van toepassing zijn. Soms ontbreken meerdere elementen. Het kan ook voorkomen dat een controle niets oplevert. a. Geef aan op grond van welke actor en/of use case van het use case diagram aan het BCE diagram een actor, een boundary class, een control class, en/of een entity class moet worden toegevoegd. b. Geef aan op grond van welke actor, een boundary class, een control class, en/of een entity class van het BCE diagram aan het use case diagram een actor en/of use case moet worden toegevoegd. c. Geef aan op grond van welke gebeurtenis van de eventlist aan het BCE diagram een actor, een boundary class, een control class, en/of een entity class moet worden toegevoegd. d. Geef aan op grond van welke actor, een boundary class, een control class, en/of een entity class van het BCE diagram aan de eventlist een gebeurtenis moet worden toegevoegd. e. Geef aan op grond van welke gebeurtenis van de eventlist aan het state transition diagram een state en/of transition moet worden toegevoegd. f. Geef aan op grond van welke state en/of transition van het state transition diagram aan de eventlist een gebeurtenis moet worden toegevoegd. g. Geef aan op grond van welke class, relationship en/of attribuut van een class in het class diagram, aan het BCE diagram een actor, een boundary class, een control class, en/of een entity class moet worden toegevoegd. h. Geef aan op grond van welke actor, een boundary class, een control class, en/of een entity class van het BCE diagram, aan het class diagram een class, een relationship, en/of een attribuut van een class moet worden toegevoegd. i. Geef aan op grond van welke class, een relationship, en/of een attribuut van een class van het class diagram, aan het state transition diagram een state en/of transitie moet worden toegevoegd. j. Geef aan op grond van welke state en/of transition van het state transition diagram aan het class diagram een class, een relationship, en/of een attribuut van een class moet worden toegevoegd.
SCHRIJF DUIDELIJK!! (casus gebaseerd op www.onehello.nl)
5
Gebeurtenis
Input
Medewerker hallo.nl legt categorieën categorieën vast opleiding en leeftijd Bezoeker gebruikt globale functie ‘snel zoeken’ zoekgegevens Aspirant-lid laat – aanmelding verlopen Lid vraagt lijst met aanvraag ontvangen berichten berichten Lid wijzigt zoekprofiel gegevens zoekprofiel Lid wijzigt lidmaatschap
aantal credits / aantal maanden
Actie
Directe uitvoer
Indirecte uitvoer
vastleggen gegevenscategorieën
–
–
‘snel zoeken’
lijst met passende personen –
–
verwijderen aspirant-lid produceren lijst met berichten verwerken wijziging zoekprofiel verwerken wijziging lidmaatschap
–
lijst met berichten –
geschikte personen
(bevestiging)
–
Tabel 1: Incomplete eventlist voor internet dating service
nieuw lid meldt zich aan
aspirant− lid lid wijzigt lidmaatschap
lid wijzigt lidmaatschap
lid verzendt bericht
prepaid member
full member
lid wijzigt lidmaatschap
lid wijzigt lidmaatschap
Figuur 1: Incompleet state transition diagram voor een lidmaatschap van hallo.nl
6
Opleidingssoort
Leeftijdscategorie
naam: String
ondergrens: Integer bovengrens: Integer
0..1 * gewenste_leeftijdscategorie
1..*
heeft_opleiding gewenste_opleiding * Lid gebruikersnaam: String password: String geslacht: String geboortedatum: Date foto: Image woonplaats: String soort_lid: String
*
*
Zoekprofiel heeft_zoekprofiel 1
1
geslacht: Sting maximale_afstand: Integer
soort_lid <
> c Prepaid member
Full member
aantal_credits: Integer aspirant_lid: Boolean
einde_lidmaatschap: Date
Figuur 2: incompleet class diagram voor internet dating service
medewerker hallo.nl
Vastleggen gegevenscategorieen
’Snel zoeken’
bezoeker Vastleggen aanmelding <> Klok Verwijderen aspirant−lid
Figuur 3: incompleet use case diagram voor internet dating service
7
(deze pagina is leeg)
8
<>
aanmeldingsgegevens
Lid <> WWW Bezoeker
gebruikersnaam
Vastleggen aanmelding Zoekprofiel
<> Klok Verwijderen aspirant−lid aantal credits/ aantal maanden
Lid
WWW Lid
Verwerken wijziging lidmaatschap
gebruikersnaam + password
Lid
WWW Lid
persoonlijke homepage
Zoekprofiel
verwerken inloggen
Bericht
Lid <> bericht− gegevens
WWW
Lid
Bericht
Verzenden berichten
(ander) Lid
zoekopdracht
Lid Lid
lijst met geschikte personen
WWW
verwerken zoekwensen Zoekprofiel
Figuur 4: incomplete BCE-diagrammen voor de uses cases in Figuur 3
9
(deze pagina is leeg)
10
Invulblad opgave 3
tentamen Informatiesystemen 6 apr 2006
Stud.nr.__________ Naam___________________________________
a) Controle BCE diagram op grond van use case diagram
Actor
Op grond van Use case
Actor
Boundary class
Toevoegen Control class
Entity class
b) Controle use case diagram op grond van BCE diagram
Actor
Boundary class
Op grond van Control class
Entity Class
Actor
Toevoegen Use case
11
c) Controle BCE diagram op grond van eventlist Op grond van Event
Actor
Boundary class
Toevoegen Control class
Entity class
d) Controle eventlist op grond van BCE diagram
Actor
12
Boundary class
Op grond van Control class
Toevoegen Entity class
Event
Invulblad opgave 3
tentamen Informatiesystemen 6 apr 2006
Stud.nr.__________ Naam___________________________________
e) Controle state transition diagram op van grond eventlist Op grond van Event Transitie
Toevoegen van Toestand
f) Controle eventlist op grond van state transition diagram Op grond van Transitie naar Toestand
g) Controle BCE diagram op grond van class diagram Op grond van Class Relationship Attribuut Actor
naar Toestand
Toevoegen Event
Boundary class
Toevoegen Control class
Entity class
13
h) Controle class diagram op grond van BCE diagram Op grond van Actor Boundary class Control class Entity class
i) Controle state transition diagram op grond van class diagram: Op grond van Class Attribuut Relationship
j) Controle class diagram op grond van state transition diagram: Op grond van Transitie naar Toestand Class
14
Class
Transitie
Toevoegen Relationship
Toevoegen van Toestand
Toevoegen Relationship
Atrribuut
naar Toestand
Attribuut