Enhet 1 / 12

Introduksjon til kunstig intelligens og verifikasjonsdisiplin i datateknikk

Gevinster:

  • Evne til å skille hvor AI gir reell hastighet i programvareutviklingens livssyklus og hvor beslutningen og ansvaret forblir hos ingeniøren
  • Evne til å bruke en tre-lags ingeniørdisiplin som verifiserer hver kode og design produsert gjennom kompilering, testing og gjennomgang.
  • Få en vane med å tømme kontekst for å utnytte AI uten å dele konfidensiell kildekode, legitimasjon og kundedata

Når du ser på en dataingeniørs dag, er bildet likt i de fleste team: forstå en forretningsforespørsel, designe, skrive kode, lese andres kode, feilsøke (prosessen med å finne ut hvorfor et program fungerer feil og fikse det), skrive tester, forberede dokumentasjon, gjennomgå kode og delta på møter. Med andre ord, tiden viet til den virkelige «ingeniørdommen», det vil si om en løsning er riktig, sikker og bærekraftig, knuses under repeterende arbeid. Det er her kunstig intelligens (forkortet AI; programvare som fungerer på tekst og kode med en stor språkmodell) spiller inn. AI tar ikke avgjørelsen for deg; Den forbereder deg på avgjørelsen, produserer et kodeskjelett, begrenser feilen og legger et bearbeidet utkast foran deg. Gjennom denne modulen vil vi posisjonere AI ikke som en "automatisk programmerer", men som en disiplinert parprogrammeringspartner hvis utdata blir kompilert, testet og gjennomgått hver gang.

I denne første enheten avklarer vi tre ting: På hvilke stadier av programvareutviklingens livssyklus (stadiene en programvare går gjennom fra idé til produksjon: analyse, design, koding, testing, distribusjon, vedlikehold) tilfører AI reell verdi; hvilke avgjørelser som strengt tatt bør forbli hos ingeniøren; og hva er verifiserings- og konfidensialitetsdisiplinen du må følge når du gjør dette. Uten dette taket installert på riktig måte, kan teknikker på etterfølgende enheter bli farlige; Fordi en feil i programvaren når millioner av brukere samtidig og kan bli en sikkerhetssårbarhet.

Konsepter: Hallusinasjon: AIs overbevisende fremstilling av en metode, bibliotek, API eller atferd som faktisk ikke eksisterer. Kontekst: Inndataene du gir til AI (kode, feilmelding, krav, begrensninger). Verifikasjon: Kontrollere utdata på en uavhengig måte (kompilering, testing, dokumentasjon). Disse tre konseptene er ryggraden i hele modulen.

I hvilke virksomheter er AI Accelerator, i hvilke virksomheter er det risikabelt?

Programvarejobber faller på et todelt spekter når det gjelder resultater. I den ene enden er reversibelt forberedelsesarbeid med lav risiko; I den andre enden er det oppgaver som er vanskelige å returnere som kommer inn i produksjonsmiljøet og kan forårsake tap av data, sikkerhetssårbarheter eller avbrudd. Verdien av AI varierer avhengig av hvor du står på dette spekteret.

virksomhetstype

AI-bidrag

Ingeniørens rolle

Kodeskjelett / kjeleplate

Rask generering av repeterende struktur

Logikk og kantstatuskontroll

feilsøking

Hypotese og mulige årsaksliste

Reproduksjon og rotårsak bekreftelse

skrive prøver

Testutkast og scenarieoppretting

Meningsfull påstand og kontroll av omfang

refaktorisering

Refaktoreringsforslag

Opprettholde atferd gjennom testing

Dokumentasjon

Første utkast og struktur

Korrekthetssjekk mot kode

Arkitektonisk/sikkerhetsvedtak

Liste over alternativer og fordeler og ulemper

Endelig beslutning og ansvar

Regelen er enkel: risikoen for en AI-utgang er lik skaden den vil pådra seg hvis utgangen gjør en feil. Feil å foreslå et variabelnavn er ufarlig; Feil autentisering (sjekke at brukeren virkelig er den de utgir seg for å være) gjør hele systemet sårbart. Så det første spørsmålet å stille før du bruker utdataene er: "Hva skjer hvis dette er feil, og hvem legger merke til det og når?"

Forsiktig: AI produserer flytende og sikker kode. Flytende er ingen garanti for nøyaktighet. En språkmodell kan på en troverdig måte produsere et funksjonsnavn som faktisk ikke eksisterer, en feil parametersekvens eller til og med et usikkert mønster. I programvare forblir ikke dette på papiret; Den kompilerer, kjører og eksploderer i produksjon.

