Liste de contrôle pour tester un champ numérique

Lors des tests, il existe à la fois des tâches intéressantes avec une logique complexe et des tâches simples, comme la vérification d'une chaîne simple ou d'un champ numérique. Pour les champs simples, vous pouvez rédiger une fois une liste de contrôle des chèques, puis la réutiliser, en la modifiant légèrement pour l'adapter à votre propre champ.



Aujourd'hui, nous analyserons la liste de contrôle pour un champ numérique. Tout d'abord, j'écrirai une liste de contrôle générale, puis nous passerons en revue chaque élément et déterminerons pourquoi il est nécessaire, et à la fin, nous rédigerons une liste de contrôle en utilisant ce modèle.



Nous avons donc un certain champ dans lequel vous devez entrer un nombre. Par exemple, le champ «âge» lors de l'inscription:







Dans le même temps, vous ne pouvez pas vous inscrire sur le site avant l'âge de 18 ans, il y a un contenu interdit.



Quels contrôles peuvent être effectués ici:



  1. Valeurs valides
  2. Valeurs incorrectes (en dehors des plages valides ou illogiques: 200 ans, 88 secondes ...)
  3. Valeurs limites
  4. Valeurs limites
  5. Nombre fractionnaire - format (séparés par des virgules et des points)
  6. Nombre fractionnaire - arrondi (avec un tas de décimales)
  7. Zéro
  8. Un
  9. Champ vide
  10. Très grand nombre (recherche de frontière technologique)
  11. Un nombre négatif
  12. Valeurs non numériques et non numériques


Mettre tout ensemble - Exemple: Liste de contrôle de l'âge .

Eh bien, où pratiquer - essayez-le vous-même!







Valeurs valides



Imaginez que vous ayez littéralement 5 minutes pour tester la fonctionnalité. Et vous ne parvenez à exécuter que les premiers tests de la liste de contrôle. Et vous avez une liste de contrôle:



  • Champ vide
  • 0
  • -1


Du coup, ces vérifications ont été effectuées et vous pensez que le système fonctionne bien (enfin, il jure!). Et elle jure toujours, même sur la valeur correcte! Pas bon ... Par conséquent, nous nous souvenons de la règle:



TOUJOURS d' abord positif, puis négatif!






Voir aussi:

Tests positifs et négatifs - En savoir plus sur par où commencer


Pour un champ avec âge, quelles sont les valeurs correctes? Tout ce qui a plus de 18 ans:



  • dix-huit
  • 25
  • 38
  • 45
  • ...






Ici, vous devez comprendre que nous choisissons une valeur UNIQUE . C'est juste différent à chaque fois pour éviter l'effet du pesticide.



Il est également important de comprendre que nous pouvons avoir plus d'une valeur correcte. C'est à ce moment que nous avons plusieurs plages et des conditions différentes sur chacune.



Par exemple, le même âge:



  • si moins de 18 ans - montrer tous les produits du magasin, à l'exception des cigarettes et de l'alcool
  • si plus de 18 ans - afficher tous les produits


On comprend alors que nous avons déjà deux plages "valides". Nous devons donc prendre une valeur de chacun. Par exemple, 16 et 26.







Ou si nous calculons l'assurance en fonction de l'expérience de conduite:



  • 0-1 an - 1000 roubles
  • 1-3 ans - 800 roubles
  • 3-5 ans - 600 roubles
  • 5-10 ans - 500 roubles
  • 10 ans et plus - 3,00 $ US


Il s'avère 5 intervalles. Et nous devons prendre une valeur de chacun. Par exemple: 0,5, 2, 4, 6, 15.







Chaque fois que nous prenons des valeurs différentes, mais dans ce paragraphe, la signification est la même - prendre les valeurs correctes du savoir traditionnel.





Valeurs invalides



Il existe différentes options ici. Que signifie une valeur incorrecte?



  • en dehors des plages valides
  • correct d'un point de vue informatique (nombre), mais dénué de sens (200 ans)


