Tilbake
8.6

8.6 Systemutvikling og prosessmodeller

Hvordan programvare utvikles: spesifikasjon, utvikling, validering; vannfalls-, spiral- og inkrementell modell; kravspesifikasjon og akseptansetesting.

40 min
7 oppgaver
Systemutviklingprosessmodeller
Din fremgang i kapitlet
0 / 7 oppgaver
Forkunnskaper

Ingen. Kapitlet står helt for seg selv og bygger verken på de andre teorikapitlene eller på programmeringsdelen av boka.

Du får litt mer ut av det hvis du har skrevet noen programmer selv — for eksempel fra kap. 2.2 om gjenbruk og oppdeling i funksjoner — men det er ikke nødvendig.

Vil du ha stoffet i en bredere innpakning:

- Prosjektplanlegging og smidig utvikling — prosessmodeller og smidig utvikling på VGS-nivå.

Tilleggslesingen er frivillig.

Løkke 1 — De fire grunnaktivitetene (~12 min)

Et sykehus trenger et nytt system for timebestilling. Ingen har bestilt et bestemt program — de vet bare at det nåværende ikke virker.

Hva må gjøres, i hvilken rekkefølge? Noen må finne ut hva systemet faktisk skal gjøre. Noen må bygge det. Noen må kontrollere at det virker. Og noen må holde det i live i de tolv årene det skal brukes.

De fire tingene har navn, og alle prosessmodellene i løkke 2 er bare ulike måter å rekkefølge og gjenta dem på.

Systemutvikling
Systemutvikling (også kalt programvareutvikling eller programvareprosess) er hele arbeidet fra et behov til et system i drift — ikke bare programmeringen.

Programmeringen er en mindre del av det enn de fleste tror. Å finne ut hva som skal lages, og å holde det i live etterpå, tar til sammen langt mer tid enn å skrive koden.

Alle prosessmodeller består av de samme fire grunnaktivitetene:

1. Spesifikasjon — hva skal systemet gjøre?
2. Utvikling — design og programmering.
3. Validering — gjør det det skal?
4. Evolusjon — hvordan holdes det i live og endres over tid?

Det som skiller modellene, er ikke hvilke aktiviteter de har, men rekkefølgen og hvor mange ganger de gjentas.

Programvarespesifikasjon

Aktiviteten der man finner ut hva systemet skal gjøre, og skriver det ned slik at både kunden og utviklerne forstår det likt.

Arbeidet består i å snakke med dem som skal bruke systemet, forstå arbeidet deres, og oversette det til krav som kan bygges og kontrolleres.

Hvorfor dette er den dyreste å gjøre feil: en misforståelse her forplanter seg gjennom alt annet. Oppdages den først når systemet er ferdig, må design, kode og tester gjøres om. Er den derimot oppdaget i spesifikasjonen, koster den en samtale.

Resultatet av aktiviteten er kravspesifikasjonen, som du møter i løkke 3.

Programvareutvikling (design og implementasjon)

Aktiviteten der systemet faktisk lages: først design — hvordan systemet skal bygges opp — og deretter implementasjon, altså programmeringen.

Designet svarer på spørsmål som: hvilke deler skal systemet ha, hva skal hver del gjøre, hvordan skal delene snakke sammen, hvordan skal dataene lagres?

Å hoppe over designet og begynne å programmere med én gang, virker på et lite program og bryter sammen på et stort. Det er derfor systemarkitekturen — den overordnede oppdelingen — er et eget begrep.

Programvarevalidering

Aktiviteten der man kontrollerer at systemet gjør det det skal, og at det er det kunden faktisk trengte.

Validering er mer enn testing av kode. Den svarer på to ulike spørsmål, og forskjellen er verdt å merke seg:

- Verifisering: bygde vi systemet riktig? Virker koden som spesifisert?
- Validering: bygde vi riktig system? Er det dette kunden trengte?

Et system kan bestå alle tester og likevel være ubrukelig, hvis spesifikasjonen var feil. Det er nettopp derfor akseptansetesting — der kunden selv prøver systemet — er et eget steg.