Avgjørelser som bør overlates til ingeniøren

Noen avgjørelser bør aldri være helt automatiserte; bærer tekniske, juridiske og etiske risikoer:

  • Godkjenning for produksjon: Utgivelse av kode i produksjon og ansvar for dette.
  • Sikkerhet og arkitektur: Dyre beslutninger som autentisering, autorisasjon, kryptering og datamodell.
  • Lisens og opphavsrett: Brukbarheten til den produserte koden i det kommersielle produktet og lisensoverholdelse.
  • Arbeid med konfidensielle data: Transaksjoner med kundedata, kildekodehemmeligheter og identitetsinformasjon.
Advarsel: Selv om AI-en sier "denne koden er sikker og klar for produksjon", er det uakseptabelt å akseptere dette uten sikkerhetstesting, kodegjennomgang og validering under reell belastning. I sikkerhetskritisk arbeid er AI-utgang aldri en erstatning for godkjenning fra en kompetent ingeniør; Enhver utgang som fører til en beslutning må verifiseres uavhengig og godkjennes av den autoriserte ingeniøren før implementering.

Verifikasjonsdisiplin: Trelagskontroll

Bruk tre lag med kontroll for å bruke AI-utdata som en senior anmelder i stedet for blindt. Dette er den grunnleggende refleksen vi vil gjenta gjennom hele modulen.

  1. Kompilering og statisk kontroll: Kompilerer/kjører koden faktisk? Er det typefeil, ubrukte variabler, ikke-eksisterende APIer? Hva sier det statiske analyseverktøyet (verktøyet som undersøker koden uten å kjøre den)?
  2. Uavhengig reproduksjon (testing): Kjør koden med små, kjente innganger og se om du får forventet utgang. Prøv kantsaker (null, null, negativ, enorm).
  3. Kildebekreftelse: Hver API, bibliotekversjon og språkfunksjon som AI bruker bør verifiseres fra offisiell dokumentasjon.

Bekreftelsesspørsmål (gjør det enklere å sjekke utdataene): "List opp ALLE eksterne biblioteker, metoder og språkfunksjoner du bruker i koden din. For hver enkelt, angi hvilken versjon den er tilgjengelig i og merk den 'må verifiseres fra dokumentasjon'. Ikke lag opp noen API-er du ikke er sikker på; hvis du ikke er sikker, skriv tydelig 'usikker'. Skriv også opp eventuelle kantsaker som du har adresser."

Kritikk din egen kodemelding: "Se kritisk på koden du nettopp skrev, som en senioringeniør som ansatt deg. Gi konkrete elementer under disse tre overskriftene: (1) logikk-/kanttilfellefeil, (2) sikkerhetsrisikoer, (3) ytelses- eller lesbarhetsproblemer. For hvert element, skriv 'hvorfor er problemet' og 'foreslått løsning'. Hvis det ikke er noe problem, må du ikke prøve å finne et problem. det."

Svak forespørsel / sterk forespørsel

SVAK:"Skriv meg en brukerautentiseringsfunksjon."(Resultat: uklart hvilket språk, hvilken regel, hvilken feilatferd; generisk kode, ofte usikker eller ute av kontekst.)STERK:"Skriv en e-postvalideringsfunksjon for Python 3.11. Inndata: streng. Utdata: True hvis gyldig, False ellers. Regler: No basic string compliance USE required. bibliotek En 5-prøvetest under funksjonen tilføy blokken: gyldig, tom, ingen '@', dobbel '@', inneholder kun mellomrom."

Forskjellen ligger i konteksten. Kraftig ledetekst; Den inkluderer språk, versjon, input-output-kontrakt, begrensninger og testforventning. Denne enkeltdisiplinen reduserer risikoen for hallusinasjoner og usikker kode i stor grad.

Minivesker

Tilfelle 1 - Konstruert metode. En utvikler hører fra AI at det finnes en metode som heter date.addBusinessDays(5) i et datobibliotek, og det blir forklart på en sikker måte. Når han ser på dokumentasjonen, ser han at det ikke finnes en slik metode, den riktige måten er en manuell sløyfe. Hallusinasjonen fanges opp før den går i produksjon med en 10-minutters verifisering.

