“Esta é a aplicação mais alucinante de aprendizagem automática que alguma vez vi.”
Mike Krieger, cofundador do Instagram.
As palavras de Mike Krieger não são uma hipérbole. Embora o ML seja capaz de fazer algumas coisas notáveis em termos de análise de dados e conhecimentos, o GitHub Copilot é um fator de mudança total devido à utilidade potencial que pode fornecer aos programadores de produtos em todo o mundo.
Os copilotos de codificação e a IA generativa ajudam as equipas a obter enormes benefícios, como a aceleração do ciclo de vida do desenvolvimento de software para velocidades até agora inimagináveis. No entanto, o impacto da tecnologia na RPA e nos testes de software são duas das fronteiras mais interessantes desta tecnologia fantástica.
Neste artigo, vamos analisar a forma como os copilotos de codificação e a IA generativa alteraram os mundos dos testes de software e da RPA nos dias de hoje, antes de explorarmos o seu impacto futuro na tecnologia.
Copilotos e IA generativa em
desenvolvimento de software: Uma cartilha
A IA generativa e os copilotos de codificação são relativamente novos no panorama do desenvolvimento de software. Antes de discutirmos o seu impacto no espaço, vale a pena analisar os seus antecedentes e a forma como trabalham.
1. Autocodificadores alimentados por IA
Os modelos de grandes linguagens (LLM) registaram uma melhoria notável nos últimos anos. À medida que a dimensão dos conjuntos de dados e o poder computacional aumentaram exponencialmente, a qualidade dos resultados aumentou.
Há muitos sectores verticais que podem beneficiar dos LLM. Alguns dos temas mais abordados incluem a produção de texto, imagens, vídeos e outras formas de media. No entanto, embora estes casos de utilização sejam impressionantes, existem implicações para os programadores que são talvez muito mais interessantes.
Existem vários codificadores automáticos LLM no mercado. No entanto, o GitHub CoPilot é talvez o mais conhecido e o mais bem sucedido. Uma grande parte da razão é o facto de ser treinado no repositório GitHub. Tem acesso a milhões de exemplos de código-fonte aberto, melhores práticas, arquitetura de aplicações e muito mais para aprender, o que lhe permite fornecer resultados versáteis e de alta qualidade.
2. Como é que os co-pilotos de codificação funcionam?
Uma das formas mais fáceis de falar sobre como funcionam os copilotos de codificação é olhar para o produto líder no jogo, o GitHub CoPilot. A aplicação é baseada no modelo ChatGPT-3 da OpenAi.
Tal como o ChatGPT e LLMs semelhantes, o CoPilot baseia-se em milhares de milhões de parâmetros. Durante o desenvolvimento do ChatGPT-3, a OpenAI começou a criar um programa de codificação dedicado chamado OpenAI Codex. A Microsoft comprou acesso exclusivo ao produto.
No entanto, o mais importante aqui é o facto de a Microsoft já ser proprietária do GitHub. Se é um programador, sabe tudo sobre o GitHub. Basicamente, é uma plataforma baseada na Web utilizada para controlo de versões e colaboração em projectos de desenvolvimento de software. Treinaram o OpenAI Codex na biblioteca GitHub que continha milhões de linhas de código aberto e público.
O CoPilot utiliza a aprendizagem automática para encontrar padrões e relações entre linhas de código. Tal como o ChatGPT, analisa uma palavra ou linha e calcula a probabilidade do que virá a seguir com base num vasto repositório de dados históricos.
O poder dos copilotos de IA reside na sua capacidade de sugerir trechos de código à medida que os programadores editam. Pense nisto como um autocompletar super-carregado para a codificação. Quando os programadores introduzem uma linha de código, o LLM compara o início desse código com a sua enorme biblioteca de projectos anteriores. A partir daí, sugere linhas probabilísticas e novas linhas de código.
Os benefícios óbvios aqui são que os programadores podem poupar uma quantidade incrível de tempo através deste preenchimento automático. Aumenta a produtividade e, em muitos casos, a exatidão do código.
3. E a IA generativa para a codificação e o desenvolvimento?
Como se pode ver na história do CoPilot, a IA generativa e os copilotos têm raízes semelhantes. Ambas são tecnologias que utilizam a probabilidade estatística para fazer previsões sobre as necessidades dos utilizadores com base em informações imputadas.
No entanto, a grande diferença entre o software de co-pilotagem e a IA generativa é o facto de esta última se basear em pedidos. Em suma, isso significa que os utilizadores introduzem um conjunto de instruções escritas na máquina e esta produz conteúdos. Como qualquer pessoa que tenha utilizado o ChatGPT ou aplicações semelhantes sabe, este resultado pode ser apresentado sob a forma de texto, imagens, vídeo ou código.
Assim, embora os métodos que os codificadores utilizam para chegar à codificação automatizada sejam diferentes, podemos colocá-los sob a mesma designação de codificação automatizada ou generativa assistida por IA.
A evolução dos testes de software
Os testes de software são reactivos e estão em constante evolução. No espaço de algumas décadas, mudou e transformou-se para responder a novos requisitos e utilizar os avanços tecnológicos.
1. Testes manuais:
Os primeiros tempos dos testes de software envolviam testes manuais. Este tipo de testes era dispendioso e demorado, porque exigia que os especialistas em garantia de qualidade analisassem o software com um pente fino, desenvolvendo uma série de casos de teste, executando e registando os resultados, programando correcções e repetindo o processo.
Garantir que todos os cenários e situações possíveis fossem cobertos por esses testes era um grande desafio e, somado ao tempo e aos custos envolvidos, os testes manuais consumiam muitos recursos. Era também altamente suscetível a erros humanos, o que era amplificado por opções de distribuição limitadas, o que significava que quaisquer erros não descobertos eram difíceis de corrigir rapidamente.
2. Testes com guião:
Os testes com guião representaram um enorme passo em frente para a comunidade de garantia de qualidade. Em vez de analisar manualmente o código e os cenários de teste, os programadores puderam escrever programas que podiam testar o software automaticamente. A grande vantagem foi o facto de os testes se terem tornado mais eficientes e menos propensos a erros humanos. No entanto, para o conseguir, foi necessário um planeamento e uma codificação qualificados, precisos e demorados para garantir uma cobertura abrangente.
3. Automatização de testes:
A automatização dos testes foi a evolução seguinte dos testes. Ferramentas como o ZAPTEST conseguiram oferecer aos programadores todas as vantagens dos testes com script, mas com uma interface sem código. Mais uma vez, os benefícios significativos neste caso foram a poupança de tempo, testes reutilizáveis e adaptáveis, testes de IU e API e testes entre plataformas e dispositivos.
4. Testes baseados em dados:
Os testes baseados em dados foram a solução para o problema de testar software que processava vários conjuntos de dados. Mais uma vez, esta é uma forma de automatização de testes, mas este método envolve a criação de scripts de teste e a sua execução em conjuntos de dados atribuídos. Este tipo de teste permitiu que os programadores trabalhassem mais rapidamente, isolassem os testes e reduzissem o tempo de repetição dos casos de teste.
5. Testes de IA generativa:
Os testes com IA generativa são a mais recente inovação no domínio dos testes de software. Ao utilizar LLMs, as equipas de QA podem criar casos de teste e dados de teste que ajudam a acelerar o processo de teste. Estes casos de teste são altamente flexíveis e editáveis, o que ajuda os programadores a reutilizar e reorientar os testes e a aumentar consideravelmente o âmbito dos testes.
Utilização atual de co-pilotos e
IA generativa em testes de software e RPA
A IA generativa e os copilotos tiveram um grande impacto nos testes de software. No entanto, em vez de substituírem completamente os programadores, estas ferramentas ajudaram a aumentar os testadores. Em suma, ajudam os programadores a tornarem-se mais rápidos e mais eficientes e, em muitos casos, aumentam a qualidade dos testes.
O
Inquérito aos programadores do Stack Overflow de 2023
oferece algumas perspectivas sobre a utilização atual das ferramentas de IA na comunidade de desenvolvimento de software. Uma das partes mais interessantes do inquérito sugeria que, embora um pouco mais de metade dos programadores sugerissem estar interessados em ferramentas de IA para testes de software, menos de 3% diziam confiar nessas ferramentas. Além disso, apenas 1 em cada 4 pessoas sugeriu que estava atualmente a utilizar ferramentas de IA para testes de software.
O que é interessante nestas estatísticas é que mostram que a utilização de ferramentas de IA ainda não está generalizada e que os primeiros utilizadores ainda podem obter uma vantagem.
1. Casos de utilização de IA copiloto e generativa em testes de software e RPA
Os copilotos e a IA generativa estão a ter impacto em todas as áreas do desenvolvimento de software. Eis algumas das formas como a tecnologia pode ajudar nos testes de software e na RPA.
Análise dos requisitos
A análise de requisitos é uma parte fundamental do ciclo de vida do desenvolvimento de software. O processo envolve a compreensão dos requisitos das partes interessadas e das várias características necessárias para construir uma peça de software. A IA generativa pode ajudar as equipas na ideação, apresentando novas ideias e perspectivas.
Planeamento de testes
Assim que os requisitos de teste forem bem compreendidos, as equipas de garantia de qualidade precisam de dividir as coisas num calendário para garantir uma cobertura de teste adequada. Este tipo de trabalho requer conhecimentos e experiência, mas a IA generativa pode apoiar as equipas através de exemplos e guias, além de fazer recomendações de ferramentas específicas e melhores práticas para os seus requisitos específicos.
Criação de casos de teste
As equipas de controlo de qualidade podem utilizar os LLM para analisar o código, os requisitos do utilizador e as especificações do software para compreender as relações subjacentes ao sistema. Assim que a IA tiver uma noção das entradas e saídas e dos comportamentos esperados do software, pode começar a criar casos de teste que irão testar o software.
As vantagens vão para além da poupança de tempo e da codificação manual. A criação de casos de teste com IA também pode levar a uma cobertura mais abrangente, porque pode explorar áreas que os engenheiros de garantia de qualidade podem não considerar, levando a compilações mais fiáveis.
Encontrar e resolver erros
A aprendizagem automática permite aos profissionais de controlo de qualidade reduzir significativamente o tempo necessário para localizar e resolver os erros. Nos testes de software, muitos erros são fáceis de localizar. No entanto, em muitos cenários, trata-se de um processo laborioso e moroso. A IA generativa pode efetuar verificações numa fração do tempo dos trabalhadores manuais e ajudar a detetar até os erros mais persistentes. Além disso, estas ferramentas de IA também podem resolver os erros que identificam, poupando tempo infinito às equipas de controlo de qualidade.
Testes de IU
As ferramentas de IA generativa podem simular uma série de comportamentos e interacções dos utilizadores com sistemas de software. Os métodos podem dar às equipas de desenvolvimento a confiança de que a sua interface pode lidar com uma vasta gama de utilizações homem-computador. Além disso, a IA generativa também pode analisar dados e mapas de calor da interface do utilizador e fazer sugestões sobre como melhorar a IU e torná-la mais fácil de utilizar.
O futuro dos co-pilotos e a IA generativa
em Teste de software e RPA
Embora a utilização atual dos copilotos e da IA generativa na automatização do software já seja empolgante, o futuro é ainda mais promissor.
O futuro do copiloto e da IA generativa depende das melhorias que podem ser introduzidas nos produtos. Um estudo recente da Universidade de Purdue, intitulado Quem responde melhor? Uma análise aprofundada das respostas do ChatGPT e do Stack Overflow a perguntas sobre engenharia de software sublinha algumas das limitações dos modelos de IA generativa.
Os investigadores deram ao ChatGPT mais de 500 perguntas do Stack Overflow. A ferramenta de IA respondeu de forma incorrecta a mais de metade. Agora, é importante notar que um dos problemas mais significativos que os investigadores notaram foi que a IA falhou mais frequentemente porque não compreendeu corretamente as perguntas. Este pormenor sublinha a importância da engenharia de prontidão no âmbito da IA generativa.
Além disso, tanto a Google como a Amazon realizaram testes independentes este ano para analisar a qualidade das ferramentas de IA generativa num contexto de perguntas de entrevista. Em ambos os casos, a ferramenta conseguiu responder às perguntas do teste suficientemente bem para obter a posição, conforme relatado por
CNBC
e
Business Inside
respetivamente.
Assim, é evidente que estamos num ponto desta tecnologia em que o potencial existe, mas em que é necessário resolver algumas questões menores. A escala a que estas ferramentas melhoraram nos últimos anos dá-nos confiança de que atingirá o nível exigido e, provavelmente, antes do previsto.
Agora, podemos dar uma vista de olhos a algumas das áreas em que estas tecnologias terão impacto no futuro dos testes de desenvolvimento de software.
1. Hiperautomatização
A hiperautomação descreve um destino na evolução da empresa em que todos os processos que podem ser automatizados o serão. Trata-se de uma abordagem holística da produtividade que está altamente interligada.
Em termos de desenvolvimento de software, não é difícil imaginar um sistema centralizado com uma supervisão dos requisitos do processo empresarial. O sistema compreenderá e identificará as necessidades e as eficiências e identificará constantemente as áreas que precisam de ser melhoradas através da tecnologia.
À medida que as empresas evoluem, estes sistemas centralizados utilizarão a IA generativa para criar aplicações que resolvam automaticamente os estrangulamentos e as ineficiências ou, eventualmente, que empurrem determinados trabalhos para os engenheiros concluírem.
2. Conceber arquitecturas de software
Com dados suficientes, as ferramentas de IA podem compreender as melhores práticas de arquitetura de software e encontrar formas de melhorar estas concepções para obter a máxima eficiência. A aprendizagem automática consiste em encontrar padrões e relações que estão para além do alcance da mente humana.
Se as ferramentas de IA tiverem conhecimento suficiente de uma variedade de aplicações, podemos dar-lhes instruções para adaptarem arquitecturas anteriores a novos requisitos, conduzindo a construções mais eficientes ou mesmo a ideias que, de outra forma, não seriam consideradas.
3. Modernização de sistemas antigos
Embora nenhum software seja perfeito, há muitas ferramentas que continuam a fazer um excelente trabalho e estão tão profundamente integradas na infraestrutura de uma empresa que são difíceis de substituir. A adaptação destes sistemas pode ser uma tarefa árdua, especialmente se tiverem sido escritos utilizando um código de software que passou de moda.
No futuro, as ferramentas de IA generativa serão capazes de converter este código na linguagem do momento, permitindo às equipas manter os seus sistemas antigos e, em muitos casos, melhorá-los.
4. Melhorar o desenvolvimento com pouco código e sem código
Um dos desafios da automatização dos testes de software através de ferramentas de IA generativa que identificámos acima foi uma situação em que o programador não tinha os conhecimentos e a experiência necessários para verificar o resultado.
Os copilotos de IA ajudarão a aumentar as ferramentas de baixo código, fazendo melhores sugestões que conduzam a aplicações robustas. Ferramentas de teste sofisticadas permitirão que os operadores humanos tenham liberdade de criação, validando constantemente o seu trabalho e abrindo a porta a profissionais não técnicos para construírem as aplicações de que necessitam.
Benefícios da IA generativa nos testes de software
A utilização da IA generativa para testes de software tem muitas vantagens que a tornam uma opção atractiva para as equipas de desenvolvimento que pretendem trabalhar mais rapidamente, mas sem comprometer a qualidade.
1. Acelerar o ciclo de vida do desenvolvimento de software
Os programadores estão sob pressão constante para trabalharem longas horas para garantir que o software e as novas funcionalidades chegam ao mercado em tempo útil. Embora as metodologias Agile/DevOps tenham assegurado que o desenvolvimento é mais eficiente, ainda existem fases individuais de desenvolvimento que podem beneficiar de uma maior racionalização.
As ferramentas de IA generativa permitem que as equipas de teste abordem várias fases do SDLC, desde a criação de protótipos até ao teste da IU.
2. Deteção exaustiva de erros
Uma das aplicações mais poderosas da IA nos testes de software advém da capacidade da tecnologia para comparar grandes conjuntos de dados. As ferramentas de ML podem analisar vastos conjuntos de dados (incluindo código) para criar um repositório de informações e modelos esperados.
Quando os programadores submetem o código, podem compará-lo com estes modelos, que podem realçar cenários inesperados, dependências e vulnerabilidades, permitindo um melhor código ao longo de todo o processo de desenvolvimento.
3. Melhoria da cobertura dos testes
As ferramentas de aprendizagem automática são concebidas para analisar e compreender vastos conjuntos de dados. Quando aplicada aos testes de software, permite às equipas aumentar o âmbito dos seus testes de software. As vantagens não se limitam a eliminar o trabalho humano da equação para poupar dinheiro; a IA também conduz a um tipo de teste muito mais abrangente que permite uma melhor deteção de erros num conjunto complexo de cenários.
4. Redução de custos
Em comparação com a contratação de uma equipa de engenheiros de garantia de qualidade e a sua utilização para tarefas de teste de software repetitivas e morosas, a IA generativa e a RPA são mais rápidas e rentáveis.
À medida que o mundo do desenvolvimento de software se torna mais competitivo, é cada vez mais importante encontrar formas de fornecer produtos de qualidade e duradouros dentro do orçamento. As ferramentas de IA generativa e os co-pilotos podem reduzir a dependência dos engenheiros e permitir-lhes realizar um trabalho orientado para o valor e conduzir a construções menos inchadas.
As ferramentas de IA generativa significam o fim
de engenheiros de software humanos?
Apesar dos seus benefícios óbvios, qualquer ferramenta de automatização pode causar aos trabalhadores um nível de ansiedade em relação ao seu futuro. Embora esta seja uma reação normal, a velocidade e o âmbito da IA generativa significam que as preocupações são mais extensas do que o habitual. Embora estas ferramentas tenham a capacidade de automatizar muitos trabalhos, não podem efetuar todas as tarefas que os engenheiros de software fazem. Compreender as capacidades da tecnologia, bem como as suas limitações, é essencial para engenheiros e líderes.
A primeira coisa que as pessoas precisam de recordar é que as ferramentas de automatização de testes alimentadas por IA já existem no mercado há bastante tempo. No entanto, a facilidade de utilização da IA generativa permite-lhe uma maior flexibilidade.
Uma das primeiras coisas que temos de considerar é que a IA generativa funciona melhor com resultados que podem ser verificados. Este é um ponto fundamental. A natureza da formação dos LLMs significa que eles farão o seu melhor para lhe dar uma resposta, mesmo que isso ocasionalmente signifique “alucinar” factos, referências e argumentos.
Agora, se tiver conhecimentos suficientes de codificação, poderá ler e verificar qualquer texto que a IA generativa produza e detetar potenciais erros. Se for um programador cidadão que está a utilizar a IA generativa em vez de saber programar, não será tão capaz de detetar estes erros.
Por isso, nesta perspetiva, os engenheiros qualificados continuarão a ser uma parte essencial do ecossistema de desenvolvimento de software. Continuarão a ser obrigados a efetuar testes, tanto a nível de supervisão como a nível prático.
Outra limitação da IA generativa para os testes de software diz respeito aos testes móveis. Por exemplo, o ChatGPT é uma boa opção para testar as interfaces de utilizador de um sítio Web. No entanto, não tem acesso a diferentes dispositivos móveis. Com tantos aparelhos e modelos diferentes no mercado, fica atrás do atual software de automatização de testes, como o ZAPTEST. Este problema também não é de somenos importância. Mais de
metade de toda a utilização da Internet é feita através de telemóvel
e este número aumenta todos os anos.
Assim, embora a IA generativa venha a retirar muitas tarefas aos programadores, não tornará estes profissionais obsoletos sem grandes mudanças na infraestrutura de testes e na capacidade de verificar os resultados.
Considerações finais
Os testes de software e a RPA estão num caminho constante de melhoria. À medida que surgem novas tecnologias e métodos, ambas as disciplinas absorvem as melhores práticas para ajudar as equipas de garantia de qualidade a realizar testes mais rápidos e mais abrangentes por uma fração do preço dos testes manuais.
Embora a melhoria do âmbito dos testes e a redução dos erros humanos e dos custos sejam alguns dos benefícios mais óbvios dos testes baseados em IA, também ajudam as equipas a adotar uma abordagem de integração contínua e de pipelines de implementação (CI/CD).
Com as expectativas dos consumidores e a concorrência mais elevada do que nunca, a IA generativa oferece às equipas uma forma de fornecer testes rápidos e eficientes sem comprometer a qualidade.