Tilbake
8.5
Avsluttende prosjekt

8.5 Avsluttende prosjekt

Planlegging og gjennomføring av et komplett IT-prosjekt.

60 min
6 oppgaver
ProsjektPlanleggingPresentasjonDokumentasjon
Du leser den tradisjonelle versjonen
Din fremgang i kapitlet
0 / 6 oppgaver

Nå er det tid for å bringe alt du har lært sammen i et avsluttende prosjekt! I dette kapittelet skal vi gå gjennom hvordan du planlegger, gjennomfører og presenterer et større IT-prosjekt – fra idé til ferdig løsning.

Dette er din mulighet til å vise kompetanse innen programmering, databaser, nettapplikasjoner, testing, versjonskontroll og systemutvikling.

Fase 1: Idégenerering og valg av prosjekt

Gode prosjektideer:
- Løser et reelt problem (ditt eget eller andres)
- Passe omfang (2-6 ukers arbeid)
- Lar deg demonstrere flere kompetansemål
- Noe du er motivert for

Eksempler på prosjekter:
- Treningslogg – Registrer treningsøkter, visualiser progresjon
- Budsjettapp – Spor utgifter, kategoriser, lag rapporter
- Quiz-platform – Lag quizer, ta quiz, se highscore
- Oppskriftsapp – Søk oppskrifter, handlelistegenerator
- Bokingsystem – Book møterom, sportsanlegg, etc.
- Læringsapp – Flashcards, spaced repetition
- Matsvinnapp – Del overskuddsmat i nabolaget

Fase 2: Kravspesifikasjon

Dokumenter hva systemet skal gjøre:

Funksjonelle krav (features):
- "Brukere skal kunne registrere seg med e-post og passord"
- "Systemet skal vise de 10 siste treningsøktene"
- "Brukere skal kunne eksportere data til CSV"

Ikke-funksjonelle krav:
- Ytelse: "Søk skal returnere resultat på < 1 sekund"
- Sikkerhet: "Passord skal haskes med bcrypt"
- Brukervennlighet: "Appen skal fungere på mobil og desktop"

MoSCoW-prioritering:
- Must have – Kritisk funksjonalitet
- Should have – Viktig, men ikke kritisk
- Could have – Nice to have
- Won't have – Utenfor scope

Fase 3: Teknologivalg

Velg teknologier basert på prosjektets behov:

Backend:
- Flask (Python) – Enkel, fleksibel
- Django (Python) – Mer struktur, innebygget admin
- Express.js (Node.js) – JavaScript hele veien

Database:
- SQLite – Enkel, lokal
- PostgreSQL – Robust, for produksjon
- MongoDB – NoSQL, fleksibel struktur

Frontend:
- HTML/CSS/JavaScript – Klassisk
- React – Moderne, komponentbasert
- Flask Templates – Server-side rendering

Versjonskontroll:
- Git + GitHub (alltid!)

Testing:
- unittest/pytest (Python)
- Jest (JavaScript)

Fase 4: Design og arkitektur

Database-design:
- Lag ER-diagram
- Normaliser tabeller
- Definer relasjoner

Wireframes:
- Skissér brukergrensesnitt (papir eller Figma)
- Planlegg navigasjon og arbeidsflyt

Arkitekturdiagram:

[Frontend] <--> [Backend API] <--> [Database]
                    |
                    v
              [External APIs]

Fase 5: Prosjektplan

Bruk Kanban eller lag en sprint-plan:

Eksempel (2-ukers sprints):

Sprint 1:
- Sett opp Git repository
- Lag database-skjema
- Implementer brukerregistrering og innlogging
- Skriv tester for autentisering

Sprint 2:
- CRUD-operasjoner for hovedentitet (f.eks. treningsøkter)
- Enkel frontend for å vise og legge til data
- Integrasjonstester

Sprint 3:
- Søkefunksjonalitet
- Datavisualisering (grafer)
- CSS-styling

Sprint 4:
- Avanserte features (eksport, delefunksjon)
- Bugfixes
- Dokumentasjon

Fase 6: Gjennomføring