Programvareevolusjon (vedlikehold)

Aktiviteten som varer lengst: å endre systemet etter at det er tatt i bruk.

Endringene kommer av at verden endrer seg — nye lover, nye behov, nye maskiner å kjøre på — og av feil som først dukker opp i virkelig bruk.

Poenget for eksamen: for et system som lever lenge, koster evolusjonen mer enn den opprinnelige utviklingen. Et system som er i drift i ti år, er under endring i ti år.

Det er også begrunnelsen for mye av det du lærer i kodedelen av boka: lesbar kode, funksjoner som gjenbrukes, navn som forklarer seg selv. Ikke fordi det er penere, men fordi noen skal endre koden om fem år.

✏️Eksempel 1: Et gjennomgått flervalg om grunnaktivitetene
I hvilken aktivitet finner man ut HVA systemet skal gjøre?

- a) Programvarespesifikasjon
- b) Programvareutvikling
- c) Programvarevalidering
- d) Programvareevolusjon

Riktig svar: a)

Spesifikasjonen svarer på hva. Alle de tre andre kommer etterpå og forutsetter at svaret allerede finnes.

- Utvikling svarer på hvordan: design og programmering.
- Validering svarer på ble det riktig.
- Evolusjon svarer på hva nå, altså endringene etter at systemet er i drift.

Metoden på hele dette temaet: knytt hver aktivitet til ett spørreord. Hvahvordanble det riktighva nå. Fire ord, og de fleste spørsmålene om grunnaktivitetene lar seg besvare på ti sekunder.

Legg merke til at alternativene her er de fire aktivitetene i riktig rekkefølge. Det er en vanlig oppgaveform i dette temaet, og den betyr at du ikke kan gjette ut fra plassering — du må kjenne innholdet i hver.

📝Oppgave 1

(Innstegsoppgave, sjanger A — teori-flervalg: ett riktig alternativ av fire.) Hvilken av de fire grunnaktivitetene varer lengst for et system som er i drift i mange år?

- a) Spesifikasjonen
- b) Utviklingen
- c) Evolusjonen
- d) Valideringen

Løkke 2 — De tre prosessmodellene (~15 min)

Nå kommer den delen som faktisk spørres om. Tre modeller, og forskjellen mellom dem er hvordan de fire grunnaktivitetene ordnes:

- Vannfall: én gang gjennom, i fast rekkefølge.
- Inkrementell: mange små runder, der hver runde gir noe brukbart.
- Spiral: runder rundt og rundt, med risiko som styrer hva som gjøres i hver runde.

Kan du de tre setningene, tar du de fleste spørsmålene.

Vannfallsmodellen

Den eldste og enkleste prosessmodellen: fasene utføres sekvensielt, én ferdig før den neste begynner, som vann som renner nedover trappetrinn.

Fasene i den vanlige framstillingen:

1. Kravspesifikasjon
2. Design (systemarkitektur)
3. Implementasjon
4. Testing
5. Drift og vedlikehold

Figur i ord: tegn fem trinn nedover fra venstre mot høyre, hvert trinn en boks, med en pil fra hver boks ned til den neste. Ingen piler går oppover. Det er hele modellen — og hele problemet med den.

Styrken: enkel å planlegge, enkel å følge opp, og hvert trinn gir et dokument som kan godkjennes. Den passer der kravene er kjent og stabile fra starten.

Svakheten: man ser ikke noe kjørende system før langt ut i løpet, og en misforstått kravspesifikasjon oppdages først i testfasen — når alt allerede er bygd på den. Endringer er dyre nettopp fordi modellen ikke er laget for å gå tilbake.

Det ene ordet som spørres om, er «sekvensielle faser».

Inkrementell utvikling

Systemet bygges i flere små deleveranser — inkrementer — der hver av dem er noe som virker og kan vises fram.

Man begynner med det viktigste, får tilbakemelding, og lar tilbakemeldingen påvirke neste inkrement.

Styrken: kunden ser noe tidlig, misforståelser oppdages mens de er billige å rette, og endrede krav kan tas inn underveis.

