|
Avdeling for ingeniørutdanning
Høgskolen i Oslo
|
Prosjektrapport
Systemutvikling (lo138A)
Høst
2011
Oslo
Båtutleie - Bookingsystem
Gruppe
4
Forfattere:
Mjølund, Espen, s171673
Bache, Robert Bicanic, 168499
Karlsen, Marius Kværner, s171667
Bjørnerud, Jonas, s171676
Dato: 25.11.2011
Denne
rapporten omhandler prosjektarbeidet vi i gruppen har utviklet og gjennomført i
faget Systemutvikling. Rapporten dekker hele prosessen som inngår i et
prosjektarbeid: fra ide og planleggingsstadiet, gjennom krav og frem til
analyse og design. Rapporten dokumenterer alt arbeidet vi utført, gjennom å
vise hvilke fremgangsmåter vi har brukt, valgene vi har foretatt og resultatet
vi sitter igjen med ved slutten av prosessen.
Målet
for prosjektet var å utvikle et system for en bedrift, Oslo båtutleie, som
dekker de oppgaver og behov systemets brukere har for å utføre sine daglige
oppgaver. Gjennom prosjektrapporten skal vi dokumentere at vi har oppnådd
målene vi har satt relatert til disse behovene.
sammendrag. 2
Innhold. 3
1 Introduksjon.. 5
1.1 Bakgrunn. 5
1.2 Mål for Prosjektet. 6
1.3 Omfang av løsning. 7
1.4 Suksesskriteria. 7
1.5 Antagelser. 8
2 tilpasning av utviklingsmodell.. 9
2.1 Beskrivelse av utviklingsmodell. 9
2.2 Begrunnelse for tilpasninger. 9
3 Analyse.. 13
3.1 Kravspesifikasjon. 13
3.2 Use Case Modell. 15
3.2.1 Use case diagram.. 15
3.2.2 Detaljerte Use case beskrivelser 16
3.3 Domenemodell. 19
3.4 aktivitetsdiagram.. 20
4 Design.. 25
4.1 Klassediagram.. 25
4.2 Sekvensdiagram.. 27
4.3 Logisk arkitektur. 38
4.4 Brukergrensesnitt. 39
5 Vurdering.. 42
5.1 Vurdering av foreslått løsning. 43
5.2 vurdering av valg utviklingsmodell. 44
5.3 Vurdering av eget prosjektarbeid. 46
6 Konklusjon.. 47
7 Litteraturliste.. 49
VERSJONSLOGG
|
Versjon
|
Dato
|
Forfatter(e)
|
Beskrivelse av versjon
|
|
0.3
|
12.10. 2011
|
EM, RBB, MKK, JB
|
-Første utgave av prosjektrapport
med kapittel 1-2, samt 3.1 & 3.2
utfylt.
|
|
0.6
|
03.11.2011
|
EM, RBB, MKK, JB
|
-Generelle rettelser etter
tilbakemelding fra veileder
-Utfylt kapittel 3 og 4 (grunnleggende
modellering)
|
|
1.0
|
25.11.2011
|
EM, RBB, MKK, JB
|
-Ferdig versjon.
-Generelle rettelser etter
tilbakemelding fra veileder
-Utfylt sammendrag, kapittel 3, 4, 5, 6
& 7.
|
Oslo Båtutleie er et
nystartet firma som spesialiserer seg på utleie av seilskuter og større
motorbåter. Kundegruppen består i hovedsak av firma og organisasjoner som skal
på gruppeturer (for eksempel firmafester og events). De blir også kjørt sightseeing
i perioder. Privatpersoner har også mulighet til å bestille turer og dette er
populært, for eksempel til bryllupsfest eller lignende.
I oppstartsfasen har firmaet
basert seg på bruk av programmene i Microsoft Office-pakken til å organisere
den daglige driften. De ansattes arbeidsoppgaver, kort oppsummert, dreier seg
om mail og telefonkorrespondanse med kunder og leverandører, oppdatering av
kundeinformasjon, utforming av tilbud og leieavtaler samt oppretting av
bookinger. I tillegg til dette har daglig leder ansvar for oppretting av
arbeidsavtaler, vedlikehold av ansattlister samt kjøring av lønninger og
generelt regnskap for bedriften. Bedriften benytter et eget regnskap og
økonomisystem.
Bedriften bruker Microsoft
Word til å skrive kontrakter og tilbud, Excel til ansattlister og oversikt over
båter og priser. Til lagring av kundeinformasjon og epost benyttes Outlook.
Kalenderfunksjonen i samme program benyttes også til å plotte inn båtbookinger.
Hver båt har sin egen kalender.
Fakturaer må legges manuelt
inn i bedriftens økonomisystem.
Etter hvert som driften har
eskalert har overnevnte løsning vist seg å være lite oversiktlig og tungvint,
og dette har skapt mye problemer i det daglige arbeidet:
- Bedriftens
IT-ansvarlig estimerer at han på ukentlig basis bruker opp til 25 timer på
å hjelpe til med problemer som oppstår i forbindelse med utføring av
ordinære arbeidsoppgaver.
- De
ansatte føler selv at de bruker uforholdsmessig mye tid på
datautfordringer, og at dette går ut over service over for bedriftens
kunder.
- Det
har også blitt en betydelig mengde feilbookinger grunnet at informasjon må
bli manuelt overført mellom de forskjellige programmene, og blant annet
dette har ført til at andelen
misfornøyde kunder i første driftshalvår har klatret til 25% (av
antall bookinger), ut i fra undersøkelser bedriften har gjort.
Oslo Båtutleie har på
bakgrunn av dette besluttet å anskaffe et system som er skreddersydd bedriftens
bruksområder. Bedriften ønsker at alle oppgavene som nevnt over skal kunne
utføres ved hjelp av et enhetlig system, med unntak av det som faller inn under
økonomisystemets område.
Prosjektets mål er å skreddersy et datasystem
tilpasset Oslo Båtutleies behov i den daglige driften. Datasystemet skal være
en enhetlig applikasjon som erstatter alle de separate programmene som bedriften per dags dato er avhengig av. Dette
dreier seg om programvare for tekstredigering, regneark, kalender, Epost,
kontakter.
Systemet skal effektivisere hverdagen for
de ansatte, få ned feilprosenten knyttet til registrering av data, og sørge for
mer fornøyde kunder:
·
Tiden
IT-ansvarlig bruker på å assistere de ansatte med problemløsing på ukentlig
basis skal reduseres med 50% innen 3 måneder etter at systemet er satt i drift.
·
Tiden
de ansatte bruker på tungvint arbeidsflyt og datatekniske problemer på ukentlig
basis skal reduseres med 30% innen 3 måneder etter at systemet er satt i drift.
·
Antall
feilregistreringer av data forårsaket av ansatte skal reduseres med 90% innen 3
måneder etter at systemet er satt i drift.
·
Andelen
misfornøyde kunder på grunn av feil forårsaket av dataproblemer skal reduseres
med 85% innen 3 måneder etter at systemet er satt i drift.
Tidsaspekt.
Ferdig produkt i henhold til omfang (kap.
1.3) skal være klart innen 25. November
2011
Vi
vil innledningsvis gjennomføre en kravanalyse for å kartlegge kundens behov til
funksjonalitet i systemet. Dette vil gjennomføres ved diskusjon innad i gruppen
for å forsøke å tilegne oss en god forståelse av oppdragsgivers domene, samt å
prøve å sette oss inn i arbeidssituasjonen til de ansatte.
På
grunnlag av kravanalysen vil vi utvikle en kravspesifikasjon som lister opp
funksjonelle og ikke-funksjonelle krav til systemet. Kravspesifikasjonen vil
danne grunnlag for et forslag til løsning som presenteres for kunden. Ut i fra
kundens tilbakemeldinger til forslaget vil dette enten bli satt i utvikling,
eller bli endret dersom dette er nødvendig.
Løsningen
vil bli utviklet og dokumentert i en prosjektrapport, men vil ikke bli
implementert i dette prosjektet. Det vil altså ikke foreligge programkode ved
ferdigstilt prosjekt. Unntaket er pseudokode, som antakelig vil benyttes for å
demonstrere ulike funksjoner.
Hva skal til for at vi lykkes med dette
prosjektet?
·
Vi
må jobbe jevnt med oppgaven hele tiden. Ellers er det lett å komme på
etterskudd i forhold til leveringer osv.
·
Alle
gruppemedlemmene må sette av nok tid til å utføre de oppgavene som er blitt
utdelt.
·
God
prosjektledelse
·
God,
åpen dialog mellom gruppemedlemmer.
·
God
dialog med kunden gjennom hele prosjektet.
Følgende
antagelser og begrensninger er gjort for arbeidet i prosjektet:
Antagelser:
- Vi antar at oppdragsgiver
har nødvendig maskinvare og infrastruktur tilgjengelig til å kjøre løsningen.
Dette innebærer PC-er til de ansatte som skal bruke systemet, server til å
kjøre web-server og database med tilfredsstillende backup-løsning, samt
lokalt nettverk og ordinær internett-tilknytning.
- Vi antar
at Oslo Båtutleie stiller med nødvendige ressurspersoner i forbindelse med
kravanalyse
Begrensninger:
- Løsningen vil ikke bli
implementert (ingen programmering)
- Vår hovedprioritet er å
utvikle og få frem funksjonaliteten i de deler av systemet som brukeren
vil jobbe direkte mot i det daglige.
- Database-tilknytning er noe
nedprioritert av tidsmessige årsaker og vil ikke detaljeres i stor grad
- Tilknytning til eksternt
regnskap/økonomisystem blir ikke vektlagt.
Vi skal i prosjektet benytte utviklingsmodellen
Unified Process (UP). Dette er en mye brukt utviklingsmodell innen
programutvikling.
UP er en iterativ og
inkrementell modell. Dette betyr at den lar oss utvikle løsningen et steg om
gangen, for så å gå tilbake å revurdere og videreutvikle det vi allerede har
gjort, i tillegg til å gradvis utvide funksjonaliteten til løsningen.
Modellen er delt inn
i fire faser: idéfasen, utdypningsfasen, konstruksjonsfasen, og overgangsfasen.
Her følger litt info om disse:
Idéfasen.
Dette er den innledende fasen i utviklingsarbeidet. Fasen er kort, gjerne av en
til to ukers varighet. Her foretas valg i forhold til prosjektomfang. Man
foretar lønnsomhetsvurderinger. En overordnet kravspesifikasjon for løsning vil
også inkluderes her, og grunnleggende modellering i form av enkle Use
Case-modeller er også med. Resultatet av
denne fasen presenteres for oppdragsgiver som forhåpentligvis gir klarsignal
for å fortsette arbeidet.
Utdypningsfasen.
Dette er en analysefase. Man jobber videre med detaljering av kravspesifikasjon,
detaljering av Use Case-modeller, samt foretar øvrig modellering som danner
grunnlag for arbeidet som skal gjøres i konstruksjonsfasen. Dette inkluderer
typisk aktivitetsdiagrammer, domenemodell, sekvensdiagrammer, klassediagram med
mer.
Konstruksjonsfasen.
Dette er fasen der design og programmeringen foregår. Fasen består av flere
iterasjoner som inneholder detaljanalyse, design, implementering og testing.
Overgangsfasen. Denne
fasen inneholder ferdigstilling av prosjektet. Her dreier mye seg om
kvalitetssikring, brukertrening, idriftsettelse, og tilpasning til brukerne.
Blant UP’s sterkeste
sider er muligheten til å tilpasse modellen etter prosjektets behov. UP er
skalerbar og utviklerne bestemmer selv hvor omfattende krav til dokumentasjon og
modellering skal være. Et lite prosjekt, som det vi jobber med her, behøver
altså ikke generere like mye artefakter og dokumentasjon, og behøver heller
ikke inneholde de samme disiplinene, som et stort prosjekt vil kreve.
UP gir oss muligheten
til å kunne gå bakover i prosjektet og evaluere hva vi har gjort tidligere og
om nødvendig gjøre forbedringer. Dette er hensiktsmessig da man ofte får en
bedre og bedre forståelse av problemstilling etter hvert som man jobber seg
nedover i et prosjekt. Man vil da ofte se nødvendigheten av å endre på
løsninger man tidligere har designet. Det er også stor sjanse for at kravene
til løsning forandrer seg underveis. Fasene deles i UP opp i iterasjoner, som
er hovedsakelig tidsdefinerte luker der man jobber med definerte oppgaver.
Iterasjonen avsluttes med at man analyserer og vurderer arbeidet som har blitt
gjort, som igjen gir grunnlag for arbeidet som skal utføres i neste iterasjon.
Under er en
illustrasjon som viser en typisk fordeling av aktiviteter over de
forskjellige fasene og iterasjonene:

Figur 2.1.0 Kilde: Wikipedia - http://en.wikipedia.org/wiki/Unified_Process (23.09.2011)
2.2 Begrunnelse for tilpasninger
Da
løsningen i dette tilfelle ikke skal implementeres er det derfor hensiktsmessig
for oss å fokusere på de tre første fasene, altså idéfasen, utdypningsfasen og konstruksjonsfasen.
UP inneholder mange disipliner; forretningsmodellering, krav, analyse, design,
implementasjon, testing og idriftsettelse. Igjen velger vi å fokusere på et
utvalg av disse disiplinene, og begrunnelsen for dette er igjen at vi ikke skal
implementere løsningen i dette prosjektet. Vi holder oss derfor til disiplinene
forretningsmodellering, krav, analyse og design. Da det i prosjektet ikke er
lagt større vekt på lønnsomhetsvurderinger og liknende fjerner vi også
forretningsmodellering og sitter igjen med planlegging, krav, analyse og
design:
Planlegging: Denne disiplinen består i stor grad av innledende
runder med idéstorming, finne ut hva prosjektet skal omhandle og definere en
problemstilling å jobbe ut i fra. I tillegg må vi få på plass brikkene i
prosjektarbeidet. Vi fordeler ansvar og jobber med å få i gang og oppdatere
styringsdokumenter og rammene for prosjektet vårt. Den tyngste jobben blir
gjort innledningsvis i prosjektet, men det må planlegging til underveis i
prosjektet, for eksempel i forkant av nye iterasjoner.
Krav:
Ut i fra prosjektets problemstilling henter vi
ut de nødvendige krav til løsningen vi skal tilby kunden. Vi gjør dette ved å
forsøke å forstå kundens domene, samt sette oss inn i arbeidssituasjonen til de
ansatte i firmaet. Vi bruker Use Case
som et viktig verktøy for å hente ut krav i denne disiplinen. Dette vil
resultere i en kravspesifikasjon. Mye av arbeidet i denne disiplinen blir gjort
innledningsvis, men krav til løsning vil gjerne endres underveis, og vi vil
antakeligvis få en dypere forståelse av problemområdet etter hvert som vi
jobber, og dermed vil denne disiplinen være tilstedeværende gjennom hele
prosjektet.
Analyse: I denne disiplinen jobber vi ut i fra kravene vi
har tilgjengelig og forsøker å forme et system ut i fra dette. Arbeidet
omfatter detaljering av kravspesifikasjon samt modellering. Vi vil jobbe videre
med Use Case-modell, samt produsere domenemodell og aktivitetsdiagram.
Design: I denne disiplinen ser vi nærmere på systemet på
detaljnivå. Vi jobber med hvilke objekter systemet skal bestå av og
samhandlingen mellom disse. Vi vil også se på den logiske arkitekturen til systemet
samt vurdere mulige brukergrensesnitt for løsningen. Vi vil produsere
sekvensdiagram og klassediagram som igjen vil ligge til grunnlag for senere
konstruksjon av løsningen.
Vi
har planlagt en iterasjon i idéfasen, to iterasjoner i fordypningsfasen og to
iterasjoner i konstruksjonsfasen. Vi setter av ca. 2 uker per iterasjon, med
unntak av iterasjon 1, som er ca. 4 uker.
Beskrivelse av iterasjoner i prosjektet:

