AI-kode mangler intensjon: Derfor trenger den formelle spesifikasjoner
Løfter og farer ved AI i kodeutvikling
Vi er midt i en revolusjon innen programvare. Store språkmodeller spytter ut kode som ser riktig ut og ofte fungerer – på sekunder. Verktøy som GitHub Copilot og Claude er dagligdagse for millioner av utviklere. Men her kommer problemet: Koden kjører, men gjør den det du egentlig mente?
Dette er ikke noe nytt. Lag har alltid kranglet om forskjellen mellom det kundene tror de vil ha, og det utviklerne lager. AI tar dette gamle problemet og blåser det opp til vanvittige proporsjoner. Mennesker retter feil med erfaring og iterasjoner. AI genererer feil på maskinhastighet – og de sprer seg raskt.
Avstanden mellom mening og kode
Kjernen er enkel: Språk er tvetydig. Be AI om å "sjekke e-postadresser", og det kan tolke det som:
- Bare sjekk formatet?
- Sjekk om domenet finnes via DNS?
- Send bekreftelseslenke og vent på svar?
- Alt dette, pluss feilhåndtering?
AI gjetter. Noen ganger treffer det. Ofte bommer det. Og uten menneskelig code review, bygger feilene seg opp over hundrevis av funksjoner.
Hullet mellom løs beskrivelse og nøyaktig kode har alltid eksistert. Men med AI blir det større og raskere enn noensinne.
Formaliser meningen – steg for steg
Ikke tenk svart-hvitt på formalisering. Bruk et spektrum som passer prosjektet ditt.
Enkelt: Tester som klargjør
Ofte holder det med tester for å fange misforståelser:
# AI lagde denne e-postsjekkeren
# Tester viser hva du mente
def validate_email(email):
pass # AI-kode her
# Dine tester:
assert validate_email("user@example.com") == True
assert validate_email("user@localhost") == False # Krever ekte domene
assert validate_email("ugyldig.email") == False
Skriv tester først, vis dem til AI. Da justeres både mennesker og maskiner. Test-drevet utvikling – raskt, men presist.
Middels: Etterbetingelser
Neste nivå: Klare garantier om hva koden lover etter kjøring:
# Eksplisitt etterbetingelse
def overfør_penger(fra_konto, til_konto, beløp):
"""
Garantier:
- fra_konto.balance synker med nøyaktig beløp
- til_konto.balance øker med nøyaktig beløp
- Totalbalanse uendret
- Atomisk transaksjon (alt eller ingenting)
"""
AI lært på slike spesifikasjoner fanger feil som tester overser. Den tenker på grenseverdier og invarierter.
Avansert: Verifisert syntese
På toppen: Domensspesifikke språk og formell verifisering. Koden bevises korrekt, ikke bare testet.
Ikke for alt. Men essensielt i krypto, finans, luftfart og helse – der feil koster liv eller milliarder.
Hvem sjekker spesifikasjonene?
Ubehagelig sannhet: Ingen orakel finnes for om spesifikasjonene er riktige – bare du.
Du kan verifisere kode mot spec. Men hvem verifiserer specen? Perfekt kode for feil krav er fortsatt fiasko.
Her trengs menneske-AI-samarbeid. Fokus på å validere specene:
- Interaktive løkker for iterativ forbedring
- Eksempler og tester som avslører hull
- Målinger for spec-kvalitet, uten å kjøre kode
- Enkle mønstre som ikke krever mattegeni
Konsekvenser for din tech-stack
Dette påvirker arkitekturen din direkte:
Ved kodegenerering
Velg AI som stiller spørsmål eller lager tester først. Verktøy som bare spytter kode, lager troverdige feil.
I CI/CD
Skann generert kode ekstra. Bruk etterbetingelser og property-based testing. Legg formell validering i merge-krav for kritiske deler.
I teamet
Utviklere må bli bedre på specs. Code review skal sjekke både kode og krav.
Forskning på høyt gir
Feltet eksploderer: AI, formelle metoder og HCI. Lovende resultater:
- Test-drevet formalisering øker korrekthet når du styrer
- AI-genererte etterbetingelser fanger ekte feil
- Verifiserte pipelines lager beviselig korrekt kode fra løse beskrivelser
Utfordringer: Skalere til virkeligheten, håndtere endringer, intuitive grensesnitt og komplekse logikker.
Veien videre
AI-utvikling handler ikke om mer kode raskere. Det handler om korrekt kode – der det teller.
Formalisering er broen. Ikke erstatt språk med matte. Systematiser validering av dine løse ideer – i tekst, tester eller eksempler – så både mennesker og maskiner forstår.
For deg med NameOcean: Tenk verifiserte deploy-specs, DNS-konfig-garantier og SSL-arbeidsflyter som bevises korrekte.
Koden som overlever produksjon er ikke den smarteste. Den er den mest bevisste.