Revenons à l'exemple de l'âge. La valeur correcte est de plus de 18 ans. Donc, nous devons nous poser la question:



- Que se passe-t-il si nous prenons une valeur de la «mauvaise» plage? Et si j'ai moins de 18 ans? Eh bien, disons 10.







Ensuite, nous examinons attentivement l'intervalle sélectionné:



- Hmmmmm, mais l'âge ne peut pas être inférieur à 0. Autrement dit, nous avons une frontière logique séparant deux classes d'équivalence différentes:



  • Possible physiquement, mais invalide selon TK (0 - 17 ans)
  • Physiquement impossible (0 ou moins)


Vous devez donc prendre une valeur de chaque plage. Ensuite, il s'avère 10 et "-5":







Nous réfléchissons plus loin:



- Si nous avons une certaine frontière logique par le bas, il devrait y en avoir au-dessus. Quel est l'âge maximum possible pour s'inscrire sur notre site? Très probablement, il a environ 55 à 65 ans, car la génération plus âgée n'aime pas les ordinateurs. Mais vous pouvez également imposer de 100 à 110 ans de centenaires conditionnels.



Nous obtenons un intervalle de plus avec une frontière implicite. Mais dans tous les cas, les valeurs 25 et 145 seront différentes - l'une est réaliste et l'autre non. Alors vous devriez l'essayer aussi!







Et puis à nouveau l'effet du pesticide. Nous prenons 145 une fois et 6666666 l'autre.



Ici, nous pouvons faire face au fait que plus de 2-3 caractères ne peuvent pas être saisis dans le champ. Le développeur a été réassuré "de l'imbécile". Ce n'est pas une raison pour abandonner et abandonner votre test. Parce que très probablement, le développeur vient de définir maxlength sur le terrain, et il est facile de se déplacer!



Voir aussi:

Comment supprimer maxlength de tous les champs de formulaire - plusieurs façons de noter ツ







Valeurs limites



Les valeurs limites séparent un intervalle d'un autre. Ils doivent être testés !!! Parce que c'est aux frontières que les bugs sont les plus courants. Pourquoi? Oui, car ils tombent dans les deux gammes, ou ne tombent pas dans l'un ou l'autre.



Dans notre exemple, le TK a une condition «enregistrement uniquement pour les personnes de plus de 18 ans». Cela signifie que le développeur doit créer la logique suivante dans le code du programme:



  • SI x> 18 ALORS enregistrer
  • SI x <= 18 ALORS on donne une erreur


Si le développeur a oublié d'ajouter la valeur 18 à l'une des plages, cela peut ne pas entraîner d'erreur. Parce que dans de tels cas, la construction if else est généralement utilisée. Et le développeur met le dernier "autre" juste au cas où - c'est-à-dire si SUDDENMENT la valeur saisie ne correspond à aucune des conditions ci-dessus:



  • si x> 18 ...
  • sinon si x <18 ...
  • autre ...


Mais si le développeur a ajouté la valeur 18 à plusieurs gammes à la fois:



  • si x => 18 ...
  • sinon si x <= 18 ...


Alors le programme sera perdu, que devrait-il choisir? Et ça risque bien de tomber!



En général, les bogues sont plus fréquents aux limites qu'à l'intérieur d'un intervalle. Par conséquent, assurez-vous de les rechercher! Dans nos savoirs traditionnels, il existe une frontière claire «sur 18 ans». Donc, on teste le nombre 18:







si on a plusieurs intervalles selon le TK, on ​​vérifie chaque frontière séparément. Ce sont des limites arbitraires - que les savoirs traditionnels imposent.



Mais les frontières sont de types différents:



  • Arbitraire
  • casse-tête
  • Technologique


