paint-brush
Análise de impacto de teste - o que é, como testá-la e tudo mais que você precisa saberpor@launchable
11,328 leituras
11,328 leituras

Análise de impacto de teste - o que é, como testá-la e tudo mais que você precisa saber

por Launchable7m2023/02/15
Read on Terminal Reader

Muito longo; Para ler

A análise de impacto de teste pode ajudar a acelerar os ciclos de teste, mas se não for gerenciada adequadamente, pode se tornar indisciplinada. Aprenda a utilizar este método de forma eficaz aqui.
featured image - Análise de impacto de teste - o que é, como testá-la e tudo mais que você precisa saber
Launchable HackerNoon profile picture

Você não está sozinho se sua organização avançou a toda velocidade em sua estratégia de DevOps nos últimos cinco anos. Três quartos das organizações adotaram uma abordagem DevOps - um número que mais que dobrou nos últimos cinco anos.


Apesar do crescimento explosivo em DevOps, apenas 10% dos entrevistados da Harvard Business Review Survey descrevem seus negócios como “muito bem-sucedidos no desenvolvimento e implantação rápida de software”.


A transformação de DevOps requer inicialização e implantação mais rápidas, mas o aumento da frequência de compilações resulta em mais testes e causa gargalos de desenvolvimento.


Para equipes em uma posição em que ciclos de teste lentos estão bloqueando o desenvolvimento rápido, a análise de impacto de teste é uma forma de acelerar o ciclo de desenvolvimento executando apenas os testes relevantes para o código-fonte alterado.

O que é análise de impacto de teste?

A análise de impacto de teste é uma maneira de acelerar o teste de software executando apenas os testes que importam para um conjunto de alterações de código. A realização da análise de impacto do teste permite que as equipes acelerem seu ciclo de desenvolvimento e implantação, reduzindo a sobrecarga de envio de uma mudança.


Tradicionalmente, a análise de impacto no teste de software geralmente depende da análise estática do código-fonte para criar gráficos de dependência entre o código e os testes.


Se você não tiver acesso a uma ferramenta ou biblioteca projetada especificamente para análise de impacto de teste, poderá rastrear manualmente as alterações em sua base de código e usar essas informações para determinar quais testes provavelmente serão afetados.


Por exemplo, você pode manter uma lista dos testes associados a cada módulo ou componente em seu sistema e atualizar essa lista à medida que faz alterações.

Como executar a análise de impacto do teste

Para executar manualmente a análise de impacto do teste, você executa cada teste e cria um mapa de qual código cada teste exercita. Depois de criar o mapa, você pode escrever um pequeno programa que é executado toda vez que um desenvolvedor envia um código.


O programa revisa os arquivos modificados e procura quais testes você precisa executar para a mudança.


Você precisa atualizar regularmente o mapa para ter um gráfico de dependência preciso à medida que o código muda com o tempo.

Exemplo prático de código Python: análise de impacto de teste manual

O trecho de código abaixo mapeia os nomes dos testes para os componentes aos quais eles estão associados. Neste exemplo, temos três módulos:


  • Conecte-se
  • Criação de conta
  • Redefinição de senha


Para cada componente modificado, adicione os testes a uma lista que podemos passar para o framework de execução de testes.


 # Define a dictionary that maps test names to the modules or components they are testing tests_by_component = { "test_login": ["login_module"], "test_account_creation": ["account_creation_module"], "test_password_reset": ["password_reset_module"] } # Define a list of the components that have been modified # This should be dynamically generated based on the code changes. modified_components = ["login_module"] # Determine which tests are likely to be affected by the changes affected_tests = [] for test, components in tests_by_component.items(): for component in components: if component in modified_components: affected_tests.append(test) # Now, we can pass the affected tests to our test harness. print(affected_tests) # Output: ["test_login"]


Benefícios e desafios da análise de impacto de teste

Quando feita de forma eficiente, a análise de impacto de teste vem com uma série de benefícios, incluindo:


  • Reduzindo a quantidade de tempo gasto em novos testes


  • Melhorando a eficiência geral do processo de teste


A análise manual do impacto do teste de software pode ser difícil de acertar. Quer seu projeto seja um pequeno microsserviço ou um monólito gigante, a quantidade de dados de teste com os quais você precisa trabalhar pode aumentar rapidamente.


A análise de teste manual rapidamente se torna pesada e ainda mais desafiadora à medida que os desenvolvedores adicionam novos recursos e refatoram o código ao longo do tempo.


Para cada linha de código adicionada, você precisa determinar os possíveis impactos e quais testes são relevantes para aquela linha de código. Muitas equipes de desenvolvimento relatam que selecionar os testes certos exige muito trabalho para ser executado em escala .

Teste de software em uma organização em crescimento: o estado comum dos testes

Vamos percorrer um cenário muito familiar - uma equipe de desenvolvimento de software em uma startup de tecnologia de médio porte teve um crescimento explosivo nos últimos três anos.


Eles alcançaram sua Série C em financiamento de capital de risco e usaram a injeção de dinheiro para contratar desenvolvedores para criar novos recursos rapidamente. A empresa usa um modelo ágil e centrado no DevOps e se orgulha de um conjunto robusto de testes .