Figur 2.1.2
Iterasjon 1:
- Planlegging
- Overordnet Use Case
- Overordnet Kravspesifikasjon
- Kvalitetssikring
- Evaluering
Iterasjon 2:
- Re-planlegging
- Detaljert Use Case
- Detaljert kravspesifikasjon
- Overordnet analyse
- Kvalitetssikring
- Evaluering
Iterasjon 3:
- Re-planlegging
- Detaljert analyse
- Overordnet design
- Kvalitetssikring
- Evaluering
Iterasjon 4:
- Re-planlegging
- Detaljert design
- Kvalitetssikring
- Evaluering
Iterasjon 5:
- Detaljert design
- Kvalitetssikring
- Evaluering
Her følger våre krav til
løsningen vi skal lage.
Funksjonelle krav:
· Brukeren
skal kunne foreta en sikker innlogging med brukernavn og passord.
· Brukeren
skal kunne sjekke båtstatus (om båtene er ledige, utleide eller på service.)
· Brukeren
skal kunne oppdatere båt-status (om båtene er ledige, utleide eller på service.)
· En
booket eller reservert båt skal automatisk reserveres i systemet og skal gjøres
utilgjengelig for ny reservasjon i valgte tidsperiode.
· En
booket eller reservert båt skal vises som opptatt i en grafisk kalender med
informasjon om bookingen/reservasjonen i tekst.
· Brukeren
skal kunne se prisliste over alle tilgjengelige tjenester og varer.
· Administrator
skal kunne redigere prisliste.
· Objekter
på prisliste skal kunne legges til på ordre.
· Brukeren
skal kunne sende og lese mail.
· Brukeren
skal kunne legge til en ny kunde i systemet.
· Brukeren
skal kunne redigere informasjon om kunder.
· Administrator
skal kunne oppdatere ansattliste (legge til, endre og slette ansatte)
· En
ordre skal inneholde en kunde, en eller flere båter, tilleggstjenester og
tidspunkt
· En
ordre skal automatisk oppdateres med pris ut i fra hvilke tjenester som legges
til.
· Brukeren
skal kunne overstyre autogenererte priser satt av systemet på en ordre
· Brukeren
skal kunne opprette, endre & slette ordre.
· Brukeren
skal kunne eksportere ordre over til økonomisystemet.
· Brukere
med ekstra tilgang skal kunne administrere databasene via systemet
Ikke-funksjonelle krav:
· Systemet
skal ha en oppetid på mer en 23 timer per døgn.
· Systemet
skal fungere med 30 samtidige brukere uten merkbare endringer i responstid.
· Systemet
(klienter) skal fungere like bra uansett operativsystem, så sant
operativsystemet tilbyr en nettleser som støtter HTML5 og CSS3.
· Systemet
skal ha et lett og oversiktlig brukergrensesnitt.
· Inngangsterskelen
for å bruke systemet skal være lav. Systemet skal være selvforklarende.
· Systemet
skal gi gode tilbakemeldinger på eventuelle feil som måtte dukke opp.
· Systemet
skal være lettdrevent, stabilt, og raskt.
· Systemet
skal avverge eventuelle dobbelt-bookinger, eller om en eksisterende kunde blir
forsøkt opprettet på nytt.
· Systemet
skal være en webapplikasjon som kjøres i en vanlig web-browser og som kan
aksesseres uavhengig av brukerens lokasjon, så lenge det eksisterer en
tilkopling til internett.
·
Systemet skal holde rede på
hvem som har gjort alle endringer.
Her følger et overordnet Use Case-diagram som
modellerer løsningen vi utarbeider.

Figur 3.2.1 –
Overordnet Use Case Diagram for løsningen
Under
følger en detaljert beskrivelse av de to brukstilfellene vi anser som å være de
viktigste når det gjelder funksjonaliteten i løsningen. Dette er ”Opprette
bestilling” og ”legg til kunde”. Disse demonstrerer essensielle funksjoner i et
bookingsystem, og det er sannsynlig at dette vil være de funksjonene de ansatte
bruker mest i løpet av en arbeidsdag.
|
Use-Case Opprette bestilling
|
|
|
Aktør(er) Ansatt
|
|
|
Trigger Ansatt ønsker å
opprette en bestilling etter forespørsel av kunde.
|
|
|
Pre-Betingelser Kunde må være registrert og
eksistere i systemet . Ansatt må være
logget på systemet.
|
|
|
Post-betingelser Bestilling er registrert i systemet
|
|
|
Normal hendelsesflyt 1.
Ansatt finner kunde i systemet.
2. Systemet viser
informasjon om kunden.
3.
Ansatt velger dato, tid, sted.
4.Systemet viser liste over båter.
5. Ansatt velger båt ut ifra
kundens ønsker.
6. Systemet
bekrefter tidspunkt og valg av båt.
7.
Ansatt fyller inn tilleggsinformasjon om bestillingen
(matbestilling,
antall personer med mer).
8. Systemet lagrer
informasjonen og gir den ansatte
en melding om at bestillingen er lagret.
|
|
|
Variasjoner 5. Systemet viser at det ikke
er tilgjengelige båter på ønsket tidspunkt.
5.1 Systemet
avbryter bestillingen.
|
|
|
Resultat Ansatt har opprettet
og lagret bestilling
|
|
|
Relatert
informasjon Ansatt må registrere
kunde / firma med personalia i
databasen før det
kan
opprettes bestilling(er).
|
|
|
|
|
|
Navn:
|
Legge til kunde
|
|
Aktør:
|
Ansatt
|
|
Pre-betingelse:
|
Ansatt er logget på systemet
|
|
Post-betingelse:
|
Kunden er registrert i systemet
|
|
Trigger:
|
Den ansatte skal legge inn ny kunde i systemet
|
|
Normal hendelsesflyt:
|
1. Ansatt oppretter ny kundeoppføring.
2. Systemet ber den
ansatte om å fylle nødvendig informasjon.
3. Ansatt registrer
informasjon om kunden og velger ”lagre”.
4. Systemet legger inn den nye kunden og gir ansatt bekreftelse på ny
kundeoppføring.
|
|
Variasjoner:
|
4. Kunden er registrert i systemet fra tidligere
4.1. Brukstilfelle avbrytes av systemet og ansatt
blir varslet med feilmelding.
|
|
|
Her følger en domenemodell for løsningen
vi lager. Diagrammet viser konseptuelle klasser for domenet vi undersøker, med
relasjoner mellom klassene. Sentralt for modellen er:
·
et
båtregister som inneholder bedriftens båter med all informasjon,
·
et
kunderegister med info om kunder
·
en
prisliste for mulige tjenester
·
en
kalendertjeneste.
Disse
konseptuelle klassene samhandler med ordre-klassen når en bestilling opprettes.