Arbitraire vérifié? Allons plus loin. La logique est tout ce qui obéit à la logique (en une minute 60 secondes, une personne ne peut pas avoir «moins d'un an», etc.). Appliquons à notre exemple.



Limite par le bas:



- Il est logique que l'âge ne puisse être inférieur à zéro. Donc 0 est la frontière. Essai!







Limite d'en haut:



- Nuuuu ... A peine l'âge sera plus de 35 ans. Bien que ce qui empêche grand-mère d'accéder au site? Peut-être 65 ans? 88?



Il est difficile de trouver la frontière ici. Il est facile de prendre une valeur de la plage "Je n'y crois pas trop", mais il n'y a pas de frontière spécifique. Par conséquent, il n'y a rien à tester. Il n'y a pas de frontière logique en haut.



J'ai mis la recherche de la frontière technologique dans un élément distinct, nous y reviendrons donc un peu plus tard. Dans tous les cas, cela est moins important que de réconcilier les limites valides qui se trouvent dans les savoirs traditionnels.



Voir aussi:

Types de limites utilisant un lave-linge comme exemple

Pourquoi tester les valeurs limites



Comment rechercher des limites sur le client et le serveur

BMW Mnemonics pour rechercher des valeurs limites






Valeurs limites



Si nous avons une frontière, alors il y a des valeurs de frontière. Et ils doivent également être vérifiés!

Dans l'exemple de l'âge, la limite est 18. Les valeurs limites sont donc 17 et 19.







Pourquoi vérifier les valeurs limites? Oui, alors, que le développeur pourrait faire une erreur dans le code et indiquer la frontière un peu pas là.



if x > 18
if x > 17


Si notre bordure est décalée et que nous ne testons pas les valeurs de bordure, nous pouvons facilement ignorer ce bogue. Après tout, nous avons vérifié:



  • border - 18.18> 17, donc tout fonctionne
  • la valeur non valide de la plage de gauche est 10. 10 <17, donc une erreur a été générée.


Nous concluons que tout fonctionne correctement, même si ce n'est pas le cas! Assurez-vous donc de vérifier les valeurs limites.



Mais est-il nécessaire de tester les valeurs aux frontières des deux côtés? Avec 17 triés, vous avez besoin. Et 19? Disons que le développeur a scellé dans l'autre sens:



if x > 18
if x > 19


Nous trouverons ce bogue en vérifiant la valeur limite 18. Et si cela fonctionne pour 18 et pour un nombre dans la plage (par exemple, 26), alors le code est écrit correctement. Autrement dit, pour qu'il y ait un bogue dans le code, c'est comment être perverti, écrivez quelque chose comme:



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


Cela ne peut être fait que volontairement)) Eh bien, si vous comptez sur un développeur stupide avec des blagues diaboliques sous la forme de tels œufs de Pâques, alors vous n'avez qu'à faire un buste complet. Considérons donc les collègues comme des personnes adéquates.



Mais! Que faire si un développeur décrit comment le code fonctionne pour plusieurs intervalles? Ensuite, si une faute de frappe se produit, les plages se chevauchent:



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


Le nombre 18 n'attrapera plus l'erreur, car 18 <= 19, et il n'entre pas dans la deuxième plage. Il y aura donc une situation qui fonctionne à la frontière, qui fonctionne dans la plage, mais qui ne fonctionne pas à la valeur à la frontière.



Donc, s'il n'y a pas d'accès au code, cela vaut la peine de vérifier les limites des deux côtés, sinon vous ne savez jamais où la faute de frappe s'est glissée là-dedans?



La question devient encore plus intéressante si vous pouvez saisir non seulement un nombre entier, mais également un nombre fractionnaire dans le champ. Quelle sera alors la valeur limite? Cela vaut la peine de commencer par une décimale. Dans notre exemple, ce sont 17.9 et 18.1:







Ok, disons que nous avons vérifié:



  • Bordures entières - 17 et 19
  • Frontières fractionnelles - 17,9 et 18,1


Mais si de telles valeurs arrondissent normalement, cela signifie-t-il que d'autres arrondiront également bien? Que se passe-t-il si vous entrez la valeur 17,99999999999 (il y a 11 neuf après la virgule décimale et le résultat de l'arrondi est d'atteindre la frontière)?



Ce sont des classes d'équivalence différentes si nous parlons de fractions qui seront arrondies:



  • Une décimale
  • De nombreux signes


