A Tale of 1001 LoC: Potential Runtime Error-Guided Specification Synthesis for Verifying Large-Scale Programs

Este artigo apresenta o Preguss, um framework modular que combina análise estática e modelos de linguagem para automatizar a geração e refinamento de especificações formais, permitindo a verificação de programas de grande escala com mais de 1000 linhas de código e reduzindo o esforço humano em até 88,9%.

Zhongyi Wang, Tengjie Lin, Mingshuai Chen, Haokun Li, Mingqi Yang, Xiao Yi, Shengchao Qin, Yixing Luo, Xiaofeng Li, Bin Gu, Liqiang Lu, Jianwei Yin

Publicado Wed, 11 Ma
📖 5 min de leitura🧠 Leitura aprofundada

Each language version is independently generated for its own context, not a direct translation.

Imagine que você tem um livro de receitas gigante, com mais de 1.000 páginas, escrito por um chef que às vezes comete erros de digitação perigosos (como esquecer de colocar sal ou, pior, tentar usar uma faca sem cabo). Se alguém tentar seguir essa receita, a cozinha pode explodir ou a comida ficar venenosa. No mundo dos computadores, esse "livro de receitas" é um programa de software, e os "erros de digitação" são falhas que podem fazer o computador travar, perder dados ou até causar acidentes graves (como em satélites ou carros autônomos).

O problema é que esses livros são tão grandes e complexos que nenhum humano consegue ler tudo e achar todos os erros manualmente. E os robôs (inteligências artificiais) que tentam ajudar, muitas vezes, ficam confusos porque o livro é grande demais para a "memória" deles, ou eles inventam regras que não fazem sentido.

Aqui entra o Preguss, o protagonista desta história. O nome é um trocadilho com "1001", sugerindo que ele consegue lidar com histórias (códigos) enormes.

O Que é o Preguss? (A Metáfora do Detetive Especializado)

Pense no Preguss como um detetive de crimes digitais que usa uma estratégia inteligente para não se afogar em detalhes. Em vez de tentar ler o livro inteiro de uma vez (o que deixaria qualquer detetive, humano ou robô, tonto), o Preguss divide o trabalho em duas fases principais:

Fase 1: O Mapa do Crime (Dividir)

Antes de começar a investigar, o Preguss usa uma ferramenta de "raio-X" (chamada análise estática) para olhar o código e dizer: "Ei, aqui na página 45, na linha 10, parece que alguém vai tentar dividir por zero! Isso é perigoso!".

Essa ferramenta marca todos os pontos onde algo pode dar errado. O Preguss então pega esses pontos de perigo e cria pequenos casos de investigação (chamados de "Unidades de Verificação"). Ele organiza esses casos em uma fila, como se fosse um detetive anotando: "Vamos resolver o problema do elevador primeiro, depois o do freio, e só depois o do rádio". Isso evita que o robô tente resolver tudo de uma vez e trave.

Fase 2: O Interrogatório Inteligente (Conquistar)

Agora, o Preguss chama a Inteligência Artificial (o "LLM", que é como um robô muito inteligente, mas que às vezes alucina) para ajudar a resolver cada caso da fila, um por um.

Aqui está a mágica:

  1. O Detetive dá a pista: O Preguss mostra para a IA apenas a página específica onde o erro pode acontecer e diz: "Olhe aqui. O sistema de raio-X disse que pode haver um erro de divisão por zero. O que precisamos escrever nas regras (especificações) para garantir que isso não aconteça?"
  2. A IA sugere uma regra: A IA tenta inventar uma regra, como "O número nunca pode ser zero".
  3. O Juiz verifica: O Preguss pega essa regra e a testa em um tribunal rigoroso (o verificador formal).
    • Se o juiz disser "Certo!", ótimo! O caso está resolvido.
    • Se o juiz disser "Não, isso não funciona" e der uma dica do porquê (ex: "Você esqueceu de dizer que o número também não pode ser negativo"), o Preguss pega essa dica e manda a IA tentar de novo, ajustando a regra.

Se a IA não conseguir resolver um caso específico, o Preguss não desiste. Ele marca aquele caso como "Suspeito, mas precisamos de um humano para olhar de perto" e segue para o próximo. Isso é crucial: em vez de tentar forçar a IA a resolver tudo (o que geraria erros), ele isola o que precisa de ajuda humana.

Por que isso é revolucionário?

  1. Não tenta ser um herói solitário: Métodos antigos tentavam dar o livro inteiro para a IA ler de uma vez. O Preguss sabe que a IA tem "memória curta" para textos longos. Então, ele entrega apenas o pedaço necessário, como se fosse dar a um aluno apenas a página do livro que ele precisa estudar, e não a biblioteca inteira.
  2. Aprende com os erros: Se a IA inventa uma regra que é "muito estrita" (ex: "O número deve ser 5" quando poderia ser qualquer número positivo), o Preguss percebe que isso gera falsos alarmes e corrige a regra.
  3. Economiza tempo de ouro: Em testes reais, o Preguss conseguiu verificar programas gigantes (como o sistema de controle de um satélite) com 80% a 88% menos esforço humano. Antes, especialistas teriam que passar meses revisando cada linha. Agora, o Preguss faz o trabalho pesado e deixa apenas os casos mais difíceis para os humanos.

O Resultado na Vida Real

Os autores testaram o Preguss em programas reais, incluindo um sistema de controle de navegação para uma espaçonave. O resultado?

  • O Preguss conseguiu provar que o software estava livre de erros perigosos na grande maioria dos casos.
  • Mais impressionante ainda: ele encontrou 6 erros reais que os desenvolvedores não tinham percebido, como tentativas de acessar memória não inicializada. Isso é como o detetive encontrar uma bomba que estava escondida antes que ela explodisse.

Resumo em uma frase

O Preguss é um sistema que ensina a Inteligência Artificial a agir como um detetive organizado: em vez de tentar resolver o mistério do mundo inteiro de uma vez, ele divide o caso em pequenos pedaços, usa pistas de ferramentas automáticas para guiar a IA, e só pede ajuda humana quando o caso realmente fica complicado, tornando a verificação de softwares gigantes rápida, segura e quase automática.