Unità 1 / 12

Introduzione all'intelligenza artificiale e alla disciplina della verifica in ingegneria informatica

Guadagni:

  • Capacità di distinguere dove l'intelligenza artificiale fornisce una velocità reale nel ciclo di vita dello sviluppo del software e dove la decisione e la responsabilità restano dell'ingegnere
  • Capacità di applicare una disciplina ingegneristica a tre livelli che verifica ogni codice e progetto prodotto attraverso compilazione, test e revisione.
  • Prendi l'abitudine di chiarire il contesto per sfruttare l'intelligenza artificiale senza condividere codice sorgente, credenziali e dati dei clienti riservati

Se si osserva la giornata di un ingegnere informatico, il quadro è simile nella maggior parte dei team: comprendere una richiesta aziendale, progettare, scrivere codice, leggere il codice di qualcun altro, eseguire il debug (il processo per scoprire perché un programma funziona in modo errato e risolverlo), scrivere test, preparare documentazione, rivedere il codice e partecipare a riunioni. In altre parole, il tempo dedicato al vero “giudizio ingegneristico”, cioè se una soluzione è corretta, sicura e sostenibile, è schiacciato dal lavoro ripetitivo. È qui che entra in gioco l’intelligenza artificiale (in breve AI; software che funziona su testo e codice con un modello linguistico di grandi dimensioni). L'intelligenza artificiale non prende la decisione per te; Ti prepara alla decisione, produce uno scheletro di codice, restringe il campo del bug e ti mette davanti una bozza elaborata. In questo modulo posizioneremo l'intelligenza artificiale non come un "programmatore automatico" ma come un partner di programmazione disciplinato il cui output viene compilato, testato e rivisto ogni volta.

In questa prima unità chiariamo tre cose: in quali fasi del ciclo di vita dello sviluppo del software (le fasi che un software attraversa dall'idea alla produzione: analisi, progettazione, codifica, test, distribuzione, manutenzione) l'intelligenza artificiale aggiunge valore reale; quali decisioni dovrebbero spettare rigorosamente all'ingegnere; e qual è la disciplina di verifica e riservatezza a cui devi attenersi quando lo fai. Senza questo tetto installato correttamente, le tecniche sulle unità successive possono diventare pericolose; Perché un errore nel software raggiunge milioni di utenti contemporaneamente e può trasformarsi in una vulnerabilità della sicurezza.

Concetti: Allucinazione: creazione convincente da parte dell'IA di un metodo, libreria, API o comportamento che in realtà non esiste. Contesto: l'input che fornisci all'IA (codice, messaggio di errore, requisito, vincoli). Verifica: controllo dell'output in modo indipendente (compilazione, test, documentazione). Questi tre concetti costituiscono la spina dorsale dell'intero modulo.

In quali aziende è presente AI Accelerator, in quali aziende è rischioso?

I lavori legati al software rientrano in un duplice spettro in termini di risultati. Da un lato ci sono i lavori di preparazione reversibili e a basso rischio; D'altro canto, ci sono attività difficili da restituire che entrano nell'ambiente di produzione e possono causare perdite di dati, vulnerabilità della sicurezza o interruzioni. Il valore dell'intelligenza artificiale varia a seconda della posizione in questo spettro.

tipo di attività

Contributo dell'IA

Il ruolo dell'ingegnere

Scheletro del codice/boilerplate

Generazione rapida di strutture ripetitive

Controllo dello stato della logica e dei fronti

debug

Ipotesi ed elenco delle possibili cause

Riproduzione e conferma della causa principale

prove di scrittura

Bozza di prova e creazione dello scenario

Asserzione significativa e controllo dell'ambito

refactoring

Proposta di refactoring

Mantenere il comportamento attraverso i test

Documentazione

Prima bozza e struttura

Controllo della correttezza rispetto al codice

Decisione architettonica/di sicurezza

Elenco delle opzioni e dei pro e contro

Decisione finale e responsabilità

La regola è semplice: il rischio di un output dell’IA è pari al danno che subirà se quell’output commette un errore. Suggerire erroneamente il nome di una variabile è innocuo; Un'autenticazione impropria (verificare che l'utente sia realmente chi afferma di essere) rende vulnerabile l'intero sistema. Quindi la prima domanda da porsi prima di utilizzare l'output è: "Cosa succede se questo è sbagliato e chi se ne accorge e quando?"