Et cela vaut la peine de vérifier les deux! Nous ajoutons donc de nouveaux tests: 17.99999999999 et 18.00000000001









Nombre fractionnaire (format)



Si le système vous permet de saisir des valeurs fractionnaires, nous les vérifions à l'étape 1, lors du test des valeurs correctes. Nous décomposons simplement le concept de "nombre correct":



  • Entier
  • Fractionnaire


Et nous décomposons l'élément «fractionnaire» plus loin. Après tout, un nombre fractionnaire peut être écrit par:



  • point - 6,9
  • virgule - 6,9


Si l'une des méthodes fonctionne, cela ne signifie pas du tout que la seconde fonctionnera! J'ai même un exemple de deux calculatrices qui fonctionnent avec des nombres fractionnaires de différentes manières - http://bugred.ru/calc/ .



Voir aussi:

N'écrivez pas "Enter 6.9" dans le bogue! - analyse des bugs dans la calculatrice


Nous devons donc nous assurer que les deux méthodes fonctionnent. Du moins s'ils sont censés fonctionner. Si un seul devrait fonctionner, car les normes interdisent l'utilisation de l'autre - vérifiez que le second renvoie une erreur!



Dans le cas de l'âge, quelle est la valeur fractionnaire positive? Probablement la moitié - par exemple, 20,5 ans: l'







avez-vous vérifié? Travail? Ensuite, nous regardons à travers une virgule - 20,5:







Le fait que le travail fractionnaire en principe est vérifié. D'accord.





Nombre fractionnaire (arrondi)



Les valeurs proches des seuils sont particulièrement intéressantes et non les valeurs fractionnaires. En approchant de la limite à une distance inférieure à la précision de calcul, nous pouvons nous retrouver dans une situation où les contrôles de validité de la valeur réussissent, mais les calculs échouent.



Donc, si vous pouvez entrer un nombre non entier, assurez-vous d'essayer plusieurs neuf après la virgule décimale, près de la bordure de la valeur (nous l'avons déjà fait avec le point ci-dessus):







cela n'a aucun sens de vérifier l'arrondi par un point ou une virgule. Ce sera une duplication inutile des tests. Nous vérifions séparément:



  • format - séparé par un point ou une virgule
  • arrondi - quand une ou plusieurs décimales


Voir aussi:

Dans les tests, nous commençons toujours simple! - pourquoi vous ne devriez pas mélanger les chèques






Zéro



Nous testons toujours zéro. Et partout. Rappelez-vous simplement cela comme un axiome. Tout simplement parce qu'il y a souvent des bugs à zéro.



Parce que c'est généralement la frontière. Il peut être explicite (prescrit dans les savoirs traditionnels) ou implicite (il n'est pas écrit dans les savoirs traditionnels, mais il est clair que l'âge ne peut pas être négatif).



Si nous parlons d'un champ numérique, alors nous essayons d'entrer le nombre 0. Bien que, bien sûr, "zéro" dans les tests dépasse un nombre premier.







Voir aussi:

Classe d'équivalence zéro-pas-zéro - En savoir plus sur le test de zéro, et pas seulement des champs numériques!






Un



Puisque nous vérifions toujours zéro, nous n'oublions pas la valeur limite - un.



En fait, il s'agit généralement de la "valeur minimale possible", si on ne parle pas de valeurs fractionnaires:



- Il est logique que si on passe une commande, on achète au moins 1 livre, ou 1 robe, ou 1 kg de farine ...

- L'âge minimum est de 1 jour / mois / an

- Durée minimum - 1 seconde

- Expérience professionnelle minimum - 1 jour / mois / an

- ...



Donc on n'est pas moins un nombre magique que zéro. Nous le vérifions aussi!





Champ vide



En fait, c'est aussi un test zéro. Seulement pas par le nombre "zéro", mais par zéro dans la longueur de la chaîne d'entrée.



Après tout, si nous entrons "0", il s'avère qu'un caractère.