Best practices under utvikling:
- Commit ofte (daglig)
- Skriv tester fortløpende
- Hold kodebasen kjørbar
- Dokumenter underveis
- Be om tilbakemelding tidlig

Typiske utfordringer:
- Scope creep – Prosjektet vokser ukontrollert
Løsning: Prioriter MoSCoW, dropp "could have"
- Tekniske problemer – Sitter fast
Løsning: Google, dokumentasjon, be om hjelp
- Tidsnød – For ambisiøst
Løsning: Lever en fungerende MVP (Minimum Viable Product)

Fase 7: Testing og kvalitetssikring

Sjekkliste før innlevering:
- [ ] Alle kritiske features fungerer
- [ ] Tester passerer (minst 70% coverage)
- [ ] Koden er ryddig og dokumentert
- [ ] README er komplett
- [ ] Ingen hardkodede passord/API-nøkler
- [ ] Appen kjører på en annen maskin (be noen om å teste!)

Fase 8: Presentasjon

Typisk struktur (10-15 minutter):

1. Introduksjon (2 min)
- Hva er problemet?
- Hvem er målgruppen?

2. Demo (5 min)
- Vis viktigste funksjonalitet
- Live demo (ha backup-video!)

3. Teknisk gjennomgang (3 min)
- Arkitektur
- Interessante tekniske løsninger
- Utfordringer du løste

4. Refleksjon (2 min)
- Hva lærte du?
- Hva ville du gjort annerledes?
- Videre planer?

5. Q&A (3 min)

Presentasjonstips:
- Øv på forhånd (timekeeper!)
- Start med fungerende kode (reset database før demo)
- Snakk mer om hvorfor enn hva
- Vis frem kode du er stolt av

Fase 9: Retrospektiv

Reflekter over prosjektet:

Hva gikk bra?
- God planlegging?
- Effektiv bruk av Git?
- Bra testing?

Hva kunne vært bedre?
- Urealistisk scope?
- For lite testing?
- Dårlig tidsbruk?

Hva lærte du?
- Tekniske ferdigheter
- Prosjektstyring
- Feilsøking

Neste gang:
- Konkrete forbedringspunkter

✏️Eksempel: Prosjektplan for "Treningslogg-app"
Prosjektnavn: FitTracker

Beskrivelse: Webapplikasjon for å logge treningsøkter og visualisere progresjon.

Kravspesifikasjon (MoSCoW):

Must have:
- Brukerregistrering og innlogging
- Logge treningsøkt (dato, øvelse, sett, reps, vekt)
- Vise historikk over økter
- Søke etter øvelser

Should have:
- Visualisere progresjon med grafer (Chart.js)
- Forhåndsdefinerte øvelser (knebøy, markløft, etc.)

Could have:
- Eksporter data til CSV
- Del økter med venner
- Mobil-responsiv design

Won't have:
- Sosiale features (kommentarer, likes)
- Mobilapp (bare webapp)

Teknologivalg:
- Backend: Flask (Python)
- Database: SQLite (PostgreSQL i produksjon)
- Frontend: HTML/CSS/JavaScript + Chart.js
- Testing: pytest
- Versjonskontroll: Git + GitHub

Database-skjema:

users (id, username, email, password_hash, created_at)
exercises (id, name, category, description)
workouts (id, user_id, date, duration, notes)
workout_sets (id, workout_id, exercise_id, set_number, reps, weight)

Tidsplan (4 uker):

Uke 1:
- Dag 1-2: Sett opp Flask + database
- Dag 3-4: Implementer autentisering (register, login, logout)
- Dag 5: Skriv tester for autentisering

Uke 2:
- Dag 1-2: CRUD for workouts (create, read)
- Dag 3: CRUD for workout_sets
- Dag 4-5: Tester + frontend for logging

Uke 3:
- Dag 1-2: Søkefunksjon for øvelser
- Dag 3-4: Progresjonsgraf med Chart.js
- Dag 5: Responsiv CSS (mobile-first)

Uke 4:
- Dag 1: Eksport til CSV (bonus)
- Dag 2-3: Bugfixes, refaktorering
- Dag 4: Fullstendig README og dokumentasjon
- Dag 5: Forberede presentasjon

