Inteligência artificial no processo de desenvolvimento de software

Foto onde um homem branco interage com a inteligência artificial, representada pelo símbolo AI, para otimizar e automatizar os processos de computação, segurança, backup, nuvem e transferência de dados.
Conheça o resultado de uma pesquisa de percepção sobre as principais hipóteses do uso da inteligência artificial no processo de desenvolvimento de software.

Afinal, como podemos acrescentar a inteligência artificial no processo de desenvolvimento de software? Durante sua rotina de trabalho com software, você já deve ter se deparado com o desejo de que algumas atividades fossem realizadas de forma automática, sem que você precisasse ficar repetindo algo ou verificando sempre a mesma coisa.

Pois bem, a inteligência artificial pode ser uma importante ferramenta para apoio nestes cenários. Sabendo da importância da busca por melhores práticas no processo de desenvolvimento de software, o time de pesquisa da Zup conduziu uma pesquisa com a comunidade buscando as principais hipóteses e percepções sobre como a inteligência artificial pode ser aplicada no processo de desenvolvimento.

Neste artigo, vamos explorar as várias maneiras pelas quais a inteligência artificial pode ser aplicada na engenharia de software, os possíveis benefícios e malefícios do uso da IA ​​nesse contexto, bem como discutiremos os resultados levantados na pesquisa que executamos.

Inteligência artificial no processo de desenvolvimento de software

O uso de modelos computacionais inteligentes aplicados a cenários da engenharia de software possui grande potencial de criar novos cenários e processos no desenvolvimento de produtos. 

Ao automatizar determinadas tarefas e fornecer informações e recomendações, o uso da inteligência artificial neste contexto pode ajudar:

  • pessoas desenvolvedoras a escreverem códigos melhores; 
  • testers a detectarem bugs de formas automatizadas;
  • gerentes de projeto a terem recomendações antecipadas quanto a saúde e qualidade de execução do projeto, por exemplo. 

Frentes de atuação

A inteligência artificial pode ser aplicada de muitas formas no contexto da engenharia de software, mas podemos destacar algumas frentes:

  • Geração de código: a IA pode ser usada para automatizar o processo de geração de código, o que pode ajudar a reduzir o tempo de desenvolvimento e aumentar a produtividade.
  • Depuração: a IA pode ser usada para identificar e corrigir erros no software automaticamente, o que pode ajudar a melhorar a confiabilidade e a estabilidade da aplicação.
  • Teste: a IA pode ser usada para projetar e executar casos de teste para software, o que pode ajudar a garantir que o software seja de alta qualidade.
  • Análise de código: a IA pode ser usada para analisar o código e identificar possíveis problemas ou pontos de melhoria, o que pode ajudar as pessoas desenvolvedoras a escreverem códigos mais eficientes e sustentáveis.
  • Coleta de requisitos: a IA pode ser usada para analisar as necessidades das pessoas usuárias e traduzi-las em requisitos de software, o que pode ajudar a garantir que o software atenda às necessidades de clientes.
  • Design de interface de users: a IA pode ser usada para projetar interfaces de pessoas usuárias otimizadas para a experiência de clientes, o que pode ajudar a tornar o software mais amigável.
  • Gerenciamento de projetos: a IA pode ser usada para analisar dados de projetos de desenvolvimento de software e fornecer insights e recomendações às pessoas gerentes de projeto, o que pode ajudar a melhorar o planejamento e a execução do projeto.

Condução da Pesquisa

 Buscamos, com base na experiência do público, apoio na descoberta de quais os principais pontos onde a existência de uma automação facilitaria o cotidiano de trabalho em um processo de desenvolvimento de software. 

A pesquisa foi anônima e contou com as seguintes perguntas iniciais para conhecer melhor as pessoas respondentes: 

  • Você se enquadra em qual perfil de atuação profissional?
  • Qual o seu nível de senioridade?
  • Há quanto tempo você trabalha com processos de desenvolvimento de software?
  • Atualmente você trabalha em qual empresa?

Posteriormente veio um bloco de perguntas técnicas quanto ao cotidiano de desenvolvimento de software, para cada uma das perguntas, tínhamos uma lista de hipóteses que deveriam ser ranqueadas. 

As perguntas eram as seguintes:

  • Quanto a aspectos de implementação e escrita de código-fonte, ranqueie considerando a relevância de uma automação.
  • Quanto a aspectos de qualidade, testes, segurança e infraestrutura de softwares, ranqueie considerando a relevância de uma automação.
  • Quanto a aspectos de gestão de projetos de software, ranqueie considerando a relevância de uma automação.

Para cada uma dessas perguntas foi pedido um comentário a resposta dada, de forma opcional.

A pesquisa foi aplicada dentro e fora da Zup, para que os resultados fossem analisados para se chegar às conclusões das principais hipóteses frente a percepção do público.

Resultados da Pesquisa

Perfil do público