Et si nous étudions la longueur d'une chaîne, cela vaut la peine de vérifier non seulement un, mais également zéro .



N'oubliez pas que zéro n'est pas qu'un nombre. Même dans un champ numérique, nous aurons au moins deux zéros - une chaîne vide et le nombre "0". Il peut y avoir plus de zéros - n'oubliez pas le zéro dans la sortie. Mais dans notre exemple avec l'âge, ce n'est pas le cas.





Un très grand nombre



Un très grand nombre doit être saisi pour trouver la frontière technologique. Par exemple, 9999999999999999.







Nous essayons d'aller le plus loin possible. Mais pas trop difficile - ça devrait être un test, enfin deux.



Tout d'abord, vous pouvez partir de la valeur entière - le plus souvent, ce type de données est choisi pour un champ numérique. Si vous parvenez à le dépasser, cochez simplement 25 ou 45 neuf sur le terrain. Vous n'êtes pas tombé? Eh bien, bizarre. Il n'y a pas de frontière technologique, mais au moins nous avons essayé de la trouver.



Voir aussi:

Comment générer une grande chaîne, des outils - vous n'avez pas à le faire à la main))

Frontière technologique dans les conseils juridiques - un exemple de vrai bug


Si le champ autorise la saisie de valeurs négatives, alors nous vérifions «plusieurs neuf» avec à la fois un signe plus et un signe moins, en effectuant deux tests:



  • 99999999999999999999999
  • -99999999999999999999999


Je vous rappelle que si vous ne pouvez pas saisir beaucoup de caractères dans un champ, ce n'est pas une raison pour abandonner et dire "la frontière technologique ne peut pas être vérifiée!" Parce que si vous ne pouvez pas entrer beaucoup de caractères dans un champ, il y a probablement une longueur maximale par champ, ce qui est facile à contourner. Nous avons supprimé la restriction sur le client et nous nous sommes assurés que le serveur dispose également d'une protection infaillible.



Voir aussi:

Comment supprimer maxlength de tous les champs de formulaire

Comment trouver des bordures sur le client et le serveur






Un nombre négatif



Lorsque nous avons un numéro, nous nous souvenons toujours que cela peut être:



  • positif
  • négatif


En même temps, d'après l'expérience des entretiens que je mène, je peux affirmer avec certitude que peu de gens pensent au chèque «et si vous entrez une valeur négative». Mais le système peut fonctionner de différentes manières:



  • donner une erreur "il n'y a pas un tel âge / quantité de marchandises, veuillez entrer un nombre positif";
  • coupez le signe moins et traitez un nombre négatif comme un nombre positif.


Cela s'ajoute au fait qu'un nombre négatif peut être tout à fait normal pour un champ (par exemple, si nous économisons des revenus / dépenses).



Que testons-nous dans cette section?



  • Que se passe-t-il si vous entrez un nombre négatif, qui sera correct dans le module: -26 dans notre exemple
  • Essayer de trouver la limite technologique: -99999999999999999999999






Valeurs non numériques et non numériques



Si vous pensez que pour vérifier une valeur non numérique, il suffit de saisir n'importe quelle chaîne comme "bonjour", alors vous vous trompez))) Les



lignes peuvent également être différentes, et elles peuvent être divisées en:



  • de nombreuses chaînes que le programme interprète comme des nombres;
  • beaucoup de chaînes que le programme ne peut pas interpréter comme des nombres.


Les tests pour les valeurs "pas tout à fait numériques" sont très bien traités dans cet article: Classes d'équivalence pour une chaîne qui désigne un nombre que



je ne réécrirai pas complètement, il suffit d'ajouter à la liste des vérifications de notre exemple. Ce que nous n'avons pas encore vu:



  • Certainement pas un nombre - "Test"
  • Premier zéro - "025"
  • Espace avant le nombre - "25"
  • Espace à l'intérieur du nombre - "2 5"
  • Écriture via e - "1.2e + 2"
  • Valeur hexadécimale - "0xba"
  • Boolean - TRUE / FALSE (peut être interprété comme 0/1)
  • Infinity (oui, juste comme ça dans le texte et nous écrivons)
  • NaN


