O Futuro da Programação Automática e Confiança
Analisando os desafios e futuros papéis na programação automática com LLMs.
― 10 min ler
Índice
- Desafios na Programação Automática
- A Ascensão do Desenvolvimento Low-Code
- Abordando Preocupações em Torno do Código Gerado Automaticamente
- A Mudança nos Papéis dos Programadores
- Melhorando a Confiança no Código Automatizado
- Atributos de Confiabilidade na Geração de Código
- Melhorando a Qualidade do Código Gerado Automaticamente
- Futuros Ambientes de Programação
- Conclusão
- Fonte original
- Ligações de referência
A programação automática tá bombando com ferramentas como o GitHub Copilot que usam grandes modelos de linguagem (LLMs). Essas ferramentas ajudam a escrever código rapidão. Mas, tem uns desafios quando se usa código gerado automaticamente, principalmente em relação à qualidade e Confiança. Neste artigo, vamos dar uma olhada na codificação automatizada de um jeito geral, focando em questões como Qualidade do Código, Segurança e quais Responsabilidades os programadores têm ao usar esse tipo de código. Esses pontos são importantes pra galera das organizações que tão pensando em usar código gerado automaticamente.
A gente também vai discutir como os avanços recentes em engenharia de software, como reparo e análise de programas, podem dar uma força pra programação automática. E no final, vamos dar uma espiada no futuro do ambiente de programação, onde os programadores podem ter que assumir papéis diferentes pra tirar o melhor proveito da programação automática.
Desafios na Programação Automática
Programar envolve pegar o que o usuário quer fazer e criar um código correto. Essa tarefa é um foco grande na computação há mais de cinquenta anos. Já rolou um progresso significativo em modelar e projetar sistemas pra ajudar a entender a intenção do usuário, levando ao desenvolvimento de especificações formais. Mesmo com esse progresso, muitos engenheiros de software ainda têm pé atrás em escrever especificações formais. Pra sistemas de software grandes, uma descrição clara do que o usuário quer geralmente tá faltando, o que dificulta a depuração e a correção de erros.
O reparo automático de programação mostrou que pode ajudar a consertar código. Mas, uma pergunta chave continua: como confiar no código que é gerado automaticamente?
O aumento da geração de código automática com grandes modelos de linguagem trouxe à tona questões de confiança. Isso levanta perguntas sobre se podemos realmente contar com código gerado automaticamente pra usar nos nossos projetos. No passado, algumas indústrias geraram código a partir de modelos, mas não há muito precedente pra usar código gerado a partir de descrições em linguagem natural de forma ampla.
Conforme mais organizações começam a usar código gerado automaticamente, surgem preocupações adicionais sobre correção, segurança e a capacidade de entender o código. Tem o risco de "jogar a culpa" quando um projeto falha, que inclui código gerado automaticamente.
Uma maneira de entender os desafios de integrar código gerado automaticamente num projeto é pensar em como as aplicações de software interagem com o software de sistema. Quando um software de sistema é atualizado, uma aplicação específica pode falhar, não por causa de um problema no software de sistema, mas por causa de uma má interpretação das expectativas entre a aplicação e o sistema. Da mesma forma, quando código gerado automaticamente e código escrito à mão coexistem num projeto, erros podem surgir por causa de mal-entendidos entre os dois tipos de software.
Neste artigo, vamos explorar como a confiança pode mudar ao combinarmos código gerado automaticamente com programação manual. Uma pergunta interessante pros pesquisadores é quais critérios devemos usar pra decidir se podemos confiar no código gerado por LLMs nos nossos projetos.
A Ascensão do Desenvolvimento Low-Code
Uma mudança significativa tá rolando na forma como as organizações tão encarando o desenvolvimento de software. Por exemplo, a Oracle mencionou que tá se afastando do Java pra uma plataforma de low-code chamada Apex pra gerar novos softwares. Essa mudança pra ferramentas low-code não só acelera o desenvolvimento, mas também simplifica as auditorias de segurança dos projetos de software.
No geral, dá pra ver que a programação automática é mais do que só o uso de grandes modelos de linguagem; também inclui a crescente tendência de desenvolvimento de aplicações low-code e no-code.
Abordando Preocupações em Torno do Código Gerado Automaticamente
Com o aumento do foco na programação automática, vários problemas associados ao código gerado automaticamente estão sendo examinados. Além da correção, segurança, privacidade e a explicabilidade do código também são significativos, especialmente quando vem de um grande modelo de linguagem.
Outra preocupação importante é a responsabilidade pelas falhas na codificação automatizada. Pra esclarecer essa questão, a gente pode comparar a interação entre software de aplicação e software de sistema, que pode levar a problemas de compatibilidade de aplicações. Muitas vezes, uma aplicação específica pode parar de funcionar devido a mudanças no software de sistema, mas pode não ser culpa do software de sistema. Ao invés disso, pode ser por causa de um erro na compreensão das necessidades dos dois sistemas.
Quando código gerado automaticamente se encontra com código manual em um projeto, erros podem surgir de mal-entendidos sobre como cada parte espera trabalhar junta.
Neste artigo, vamos analisar como a confiança pode mudar quando combinamos código automatizado com programação manual. Uma questão técnica chave para os pesquisadores é quais critérios devemos usar pra aceitar código gerado por LLM nos nossos projetos. A habilidade dos LLMs, junto com ferramentas de análise de programas pra automatizar tarefas de programação essenciais como consertar bugs e adicionar recursos, mostra o potencial de pesquisa nessa área. Melhorar as últimas fases do código gerado automaticamente através de reparo de programas pode ajudar a fornecer provas da qualidade para aceitar código gerado por LLM nos nossos projetos.
A gente também vai considerar o impacto dos LLMs em gerar não só código, mas também outros processos, como gerar testes, revisar código e resumir código. Da perspectiva de como os humanos interagem com LLMs, queremos fornecer uma nova visão sobre como a programação pode parecer no futuro.
A Mudança nos Papéis dos Programadores
À medida que avançamos pra um futuro cheio de LLMs e programação automática, o papel dos programadores provavelmente vai mudar. Tradicionalmente, os programadores têm focado em escrever código. Mas, com a automação de muitas tarefas de codificação, o foco pode mudar pra tarefas que exigem uma compreensão mais ampla, como desenhar aplicações ou supervisionar a garantia de qualidade.
Os programadores podem precisar se adaptar a novos papéis que priorizam a colaboração com sistemas de IA que cuidam da escrita de código. Isso pode envolver agir mais como especialistas em garantia de qualidade, que passam seu tempo verificando a qualidade e a correção do código produzido pelos LLMs.
Melhorando a Confiança no Código Automatizado
Garantir a qualidade do código gerado pelos LLMs é crítico. Alguns pesquisadores apontaram que o código gerado automaticamente tende a introduzir erros simples. Sem especificações claras, entender se o código gerado pelos LLMs é correto fica cada vez mais difícil.
As questões de confiabilidade no código gerado por LLMs se tornaram uma preocupação significativa para os desenvolvedores. Já foram observadas instâncias de código gerado automaticamente contendo vulnerabilidades de segurança. Detectar essas falhas de segurança pode ser complicado, especialmente se os desenvolvedores não examinarem cada pedaço de código gerado de perto.
Tem também a preocupação de que os LLMs possam ser explorados por pessoas com más intenções. Elas poderiam manipular dados de treinamento ou prompts pra produzir código falho. A falta de transparência em como os LLMs funcionam adiciona complexidade ao desafio de entender e depurar código gerado automaticamente.
Pra avaliar a qualidade do código gerado automaticamente, podemos usar diretrizes conhecidas como ISO/IEC 25010. Esse framework inclui várias características de qualidade como funcionalidade, desempenho, segurança e manutenibilidade. Enquanto a pesquisa recente se concentrou em diferentes aspectos da qualidade, notamos que algumas áreas ainda precisam de atenção, como compatibilidade e portabilidade.
Atributos de Confiabilidade na Geração de Código
Pra construir confiança no código gerado por LLMs, é essencial identificar atributos que ajudem a avaliar sua confiabilidade. Podemos categorizar esses atributos em dois grupos principais: aqueles relacionados às propriedades do código gerado e aqueles relevantes ao funcionamento mais amplo dos LLMs.
Algumas características a serem observadas incluem:
Segurança: Como muitos LLMs aprendem com grandes conjuntos de dados, que podem conter exemplos inseguros ou falhos, o código que eles geram pode introduzir vulnerabilidades.
Confiabilidade: LLMs podem produzir bugs menores que podem se acumular em problemas significativos em projetos maiores.
Privacidade: As empresas podem hesitar em compartilhar dados de código sensíveis, com medo de vazamentos potenciais.
Pra garantir o uso seguro do código gerado por LLMs, várias estratégias podem ser desenvolvidas. Elas podem incluir o uso de dados de treinamento de alta qualidade e o desenvolvimento de ferramentas de análise estática leves pra verificar o código gerado em busca de vulnerabilidades.
Melhorando a Qualidade do Código Gerado Automaticamente
Conforme os LLMs evoluem, eles não são apenas assistentes de código; estão se tornando parte integral do desenvolvimento de software. No entanto, ainda existem desafios em relação à sua plena integração nas tarefas de programação reais.
Pra realmente aproveitar o poder dos LLMs na programação automática, várias áreas precisam ser abordadas:
Codificação Multimodal: Os LLMs atuais lidam principalmente com texto, mas os desenvolvedores frequentemente trabalham com vários tipos de dados, incluindo imagens. A capacidade de analisar elementos visuais e convertê-los em código poderia agilizar o processo de design.
Conhecimento Específico de Domínio: Pra projetos em larga escala, os LLMs precisam entender domínios de negócio e técnicos específicos pra apoiar melhor os desenvolvedores.
Atualização de Conhecimento: Como software e APIs evoluem continuamente, os LLMs precisam ter maneiras de integrar novas informações e corrigir informações erradas aprendidas em sessões de treinamento anteriores.
Garantia de Qualidade: É vital melhorar a confiabilidade do código gerado pelos LLMs e desenvolver métodos automatizados pra verificar a qualidade do código gerado.
Futuros Ambientes de Programação
Até 2030, o ambiente de programação pode parecer bem diferente. Com técnicas de auto-programação-baseadas em LLMs maduras, os programadores podem passar de papéis de codificação tradicionais pra posições que focam em design de alto nível e garantia de qualidade. Ao invés de passar tempo escrevendo código, eles podem supervisionar as tarefas manuseadas pelos LLMs que geram e repararam código.
O futuro pode ver programadores assumindo o papel de especialistas em garantia de qualidade, garantindo que o código gerado esteja alinhado com os requisitos do projeto. Eles podem usar técnicas automatizadas de reparo de programas pra verificar a qualidade do código gerado automaticamente.
Conclusão
O potencial da programação automática e do uso de grandes modelos de linguagem continua a crescer. Mas, avançar pra um futuro onde LLMs e automação têm um papel significativo traz vários desafios. Melhorar a confiança no código gerado automaticamente, garantindo sua qualidade e adaptando os papéis dos programadores vai ser crucial pra uma integração bem-sucedida. Conforme desenvolvemos programas e aprendemos com essas ferramentas, o futuro da programação pode trazer possibilidades empolgantes que vão redefinir como entendemos a codificação e o desenvolvimento de software.
Título: Automatic Programming: Large Language Models and Beyond
Resumo: Automatic programming has seen increasing popularity due to the emergence of tools like GitHub Copilot which rely on Large Language Models (LLMs). At the same time, automatically generated code faces challenges during deployment due to concerns around quality and trust. In this article, we study automated coding in a general sense and study the concerns around code quality, security and related issues of programmer responsibility. These are key issues for organizations while deciding on the usage of automatically generated code. We discuss how advances in software engineering such as program repair and analysis can enable automatic programming. We conclude with a forward looking view, focusing on the programming environment of the near future, where programmers may need to switch to different roles to fully utilize the power of automatic programming. Automated repair of automatically generated programs from LLMs, can help produce higher assurance code from LLMs, along with evidence of assurance
Autores: Michael R. Lyu, Baishakhi Ray, Abhik Roychoudhury, Shin Hwei Tan, Patanamon Thongtanunam
Última atualização: 2024-05-15 00:00:00
Idioma: English
Fonte URL: https://arxiv.org/abs/2405.02213
Fonte PDF: https://arxiv.org/pdf/2405.02213
Licença: https://creativecommons.org/licenses/by/4.0/
Alterações: Este resumo foi elaborado com a assistência da AI e pode conter imprecisões. Para obter informações exactas, consulte os documentos originais ligados aqui.
Obrigado ao arxiv pela utilização da sua interoperabilidade de acesso aberto.