course-details-portlet

IDIG4210

Programmering og programvarearkitektur

Nytt fra studieåret 2026/2027

Vurdering og obligatoriske aktiviteter kan bli endret frem til 20. september.

Studiepoeng 7,5
Nivå Høyere grads nivå
Undervisningsstart Vår 2027
Varighet 1 semester
Undervisningsspråk Engelsk
Sted Gjøvik
Vurderingsordning Skriftlig skoleeksamen

Om

Om emnet

Faglig innhold

Dette masteremnet utfordrer antakelsen om at det finnes universelle «beste praksiser» innen programvarearkitektur. Gjennom tre progressive moduler får studentene erfare hvordan ulike systemkrav (ytelse, pålitelighet, integrasjonskompleksitet) grunnleggende påvirker arkitektoniske beslutninger.

Emnet benytter en slank teknologistakk: et systemprogrammeringsspråk uten søppelrydding (garbage collection) for ytelseskritisk funksjonalitet, samt et moderne språk med sterke typesystemer for utvikling av tjenester og klienter. Studentene arbeider med én sammenhengende kodebase gjennom hele semesteret, som videreutvikles på tvers av modulene for å gi erfaring med hvordan arkitektoniske valg forsterkes og akkumuleres over tid.

Modul 1 har fokus på ytelsesoptimalisering og ressursbegrensninger, og introduserer konsepter som dataorientert design, profileringsmetodikk og sanntidssystemer. Dette reflekterer krav som ofte finnes innen områder som spillutvikling, datagrafikk og visuell informasjonsbehandling.

Modul 2 vektlegger pålitelighet og etterprøvbarhet i samfunns- og forretningskritiske systemer. Temaer inkluderer blant annet event sourcing, CQRS-mønstre og strategier for utrulling uten nedetid, slik man finner i systemer innen bank, forsikring og helsesektoren.

Modul 3 kontrasterer og integrerer disse tilnærmingene i distribuerte systemer med offline-first-klienter og orkestrering av KI/LLM-løsninger. Her må studentene syntetisere og håndtere motstridende krav.

Emnet legger stor vekt på evidensbasert resonnement: arkitektoniske påstander skal underbygges med kvalitative eller kvantitative bevis, som profileringsdata, telemetri, testresultater, brukerfeedback eller dokumentert produksjonsbruk. Studentene lærer å instrumentere systemer med rammeverk for distribuert sporing, håndheve ytelsesbudsjetter som kjørbare tester, og dokumentere arkitektoniske beslutninger, for eksempel ved bruk av strukturerte Architecture Decision Records (ADR).

Vurderingen er sentrert rundt leveranser som demonstrerer teknisk kompetanse, måledrevet optimalisering og tydelig artikulering av avveininger. Integrasjonsklinikker gir rom for fagfellekritikk, der studentene må forsvare egne arkitektoniske valg og lære av alternative tilnærminger.

Emnet forbereder studentene på reell programvareutvikling, der motstridende krav (hastighet versus korrekthet, modularitet versus ytelse, konsistens versus tilgjengelighet) krever kontekstuell vurdering fremfor memoriserte mønstre. Kandidatene utvikler evnen til å analysere komplekse arkitekturproblemer, velge hensiktsmessige verktøy og mønstre basert på problemets karakter, og kommunisere tekniske beslutninger til ulike interessenter med en tydelig og evidensbasert begrunnelse.

Læringsutbytte

Forklaring: R = Huske, U = Forstå, A = Anvende, An = Analysere, E = Evaluere, C = Skape. På masternivå legges hovedvekten på An/E/C: analysere komplekse avveininger, begrunne beslutninger med bevis, og skape robuste løsninger under usikkerhet.

Kunnskap

  • Evaluere og analysere dilemmaer og begrunne avveininger på tvers av operative miljøer (høyytelse, sanntid, mission-critical, innebygde systemer) innen programvareprosessen. (An, E)
  • Sammenligne Data-Oriented Design og Domain-Driven Design, og forklare de grunnleggende avveiningene mellom disse paradigmene. (An, E)
  • Analysere arkitektoniske implikasjoner og evaluere avveininger mellom motstridende eller komplementære mål. (An, E)
  • Analysere sikkerhetsimplikasjoner av arkitektoniske valg og prioritere risikoer/kontroller med begrunnelse. (An, E)
  • Beskrive og skille mellom lagdelte teststrategier og forklare hvordan de validerer ulike systemegenskaper. (U, An)
  • Kvantifisere og analysere ytelseskostnader ved abstraksjonsgrenser basert på empiriske data. (An)
  • Forklare og vurdere prinsipper for programmeringsspråk (f.eks. typesystemer, immutabilitet) og utlede implikasjoner for robuste systemer. (U, An)
  • Beskrive og evaluere distribusjonsstrategier (blue/green, canary) og tilpasse dem til operative forhold. (U, E)

