PROSJEKTOPPGAVE
Fag:
Programutvikling
|
Fagnr:
DATS1600 /
ITPE1600
|
Faglig ansvarlige:
Eva Hadler Vihovde
|
Prosjektperiode:
Vår 2015, uke 13 - uke 21
|
Innleveringsfrist kravspesifikasjon:
mandag 13. april 2015 kl. 15:00
|
Innleveringsfrist prosjektoppgaven:
Onsdag 20. mai 2015 kl. 15:00
|
Antall oppgaver: 1 av 3
|
Vedlegg:
Anbefalt arbeidsplan, Prosjektkrav
|
Gruppearbeid
|
Antall gruppemedlemmer: 2 eller 3
|
Anbefalt arbeidsplan og Prosjektkrav
må leses nøye før dere begynner å løse oppgaven.
Det vil bli foretatt oppdateringer og rettelser av oppgaveteksten i prosjektperioden.
Pass derfor på å oppdatere siden ofte, særlig i begynnelsen av perioden.
Oppgavealternativer
Det blir gitt tre alternativer oppgaver:
Alternativ 1: FORSIKRING
Alternativ 2: VIKARBYÅ
Alternativ 3: KULTURHUS
Arbeidet med oppgaven kan deles opp i forskjellige faser:
Planleggingsfasen
Denne fasen av arbeidet er svært viktig og har avgjørende betydning kvaliteten på oppgaven og for hvor lang tid dere kommer til å bruke på
den.
Dersom dere ikke har oversikt over hvordan programmet skal bygges opp før dere går i gang med programmeringen,
risikerer dere å "møte veggen" etter en tid og må begynne helt på nytt igjen.
Oppgaven kan løses på mange måter og er ikke så klart spesifisert som de oppgavene dere
har arbeidet med tidligere. Dessuten må dere selv velge hvor mye dere vil implementere av det som er nevnt
i oppgaven og om dere eventuelt vil ta med noe som ikke er nevnt.
Det er viktig at dere avgrenser oppgaven slik at dere kommer i mål med et kjørbart program
som har den
funksjonalitet som dere eller oppdragsgiver anser som den viktigste.
Hvis dere ser muligheter og løsninger som er bedre enn ønskene til
oppdragsgiveren, kan dere velge dem under forutsetning av at dere begrunner dem godt. (Dere må jo i så fall overbevise sensor om at dere har valgt en bedre løsning!)
Alle i gruppen deltar i planleggingsfasen.
Her må dere diskutere
- Hvem er brukerne av programmet?
Er det en person? Eller er de forskjellige modulene (vinduene) beregnet på forskjellig typer personer som kanskje
i en reel situasjon vil befinne seg på ulike geografiske steder?
- hva slags datastruktur dere vil velge. (NB! Dere må bruke Collection-rammeverket!)
- hvilke klassehierarki som er hensiktsmessige? (Hvilke klasser, med eventuelle subklasser, trenger dere og hva de skal inneholde?)
- hvordan dere vil bygge opp og utforme brukergrensesnittet? (Hvis deler av programmet skal brukes av forskjellige typer personer på forskjellige steder
trenger dere flere vinduer.)
- hvilke kodestandarer skal dere velge og hvordan vil dere bruke kommentarer i koden?
- hvilke filklasser som skal brukes til lagring av dataene.
- fremdriftsplan for arbeidet med milepæler for når de forskjellige delene skal være ferdige.
(Denne skal leveres sammen med kravspesifikasjonen.)
Legg vekt på å designe et oversiktlig program med en fornuftig datastruktur.
Valg av klasser må gjøres ut fra hvilke operasjoner som skal gjøres på datastrukturen.
(Operasjoner som utføres ofte bør prioriteres med hensyn til effektivitet
foran de som utføres sjeldent.)
Samtidig bør dobbeltlagring av data i størst mulig grad unngås.
Det er viktig at rekkefølgen av del-oppgavene prioriteres riktig i tilfelle dere ikke blir ferdig.
I så fall gjelder det å sette strek i tide, slik at dere får levert et kjørbart program, der de viktigste operasjonene lar seg utføre.
NB! Under planleggingsfasen er det lurt å samle stoff til dokumentasjonen.
Bl.a. vil noen av figurerene/diagrammene fra planleggingsfasen kunne inngå som en del av dokumentasjonen.
Planleggingsfasen skal resultere i en kravspesifikasjon som skal leveres
i uke 16.
Implementeringsfasen
Når planleggingen er ferdig, kan implementeringen av datastrukturen begynne.
Også i denne fasen av arbeidet er det viktig at alle i gruppa arbeider sammen.
Start med å implementere registreringsmetodene. Ved hjelp av utskriftsmetoder
kan dere kontrollere at innsettingen av objekter i datastrukturen fungerer som den skal.
Først når dette fungerer, og ikke før, kan dere gå videre til neste fase.
Når dere er kommet så langt at dere har et kjørbart program der alle
dataene lar seg lagre i en passende datastruktur, er tida inne for å
implementere resten av operasjonene. Disse kan fordeles mellom gruppas medlemmer og
implementeres hver for seg. Men husk at når dere skal sette programmet sammen,
må dere legge inn metodene for én operasjon om gangen, slik at dere får testet ut hver operasjon for seg.
Dokumentasjonsfasen
Programmet skal dokumenteres (jfr. Uke 21: Prosjektoppgaven, punkt 2 og 3).
Innholdet av dokumentasjonen må
gruppa diskutere sammen. Sørg for at det blir avsatt nok tid til denne delen av oppgaven,
da den har betydning for karakteren får, spesielt hvis dere befinner dere i en vippeposisjon.
Gruppearbeid
Prosjektet skal løses av en gruppe på
2 eller 3 studenter og gruppen leverer en felles løsning. Alle
gruppemedlemmene må har bestått arbeidskravene i kurset.
Studentene velger selv gruppeinndeling. (Grupper med bare én student tillates normalt ikke!)
Programmeringsarbeidet skal fordeles så likt som mulig mellom gruppens medlemmer. Alle må programmere!
Faglig innhold
Programmet skal følge regler for objektorientert programmering og
synliggjøre at gruppenmedlemmene har tilegnet seg pensum i kurset, herunder:
- arv
- abstrakte klasser og metoder
- interface
- polymorfisme
- unntakshåndtering
- filbehandling
- tekstmanipulering, regulære uttrykk
- GUI-programmering
- grunnleggende algoritmer for sortering og søking
- enkle dynamiske datastrukturer (lister, køer og stakker)
- generiske metoder og klasser
- Javas Collection-rammeverk
- funksjonell programmering og Lambda-uttrykk
Rammebetingelser
- Programmet skal være en applikasjon programmert i Java.
- Det skal ikke brukes databaser.
- Programmet skal moduleres etter regler for objektorientert programmering,
der egendefinerte klasser og subklasser gjenspeiler naturlige moduler i programmet.
- Datafeltene i klassene skal ha
private
aksess
- Det skal ikke forekomme tallkonstanter i programmet. Eventuelle konstanter må opprettes og brukes som navngitte konstanter.
- Dere skal bruke unntakshåndtering.
- Dataene i programmets datastruktur skal ikke gå tapt mellom hver kjøring, men lagres på fil.
- Dere skal bruke arv og polysmorfisme der det er hensiktsmessig og naturlig.
- Datastruktur: Dere skal bruke Javas
Collection
-rammeverk, dvs.
en eller flere av klassene LinkedList
,
ArrayList
,
TreeSet
,
HashSet
,
LinkedHashSet
,
TreeMap
,
HashMap
eller LinkedHashMap
- Brukergrensesnittet (GUI) skal programmeres ved bruk av
swing
- eller
FX
-rammeverket,
- Det skal ikke brukes designverktøy som automatisk genererer kode (finnes i Eclipse og NetBeans)
- Brukerkommunikasjonen skal kun skje via brukergrensesnittet,
som skal ligge i egne klasser og skal være skilt fra datastrukturen.
- Dobbeltlagring av data skal størst mulig grad unngås.
- Det skal ikke tas i bruk annen programvare enn den som finnes i
Javas standard klassebibliotek.
- Programmet skal kunne kjøres på skolens maskiner uten at man trenger å installere annen programvare enn den som har
vært brukt i fagets undervisning.
Kommentarer i programmet
Det skal være kommentarer i programmet. Skriv kommentarer etter følgende retningslinjer:
- Øverst på hver fil skal det stå en kort oversikt over hva filen inneholder, hvem som har laget filen
og når den (siste versjonen) ble skrevet.
- Foran hver klassedefinisjon skal det stå en kort forklaring på hva som er hensikten med klassen.
- Foran hver metodesignatur (eller rett etter på samme linje dersom det er nok plass) skal det stå en kort kommentar om hva metoden gjør og hva parametrene står for. Eventuelle andre ting som en bruker av metoden bør kjenne til skal også stå (f.eks. hvilke forutsetninger som må være oppfylt eller hvilke typer feil som kan oppstå). Metodene bør listes opp i en fornuftig rekkefølge.
- Det skal stå kommentarer i programkoden dersom koden inneholder konstruksjoner som ikke er selvforklarende.
En lang kommentar (mér enn én linje) skal rammes inn med
/* ... */
,
mens kommentarer som får plass på én linje starter med //... .
De som ønsker det, kan skrive kommentarer etter Javadoc-standarden og generere Javadoc-dokumentasjon for kildekoden.
Men dette er ikke noe krav. I tilfelle dere velger å generere Javadoc-dokumentasjon, så er det ikke nødvendig
at denne skrives ut på papir. Det er tilstrekkelig at den leveres på fil, se beskrivelsen
av hva som skal leveres.
Kommentarer i programmet og eventuell Javadoc-dokumentasjon er imidlertid ikke tilstrekkelig til å dokumentere oppbyggingen av selve datastrukturen. Til dette formål er figurer bedre egnet.
Like viktig som kommentarer er bruk av innrykk og tilstrekkelig med "luft", slik at programkoden blir oversiktlig og lettlest. Slutten (}) på en blokk bør være på samme vertikale linje som begynnelsen på den konstruksjonen den avslutter. Eksempel:
while ( ... ) {
...
}
eller
while ( ... )
{
...
}
Det letter også oversikten at større blokker avsluttes med kommentarer av typen
} // end of while
} // end of class < Klassenavn >
Hva skal leveres?
(sendes på mail til evav@hioa.no)
En kravspesifikasjon skal inneholde en beskrivelse hvilke krav det settes til programmet
og hvordan dere skal oppfylle dem:
- Hva skal programmet utføre? Hva slags funksjonalitet skal det ha?(use-case)
- Prioriteringsrekkefølge: Hva må kunne utføres, og hva kan gjøres hvis dere får tid?
- Skisse over brukergrensesnittet
- Hvordan skal programmet bygges opp? Hvilke moduler kan det deles inn i?
- Hvilke klasser (egendefinerte) skal brukes/programmeres?
- Hvordan er klassene relatert til hverandre? Super-/subklasser?
- Beskrivelse av klassehierarkiet ved hjelp av figurer
- Hva slags datastruktur er valgt?(NB! Dere skal bruke Collection-rammeverket)
- Beskrivelse av datastrukturen ved hjelp av figurer
- Hvilket utviklingsverktøy skal brukes?(TextPad, Eclipse, Netbeans?)
- Systemkrav til maskinen programmet skal kjøres på
- Opplysninger om Java-versjon (NB må bruke java 1.8)
- Fremdriftsplan med milepæler
- Planlagt arbeidsfordeling. (NB! Programmeringsoppgavene skal fordeles tilnærmet likt mellom gruppens medlemmer.)
Prosjektgruppene blir registrert i forbindelse med innlevering av kravspesifikasjonen.
Den må derfor inneholde opplysninger om gruppedeltagerne (navn, studentnummer, linje og klasse).
- Programkode som gjør det mulig for sensor (og faglærer) å utprøve (prøvekjøre) programmet.
Dette skal være i form av en minnepinne eller en CD som inneholder alle filene som inngår i prosjektet.
Minnepinnen/CD-en skal inneholde en kjørbar jar-fil som kan brukes til å starte opp programmet.
(Hvordan dette kan gjøres, er forklart i
notatet Distribuering av javaprogrammer. )
Test det ut før du leverer, slik at du er sikker på at det virker som det skal! NB! Minnepinnen/CD-en
skal også inneholde alle java-filene til programmet.
NB! Det skal være lagt inn data i systemet, slik at det er lett å teste
ut hvordan programmet virker i praktisk bruk.
Husk å sette tydelige og fullstendige navn og studentnummer på minnepinne/CD (og selvfølgelig på selve prosjektdokumentasjonen) som dere leverer inn.
- En produktdokumentasjon som beskriver hvordan systemet (programmet) er bygget opp og hvordan ting virker
sammen. Dette "dokumentet" er til for den som vil sette seg inn i systemet, f.eks. for å kunne vedlikeholde
det, videreutvikle det, endre det, eller evaluere det ved sensur! Legg ved utskrift av alle skjembildene her.
Dere bør derfor ha med figurer som illustrerer hvordan datastrukturen og eventuelle klassehierarkier
er bygget opp.
Hvis dere ikke har rukket å innfri alle ønskene oppdragsgiveren har til programmet, må
dere her skrive noe om hvilken funksjonalitet dere har prioritert og hvorfor,
og hva som bør gjøres videre med programmet slik at andre programmerere kan fortsette der dere slapp.
Har dere derimot lagt inn funksjonalitet utover oppdragsgiverens ønsker, bør dere også skrive
noe om det. Ta utgangspunkt i kravspesifikasjonen dere leverte i uke 16 og oppdater denne. Hvis dere gjorde et grundig arbeid da,
er mye av arbeidet gjort.
- En kort prosessdokumentasjon som beskriver gruppens arbeid, hvilke valg som er gjort og hvorfor det ble valgt nettopp slik,
samt eventuelle andre ting som kan være av interesse for den som skal vurdere den delen av gruppens arbeid som
ikke er synlig gjennom den øvrige dokumentasjon.
Det skal gå fram av dokumentasjonen hvem som har gjort hva av
prosjektets forskjellige deler.
Den skriftlige dokumentasjonen kan godt leveres i et "hefte".
Legg vekt på å skrive kort og presist. Det er ikke et mål å skrive mest mulig,
men få med dere punktene over! Husk at dere skal "selge" produktet til sensor!
Hva blir det lagt vekt på ved sensur?
- Anvendelse av kursets faglige innhold
og innfrielse av rammebetingelsene.
- God struktur og oppbygging av programmet.
- Fornuftig bruk av objektorientert programmering.
- Lett lesbar kode og fornuftig bruk av kommentarer.
- Få eller ingen feil.
- At programmet er mest mulig robust og bør oppføre seg på en fornuftig måte
uansett hva brukeren foretar seg, og brukeren bør få forklarende meldinger
i tilfelle hun eller han bruker programmet på gal måte.
- God dokumentasjon.
- Et tiltalende og brukervennlig brukergrensesnitt som gjør det lett å bruke programmet.
- Programmets funksjonalitet dvs. i hvilken grad oppfyller programmet oppdragsgivers ønsker.
- Utvidelsesmuligheter, dvs. i hvilken grad det er lagt til rette for at programmet
kan utvides med ytterligere funksjonalitet uten å må foretas vesentlige endringer i den
eksisterende koden.
Det vil være mulig å få topp-karakter uten at alle ønsker fra oppdragsgiveren er implementert,
under forutsetning av at prioriteringene dere har gjort er fornuftige og at programmet lett kan utvides på et seinere
tidspunkt. Ved karaktersetting vil imidlertid omfanget av det som er gjort bli vurdert i forhold til antall studenter i gruppa
som har utført arbeidet.
I de tilfeller der dokumentasjonen ikke gir tilstrekkelig informasjon kan gruppen bli bedt om å
gi sensor en muntlig redegjørelse/presentasjon av programmet før endelig karakter settes.
Karakterbeskrivelser
Ved karakterfastsettelsen er det Universitets- og høgskolerådets generelle, kvalitative beskrivelser av karakterene som vil bli lagt til grunn. Beskrivelsene er som følger:
Symbol
|
Betegnelse
|
Generell, kvalitativ beskrivelse av vurderingskriterier
|
A
|
Fremragende
|
Fremragende prestasjon som klart utmerker seg. Viser stor grad av selvstendighet.
|
B
|
Meget god
|
Meget god prestasjon som ligger over gjennomsnittet. Viser evne til selvstendighet.
|
C
|
God
|
Gjennomsnittlig prestasjon som er tilfredsstillende på de fleste områder.
|
D
|
Nokså god
|
Prestasjon under gjennomsnittet, med en del vesentlige mangler.
|
E
|
Tilstrekkelig
|
Prestasjon som tilfredsstiller minimumskravene, men heller ikke mer.
|
F
|
Ikke bestått
|
Prestasjon som ikke tilfredsstiller minimumskravene (hvis det i det hele tatt er nødvendig med noen beskrivelse her).
|
Obs: Dere får ikke besvarelsen tilbake. Den vil bli arkivert i likhet med vanlige eksamensoppgaver.