Para onde vamos daqui?

A rápida expansão da empresa vem com dores crescentes para a equipe de desenvolvimento. O influxo de novos recursos significa um influxo de novos testes e alterações importantes, o que, por sua vez, causa falhas nos testes e longos tempos de execução.


Ninguém na startup confia mais que as falhas são legítimas, então os desenvolvedores pressionam repetidamente o botão “reexecutar” até que os testes passem. Eles mesclam as alterações de qualquer maneira quando não conseguem que os testes sejam bem-sucedidos e assumem que o problema está no teste, não no código.


Os desenvolvedores desativam os testes que demoram muito ou não parecem relevantes para o código - eles têm um trabalho a fazer e começaram a ver o teste de software como uma barreira para concluir suas tarefas.


Os desenvolvedores estão em um cenário em que não confiam mais nos testes e os desativam ou os ignoram arbitrariamente - basicamente se envolvendo em sua própria versão arriscada de seleção manual de testes.


A equipe de engenharia está começando a se preocupar que esse estado de coisas seja insustentável.


  • O que acontece se alguém mesclar código quebrado porque ignorou o teste que teria detectado o problema?


  • Quanto dinheiro a equipe está gastando em recursos de nuvem para reexecutar continuamente testes inconsistentes que acabam ignorando?


  • Quanto tempo eles estão perdendo esperando a execução dos testes?


O chefe de engenharia da startup decide que é hora de se antecipar à dívida técnica do DevOps antes que ela cause um incidente dispendioso.


Em vez da análise de impacto de teste ad hoc conduzida por desenvolvedores que tentam acelerar seu fluxo de trabalho, eles descobrirão como escolher os testes que importam para as alterações de código.

Análise avançada de impacto de teste com seleção preditiva de teste

Predictive Test Selection é um ramo da análise de impacto de teste que usa dados para prever quais testes seu sistema de CI precisa executar com base em resultados de teste históricos e alterações de código.


O Launchable está democratizando a abordagem Predictive Test Selection para que esteja disponível para equipes de todos os tamanhos com o apertar de um botão.


A seleção preditiva de teste do Launchable resolve a análise de impacto de teste, aproveitando o poder do aprendizado de máquina para simplificar o desenvolvimento de software. A seleção preditiva de testes usa inteligência baseada em dados para determinar quais testes são mais adequados para cada tipo de alteração.


Você pode reduzir o número de execuções de teste e acelerar o tempo de entrega com menos desperdício de recursos.


Na ausência dessa prática, as equipes precisam criar manualmente subconjuntos de " testes de fumaça " ou paralelizar seus testes.


No cenário anterior, a equipe de desenvolvimento da startup poderia se beneficiar da Seleção Preditiva de Testes. Seus desenvolvedores podem se concentrar em fornecer os recursos mais importantes, acelerar o fluxo de trabalho e confiar no conjunto de testes novamente.

Amostra prática de código Python: seleção de teste preditivo com Launchable e Pytest

Com o Launchable, você não precisa adivinhar quais testes são executados e atualizar constantemente seu conjunto de análise de impacto de teste. Aqui está um exemplo Python de como o Launchable pode funcionar com a estrutura Pytest .

Configuração e execução do Pytest com Launchable

  1. Instale o pytest-launchable em seu ambiente com pip3 install pytest-launchable


  2. Gere um arquivo de configuração inicializável executando launchable-config --create .


  3. Gere uma chave de API inicializável em https://app.launchableinc.com/


    1. Defina-o como a variável de ambiente LAUNCHABLE_TOKEN na máquina que executará os testes.


  4. No diretório que contém seu arquivo de configuração Launchable, execute pytest --launchable <your-pytest-project>


Seus resultados do pytest serão relatados ao Launchable. Launchable então começa a treinar um modelo de aprendizado de máquina em seus resultados de teste ao longo do tempo. O modelo otimiza quais testes têm maior probabilidade de serem úteis no menor tempo de teste.

Considerações finais sobre análise de impacto de teste, seleção preditiva de teste e como tornar seu pipeline orientado por dados

Com a seleção preditiva de teste orientada por ML da Launchable, as equipes normalmente observam uma redução de 60 a 80% nos tempos de teste sem afetar a qualidade .


Os principais motivos pelos quais as organizações escolhem o recurso Predictive Selection do Launchable são:


  • Economize tempo do desenvolvedor


  • Reduza os gastos com infraestrutura


  • Código de envio mais rápido


Veja como os engenheiros de todos os setores estão tendo sucesso com o Launchable com esses estudos de caso . A análise de impacto de teste é uma ferramenta essencial para melhorar a eficiência do processo de teste. No entanto, a análise manual ou estática pode ser incômoda e pode não agregar valor.


A implementação adequada da análise de impacto do teste com a seleção preditiva de teste pode economizar tempo e melhorar a qualidade do teste tornando seu pipeline mais orientado por dados.


O Launchable se integra perfeitamente ao seu CI, independentemente da frequência de confirmação ou do número de ramificações do Git que você possui. Ele oferece suporte a todos os aplicativos e idiomas, e as equipes relatam uma redução de até 90% nos tempos de teste sem nenhum impacto na qualidade.