Dans notre cas, avec la valeur correcte de l'âge à partir de 18 ans, l'item «espace dans le nombre» devient plus intéressant. Cela dépend de la logique du système. Il existe différentes options ici:



  • Jurer si plusieurs mots sont entrés
  • Coupez tout ce qui vient après le premier espace - "2 5" → "2"
  • Supprimez l'espace et faites comme si ce n'était pas là (perçu comme une faute de frappe dans un nombre) - "2 5" → "25"


De même avec les lettres. Le système peut jurer quand il les voit, ou il peut simplement les jeter. Voyons donc les nouvelles options de test:



  • jusqu'à l'espace de moins de 18 ans - 2 5
  • jusqu'à un espace de plus de 18 ans - 25 6
  • après un espace de texte - 25 test
  • avant le texte de l'espace - test 25


Veuillez noter que dans l'interface, nous saisissons simplement une valeur sans spécifier le type de données. Mais si nous testons l'API REST et le message json qu'elle contient, nous devons absolument essayer de transmettre le nombre dans une chaîne:



  • numéro 3
  • numéro 3"


Ce sont des significations différentes. Si la valeur sans guillemets est un nombre. Si entre guillemets est une chaîne, même si elle ressemble à un nombre. Peut-être que le développeur convertira les types dans le code et «acceptera» la deuxième option, ou peut-être pas. Vaut le détour quand même!





Tout rassembler: liste de contrôle de l'âge



Des idées de tests ont été écrites, chacune a été discutée. Maintenant, rassemblons tous les points et écrivons une liste de contrôle pour notre exemple.



Permettez-moi de vous rappeler la condition - nous avons un champ "âge" lors de l'inscription. Dans le même temps, vous ne pouvez pas vous inscrire sur le site avant l'âge de 18 ans, il y a un contenu interdit.







Lors de l'élaboration d'une check-list, nous prenons en compte tous les points abordés ci-dessus. Mais n'oublions pas les priorités. Nous commençons toujours par des vérifications de base, et non par «martelé à zéro, un nombre négatif et généralement essayé de le casser de toutes les manières possibles».



Vérifier Exemple Résultat
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 : « »


* Si 18.000000000001 fonctionne, il est inutile de vérifier l'entier 19. Si les



nombres fractionnaires ne sont pas acceptés par le système, alors oui, on vérifie 19 Bien sûr, les vérifications du bloc "non-entiers" ne sont pas super importantes. Parfois, vous pouvez et devez marquer sur eux. Surtout si on sait que le système ne doit rien analyser, supprimer les espaces, supprimer du texte etc. Il suffit alors de prendre une valeur de cette liste. Et le reste à utiliser pour l'effet du pesticide, c'est-à-dire à chaque fois une nouvelle version de "pas un nombre".



Mais pour couper l'excès, il faut d'abord apprendre à générer beaucoup d'idées! C'est ce que nous avons pratiqué avec vous aujourd'hui =)



Voir aussi:

Cheatlist pour un champ numérique dans Strainer (vous devez vous connecter)

Où trouver des idées de tests (une sélection de liens utiles)




Essayez vous-même



Rédigez une liste de contrôle pour le champ «Expérience de conduite». L'assurance est calculée en fonction de la durée du service. Tous les intervalles sur la gauche ont le numéro «inclus», mais sur la droite ils n'en ont pas.



  • 0-3 ans - 1000 roubles
  • 3-6 ans - 700 roubles
  • 6-10 ans - 500 roubles
  • 10 ans et plus - 3,00 $ US


Le formulaire ne vous permet pas de saisir autre chose que des chiffres (cette restriction concerne le client). Les valeurs fractionnaires sont inacceptables, combien d'années complètes d'expérience nous avons, alors nous écrivons.



PS - pour des articles plus utiles, regardez mon blog sous la balise "utile" . Et des vidéos utiles sont sur ma chaîne youtube



All Articles