Eenheid 1 / 12

Inleiding tot de kunstmatige intelligentie en verificatiediscipline in computertechniek

Winst:

  • Vermogen om te onderscheiden waar AI echte snelheid biedt in de levenscyclus van softwareontwikkeling en waar de beslissing en verantwoordelijkheid bij de ingenieur blijft
  • Mogelijkheid om een drielaagse technische discipline toe te passen die elke code en ontwerp verifieert die wordt geproduceerd door middel van compilatie, testen en beoordelen.
  • Maak er een gewoonte van om de context te verhelderen om AI te benutten zonder vertrouwelijke broncode, inloggegevens en klantgegevens te delen

Als je naar de dag van een computeringenieur kijkt, is het beeld bij de meeste teams hetzelfde: een zakelijk verzoek begrijpen, ontwerpen, code schrijven, de code van iemand anders lezen, debuggen (het proces waarbij je erachter komt waarom een ​​programma niet goed werkt en het repareert), tests schrijven, documentatie voorbereiden, code beoordelen en vergaderingen bijwonen. Met andere woorden: de tijd die wordt besteed aan het echte ‘technische oordeel’, dat wil zeggen of een oplossing correct, veilig en duurzaam is, gaat verloren onder repetitief werk. Dit is waar kunstmatige intelligentie (kortweg AI; software die werkt met tekst en code met een groot taalmodel) in het spel komt. AI neemt de beslissing niet voor u; Het bereidt je voor op de beslissing, produceert een codeskelet, verfijnt de bug en legt een uitgewerkt concept voor je neer. In deze module zullen we AI niet positioneren als een ‘automatische programmeur’, maar als een gedisciplineerde programmeerpartner voor paren wiens output elke keer wordt gecompileerd, getest en beoordeeld.

In dit eerste deel verduidelijken we drie dingen: in welke fasen van de levenscyclus van softwareontwikkeling (de fasen die een software doorloopt van idee tot productie: analyse, ontwerp, codering, testen, implementatie, onderhoud) voegt AI echte waarde toe; welke beslissingen strikt bij de ingenieur moeten blijven liggen; en wat is de verificatie- en vertrouwelijkheidsdiscipline waaraan u zich hierbij moet houden. Zonder dat dit dak correct is geïnstalleerd, kunnen technieken op volgende eenheden gevaarlijk worden; Omdat een fout in de software miljoenen gebruikers tegelijkertijd bereikt en kan uitmonden in een beveiligingsprobleem.

Concepten: Hallucinatie: AI's overtuigende verzinsel van een methode, bibliotheek, API of gedrag dat in werkelijkheid niet bestaat. Context: De input die u aan de AI geeft (code, foutmelding, vereiste, beperkingen). Verificatie: Het op onafhankelijke wijze controleren van de output (compilatie, testen, documentatie). Deze drie concepten vormen de ruggengraat van de hele module.

In welke bedrijven is AI Accelerator, in welke bedrijven is het riskant?

Softwarebanen vallen qua resultaten op een tweeledig spectrum. Aan de ene kant vind je omkeerbaar voorbereidend werk met een laag risico; Aan de andere kant zijn er moeilijk te retourneren taken die in de productieomgeving terechtkomen en gegevensverlies, beveiligingsproblemen of onderbrekingen kunnen veroorzaken. De waarde van AI varieert afhankelijk van waar u zich in dit spectrum bevindt.

bedrijfstype

AI-bijdrage

De rol van de ingenieur

Code skelet / boilerplate

Snelle generatie van repetitieve structuur

Logica en randstatuscontrole

debuggen

Hypothese en mogelijke oorzakenlijst

Reproductie en bevestiging van de oorzaak

testen schrijven

Testconcept en scenariocreatie

Zinvolle beweringen en reikwijdtecontroles

refactoring

Refactoring voorstel

Gedrag behouden door middel van testen

Documentatie

Eerste schets en structuur

Correctheidscontrole aan de hand van de code

Architectuur-/veiligheidsbeslissing

Lijst met opties en voor- en nadelen

Eindbeslissing en verantwoordelijkheid

De regel is simpel: het risico van een AI-output is gelijk aan de schade die het zal oplopen als die output een fout maakt. Het onjuist suggereren van een variabelenaam is onschadelijk; Onjuiste authenticatie (controleren of de gebruiker echt is wie hij beweert te zijn) maakt het hele systeem kwetsbaar. De eerste vraag die u moet stellen voordat u de uitvoer gebruikt, is dus: "Wat gebeurt er als dit niet klopt, en wie merkt dit wanneer?"

Let op: AI produceert vloeiende en zelfverzekerde code. Vloeiendheid is geen garantie voor nauwkeurigheid. Een taalmodel kan op geloofwaardige wijze een functienaam produceren die niet echt bestaat, een onjuiste parameterreeks of zelfs een onveilig patroon. Bij software blijft dit niet op papier; Het compileert, draait en explodeert tijdens de productie.