Figur 3.3 - Domenemodell
Lag et aktivitetsdiagram for
hovedflyten i løsningen.
Her følger aktivitetsdiagram for de Use
Casene som er gjennomgått i kapittel 3.2.2, ”Legge til kunde” og ”Opprette
bestilling”. Et aktivitetsdiagram tar et brukstilfelle, og ser på aktiviteter
som må til for å oppfylle dette.
Hva som er gangen i de to brukstilfellene
er utfyllende forklart i Use Case-beskrivelser kapittel 3.2.2, men det følger
allikevel en steg for steg-gjennomgang til hvert av aktivitetsdiagrammene.
Beskrivelse av ”legg til kunde” -
aktivitetsdiagram:
Hvem: Ansatt oppretter en ny
kundeoppføring i systemet.
Hendelsesforløp:
- Brukeren
velger å opprette en ny kunde
- Bruker
fyller inn data om kunden.
- Skjemaet
blir så sjekket opp mot systemet for å se om innholdet oppfyller kriteriene for
lagring. Er det feil eller mangler i skjemaet må brukeren gjøre de nødvendige
endringer før systemet lar brukeren gå videre.
- Er alt
i orden vil brukeren få inputdata presentert av systemet sammen med
valgmulighetene: bekreft og avbryt. Ved å velge avbryt blir sesjonen avbrutt og
innholdet blir ikke lagret.
-
Ved bekreft lagres innholdet og brukeren får en
bekreftelse på at en ny kunde er opprettet.

Figur 3.4.1 –
Aktivitetsdiagram – ”legg til ny kunde”
Beskrivelse av ”opprett bestilling” -
aktivitetsdiagram:
Hvem: Ansatt oppretter en ny bestilling i
systemet.
Hendelsesforløp:
-
Bruker
utfører valg for oppretting av ny bestilling
-
Brukeren
velger kunden som skal knyttes til bestillingen (gjennom identifisering av
kundens navn eller nummer som er lagret i systemet).
-
Skulle
informasjonen for indentifisering av kunden være feil eller ikke eksistere vil
brukeren bli gjort oppmerksom på dette gjennom en feilmelding.
-
Hvis
kundeinformasjonen stemmer blir brukeren presentert et skjema for å fylle inn
nødvendig data om den aktuelle bestillingen.
-
Dataen
fra skjemaet blir sjekket opp mot systemet for å se at det ikke inneholder feil
eller mangler som forhindrer lagring. Hvis det blir funnet feil, vil brukeren
få en feilmelding og må gjennomføre endringer i inputen før det er mulig å gå
videre.
-
Er alt i orden vil brukeren få inputdataen
presentert av systemet sammen med valgmulighetene: bekreft og avbryt. Ved å
velge avbryt blir sesjonen avbrutt og innholdet blir ikke lagret.
Ved bekreft lagres innholdet og brukeren
får en bekreftelse på at en ny bestilling er opprettet.

Figur 3.4.2 – aktivitetsdiagram – ”opprett ny
bestilling”
Et klassediagram viser oversikt over
programvare-klasser i systemet vi utvikler. Det vises sammenhenger mellom
klassene, og attributter, samt metoder objekter av klassene bruker til å sende
meldinger til hverandre.
Informasjon om begrensninger og forenklinger gjort i klassediagram.
Vi foretar en forenkling på det viset at alle registre (båtregister,
kunderegister osv.) ligger i minne i
form av arrays, som f.eks. "kundeliste:
array". Vi beskriver ikke detaljer omkring tilkopling til databaser osv.
For å begrense omfanget av diagrammet har vi valgt å begrense oss til
de systemkomponentene som relaterer seg til de to Use Casene vi har jobbet med
i prosjektet. Mye annen funksjonalitet som ikke relaterer seg til Use Casene,
har blitt utelatt. Dette er gjort for oversiktlighetens skyld, samt av
tidsmessige årsaker.

Figur 4.1 - Klassediagram
Et sekvensdiagram viser kommunikasjon
mellom aktør og systemet, samt kommunikasjon mellom systemets interne
moduler/objekter som en funksjon av tid.
Her følger sekvensdiagram som modellerer
brukstilfellene ”Legg til ny kunde” og ”Opprett bestilling”, også presentert
som detaljerte Use Case-beskrivelser i kapittel 3.2.2. Brukstilfellene blir
modellert både som blackbox-sekvensdiagram (med normalflyt og avvik) og
ordinært sekvensdiagram (med normalflyt og avvik). Forskjellen på disse er at
blackbox-varianten viser samhandling mellom aktør og systemet som en blackbox
– altså ser vi ikke på hva som skjer på innsiden av systemet, kun hva
resultatet blir. Ordinært sekvensdiagram åpner systemet og ser nærmere på
kommunikasjon mellom systemets objekter i tillegg til mot aktøren. Kapittel
4.2.1 ser nærmere på Blackbox-variantene, mens kapittel 4.2.2 viser ordinære
sekvensdiagrammer for brukstilfellene.
4.2.1
Black-box sekvensdiagram:
4.2.2
Sekvensdiagram
– ”legg til ny kunde” - normal hendelsesflyt:
1.
Den
ansatte ønsker å føre opp en ny kunde.
2.
Kunderegisteret
ber den ansatte om å fylle inn alle feltene i registreringen.
3.
Den
ansatte registrerer informasjonen om kunden.
4.
Ny
kunde blir opprettet og den ansatte får bekreftelse på at ny kunde er oppført.
Figur
4.2.1.1 – sekvensdiagram blackbox
– opprett ny kunde – normal hendelsesflyt
Sekvensdiagram –
”legg til ny kunde” - avvikende hendelsesflyt:
1.
Den
ansatte ønsker å føre opp en ny kunde.
2.
Kunderegisteret
ber den ansatte om å fylle inn alle feltene i registreringen.
3.
Den
ansatte registrerer informasjonen om kunden.
4.
Kunderegisteret
sier at kunden allerede finnes i registeret og avbryter registreringen.
Figur
4.2.1.2
– sekvensdiagram blackbox – opprett ny kunde – avvikende
hendelsesflyt
Sekvensdiagram – ”Opprett bestilling”
- normal hendelsesflyt:
1.
Den
ansatte finner kunde i systemet.
2.
Systemet
viser informasjon om kunden.
3.
Den
ansatte velger dato, tid og sted for bestilling.
4.
Systemet
viser en liste over båter
5.
Kunden
velger ønsket båt fra liste
6.
Systemet
bekrefter tidspunkt og valg av båt
7.
Kunde
fyller inn tilleggsinformasjon om bestilling (f.eks matbestilling)
8.
Systemet
lagrer informasjon og gir bekreftelse til kunden

Figur 4.2.1.3
– sekvensdiagram blackbox – opprett bestilling – normal
hendelsesflyt
Sekvensdiagram –
”Opprett bestilling” - avvikende hendelsesflyt:
1.
Den
ansatte finner kunde i systemet.
2.
Systemet
viser informasjon om kunden.
3.
Den
ansatte velger dato, tid og sted for bestilling.
4.
Systemet
viser en liste over båter
5.
Kunden
velger ønsket båt fra liste
6.
Systemet
gir feilmelding om at valgt båt ikke er ledig til ønsket tid. Bestilling
avbrutt.

