Método de divisão bissecional em testes

Conteúdo



Às vezes, os próprios erros nos encontram. Então, empurramos uma grande linha de dados - e o sistema travou. É por causa de 1 milhão de caracteres que caíram? Ou ela não gostou de uma em particular?

Ou o arquivo foi carregado no sistema e travou. Porque Devido ao nome, extensão, dados internos ou tamanhos? Você pode enviar a localização para o desenvolvedor, deixar que ele pense no que há de ruim no arquivo. Mas muitas vezes você pode encontrar o motivo e descrever o problema com mais precisão.

Se você encontrar os dados mínimos para reproduzir, então:

  • Você economizará tempo para o desenvolvedor - ele não precisará se conectar ao banco de testes, carregar o arquivo e estréia
  • O gerente poderá avaliar facilmente a prioridade da tarefa - é necessário corrigir com urgência ou o bug pode esperar? Embora o nome "alguns arquivos caiam, xs why" é difícil de executar ...
  • Uma descrição do bug para entender a causa da queda também será beneficiada.

Como encontrar os dados mínimos para reproduzir um bug? Se houver dicas nos logs, aplique-as. Se não houver pistas, o melhor método é o método de divisão bissecional (também conhecido como método de "bissecção" ou "dicotomia").

Descrição do método


O método é usado para encontrar o local exato da queda:

  1. Pegue um pacote caindo de dados.
  2. Quebre ao meio.
  3. Verifique metade 1

    • Se ele caiu, o problema está aí. Trabalhamos mais com ela.
    • Se não cair → verifique a metade 2.
  4. Repita as etapas 1 a 3 até que um valor em queda permaneça.



O método permite que você localize rapidamente o problema, principalmente se for feito de forma programática. Os desenvolvedores integram esses mecanismos ao processamento de dados. E se eles não o incorporam, eles mesmos sofrem mais tarde quando o testador chega até eles e diz: "Ele está nesse arquivo, mas não consegui encontrar o motivo exato".


Aplicação por testadores



Linha de dados


Carregou uma linha de 1 milhão de dados - o sistema congela.
Tentamos 500 mil (divididos ao meio) - ainda trava.
Tentamos 250 mil - não trava, está tudo bem.



Daí a conclusão de que o problema está entre 250 e 500 mil. Novamente, aplicamos a divisão bissecional.

Tentamos 350 mil (dividindo "a olho") - é perfeitamente permitido, você não precisa encontrar números exatos ao tocar manualmente) - está tudo bem
Tentamos 450 mil - é ruim.
Tentamos 400 mil - é ruim.



Em geral, você já pode receber um bug. É muito raramente exigido do testador relatar que a borda ou o bug está claramente no número 286 586. É suficiente localizá-lo aproximadamente - 290 mil.

É apenas uma coisa verificar "10" e imediatamente "300 mil", e é completamente diferente fornecer informações mais completas: "até 10 mil tudo está bem, de 10 a 280 mil freios começam, já cai para 290 mil".

É claro que, quando a quantidade é medida em milhares, levará muito tempo para procurar manualmente uma face específica. Sim, o desenvolvedor não precisa disso. Bem, ninguém quer perder tempo em vão.



Obviamente, se o problema original estava em uma linha com 10 a 30 caracteres, você pode encontrar a borda exata. É uma questão de uma relação razoável com o tempo - se você usar adivinhação ou divisão bissecional, poderá encontrar rapidamente o valor exato e ele é pequeno (até 100 geralmente) - estamos procurando com certeza. Se os problemas estiverem em uma linha grande, mais de 1000 → procure aproximadamente.

Ficheiro


Carregou um arquivo - travou! Como, porque? Primeiro, tentamos analisar por nós mesmos o que poderia afetar o que nosso teste testou? Este é o principal chip de regra "primeiro positivo, depois negativo". Se você não tentar colocar tudo em um teste ao mesmo tempo:

  • Verificou um pequeno arquivo de amostra
  • Verificamos um enorme arquivo de 2 GB, com várias colunas, várias colunas, além de diferentes variações dos dados internos

Será difícil localizar aqui. E se você separar as verificações:

  • Muitas linhas (mas os dados são positivos e verificados anteriormente)
  • Muitas colunas
  • Peso pesado
  • ...

