Fale com especialistas

Snippet #1 Testmaster: o segredo para testes unitários rápidos com IA
Transcrição
Fernandinha: E está começando mais um snippet do Entre Chaves, trechos rápidos de conhecimento que vão fazer a diferença com seu dia a dia.
Lucas: Olá, meu nome é Lucas Villas Boas, sou arquiteto aqui na dti. Já estou na empresa há um pouco mais de seis anos e já apoiou em diversos tipos de clientes, tanto nacionais quanto internacionais, em projetos front-end, projetos de back-end, full-stack e em vários segmentos diferentes de clientes. Estou aqui hoje para falar um pouco sobre o desenvolvimento de software e os testes envolvidos nesse processo. Durante esse desenvolvimento de sistemas, seja o NSweb, desktop, Google ou qualquer tipo de software que a gente possa vir a fazer, há uma parte que é muito falada, tem muito material na internet, mas muitas vezes é difícil de entender o valor, que são sobre os testes automatizados. Temos os unitários, testes de função, testes de ponta a ponta, testes de carga, testes de estresse, tipo massa e diversos outros.
Mas hoje eu quero focar nos testes unitários. O nome do unitário vem exatamente da ideia de testar individualmente cada unidade do que forma o sistema, que nada mais é do que a forma dessas unidades. Esses testes visam isolar essas unidades e testá-las em um vácuo, ou seja, o teste vai cobrir apenas aquela unidade e qualquer outra unidade que interage com essa unidade não é levada em consideração. Quando a gente testa essas unidades individualmente, a gente consegue atingir dois objetivos primários. Primeiro, que é identificar e corrigir problemas prematuramente, ou seja, antes que um defeito no código se propague para as outras partes, é possível determinar a sua origem e já corrigi-la de antemão. E segundo, ao termo, todas ou a maioria das unidades que compõem o sistema cobertas por testes, o sistema com um todo será mais confiável.
O principal objetivo dos testes unitários é garantir que essas unidades e todos os fluxos e cenários que elas possam sofrer estejam cobertos. O que isso quer dizer? Quando a gente tem uma função, por exemplo, que soma dois valores, A e B, ela te retorna a soma desses dois valores. Eu quero garantir que, ao passar dois valores para esse teste, a minha resposta seja aquilo que eu espero. Isso me permite o quê? Quando eu vou evoluir essa função ou refatorar ela para cobrir algum cenário ou incrementar ela para considerar novas funcionalidades, o que ela já faz e já funciona e que já está em um ambiente produtivo, continua funcionando. Além disso, quando a gente está construído testes unitários, é muito importante que a gente saiba identificar todos os fluxos e cenários que essa nossa unidade que a gente quer testar, ela vai sofrer. Tanto cenário feliz que a utilização esperada do sistema, quanto cenários alternativos que são quando ela recebe entradas que não são as esperadas ou vai passar por cenários que não são aqueles cenários padrões como cenários de erros, cenários alternativos, etc. A gente precisa identificar todos os cenários para ter um teste unitário para cada um desses cenários. Com isso, a gente consegue garantir mais dois objetivos principais. O primeiro é quando a gente for refatorar o código, a gente vai ter muito mais segurança no que a gente está fazendo para garantir que o que já funcionava antes vai continuar funcionando. E ao mesmo passo, isso se aplica ao segundo ponto também, a evolução de um sistema. Quando a gente está modificando ali uma unidade, um conjunto de unidades, ao ter testes automatizados unitários, a gente consegue garantir que o que já funcionava vai continuar funcionando e que as novas formalidades que a gente adicionou, elas vão se comportar do jeito que a gente espera. A qualidade de um teste unitário se dá por algumas métricas diferentes, mas a principal delas é a cobertura. A cobertura de um teste unitário é a soma de todas as linhas e fluxos dentro dessas linhas de código que estão cobertas por cenários de teste unitário.
Se a gente tem dentro de um código várias segmentações que testa “se a entrada x for um valor y, a gente vai para esse cenário. Se for um valor z, a gente vai para esse outro cenário”. Através da cobertura, a gente consegue identificar o que está já incompassado nos nossos testes unitários e o que está faltando ainda. Agora, em relação à criação desses testes unitários, aqui na dti a gente está com diversas iniciativas que visam utilizar inteligência artificial, que é algo que tem estado muito em pauta nesses últimos dois anos, principalmente, para acelerar o desenvolvimento e entrega de sistemas e soluções de software. No caso específico, na frente de testes unitários, a gente tem uma iniciativa chamada Testmaster, que visa a utilização da inteligência artificial para exatamente criar ou auxiliar, acelerando bastante a criação dos testes unitários.
A inteligência artificial tem uma facilidade muito grande de ler o texto, entender e somarizar aquele texto. Um código nada mais é do que um texto estruturado para um segmento específico. Com isso, a inteligência artificial consegue ler um código, entender ele muito facilmente. Com isso, é possível a gente deferir para a inteligência artificial praticamente tudo do processo de criação dos testes unitários, porque ela vai conseguir ler o código, identificar todos os cenários, todas as possibilidades que esse código pode passar, todas as entradas, todas as saídas, todos os fluxos. A gente combina prompts customizados para cada cenário com algumas ferramentas que a gente desenvolveu internamente, que vão fornecer a inteligência artificial, tudo o que ela precisa para conseguir criar o teste unitário para aquele trecho de código que a gente tem como teste de código. Isso tudo de forma segura, garantindo a potencialidade de todo e qualquer código que a gente visa gerar os testes unitários e em ambiente que é isolado. Então, a gente tem segmentação dos projetos. Então, o código não tem chance de acabar aparecendo como teste unitário de outro código e vice e versa. Então, ao utilizar a inteligência artificial como acelerador no processo de construção de soluções que geram valor, nós conseguimos evoluir ainda a qualidade do nosso princípio mais importante e aumentar a nossa velocidade de entrega mais rápido possível. Então, é isso. Espero que tenham gostado. Se quiserem saber mais sobre esses iniciativos e tudo o que a gente faz aqui na dti, acesse o nosso site em www.dtdital.com.br ou acessem os links que vão estar na descrição. Um abraço.

Este é um conteúdo produzido em parceria com o dti evolve. Saiba mais em: https://dti.ag/conheca-dtievolve-EC
Os testes unitários são essenciais para garantir a qualidade e a segurança de um produto, mas existe uma maneira de acelerar esse processo? A resposta é sim, e quem trouxe a dica no episódio de hoje foi Lucas Vilas Boas, Arquiteto de Software na dti digital.
Ele apresenta a ferramenta Testmaster, utilizada na dti para acelerar essa fase dos testes unitários usando IA, sem comprometer a segurança. Dê o play e ouça agora!