Kompetansemål i faget Utvikling

Skip to content

Merk

Listen under er veiledende og gir eksempler på hva de ulike kompetansemålene i faget Utvikling omfatter. Den dekker ikke alt som kan inngå i kompetansemålene.

Det er viktig for deg som elev å kunne knytte kompetansemålene til eget arbeid, spesielt med tanke på eksamensforberedelser.

Gjennomgang av kompetansemålene

Kompetansemålene kommer fra Udir.

Vurdere fordeler og ulemper ved ulike programmeringsspråk og velge og anvende relevante programmeringsspråk og algoritmer i eget arbeid

Denne kompetansen handler om å forstå at ulike språk har ulike styrker, og å kunne begrunne valgene man tar i egne prosjekter.

Sammenligning av programmeringsspråk

Språk Styrker Svakheter Typisk bruksområde
Python Enkel syntaks, mange biblioteker Dynamisk typing kan skjule feil, GIL begrenser ekte parallellitet Web, automatisering, data, AI
JavaScript Kjører i nettleseren, stort økosystem Svakt typet, kan gi uforutsigbare feil Frontend, backend (Node.js)
C# Sterkt typet, god IDE-støtte Mer komplekst enn Python Spill (Unity), desktop-applikasjoner
Java Plattformuavhengig (JVM), robust Mye boilerplate-kode Store systemer, Android
C++ Svært raskt, full kontroll over ressurser Komplekst, manuell minnehåndtering Spillmotorer, systemprogramvare

Algoritmer

Begrep Forklaring Eksempel
Algoritme En steg-for-steg oppskrift for å løse et problem Sortering av en liste, søk i data
Tidskompleksitet Hvor lang tid en algoritme bruker i forhold til inputen O(n), O(n²), O(log n)
Iterativ utvikling Bygge og forbedre løsningen gradvis Lag en enkel versjon først, forbedre den