Isso já é aproximadamente compreensível, qual é o motivo. Por exemplo, ele cai em um grande número de linhas - de 100 mil. Ok, estamos procurando uma borda mais precisa usando a divisão bissecional:

  • Dividimos o arquivo em dois por 50 mil, verificamos o primeiro.
  • Se você cair, divida
  • E assim, até encontrarmos um lugar específico para cair


Se a queda depende do número de linhas, procuramos uma borda aproximada: "Após 5000 quedas, não há 4000 mil". Não é necessário procurar um local específico (4589). Muito tempo e não vale o tempo.

Este bug foi encontrado por estudantes em Dadat . Os arquivos de dados podem ser carregados lá, o sistema processará e padronizará esses dados: corrigir erros de digitação, determinar as informações ausentes nos diretórios (código KLADR, FIAS, coordenadas geográficas, distrito da cidade, CEP ...).

A garota tentou baixar um arquivo grande e obteve o resultado: o sistema mostra uma barra de progresso com 100% de carga e trava por mais de 30 minutos.


A localização foi além - quando começa o congelamento? Isso é importante porque afeta a prioridade da tarefa. Qual é o tamanho típico do download? Com que frequência os usuários enviam LOTS diretos?

Talvez o sistema tenha sido projetado para processar milhares de linhas, um bug desse tipo está repleto de "Fix it some day". Ou downloads típicos - de 10 a 50 mil linhas que processam normalmente, bem, isso significa que o erro não está queimando, vamos corrigi-lo um pouco mais tarde.

Localização da tarefa:

  • para um arquivo com 50 mil linhas, 15 segundos travados,
  • para um arquivo com 100 mil linhas, 30 segundos travados,
  • para um arquivo com 150 mil linhas, 1 minuto trava,
  • para um arquivo com 165 mil linhas trava 4 minutos,
  • para um arquivo 172 mil linhas com uma barra de progresso 100% completa congela por mais de meia hora

É aqui que o trabalho do testador já é feito qualitativamente. São fornecidas informações completas sobre a operação do sistema, com base nas quais o gerente já pode concluir com que urgência é necessário corrigir o bug.

A verificação também não leva muito tempo. Você pode ir ou do final - aqui, baixamos 200 mil linhas e quando o problema começa? Usamos o método de divisão bissecional!

Ou comece com um número relativamente pequeno - 50 mil, aumentando gradualmente (pela metade, o método de divisão bisecional, exatamente o oposto). Sabendo que tudo será ruim em 200 mil, entendemos que não haverá muitos testes. Verificamos 50, 100, 150 - em três testes, encontramos uma borda aproximada. E então a escavação não é mais necessária.

Mas lembre-se de que você também precisa testar sua teoria. É verdade que o problema está no número de linhas e não nos dados dentro do arquivo? Verificar isso é muito fácil - crie um arquivo de 5000 linhas com um único valor "positivo". Esse valor que funciona exatamente que você já verificou anteriormente. Se não houver queda, o assunto é impuro =)) Parece que a teoria do número de linhas estava incorreta e o assunto está nos próprios dados.


Embora você possa experimentar 10 mil linhas com exatamente um valor positivo. É possível que a queda aconteça novamente. Apenas o seu arquivo de origem estava em várias colunas. Ou havia caracteres dentro que ocupavam mais bytes que um valor positivo ... Em geral, não rejeite imediatamente a teoria do tamanho do arquivo ou do número de linhas. Tente a divisão bissecional, pelo contrário - dobre o arquivo.

Mas, em qualquer caso, lembre-se de que quanto mais verificações forem misturadas em uma, mais difícil será localizar o erro. Portanto, é melhor testar imediatamente o número de linhas ou colunas em um único valor positivo. Para ter certeza de que está testando a quantidade de dados, não os dados em si. Análise de teste e tudo isso =)


Mas e se o problema não estiver no número de linhas, mas nos próprios dados? E você não sabe exatamente onde. Talvez você tenha inserido dados de “Guerra e Paz” em um arquivo de teste ou baixado uma grande planilha de algum lugar da Internet ... Ou o usuário encontrou um problema: ele fez o upload do arquivo e tudo caiu. Ele veio para apoiar, o apoio veio para você: o arquivo está em você, reproduza-o.

