Implementando IA na engenharia de software? Aqui está tudo o que você precisa saber

Implementação de IA na engenharia de software Tudo o que você precisa saber

eyeglasses-codegettyimages-1442975239

Os desenvolvedores de software prosperam com a certeza. Se você fornecer a um programa um conjunto de entradas, sempre obterá as mesmas saídas. Durante a maior parte da história do software, ele foi construído inteiramente em lógica determinística. O que entra determina o que sai.

Até temos um termo para isso: programação top-down. Todos os algoritmos seguem um caminho, com ramificações também baseadas na lógica esperada. Quando depuramos o código, seguimos por esse mesmo caminho repetidamente, encontrando onde o comportamento se desvia da expectativa e corrigindo-o.

Recurso Especial

zd-del2

A Interação entre Inteligência Artificial Gerativa e Engenharia

O aumento da IA gerativa pode aproveitar um potencial tremendo para o domínio da engenharia. No entanto, também pode apresentar desafios, conforme as empresas e os engenheiros descobrem o impacto da IA em suas funções, estratégias comerciais, dados, soluções e desenvolvimento de produtos. Como será o futuro da adoção da IA gerativa no desenvolvimento de software? A ENBLE decodifica de todas as perspectivas.

Leia agora

Certeza e lógica determinística funcionam para grande parte do software. Mas o mundo real não funciona assim. Em contraste, a IA é probabilística. As respostas nunca são exatas. Em vez disso, a IA usa modelos para prever o comportamento e, em seguida, gera esse comportamento.

Talvez a melhor maneira de descrever isso seja comparar a atualização do software tradicional com a IA. O software tradicional recebe atualizações e correções. A IA aprende, evolui por conta própria, compreendendo e assimilando os feedbacks dos usuários sem intervenção manual. Isso torna o software tradicional mais preciso, mas a IA mais flexível.

Ao implementar a IA na engenharia de software, obtemos o melhor dos dois mundos: software preciso e flexível. Este artigo explorará essa fusão e o que ela significa para desenvolvedores, engenheiros e usuários de suas criações.

A convergência entre IA e engenharia de software

Os desenvolvedores de hoje têm a oportunidade de usar a IA como parte de seu processo de codificação. Novas ferramentas alimentadas por IA ajudam a criar código, encontrar bugs, configurar conjuntos de testes e gerar dados de teste e amostra. De certa forma, a IA pode ajudar a melhorar a produtividade de um desenvolvedor, reduzir o tempo gasto em tarefas repetitivas, destacar falhas e ajudar desenvolvedores menos experientes a produzir código como se tivessem mais experiência.

Mas há uma desvantagem: a IA é notoriamente pouco confiável. É preciso ser capaz de verificar o trabalho dela. A IA apresenta seu trabalho com um aparente nível de confiança que faz com que seus resultados pareçam corretos, mesmo quando não estão. Portanto, se você não possui as habilidades, conhecimento e experiência sobre o tema em que está pedindo que a IA trabalhe, não será capaz de identificar quando ela estiver errada.

Dito isso, a IA pode ajudar tremendamente no processo de desenvolvimento, manutenção e teste de código. Embora nem tudo se beneficie da IA, existem pontos no processo em que a IA pode intervir e reduzir horas ou até dias de trabalho necessário.

Mas não se trata apenas de produzir código. Também se trata do código produzido. A convergência entre a IA e a engenharia de software permitirá aos desenvolvedores criar aplicativos mais inteligentes e centrados no usuário, e a experiência dos usuários de software será mais flexível e dinâmica do que ocorre com aplicativos desenvolvidos manualmente.

Com o tempo, veremos alguns aplicativos evoluírem com base no feedback em tempo real dos usuários e algum software que antecipa bugs e incompatibilidades antes mesmo que o usuário os encontre. Nunca será perfeito, mas certamente ajudará a tornar o software melhor.

IA em tarefas de software cotidianas: Quais são os reais benefícios?

Tudo isso parece bom, certo? Mas vamos ir direto ao ponto: o que há na IA em engenharia de software que pode dar aos desenvolvedores algumas horas extras para assistir Doctor Who, brincar com o cachorro ou — eu sei que parece irrazoável — dormir? Vamos examinar cinco áreas que vêm à mente.

Automatização de tarefas repetitivas

Existem muitas tarefas chatas e monótonas que exigem as habilidades de um desenvolvedor, mas estão longe de ser divertidas. Um exemplo é ajudar a escrever blocos de código repetitivos.