Ferdigheter

  • Refaktorere eksisterende kodebaser for å forbedre struktur uten å endre funksjonalitet, og begrunne refaktoreringene. (A, E)
  • Designe CI/CD-pipelines og måle ytelse/tilgjengelighet mot definerte SLOer. (C, An)
  • Instrumentere systemer med passende rammeverk og diagnostisere flaskehalser fra telemetri. (A, An)
  • Anvende sikkerhet-by-design med relevante samsvarsbegrensninger og begrunne valg av kontroller. (A, E)
  • Designe robuste, vedlikeholdbare systemgrenser/API-er og validere dem mot endringsscenarioer. (C, E)
  • Sette sammen lagdelte testpakker (unit, property-based, kontrakt, integrasjon) og vurdere dekning/effektivitet. (C, E)
  • Konseptualisere og spesifisere offline-first-klienter med konfliktløsning for intermittent tilkobling, og evaluere avveininger. (C, E)
  • Orkestrere administrerte AI/LLM-APIer med input/output-validering og analysere kostnads- og ytelsesegenskaper. (A, An)

Generell kompetanse

  • Syntetisere motstridende designfilosofier basert på prosjektkontekst og begrunne valgt tilnærming. (C, E)
  • Navigere i krav-usikkerhet ved å formulere kjente ukjente og gjøre antakelser eksplisitte. (An, E)
  • Gjenkjenne og forklare at arkitektonisk ekspertise innebærer vurdering under usikkerhet, og begrunne beslutningskriterier. (U, E)
  • Diagnostisere feil i AI-assisterte løsninger og fastslå rotårsaker med bevis. (An, E)
  • Tilpasse seg ukjente teknologistakker (persistens, språk, UI) ved å tilegne seg kunnskap fra dokumentasjon og feilsøke effektivt. (A, An)
  • Kommunisere tekniske beslutninger til ulike interessenter med bevis og tydelig begrunnelse; legge til rette for enighet. (A, E)
  • Samarbeide i tverrfaglige team, spesialisere seg samtidig som man oppfyller felles krav. (A)
  • Reflektere gjennom strukturerte retrospektiver og omsette innsikt til konkrete forbedringer. (E)
  • Velge verktøy og språk basert på problemkarakteristikker og begrunne valg utover ren kjennskap. (E)

Læringsformer og aktiviteter

  • Seminarer og studioer: Konseptuelle dybdeanalyser, live-demonstrasjoner av profilerings- og instrumenteringsverktøy
  • Integrasjonsklinikker: Presentasjon av modulinnleveringer for medstudenter med konstruktiv kritikk, der studentene må begrunne arkitektoniske valg og forklare avveininger
  • Iterativ utvikling: Studentene videreutvikler kodebaser gjennom semesteret og opplever hvordan arkitektoniske beslutninger bygger seg opp over tid
  • Instrumenterings-først-tilnærming: Tidlig etablering av observasjonsverktøy (profilere, distribuert sporing, metrikktavler)
  • Evidensbasert begrunnelse: Arkitektoniske påstander må støttes av målinger, testresultater eller distribusjonsevidens, ikke bare intuisjon

Obligatoriske aktiviteter

  • Oblig (Modul 1)
  • Oblig (Modul 2)
  • Oblig (Modul 3)

Mer om vurdering

Tre modulinnleveringer (3 obliger) knyttet til de tematiske modulene for det aktuelle året, avsluttende skriftlig skoleeksamen (100 prosent).

Kontinuasjonseksamen i august.

Spesielle vilkår

Krever opptak til studieprogram:
Applied Computer Science (MACS)
Informatics (MSIT)

Forkunnskapskrav

Studentene bør ha tatt (og bestått) introduksjonskurset Modern Software Engineering (IDIG4110). Unntak kan kun innvilges av kursets koordinator eller ansvarlig foreleser.

Kursmateriell

  • Forelesningsslides og annoterte labhåndouts
  • Utvalgte lesninger: forskningsartikler, plattformretningslinjer og korte fagartikler
  • Offisiell plattformsdokumentasjon (arkitektur, UX, tillatelser, nettverk, lagring)
  • Eksempelkode-repositorier og startmaler for laboratorier og prosjekt
  • Testing og verktøy: enhetstesting/UI-/property-baserte testrammeverk, profilerings- og telemetriguider
  • Sjekklister for tilgjengelighet og internasjonalisering; brukervennlighetsheuristikker
  • Personvern- og sikkerhetsmateriale: arbeidsark for trusselmodellering, sikker-by-design-sjekkliste, retningslinjer for håndtering av data
  • Offline-first-mønstre: notater om synkronisering/konfliktløsning og mock API-spesifikasjoner
  • KI-/kodegenereringspolicy, mal for prompt-logging og verifiseringsarbeidsflyt

Fagområder

  • Informatikk

Eksamen

Eksamen

Vurderingsordning: Skriftlig skoleeksamen
Karakter: Bokstavkarakterer

Ordinær eksamen - Vår 2027

Skriftlig skoleeksamen
Vekting 100/100 Hjelpemiddel Kode E Varighet 3 timer Eksamenssystem Papir Sted og rom Ikke spesifisert ennå.

Utsatt eksamen - Sommer 2027

Skriftlig skoleeksamen
Vekting 100/100 Hjelpemiddel Kode E Varighet 3 timer Eksamenssystem Papir Sted og rom Ikke spesifisert ennå.