Revisão de código produzido por IA
Nesta aula
Revisar é tentar contrariar a solução
A revisão começa com uma pergunta: que observação mostraria que esta mudança está errada? Se o revisor apenas lê a explicação da IA e procura palavras familiares, ele acompanha a narrativa da solução sem testar seus pressupostos. Uma alteração pode parecer elegante e ainda divulgar registros inativos, mudar uma resposta pública ou transformar uma falha em lista vazia. O objeto da revisão é o comportamento e o artefato alterado, confrontados com o contrato.
Comece pelo diff, mas leia o contexto necessário. Um import novo pode introduzir uma dependência não prevista; uma mudança pequena em uma função pode afetar várias rotas; a remoção de um teste pode reduzir a proteção que fazia a suíte passar antes. O tamanho do diff indica o volume de alteração, não a dimensão do risco. Na Oficina, dependências externas zero é uma preservação verificável: um novo pacote não se justifica apenas porque a ferramenta o escolheu.
Uma revisão preenchida da correção de inativos
| Pergunta | Verificação requerida |
|---|---|
| O teste captura o defeito? | A implementação isolada anterior falha porque inclui rascunho-interno. |
| A correção fica no escopo? | Seleção pública e teste correspondente; outras alterações têm decisão separada. |
| O formato foi preservado? | Cada item público contém id, titulo e descricao; ativo não é enviado. |
| O erro virou vazio? | Dado inválido continua sendo rejeitado, não convertido em []. |
| Há efeito não solicitado? | Nenhum pacote, rota ou escrita de arquivo acrescentado. |
| O consumidor continua funcionando? | Teste HTTP e roteiro da página conforme o contrato. |
Um teste negativo fornece uma entrada que deve ser recusada ou uma condição que deve permanecer ausente. Para REQ-002, verificar que um identificador inativo não aparece na resposta é tão importante quanto verificar que o ativo aparece. Para o formato público, confira as chaves dos objetos, não apenas a quantidade de cartões. Um total correto pode esconder o registro errado.
Independência em três dimensões
Independência de critério significa escrever a expectativa sem copiar a decisão implementada. Independência de execução significa obter o resultado diretamente do ambiente, sem depender do relato de quem propôs o código. Independência de julgamento pode incluir outra pessoa, outra ferramenta ou uma inspeção separada por um procedimento definido. Essas dimensões ajudam a reduzir pontos cegos, mas não são equivalentes entre si.
Em uma atividade individual de baixo impacto, reexecutar o teste de regressão, conferir o diff e exercitar uma entrada adversa fornece uma verificação proporcional. Descreva-a como verificação técnica independente do relato da IA, e não como revisão humana independente. Em um contexto crítico, a autoridade do projeto pode exigir um revisor distinto com competência e responsabilidade definidas. Uma segunda resposta do mesmo modelo, alimentada pela mesma explicação, não demonstra por si só esse requisito.
Procedimento de revisão
- Leia o requisito, o contrato e as preservações antes de ler a justificativa da alteração.
- Compare arquivos alterados, imports e dependências com o escopo autorizado.
- Inspecione a regra e os consumidores. Procure mudanças de formato, caminhos de erro, vazamento de campos e mutações de entrada.
- Execute npm run exercicio:antes para observar a falha intencional isolada e npm run exercicio:depois para a versão corrigida. Não classifique a falha esperada como defeito da versão final.
- Execute npm test e npm run validate dentro de pratica; inspecione falhas, testes omitidos e limites das verificações.
- Repita o caminho crítico pelo servidor e registre pendências manuais ou necessidade de revisor distinto.
Quando a revisão bloqueia
| Sinal encontrado | Ação antes da liberação |
|---|---|
| A IA diz que testou, mas não há execução verificável | Executar diretamente e registrar o resultado, ou manter a evidência pendente. |
| O teste só verifica a presença do ativo | Acrescentar expectativa de exclusão do inativo e do formato público. |
| Uma biblioteca foi adicionada para uma mudança de filtro | Remover a dependência alheia ou justificar e autorizar uma unidade separada. |
| A revisão humana exigida ainda não ocorreu | Manter o gate correspondente bloqueado; testes automáticos não substituem a responsabilidade exigida. |
A condição de avanço é uma decisão apoiada em resultados aceitáveis: requisito atendido, preservações confirmadas, provas aplicáveis aprovadas e riscos não impeditivos aceitos pela autoridade definida. O registro deve dizer qual independência foi obtida e qual permanece pendente. Uma checklist marcada sem referência ao artefato e ao resultado não basta.
Exercício com resolução
Dados fornecidos: a resposta contém um único caso ativo, porém inclui a propriedade ativo; todos os testes existentes verificam somente o número de itens. A IA afirma que a revisão passou. O contrato público permite apenas id, titulo e descricao. Escreva a decisão e a nova expectativa de teste.
Ver solução comentada
Resolução: bloquear essa versão por violar o contrato de projeção pública. O teste deve comparar o objeto completo esperado ou as chaves autorizadas e verificar a exclusão do inativo. Após a correção, reexecutar a suíte e o caminho HTTP. A rubrica exige perceber que quantidade não prova conteúdo, identificar a propriedade extra e manter a mesma exigência tanto para código humano quanto para código de IA. Não é necessário alegar que o campo ativo seja um segredo para reconhecer a quebra de contrato.
Leitura técnica relacionada
S07: Pro Git, seção 2.2 Recording Changes to the Repository, especialmente Viewing Your Staged and Unstaged Changes, para alterações e contexto. S19: Node.js test runner para execução e resultados. Os níveis proporcionais de revisão aqui descritos são decisões de processo, e não uma certificação concedida por essas fontes.
Fontes relacionadas
Consulte os limites e as seções de apoio de cada referência.
S07 S19Tente o exercício antes de consultar a solução. Marque a aula para organizar sua leitura.
A conclusão desta leitura não equivale a certificação ou aceite de um projeto real. Teste os exemplos no escopo indicado e registre as limitações.