Svakheten: helheten kan bli uoversiktlig, og strukturen kan forfalle hvis man aldri stopper opp og rydder. Det er også vanskeligere å si nøyaktig når man er ferdig.

Fellen: å tro at inkrementell er det samme som vannfall bare med flere leveranser. Forskjellen er at inkrementell går tilbake og endrer ut fra det man lærte, mens vannfall gjør hver fase ferdig én gang.

Boehms spiralmodell

En iterativ og risikodrevet modell, formulert av Barry Boehm. Utviklingen går i runder, og hver runde har fire deler:

1. Sett mål for runden.
2. Vurder risiko og finn alternativer.
3. Utvikle og kontroller.
4. Planlegg neste runde.

Figur i ord: tegn en spiral som starter i midten og går utover i stadig større sirkler. Del sirkelen i fire kvadranter, én for hver av de fire delene. Avstanden fra midten viser hvor mye som er investert; hver omdreining er én runde.

Det som er særegent for spiralmodellen, er risikovurderingen. Andre modeller kan være iterative uten å være risikodrevne. I spiralen er det nettopp risikoen som avgjør hva som gjøres i neste runde — er noe usikkert, tar man det først, mens det ennå er billig å snu.

Det ene ordet som spørres om, er «risiko».

Smidig utvikling (agile)

En familie av arbeidsmåter som bygger på inkrementell utvikling, med korte runder — typisk to til fire uker — og tett kontakt med kunden hele veien.

Kjennetegn: fungerende programvare framfor omfattende dokumentasjon, og evne til å ta imot endrede krav framfor å følge en plan som ble lagt for et år siden.

Smidig utvikling er i praksis motstykket til vannfallsmodellen, og de to settes ofte opp mot hverandre i flervalgsalternativer.

Merk: arkivet 2014–2019 spør først og fremst om vannfall, spiral og inkrementell. Smidig er tatt med her fordi ordet ofte står som alternativ i et flervalg, og fordi det er nyttig å vite at det ikke er det samme som spiralmodellen — smidig er drevet av tilbakemelding og korte runder, spiralen av risikovurdering.

✏️Eksempel 2: Det mest spurte spørsmålet i temaet
Hvilken prosessmodell er kjennetegnet ved sekvensielle, ikke-overlappende faser der man ikke går tilbake?

- a) Spiralmodellen
- b) Vannfallsmodellen
- c) Inkrementell utvikling
- d) Smidig utvikling

Riktig svar: b)

Vannfallet renner én vei. Hver fase gjøres ferdig, godkjennes, og så begynner den neste — og modellen har ingen innebygd vei tilbake.

De tre andre er alle iterative på hver sin måte, og det er nettopp derfor de er gode distraktorer:

- Spiralmodellen går i runder, med risikovurdering som styrer hva som gjøres i hver runde.
- Inkrementell utvikling leverer i flere små, fungerende deler og lar tilbakemeldingen påvirke neste del.
- Smidig utvikling er inkrementell med korte runder og tett kundekontakt.

Metoden i praksis: dette spørsmålet kan besvares med én sortering. Tre av modellene gjentar seg; én gjør det ikke. Er spørsmålet formulert med ord som «sekvensiell», «faser», «én gang» eller «ikke tilbake», er svaret vannfall. Er det formulert med «runder», «iterasjoner», «tilbakemelding» eller «risiko», er det en av de tre andre — og da avgjør risiko om det er spiralen.

Sensorpoeng: dette er sannsynligvis det mest gjenbrukte enkeltspørsmålet i hele systemutviklingstemaet. Kan du bare én ting fra dette kapitlet, la det være denne.

📝Oppgave 2
Sjanger A

Hva er det særegne ved Boehms spiralmodell sammenlignet med andre iterative modeller?

- a) At hver runde starter med å vurdere risiko
- b) At hver runde leverer et fungerende delsystem
- c) At hver runde varer nøyaktig fire uker om gangen
- d) At hver runde avsluttes med at kunden godkjenner

📝Oppgave 3
Sjanger A