Presentasjonsnotat:
- Demo: Registrer bruker → Logg økt → Vis graf
- Teknisk høydepunkt: Forklare Chart.js-integrasjon
- Utfordring: Modellere many-to-many mellom workouts og exercises
- Lærdom: Viktigheten av god databasedesign fra start

Oppgave 1 (Flervalg)
Hva står MoSCoW for i kravspesifikasjon?

A) Most, Should, Could, Won't
B) Must, Should, Could, Won't
C) Maybe, Should, Could, Would
D) Must, Shall, Can, Will

Oppgave 2 (Flervalg)
Hva er et MVP (Minimum Viable Product)?

A) Den mest avanserte versjonen av produktet
B) Et produkt med kun de mest kritiske funksjonene
C) Et produkt uten testing
D) Et produkt kun for mobile enheter

Oppgave 3
Forklar forskjellen mellom funksjonelle og ikke-funksjonelle krav.

Oppgave 4
Du planlegger en quiz-app. Lag en liste med 5 funksjonelle krav (features) og prioriter dem med MoSCoW.

Oppgave 5
Hvorfor er det viktig å be noen andre om å teste appen din før innlevering?

Oppgave 6
Nevn tre ting en god README-fil for et prosjekt bør inneholde.

Oppgave 7
Forklar kort hva "scope creep" er, og hvordan du kan unngå det.

Oppgave 8
Hvorfor bør du skrive tester kontinuerlig gjennom prosjektet, istedenfor å vente til slutten?

// --- Samleoppgaver ---

Samleoppgave 1: Planlegg ditt eget prosjekt

Velg én av disse idéene (eller lag din egen):
- Bokapp med anmeldelser
- Oppskriftsapp med ingredienser og fremgangsmåte
- Studieplanlegger for fag og innleveringer

a) Skriv en kort beskrivelse (2-3 setninger) av prosjektet.
b) Lag en kravspesifikasjon med 8-10 krav (prioritert med MoSCoW).
c) Velg teknologier (backend, database, frontend).
d) Skissér databaseskjema med minst 3 tabeller.
e) Lag en 4-ukers tidsplan med konkrete oppgaver per uke.

Samleoppgave 2: Evaluer et fiktivt prosjekt

En elev har laget en "Matsvinn-app" der folk kan dele overskuddsmat. Appen har:
- Brukerregistrering (e-post + passord i klartekst!)
- Legg ut matannonse (bilde, beskrivelse, lokasjon)
- Se annonser på et kart
- Kommentarfelt (ingen moderering)

Eleven har jobbet alene i 8 uker, ingen versjonskontroll, ingen tester.

a) Hvilke sikkerhetsproblemer ser du?
b) Hvordan kunne bruk av Git ha hjulpet dette prosjektet?
c) Hvilke tester burde vært skrevet?
d) Gi konkrete råd for hvordan eleven kan forbedre koden og prosessen fremover.

Samleoppgave 3: Forbered en presentasjon

Du har nettopp fullført "Treningslogg-appen" fra eksempelet.

a) Lag en detaljert agenda for en 12-minutters presentasjon.
b) Hvilke deler av koden ville du vist frem? Hvorfor?
c) Hvilken utfordring ville du fremhevet, og hvordan løste du den?
d) Hva er dine 3 viktigste lærdommer fra prosjektet?

Oppsummering

I dette kapittelet har du lært:

- Avsluttende prosjekt: planlegging og gjennomføring.
- Prosjektplan: mål, milepæler og fremdrift.
- Gjennomføring: bygge løsningen steg for steg.
- Helhet: bruke kunnskap fra hele faget.
- Dokumentasjon og presentasjon: vise prosess og resultat.

Noekkelbegreper


BegrepForklaring
ProsjektplanPlan med mål, milepæler og fremdrift
MilepaelViktig delmål i et prosjekt

Dette kapitlet er skrevet av Anthropics toppmodeller (Claude Opus og Claude Fable) og er foreløpig ikke manuelt gjennomgått — kvalitetskontrollen gjøres av uavhengige KI-agenter, og innmeldte feil rettes fortløpende. Funnet en feil? Meld fra, så retter vi den. Les mer om hvordan innholdet lages.