Lista de verificação para testar um campo numérico

Ao testar, existem tarefas interessantes com lógica intrincada e tarefas simples, como verificar uma string simples ou um campo numérico. Para campos simples, você pode escrever uma lista de verificação de verificações uma vez e, em seguida, reutilizá-la, apenas mudando ligeiramente para se adequar ao seu próprio campo.



Hoje vamos analisar a lista de verificação para um campo numérico. Primeiro, vou escrever uma lista de verificação geral, depois examinaremos cada item e descobrir por que ele é necessário e, no final, escreveremos uma lista de verificação usando este modelo.



Portanto, temos um determinado campo onde você precisa inserir um número. Por exemplo, o campo "idade" ao se cadastrar:







Ao mesmo tempo, você não pode se cadastrar no site menores de 18 anos, há conteúdo proibido.



Quais verificações podem ser feitas aqui:



  1. Valores válidos
  2. Valores incorretos (fora dos intervalos válidos ou ilógicos: 200 anos, 88 segundos ...)
  3. Valores limite
  4. Valores limite
  5. Número fracionário - formato (separado por vírgulas e pontos)
  6. Número fracionário - arredondamento (com várias casas decimais)
  7. Zero
  8. 1
  9. Campo vazio
  10. Número muito grande (busca por fronteira tecnológica)
  11. Um número negativo
  12. Valores não numéricos e não numéricos


Juntando tudo - exemplo: lista de verificação de idade .

Bem, onde praticar - tente você mesmo!







Valores válidos



Imagine que você literalmente tem 5 minutos para testar a funcionalidade. E você só consegue executar os primeiros testes da lista de verificação. E você tem uma lista de verificação:



  • Campo vazio
  • 0
  • -1


Como resultado, essas verificações foram realizadas e você acha que o sistema está funcionando bem (bem, juro!). E ela sempre jura, até no valor correto! Não é bom ... Portanto, nos lembramos da regra:



SEMPRE primeiro positivo, depois negativo!






Veja também:

Teste Positivo e Negativo - Saiba mais sobre por onde começar


Para um campo com idade, quais são os valores corretos? Qualquer coisa acima de 18 anos:



  • dezoito
  • 25
  • 38
  • 45
  • ...






Aqui, você precisa entender que estamos escolhendo UM valor. É diferente a cada vez para evitar o efeito do pesticida.



Também é importante entender que podemos ter mais de um valor correto. É quando temos vários intervalos e condições diferentes em cada um.



Por exemplo, a mesma idade:



  • se for menor de 18 anos - mostrar todos os produtos na loja, exceto cigarros e álcool
  • se tiver mais de 18 anos - mostrar todos os produtos


Então entendemos que já temos dois intervalos "válidos". Portanto, precisamos obter um valor de cada um. Por exemplo, 16 e 26.







Ou se estivermos calculando o seguro dependendo da experiência de direção:



  • 0 - 1 ano - 1000 rublos
  • 1 - 3 anos - 800 rublos
  • 3-5 anos - 600 rublos
  • 5-10 anos - 500 rublos
  • Mais de 10 anos - US $ 3,00


Acontece 5 intervalos. E precisamos tirar um valor de cada um. Por exemplo: 0,5, 2, 4, 6, 15.







Cada vez que tomamos valores diferentes, mas neste parágrafo o significado é o mesmo - tomar os valores corretos do TK.





Valores inválidos



Existem diferentes opções aqui. O que significa um valor incorreto?



  • fora dos intervalos válidos
  • correto do ponto de vista do computador (número), mas sem sentido (200 anos)


Vamos voltar ao exemplo da idade. O valor correto é maior de 18 anos. Portanto, devemos fazer a seguinte pergunta:



- O que acontece se pegarmos um valor da faixa “errada”? E se eu for menor de 18 anos? Bem, digamos 10.







Em seguida, examinamos cuidadosamente o intervalo selecionado:



- Hmmmmm, mas a idade não pode ser menor que 0. Ou seja, temos um limite lógico separando duas classes de equivalência diferentes:



  • Possível fisicamente, mas inválido de acordo com TK (0 - 17 anos)
  • Fisicamente impossível (0 ou menos)


Portanto, você precisa obter um valor de cada intervalo. Aí resulta 10 e "-5":







Pensamos mais:



- Se temos uma certa fronteira lógica de baixo, deve haver de cima. Qual é a idade máxima possível para se cadastrar em nosso site? Provavelmente, tem cerca de 55-65 anos, porque a geração mais velha não gosta de computadores. Mas você pode estabelecer os 100-110 anos condicionais de centenários.