Attenzione: l'intelligenza artificiale produce codice fluido e sicuro. La fluidità non è garanzia di accuratezza. Un modello linguistico può produrre in modo credibile un nome di funzione che in realtà non esiste, una sequenza di parametri errata o persino un modello non sicuro. Nel software questo non rimane sulla carta; Compila, esegue ed esplode in produzione.

Decisioni che dovrebbero essere lasciate all'ingegnere

Alcune decisioni non dovrebbero mai essere completamente automatizzate; comporta rischi tecnici, legali ed etici:

  • Approvazione per la produzione: l'immissione di un codice in produzione e la relativa responsabilità.
  • Sicurezza e architettura: decisioni costose come autenticazione, autorizzazione, crittografia e modello di dati.
  • Licenza e diritto d'autore: Usabilità del codice prodotto nel prodotto commerciale e conformità della licenza.
  • Lavorare con dati riservati: transazioni con dati dei clienti, segreti del codice sorgente e informazioni sull'identità.
Avvertenza: anche se l'intelligenza artificiale afferma "questo codice è sicuro e pronto per la produzione", accettarlo senza test di sicurezza, revisione del codice e convalida sotto carico reale è inaccettabile. Nei lavori critici per la sicurezza, i risultati dell’intelligenza artificiale non sostituiscono mai l’approvazione di un ingegnere competente; Qualsiasi output che porti a una decisione deve essere verificato e approvato in modo indipendente dall'ingegnere autorizzato prima dell'implementazione.

Disciplina di verifica: controllo a tre livelli

Applica tre livelli di controllo per utilizzare l'output dell'intelligenza artificiale come un revisore senior anziché alla cieca. Questo è il riflesso di base che ripeteremo durante tutto il modulo.

  1. Compilazione e controllo statico: il codice viene effettivamente compilato/eseguito? Sono presenti errori di tipo, variabili non utilizzate, API inesistenti? Cosa dice lo strumento di analisi statica (lo strumento che esamina il codice senza eseguirlo)?
  2. Riproduzione indipendente (test): esegui il codice con input piccoli e noti e verifica se ottieni l'output previsto. Prova i casi limite (nullo, zero, negativo, enorme).
  3. Verifica della fonte: ogni API, versione della libreria e funzionalità linguistica utilizzata dall'intelligenza artificiale deve essere verificata dalla documentazione ufficiale.

