Teste de Regressão: conheça a sua importância e benefícios no desenvolvimento de software
- Cloud e Infraestrutura
- Artigo
No contexto ágil de hoje, os testes de regressão automatizados representam tanto um desafio quanto uma oportunidade para as equipes de qualidade assegurarem a continuidade e a eficiência dos produtos de software. Este tipo de teste torna-se um candidato principal para automação devido à sua natureza repetitiva e ao tempo que consome, prometendo economia de recursos significativa e redução no tempo de execução dos testes.
Testes de regressão são amplamente reconhecidos na indústria de software como uma prática comum e essencial, especialmente em ambientes que adotam metodologias ágeis. Dada a sua importância na manutenção da qualidade e estabilidade do software ao longo do tempo, é razoável afirmar que uma grande porcentagem de empresas que desenvolvem software empregam algum teste desse tipo em seus processos de desenvolvimento.
Este texto visa explorar o que é, sua importância, ferramentas e os desafios enfrentados pelas equipes ao implementar testes de regressão automatizados em ambientes ágeis, além de discutir processos e etapas para uma implementação bem-sucedida. Através da compreensão desses desafios e da adoção de abordagens estratégicas para superá-los, as equipes podem melhorar a eficiência e a eficácia dos seus processos de teste, contribuindo para a entrega rápida e de alta qualidade de produtos de software.
O que é Teste de Regressão?
O teste de regressão é uma técnica de teste de software que visa verificar se alterações recentes no código, como novas funcionalidades, correções de bugs ou modificações, não afetaram adversamente o comportamento existente do software. O objetivo principal é garantir que as atualizações no software não introduzam novos defeitos em partes do sistema que anteriormente funcionavam corretamente.
Essa prática é crucial para manter a qualidade e a estabilidade do software ao longo do tempo, especialmente em ambientes de desenvolvimento ágil, onde as mudanças são frequentes e rápidas. O teste de regressão pode ser realizado manualmente, mas devido à sua natureza repetitiva e ao volume de trabalho envolvido, frequentemente é automatizado para aumentar a eficiência e a confiabilidade dos testes.
Quais são os tipos de Teste de Regressão?
Os testes de regressão podem ser classificados de acordo com sua abordagem e escopo. Aqui estão os principais tipos de teste de regressão:
Teste de Regressão Completo
Envolve a reexecução de todos os testes de regressão existentes no conjunto de testes. É o método mais abrangente, garantindo que todas as partes do sistema sejam verificadas após modificações. Contudo, pode ser bastante demorado e caro, especialmente em projetos grandes e complexos.
Teste de Regressão Seletivo
Nesta abordagem, apenas um subconjunto de testes é escolhido para ser reexecutado. Esses testes são selecionados com base em sua relevância para as mudanças feitas no software. Isso pode incluir testes que cobrem a funcionalidade alterada, testes para funcionalidades intimamente relacionadas, ou ambos. Esta é uma forma eficiente de realizar testes de regressão, economizando tempo e recursos.
Teste de Regressão por Priorização
Os testes são priorizados com base em vários critérios, como risco, importância da funcionalidade, ou frequência de falhas passadas. Testes com maior prioridade são executados primeiro. Isso ajuda a identificar os defeitos mais críticos mais cedo no processo de teste.
Teste de Regressão de Área Quente (Hotfix)
Este tipo de teste de regressão foca em áreas do software que são frequentemente sujeitas a mudanças ou que tiveram problemas no passado. Testes nessas áreas “quentes” são realizados com mais frequência para garantir a estabilidade.
Teste de Regressão Baseado em Componentes
Concentra-se em testar componentes específicos do sistema que foram modificados. Esse tipo de teste é útil quando as alterações no software são limitadas a componentes específicos, reduzindo o escopo dos testes necessários.
Teste de Regressão Incremental
Visa testar as alterações em um contexto incremental, ou seja, testa apenas as funcionalidades que foram adicionadas ou modificadas desde a última iteração de teste. Isso ajuda a reduzir o escopo dos testes a cada ciclo de desenvolvimento, tornando o processo mais gerenciável.
Cada um desses tipos de teste de regressão tem suas vantagens e desvantagens, e a escolha do tipo apropriado depende de vários fatores, incluindo o tamanho do projeto, a frequência das releases, os recursos disponíveis, e a criticidade das funcionalidades do software.
Importância de Testes de Regressão
O teste de regressão é fundamental no desenvolvimento de software por várias razões, garantindo a qualidade e estabilidade do produto ao longo de seu ciclo de vida. Aqui estão os principais pontos que destacam sua importância:
Garante a Estabilidade
Ao reexecutar testes em partes do software não alteradas, os testes de regressão garantem que modificações recentes não quebrem funcionalidades existentes. Isso ajuda a manter a estabilidade do sistema após cada nova release.
Identifica Efeitos Colaterais Indesejados
Alterações no código podem ter efeitos colaterais inesperados em áreas aparentemente não relacionadas. Os testes de regressão ajudam a identificar esses efeitos indesejados precocemente, antes que o software seja lançado.
Aumenta a Confiança
A capacidade de verificar consistentemente que as alterações não introduzem novos bugs aumenta a confiança na qualidade do software, tanto para a equipe de desenvolvimento quanto para os stakeholders e usuários finais.
Facilita a Manutenção
Ao assegurar que as modificações não afetam adversamente o sistema existente, os testes de regressão tornam a manutenção do software mais fácil e menos arriscada, especialmente em sistemas complexos e em evolução contínua.
Suporta a Integração Contínua
Em ambientes que adotam práticas de integração contínua (CI), os testes de regressão automatizados são essenciais. Eles permitem a execução rápida e frequente de testes a cada alteração no código, contribuindo para um ciclo de desenvolvimento mais ágil e eficiente.
Melhora a Experiência do Usuário
Ao evitar a regressão, ou seja, a deterioração da funcionalidade existente, os testes de regressão contribuem diretamente para uma experiência do usuário mais estável e confiável, preservando a funcionalidade e o desempenho do software.
Reduz Custos a Longo Prazo
Embora possa haver um custo inicial para implementar testes de regressão, especialmente quando automatizados, eles podem significativamente reduzir os custos a longo prazo. Identificar e corrigir bugs cedo no processo de desenvolvimento é geralmente muito mais barato do que fazer correções em estágios posteriores ou após o lançamento do produto.
Apoia a Metodologia Ágil
Os testes de regressão são particularmente importantes em ambientes ágeis, onde as mudanças são frequentes e rápidas. Eles permitem que as equipes mantenham ciclos de release curtos e contínuos, sem comprometer a qualidade do software.
Desafios e implementação do Teste de Regressão
O processo de implementação dos testes de regressão está sujeito a uma variedade de erros, que podem minar sua eficácia e eficiência. Um dos erros mais comuns é a cobertura insuficiente, onde nem todas as funcionalidades do sistema são adequadamente testadas, deixando brechas para regressões não detectadas. Esse problema é frequentemente acompanhado pela falha em atualizar os testes de regressão para refletir mudanças recentes no software, o que pode resultar em testes desatualizados que não conseguem capturar problemas introduzidos por novas alterações.
A falta de automatização dos testes de regressão também representa um desafio, tornando o processo tedioso e mais suscetível a erros humanos, além de prolongar desnecessariamente o ciclo de desenvolvimento. Da mesma forma, a presença de testes ineficientes ou redundantes pode sobrecarregar o processo de teste sem adicionar valor, atrasando ainda mais o desenvolvimento e potencialmente obscurecendo problemas reais. Outro erro comum é a gestão inadequada de dependências externas nos testes, que pode levar a falhas inesperadas e resultados não confiáveis.
Além disso, a interpretação errada dos resultados dos testes de regressão, seja por negligenciar falhas ou por interpretar erroneamente os sucessos e fracassos, pode permitir que bugs prejudiciais se infiltrem no sistema. A ausência de testes negativos, que verificam como o sistema lida com entradas inválidas ou condições inesperadas, pode deixar o software vulnerável a erros não antecipados. Por fim, uma comunicação inadequada sobre a importância e os resultados dos testes de regressão pode levar a um comprometimento no engajamento da equipe e, consequentemente, na qualidade do produto final.
Para evitar esses erros, é crucial manter uma atualização constante e uma cobertura ampla nos testes de regressão, bem como investir na sua automatização sempre que possível. A eficiência e relevância dos testes devem ser monitoradas para evitar redundâncias e ineficiências. Gerenciar cuidadosamente as dependências externas, interpretar corretamente os resultados dos testes, incluir testes negativos e manter uma comunicação efetiva dentro da equipe são práticas que podem melhorar a eficácia dos testes de regressão.
A fim de evitar essas falhas, separamos as principais etapas para uma implementação de sucesso nos teste de regressão:
1. Planejamento e Análise
- Identificação de Requisitos: Comece com uma análise cuidadosa dos requisitos do software, incluindo novas funcionalidades, mudanças e correções de bugs.
- Avaliação de Risco: Realize uma avaliação de risco para identificar áreas do software que são mais prováveis de serem afetadas pelas mudanças.
- Seleção de Casos de Teste: Selecione os casos de teste adequados para o teste de regressão, com base na análise de impacto das mudanças. Isso pode incluir casos de teste específicos para novas funcionalidades, bem como casos de teste existentes que cobrem funcionalidades que podem ser afetadas indiretamente.
2. Preparação
- Ambiente de Teste: Configure um ambiente de teste que simule o ambiente de produção o mais próximo possível, incluindo dados de teste relevantes.
- Automação de Testes: Avalie quais casos de teste podem ser automatizados para melhorar a eficiência. Desenvolva scripts de teste automatizados para esses casos.
3. Execução
- Execução Manual vs. Automatizada: Execute os casos de teste selecionados, utilizando automação sempre que possível para aumentar a velocidade e a consistência. Para casos de teste que não podem ser automatizados, a execução manual será necessária.
- Monitoramento e Registro: Monitore a execução dos testes cuidadosamente e registre todos os resultados dos testes, incluindo quaisquer falhas ou comportamentos inesperados.
4. Análise dos Resultados
- Revisão dos Resultados dos Testes: Analise os resultados dos testes para identificar qualquer regressão ou novos defeitos introduzidos pelas mudanças no software.
- Priorização de Bugs: Priorize os bugs encontrados com base em seu impacto no funcionamento do software e na experiência do usuário.
5. Correção e Re-teste
- Correção de Bugs: Encaminhe os bugs identificados para a equipe de desenvolvimento para correção.
- Re-teste: Após as correções, re-execute os testes relevantes para verificar que os bugs foram corretamente corrigidos e que não foram introduzidos novos problemas.
6. Relatório e Feedback
- Documentação: Documente o processo de teste, incluindo os casos de teste executados, os resultados obtidos e qualquer outro achado relevante.
- Feedback para as Equipes: Comunique os resultados dos testes às equipes de desenvolvimento e stakeholders, fornecendo feedback claro e acionável.
7. Atualização Contínua
- Atualização de Casos de Teste: Atualize regularmente o conjunto de testes de regressão para refletir novas funcionalidades, mudanças no software e aprendizados obtidos de ciclos de teste anteriores.
- Melhoria Contínua: Revise e refine o processo de teste de regressão com base no feedback e nas experiências para melhorar a eficácia e a eficiência dos testes ao longo do tempo.
Implementar um processo de teste de regressão estruturado e iterativo como este não apenas ajuda a garantir a qualidade do software, mas também suporta um desenvolvimento mais ágil e responsivo às mudanças.
Ferramentas para Teste de Regressão
As ferramentas de teste de regressão são essenciais para automatizar e gerenciar os testes repetitivos. A escolha de uma ferramenta de teste de regressão depende de vários fatores, incluindo a linguagem de programação do software, o ambiente de desenvolvimento, a facilidade de uso da ferramenta e, claro, o orçamento disponível. Abaixo estão algumas das ferramentas de teste de regressão mais utilizadas, juntamente com as razões de sua popularidade:
1. Selenium
- Selenium é uma das ferramentas de automação de testes mais populares para aplicações web. Sua popularidade deriva da sua flexibilidade em suportar várias linguagens de programação (como Java, C#, Python, Ruby) e navegadores. Além disso, é uma ferramenta de código aberto, o que a torna acessível para equipes com orçamentos limitados.
2. QTP/UFT (Unified Functional Testing)
- Desenvolvido pela Micro Focus, o UFT é conhecido por sua capacidade de suportar uma ampla gama de aplicações para automação de testes. Oferece uma abordagem integrada para testes de API, web, e desktop, o que o torna uma escolha atraente para empresas que buscam uma solução de teste abrangente.
3. TestComplete
- TestComplete é uma ferramenta de automação de testes da SmartBear que oferece suporte para testes de GUI em aplicações web, mobile e desktop. É valorizada por sua interface de usuário visual, que facilita a criação de scripts de teste sem a necessidade de uma profunda experiência em codificação.
4. Ranorex
- Ranorex é uma ferramenta abrangente que oferece suporte para testes de aplicativos web, desktop e mobile. É conhecida por sua interface de usuário amigável e por fornecer recursos avançados para automação de testes, como reconhecimento de objetos robusto e integração com outras ferramentas e frameworks.
5. Cypress
- Cypress é uma ferramenta de teste de front-end moderna e de código aberto especificamente construída para a web. Diferentemente do Selenium, que é uma ferramenta baseada em servidor e opera fora do navegador, Cypress executa no mesmo loop de execução que a aplicação. Isso proporciona testes mais rápidos e confiáveis, com recursos como espera automática para elementos e comandos de ação.
6. JUnit (para Java) e NUnit (para .NET)
- Estas são frameworks de teste de unidade que podem ser utilizados para testes de regressão, especialmente quando integrados a práticas de desenvolvimento orientadas a testes (TDD). São populares devido à sua integração fácil com sistemas de build e ferramentas de integração contínua, como Jenkins e TeamCity, permitindo a automação dos testes de regressão.
A escolha da ferramenta certa depende das necessidades específicas do projeto, da infraestrutura existente e da expertise da equipe de desenvolvimento. Uma boa prática é avaliar várias ferramentas, considerando a curva de aprendizado, compatibilidade, suporte comunitário e custos, para encontrar a que melhor se adapta às necessidades de teste de regressão do projeto.
Teste de Regressão X Teste Unitários
Os Testes de Regressão e os Testes Unitários são componentes fundamentais do teste de software, cada um desempenhando papéis distintos no processo de desenvolvimento. Embora ambos sejam essenciais para a qualidade do software, eles têm objetivos, escopos e implementações diferentes. Aqui estão as principais diferenças entre Teste de Regressão e Teste Unitário:
Objetivo
- Teste de Regressão: O objetivo principal é verificar se as mudanças recentes no código não afetaram negativamente as funcionalidades existentes. Ele busca identificar regressões, ou seja, erros que foram introduzidos em funcionalidades que anteriormente funcionavam corretamente.
- Teste Unitário: Visa testar a menor parte do código de forma isolada (tipicamente métodos ou funções) para garantir que eles funcionem conforme esperado. O foco está na corretude da lógica de programação em um nível granular.
Escopo
- Teste de Regressão: Tem um escopo mais amplo, podendo abranger o sistema inteiro ou suas partes substanciais. É aplicável a várias camadas do software, desde a interface do usuário até a lógica de negócios e a integração de sistemas.
- Teste Unitário: Concentra-se em componentes específicos do software, testando cada unidade de forma isolada do restante do sistema. É o nível mais básico de teste.
Implementação
- Teste de Regressão: Geralmente é automatizado, uma vez que precisa ser executado frequentemente para verificar a estabilidade do sistema após cada mudança. Pode envolver a reutilização de testes unitários e de outros testes mais abrangentes.
- Teste Unitário: É altamente automatizado e realizado pelos desenvolvedores para validar cada unidade de código que eles criam. Requer a criação de casos de teste específicos para cada função ou método.
Frequência
- Teste de Regressão: Executado após mudanças no código, novas implementações, correções de bugs ou atualizações de software para garantir que o restante do sistema permaneça intacto. É parte integrante de ciclos de entrega contínua e integração contínua.
- Teste Unitário: Realizado frequentemente durante a fase de desenvolvimento, idealmente de forma contínua pelos desenvolvedores à medida que eles escrevem e modificam o código.
Responsabilidade
- Teste de Regressão: Embora possa ser iniciado pelos desenvolvedores, frequentemente envolve equipes de controle de qualidade que planejam e executam esses testes em contextos mais amplos.
- Teste Unitário: Primariamente responsabilidade dos desenvolvedores, que escrevem e executam esses testes para validar a funcionalidade de suas próprias unidades de código antes de integrá-las ao repositório principal.
Ambos os Testes de Regressão e Unitários se complementam ao oferecer uma abordagem em camadas para testar, desde o nível mais fundamental de código até o funcionamento geral do sistema após alterações.
Automação de Testes de Regressão
O processo de automação de Testes de Regressão permite que as equipes de desenvolvimento e QA (Garantia de Qualidade) executem uma grande quantidade de testes em um curto período de tempo, aumentando a eficiência e a cobertura do teste em comparação com a execução manual.
Se compararmos os testes manuais com os automatizados, podemos afirmar que não se trata exatamente de uma questão de ser “melhor” ou “pior”, mas sim de qual método é mais adequado para as necessidades específicas de um projeto. Os testes manuais permitem uma observação mais detalhada e intuitiva, que pode ser crucial para identificar problemas sutis de usabilidade ou experiência do usuário. No entanto, são mais lentos para executar e mais propensos a inconsistências devido a fatores humanos.
A automação de testes de regressão, por outro lado, oferece velocidade, consistência e a possibilidade de realizar testes extensivos que seriam impraticáveis manualmente. No entanto, requer investimento inicial significativo.
Na prática, a maioria dos projetos de software se beneficia de uma abordagem híbrida, onde a automação de testes de regressão é usada para cobrir casos de teste repetitivos e de grande volume, enquanto os testes manuais são empregados para cenários mais complexos e para avaliar aspectos da aplicação que são difíceis de automatizar. Essa combinação aproveita os pontos fortes de cada método, maximizando a eficiência e a eficácia do processo de teste.
Separamos abaixo alguns vantagens e desvantagens dos testes automatizados, confira:
Vantagens da Automação de Teste de Regressão
- Confiabilidade na entrada de um sistema em produção: Testes automatizados mudaram a forma com que passamos a encarar um ‘go-live’. De ‘momento extremamente crítico e estressante’ para apenas uma fase normal no nosso processo de entrega;
- Redução de bugs: A Objective diminuiu em mais de 80% a incidência de bugs. Bugs críticos passaram a ser extremamente raros. Bugs reincidentes simplesmente desapareceram;
- Prevenção de erros por terceiros: Em cenários com comunicação com outros sistemas, prevenimos a incidência de falhas causadas pelos demais, bem como erros de interface de nosso próprio sistema. Gera confiabilidade aos outros de forma a facilitar bastante a análise de integrações;
- Diminuição de falhas de análise: Ao pensar em testes automatizados desde a concepção do software, também reduz a incidência de erros de análise pois obriga um pensamento mais estruturado e concreto na expectativa dos resultados;
- Transparência na atuação dos problemas: Testes automatizados deixam os cenários mais claros e diretos. Bons testes são capazes de validar cada aspecto de um desenvolvimento e permitem melhorias e correções pontuais;
- Redução do tempo de desenvolvimento: Por mais contraditório que seja, desenvolver com testes automatizados é muito mais rápido que sem eles. Basta a mudança de cultura e uso cotidiano pela equipe;
- Refactoring: Débito técnico é algo que pode ser atacado sem receios. Percebemos isso quando passamos a utilizar os testes automatizados em larga escala: as pessoas simplesmente não tinham mais medo de melhorar o seu código;
- Permite validação de alternativas: Com testes automatizados a análise de ‘go/no go’ é muito mais assertiva. Rapidamente conseguimos evidenciar impactos no sistema e validar se o investimento é vantajoso ou não em termos técnicos,
- Treinamento e documentação: A partir da cobertura do sistema por testes automatizados percebemos que na realidade os scripts criados também passam a serem usados como forma de explicarmos nosso sistema para novos integrantes da equipe e mesmo novos clientes. É uma documentação viva e sempre atualizada com as funcionalidades que temos em vigência no nosso software.
Desvantagens da Automação de Teste de Regressão
- Custo Inicial e Manutenção: A criação de testes automatizados requer tempo e recursos iniciais significativos. Além disso, os testes precisam ser mantidos e atualizados à medida que o aplicativo muda, o que pode consumir recursos.
- Curva de Aprendizado: As equipes podem precisar de tempo para aprender a usar eficazmente as ferramentas de automação de teste e desenvolver testes eficazes.
- Limitações: Alguns aspectos do software, especialmente os relacionados à experiência do usuário ou a cenários complexos de interação, podem ser difíceis de testar automaticamente e ainda podem requerer testes manuais.
A Objective é pioneira em automação de testes e acredita que apenas de um investimento maior no início, as vantagens sobressaem. “Apesar de termos investimentos maiores de arquitetura, os ganhos foram muitíssimos recompensadores, realizando um simples cálculo de custos, conseguimos enxergar que na realidade estávamos desperdiçando tempo em tarefas repetitivas e que o mais sensato era automatizar estas tarefas através da automação do processo de testes”, afirma Marcelo Walter, Agile Chapter Leader da Objective.
Case de Sucesso
Várias empresas de tecnologia de ponta e organizações em diversos setores têm relatado sucesso ao adotar testes de regressão automatizados, melhorando a qualidade de seus produtos e acelerando seus ciclos de lançamento. Enquanto detalhes específicos sobre os processos internos de muitas empresas podem não estar publicamente disponíveis, algumas são frequentemente citadas como estudos de caso na literatura de engenharia de software e apresentações de conferências. Aqui estão exemplos notáveis:
A Google é conhecida por sua abordagem rigorosa em testes automatizados, incluindo testes de regressão. Com um imenso código-base e um ambiente de desenvolvimento que encoraja mudanças rápidas e inovação contínua, a Google utiliza um extenso conjunto de ferramentas de automação de testes para garantir a estabilidade de seus produtos. A automação permite que a empresa gerencie efetivamente a qualidade de vastos projetos de software, como o Google Chrome e o sistema operacional Android, que exigem a integração de contribuições de milhares de desenvolvedores.
O Facebook enfrenta o desafio de desenvolver e manter um dos maiores e mais dinâmicos websites do mundo. A empresa utiliza testes de regressão automatizados como parte de sua estratégia de CI/CD para garantir que novas funcionalidades e correções possam ser implementadas rapidamente sem afetar a experiência do usuário. A automação de testes é crucial para gerenciar a frequência e a escala das atualizações de software necessárias para suportar sua base global de usuários.
Netflix
A Netflix é outro exemplo de uma empresa que se beneficia enormemente da automação de testes de regressão. Dada a complexidade de seu serviço de streaming, que deve funcionar em uma vasta gama de dispositivos e sob condições de rede variáveis, a Netflix utiliza uma abordagem de teste automatizado chamada “Chaos Monkey”. Essa abordagem é parte de uma suíte de ferramentas conhecida como o Simian Army, que testa proativamente a resiliência e a robustez da infraestrutura da Netflix em produção.
Spotify
Spotify, o serviço de streaming de música, emprega uma abordagem ágil e focada em automação para testes de software, incluindo testes de regressão. A empresa adota práticas de integração contínua e entrega contínua, utilizando testes automatizados para assegurar que novas funcionalidades e melhorias não interrompam a experiência do usuário. Isso é particularmente importante para o Spotify, dada a sua rápida iteração de produtos e a necessidade de suportar uma ampla gama de dispositivos e plataformas.
Além desses exemplos, a própria Objective utiliza testes automatizados no NG Billing, uma plataforma de faturamento recorrente, que mostra o sucesso dos testes automatizados em números: temos um build estável a cada commit o qual dispara a execução de mais de 40.000 scripts de testes funcionais. E, tudo isso, se repetindo dezenas de vezes ao longo de um único dia.
Esses exemplos ilustram como a automação de testes de regressão pode desempenhar um papel fundamental na manutenção da qualidade e na aceleração do desenvolvimento em empresas que operam em grande escala e com altas expectativas de qualidade e desempenho. A adoção de testes automatizados, juntamente com práticas de desenvolvimento ágil e integração contínua, permite que essas organizações inovem rapidamente enquanto mantêm a confiança na estabilidade e na confiabilidade de seus produtos.
Mas para isso, é necessário ter uma implementação de sucesso e acompanhamento. Uma parceria com uma consultoria especializada não só ajuda a superar os desafios técnicos e operacionais da implementação de testes de regressão, mas também alinha os esforços de teste com os objetivos de negócios da empresa. Ao fazê-lo, as organizações podem não só manter a qualidade e a estabilidade do software em ambientes de desenvolvimento dinâmicos, mas também acelerar o time-to-market de novas funcionalidades e melhorias, mantendo a satisfação do cliente e a vantagem competitiva no mercado. Fale com nossos especialistas e veja como a Objective pode ser sua parceira para trazer Teste de Regressão na sua empresa.