Desenvolvedores frequentemente tratam um grande modelo de linguagem como uma solução rápida para código antigo. Cole um arquivo legado, digite "modernize isto" e espere pela reescrita. Um novo artigo publicado no arXiv em 29 de outubro questiona se esse atalho realmente deixa o código em melhor estado. Para a maioria dos arquivos testados, a resposta foi não.

Os pesquisadores deram a cinco LLMs a mesma tarefa: pegar 100 arquivos PHP do WordPress 4.0 e modernizá-los para o PHP 8.3, mantendo seu comportamento intacto. Os modelos trabalharam em cada arquivo isoladamente. Eles não tinham informações sobre o projeto como um todo nem feedback da execução do código.

Para avaliar os resultados, a equipe usou 630 verificações comportamentais ocultas, que testaram se cada arquivo ainda fazia o que deveria fazer. Eles também contabilizaram 511 achados de modernização sinalizados pelo Rector, uma ferramenta baseada em regras que reescreve código de acordo com regras fixas. Cada saída foi medida em relação a duas linhas de base: os arquivos originais, sem alterações, e a saída do Rector.

Os originais sem alterações saíram na frente. Sem nenhuma edição, 83 arquivos passaram em todas as verificações. O LLM de melhor desempenho deixou apenas 59 arquivos nesse estado.

A IA quebra código legado que já funciona?

Os modelos também causaram danos reais. Cada um quebrou entre 32 e 51 arquivos que haviam funcionado anteriormente. No máximo, o mesmo modelo corrigiu 10 arquivos que vinham falhando. O Rector quebrou sete arquivos e corrigiu seis, uma oscilação bem menor em ambas as direções.

Grande parte dos problemas poderia ter sido evitada. Os pesquisadores constataram que apenas 37 dos 511 achados, cerca de 7 por cento, exigiam uma mudança para funcionar sob o PHP 8.3. A maior parte do código não precisava ser alterada. Ainda assim, em arquivos que já eram compatíveis e não exigiam nenhuma mudança obrigatória, os LLMs quebraram entre 36 e 60 por cento deles. O Rector quebrou 8 por cento desses mesmos tipos de arquivos.

O modelo com a maior pontuação de modernização não era mais compatível do que seus concorrentes mais próximos. Em outras palavras, um modelo que fazia mais alterações não tinha maior probabilidade de produzir código funcional. Mudar mais linhas significava simplesmente mais chances de quebrar algo.

A maioria das verificações regredidas remetia a arquivos que não carregavam mais. O artigo aponta declarações de tipo que o próprio PHP rejeita como uma causa frequente. Os autores observam que esses erros não exigem conhecimento do projeto como um todo para serem evitados. Um modelo que compreendesse as regras do PHP poderia, em princípio, ter identificado esses problemas.

Esse ponto tem peso para quem avalia ferramentas de programação com IA. Os autores argumentam que estudos sobre modernização baseada em LLMs deveriam comparar os resultados com uma linha de base sem alterações, já que não fazer nada costuma ser a opção mais segura. Eles também recomendam relatar a modernização e a preservação do comportamento como medidas separadas, para que a capacidade de atualizar código não seja confundida com a capacidade de mantê-lo funcionando.

Equipes devem usar um LLM para modernizar código legado?

O estudo abrange apenas arquivos isolados e não reflete como um desenvolvedor poderia usar um LLM dentro de um projeto completo, com suítes de testes e feedback iterativo. Os autores enquadram suas conclusões nesse contexto mais restrito. Ainda assim, os números sugerem que um prompt de uma linha não substitui uma revisão cuidadosa e que equipes que avaliam uma reescrita de código legado por IA devem começar perguntando se o código precisa mesmo ser alterado.

This article was written with the assistance of AI.
News Factory APP - agentic news to boost your SEO & AEO.