Tivemos um total de 45 respondentes, destes:

  • 87% são pessoas desenvolvedoras de software;
  • 26% são pessoas de infraestrutura / DevOps / cloud;
  • 22% são pessoas gestoras de projetos e processos de software;
  • 17% são pessoas de analytics e pesquisadoras;
  • 4% são pessoas administradoras de banco de dados;
  • 4% são pessoas de segurança da informação.

Quanto a senioridade tivemos:

  • 52% são sêniores;
  • 30% são plenos;
  • 13% são júniors;
  • 5% são outros.

Quanto ao tempo de trabalho na área:

  • Entre 6 e 10 anos (52%);
  • Entre 2 e 5 anos (30%);
  • Entre 11 e 15 anos (9%);
  • Até 1 ano (4%);
  • Mais de 15 anos (4%).

Nossas hipóteses

Quanto às principais hipóteses dividimos os resultados nos três principais blocos de perguntas, compilando o ranking das hipóteses mais votadas pelos respondentes. Dessa forma:

Implementação e escrita de código-fonte 

Quanto a aspectos de implementação e escrita de código-fonte, as principais hipóteses de como IA poderia ser aplicada em automações para apoiar neste contexto foram:

  1. Análise e detecção de possíveis bugs
  2. Análise de consistência à padrões de escrita do projeto
  3. Análise de código duplicado
  4. Análise de complexidade ciclomática
  5. Análise de adequação a escalabilidade e reuso
  6. Escrita de códigos, métodos e funções recorrentes
  7. Escrita de comentários
  8. Análise da qualidade de comentários

Qualidade, testes, segurança e infraestrutura

Quanto a aspectos de qualidade, testes, segurança e infraestrutura de softwares, as principais hipóteses de como IA poderia ser aplicada em automações para apoiar neste contexto foram:

  1. Análise de pontos de vulnerabilidade
  2. Análise e detecção de pontos que precisam de testes
  3. Análise de adequação de funcionalidades aos requisitos
  4. Escrita de testes
  5. Análise de que tipo de teste deve ser executado
  6. Análise de performance da aplicação
  7. Análise de usabilidade da aplicação
  8. Análise de adequação do projeto às leis vigentes (e.x: LGPD, Acessibilidade)
  9. Análise de estrutura e integridade da base de dados
  10. Análise de adequação de infraestrutura utilizada
  11. Análise de logs
  12. Análise de integridade de serviços terceiros (ex: bibliotecas e APIs)

Gestão de projetos

Quanto a aspectos de gestão de projetos de software, as principais hipóteses de como IA poderia ser aplicada em automações para apoiar neste contexto foram:

  1. Escrita da documentação do projeto
  2. Análise de possíveis tasks de retrabalho
  3. Calibração de estimativa de complexidade
  4. Análise de qualidade da documentação do projeto
  5. Definição/adequação de requisitos
  6. Calibração de estimativa de custo financeiro/temporal
  7. Estimativa de backlog x Prazo do projeto
  8. Detecção de possíveis mudanças de escopo
  9. Atribuição/alocação do time as tasks

E agora? Como colocar em prática? 

Com os resultados desta pesquisa, temos um norte de possíveis hipóteses que se bem executadas podem trazer impactos significativos na melhoria do processo de desenvolvimento de software em diferentes áreas de uma empresa. 

A pesquisa destaca a importância dada pelo público a cada uma das hipóteses estruturadas nas três áreas de concentração destacadas.

A pesquisa destaca resultados interessantes, como de automações para a detecção automática de bugs ou a escrita automática da documentação de projetos

Pois bem, como começar a executar ações para tentar apoiar frentes que possam concretizar essas hipóteses? 

Existem várias técnicas de aprendizado de máquina que podem ser usadas para dar suporte à engenharia de software, alguns exemplos:

Modelos de Classificação

A classificação é uma técnica de aprendizagem de máquina que pode ser usada para prever a qual categoria um dado pertence. Na engenharia de software, algoritmos de classificação podem ser usados ​​para classificar bugs de software como de alta, média ou baixa gravidade, por exemplo.

Modelos de Regressão

A regressão é uma técnica de aprendizagem de máquina que pode ser usada para prever um valor contínuo. 

Na engenharia de software, algoritmos de regressão podem ser usados ​​para prever o esforço necessário para corrigir um bug de software, por exemplo.

Modelos de Clustering

Clustering é uma técnica de aprendizagem de máquina que pode ser usada para agrupar pontos de dados em clusters com base em sua similaridade. 

Na engenharia de software, algoritmos de agrupamento podem ser usados ​​para agrupar bugs de software com base em características comuns, por exemplo.

Modelos de Redução de Dimensionalidade

A redução de dimensionalidade é uma técnica de aprendizagem de máquina que pode ser usada para reduzir o número de dimensões em um conjunto de dados. 

Na engenharia de software, os algoritmos de redução de dimensionalidade podem ser usados ​​para reduzir o número de informações em um conjunto de dados, o que pode facilitar a compreensão e a análise.

Self-learning

É uma técnica de inteligência artificial que permite que um software aprenda a partir dos dados com os quais ele é alimentado, sem intervenção humana. 

