Unidade 1 / 12

Introdução à Disciplina de Inteligência Artificial e Verificação em Engenharia de Computação

Ganhos:

  • Capacidade de distinguir onde a IA fornece velocidade real no ciclo de vida de desenvolvimento de software e onde a decisão e a responsabilidade permanecem com o engenheiro
  • Capacidade de aplicar uma disciplina de engenharia de três camadas que verifica cada código e design produzido por meio de compilação, teste e revisão.
  • Adquira o hábito de limpar o contexto para aproveitar a IA sem compartilhar código-fonte, credenciais e dados de clientes confidenciais

Quando você olha para o dia de um engenheiro de computação, o quadro é semelhante na maioria das equipes: entender uma solicitação de negócios, projetar, escrever código, ler o código de outra pessoa, depurar (o processo de descobrir por que um programa está funcionando incorretamente e corrigi-lo), escrever testes, preparar documentação, revisar código e participar de reuniões. Por outras palavras, o tempo dedicado ao verdadeiro “julgamento de engenharia”, isto é, se uma solução é correcta, segura e sustentável, é esmagado pelo trabalho repetitivo. É aqui que entra em jogo a inteligência artificial (abreviadamente IA; software que funciona em texto e código com um grande modelo de linguagem). A IA não toma a decisão por você; Ele prepara você para a decisão, produz um esqueleto de código, restringe o bug e coloca um rascunho elaborado na sua frente. Ao longo deste módulo, posicionaremos a IA não como um “programador automático”, mas como um parceiro disciplinado de programação em pares, cujos resultados são compilados, testados e revisados ​​sempre.

Nesta primeira unidade, esclarecemos três coisas: em quais estágios do ciclo de vida de desenvolvimento de software (os estágios pelos quais um software passa desde a ideia até a produção: análise, design, codificação, teste, implantação, manutenção) a IA agrega valor real; quais decisões devem permanecer estritamente com o engenheiro; e qual é a disciplina de verificação e confidencialidade que você deve seguir ao fazer isso. Sem este telhado instalado corretamente, as técnicas nas unidades subsequentes podem tornar-se perigosas; Porque um erro no software atinge milhões de usuários ao mesmo tempo e pode se transformar em uma vulnerabilidade de segurança.

Conceitos: Alucinação: fabricação convincente pela IA de um método, biblioteca, API ou comportamento que na verdade não existe. Contexto: A entrada que você fornece à IA (código, mensagem de erro, requisito, restrições). Verificação: Verificação da saída de forma independente (compilação, teste, documentação). Esses três conceitos são a espinha dorsal de todo o módulo.

Em quais empresas o acelerador de IA é arriscado?

Os empregos em software se enquadram em um espectro duplo em termos de resultados. Em uma extremidade estão os trabalhos de preparação reversíveis e de baixo risco; Na outra ponta, estão tarefas de difícil retorno que entram no ambiente de produção e podem causar perda de dados, vulnerabilidades de segurança ou interrupções. O valor da IA ​​varia dependendo de sua posição neste espectro.

tipo de negócio

Contribuição de IA

O papel do engenheiro

Esqueleto de código/modelo

Geração rápida de estrutura repetitiva

Controle de lógica e status de borda

depuração

Hipótese e lista de possíveis causas

Reprodução e confirmação da causa raiz

escrevendo testes

Rascunho de teste e criação de cenário

Afirmação significativa e verificação de escopo

refatoração

Proposta de refatoração

Manter o comportamento por meio de testes

Documentação

Primeiro rascunho e estrutura

Verificação de correção em relação ao código

Decisão arquitetônica/de segurança

Lista de opções e prós e contras

Decisão final e responsabilidade

A regra é simples: o risco de uma saída de IA é igual ao dano que sofrerá se essa saída cometer um erro. Sugerir incorretamente um nome de variável é inofensivo; A autenticação inadequada (verificar se o usuário é realmente quem afirma ser) torna todo o sistema vulnerável. Portanto, a primeira pergunta a ser feita antes de usar a saída é: "O que acontece se isso estiver errado e quem percebe e quando?"