Os programadores há muito tempo conseguem configurar seus IDEs para preencher blocos de código como se fossem macros, mas a inteligência artificial pode aprender o padrão e a intenção dos blocos de código e ajudar a gerá-los usando o estilo do programador ou da organização, sem necessariamente programá-los previamente. Ela poderia sugerir: “Já vi você escrever código assim antes. Gostaria que eu o desenvolvesse para você?”

Isso pode ajudar os desenvolvedores a se concentrarem no trabalho mais criativo, sim, mas também pode introduzir consistência no código sem exigir que o desenvolvedor tente encaixá-lo em um padrão restritivo.

Análise preditiva e melhoria da confiabilidade do software

Aqui é onde a IA pode antecipar o comportamento do código com base em padrões e tendências. As ferramentas de IA podem ser usadas para prever sobrecargas no sistema, antecipar o comportamento do usuário, possivelmente otimizar a experiência do usuário e realizar manutenção preventiva em áreas que precisam de melhoria. Outro grande benefício seria atualizar o código para atender aos requisitos mínimos à medida que as plataformas em que eles são executados mudam e se atualizam.

Além de economizar tempo de programação, o software pode se tornar mais confiável e resiliente quase que completamente por conta própria.

Acelerando o ciclo de desenvolvimento/teste

O código sempre precisa ser testado. O ciclo típico envolve um pouco de codificação, um pouco de teste, um pouco de correção… repita a operação. No entanto, porque as AIs podem ser capazes de prever o comportamento do software, elas podem sinalizar erros antes mesmo do início dos testes.

Os ambientes de desenvolvimento há muito tempo são capazes de sinalizar erros de sintaxe e conversão de tipo, que envolvem o conhecimento da estrutura da linguagem. Mas se os ambientes de desenvolvimento puderem começar a sinalizar erros lógicos, isso pode ajudar bastante na entrega de código e na redução do número de etapas de correção necessárias para um determinado projeto.

Reduzindo os custos de manutenção de software

A maioria dos projetos de software, uma vez concluídos, requer um nível de manutenção quase constante para acompanhar os bugs descobertos, as mudanças na plataforma e os problemas de desempenho. Eu escrevi um software que ajuda a facilitar doações sem fins lucrativos, e gasto pelo menos 80% do meu tempo não respondendo a solicitações de usuários ou adicionando novas funcionalidades, mas simplesmente reescrevendo o código para os requisitos em constante mudança das plataformas de pagamento. Se eu pudesse reduzir qualquer parte dessa manutenção ingrata e tediosa, poderia fornecer muito mais valor aos usuários.

Manter o elemento humano

Apesar da adição de IA no ambiente de desenvolvimento, todas as indicações são de que programadores reais, humanos, continuarão a criar a maioria do software no futuro previsível.

Reduzir o tempo e o tédio certamente pode ajudar os desenvolvedores a manterem-se afiados, mas as AIs também podem monitorar o desempenho geral da equipe, fornecendo aos gerentes notificações se um membro da equipe foi sobrecarregado, sobrecarregado ou caminhando para o esgotamento. Elas também podem ajudar a realocar tarefas para cada membro trabalhar com suas próprias habilidades e auxiliar no planejamento e alocação de recursos.

Desafios e limitações da IA na engenharia de software

Como em qualquer aumento na complexidade tecnológica, existem questões. Nesta seção, vou falar sobre três áreas de preocupação.

Complexidade adicional e desafio de manutenção

Aqui está a minha maior preocupação com a IA na engenharia de software: à medida que usamos a IA para mais e mais código, teremos menos e menos compreensão de como tudo funciona. Se você já herdou um projeto de outra pessoa, especialmente se essa organização ou desenvolvedor não estiver disponível para consulta, você sabe o que eu quero dizer.

O que é gerado pela IA será muito mais uma caixa-preta do que o que você e sua equipe codificam, e o risco é que, uma vez gerado, será muito mais difícil para os humanos manterem. Não caia na armadilha de esperar que a IA mantenha seu próprio software. Quando o código da IA falhar, você e sua equipe serão responsáveis por descobrir o que deu errado e consertá-lo.

Dependência de dados

A IA depende de uma quantidade imensa de dados para criar seus modelos. Se você não estiver usando um modelo público – por exemplo, se estiver trabalhando em algo que seja expertise exclusiva da sua empresa – o conjunto total de dados disponíveis para treinar uma IA pode não ser suficiente.

Além disso, os sistemas de IA são treinados com conjuntos amplos de dados, nem todos dos quais possuem o nível de qualidade necessário para o trabalho que você está tentando realizar.