Utforskingsområder

  • Sammenlign Python og et annet språk (f.eks. C# eller Java) - lag det samme programmet i begge
  • Lag en sorteringsalgoritme i Python uten å bruke innebygde funksjoner
  • Utforsk et nytt programmeringsspråk og skriv en kort rapport om fordeler og ulemper
Lage og begrunne funksjonelle krav til en IT-løsning basert på behovskartlegging

Kompetansen handler om å finne ut hva brukerne trenger og formulere dette som konkrete krav til løsningen.

Begrep Forklaring Eksempel
Behovskartlegging Systematisk undersøke hva brukerne trenger Intervju, spørreundersøkelse, observasjon
Funksjonelle krav Konkret beskrivelse av hva systemet skal gjøre «Brukeren skal kunne registrere seg med e-post»
Ikke-funksjonelle krav Krav til ytelse, sikkerhet, brukervennlighet «Siden skal laste på under 2 sekunder»
Feature requests Konkrete ønsker om ny funksjonalitet, formulert fra brukerens behov «Jeg vil kunne filtrere produkter etter kategori»

Utforskingsområder

  • Lag en behovskartlegging for en fiktiv nettbutikk eller skole-app
  • Skriv 5-10 funksjonelle krav basert på kartleggingen
  • Formuler feature requests for en Python Flask-applikasjon basert på tilbakemeldinger fra brukere
Vurdere brukergrensesnitt til IT-tjenester og designe tjenester som er tilpasset brukernes behov

Fokus er på å lage løsninger som er intuitive og brukervennlige, med utgangspunkt i brukerens perspektiv.

Begrep Forklaring Eksempel
UI (User Interface) Det visuelle designet brukeren ser og interagerer med Knapper, menyer, farger, layout
UX (User Experience) Helhetsopplevelsen brukeren har med løsningen Er det lett å finne frem? Fungerer flyten?
Universell utforming Design som inkluderer alle brukere, også med nedsatt funksjonsevne Kontraster, skjermleser-støtte, tastaturnavigasjon
Prototyping Lage skisser eller wireframes før man koder Figma, Penn og papir

Utforskingsområder

  • Evaluer brukergrensesnittet til en eksisterende nettside - hva fungerer bra og dårlig?
  • Lag en wireframe/prototype for en Flask-applikasjon med pen og papir eller Figma
  • Design en enkel nettside med HTML/CSS som følger prinsipper for universell utforming
Gjøre rede for hensikten med teknisk dokumentasjon og utarbeide teknisk dokumentasjon for IT-løsninger

Kompetansen handler om å kunne skrive dokumentasjon som gjør at andre (og fremtidig deg) kan forstå, vedlikeholde og videreutvikle en løsning.

Type dokumentasjon Forklaring Eksempel
README Overordnet beskrivelse av prosjektet Hva gjør prosjektet, hvordan installere
API-dokumentasjon Beskrivelse av endepunkter og dataformater Flask-ruter, request/response
Kodekommentarer Forklaringer i selve koden Docstrings, inline-kommentarer
Brukerveiledning Hvordan brukeren skal bruke løsningen Steg-for-steg-guide med skjermbilder
Systemdokumentasjon Arkitektur, avhengigheter, oppsett Nettverkskart, requirements.txt

Utforskingsområder

  • Skriv en god README.md for et av dine Python-prosjekter på GitHub
  • Dokumenter API-endepunktene i en Flask- eller FastAPI-applikasjon
  • Bruk docstrings i Python-funksjonene dine
  • Lag en enkel brukerveiledning for en applikasjon du har laget, med skjermbilder og instruksjoner
Beskrive og anvende relevante versjonskontrollsystemer i utviklingsprosjekter

Versjonskontroll er essensielt for å spore endringer, samarbeide og sikre arbeidet sitt.

Begrep Forklaring Eksempel
Git Distribuert versjonskontrollsystem git init, git commit, git push
GitHub Skybasert plattform for Git-repositories Lagre prosjekter, samarbeide
Branch En parallell versjon av koden for utvikling feature/login, bugfix/header
Merge Slå sammen endringer fra en branch til en annen Pull request på GitHub
Commit Et «lagringspunkt» med beskrivelse av endringer git commit -m "Lagt til innlogging"
.gitignore Fil som sier hvilke filer Git skal ignorere __pycache__/, .env, venv/

Utforskingsområder

  • Bruk Git og GitHub aktivt i alle prosjektene dine
  • Øv på branching og merging - lag en branch for en ny funksjon, commit endringene, og opprett en Pull Request tilbake til main
  • Skriv gode commit-meldinger som beskriver hva som ble endret
  • Utforsk CI/CD med GitHub Actions - f.eks. automatisk deploy til GitHub Pages eller en Docker-container
Designe og implementere IT-tjenester med innebygget personvern

Fokus er å tenke personvern allerede fra designfasen, ikke som en ettertanke.

Prinsipp Forklaring Eksempel
Privacy by Design Personvern bygges inn fra start Minimere datainnsamling, kryptere passord
Dataminimering Samle kun de data som er nødvendige Ikke lagre fødselsdato hvis det ikke trengs
Kryptering Beskytte data slik at uvedkommende ikke kan lese det Hashing av passord med SHA-512, kryptering med RSA
Samtykke Brukeren må godkjenne innsamling av persondata Informert samtykke ved registrering
GDPR EUs personvernforordning som gjelder i Norge Rett til innsyn, sletting, dataportabilitet

Utforskingsområder

  • Lag en Flask-applikasjon med innlogging der passord hashes (f.eks. med hashlib og SHA-512)
  • Implementer et samtykkeskjema i en nettside
  • Diskuter hvilke data en skole-app faktisk trenger å lagre
Analysere digitale trusler, verdier og sårbarheter og utvikle applikasjoner med innebygget sikkerhet

Kompetansen handler om å kjenne til vanlige trusler og bygge sikkerhet inn i koden fra starten.

Vanlige trusler og sårbarheter

Trussel/Sårbarhet Forklaring Tiltak
SQL Injection Ondsinnet SQL-kode sendes via brukerinput Parameteriserte spørringer, ORM
XSS (Cross-Site Script) Ondsinnet JavaScript injiseres i en nettside Escape brukerinput, Content Security Policy
Brute Force Gjentatte forsøk på å gjette passord Rate limiting, sterke passordkrav, MFA
Utdaterte avhengigheter Kjente sårbarheter i gamle biblioteker Dependabot, regelmessig oppdatering
Hardkodede hemmeligheter Passord/API-nøkler direkte i kildekoden Miljøvariabler (.env), secrets management

Verdivurdering

Verdi Eksempel
Brukerdata Navn, e-post, passord
Forretningslogikk Algoritmer, prisberegninger
Tilgjengelighet At tjenesten er oppe og fungerer

Utforskingsområder

  • Lag en Flask-applikasjon og test den mot vanlige sårbarheter (f.eks. SQL injection)
  • Bruk miljøvariabler (.env) for å lagre API-nøkler og hemmeligheter
  • Implementer inputvalidering i et Python-prosjekt (se Datavalidering-modulen)
  • Sett opp Dependabot på et GitHub-repository
Anvende relevant testmiljø og utføre testing tilpasset IT-løsningen som utvikles

Kompetansen handler om å sikre kvaliteten på kode gjennom systematisk testing.

Type testing Forklaring Eksempel / Verktøy
Enhetstesting Teste individuelle funksjoner isolert pytest, unittest
Integrasjonstesting Teste at flere deler fungerer sammen Sjekke at en Flask-rute henter riktig data fra databasen
Automatisert testing Bruke verktøy som simulerer en bruker i nettleseren Selenium, Playwright
Manuell testing Teste manuelt ved å bruke applikasjonen Klikke gjennom en nettside
Testdrevet utvikling Skrive tester før koden (TDD) Skriv test → Se at den feiler → Lag kode
Testmiljø Eget miljø for testing som ikke påvirker produksjon Virtuell maskin, Docker-container

Utforskingsområder

  • Skriv enhetstester med pytest for et Python-prosjekt
  • Prøv automatisert nettlesertesting med Selenium - test at en nettside oppfører seg riktig
  • Sett opp et testmiljø med Docker eller en virtuell maskin i Proxmox
  • Utforsk GitHub Actions for automatisk testing ved push
Modellere og opprette databaser for informasjonsflyt i systemer

Fokus er å forstå hvordan data struktureres, lagres og flyter gjennom et system. En database er i bunn og grunn en samling av tabeller som henger sammen - litt som et regneark, men med regler for hvordan tabellene relaterer til hverandre.

Begrep Forklaring Eksempel
Relasjonsdatabase Data lagret i tabeller med rader (oppføringer) og kolonner (felter), der tabellene kan kobles sammen SQLite, PostgreSQL, MySQL
ER-diagram En tegning som viser tabellene i databasen, hvilke felter de har, og hvordan de henger sammen (entity-relationship) En elever-tabell koblet til en klasser-tabell via klasse_id
Normalisering Organisere tabellene slik at data ikke lagres flere steder (unngå duplisering). Deles inn i normalformer (1NF, 2NF, 3NF) I stedet for å skrive klassenavnet i hver elevrad, lager man en egen klasser-tabell og refererer til den
Primærnøkkel En kolonne (eller kombinasjon) som unikt identifiserer hver rad i en tabell id-kolonnen - ingen to rader har samme id
Fremmednøkkel En kolonne som peker til primærnøkkelen i en annen tabell, og dermed kobler tabellene sammen klasse_id i elever-tabellen peker til id i klasser-tabellen

Utforskingsområder

  • Lag et ER-diagram for en enkel applikasjon (f.eks. en blogg med brukere, innlegg og kommentarer)
  • Opprett en SQLite-database i Python med sqlite3-modulen
  • Bruk en ORM som SQLAlchemy sammen med Flask
Beskrive ulike datalagringsmodeller og metoder for å hente ut og sette inn bestemte data fra databaser som brukes av andre systemer

Kompetansen handler om å forstå ulike måter å lagre data på og hvordan systemer utveksler data via spørringer og APIer.

Datalagringsmodeller

Modell Forklaring Eksempel
Relasjonell (SQL) Data i tabeller med rader og kolonner, relasjoner via nøkler SQLite, PostgreSQL
Dokumentbasert Data lagret som dokumenter (ofte JSON) MongoDB, Firebase
Nøkkel-verdi Enkel lagring med nøkkel og tilhørende verdi ValKey, Redis
Filbasert Data lagret i filer (CSV, JSON, XML) Konfigurasjonsfiler, eksportdata

Hente ut og sette inn data

Metode Forklaring Eksempel
SQL-spørringer Strukturerte spørringer mot relasjonsdatabaser SELECT * FROM elever WHERE klasse = 'VG2'
CRUD Create, Read, Update, Delete - de fire grunnoperasjonene Flask API med POST, GET, PUT, DELETE
API (REST) Hente/sende data fra/til andre systemer via HTTP requests.get("https://api.example.com/data")
ORM Objekt-relasjonell mapping - bruke Python-objekter i stedet for rå SQL SQLAlchemy

Utforskingsområder

  • Lag et Flask REST API som utfører CRUD-operasjoner mot en SQLite-database
  • Hent data fra et offentlig API med Python requests-biblioteket (se Flask 2 - API-modulen)
  • Sammenlign SQL-database med JSON-fillagring i et lite prosjekt
  • Utforsk SQL-spørringer: SELECT, INSERT, UPDATE, DELETE, JOIN

Tverrfaglige temaer

Fagene Utvikling, Brukerstøtte og Driftstøtte overlapper på flere områder. Her ser du hvordan fagene henger sammen, og hvorfor det er nyttig å forstå helheten.

📄 Dokumentasjon (Utvikling + Brukerstøtte + Driftstøtte)

Alle tre fagene handler om å skrive god dokumentasjon, bare med ulikt fokus:

  • I Utvikling skriver du README-filer og API-dokumentasjon. I Brukerstøtte blir den samme informasjonen til en brukerveiledning. I Driftstøtte brukes den til å sette opp appen på en server.
  • En README som beskriver miljøvariabler og requirements.txt er teknisk dokumentasjon, men også driftsdokumentasjon.
  • Docstrings i Python-koden din er nyttig for deg selv, men også for den som skal feilsøke eller videreutvikle prosjektet.

🔐 Sikkerhet og personvern (Utvikling + Brukerstøtte + Driftstøtte)

Sikkerhet dukker opp i alle tre fagene, men på forskjellige nivåer:

  • I Utvikling hasher du passord og validerer input. I Brukerstøtte veileder man brukere i sterke passord og MFA. I Driftstøtte konfigureres brannmur og HTTPS på serveren.
  • Privacy by Design betyr at du bygger samtykke og dataminimering inn i koden. Brukerstøtte forklarer brukerne hva som lagres. Driftstøtte sørger for at dataene lagres og slettes riktig.
  • Alle tre fagene jobber med GDPR, men fra hver sin vinkel: kode, kommunikasjon og infrastruktur.

🧪 Feilsøking (Utvikling + Brukerstøtte + Driftstøtte)

Feilsøking er sentralt i alle tre fagene. Metodene er forskjellige, men utfyller hverandre:

  • I Utvikling skriver du tester med pytest og leser applikasjonslogger. I Brukerstøtte brukes halvdelingsmetoden for å finne ut hva som feiler. I Driftstøtte overvåkes servere med verktøy som Grafana.
  • Samme feil kan se forskjellig ut fra hvert perspektiv: brukeren ser en feilmelding, utvikleren ser en stack trace, og driftstøtte ser høy CPU-bruk.
  • God logging i koden gjør feilsøking enklere for alle. Et tidspunkt og en feilmelding fra brukerstøtte er mye mer nyttig når applikasjonen logger detaljert.

👥 Brukerforståelse og krav (Utvikling + Brukerstøtte)

Begge fagene handler om å forstå brukerne, men på ulike måter:

  • I Utvikling gjør du behovskartlegging og skriver funksjonelle krav. I Brukerstøtte samler man tilbakemeldinger og ser mønstre i hva brukerne sliter med.
  • Et brukergrensesnitt som er vanskelig å forstå fører til flere henvendelser til brukerstøtte. God UX-design i Utvikling reduserer behovet for veiledning.
  • Feature requests fra brukerstøtte er i praksis behovskartlegging. Begge fagene jobber med det samme problemet fra hver sin side.

⚖️ Lovverk og personvern (Utvikling + Driftstøtte)

GDPR og personopplysningsloven påvirker både koden og infrastrukturen:

  • I Utvikling bygger du inn sletting av brukerdata. I Driftstøtte sørger man for at dataene faktisk forsvinner fra backup og logger også.
  • Dataminimering er et prinsipp i Utvikling (samle kun nødvendige data). I Driftstøtte handler det om at databaser og logger ikke lagrer mer enn nødvendig.
  • Begge fagene må dokumentere hvilke persondata som behandles, men i Utvikling handler det om koden, og i Driftstøtte om infrastrukturen.

🔄 Versjonskontroll og utrulling (Utvikling + Driftstøtte)

Git brukes i begge fagene, men til forskjellige formål:

  • I Utvikling bruker du Git for branching, pull requests og samarbeid om kode. I Driftstøtte versjonskontrolleres server-konfigurasjon og scripts.
  • CI/CD knytter fagene sammen: utvikleren merger kode, GitHub Actions kjører tester, og en pipeline ruller ut den nye versjonen på serveren.
  • Begge fagene bruker commit-meldinger og endringslogger for å spore hva som er endret og hvorfor.

Overordnede temaer

I læreplanen (LK20) er det tre overordnede temaer som skal prege opplæringen på tvers av fag. Her er eksempler på hvordan de er relevante i Utvikling.

🏥 Folkehelse og livsmestring

Teknologi påvirker hverdagen til folk. Som utvikler har du direkte innflytelse på brukeropplevelsen.

  • Universell utforming (WCAG) sørger for at applikasjoner fungerer for alle, inkludert brukere med nedsatt syn eller motorikk
  • Dark patterns er designvalg som lurer brukere til å gjøre ting de ikke ønsker (f.eks. skjulte abonnementer). God UX-design unngår dette.
  • Personvern i kode handler om å beskytte brukernes digitale identitet, f.eks. hashing av passord og dataminimering

🏛️ Demokrati og medborgerskap

Programvare kan gjøre informasjon og tjenester tilgjengelige for alle, eller stenge folk ute. Valgene du tar som utvikler har betydning.

  • Åpen kildekode gjør programvare tilgjengelig for alle og fremmer kunnskapsdeling, f.eks. ved å publisere prosjekter på GitHub med en åpen lisens
  • Opphavsrett og lisenser (MIT, GPL, Apache) handler om å respektere andres arbeid og forstå hva du har lov til å bruke i egne prosjekter
  • Universell utforming sikrer at digitale tjenester er tilgjengelige for alle borgere, uavhengig av funksjonsevne

🌱 Bærekraftig utvikling

Koden du skriver kjører på servere som bruker strøm. Teknologivalg påvirker ressursbruk.

  • Effektive algoritmer bruker mindre prosessorkraft og energi. Forskjellen mellom O(n) og O(n²) kan utgjøre mye i stor skala.
  • Vedlikeholdbar kode med god dokumentasjon og modulær struktur kan gjenbrukes og videreutvikles i stedet for å skrives på nytt
  • Valg av teknologi påvirker ressursbruk: en statisk nettside bruker langt mindre serverkapasitet enn en tung applikasjon