Richiesta di verifica (semplifica il controllo dell'output): "Elenca TUTTE le librerie esterne, i metodi e le funzionalità del linguaggio che usi nel tuo codice. Per ognuno, indica in quale versione è disponibile ed etichettalo 'deve essere verificato dalla documentazione'. Non creare API di cui non sei sicuro; se non sei sicuro, scrivi chiaramente "non sicuro". Elenca anche tutti i casi limite che non hai affrontato come un elenco separato."

Critica il tuo prompt del codice: "Guarda criticamente il codice che hai appena scritto, come un ingegnere senior che ti ha assunto. Fornisci elementi concreti sotto queste tre intestazioni: (1) errori logici/casi limite, (2) rischi per la sicurezza, (3) problemi di prestazioni o leggibilità. Per ogni elemento, scrivi "perché è il problema" e "soluzione suggerita". Se non ci sono problemi, dì "Non sono riuscito a trovare un problema"; non cercare di abbellirlo."

Prompt debole / Prompt forte

DEBOLE:"Scrivimi una funzione di autenticazione dell'utente."(Risultato: non chiaro quale lingua, quale regola, quale comportamento di errore; codice generico, spesso insicuro o fuori contesto.)STRONG:"Scrivi una funzione di convalida email per Python 3.11. Input: stringa. Output: Vero se valido, Falso altrimenti. Regole: stringa vuota Falso; Non è richiesta conformità RFC, il formato base è sufficiente. NON UTILIZZARE libreria esterna. Un test di 5 esempi sotto la funzione append block: valido, vuoto, senza '@', doppio '@', contenente solo spazi."

La differenza è nel contesto. Prompt potente; Include la lingua, la versione, il contratto input-output, i vincoli e le aspettative di test. Questa singola disciplina riduce notevolmente il rischio di allucinazioni e codice non sicuro.

Mini custodie

Caso 1 – Metodo artificioso. Uno sviluppatore viene a sapere da AI che esiste un metodo chiamato date.addBusinessDays(5) in una libreria di date e viene spiegato in modo sicuro. Osservando la documentazione, vede che non esiste un metodo del genere, il modo corretto è un ciclo manuale. L'allucinazione viene catturata prima che entri in produzione con una verifica di 10 minuti.

Caso 2: perdita dello stato edge. L’intelligenza artificiale produce una funzione di “calcolo della media”; Funziona se testato con 1.000 righe di dati. Tuttavia, quando l'elenco è vuoto, fornisce un errore di divisione per zero. Poiché l'ingegnere ha aggiunto il test di input vuoto, vede e corregge l'errore prima che venga pubblicato. Un test della condizione del singolo bordo impedisce un allarme di produzione alle 3 del mattino.

Caso 3: rischio per la privacy. Un esperto sta per incollare un file con una stringa di connessione al database e una chiave API effettive in uno strumento pubblico. Ricorda la politica dell'istituzione; Sostituisce i segreti con <REDACTED>, riduce il codice a un esempio rappresentativo e lo richiede. Pertanto, riceve aiuto in 5 minuti, ma le informazioni sulla sua identità non vengono divulgate.

Principio di utilizzo del codice segreto e delle informazioni sull'identità

La parte più sensibile del software; segreti del codice sorgente, informazioni sull'identità (chiave API, password, token) e dati personali/clienti. Principio fondamentale: fare pulizia prima di condividere, chiedere solo l'essenza del problema con un esempio rappresentativo, se possibile.

Modello di prompt reso anonimo: "Si è verificato un errore nella seguente funzione. Ho sostituito la logica aziendale effettiva e le costanti nascoste con valori rappresentativi (chiave API, nomi di tabelle, nomi di campogenerico). Problema: ricevo l'errore Y nell'input X. Trova semplicemente l'errore logico in questo codice rappresentativo e spiega la versione corretta. [codice rappresentativo]"

Suggerimento: in caso di dubbi, fai questo test: "La mia organizzazione finirebbe nei guai se lo scrivessi pubblicamente in un forum?" Anche se la risposta non è chiara, chiariscila prima. Il ripristino è sempre più economico che inseguire la perdita in un secondo momento.

Errori comuni

  • Utilizzo dell'output senza compilazione/test. “L’AI ha scritto” non è una giustificazione; Ogni pezzo di codice viene verificato eseguendolo.
  • Fare richieste senza contesto. Se non vengono forniti lingua, versione, input-output e vincoli, il codice diventa generico e spesso insicuro.
  • Condividere informazioni riservate senza pensare. La chiave API, la password e i dati del cliente non devono essere rilasciati senza essere stati cancellati.
  • Confondere il linguaggio preciso con l'accuratezza. Quanto più sicura è l’intelligenza artificiale, tanto più attento dovresti essere; Il tono sicuro non è una prova.
  • Delegare la decisione ad AI. La decisione di mettere in produzione, sicurezza e architettura spetta all'ingegnere; L’intelligenza artificiale produce solo materiali.

In sintesi

L'intelligenza artificiale accelera le parti ripetitive e dispendiose in termini di tempo del lavoro del software: codice scheletro, stesura dei test, restrizione dei bug, documentazione. Tuttavia, la decisione e la responsabilità restano dell’ingegnere. Ogni output deve superare tre livelli di controllo (compilazione/statico, test, sorgente). Scrivere suggerimenti con contesto e cancellare le informazioni nascoste sono due abitudini chiave che ripeteremo in ogni unità di questo modulo. Quando usi l'intelligenza artificiale con disciplina, guadagni velocità; quando lo usi senza disciplina, porti errori e vulnerabilità nella produzione.

Compito dell'applicazione

Scegli una piccola attività di codifica dal tuo lavoro o da un progetto immaginario (ad esempio una funzione di convalida). Per prima cosa scrivi un prompt debole e ottieni l'output. Quindi applica il potente modello di prompt di questa unità: aggiungi lingua/versione, contratto input-output, vincoli e aspettative di test. Affianca le due stampe e scrivi la differenza. Quindi compila l'output robusto e testalo con almeno tre casi limite (formato nullo, zero/negativo, imprevisto) e annota cosa trovi in ​​quale test.

lista di controllo

  • [ ] Ho aggiunto al prompt la lingua, la versione e il contratto input-output.
  • [ ] Ho scritto "Non inventare, dimmi se non sei sicuro" e il vincolo di ambito.
  • [] Ho compilato/eseguito il codice, controllato gli avvisi statici.
  • [ ] Ho testato con almeno tre casi limite.
  • [ ] Ho verificato le API utilizzate dalla documentazione ufficiale.
  • [ ] Ho cancellato eventuali codici/credenziali segreti o utilizzato strumenti aziendali.
  • [ ] Ho confermato che la decisione di mettere in produzione e sicurezza spetta all'uomo.