Outras ações dependem da situação. Se os prazos do usuário estiverem em execução ou o dinheiro for debitado dele e o processamento do arquivo cair, será um erro de bloqueio. E não há tempo para treinar um testador de localização. É mais fácil fornecer o arquivo que está caindo exatamente ao desenvolvedor, deixá-lo livre e descobrir o motivo.

Mas se você encontrou um erro, é hora de cavar você mesmo. Novamente, não esquecendo o senso comum, como sempre na localização. A princípio, tentamos tirar conclusões nós mesmos e depois fomos buscar ajuda. Para concluir você mesmo, é necessário:

  • verifique os logs, pode haver a resposta certa;
  • veja o conteúdo do arquivo: algo pode chamar sua atenção, essa é a primeira teoria;
  • use o método de divisão bissecional.

Como resultado, em vez do erro "Arquivo quedas, por que xs, aqui está um anexo de arquivo de 2 GB", você coloca um erro bem pensado e localizado: "O arquivo cai se a data do formato DD / MM / AAAAA estiver dentro". E então você não precisa de um arquivo de 2 GB, apenas um arquivo para uma linha e uma coluna!



Aplicação por desenvolvedores


Em uma grande quantidade de dados, o testador não procura um limite claro, porque não é razoável fazer isso manualmente. Mas os desenvolvedores usam o método de divisão bissecional no código e sempre podem encontrar um local específico para cair. Afinal, o sistema se dividirá em vitória, e não uma pessoa!


Por exemplo, temos um mecanismo para carregar dados no sistema. Pode carregar 10 mil e um milhão. Mas isso não importa, pois o download está em lotes de 200 entradas. Se algo desse errado, o próprio sistema conduz a divisão bissecional. Próprio. Até encontrar um lugar problemático. Em seguida, leia os logs:

  • Obteve 1000 entradas
  • Processado 200 registros
  • Processado 400 registros
  • Opa, caiu em um pacote de 200 discos!
  • Eu tento processar um pacote de tamanho 100
  • Eu tento processar um pacote de tamanho 50
  • Eu tento processar um pacote de tamanho 25

...
  • Erro nesses identificadores: o campo de email obrigatório não é preenchido
  • Processado 600 registros

...

Aqui, é claro, mais lógica também depende do desenvolvedor. O processamento para após encontrar um erro ou vai além. Tropeçou em um pacote de 200 entradas? Chegamos ao ponto de encontrar um gargalo, marcar a entrada como incorreta, processar as 199 restantes e seguir em frente.

Mas e se o pacote inteiro desmoronar? Marcamos o registro como incorreto, mas os 199 restantes também não foram capazes de processar. Porque Aplicamos o mesmo método, procurando um novo problema. O truque é que você sempre deve poder parar a tempo.


Se o número de erros for superior a 10-50-100, é melhor parar o download. É possível que tenha ocorrido um erro de upload no sistema original e recebemos um milhão de "curvas" de dados. Se o sistema dividir cada pacote de 200 registros pela metade e depois dividir os 199 restantes, e assim por diante, será ruim para todos:

  • O log cresce dos 15 mb habituais para 3 gb e fica ilegível;
  • O sistema pode travar ao tentar gerar uma mensagem de erro final (eu falei sobre essa situação na seção BMW Mnemonics );
  • É gasto muito tempo pesquisando todos os erros. Sim, o sistema faz isso mais rapidamente do que uma pessoa, mas se você dividir um milhão de pacotes de 200 registros, isso levará tempo.

Portanto, o cérebro deve ser incluído em todos os lugares - tanto no teste manual quanto na escrita do código do programa. Você sempre deve entender quando parar. Somente no caso de testes manuais, ele estará "prestes a encontrar a fronteira" e no desenvolvimento "parará se houver muitas quedas".

Sumário


O método de divisão bisecional é usado para procurar a localização exata da queda e a localização do bug.

Procure o número e comece a dividi-lo ao meio:

  • comprimento da linha;
  • tamanho do arquivo
  • peso do arquivo;
  • número de linhas / colunas;
  • quantidade de memória livre em um telefone celular;
  • ...


Mas lembre-se - um dia você tem que parar! Não é necessário parar e procurar o número exato, se for necessário milhares de testes adicionais. Mas 5 a 10 minutos podem ser dados à localização.

PS - procure artigos mais úteis no meu blog com a tag "útil"

Source: https://habr.com/ru/post/pt468087/


All Articles