Cuidado: a IA produz código fluente e confiável. Fluência não é garantia de precisão. Um modelo de linguagem pode produzir com credibilidade um nome de função que na verdade não existe, uma sequência de parâmetros incorreta ou até mesmo um padrão inseguro. No software, isso não fica no papel; Ele compila, executa e explode em produção.

Decisões que devem ser deixadas para o engenheiro

Algumas decisões nunca devem ser totalmente automatizadas; acarreta riscos técnicos, legais e éticos:

  • Aprovação para produção: A liberação de um código para produção e a responsabilidade por isso.
  • Segurança e arquitetura: Decisões caras como autenticação, autorização, criptografia e modelo de dados.
  • Licença e direitos autorais: Usabilidade do código produzido no produto comercial e conformidade com a licença.
  • Trabalhando com dados confidenciais: Transações com dados de clientes, segredos de código-fonte e informações de identidade.
Aviso: Mesmo que a IA diga “este código é seguro e pronto para produção”, aceitar isso sem testes de segurança, revisão de código e validação sob carga real é inaceitável. Em trabalhos críticos para a segurança, os resultados da IA ​​nunca substituem a aprovação de um engenheiro competente; Qualquer resultado que leve a uma decisão deve ser verificado de forma independente e aprovado pelo engenheiro autorizado antes da implementação.

Disciplina de Verificação: Controle de Três Camadas

Aplique três camadas de controle para usar os resultados da IA como um revisor sênior, em vez de cegamente. Este é o reflexo básico que repetiremos ao longo do módulo.

  1. Compilação e verificação estática: o código realmente compila/executa? Existem erros de tipo, variáveis ​​não utilizadas, APIs inexistentes? O que diz a ferramenta de análise estática (a ferramenta que examina o código sem executá-lo)?
  2. Reprodução independente (teste): execute o código com entradas pequenas e conhecidas e veja se obtém a saída esperada. Experimente casos extremos (nulo, zero, negativo, enorme).
  3. Verificação da fonte: cada API, versão da biblioteca e recurso de linguagem que a IA usa devem ser verificados na documentação oficial.

Prompt de verificação (torna mais fácil verificar a saída): "Liste TODAS as bibliotecas externas, métodos e recursos de linguagem que você usa em seu código. Para cada um, indique em qual versão ele está disponível e rotule-o como 'deve ser verificado na documentação'. Não crie nenhuma API sobre a qual você não tenha certeza; se não tiver certeza, escreva claramente 'não tenho certeza'. Liste também todos os casos extremos que você não abordou como uma lista separada. "

Critique seu próprio prompt de código: "Olhe criticamente para o código que você acabou de escrever, como um engenheiro sênior que o contratou. Forneça itens concretos sob estes três títulos: (1) erros de lógica/caso extremo, (2) riscos de segurança, (3) problemas de desempenho ou legibilidade. Para cada item, escreva 'por que é o problema' e 'solução sugerida'. Se não houver problema, diga 'Não consegui encontrar um problema'; não tente embelezá-lo. "

Alerta Fraco/Prompt Forte

FRACO: "Escreva-me uma função de autenticação de usuário." vazio, sem '@', duplo '@', contendo apenas espaços."

A diferença está no contexto. Alerta poderoso; Inclui idioma, versão, contrato de entrada-saída, restrições e expectativa de teste. Essa disciplina única reduz bastante o risco de alucinações e códigos inseguros.

Mini-casos

Caso 1 — Método artificial. Um desenvolvedor ouve da IA ​​que existe um método chamado date.addBusinessDays(5) em uma biblioteca de datas e é explicado de maneira confiável. Olhando a documentação, ele vê que não existe tal método, a forma correta é um loop manual. A alucinação é capturada antes de entrar em produção com uma verificação de 10 minutos.

