8.6 Systemutvikling og prosessmodeller
Hvordan programvare utvikles: spesifikasjon, utvikling, validering; vannfalls-, spiral- og inkrementell modell; kravspesifikasjon og akseptansetesting.
- Systemutvikling står i ~50 % av settene (5 av 10 sittinger i arkivet 2014–2019). Det er den laveste frekvensen av alle de seks teoriklyngene.
- Enda viktigere: temaet var tungt i 2014–2017 og tonet klart ned i 2018–2019, der teoridelen dreide mot nettverk, sikkerhet og maskinvare i stedet.
- Sjangeren er A — teori-flervalg om datateknologi, altså «ett riktig alternativ av fire».
- Prioritet: bør kjenne til — nivå 3, det laveste av bokas tre («må sitte», «må kunne», «bør kjenne til»).
Hva det betyr i praksis. Har du dårlig tid før eksamen, er dette kapitlet det første du kutter ned på i Del 8 — kap. 8.1 og kap. 8.2 er langt viktigere. Men kutt det ikke helt: temaet var stort i fire av de fem første årene i arkivet, og et tema som har vært stort før, kan komme igjen. Ett eller to spørsmål på settet er fullt mulig.
Den gode nyheten: kapitlet er kort, og det inneholder ingen regning. Førti minutter én gang, og du har det du trenger.
Ingen minuspoeng fra og med 2015, så kryss alltid av — og på nettopp dette temaet er det verdt å merke seg: selv en delvis huskeregel gir deg langt bedre enn 25 % på et flervalg.
Kapitlet tar ~40 minutter og går i tre løkker.
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å.
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.
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.
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.
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.
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.
- a) Programvarespesifikasjon
- b) Programvareutvikling
- c) Programvarevalidering
- d) Programvareevolusjon
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. Hva — hvordan — ble det riktig — hva 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.
(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.
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».
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.
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».
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.
- a) Spiralmodellen
- b) Vannfallsmodellen
- c) Inkrementell utvikling
- d) Smidig utvikling
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.
Feilkode #11 — å forveksle tett formulerte alternativer — i fire varianter:
- Vannfall mot spiral. Vannfall er sekvensiell, spiralen er iterativ og risikodrevet. Et alternativ som beskriver spiralen som «faser i fast rekkefølge» er fella.
- Inkrementell mot vannfall. Inkrementell leverer flere fungerende deler og lar tilbakemelding endre kursen. Vannfall gjør hver fase ferdig én gang. At noe har flere leveranser, gjør det ikke inkrementelt hvis ingenting går tilbake.
- Inkrementell mot spiral. Begge er iterative. Skillet er at spiralen styres av risikovurdering i hver runde. Ordet «risiko» peker alltid på spiralen.
- Kravspesifikasjon mot akseptansetesting. Kravspesifikasjonen skrives først og sier hva systemet skal gjøre. Akseptansetestingen kommer sist og kontrollerer om det ble slik. De to blandes fordi begge er kundens møte med systemet.
Motgiften: knytt hver modell til ett nøkkelord — vannfall/sekvensiell, inkrementell/deleveranser, spiral/risiko, smidig/korte runder — og hver aktivitet til ett spørreord. Da er nesten alle spørsmålene i temaet ett oppslag.
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
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.
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.
Kravene deles i to slag:
| Type | Sier | Eksempel |
|---|---|---|
| Funksjonelle | hva systemet skal gjøre | «systemet skal la brukeren avbestille en time» |
| Ikke-funksjonelle | hvilke 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.
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.
Testing skjer på flere nivåer, fra det minste til det største:
| Nivå | Hva som prøves | Hvem gjør det |
|---|---|---|
| Enhetstesting | én funksjon eller én liten del for seg | utvikleren |
| Integrasjonstesting | at delene virker sammen | utviklingsteamet |
| Systemtesting | hele systemet mot kravspesifikasjonen | testere |
| Akseptansetesting | at systemet er det kunden trengte | kunden |
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.
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.
- 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
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.
Hvem utfører akseptansetesting?
- a) Utviklerne som skrev koden
- b) Kunden som skal bruke systemet
- c) En uavhengig sikkerhetsrevisor
- d) Leverandørens egne testere
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
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
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
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.