Beslissingen die aan de ingenieur moeten worden overgelaten

Sommige beslissingen mogen nooit volledig geautomatiseerd zijn; brengt technische, juridische en ethische risico’s met zich mee:

  • Goedkeuring voor productie: Het vrijgeven van een code in productie en de verantwoordelijkheid hiervoor.
  • Beveiliging en architectuur: Dure beslissingen zoals authenticatie, autorisatie, encryptie en datamodel.
  • Licentie en auteursrecht: bruikbaarheid van de geproduceerde code in het commerciële product en naleving van de licentie.
  • Werken met vertrouwelijke gegevens: Transacties met klantgegevens, broncodegeheimen en identiteitsinformatie.
Waarschuwing: zelfs als de AI zegt "deze code is veilig en klaar voor productie", is het onaanvaardbaar om dit te accepteren zonder beveiligingstests, codebeoordeling en validatie onder echte belasting. Bij veiligheidskritisch werk is AI-output nooit een vervanging voor de goedkeuring van een competente ingenieur; Elke uitkomst die tot een beslissing leidt, moet vóór implementatie onafhankelijk worden geverifieerd en goedgekeurd door de geautoriseerde ingenieur.

Verificatiediscipline: drielaagse controle

Pas drie controlelagen toe om AI-output te gebruiken als een senior reviewer in plaats van blindelings. Dit is de basisreflex die we gedurende de hele module zullen herhalen.

  1. Compilatie en statische controle: wordt de code daadwerkelijk gecompileerd/uitgevoerd? Zijn er typefouten, ongebruikte variabelen, niet-bestaande API's? Wat zegt de statische analysetool (de tool die de code onderzoekt zonder deze uit te voeren)?
  2. Onafhankelijke reproductie (testen): voer de code uit met kleine, bekende invoer en kijk of u de verwachte uitvoer krijgt. Probeer randgevallen (nul, nul, negatief, groot).
  3. Bronverificatie: Elke API, bibliotheekversie en taalfunctie die de AI gebruikt, moet worden geverifieerd aan de hand van officiële documentatie.

Verificatieprompt (maakt het eenvoudiger om de uitvoer te controleren): "Maak een lijst van ALLE externe bibliotheken, methoden en taalfuncties die u in uw code gebruikt. Geef voor elke versie aan in welke versie deze beschikbaar is en label deze 'moet worden geverifieerd aan de hand van documentatie'. Verzin geen API's waar u niet zeker van bent; als u het niet zeker weet, schrijf dan duidelijk 'niet zeker'. Vermeld ook eventuele randgevallen die u niet hebt behandeld als een aparte lijst. '

Bekritiseer uw eigen codeprompt: "Kijk kritisch naar de code die u zojuist hebt geschreven, zoals een senior ingenieur die u heeft ingehuurd. Geef concrete items onder deze drie kopjes: (1) logica/edge case-fouten, (2) veiligheidsrisico's, (3) prestatie- of leesbaarheidsproblemen. Schrijf voor elk item 'waarom is het probleem' en 'voorgestelde oplossing'. Als er geen probleem is, zeg dan 'Ik kon geen probleem vinden'; probeer het niet te verfraaien."

Zwakke prompt/sterke prompt

ZWAK: "Schrijf mij een gebruikersauthenticatiefunctie." (Resultaat: onduidelijk welke taal, welke regel, welk foutgedrag; generieke code, vaak onveilig of uit context.) STERK: "Schrijf een e-mailvalidatiefunctie voor Python 3.11. Invoer: string. Uitvoer: Waar indien geldig, anders False. Regels: lege string Onwaar; Geen RFC-compatibiliteit vereist, basisformaat is voldoende. GEBRUIK GEEN externe bibliotheek. Een test van 5 voorbeelden onder het functietoevoegblok: geldig, leeg, geen '@', dubbele '@', bevat alleen spaties."

Het verschil zit in de context. Krachtige prompt; Het omvat de taal, versie, input-outputcontract, beperkingen en testverwachting. Deze enkele discipline verkleint het risico op hallucinaties en onveilige code aanzienlijk.

Mini-hoesjes

Geval 1 — Gekunstelde methode. Een ontwikkelaar hoort van AI dat er een methode is genaamd date.addBusinessDays(5) in een datumbibliotheek en deze wordt op een zelfverzekerde manier uitgelegd. Als hij naar de documentatie kijkt, ziet hij dat zo'n methode niet bestaat, de juiste manier is een handmatige lus. De hallucinatie wordt vastgelegd voordat deze in productie gaat met een verificatie van 10 minuten.