Figur 4.2.1.4
– sekvensdiagram blackbox – opprett bestilling – avvikende
hendelsesflyt
4.2.3
Ordinære sekvensdiagram:
Informasjon om diagrammet ”Opprett ny
kunde – normal hendelsesflyt:”
(Denne
beskrivelsen er ment som et supplement til sekvensdiagrammet i tilfellet
dataflyten oppleves som uklar)
Bruker velger "opprett kunde"
fra meny. Fra GUI utføres metodekallet "OpprettKunde()" på
systemkontrolleren. Dette oppretter et "Kunde_register"-objekt. Dette
objektet inneholder et objekt av typen "Kunde" som initieres. Som en
del av "OpprettKunde"-metoden utføres Display("Fyll inn
info") som genererer informasjon på skjerm. Vi antar at metoden Display()
kan vise alle typer informasjon på skjerm. Metoden
"Set_DataFromGUI()" lagrer data inntastet fra kunde i variabel
"DataFromGUI". Vi antar for enkelhetsskyld at dette er løst ved å
legge inn info i form av komma-separerte-verdier. "Set_Kunde()"
overfører informasjon tastet av ansatt til "Kunde"-objektet og bruker
attributtet "DataFromGUI" som argument. LeggInnKunde() lagrer
Kunde-objektet i Kunderegisterets "-Kundeliste: array".
Metoden "LeggInnKunde()” inneholder
logikk som kontrollerer om kunden eksisterer i registeret fra tidligere. På
grunnlag av dette sendes enten melding om at "kunde er lagret" eller
"feilmelding: kunde eksisterer fra før" til systemkontroller ved
hjelp av metoden "Set_DataToGUI()". Status lagres i variabelen
"DataToGUI" og videresendes til GUI ved hjelp av metoden
"Display(DataToGUI).

Figur 4.2.2.1
– Sekvensdiagram ”opprett ny kunde – normal hendelsesflyt
Informasjon om diagrammet ”Opprett ny
kunde – avvikende hendelsesflyt:”
(Denne
beskrivelsen er ment som et supplement til sekvensdiagrammet i tilfellet
dataflyten oppleves som uklar)
Bruker velger "opprett kunde"
fra meny. Fra GUI utføres metodekallet "OpprettKunde()" på
systemkontrolleren. Dette oppretter et "Kunde_register"-objekt. Dette
objektet inneholder et objekt av typen "Kunde" som initieres. Som en
del av "OpprettKunde"-metoden utføres Display("Fyll inn
info") som genererer informasjon på skjerm. Vi antar at metoden Display()
kan vise alle typer informasjon på skjerm. Metoden
"Set_DataFromGUI()" lagrer data inntastet fra kunde i variabel "DataFromGUI".
Vi antar for enkelhetsskyld at dette er løst ved å legge inn info i form av
komma-separerte-verdier. "Set_Kunde()" overfører informasjon tastet
av ansatt til "Kunde"-objektet og bruker attributtet
"DataFromGUI" som argument. LeggInnKunde() lagrer Kunde-objektet i
Kunderegisterets "-Kundeliste: array".
Metoden "LeggInnKunde() inneholder logikk
som kontrollerer om kunden eksisterer i registeret fra tidligere. På grunnlag
av dette sendes enten melding om at "kunde er lagret" eller
"feilmelding: kunde eksisterer fra før" til systemkontroller ved
hjelp av metoden "Set_DataToGUI()". Status lagres i variabelen
"DataToGUI" og videresendes til GUI ved hjelp av metoden
"Display(DataToGUI).

Figur 4.2.2.2
– Sekvensdiagram ”opprett ny kunde – avvikende hendelsesflyt
Informasjon om diagrammet ”Opprett ny
bestilling – normal hendelsesflyt:”
(Denne
beskrivelsen er ment som et supplement til sekvensdiagrammet i tilfellet
dataflyten oppleves som uklar)
Bruker velger "opprett ordre"
fra meny. Fra GUI utføres metodekallet "OpprettOrdre()" på
systemkontrolleren. Dette oppretter et "Ordre"-objekt. Dette objektet
inneholder et objekt av typen "Kunde" som initieres. Det initieres
også et Kunde_register"-objekt. Dette objektet inneholder hele kundelisten
i et array. Ved hjelp av metoden Set_DataToGUI(kundeliste) overføres
kunderegisteret til systemkontrolleren som ved hjelp av GUI-metoden
Display(DataToGUI) viser kundeliste på skjerm. Ansatt velger riktig kunde fra
liste og overfører valget til systemkontrolleren ved hjelp av metoden "set_DataFromGUI()".
Get_kunde_from_list(DataFromGUI) overfører informasjon om valgt kunde til
kunderegisteret som henter ut samsvarende informasjon fra
"kundeliste" og overfører til "Kunde"-objektet ved hjelp av
"set_kunde()".
I ordre-objektet initieres det et kalender-objekt
som skal ta hånd om tid og dato for ordren. Ved hjelp av metoden
set_DataToGUI("Fyll ut tid og dato") sendes en melding til
systemkontroller som videreformidler meldingen til GUI ved hjelp av
Display(DataToGUI). Ansatt fyller inn ønsket dato og tid og sender dette fra
GUI til systemkontroller ved hjelp av metode set_DataFromGUI(). Informasjonen
sendes til kalender-objektet ved hjelp av
"NyKalenderOppføring(DataFromGUI)".
Ordre-objektet inneholder et Objekt av
type ordrelinje. Dette oppretter igjen et båt-objekt og det opprettes et
Båt_register-objekt. Sistnevnte inneholder hele båt-listen i et array. Ved
hjelp av "set_DataToGUI(båtliste) overføres båt-listen til
systemkontrolleren som ved hjelp av GUI-metoden "Display(DataToGUI) viser
båt-listen på skjerm. Ansatt velger riktig kunde fra liste og overfører valget
til systemkontrolleren ved hjelp av metoden "set_DataFromGUI()".
Get_båt_from_list(DataFromGUI) overfører informasjon om valgt båt til
båtregisteret som henter ut samsvarende informasjon fra "båtliste" og
overfører til "Båt"-objektet ved hjelp av "set_båt()".
Metoden WriteOrdrelinjeToArray() overfører Ordrelinje-objektet til arrayet
"Ordrelinjer". Hvis ansatt ønsker å legge inn flere båter på samme ordre
loopes siste avsnitt (fra opprettelse av ordrelinje).
Når ansatt er ferdig med å legge inn
båter i bestilling opprettes et nytt objekt av type ordrelinje. Dette oppretter
igjen et Tilleggstjeneste-objekt og det opprettes et
"Tilleggstjenester_register"-objekt. Sistnevnte inneholder alle tilleggstjenester
i et array. Ved hjelp av "set_DataToGUI(tjenesteliste) overføres
tjenestelisten til systemkontrolleren som ved hjelp av GUI-metoden
"Display(DataToGUI) viser listen på skjerm. Ansatt velger riktig tjeneste
fra liste og overfører valget til systemkontrolleren ved hjelp av metoden
"set_DataFromGUI()". Get_tjeneste_from_list(DataFromGUI) overfører
informasjon om valgt tjeneste til "Tilleggstjenester_register" som
henter ut samsvarende informasjon fra "tjenesteliste" og overfører
til "Tilleggstjeneste"-objektet ved hjelp av
"set_tilleggstjeneste()". Metoden WriteOrdrelinjeToArray() overfører
Ordrelinje-objektet til arrayet "Ordrelinjer". Hvis ansatt ønsker å
legge inn flere tilleggstjenester på samme ordre loopes siste avsnitt (fra
opprettelse av ordrelinje).
Når alle tjenester er lagt inn i
ordrelinjer kan ordren sluttføres. Ordre-objektet utfører metoden
"Sluttfør_ordre()" på seg selv. Denne metoden har ingen reel
funksjonalitet innebygd, men det kan tenke seg at eksport til økonomi-system,
samt lagring i database ville foregå her, men dette er ting vi ikke går i
dybden på i oppgaven. Avslutningsvis sender ordre-objektet en melding til
systemkontroller "Set_DataToGUI("Din Ordre er opprettet") til
systemkontroller, som viderefører denne til GUI ved hjelp av Display(DataToGUI).

Figur 4.2.2.3
– Sekvensdiagram ”opprett bestilling – normal hendelsesflyt
Informasjon om diagrammet ”Opprett ny
bestilling – avvikende hendelsesflyt:”
(Denne
beskrivelsen er ment som et supplement til sekvensdiagrammet i tilfellet
dataflyten oppleves som uklar)
Bruker velger "opprett ordre"
fra meny. Fra GUI utføres metodekallet "OpprettOrdre()" på
systemkontrolleren. Dette oppretter et "Ordre"-objekt. Dette objektet
inneholder et objekt av typen "Kunde" som initieres. Det initieres
også et Kunde_register"-objekt. Dette objektet inneholder hele kundelisten
i et array. Ved hjelp av metoden Set_DataToGUI(kundeliste) overføres
kunderegisteret til systemkontrolleren som ved hjelp av GUI-metoden
Display(DataToGUI) viser kundeliste på skjerm. Ansatt velger riktig kunde fra
liste og overfører valget til systemkontrolleren ved hjelp av metoden
"set_DataFromGUI()". Get_kunde_from_list(DataFromGUI) overfører
informasjon om valgt kunde til kunderegisteret som henter ut samsvarende
informasjon fra "kundeliste" og overfører til
"Kunde"-objektet ved hjelp av "set_kunde()".
I ordre-objektet initieres det et
kalender-objekt som skal ta hånd om tid og dato for ordren. Ved hjelp av
metoden set_DataToGUI("Fyll ut tid og dato") sendes en melding til systemkontroller
som videreformidler meldingen til GUI ved hjelp av Display(DataToGUI). Ansatt
fyller inn ønsket dato og tid og sender dette fra GUI til systemkontroller ved
hjelp av metode set_DataFromGUI(). Informasjonen sendes til kalender-objektet
ved hjelp av "NyKalenderOppføring(DataFromGUI)".
Ordre-objektet inneholder et Objekt av
type ordrelinje. Dette oppretter igjen et båt-objekt og det opprettes et
Båt_register-objekt. Sistnevnte inneholder hele båt-listen i et array. Ved
hjelp av "set_DataToGUI(båtliste) overføres båt-listen til
systemkontrolleren som ved hjelp av GUI-metoden "Display(DataToGUI) viser
båt-listen på skjerm. Ansatt velger riktig kunde fra liste og overfører valget
til systemkontrolleren ved hjelp av metoden "set_DataFromGUI()". Get_båt_from_list(DataFromGUI)
overfører informasjon om valgt båt til båtregisteret som henter ut samsvarende
informasjon fra "båtliste" og overfører til "Båt"-objektet
ved hjelp av "set_båt()". Metoden WriteOrdrelinjeToArray() overfører
Ordrelinje-objektet til arrayet "Ordrelinjer". Denne metoden
inneholder logikk som kontrollerer valgt båts tilgjengelighet i tidsrommet i
kalender-objekt (Vi har av tidsmessige årsaker ikke greid å produsere denne
funksjonalitetens logikk, så vi gjør en antakelse her, og antar at metoden har
mulighet til å sjekke dette). Som i dette tilfellet er båten opptatt på valgte
tidspunkt. Dette fører til at ordre-klassen
sender en melding til systemkontroller: "Set_DataToGUI("Valgt
båt er ikke tilgjengelig på valgte tidspunkt, vennligst forsøk på
nytt")". Melding overføres så til GUI ved hjelp av Metoden
Display(DataToGUI). Etter utsendt melding ødelegges "Ordre"-objektet. Denne
avslutningen er veldig enkel, og neppe så populær hos brukerne som må begynne
for fra med å legge inn kunde på nytt, men for å demonstrere systemflyt gjør
den jobben.

Figur 4.2.2.4 – Sekvensdiagram ”opprett bestilling –
avvikende hendelsesflyt
4.3
Logisk arkitektur
Vi foreslår å benytte en trelags-arkitektur av
typen Model-View-Controller (MVC) i løsningen vi utvikler. Dette er en mye
brukt arkitektur som isolerer brukergrensesnitt fra applikasjons-logikk ved
introduksjon av et kontroller-lag. MVC tilbyr lav kopling mellom lagene. Dette
medfører at en systemkomponent f.eks brukergrensesnitt kan byttes ut uten at det
vil få større innvirkning på systemet generelt.
Modell-laget tar seg av applikasjonens logikk samt
lagring av data (selv om vi ikke har utdypet det siste spesielt mye i dette
prosjektet) og vil inneholde alle de forskjellige objektene som brukes av applikasjonen
under kjøring
View-laget inneholder brukergrensesnitt. Bruker
kan manipulere grensesnitt som genererer
input events til kontroller
Kontroller-laget tar i mot input fra
brukergrensesnitt og genererer meldinger til modell-laget som utfører handlinger
på input. Resultater returneres (når påkrevd) til systemkontroller som
genererer output til view.
Vi ser det som hensiktsmessig å utvikle applikasjonen som en
Web-applikasjon, der view er i form av et HTML-web-interface, og kontroller og
modell er plassert server-side og implementert i for eksempel PHP.

Figur 4.3 – Logisk arkitektur –
Model View Controller
Her presenterer vi det forslaget vi har
utarbeidet til brukergrensesnitt for løsningen. Vi ser for oss et stilrent og
luftig web-grensesnitt som skal være behagelig å bruke for de ansatte. Vi
presenterer to skjermbilder, et for siden der den ansatte kan legge til ny
kunde i systemet, og et for siden der den ansatte legger inn en ny bestilling.
Først vises siden for registrering av ny
kunde. Siden består av tekstfelt som må fylles ut og som avsluttes med å trykke
lagre knappen. I det dynamiske feltet under knappen vil det komme opp tekst med
status på om lagringen var vellykket eller ikke.
På siden etter vises ordresiden hvor man
setter opp bestilling etter forespørsel fra kunden som ønsker å leie båt. Før man går videre må
all kundeinformasjon ligge i systemet. På ordresiden finnes en kalender for å registrere sted, dato og tidsrom. Deretter
kan man velge båt og tilleggstjenester.

Figur 4.4.1 –
Forslag til brukergrensesnitt – registrering av kunde.

Figur 4.4.2 – Forslag til brukergrensesnitt –
opprette bestilling.
5 Vurdering
Forslag til løsningen vi har utviklet for
vår kunde, Oslo Båtutleie, er basert på identifisering av krav ved hjelp av en
kravanalyse. Krav til løsning har blitt utdypet ved hjelp av Use
Case-modellering og har resultert i en kravspesifikasjon. Etter hvert som
arbeidet har gått fremover og vi har tilegnet oss bedre forståelse av kundens
domene og behov har kravspesifikasjon blitt videre detaljert og vi har bygget
videre på Use Case-modell for å sørge for krav til løsning gjenspeiles.
Delvis på grunn av tidsmessige årsaker og
dels på grunn av oppgavens spesifisering har vi på et tidlig tidspunkt satt
fokus på to brukstilfeller av løsningen, hvordan man legger inn en ny kunde i
systemet, og hvordan man oppretter en bestilling. Disse tilfellene har videre
blitt detaljert godt i aktivitetsdiagrammer og sekvensdiagrammer. Klassediagram
for løsningen , og til en viss grad domenemodell er fokusert rundt disse
brukstilfellene, og funksjonalitet som ikke er relatert til dette er i stor
grad ikke tatt med i modellene.
På grunnlag av dette forekommer det et
ganske stort sprik i mellom hva som sånn sett er lovet kunden (i form av
kravspesifikasjon og overordnet Use Case-diagram) og hva vi faktisk har
designet og modellert i prosjektet. Som eksempel på dette har vi i
kravspesifikasjon krav til at kunden skal kunne sende og motta e-post, administrator
skal kunne legge til/fjerne ansatte osv. Innledningsvis (under målsetning) har
vi til og med gått ut så kraftig som å si at ”Datasystemet skal være en enhetlig applikasjon som erstatter alle de
separate programmene som bedriften per
dags dato er avhengig av. Dette dreier seg om programvare for tekstredigering,
regneark, kalender, Epost, kontakter.”
Det er liten tvil om at vi har tatt oss
litt vann over hodet innledningsvis. Gruppens prosjektleder er ganske glad for
at dette er et studentprosjekt, og ikke en reel jobbsituasjon. Det vil nok
kreves et ukjent antall iterasjoner og inkrementeringer før all denne
funksjonaliteten er i nærheten av å være på plass. Når dette er sagt synes vi
at design og modellering av den funksjonaliteten som vi har vektlagt til nå er
av god kvalitet og vil kunne være et godt grunnlag for implementering. Det er
sånn sett i tråd med utviklingsmodellen å velge ut et knippe av de viktigste
funksjonene først, for så å legge til mer funksjonalitet gradvis.
Til dette prosjektet valgte vi å gå for
prosessmodellen Unified Process (UP) etter krav fra oppdragsgiver. Vi tilpasset UP modellen med økt fokus på
planlegging, krav og analyse/design. Grunnen til dette kom ut i fra kravene i
oppgaven hvor vi tolket det til at implementasjon, testing og idriftsettelse
ikke skulle prioriteres fordi prosjektet ikke skal lede til et fysisk
sluttprodukt.
For oss var det viktig å basere
prosjektet på en modell som tillater skalering etter vårt behov og hvor vi kan
bestemme hvilke områder som vi ønsker å fokusere på, uten å ødelegge
prosjektmodellens helhetsfølelse.
Vår vurdering av denne prosjektmodellen
er at den bidrar til å skape en klar fremgangsplan i form av de ulike fasene.
Fasene skaper naturlige grenser og hjelper oss definere hvor vi befinner oss og
hva som blir den videre fremgangen. Samtidig er det noen utfordringer knyttet
til det faktum at ingen av fasene utgjør definitive frister, men heller er veiledende
for oss som ender med å sette dem. Det betyr at vi har muligheten til å foreta
endringer i ettertid selv om disse fasene allerede er utført. UP er iterativt,
og innehar en høy grad av fleksibilitet når det kommer til å gå tilbake å
foreta endringer i ettertid. Det er utviklerne og kunden som setter grensene
for hvor lenge en kan gå tilbake å foreta endringer på allerede utførte
delprodukter. Eksempelvis kan utvikleren legge til nye krav underveis eller
endre på eksisterende krav skulle det vise seg fornuftig lengre ut i prosessen.
Det er både fordeler og ulemper med denne
prosjektmodellen. Fordelen er at det er gode muligheter til å endre prosjektet underveis
i utviklingen dersom krav forandrer seg og svakheter blir oppdaget. I tillegg
er modellen skalerbar og lett å tilpasse, så små prosjekter av typen vi har
jobbet med her behøver ikke inneholde alle disipliner og artefakter som større
prosjekter ville påkrevd. En ulempe kan være at det kan bli vanskeligere for
utvikleren og avgjøre når prosjektet har nådd sine mål ettersom disse ofte blir
utsatt for forandringer. Hvis interne frister blir endret for ofte fordi en går
tilbake for å gjøre endringer i prosessene, vil dette kunne forsinke hele
prosjektet. Det vil også føre til at dokumentasjonen blir unødvendig omfattende
og komplisert.
Et alternativ som kunne egne seg for
denne type prosjektarbeid, ville være en type lettvekts-modell (agile process).
For vårt prosjekt kunne en av disse modellene hvert et godt alternativ grunnet
valgfriheten som preger disse modellene. Muligheten for å prioritere samhandling
mellom bruker og system vektlegges fremfor verktøy og prosesser i agile. Denne
tankegangen tror vi kunne ha bidratt til å skape et bedre sluttprodukt ettersom
interaksjonen mellom bruker og system kunne prioriteres fremfor rent tekniske
detaljer. Å la sluttbruker ha enda mer påvirkningsmuligheter under utvikling er
noe vi har tro på kan lede til et enda bedre sluttprodukt. Samtidig kan det ha
en negativ effekt ved at brukere ikke alltid er klar over deres behov og
utvikleren er bedre skikket til å avgjøre hva sluttbrukerne trenger ettersom de
ofte over- eller undervurderer behovene sine.
Lettvekts-metoder generelt gjør også et poeng
ut av at dokumentasjon gjør størst nytte kun i de tilfellene hvor utviklerne
selv ser den nyttig. Når vi sammenligner med UP modellen hvor en god del av
tiden har gått til dokumentasjon, er inntrykket vi sitter igjen med at mindre tid brukt på å dokumentere kunne ha
frigjort mer tid til å bruke på utvikling og analyse. Mangel på dokumentasjon
kan derimot være negativt når prosjektene er svært omfattende spesielt der
strukturer og innhold i systemene er for kompliserte til at man klarer å holde
oversikt over hva som faktisk skal endres eller implementeres. Dokumentasjon er
også viktig for å holde oversikt over arbeidsoppgavene til utviklerne.
Uten å gå nærmere inn på en spesifikk
lettvekts-metode velger gruppen å konkludere med at det var et fornuftig valg å
holde oss til Unified process, da denne tilbyr god balanse mellom en fastsatt
prosjektgjennomføring og muligheten til å foreta eventuelle endringer underveis.
UP gir stabilitet og fleksibilitet til systemutvikling. I tillegg er modellen
såpass skalerbar at vi i virkeligheten snakker om en ganske smidig og lett UP
som har blitt brukt i dette prosjektet.
Mange ganger har arbeidsoppgaver
blitt noe skjevt fordelt, slik at noen
gruppemedlemmer til tider har hatt mer å gjøre enn andre i forhold til interne
leveringer. Dette har justert seg gjennom hele prosjektet da vi har
etterstrebet at alle i gruppen skal bidra likt. Vi har alltid hatt åpen dialog
mellom gruppemedlemmene, alle har blitt
hørt og problemstillinger som angår arbeidsoppgaver eller annet har blitt
drøftet på gruppemøtene. Vi har hatt møter mandager og onsdager. Det har vært
bra oppmøte på gruppemøtene og vi har sjelden hatt fravær på grunn av sykdom
eller lignende. De gangene noen har vært
syke har alle gruppemedlemmer allikevel hatt tilgang til det arbeidet som har blitt gjort på en
fellesmappe i Dropbox .
Alle gruppemedlemmer har vært åpne for å bli kontaktet hvis det var noe man
lurte på i forhold til de individuelle arbeidsoppgavene vi fikk tildelt på gruppemøtene, dersom man ikke kunne stille på gruppemøte på grunn
av sykdom eller annet. Vi har på gruppemøtene hatt gjennomgang av oppgavene vi
har holdt på med for å holde en høy kvalitet, andre gruppemedlemmer kan komme
med innspill til forbedringer og enkelt
kunne ta over arbeidsoppgaver dersom noen skulle bli syk.
Vi har også vært flinke med å få booket
rom i god tid slik at vi har kunne samle oss på et grupperom for å drøfte
oppgaver og problemstillinger, i forhold til innleveringer og interne
frister, samt å tildele nye oppgaver og
komme med innspill til endringer og forbedringer.
Når det gjelder prosjektoppgaven tok det
tid før vi kom i gang, mye fordi vi slet med å sette oss inn i hva oppgaven
gikk ut på og hva som faktisk skulle leveres inn.
Det at vi selv skulle finne en oppgave
opplevdes vanskelig , vi brukte i overkant mye tid på å finne en oppdragsgiver
og et mål for prosjektet.
Vi mener at vi har ligget litt for tett
opp mot leveringsfristene og hvis vi hadde vært litt flinkere til å strukturere
arbeidet, kunne vi fått en større buffer opp mot leveringsdato. Vi har hatt
egne interne frister men ofte ble vi ikke helt ferdige med oppgavene som var
satt internt i gruppen. Dette skyldes delvis at vi opplevde mye ”trykk” på
datalaben og at vi ikke fikk svar når vi ville og måtte vente med å få hjelp
til neste datalab.
Vi har også feilberegnet hvor lang tid
det ville ta å lage ferdig diagrammene og få dem godkjent. Det har vanskeligere
enn vi trodde og vi har hatt mange endringer på vei mot mål.
Vi har forsøkt så godt vi kan å tenke
Unified Process, følge iterasjoner og strukturere arbeidet i henhold til
innholdet i prosjektplanen. Vi føler at det tidvis har vært vanskelig å
relatere det arbeidet vi har gjort til UP. Det har nok vært lettest med de
forskjellige diagrammene og modellene vi har laget som i høy grad har blitt
utviklet iterativt, men mange andre aspekter av utviklingsmodellen har nok
kommet litt i bakgrunnen. Et eksempel på dette er risikohåndtering som burde
blitt gjort bedre. Vi har ”tidsmangel” som er et punkt i vår ”risikoanalyse”
(prosjektplan) med en plan for hvordan dette skal unngås/løses. Her har vi i
praksis ikke vært gode nok til å identifisere på et tidlig tidspunkt at vi
ligger etter skjema i forhold til innleveringer. Dette har fått som konsekvens
at vi mer enn en gang har sittet lange dager når det nærmer seg frister.
Heldigvis har vi alltid greid å holde fristene, men vi har gjort det vanskelig
for oss selv. Det positive er selvsagt at vi skal lære noe av dette prosjektet,
og dette bidrar i høy grad til at vi nå forstår viktigheten av å vurdere risiko
fortløpende og gjøre nødvendige grep på et tidlig tidspunkt.
Oppsummering
av hovedpunkter i arbeidet.
Vi har i dette prosjektet innledningsvis
skaffet oss en oppdragsgiver, Oslo Båtutleie Vi har kartlagt oppdragsgivers
behov og har satt oss som mål å utvikle en kontor og booking-løsning basert på
de krav vi har kommet frem til ved hjelp av en kravanalyse. Vi har benyttet oss
av en rekke verktøy og metoder for å utdype krav og lage et forslag til design
på grunnlag av dette. Unified process har blitt valgt som utviklingsmodell, og
vi har generert en rekke artefakter, blant annet Use Case-modeller,
aktivitetsdiagram, sekvensdiagram, domenemodell, klassediagram, forslag til
logisk arkitektur og forslag til brukergrensesnitt.
Vi har nok tatt oss litt vann over hodet
innledningsvis da vi hadde satt oss som mål å designe et komplett kontor og
booking-system for kunden. Systemet skulle inneholde ordinære kontorfunksjoner
som tekstbehandling, epost og mye annet fint, i tillegg til en komplett
booking-løsning for utleie av kundens båter. Dette var nok veldig naivt av oss,
men vi begrunner det med at vi når vi startet på prosjektet hadde veldig lite
forståelse av kompleksiteten forbundet med systemutvikling. Underveis i
prosjektet har vi i større og større grad fått denne forståelsen, og skulle vi
begynt på nytt ville vi helt sikkert satt oss en mye enklere målsetning, og
laget en enklere løsning.
Oppgaven er også lagt opp til å fokusere
mye av arbeidet rundt to forskjellige brukstilfeller. Vi har stort sett
forholdt oss til dette gjennom prosjektet, og det meste av modellering og
design er begrenset til disse brukstilfellene.
Ut i fra dette kan vi ikke si at
prosjektets målsetning er nådd. Vi har allikevel fullført viktige komponenter i
systemet, og kvaliteten på disse er vi fornøyd med.
Vi har kommet i mål med prosjektet innen
fristene som er satt. Prosjektplanen som ligger til grunn for arbeidet har vi
forsøkt å følge så godt det har latt seg gjøre, men vi opplever at det har vært
vanskelig å beregne arbeidsmengde, og veldig ofte har vi kommet litt for tett
inn på fristene, og har fått vel mye å gjøre de siste dagene.
Vi har opplevd det som vanskelig å sette
arbeidet inn i iterasjoner i praksis, og vi opplever at dette har sklidd ut. Vi
har allikevel forsøkt å gjøre dette etter boken, med evaluering av iterasjon
etc. før neste iterasjon påbegynnes. Diagrammer og modeller har blitt
utarbeidet iterativt, men vi har ikke helt greid å holde en skikkelig struktur
rundt dette.
Det har i prosjektplan blitt satt opp et
budsjett for prosjektet vårt. Estimert kostnad for hele prosjektperioden ble
satt til 125.840 kr. Etter føring av timer underveis i prosjektet har vi ved
prosjektslutt utført nye beregninger. Den faktiske kostnaden for prosjektet har
landet på 90.470 kr. Vi ligger altså godt under budsjett på prosjektet. Dette
er hovedsaklig grunnet mindre timebruk en antatt, spesielt innledningsvis i
prosjektet. Med tanke på at vi kun har levert deler av det vi har forespeilet
kunden i prosjektet antar vi at de er glade for å høre at det blir billigere
enn antatt. Hvis vi antar at prosjektet skal føres videre og ferdigutvikles som
beskrevet i prosjektets mål, ville prosjektet overskredet budsjettet i en så
stor grad det antakelig hadde blitt advokat-mat.
Forslag
til forbedringer av prosjektets resultater og kvalitet i gjennomføringen.
Vi har altså ikke klart å levere det
produktet vi satt oss som mål innledningsvis i prosjektet. De komponentene vi
har levert er vi allikevel fornøyd med. Vi har forsøkt å detaljere både
klassediagram og sekvensdiagram med metoder for kommunikasjon så godt og
detaljert det lar seg gjøre. Ingen av gruppemedlemmene er veldig erfarne innen
”programmerings-tankegang” da vi har begrenset med undervisning i dette i løp
av vårt studieløp. Vi antar det ville vært rom for forbedring her, men det
innebærer at vi tilegner oss mer informasjon om dette fagfeltet.
Vi har i prosjektet undervurdert hvor
komplekst og avansert modellering av systemer er, og hadde vi visst det vi vet
nå ville vi nok ha prioritert dette kraftigere, tidligere i prosjektet.
For å oppsummere sitter vi igjen med
følelsen av at denne oppgaven har vært utrolig lærerik. Vi har i løpet av
prosjektet tilegnet oss erfaringer om prosjektarbeid, prosjektstyring og
modellering og en rekke andre felt som vi på forhånd kunne svært lite om. Vi
har forstått kompleksiteten av et slikt prosjekt, og ser verdien av å støtte
oss på en utviklingsmodell for å strukturere arbeidet.
Det er hovedsakelig den informasjonen vi
har tilegnet oss i løpet av prosjektet som kan være nøkkelen til forbedring av
resultatene. Skulle vi gjort prosjektet om igjen ville vi nok hatt større fokus
på å levere systemkritiske komponenter tidlig i prosjektet og bruke mindre
krefter på dokumentasjon. I tillegg måtte vi nok ut i fra prosjektets tidsmessige
begrensninger ha begrenset omfanget av den løsningen vi lovet kunden.
Kilder:
Illustrasjon
2.1.0: Kilde: Wikipedia - http://en.wikipedia.org/wiki/Unified_Process
(23.09.2011)
Thor E.
Hasle – “Systemutvikling – Applikasjoner og Databaser” –
Cappelen 2008
Craig Larman – “Applying UML and Patterns: An
Introduction to Object-Oriented Analysis and Design and Iterative Development,
3rd edition” - Addison Wesley Professional 2004