Obtemos mais um intervalo com uma borda implícita. Mas, em qualquer caso, os valores 25 e 145 serão diferentes - um é realista e o outro não. Então você deve tentar também!







E novamente o efeito do pesticida. Pegamos 145 uma vez e 6666666 na outra.



Aqui, podemos enfrentar o fato de que mais de 2-3 caracteres não podem ser inseridos no campo. O desenvolvedor foi ressegurado "do tolo". Isso não é motivo para desistir e desistir do teste. Porque provavelmente o desenvolvedor apenas definiu maxlength no campo e é fácil de contornar!



Veja também:

Como remover maxlength de todos os campos do formulário - várias maneiras de observar ツ







Valores limite



Os valores de limite separam um intervalo de outro. Eles devem ser testados !!! Porque é nas bordas que os bugs são mais comuns. Por quê? Sim, porque eles se enquadram em ambas as faixas ou não se enquadram em nenhuma delas.



Em nosso exemplo, o TK possui a condição “cadastro somente para maiores de 18 anos”. Isso significa que o desenvolvedor deve fazer a seguinte lógica no código do programa:



  • SE x> 18 ENTÃO registrar
  • SE x <= 18 ENTÃO apresentamos um erro


Se o desenvolvedor se esqueceu de adicionar o valor 18 a uma das faixas, isso não pode resultar em erro. Porque, em tais casos, a construção if else é geralmente usada. E o desenvolvedor coloca o último "outro" para garantir - isto é, se DE REPENTE o valor inserido não se enquadrar em nenhuma das condições acima:



  • se x> 18 ...
  • elseif x <18 ...
  • outro ...


Mas se o desenvolvedor adicionou o valor 18 a vários intervalos de uma vez:



  • se x => 18 ...
  • elseif x <= 18 ...


Então o programa ficará confuso, o que ele deve escolher? E pode muito bem cair!



Em geral, os bugs são mais comuns em limites do que em um intervalo. Portanto, certifique-se de pesquisá-los! Em nosso CT existe uma fronteira clara “mais de 18 anos”. Então, testamos o número 18:







Se tivermos vários intervalos de acordo com o TK, verificamos cada borda separadamente. Esses são limites arbitrários - que TK impõe.



Mas as fronteiras são de tipos diferentes:



  • Arbitrário
  • quebra-cabeças
  • Tecnológica


Arbitrário verificado? Vamos mais longe. Lógico é tudo aquilo que obedece à lógica (em um minuto e 60 segundos, uma pessoa não pode ter “menos de um ano”, etc.). Vamos aplicá-lo ao nosso exemplo.



Limite inferior:



- É lógico que a idade não pode ser inferior a zero. Portanto, 0 é a fronteira. Testando!







Fronteira de cima:



- Nuuuu ... Dificilmente a idade será mais de 35 anos. Embora o que impede a avó de entrar no site? Talvez 65? 88?



É difícil encontrar a fronteira aqui. É fácil tirar um valor da faixa "Não acredito muito", mas não há uma fronteira específica. Portanto, não há nada para testar. Não existe uma fronteira lógica no topo.



Fiz a busca pela fronteira tecnológica em um item à parte, então voltaremos a isso um pouco mais tarde. Em qualquer caso, isso é menos importante do que reconciliar os limites válidos que estão no TK.



Consulte também:

Tipos de limites usando uma máquina de lavar como exemplo

Por que testar valores limites



Como encontrar limites no cliente e no servidor

Mnemônicos BMW para encontrar valores limites






Valores limite



Se temos uma fronteira, existem valores de fronteira. E também precisam ser verificados!

No exemplo da idade, o limite é 18. Portanto, os valores do limite são 17 e 19.







Por que verificar os valores do limite? Sim, então, que o desenvolvedor poderia cometer um erro no código e indicar a borda um pouco não ali.



if x > 18
if x > 17


Se nossa fronteira for deslocada e não testarmos os valores da fronteira, podemos facilmente pular este bug. Afinal, verificamos:



  • fronteira - 18,18> 17, então tudo funciona
  • o valor inválido do intervalo à esquerda é 10. 10 <17, portanto, foi gerado um erro.


Concluímos que tudo está funcionando corretamente, embora não esteja! Portanto, certifique-se de verificar os valores limítrofes.