Geval 2 — Verlies van randstatus. AI produceert een functie “bereken het gemiddelde”; Het werkt wanneer het wordt getest met 1.000 rijen gegevens. Als de lijst echter leeg is, geeft deze een fout bij deling door nul. Omdat de engineer de lege invoertest heeft toegevoegd, ziet en herstelt hij de fout voordat deze live gaat. Een enkele randconditietest voorkomt een productiealarm om 03.00 uur.

Geval 3 — Privacyrisico. Een expert staat op het punt een bestand met een daadwerkelijke databaseverbindingsreeks en API-sleutel in een openbare tool te plakken. Onthoudt het beleid van de instelling; Het vervangt de geheimen door <REDACTED>, reduceert de code tot een representatief voorbeeld en vraagt ​​erom. Zo krijgt hij binnen 5 minuten hulp, maar zijn identiteitsgegevens komen niet naar buiten.

Principe van het werken met geheime code en identiteitsinformatie

Het meest gevoelige deel van de software; broncodegeheimen, identiteitsinformatie (API-sleutel, wachtwoord, token) en klant-/persoonlijke gegevens. Basisprincipe: eerst opruimen voordat je het deelt, vraag alleen de essentie van het probleem met indien mogelijk een representatief voorbeeld.

Geanonimiseerd promptpatroon: "Er zit een fout in de volgende functie. Ik heb de feitelijke bedrijfslogica en verborgen constanten vervangen door representatieve waarden (API-sleutel, tabelnamen, veldnamen algemeen). Probleem: ik krijg fout Y in invoer X. Zoek gewoon de logische fout in deze representatieve code en leg de gecorrigeerde versie uit. [representatieve code]"

Tip: Doe bij twijfel deze test: "Zou mijn organisatie in de problemen komen als ik dit publiekelijk op een forum zou schrijven?" Zelfs als het antwoord onduidelijk is, moet u het eerst duidelijk maken. Resetten is altijd goedkoper dan later het lek opsporen.

Veel voorkomende fouten

  • De uitvoer gebruiken zonder compileren/testen. “AI schreef” is geen rechtvaardiging; Elk stukje code wordt geverifieerd door het uit te voeren.
  • Verzoeken doen zonder context. Als taal, versie, input-output en beperkingen niet worden opgegeven, wordt de code generiek en vaak onveilig.
  • Vertrouwelijke informatie delen zonder na te denken. De API-sleutel, het wachtwoord en de klantgegevens mogen niet worden vrijgegeven zonder te zijn gewist.
  • Het verwarren van precieze taal met nauwkeurigheid. Hoe zelfverzekerder de AI spreekt, hoe voorzichtiger je moet zijn; Een zelfverzekerde toon is geen bewijs.
  • De beslissing delegeren aan AI. De beslissing om de productie, de beveiliging en de architectuur in gang te zetten, blijft bij de ingenieur; AI produceert alleen materialen.

Samengevat

AI versnelt de repetitieve en tijdrovende delen van softwarewerk: skeletcode, het opstellen van tests, het beperken van bugs, documentatie. De beslissing en verantwoordelijkheid blijft echter bij de ingenieur. Elke uitvoer moet drie controlelagen doorstaan ​​(compileren/statisch, testen, broncode). Het schrijven van prompts met context en het opruimen van verborgen informatie zijn twee belangrijke gewoonten die we in elke unit van deze module zullen herhalen. Als je AI met discipline gebruikt, win je aan snelheid; als je het zonder discipline gebruikt, breng je fouten en kwetsbaarheden mee naar de productie.

Applicatie taak

Kies een kleine codeeropdracht uit je eigen werk of uit een denkbeeldig project (bijvoorbeeld een validatiefunctie). Schrijf eerst een zwakke prompt en haal de uitvoer op. Pas vervolgens het krachtige promptpatroon uit dit blok toe: voeg taal/versie, input-outputcontract, beperkingen en testverwachtingen toe. Leg de twee afdrukken naast elkaar en schrijf het verschil op. Compileer vervolgens de robuuste uitvoer en test deze met ten minste drie randgevallen (null, nul/negatief, onverwacht formaat) en noteer wat u in welke test aantreft.

controlelijst

  • [ ] Ik heb taal, versie en input-output-contract aan de prompt toegevoegd.
  • [ ] Ik schreef: "Verzin het niet, vertel het me als je het niet zeker weet" en de beperkingen van de reikwijdte.
  • [ ] Ik heb de code gecompileerd/uitgevoerd, gecontroleerd op statische waarschuwingen.
  • [ ] Ik heb getest met ten minste drie randgevallen.
  • [ ] Ik heb de gebruikte API's geverifieerd op basis van de officiële documentatie.
  • [ ] Ik heb een geheime code/inloggegevens gewist of een bedrijfstool gebruikt.
  • [ ] Ik heb bevestigd dat de beslissing om de productie in productie te nemen en te beveiligen bij de mens ligt.