Eu continuo lembrando as pessoas que trazer uma IA para um projeto de engenharia de software é como contratar um grupo de talentosos estagiários de verão. Eles podem ser inteligentes e rápidos, mas às vezes vão errar, e você terá que limpar a bagunça depois que eles saírem. Enquanto sua IA não vai embora, ela vai te deixar com problemas que ela não é capaz de resolver.

Preocupações éticas

No artigo A IA na engenharia de software estaria alcançando um ‘momento Oppenheimer’?, discuti as questões éticas que a IA traz para os desenvolvedores de software. É importante lembrar que os programadores não são treinados para lidar com preocupações éticas. Na verdade, fiz uma especialização em ética e filosofia política ao lado do meu curso de ciência da computação, mas na época eu era o único aluno de ciência da computação a ter essa especialização. (Divulgação completa: escolhi esse curso porque uma garota de quem eu gostava estava fazendo aulas de filosofia. Então, mesmo minha especialização em ética não era totalmente ética.)

Os programadores são treinados para serem bons tecnólogos, mas o impacto social não faz parte da maioria dos currículos de ciência da computação. Programadores e desenvolvedores autodidatas podem estar ainda mais distantes do treinamento em ética. Portanto, esperar que um exército de talentosos técnicos enxergue – e esteja na linha de frente – das considerações éticas históricas é irrealista.

As empresas que utilizam a IA devem esperar expandir o treinamento de suas equipes técnicas para questões de impacto social, ou contratar especialistas para aconselhar e orientar os desenvolvedores enquanto eles entram neste território não explorado dos fatores humanos.

Ferramentas e plataformas para engenharia de software impulsionada por IA

Felizmente, os desenvolvedores e organizações não precisam começar suas jornadas de IA construindo todas as suas próprias ferramentas. Houve um grande investimento em pesquisa fundamental e na produção de ferramentas e bibliotecas práticas que podem ser licenciadas e incluídas em projetos.

Nesta seção do guia de recursos, apresento um rápido levantamento de cinco categorias de ferramentas que você provavelmente vai querer usar, e destaco alguns dos principais líderes em cada setor. Isso lhe dará um ponto de partida tangível e prático para o seu próximo projeto.

Estruturas de aprendizado de máquina de uso geral

As ferramentas desta categoria fornecem estruturas e funcionalidades fundamentais para projetar, treinar e implantar modelos de aprendizado de máquina.

  • Google TensorFlow: Uma plataforma open-source completa projetada para aprendizado de máquina, que facilita a construção e implantação de modelos de ML.
  • Facebook PyTorch: Uma plataforma baseada em gráfico computacional dinâmico que oferece flexibilidade na construção de modelos de deep learning.
  • Keras: Uma API de redes neurais de alto nível, escrita em Python e capaz de funcionar em cima de TensorFlow, PyTorch e outros.

Plataformas de desenvolvimento de IA baseadas em nuvem

Essas plataformas oferecem infraestrutura em nuvem para desenvolver, treinar e implantar modelos de aprendizado de máquina em escala, frequentemente integradas com outros serviços em nuvem.

  • Google Vertex AI: Uma plataforma unificada na Google Cloud que oferece ferramentas e serviços abrangentes para construir, implantar e dimensionar modelos de IA e aprendizado de máquina em diversos conjuntos de dados.
  • Amazon AWS SageMaker: Um serviço totalmente gerenciado que ajuda os desenvolvedores a construir, treinar e implantar modelos de aprendizado de máquina.
  • Microsoft Azure Machine Learning: Um conjunto de serviços em nuvem que utiliza ferramentas de aprendizado de máquina para treinar e implantar modelos de forma mais rápida. Pense nisso como Aprendizado de Máquina como um Serviço.

IA para código e desenvolvimento de software

As ferramentas desta seção auxiliam os desenvolvedores no processo de codificação, oferecendo sugestões, autocompletar e análise de código automatizada baseada em IA.

  • OpenAI Codex: Essa ferramenta alimenta aplicações como o GitHub Copilot, ajudando os desenvolvedores a escreverem código mais rápido com sugestões alimentadas por IA.
  • Github Copilot: Um assistente de código alimentado por IA que sugere linhas ou blocos de código inteiros enquanto os desenvolvedores digitam, ajudando a acelerar o processo de codificação e garantir as melhores práticas.
  • Snyk Code: Oferece análise de código automatizada, detecção de vulnerabilidades de segurança e recomendações de correções, analisando projetos de código aberto extensos.

Não se confunda com essas ofertas. O GitHub Copilot é alimentado pelo OpenAI Codex. Enquanto o OpenAI Codex funciona como uma ferramenta de IA de propósito geral para várias tarefas de codificação e pode ser integrado em várias plataformas, o GitHub Copilot é uma ferramenta especializada para conclusão de código em tempo real e assistência no ambiente do Visual Studio Code.