Tilfelle 2 - Kanttilstandstap. AI produserer en "beregn gjennomsnitt"-funksjon; Den fungerer når den er testet med 1000 rader med data. Men når listen er tom, gir den divisjon med null feil. Siden ingeniøren la til den tomme inngangstesten, ser og retter han feilen før den går live. En enkeltkanttest forhindrer en produksjonsalarm kl. 03.00.

Sak 3 – Personvernrisiko. En ekspert er i ferd med å lime inn en fil med en faktisk databasetilkoblingsstreng og API-nøkkel i et offentlig verktøy. Husker institusjonens policy; Den erstatter hemmelighetene med <REDACTED>, reduserer koden til et representativt eksempel og ber om det. Dermed får han hjelp på 5 minutter, men hans identitetsopplysninger kommer ikke ut.

Prinsippet om å jobbe med hemmelig kode og identitetsinformasjon

Den mest sensitive delen av programvaren; kildekodehemmeligheter, identitetsinformasjon (API-nøkkel, passord, token) og kunde/personlige data. Grunnleggende prinsipp: rydd opp før deling, spør bare essensen av problemet med et representativt eksempel hvis mulig.

Anonymisert forespørselsmønster: "Det er en feil i følgende funksjon. Jeg erstattet den faktiske forretningslogikken og skjulte konstanter med representative verdier (API-nøkkel, tabellnavn, feltnavngenerisk). Problem: Jeg får feil Y i input X. Bare finn den logiske feilen i denne representantkoden og forklar den korrigerte versjonen. [representativ kode]"

Tips: Hvis du er i tvil, ta denne testen: "Ville organisasjonen min få problemer hvis jeg skrev dette offentlig i et forum?" Selv om svaret er uklart, fjern det først. Tilbakestilling er alltid billigere enn å lete etter lekkasjen senere.

Vanlige feil

  • Bruk av utdata uten å kompilere/teste. "AI skrev" er ikke en begrunnelse; Hver kodebit verifiseres ved å kjøre den.
  • Kom med forespørsler uten kontekst. Hvis språk, versjon, input-output og begrensninger ikke er gitt, blir koden generisk og ofte usikker.
  • Dele konfidensiell informasjon uten å tenke. API-nøkkelen, passordet og kundedataene skal ikke frigis uten å bli slettet.
  • Forvirrer presist språk med nøyaktighet. Jo mer selvsikker AI-en snakker, jo mer forsiktig bør du være; Selvsikker tone er ikke bevis.
  • Delegering av avgjørelsen til AI. Beslutningen om å sette i produksjon, sikkerhet og arkitektur forblir hos ingeniøren; AI produserer bare materialer.

Oppsummert

AI setter fart på de repeterende og tidkrevende delene av programvarearbeid: skjelettkode, testutkast, innsnevring av feil, dokumentasjon. Avgjørelsen og ansvaret forblir imidlertid hos ingeniøren. Hver utgang må passere tre lag med kontroll (kompilere/statisk, testing, kilde). Å skrive meldinger med kontekst og fjerne skjult informasjon er to nøkkelvaner som vi vil gjenta i hver enhet av denne modulen. Når du bruker AI med disiplin, får du fart; når du bruker den uten disiplin, tar du med deg feil og sårbarheter i produksjonen.

Søknadsoppgave

Velg en liten kodeoppgave fra ditt eget arbeid eller fra et tenkt prosjekt (f.eks. en valideringsfunksjon). Skriv først en svak melding og få utdataene. Bruk deretter det kraftige ledetekstmønsteret fra denne enheten: legg til språk/versjon, input/output-kontrakt, begrensninger og test forventninger. Legg de to utskriftene ved siden av hverandre og skriv forskjellen. Deretter kompilerer du den robuste utgangen og tester den med minst tre kanttilfeller (null, null/negativ, uventet format) og merk deg hva du finner i hvilken test.

sjekkliste

  • [ ] Jeg la til språk, versjon og input-output-kontrakt i ledeteksten.
  • [ ] Jeg skrev "Ikke gjør det opp, fortell meg hvis du ikke er sikker" og omfangsbegrensningen.
  • [ ] Jeg kompilerte/kjørte koden, sjekket for statiske advarsler.
  • [ ] Jeg testet med minst tre kantsaker.
  • [ ] Jeg bekreftet API-ene som ble brukt fra den offisielle dokumentasjonen.
  • [ ] Jeg fjernet all hemmelig kode/legitimasjon eller brukte bedriftsverktøy.
  • [ ] Jeg bekreftet at beslutningen om å sette i produksjon og sikkerhet forblir hos mennesket.