Aujourd'hui, le test de logiciels est l'un des processus clés pour créer un produit. Peu importe la méthodologie, l'approche, le processus ou les tests de logiciels que vous utilisez de quelque manière que ce soit qui existent toujours dans votre processus. Ces dernières années (et peut-être même une décennie), les tests de logiciels sont devenus un domaine informatique distinct, en constante évolution dans la communauté mondiale.
Et oui, nous parlerons aujourd'hui de testeurs manuels (fonctionnels) ordinaires, sans préjugés en matière d'automatisation, de charge de travail et d'autres types de tests techniques!Désormais, la profession de testeur manuel est l'un des processus informatiques les plus populaires et l'un des moyens les plus simples pour accéder à l'informatique.
Pourquoi?
Parce que les testeurs ne font rien, ils n'ont pas besoin de connaissances. Tout le monde peut tester!Parce que la profession de testeur manuel au stade initial ne nécessite pas de connaissances et de compétences spécifiques. La principale «connaissance» du testeur est la capacité de «détruire» et la pensée analytique. Et le plus important - d'avoir un état d'esprit non standard, de trouver des solutions non triviales aux tâches. Un certain monstre qui sait écraser et casser :)
Les compétences physiques peuvent toujours être enseignées, mais malheureusement, les compétences générales sont très difficiles à enseigner, car c'est le caractère de la personne, son attitude envers quelque chose, etc. Habituellement, je regarde de travers les gestionnaires qui recrutent des spécialistes en tests manuels pour les compétences techniques. Pourquoi tu fais ça ??? (vous pouvez laisser des réponses dans les commentaires) Bon, d'accord, continuons :)
Si nous considérons les caractéristiques techniques des tests qu'un testeur manuel devrait connaître, elles peuvent être divisées en 2 parties principales,
peut -
être que beaucoup seront en désaccord avec moi, elles crieront comme ça, vous vous trompez, les tests sont très difficiles - c'est la préparation des tests et des tests.
Nous considérerons la partie la plus intéressante et la plus fascinante des tests - la préparation aux tests. C'est sur cette partie du processus de test que cela dépend de la façon dont vous effectuez correctement et correctement le test, trouvez les défauts nécessaires et assurez le
visage satisfait du client (ou du produit du partenaire), la qualité de la tâche après la mise en œuvre.
Beaucoup d'entre vous qui ont participé aux tests, d'une manière ou d'une autre, se préparaient au test. La différence réside généralement dans le niveau de formalisation de cette étape du processus de test. Si vous faites des tests de recherche, n'écrivez pas de scripts de test, ils
vous donnent un système et vous vous précipitez immédiatement dans la bataille, de toute façon, vous vous préparez pour les tests. Souvent, sur des projets simples, le testeur peut ne pas le remarquer, car la phase d'analyse et de préparation au test se déroule à un niveau inconscient. Mais même ainsi, il est toujours là.
Et dans cette série d'articles, nous en parlerons.
Sur mon lieu de travail, je donne souvent une formation aux testeurs portables et je rencontre des situations que tout le monde semble avoir entendu parler des techniques de conception de test, mais personne ne les utilise dans le travail.
Cela ressemble à ceci:
- Pourquoi avons-nous besoin de techniques de conception de tests?
- Identifier correctement les validations pour les tests.
- Les utilisez-vous dans votre travail?
- Explicitement non, nous déterminons nous-mêmes ce qui doit être vérifié.
Pourquoi cela se produit-il? Après tout, les techniques de conception de tests sont à la base de l'écriture de scripts de test. C'est la même chose que de pouvoir conduire une voiture, mais sans connaître les règles de circulation. Pourquoi les testeurs ne les utilisent-ils pas dans leur travail?
La réponse est simple.
Premièrement, lorsque les testeurs sont enseignés dans des cours de test (ou d'autoformation sur des livres et des articles), on leur explique comment appliquer des techniques de conception de test sur des exemples élémentaires. Et le principal problème d'une telle formation est que les testeurs ne peuvent pas transférer les connaissances acquises à leurs tâches réelles. Autrement dit, utilisez des techniques de conception de test dans le travail quotidien.
Deuxièmement, lors de l'enseignement des techniques de conception de tests, ce processus est très formalisé, ce qui ressemble à un testeur qui a besoin de tout formaliser dans son travail. Et généralement, personne n'en a besoin pour personne.
En termes simples, les techniques de conception de test sont un ensemble de règles qui vous permettent de déterminer correctement la liste des contrôles à tester. Et le plus important est d'
utiliser ces règles toujours et partout :) pour pouvoir appliquer ces règles à un niveau intuitif. C'est la capacité de «mener des analyses dans la tête» qui distingue un bon testeur!
Dans mon organisation, ainsi que les normes et pratiques généralement acceptées, les tâches de conception des tests sont les suivantes:
- Test des exigences et analyse des risques
- Définition des contrôles pour les tests
- Formalisation des contrôles sous forme de scripts de test
- Priorisation des chèques
- Définition des approches de test
Dans cette série d'articles, je vais essayer de vous parler non seulement des techniques de conception de tests, mais aussi de la façon de les utiliser TOUS (à savoir tous ensemble, et non un ou deux spécifiques) dans la pratique, y compris l'exemple de la fonctionnalité de notre banque. Comment générer des vérifications pour les tests en utilisant des techniques de conception de test pour les grands systèmes et processus. Et surtout, vous obtiendrez une réponse quant au moment et aux tests auxquels appliquer les techniques de conception des tests.
Commençons donc.
Et nous commencerons par la plus simple, à savoir environ 2 techniques de conception de test de base dont tout le monde a entendu parler, et je suis sûr qu'elles ont appliqué, mais très probablement à un niveau intuitif dans leur travail.
Ce sont des classes d'équivalence et des valeurs limites.
Que sont les classes d'équivalence?
La classe d'équivalence est un ensemble de données logicielles d'entrée (ou de sortie) traitées par un programme selon un algorithme ou conduisant à un résultat.
Autrement dit, il s'agit d'un certain ensemble de valeurs que vous pouvez remplacer dans le programme et obtenir le même résultat. Le résultat peut être non seulement des valeurs spécifiques, des actions de programme, mais aussi juste la portée. Par conséquent, les classes d'équivalence les plus simples dans lesquelles les tests sont divisés sont 2 classes principales: les scénarios positifs et négatifs.
Ils sont toujours là. Chaque testeur divise les contrôles en ces classes, mais tous les testeurs ne savent pas pourquoi il le fait. La réponse est les classes d'équivalence.
De plus, chaque classe d'équivalence peut être divisée en classes supplémentaires, etc. jusqu'à ce que les contrôles n'aboutissent pas à des résultats de tests ponctuels et spécifiques.
Prenons un exemple:Le système de notation calcule le taux d'intérêt sur un prêt pour un client en fonction de son âge, qui est entré sous la forme:
- De 18 à 25 ans - 18%
- De 25 à 45 ans - 16%
- Plus de 45 ans - 20%
Nous définissons 2 classes principales - ce sont
des scénarios
positifs et négatifs .
Les scénarios positifs seront toutes les valeurs qui mènent au résultat, les scénarios négatifs seront les valeurs dont les résultats ne sont pas décrits comme le résultat attendu.
Ensuite, nous divisons la classe de scénarios positifs en 3 classes de valeurs d'entrée 18-24, 25-44 et 45 +
Dans la classe des scénarios négatifs, nous formons des valeurs basées sur la nécessité de vérifier les échecs du programme, nous avons donc 0, 1-17, valeurs négatives, saisie de caractères, etc.
Le résultat de cette partition sera une valeur ou une plage de valeurs dans laquelle nous devons effectuer une seule vérification avec n'importe quelle valeur de la plage de données. Des situations telles qu'une valeur unique dans une plage peuvent se produire. Il s'agit également d'une classe d'équivalence distincte qui nécessite également une vérification.
Total que nous avons.
- Contrôles positifs: Saisie des valeurs: 19, 30, 48 (les valeurs peuvent être n'importe quelle plage donnée de la classe)
- Contrôles négatifs: 0, 3, -1, A, etc.
Il est très important que les techniques de conception de test ne soient pas appliquées indépendamment des autres! Maintenant, nous les regardons séparément, mais à la fin je vais vous apprendre à les utiliser ensemble.
Une autre caractéristique des classes d'équivalence est leur application. Je distingue 3 niveaux d'application des techniques de conception de tests pour préparer les tests.
- Le premier niveau consiste à vérifier les éléments du système (par exemple, les champs, les cases à cocher, les boutons, etc.)
- Le deuxième niveau - vérifier la logique du système lors de la combinaison de données dans les éléments du système
- Le troisième niveau consiste à vérifier le processus opérationnel du système et la logique du programme.
Visuellement, cela ressemble à ceci:
Les classes d'équivalence sont plus pertinentes pour le 1er niveau et sont utilisées pour tester les éléments du programme. Mais idéologiquement, cette approche peut être appliquée à d'autres niveaux.
Une autre partie intégrante de la vérification d'un élément est une autre technique -
les valeurs limites .
Les valeurs limites complètent les classes équivalentes, couvrant ainsi complètement les vérifications de l'élément logiciel.
Les valeurs limites sont une technique de conception de test qui complète les classes d'équivalence par des vérifications supplémentaires à la frontière des conditions.
Il semble que tout soit simple!
Revenons à notre exemple plus tôt.
Le système de notation calcule le taux d'intérêt sur un prêt pour un client en fonction de son âge, qui est entré sous la forme:
- De 18 à 25 ans - 18%
- De 25 à 45 ans - 16%
- Plus de 45 ans - 20%
Quelle sera la frontière ici?
Si vous avez pensé à la longueur du champ sur la page Habra, ou à des vacances dans des pays chauds, je veux vous contrarier, ce n'est pas le cas :)
Pour déterminer les valeurs limites, il faut autre chose. À savoir, déterminer quelles valeurs sont le début et la fin de notre classe. Et la chose la plus importante !!! Des années de recherche dans le domaine des tests ont montré que la majorité des défauts sont constatés par les testeurs à la jonction de valeurs qui modifient les conditions de travail du programme.
Par conséquent, en plus de la valeur limite, nous utilisons 2 valeurs supplémentaires pour les tests, la valeur avant la limite et la valeur après la limite.
En conséquence, nous avons:
Les limites de nos classes: 17, 18, 19, 24, 25, 26, 44, 45, 46 et max.
De plus, nous avons une classe négative, elle est de 0 à 18. Par conséquent, ici, nous devons également utiliser les valeurs limites pour les tests: -1, 0, 1, 17,18
Ensuite, nous excluons les valeurs en double et nous obtenons des valeurs pour vérifier l'élément d'entrée de données.
-1, 0, 1, 17, 18, 19, 24, 25, 26, 44, 45, 46, max.
La valeur maximale est généralement spécifiée par le client ou l'analyste. Si vous ne pouvez pas fournir, alors vous devez le laisser tomber et ne pas vérifier, vous devez choisir la valeur qui correspond au bon sens (presque personne ne viendra pour des prêts à l'âge de 100 ans).
L'étape suivante consiste à imposer des valeurs limites aux valeurs des classes d'équivalence, à exclure les vérifications inutiles à l'aide de la règle «une valeur suffit pour vérifier une classe» et à finaliser la liste.
Si auparavant, nous avions 3 valeurs pour 3 classes, 19, 30 et 48, puis après avoir déterminé les valeurs limites, nous pouvons supprimer les valeurs 30 et 48 de la liste et les remplacer par des valeurs pré-limites, telles que 26 (au lieu de 30) et 46 ( au lieu de 48).
Les valeurs limites sont déterminées non seulement pour les valeurs numériques, mais aussi pour les valeurs alphabétiques (par exemple, les limites de l'alphabet et du codage), la date et l'heure et les valeurs sémantiques. La limite des valeurs numériques dépend du format d'entrée, si vous avez des entiers, par exemple 2, alors les valeurs de limite seront 1 et 3. Si les valeurs fractionnaires, alors les limites pour le nombre 2 seront déjà 1,9 (1,99) ou 2,1 ( 2.01), etc.
Les techniques de conception des tests de niveau 1 sont simples et directes. Je pense que vous direz que c'est facile, mais pourquoi vérifier soigneusement chaque élément. Et vous aurez raison! ..
Le plus souvent, ils sont utilisés dans le développement de nouveaux logiciels, car une fois après avoir vérifié les éléments du système pendant le développement, ils ne sont par la suite pas souvent sujets à changement au niveau du fonctionnement de l'élément. Vous n'avez pas besoin de vérifier constamment chaque valeur d'élément dans chaque écran de votre programme, mais gardez à l'esprit que si la logique de traitement dans les éléments du programme change, vous devez revérifier que les valeurs d'élément sont traitées correctement.
Eh bien, trop facile ??? Maintenant, nous allons commencer à analyser des techniques plus complexes, préparez-vous.Les techniciens de conception de tests de niveau 2 sont responsables de la variabilité et de la combinatoire des données lors des tests de logiciels.
La principale technique de conception des tests est le
test par pari (test par paire) . L'essence de la technique est de minimiser la variabilité des combinaisons de contrôles suffisantes pour assurer un logiciel de haute qualité.
En termes simples, la règle de Pareto est appliquée dans cette technique, 80% de la qualité peut être obtenue dans seulement 20% des contrôles de combinaison de données.
Cette technique a été développée grâce à plus de 15 ans de recherche IEEE dans le domaine de l'analyse des causes des défauts du système. Les résultats de l'étude ont montré que 98% de tous les défauts se produisent lors d'un conflit de paire de données d'entrée ou d'un paramètre d'entrée.
Pourquoi le couple a-t-il été choisi?
Plongez dans la jungle des statistiques mathématiques et de la théorie des probabilités pour trouver la réponse .
Bien sûr, nous n’y irons pas aujourd’hui. La théorie des probabilités est trop compliquée pour les simples informaticiens, tout est simple, prenez un jeu de dés ordinaire à 6 faces.
Supposons que la perte de la valeur 2 soit un défaut, alors la probabilité d'un défaut lors du lancement d'un cube est de 1/6 = 0,167.
Si nous lançons 2 dés, alors la probabilité de tomber de 2 points (2 défauts) devient inférieure et égale à 0,167 * 0,167 = 0,028, pour 3 déjà 0,005, etc.
Il s'avère que la probabilité qu'un défaut se produise avec une combinaison de 3 paramètres ou plus est si faible qu'elle peut être écartée.
Lorsque nous testons le programme, il y a toujours un nombre n d'éléments qui affectent le résultat, par exemple le formulaire de remplissage des données d'une demande de prêt. Il y a n nombre de champs qui donnent ensemble un résultat. C'est la combinatoire des données lors du remplissage des champs que nous vérifions à l'aide de tests par paire.
Regardons un exemple de la fonctionnalité d'une conception de carte à distance dans une banque.
Si nous regardons attentivement, nous verrons avec vous cinq champs de données:
- Nom complet
- Date de naissance
- Téléphone portable
- Série de numéros de passeport
- Courriel
- ainsi que 2 cases à cocher.
Notre tâche, en utilisant les techniques du premier niveau, est de déterminer la liste des classes d'équivalence que le programme peut suivre.
Il est IMPORTANT que lorsque vous utilisez la technique de test par paire, nous ne parlons pas du résultat du test. Il est important pour nous de vérifier la variabilité des données lors du remplissage de la candidature.
Alors
Le champ du nom complet peut prendre des valeurs (classes):
- Nom en russe
- Valeur invalide
- Valeur vide
Très souvent, les testeurs ne comprennent pas quelles valeurs choisir pour une technique donnée, si elles ne sont pas limitées par la capacité à entrer. Par exemple, si nous avons la possibilité de choisir le sexe d'une personne M ou F, alors tout est simple, il y a 2 significations. Mais lorsque nous avons une ligne pour la saisie de données, alors dans les tests par paire, nous ne vérifions pas l'exactitude du remplissage d'un champ spécifique, car ces vérifications doivent être effectuées au premier niveau de la conception du test (ou les combiner avec des tests par paire). Nous utilisons la classe d'équivalence pour ce champ, car peu nous importe le type de valeur que ce sera.
On va plus loin, la
date de naissance , ainsi que le
téléphone portable, la série et le numéro de passeport peuvent aussi avoir 3 états:
- Valeur valide
- Valeur invalide
- Valeur vide
Parce que
L'email est facultatif, ce champ a 2 valeurs:
- Valeur valide
- Valeur invalide
Les cases à cocher n'ont généralement que 2 états - Y ou N.
Pour vérifier toutes les combinaisons de ce formulaire, nous aurions besoin de faire plus de 1000 tests, mais en utilisant des tests par paires, nous n'avons besoin que de 9 tests!
Magique, je ne pense pas :)
L'étape suivante consiste à composer un tableau orthogonal avec des combinaisons de données. La façon la plus simple de compiler un tableau consiste à remplir les données par paires, en commençant par les éléments qui ont le plus grand nombre de valeurs, puis en descendant. Puisque dans notre exemple, il y a 4 éléments avec le même nombre de valeurs, nous pouvons sélectionner n'importe quelle paire.
Nous prenons le nom complet et la série de numéros de passeport. Notre tâche consiste à trier entre elles toutes les valeurs d'une paire donnée:
Après avoir itéré sur une paire, nous créons une autre paire et commençons à parcourir les valeurs (par exemple, le numéro de téléphone mobile)
Nous connectons l'élément suivant et ainsi de suite jusqu'à ce que la table entière soit complètement remplie, ce qui ressemblera à ceci:
Ainsi, nous obtenons 9 tests avec des classes d'équivalence spécifiques que nous pouvons introduire pour tester le travail de variabilité des données pour le formulaire. Nous pouvons remplir les classes avec des valeurs spécifiques que nous obtenons avec vous en utilisant le 1er niveau de technique de conception de test.
En conclusion de cet article, je dirai que les techniques de conception de test examinées ne couvrent qu'une partie des vérifications pour tester le programme, à savoir vérifier le bon fonctionnement des éléments du programme et le résultat de leurs combinaisons pendant son fonctionnement. Dans la deuxième partie, nous passerons aux techniques de conception de test qui vous permettent de travailler les merveilles du test pour tester la logique du programme et des processus. C'est un élément très important des tests manuels, et c'est précisément cela que vous testez souvent à votre travail!
J'espère que cela a été utile!