O Snyk Code foca na análise de código automatizada e detecção de vulnerabilidades de segurança, analisando vastos projetos de código aberto.

Modelos e plataformas pré-treinados

Essas ferramentas oferecem modelos pré-treinados em enormes quantidades de dados, permitindo que os desenvolvedores os ajustem para tarefas específicas sem começar do zero.

  • Transformers da Hugging Face: Uma biblioteca que oferece modelos pré-treinados principalmente para tarefas de Processamento de Linguagem Natural, com foco em arquiteturas de transformadores.
  • spaCy: Uma biblioteca de software de código aberto para processamento avançado de linguagem natural em Python, conhecida por sua velocidade e eficiência.

Também: Quer criar seu próprio chatbot de IA? Conheça o HuggingChat de código aberto

Ferramentas de busca de arquitetura neural

Por fim, as ferramentas dessa categoria automatizam o processo de encontrar a arquitetura de rede neural mais ideal para um conjunto de dados ou tarefa específica. (Observação: Essa categoria de ferramentas é frequentemente abreviada como NAS. O NAS mencionado aqui é muito diferente do NAS que se refere ao armazenamento conectado à rede.)

  • AutoKeras: Uma biblioteca de software de código aberto para automação de aprendizado de máquina, ajudando a encontrar o modelo certo para o seu conjunto de dados.
  • AutoML do Google: Oferece soluções em nuvem que automatizam o design e ajuste de modelos de aprendizado de máquina com base nos conjuntos de dados fornecidos.

Chamar o cenário de ferramentas e plataformas impulsionadas por IA na engenharia de software de “vasto” seria um eufemismo severo. A IA generativa, e a IA em geral, se tornou a tendência mais quente em tecnologia e não mostra sinais de desaceleração. À medida que os requisitos de desenvolvimento aumentam, os desenvolvedores buscam as ferramentas mais apropriadas para concluir seus projetos. Mostramos apenas uma pequena parte dos recursos disponíveis.

Tenha em mente que este é um ambiente muito fluido. Ao compilar essa lista, encontramos várias ferramentas que já foram (no ano passado) recursos bastante populares, mas foram adquiridas, incorporadas a outros projetos ou simplesmente encerradas à medida que seus desenvolvedores de código aberto encontraram novas oportunidades com trabalhos remunerados que oferecem mais potencial a longo prazo.

Não é apenas importante desenvolver habilidades com as ferramentas que você usa: empresas e programadores também devem incorporar a compreensão da mudança constante em suas habilidades, para poder se adaptar a um mercado e a um conjunto de tecnologias que estão inovando em velocidade acelerada.

O futuro da IA na engenharia de software

A convergência entre inteligência artificial e engenharia de software tradicional não é uma tendência passageira. Ela oferece um valor “fácil” demais para ser ignorado, mas, à medida que proporciona novas eficiências, também traz muitos desafios que discutimos neste artigo e no destaque especial.

Ao olharmos para o futuro, várias tendências e predições-chave emergem:

  • Desenvolvimento orientado por AI, com aprendizado de máquina no centro dos projetos
  • Software autoadaptável que evolui em tempo real com base nas necessidades do usuário
  • IA colaborativa que trabalha em parceria com os desenvolvedores, entendendo contexto e dinâmicas de equipe
  • Um foco em IA ética e responsável, enfatizando transparência e equidade
  • Cibersegurança baseada em IA que detecta e combate proativamente ameaças
  • Modelos de IA personalizados que atendem a necessidades específicas, democratizando os benefícios da IA
  • Um enfoque em aprendizado contínuo para desenvolvedores, dada a natureza em constante evolução da IA
  • Código e soluções escritos principalmente por IAs que são opacos para os desenvolvedores humanos

É emocionante e um pouco preocupante pensar no impacto que a IA promete para a engenharia de software. Como ocorre com qualquer avanço tecnológico, desafios surgirão. No entanto, se o último ano servir de indicativo, a integração da IA na engenharia de software é uma jornada repleta de oportunidades, prestes a redefinir os limites do que o software pode alcançar.


Você pode acompanhar as atualizações diárias do meu projeto nas redes sociais. Certifique-se de se inscrever na minha newsletter semanal de atualizações no Substack e me seguir no Twitter em @DavidGewirtz, no Facebook em Facebook.com/DavidGewirtz, no Instagram em Instagram.com/DavidGewirtz e no YouTube em YouTube.com/DavidGewirtzTV.