Mas é necessário testar valores de fronteira em ambos os lados? Com 17 resolvidos, você precisa. E 19? Digamos que o desenvolvedor tenha selado na outra direção:



if x > 18
if x > 19


Encontraremos esse bug verificando o valor limite 18. E se funcionar para 18 e funcionar para um número dentro do intervalo (por exemplo, 26), então o código está escrito corretamente. Ou seja, para que haja um bug no código, é como ser pervertido, escreva algo como:



if (x == 18 or x > 21) …


Isso só pode ser feito de propósito)) Bem, se você conta com um desenvolvedor tolo com piadas maldosas na forma de ovos de Páscoa, então você só tem que fazer um busto completo. Portanto, vamos considerar os colegas como pessoas adequadas.



Mas! E se um desenvolvedor descrever como o código funciona em vários intervalos? Então, se ocorrer um erro de digitação, os intervalos se sobrepõem:



if x <= 19 () …
if (x > 18 and x < 55) …


O número 18 não detectará o erro, porque 18 <= 19, e não se enquadra na segunda faixa. Portanto, haverá uma situação que funciona na fronteira, funciona dentro do intervalo, mas não funciona no valor da fronteira.



Portanto, se não houver acesso ao código, vale a pena verificar os limites de ambos os lados, caso contrário, você nunca sabe onde o erro de digitação apareceu?



O assunto se torna ainda mais interessante se você puder inserir não apenas um número inteiro, mas também um número fracionário no campo. Qual será então o valor limite? Vale a pena começar com uma casa decimal. Em nosso exemplo, são 17.9 e 18.1:







Ok, digamos que verificamos:



  • Fronteiras inteiras - 17 e 19
  • Limites fracionais - 17,9 e 18,1


Mas se esses valores arredondarem normalmente, isso significa que outros também terminarão bem? O que acontecerá se você inserir o valor 17,99999999999 (há 11 noves após a vírgula decimal e o resultado do arredondamento é atingir a borda)?



Essas são classes de equivalência diferentes se estivermos falando sobre frações que serão arredondadas:



  • Uma casa decimal
  • Muitos sinais


E vale a pena conferir os dois! Portanto, adicionamos novos testes: 17,99999999999 e 18,00000000001









Número fracionário (formato)



Se o sistema permitir que você insira valores fracionários, então os verificamos na etapa 1, ao testar os valores corretos. Acabamos de quebrar o conceito de "número correto":



  • Todo
  • Fracionário


E dividimos o item "fracionário" ainda mais. Afinal, um número fracionário pode ser escrito por meio de:



  • ponto - 6,9
  • vírgula - 6,9


Se um dos métodos funcionar, isso não significa de forma alguma que o segundo funcionará! Tenho até um exemplo de duas calculadoras que funcionam com números fracionários de forma diferente - http://bugred.ru/calc/ .



Veja também:

Não escreva "Enter 6.9" no bug! - análise de bugs na calculadora


Portanto, precisamos ter certeza de que ambos os métodos funcionam. Pelo menos se eles deveriam funcionar. Se apenas um funcionasse, porque os padrões proíbem o uso do outro - verifique se o segundo retorna um erro!



No caso da idade, qual é o valor fracionário positivo? Provavelmente metade - por exemplo, 20,5 anos:







você verificou? Trabalhando? Em seguida, examinamos uma vírgula - 20.5:







O fato de que o trabalho fracionário, em princípio, foi verificado. OK.





Número fracionário (arredondamento)



De particular interesse são os valores próximos aos pontos de corte, em vez de quaisquer valores fracionários. Ao nos aproximarmos do limite a uma distância menor que a precisão computacional, podemos chegar a uma situação em que as verificações de validade do valor passam com sucesso, mas os cálculos falham.



Portanto, se você puder inserir um número não inteiro, certifique-se de tentar muitos noves após a vírgula decimal, perto da borda do valor (já fizemos isso com o ponto acima):







Não faz sentido verificar o arredondamento por um ponto ou vírgula. Isso será uma duplicação desnecessária de testes. Verificamos separadamente:



  • formato - separado por ponto ou vírgula
  • arredondamento - quando uma ou várias casas decimais


Veja também:

Nos testes, sempre começamos de forma simples! - por que você não deve misturar cheques






Zero



Sempre testamos zero. E em todos os lugares. Apenas lembre-se disso como um axioma. Simplesmente porque muitas vezes há bugs em zero.



