Komplett pensumoversikt for avansert programvareutvikling ved NTNU — med forklaringer, sentrale begreper, eksamenstips og vanlige fallgruver. Eksamensoptimalisert basert på tidligere eksamener.
Denne studieguiden dekker pensum i TDT4242 Avansert programvareutvikling ved NTNU (også kjørt under tittelen Software Requirements and Testing / Advanced Software Engineering). Faget kobler sammen kravspesifikasjon og testing/kvalitetssikring til ett hele: hvordan man fanger gode krav, og hvordan man verifiserer at programvaren faktisk oppfyller dem.
Eksamen er en 4-timers skoleeksamen som blander noen få flervalgsspørsmål med større drøftings- og anvendelsesoppgaver knyttet til en case-organisasjon (en matprodusent med sporbarhetssystem, eller en offentlig IT-virksomhet). Du skal ikke skrive mye kode — i stedet skal du spesifisere krav, velge og begrunne testmetoder, inspisere kode for feil og drøfte kvalitet, sikkerhet og prosess.
Faste eksamensmønstre (basert på oppgavesettene 2015–2016):
Hjelpemidler: Tidligere har eksamen vært både «alt trykt og håndskrevet materiale tillatt» og «kun utskrift av standardene ISO 9126, IEEE 829 og IEEE 1059». Sjekk semesterets emnebeskrivelse for gjeldende hjelpemiddelkode.
Råd: Sensor belønner begrunnede valg, ikke utenatlister. Når du velger en metode (testteknikk, kravmetode), forklar alltid hvorfor den passer akkurat denne casen.
Temaene i denne guiden er rangert etter eksamensvekt: kravspesifikasjon først (35–40 % av begge eksamenssettene), deretter testing (20–30 %), kvalitetssikring, inspeksjoner og sikkerhet, og til slutt prosessforbedring, pålitelighet, risikostyring og konfigurasjonsstyring, som i hovedsak dukker opp som deler av de store drøftingsoppgavene.
Test doubles, black/gray/white-box, domæne- og stitesting, scenariotesting og V-modellen. Det desidert viktigste temaet — kommer i både flervalg og stor oppgave hver gang.
Testing er aktiviteten der vi kjører programvaren med valgte inndata for å finne avvik mellom faktisk og forventet oppførsel. Et viktig poeng: testing kan vise tilstedeværelse av feil, men aldri bevise fravær av feil (Dijkstra). Målet er derfor ikke «null feil», men tilstrekkelig tillit til at systemet kan leveres.
Domænetesting deler inndataromet inn i delomåder (domæner) avgrenset av predikater i koden, og velger testpunkter på og like ved grensene. Hovedutfordringen er å identifisere de riktige predikatene og presisjon på grensene. Åpne grenser (<, >) og lukkede grenser (≤, ≥, ==) må behandles ulikt.
For sammensatte betingelser med AND-predikater eksploderer antallet tester. For å oppnå full dekning av en betingelse med uavhengige binære predikater forbundet med AND/OR trengs i verste fall kombinasjoner.
Et kølelager skal varsle hvis temperaturen er over 4°C i mer enn 10 minutter. Predikatet er (temp > 4) AND (tid > 10) — begge grenser er åpne.
| temp | tid | Forventet | Begrunnelse |
|---|---|---|---|
| 4,0 | 15 | Ingen alarm | På grensen, er falsk for temp |
| 4,1 | 15 | Alarm | Like over temp-grensen |
| 5,0 | 10 | Ingen alarm | På grensen, er falsk for tid |
| 5,0 | 10,5 | Alarm | Like over tid-grensen, begge sanne |
Vi tester systematisk på og like over hver grense fordi de fleste grensefeil (forveksling av og ) avsløres nettopp her.
For å teste en komponent isolert erstatter vi dens avhengigheter med test doubles. Det er hovedformålet: å kunne utvikle og teste komponenter uavhengig av andre.
Merk: en assertion er ikke en test double — det er en kontroll inne i selve testen.
V-modellen kobler hver utviklingsaktivitet (venstre side) til en tilsvarende testaktivitet (høyre side):
| Utviklingsaktivitet | Testaktivitet | Egnet teknikk |
|---|---|---|
| Kravspesifikasjon | Akseptansetest | Black-box |
| Systemdesign | Systemtest | Black-box |
| Detaljdesign | Integrasjonstest | White-/gray-box |
| Koding | Enhetstest | White-box |
Modellen gjelder også for smidige prosjekter, som kan ses som en sekvens av små V-er — hver iterasjon har sin egen mini-V.
I vedlikeholdsfasen kjøres produktet mot tidligere testtilfeller for å sikre at endringer ikke har ødelagt eksisterende funksjonalitet. Dette kalles regresjonstesting og er den klassiske grunnen til å automatisere testpakker.
For komplekse systemer med mange samvirkende komponenter er scenariotesting egnet: hvert testtilfelle følger en realistisk arbeidsflyt fra start til slutt og knytter produktet direkte til de beskrevne kravene.
Scenarioene dekker alle hovedtilstandene (mottak → lagring → produksjon → forsendelse) og knytter hver til konkrete krav.
Nøkkelformler
Vanlige feil
Eksamenstips
Laster...