A dívida técnica é frequentemente um obstáculo fundamental à inovação em muitas organizações de desenvolvimento de software, especialmente nos processos de construção e teste. À medida que uma base de código cresce e a complexidade aumenta, correções rápidas e sistemas legados se acumulam, criando ineficiências que desaceleram as construções, aumentam os tempos de teste e introduzem dependências frágeis.
O que começa como pequenas compensações para atingir objetivos imediatos pode se transformar em gargalos significativos , dificultando a escala e a iteração. Lidar com essa dívida é crucial para organizações de software que buscam manter a agilidade, garantindo que seus pipelines de CI/CD permaneçam rápidos, confiáveis e capazes de suportar a entrega rápida de recursos.
No entanto, ao mesmo tempo, muitas vezes parece um problema intratável. Sabemos que devemos investir e tentamos progredir, mas parece que estamos nadando contra a corrente. Apesar de nossos investimentos, a dívida técnica continua a aumentar.
Alguns ofereceram IA como uma saída. Não seria ótimo apontar uma IA para sua infra, e ela magicamente começaria a melhorar? Como um engenheiro sensato com mais de 20 anos de experiência, aprendi a ignorar o hype do fornecedor e os sonhos mirabolantes. Mas acontece que, neste caso, pode haver algo ali.
Fluxos de trabalho de agentes: uma nova abordagem de IA
Você já ouviu falar de Agentic Workflows? Essa nova abordagem de IA oferece uma promessa incrível, e é uma área em que tenho investido substancialmente nos últimos meses, pois pode oferecer nossa melhor chance de lidar com as vastas quantidades de dívida técnica que todos nós acumulamos.
Para aqueles que não estão familiarizados com os fluxos de trabalho do Agentic, aqui vai uma introdução rápida: Fluxos de trabalho de agentes são aqueles em que agentes de software autônomos assumem tarefas que tradicionalmente exigem tomada de decisão ou intervenção humana.
Principais características desejadas:
- Autônomo: os agentes devem operar independentemente da direção humana, executando tarefas com base em regras predefinidas ou algoritmos baseados em IA, sem precisar de instruções ou comandos de humanos.
- Agir proativamente: os agentes precisam ter a capacidade de antecipar necessidades, iniciar ações ou fazer recomendações com base em condições ou padrões de mudança
- Adapte-se às mudanças: Ao contrário de scripts rígidos ou processos manuais, queremos que os agentes se adaptem a dados em tempo real, mudanças inesperadas ou novos requisitos, reconfigurando os fluxos de trabalho conforme necessário
- Tomar decisões: os agentes devem ser capazes de tomar decisões complexas analisando dados, ponderando opções e determinando o melhor curso de ação dentro do contexto do fluxo de trabalho
- Orientado a objetivos: os fluxos de trabalho do Agentic devem se concentrar em atingir resultados específicos em vez de apenas concluir etapas predefinidas.
Os fluxos de trabalho de agentes prometem transformar a maneira como testamos e construímos software , mas temos que começar de algum lugar. Decidi escolher uma fruta fácil que assola minha organização para demonstrar o poder potencial da IA em pipelines de desenvolvimento de software.
Cobertura de código: um problema tratável
Em muitas organizações, garantir a cobertura completa do código pode ser assustador. Quanto da nossa base de código deve ser testado por testes unitários automatizados? Os desenvolvedores geralmente precisam equilibrar prazos e qualidade, resultando em código apressado sem testes suficientes. Essa falta de cobertura de teste introduz risco, pois partes não testadas do código podem conter bugs ou incompatibilidades.
Onde a IA pode ajudar?
Gerando testes de unidade: usando IA para gerar testes de unidade para partes não testadas do código automaticamente Relatórios de cobertura: usar relatórios de cobertura para identificar áreas onde os testes são insuficientes e, em seguida, solicitar que a IA gere testes para essas áreas.
Aproveitando um novo tipo de mecanismo de contêiner — Dagger
Ferramentas de construção tradicionais, plataformas de CI e mecanismos de contêiner como o Docker têm seu lugar, mas não fornecem os recursos necessários para nos permitir alcançar o que precisamos por nós mesmos. Alguns anos atrás, comecei a brincar com o Dagger, o novo mecanismo de contêiner focado em pipeline que está sendo desenvolvido por Solomon Hykes e a equipe técnica inicial por trás do Docker. Quanto mais tempo passo com o Dagger, mais vejo seu potencial para transformar a maneira como gerenciamos fundamentalmente nossos pipelines de software.
Por que eu amo o Dagger?
Porque ele simplifica a criação e a implantação de fluxos de trabalho ao fornecer uma camada de abstração sobre sistemas de pipeline complexos. O Dagger permite que os desenvolvedores automatizem e distribuam tarefas entre ambientes usando contêineres . Ele é fundamental no gerenciamento de dependências, conteinerização e pipelines de CI/CD, ao mesmo tempo em que permite que os desenvolvedores personalizem seus fluxos de trabalho por meio do design modular. Nesse caso, o Dagger é essencial no gerenciamento da infraestrutura por trás do fluxo de trabalho do agente. O sistema usa o Dagger para criar, executar e gerenciar contêineres Docker que encapsulam o código gerado pela IA. Isso garante que o código seja executado em um ambiente consistente.
Mas e o Docker?
Ainda o usamos, mas para o que ele foi projetado. O código gerado é executado em contêineres Docker , permitindo ambientes de teste consistentes e isolados. O Dagger integra-se perfeitamente com o Docker, facilitando o gerenciamento de fluxos de trabalho em contêineres sem supervisão manual.
Eu poderia ter feito isso sem o Dagger?
Claro, mas o Dagger simplifica drasticamente o processo de lidar com as dependências. No meu design inicial, gerenciar várias dependências para a ferramenta de geração de código de IA era trabalhoso. O Dagger ajudou a reduzir a complexidade ao lidar automaticamente com dependências em tempo de execução.
Testes de unidade gerados por IA
Comecei construindo um piloto que cria um fluxo de trabalho usando IA para gerar testes unitários. A IA analisa relatórios de cobertura e gera casos de teste com base no código descoberto. Veja como o processo funciona:
Geração de IA: a IA gera código com base nas lacunas identificadas no relatório de cobertura. Execução e tratamento de erros: O código gerado é executado em um contêiner onde os erros são detectados. Ciclo de feedback: se forem encontrados erros, a IA pega esse feedback e melhora o código gerado, criando um ciclo de melhoria contínua.
O papel das plataformas de integração contínua
Integrar um fluxo de trabalho em um pipeline de CI permite que os testes unitários gerados sejam testados automaticamente sempre que um novo código for enviado ao repositório. Isso garante que cada envio de código seja validado quanto à qualidade e correção, reduzindo o risco de introduzir bugs na produção.
O ciclo autocorretivo
A principal inovação aqui é criar um loop autocorretivo, onde o código gerado pela IA é refinado em cada iteração. O loop funciona da seguinte forma:
A IA gera uma solução inicial com base nos dados de entrada. O código é executado e erros (se houver) são retornados. Esses erros são realimentados no modelo de IA, permitindo que ele melhore a próxima iteração. Esse processo se repete até que o código seja executado com sucesso ou um número predefinido de iterações seja atingido. Este loop torna o sistema cada vez mais preciso ao longo do tempo, resolvendo os problemas comuns de geração de código incompleta ou incorreta. Este loop do piloto foi usado para refinar a capacidade da IA de gerar testes de unidade funcionais.
Interface do desenvolvedor: extensão do VS Code e CLI distribuída
Inicialmente, eu construí isso como uma extensão do VS Code que poderia gerar testes unitários. No entanto, eu rapidamente vi que isso tornaria difícil escalar a extensão em diferentes ambientes de desenvolvimento. Como os desenvolvedores em grandes organizações usam muitos editores, eu precisaria criar várias versões da extensão para dar suporte a todos os meus desenvolvedores.
Uma versão mais elegante era aproveitar o Dagger para criar uma CLI distribuída que pudesse executar o modelo de IA e gerar testes sem depender de um editor específico. Isso permitiu uma solução mais flexível que poderia ser usada em diferentes ferramentas, removendo a necessidade de construir extensões específicas do editor.
Expandindo o uso de IA em pipelines
As aplicações potenciais desse fluxo de trabalho agêntico são vastas. Além de gerar testes unitários, vejo o potencial de expandir o sistema para executar outras tarefas relacionadas a código, como:
Refatoração de código: a IA pode sugerir refatorações para tornar o código mais eficiente ou mais acessível para testes. Revisões contínuas de código: a IA pode participar de solicitações de pull gerando automaticamente comentários ou sugestões de melhoria. Fluxos de trabalho de autocorreção: o sistema pode gerar automaticamente correções para problemas detectados durante os testes, permitindo que a IA sugira alterações e as implemente também.
A Kambui planeja desenvolver plugins para Python e outras linguagens de programação para adicionar suporte a diversas linguagens de programação, permitindo um uso mais amplo do fluxo de trabalho em diferentes projetos.
Conclusão
A integração de IA no desenvolvimento de software tem o potencial de reduzir significativamente o tempo e o esforço necessários para tarefas manuais, como escrever testes de unidade e executar revisões de código. Minhas primeiras explorações demonstraram como podemos alavancar ferramentas de IA prontas para uso, juntamente com a emergente estrutura de código aberto Dagger, para criar fluxos de trabalho escaláveis e distribuídos que usam IA para automatizar e melhorar esses processos. Implementar sistemas com um loop autocorretivo deve levar a uma maior qualidade de código, ao mesmo tempo em que reduz a carga de testes para os desenvolvedores.
Este fluxo de trabalho agêntico é uma ferramenta poderosa para as equipes de desenvolvimento de hoje e um vislumbre do futuro do desenvolvimento aumentado por IA. Estamos em um momento emocionante. Espero que a IA transforme muitas tarefas comuns em nossos locais de trabalho. É emocionante ver onde ela pode melhorar significativamente a construção e o teste do software que é crítico para nossas empresas e vidas.