Essa técnica é especialmente útil em aplicações que precisam lidar com grande quantidade de dados, como sistemas de recomendação e no processamento de linguagem natural. 

Na engenharia de software, o self-learning pode ser utilizado para aprimorar a capacidade de um software de se adaptar a novas situações e contextos. Por exemplo, um sistema de detecção de code smell pode usar o self-learning para identificar novos tipos de code smell e se adaptar. 

Aprendizagem por Reforço

É uma técnica de IA que pode ser utilizada na engenharia de software para otimizar processos de desenvolvimento. Essa técnica consiste em um agente de aprendizagem que recebe feedbacks positivos ou negativos em relação às ações que executa. 

Com base nesses feedbacks, o agente ajusta suas ações de forma a maximizar a recompensa recebida. Na engenharia de software, a aprendizagem por reforço pode ser aplicada em tarefas como análise de código-fonte, detecção de bugs e otimização de performance.

Preocupações com o uso da IA na Engenharia de Software

Os pontos de aplicabilidade possíveis são diversos, porém para uso efeito da inteligência artificial no processo de desenvolvimento de software ainda há pontos importantes a serem considerados, como:

Viés

Os sistemas de IA podem ser tendenciosos se forem treinados em dados que não são representativos da população mais ampla. Isso pode levar a resultados injustos ou discriminatórios. 

No contexto da engenharia de software pode trazer danos críticos aos projetos, gerando sugestões e recomendações erradas. Por exemplo, um modelo de IA que recomenda testes de software com viés pode deixar de recomendar testes para funcionalidades críticas do sistema, ou até mesmo fazer recomendações de forma equivocada para funcionalidades existentes. 

Atribuição de responsabilidade

Os sistemas de IA podem ser difíceis de depurar, o que torna difícil determinar por qual motivo eles estão tomando certas decisões. Isso pode tornar difícil a responsabilização dos sistemas de IA por ações tomadas, logo, precisando da supervisão de especialistas.

Redução de postos de trabalho

O uso da IA na engenharia de software pode levar a redução de postos de trabalho devido a automação de algumas tarefas, podendo ocasionar preocupações econômicas, sociais e impactos negativos sobre as pessoas.

Dados de qualidade

Para que um modelo de IA possa ajudar a detectar bugs, melhorar a performance do software ou otimizar o processo de desenvolvimento, é necessário que ele tenha sido treinado com dados de qualidade que sejam representativos das condições e desafios encontrados no desenvolvimento de software. 

Isso significa que os dados utilizados devem ser coletados de fontes relevantes, confiáveis e representativas. A busca desses dados de qualidade por vezes é um grande desafio para se treinar bons modelos de IA. 

Preocupações éticas

O uso da AI na engenharia de software levanta uma série de preocupações éticas, podendo ser utilizada para fins maliciosos e para perpetuar desigualdades e preconceitos existentes na sociedade.

É importante considerar cuidadosamente esses e outros pontos de atenção ao usar modelos de inteligência artificial aplicados na engenharia de software, buscando sempre ações que possam mitigá-los. 

Isso pode refletir, por exemplo, no desenvolvimento de sistemas de IA de forma ética e transparente, garantindo que essas aplicações sejam responsáveis ​​e justas.

Conclusões

Por fim, a pesquisa realizada pelo time da Zup pode destacar as principais hipóteses e percepções sobre a inteligência artificial no processo de desenvolvimento de software.

Como visto, o uso da inteligência artificial na engenharia de software tem grande potencial para melhorar de forma significativa a eficiência dos processos de desenvolvimento. 

Ao automatizar determinadas tarefas e fornecer informações e recomendações, a IA pode ajudar as pessoas que participam do processo de desenvolvimento de aplicações a escreverem códigos melhores, mais seguros, mais acessíveis, mais escaláveis, etc.

No entanto, é importante também considerar cuidadosamente os pontos de atenção destacados ao longo do texto quanto ao uso da IA na engenharia de software. 

Ao desenvolver modelos computacionais inteligentes de maneira ética e transparente, podemos maximizar os benefícios do uso da IA ​​nessa área, minimizando os riscos potenciais.

Aproveite e conheça a StackSpot AI, nosso agente de inteligência artificial que vai te ajudar no dia a dia e melhorar sua experiência como dev.

Ficou com alguma dúvida? Tem alguma sugestão? Quer falar com a gente? Então é só me procurar no Linkedin 😉.

Sobre o autor

Geraldo Gomes da Cruz Júnior

Geraldo é Data Analytics Specialist e pesquisador na Zup Innovation com foco em análise de dados e Inteligência artificial. É mestre em modelagem e inteligência computacional e está cursando o doutorado.

Consuma inovação e transforme sua empresa

Assine nossa newsletter e fique em dia com as melhores práticas de tecnologia para gerar impacto nos negócios.

Summary

Related posts

*Material em Inglês

Baixe grátis o eBook
e descubra caminhos para evoluir sua empresa