AI-kode mangler intention: Hvorfor formelle specifikationer er et must
Løfterne og fælderne ved AI i udvikling
Vi er midt i en revolution inden for softwareudvikling. Store sprogmodeller som GitHub Copilot og Claude spytter kode ud på sekunder – ofte korrekt og brugbar. Millioner af udviklere kan ikke undvære dem. Men bag den her produktivitetsboost gemmer sig et problem: Koden kører, men gør den præcis det, du bad om?
Det her er ikke nyt. Udviklere har altid kæmpet med forskellen mellem, hvad kunder tror de vil have, og hvad der ender i koden. AI gør det værre. Mennesker retter fejl gennem erfaring og iterationer. AI producerer fejl i maskinhastighed – og de spreder sig lynhurtigt.
Afvigelsen mellem hensigt og kode
Problemet starter med vores sprog. Det er tvetydigt. Sig til AI: "Tjek brugerens email". Mener du:
- Bare et simpelt formatcheck?
- DNS-slookup for at se, om domænet findes?
- Udsend en bekræftelsesmail?
- Alt sammen med fejlhåndtering?
AI gætter. Nogle gange rammer det plet. Ofte ikke. Og uden en kollega til code review kan fejlene hope sig op i store projekter.
Forskellen mellem løs beskrivelse og præcis kode er gammel – men AI gør den større og hurtigere end nogensinde.
Formaliser hensigten – trinvis
Glem sort-hvid tænkning om formel eller uformel. Brug i stedet et spektrum tilpasset dit projekt.
Letvægts: Test som afklaring
Ofte rækker det med tests til at fange misforståelser:
# AI lavede denne email-validering
# Testen viser, hvad du mente
def validate_email(email):
assert validate_email("user@example.com") == True
assert validate_email("user@localhost") == False # Kræver rigtigt domæne
assert validate_email("ugyldig.email") == False
Skriv tests først, vis dem til AI. Det aligner både maskine og mennesker. Hurtigt, simpelt og effektivt.
Mellemvægts: Postconditions
Gå videre til præcise garantier om, hvad koden leverer:
# Klar postcondition
def overfør_penge(fra_konto, til_konto, beløb):
"""
Efter kørsel:
- fra_konto.balance falder med præcis beløb
- til_konto.balance stiger med præcis beløb
- Samlet balance uændret
- Atomisk: alt eller intet
"""
AI lærer af sådanne specifikationer og fanger fejl, som tests overser.
Tungvægts: Bevist syntese
Toppen er formel verifikation med domænespecifikke sprog. Koden bevises korrekt, ikke bare testet. Perfekt til krypto, finans, fly og sundhed – hvor fejl koster liv eller milliarder.
Hvem tjekker specifikationerne?
Her er det hårde: Ingen maskine kan validere, om specifikationen er rigtig – kun du.
Perfekt kode til forkerte krav er stadig fiasko. Human-AI-samarbejde er nøglen:
- Gentagne feedback-runder
- Tests og eksempler, der afslører huller
- Målinger af spec-kvalitet uden at køre kode
- Enkle værktøjer uden math-doktorgrad
Hvordan rammer det din stack?
Det påvirker din infrastruktur direkte.
Ved kodegenerering
Vælg AI, der stiller spørgsmål eller laver tests først. Blind kode er en bug-fabrik.
I CI/CD
Scrutinér AI-kode ekstra. Tilføj postcondition-tjek og property-based tests. Gør det til krav for kritiske merges.
I teamet
Udviklere skal blive bedre til at skrive specifikationer. Review både kode og hensigt.
Forskning på vej
Feltet eksploderer med AI, formelle metoder og HCI. Resultaterne er spændende:
- Test-drevet formalisering booster korrekthed
- AI-genererede postconditions fanger skjulte bugs
- Bevisbaserede pipelines fra løs tekst til sikker kode
Udfordringerne? Skalering, sammensatte ændringer og brugervenlige interfaces.
Fremtiden handler om præcision
AI-succes handler ikke om mere kode hurtigere. Det handler om korrekt kode til de rigtige behov.
Formalisering er broen. Ikke matematik i stedet for prosa – men systemer, der sikrer, at dine intentioner lander korrekt hos både mennesker og maskiner.
For teams på platforme som NameOcean betyder det verificerede deployment-specs, DNS-garantier og SSL-workflows, der bevises sikre. Den kode, der overlever prod, er ikke den smarteste. Den er den mest bevidste.