Porque essa geralmente é a fronteira. Pode ser explícito (por extenso no TK) ou implícito (não está escrito no TK, mas é claro que a idade não pode ser negativa).



Se estamos falando de um campo numérico, tentamos inserir o número 0. Embora, é claro, "zero" no teste vá além de um número primo.







Consulte também:

Classe de equivalência zero-não-zero - Saiba mais sobre como testar zero, e não apenas campos numéricos!






1



Como sempre verificamos zero, não nos esquecemos do valor limite - um.



Na verdade, este é geralmente o "valor mínimo possível", se não estamos falando de valores fracionários:



- É lógico que se fizermos um pedido, compremos pelo menos 1 livro, ou 1 vestido, ou 1 kg de farinha ...

- A idade mínima é 1 dia / mês / ano

- Quantidade mínima de tempo - 1 segundo

- Quantidade mínima de experiência de trabalho - 1 dia / mês / ano

- ...



Portanto, um não é menos um número mágico que zero. Nós verificamos também!





Campo vazio



Na verdade, este também é um teste zero. Apenas não pelo número "zero", mas por zero no comprimento da string de entrada.



Afinal, se inserirmos "0", resultará em um caractere.

E se estivermos estudando o comprimento de uma string, vale a pena verificar não apenas um, mas também zero .



Lembre-se de que zero não é apenas um número. Mesmo em um campo numérico, teremos pelo menos dois zeros - uma string vazia e o número "0". Pode haver mais zeros - não se esqueça do zero na saída. Mas em nosso exemplo com a idade, não é.





Um número muito grande



Um número muito grande deve ser inserido para encontrar a fronteira tecnológica. Por exemplo, 9999999999999999.







Estamos tentando chegar o mais longe possível. Mas não muito difícil - deve ser um teste, bem, dois.



Primeiro, você pode começar a partir do valor inteiro - na maioria das vezes, esse tipo de dados é escolhido para um campo numérico. Se você conseguir ultrapassá-lo, basta marcar 25 ou 45 noves no campo. Não caiu? Bem, estranho. Não existe fronteira tecnológica, mas pelo menos tentamos encontrá-la.



Veja também:

Como gerar uma string grande, ferramentas - você não precisa fazer à mão))

Fronteira tecnológica em dicas legais - um exemplo de um bug real


Se o campo permitir a entrada de valores negativos, verificamos "muitos noves" com um sinal de mais e um sinal de menos, realizando dois testes:



  • 99999999999999999999999
  • -9999999999999999999999999


Deixe-me lembrá-lo de que se você não pode inserir muitos caracteres em um campo, isso não é um motivo para desistir e dizer "a fronteira tecnológica não pode ser verificada!" Porque, se você não puder inserir muitos caracteres em um campo, provavelmente haverá um comprimento máximo por campo, que é fácil de contornar. Removemos a restrição do cliente e nos certificamos de que o servidor também possui proteção infalível.



Veja também:

Como remover maxlength de todos os campos do formulário

Como encontrar bordas no cliente e no servidor






Um número negativo



Quando temos um número, sempre lembramos que pode ser:



  • positivo
  • negativo


Ao mesmo tempo, pela experiência das entrevistas que conduzo, posso afirmar com certeza que poucas pessoas pensam no cheque “e se entrar um valor negativo”. Mas o sistema pode funcionar de maneiras diferentes:



  • dê um erro "esta idade / quantidade do produto não existe, digite um número positivo";
  • corte o sinal de menos e trate um número negativo como positivo.


Isso se soma ao fato de que um número negativo pode ser normal para o campo (por exemplo, se estivermos economizando receitas / despesas).



O que estamos testando nesta seção?



  • O que acontece se você inserir um número negativo, que será correto no módulo: -26 em nosso exemplo
  • Tentando encontrar o limite da tecnologia: -99999999999999999999999






Valores não numéricos e não numéricos



Se você acha que para verificar um valor não numérico, basta inserir qualquer string como "olá", então você está enganado))) As



strings também podem ser diferentes e podem ser divididas em:



  • muitas strings que o programa interpreta como números;
  • muitas strings que o programa não pode interpretar como números.


Testes para valores "não muito numéricos" são muito bem abordados neste artigo: Classes de equivalência para uma string que denota um número