Caso 2 — Perda de estado limite. A IA produz uma função de “calcular média”; Funciona quando testado com 1.000 linhas de dados. Porém, quando a lista está vazia, ocorre erro de divisão por zero. Como o engenheiro adicionou o teste de entrada vazio, ele vê e corrige o erro antes que ele seja lançado. Um teste de condição de borda única evita um alarme de produção às 3h.

Caso 3 — Risco de privacidade. Um especialista está prestes a colar um arquivo com uma string de conexão de banco de dados real e uma chave de API em uma ferramenta pública. Lembra-se da política da instituição; Ele substitui os segredos por <REDACTED>, reduz o código a um exemplo representativo e o solicita. Assim, ele consegue ajuda em 5 minutos, mas suas informações de identidade não saem.

Princípio de trabalhar com código secreto e informações de identidade

A parte mais sensível do software; segredos do código-fonte, informações de identidade (chave de API, senha, token) e dados pessoais/do cliente. Princípio básico: limpe antes de compartilhar, pergunte apenas a essência do problema com um exemplo representativo, se possível.

Padrão de prompt anonimizado: "Há um erro na função a seguir. Substituí a lógica de negócios real e as constantes ocultas por valores representativos (chave de API, nomes de tabelas, nomes de campos genéricos). Problema: recebo o erro Y na entrada X. Basta encontrar o erro lógico neste código representativo e explicar a versão corrigida. [código representativo]"

Dica: Em caso de dúvida, faça este teste: “Minha organização teria problemas se eu escrevesse isso publicamente em um fórum?” Mesmo que a resposta não esteja clara, esclareça-a primeiro. Reiniciar é sempre mais barato do que procurar o vazamento mais tarde.

Erros comuns

  • Usando a saída sem compilar/testar. “AI escreveu” não é uma justificativa; Cada pedaço de código é verificado ao executá-lo.
  • Fazendo solicitações sem contexto. Se o idioma, a versão, a entrada-saída e as restrições não forem fornecidos, o código se tornará genérico e muitas vezes inseguro.
  • Compartilhando informações confidenciais sem pensar. A chave API, a senha e os dados do cliente não devem ser divulgados sem serem apagados.
  • Confundir linguagem precisa com exatidão. Quanto mais confiante a IA fala, mais cuidado você deve ter; Tom confiante não é evidência.
  • Delegar a decisão à IA. A decisão de colocar em produção, segurança e arquitetura permanece com o engenheiro; A IA produz apenas materiais.

Em resumo

A IA acelera as partes repetitivas e demoradas do trabalho de software: esqueleto do código, elaboração de testes, redução de bugs, documentação. No entanto, a decisão e a responsabilidade permanecem com o engenheiro. Cada saída deve passar por três camadas de controle (compilar/estático, teste, origem). Escrever prompts com contexto e limpar informações ocultas são dois hábitos principais que repetiremos em cada unidade deste módulo. Ao usar IA com disciplina, você ganha velocidade; quando você usa sem disciplina, você carrega erros e vulnerabilidades para a produção.

Tarefa de aplicativo

Escolha uma pequena tarefa de codificação do seu próprio trabalho ou de um projeto imaginário (por exemplo, uma função de validação). Primeiro escreva um prompt fraco e obtenha a saída. Em seguida, aplique o poderoso padrão de prompt desta unidade: adicione idioma/versão, contrato de entrada-saída, restrições e expectativa de teste. Coloque as duas impressões lado a lado e escreva a diferença. Em seguida, compile a saída robusta e teste-a com pelo menos três casos extremos (nulo, zero/negativo, formato inesperado) e observe o que você encontra em qual teste.

lista de verificação

  • [] Adicionei idioma, versão e contrato de entrada-saída ao prompt.
  • [] Escrevi "Não invente, diga-me se não tiver certeza" e a restrição de escopo.
  • [] Compilei/executei o código, verifiquei se havia avisos estáticos.
  • [] Testei com pelo menos três casos extremos.
  • [] Verifiquei as APIs usadas na documentação oficial.
  • [] Limpei qualquer código/credencial secreto ou usei ferramenta empresarial.
  • [ ] Confirmei que a decisão de colocar em produção e segurança permanece com o humano.