Hva er hovedsvakheten ved vannfallsmodellen?

- a) At den krever mer dokumentasjon enn moderne modeller gjør
- b) At endrede krav er dyre, siden alt bygger på den første fasen
- c) At den ikke kan brukes på prosjekter med mer enn ti utviklere
- d) At den mangler en testfase, så feil oppdages først i drift

Løkke 3 — Krav, arkitektur og testing (~13 min)

Til slutt tre begreper som opptrer på tvers av alle modellene, og som har hvert sitt faste flervalgsspørsmål: hva kravspesifikasjonen er, hva systemarkitekturen er, og hva akseptansetesting er.

De to første kommer i begynnelsen av arbeidet, det siste helt til slutt. Det er nok til å holde dem fra hverandre.

Kravspesifikasjon (requirements engineering)
Kravspesifikasjonen er dokumentet som sier hva systemet skal gjøre, skrevet så presist at det kan bygges etter og kontrolleres mot.

Arbeidet med å komme fram til den heter på engelsk requirements engineering, og består av fire ting: samle inn krav fra dem som skal bruke systemet, analysere dem, skrive dem ned, og kontrollere at de er entydige og mulige.

Et godt krav er etterprøvbart. «Systemet skal være raskt» kan ingen kontrollere; «systemet skal svare på et søk innen to sekunder» kan alle kontrollere.

Merk plasseringen: kravspesifikasjonen kommer først. Den er kontrakten alt annet måles mot — og derfor det akseptansetestingen til slutt kontrollerer opp mot.

Funksjonelle og ikke-funksjonelle krav

Kravene deles i to slag:

TypeSierEksempel
Funksjonellehva systemet skal gjøre«systemet skal la brukeren avbestille en time»
Ikke-funksjonellehvilke egenskaper løsningen skal ha«systemet skal svare innen to sekunder»

Ikke-funksjonelle krav handler om ytelse, sikkerhet, tilgjengelighet, brukervennlighet og hva systemet skal kjøre på.
Poenget: et system kan gjøre alt det skal og likevel være ubrukelig — hvis det tar et halvt minutt på hver handling. De ikke-funksjonelle kravene er ofte de som avgjør om systemet blir tatt i bruk, og de er også de som oftest glemmes i spesifikasjonen.

Systemarkitektur
Systemarkitekturen er den overordnede oppdelingen av systemet: hvilke hoveddeler det består av, hva hver del har ansvar for, og hvordan delene snakker sammen.

Arkitekturen bestemmes tidlig, i designfasen, og er den beslutningen som er dyrest å endre senere. Å bytte ut en funksjon er en dags arbeid; å bytte ut oppdelingen av hele systemet er et nytt prosjekt.

Sammenhengen med kodedelen av boka er direkte: å dele et program i funksjoner som hver gjør én ting og gjenbruker hverandre, er arkitektur i det små. Det er samme tanke, på en annen skala.

Testnivåene

Testing skjer på flere nivåer, fra det minste til det største:

NivåHva som prøvesHvem gjør det
Enhetstestingén funksjon eller én liten del for segutvikleren
Integrasjonstestingat delene virker sammenutviklingsteamet
Systemtestinghele systemet mot kravspesifikasjonentestere
Akseptansetestingat systemet er det kunden trengtekunden

Rekkefølgen er ikke tilfeldig: en feil er billigst å finne på det laveste nivået. En feil i én funksjon som oppdages i enhetstesten, koster minutter; den samme feilen oppdaget under akseptansetesting koster dager, fordi den må spores gjennom hele systemet først.

Akseptansetesting

Den siste testen: kunden prøver systemet med sine egne data og sine egne arbeidsoppgaver, og avgjør om det kan tas i bruk.

Spørsmålet akseptansetesting svarer på, er ikke «virker koden» — det er avklart tidligere. Det er «er dette systemet vi trengte?»

Legg merke til at akseptansetesting måler mot kravspesifikasjonen, altså mot det som ble avtalt i begynnelsen. Det er derfor de to begrepene henger sammen som en bue over hele prosjektet:

- Kravspesifikasjonen står i begynnelsen og sier hva som skal lages.
- Akseptansetestingen står til slutt og kontrollerer at det er det som ble laget.

Fellen er nettopp å bytte om de to. Et alternativ som sier at akseptansetesting er «å skrive ned hva systemet skal gjøre», er den nære distraktoren.

✏️Eksempel 3: Et flervalg på eksamensnivå om krav og testing
En kommune har bestilt et nytt saksbehandlingssystem. Systemet består alle tester leverandøren kjører, men saksbehandlerne sier at det ikke løser jobben deres. Hva har mest sannsynlig sviktet?

- a) Implementasjonen, siden koden må inneholde feil
- b) Enhetstestingen, siden hver del burde vært prøvd bedre
- c) Systemarkitekturen, siden delene ikke kan snakke sammen
- d) Spesifikasjonen, siden kravene ikke traff det virkelige behovet

Riktig svar: d)

Nøkkelopplysningen står i teksten: systemet består alle tester. Da virker koden som spesifisert — verifiseringen er i orden. Men det som ble spesifisert, var ikke det brukerne trengte, og det er nettopp forskjellen på verifisering og validering:

- Verifisering: bygde vi systemet riktig? Ja.
- Validering: bygde vi riktig system? Nei.

- Alternativet om implementasjonen motsies av at alle tester går grønt.
- Alternativet om enhetstestingen har samme problem. Bedre enhetstester ville funnet flere kodefeil, ikke avdekket at kravene var feil.
- Alternativet om arkitekturen beskriver et symptom som ville gitt tekniske feil, og de ville vist seg i integrasjonstestingen.

Metoden: når et alternativ motsies direkte av en opplysning i oppgaveteksten, stryk det med én gang. Her stryker den ene setningen «består alle tester» hele tre alternativer, og du er framme uten å ha vurdert dem hver for seg.

Og lærdommen bak oppgaven: dette er den dyreste feilen i systemutvikling, og den er grunnen til at spesifikasjonsarbeidet er et eget fag. Alt annet kan rettes; en feil forståelse av behovet må bygges om fra bunnen.

📝Oppgave 4
Sjanger A

Hvem utfører akseptansetesting?

- a) Utviklerne som skrev koden
- b) Kunden som skal bruke systemet
- c) En uavhengig sikkerhetsrevisor
- d) Leverandørens egne testere

📝Oppgave 5
Sjanger A

Hvilket av disse er et ikke-funksjonelt krav?

- a) Systemet skal la brukeren avbestille en time
- b) Systemet skal sende kvittering til brukeren på e-post
- c) Systemet skal svare på et søk i løpet av to sekunder
- d) Systemet skal vise brukerens timer for neste måned

📝Oppgave 6
Sjanger A

Hva er forskjellen på kravspesifikasjon og akseptansetesting?

- a) Kravspesifikasjonen skrives først, akseptansetestingen kontrollerer til slutt
- b) Kravspesifikasjonen kontrollerer til slutt, akseptansetestingen skrives først
- c) Kravspesifikasjonen lages av utviklerne, akseptansetestingen av kunden
- d) Kravspesifikasjonen gjelder koden, akseptansetestingen gjelder maskinvaren

📝Oppgave 7
Eksamensnivå, sjanger A

Et prosjekt skal bygge et system der kundene er usikre på hva de trenger, og der teknologien er uprøvd. Hvilken tilnærming passer best, og hvorfor?

- a) Vannfall, fordi en fast plan gir forutsigbar framdrift i usikre prosjekter
- b) Vannfall, fordi kravene da må avklares helt før noe som helst bygges
- c) En iterativ modell, fordi usikkerheten bør reduseres tidlig og trinnvis
- d) En iterativ modell, fordi dokumentasjon da kan sløyfes i sin helhet

Begreps- og enhetsliste

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.

Skolesaga er en uavhengig læringsressurs og er ikke tilknyttet eller godkjent av Norges teknisk-naturvitenskapelige universitet. Dette er ikke offisielt studiemateriell. Les mer.