que não vou reescrever completamente, apenas adicionarei à lista de verificações para nosso exemplo. O que ainda não vimos:



  • Definitivamente não é um número - "Teste"
  • Zero à esquerda - "025"
  • Espaço antes do número - "25"
  • Espaço dentro do número - "2 5"
  • Escrevendo pelo e - "1.2e + 2"
  • Valor hexadecimal - "0xba"
  • Booleano - TRUE / FALSE (pode ser interpretado como 0/1)
  • Infinito (sim, assim no texto e nós escrevemos)
  • NaN


No nosso caso, com o valor correto da idade a partir dos 18 anos, o item “espaço dentro do número” torna-se mais interessante. Depende da lógica do sistema. Existem diferentes opções aqui:



  • Jure se várias palavras forem inseridas
  • Corte tudo o que vier depois do primeiro espaço - "2 5" → "2"
  • Remova o espaço e finja que ele não estava lá (percebido como um erro de digitação em um número) - "2 5" → "25"


O mesmo acontece com as letras. O sistema pode jurar quando os vê, ou pode simplesmente jogá-los fora. Então, vamos ver as novas opções de teste:



  • até espaço com menos de 18 anos - 2 5
  • até um espaço com mais de 18 anos - 25 6
  • depois de um espaço de texto - 25 teste
  • antes do texto de espaço - teste 25


Observe que, na interface, simplesmente inserimos algum valor sem especificar o tipo de dados. Mas se estivermos testando a API REST e a mensagem json nela, com certeza devemos tentar passar o número em uma string:



  • número 3
  • número 3"


Esses são significados diferentes. Se o valor não cotado for um número. Se entre aspas, é uma string, mesmo que pareça um número. Talvez o desenvolvedor lance os tipos no código e "aceite" a segunda opção, ou talvez não. Vale a pena conferir de qualquer maneira!





Juntando tudo: lista de verificação de idade



Idéias para testes foram anotadas, cada uma foi discutida. Agora, vamos juntar todos os pontos e escrever uma lista de verificação para nosso exemplo.



Deixe-me lembrá-lo da condição - temos um campo "idade" ao registrar. Ao mesmo tempo, você não pode se cadastrar no site até os 18 anos, pois há conteúdo proibido.







Ao elaborar uma lista de verificação, levamos em consideração todos os pontos que foram discutidos acima. Mas não vamos esquecer as prioridades. Sempre começamos com as verificações básicas, e não com "martelado no zero, um número negativo e geralmente tentamos quebrá-lo de todas as maneiras possíveis."



Verifica Exemplo Resultado
18 25
18 18
18 16 : « 18 »
21.5
21,5
18 17 : « 18 »
, 17.999999999999999999 : « 18 »
18* 18.00000000000000001
/
0 : « 18 »
( , , )
1 : « 18 »
999999999999999999999 : « »
. -999999999999999999999 : « »
: « »
025 , 25
25 , 25
2 5 : « 18 » ( )
18 25 6 , 25
25 , 25
25 , 25
1.2e+2 : « »
0xba : « »
Boolean TRUE : « »
Infinity Infinity : « »
NaN NaN : « »


* Se 18,000000000001 funcionar, então não há sentido em verificar o inteiro 19. Se os



números fracionários não forem aceitos pelo sistema, então sim, verificamos 19. Claro, as verificações do bloco "não inteiros" não são super importantes. Às vezes você pode e deve marcar neles. Principalmente se sabemos que o sistema não deve analisar nada, remover espaços, descartar texto e assim por diante ... Então, basta tirar um valor desta lista. E o resto para usar para efeito do agrotóxico, ou seja, toda vez que uma nova versão do "não é um número".



Mas, para eliminar o excesso, primeiro você deve aprender a gerar muitas ideias! Isso é o que praticamos com você hoje =)



Veja também:

Lista de truques para um campo numérico no Strainer (você precisa fazer o login)

Onde obter ideias para testes (uma seleção de links úteis)




Tente você mesmo



Escreva uma lista de verificação para o campo “Experiência de direção”. O seguro é calculado em função do tempo de serviço. Todos os intervalos à esquerda têm o número "inclusivo" e à direita - não.



  • 0-3 anos - 1000 rublos
  • 3-6 anos - 700 rublos
  • 6-10 anos - 500 rublos
  • Mais de 10 anos - US $ 3,00


O formulário não permite que você insira nada exceto números (esta limitação é do cliente). Os valores fracionários são inaceitáveis, quantos anos completos de experiência temos, por isso escrevemos.



PS - Procure artigos mais úteis no meu blog sob a tag “útil” . E vídeos úteis estão no meu canal do youtube



All Articles