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 a inteligência artificial no processo de desenvolvimento de software.
Neste artigo, veremos as várias maneiras de aplicação da inteligência artificial 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
Antes de tudo, 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.
Dessa forma, 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 usada para automatizar o processo de geração de código, o que ajuda a reduzir o tempo de desenvolvimento e aumentar a produtividade.
- Depuração: a IA usada para identificar e corrigir erros no software automaticamente, o que ajuda a melhorar a confiabilidade e a estabilidade da aplicação.
- Teste: a IA usada para projetar e executar casos de teste para software, o que ajuda a garantir que o software seja de alta qualidade.
- Análise de código: a IA usada para analisar o código e identificar possíveis problemas ou pontos de melhoria, o que ajuda as pessoas desenvolvedoras a escreverem códigos mais eficientes e sustentáveis.
- Coleta de requisitos: a IA usada para analisar as necessidades das pessoas usuárias e traduzi-las em requisitos de software, o que ajuda a garantir que o software atenda às necessidades de clientes.
- Design de interface de users: a IA usada para projetar interfaces de pessoas usuárias otimizadas para a experiência de clientes, o que ajuda a tornar o software mais amigável.
- Gerenciamento de projetos: a IA usada para analisar dados de projetos de desenvolvimento de software e fornecer insights e recomendações às pessoas gerentes de projeto, o que ajuda 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.
Dessa forma, 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, pedimos 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
Assim, 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 da aplicação da IA em automações para apoiar neste contexto foram:
- Análise e detecção de possíveis bugs
- Análise de consistência à padrões de escrita do projeto
- Análise de código duplicado
- Análise de complexidade ciclomática
- Análise de adequação a escalabilidade e reuso
- Escrita de códigos, métodos e funções recorrentes
- Escrita de comentários
- 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 aplicação da IA em automações para apoiar neste contexto foram:
- Análise de pontos de vulnerabilidade
- Análise e detecção de pontos que precisam de testes
- Análise de adequação de funcionalidades aos requisitos
- Escrita de testes
- Análise de que tipo de teste deve ser executado
- Análise de performance da aplicação
- Análise de usabilidade da aplicação
- Análise de adequação do projeto às leis vigentes (e.x: LGPD, Acessibilidade)
- Análise de estrutura e integridade da base de dados
- Análise de adequação de infraestrutura utilizada
- Análise de logs
- 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 da aplicação da IA em automações para apoiar neste contexto foram:
- Escrita da documentação do projeto
- Análise de possíveis tasks de retrabalho
- Calibração de estimativa de complexidade
- Análise de qualidade da documentação do projeto
- Definição/adequação de requisitos
- Calibração de estimativa de custo financeiro/temporal
- Estimativa de backlog x Prazo do projeto
- Detecção de possíveis mudanças de escopo
- 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.
Portanto, 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.
Além disso, destacamos 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 usadas para dar suporte à engenharia de software, por exemplo:
Modelos de Classificação
A classificação é uma técnica de aprendizagem de máquina usada para prever 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 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 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 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.
Portanto, 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
Por fim, aprendizagem por reforço é uma técnica de IA 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.
Assim, 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 ajude a detectar bugs, melhorar a performance do software ou otimizar o processo de desenvolvimento, é necessário treiná-lo 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.
Então, é 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.
Assim, 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 é 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.