De quelles informations avez-vous besoin pour commencer les tests?

By | août 22, 2019

python pour débutant

Bonjour Paul, Je suis un testeur de logiciels qui effectue principalement l’automatisation de nos jours, mais j’ai commencé mon parcours de test de logiciels de manière complètement manuelle et n’ai capturé que Python parce que cela était obligatoire. Bien que je n’ai rien écrit d’autre volontairement depuis que j’ai écrit, c’est probablement bon signe :). Donc, mes réponses pourraient ne pas être exactement les mêmes que celles données par un développeur, mais j'espère que ce que j'ai à dire m'aidera.

1) Qu'est-ce que le test?

Tester, c'est en apprendre davantage sur l'application ou le système testé. Cela inclut, sans toutefois s'y limiter, la vérification de sa réponse à ce que vous attendez de divers intrants et environnements. Les nouveaux planificateurs ont tendance à considérer les tests comme un mécanisme de contrôle mécaniste ascendant. Une sorte de filtre de correction que vous pouvez utiliser pour faire passer votre logiciel à différents niveaux, afin de s’assurer qu’il fait ce que vous voulez. Cela est utile pendant le développement pour de nombreuses raisons que je vais développer au point 2. L’autre moitié des tests est liée à votre deuxième série de questions. Il s’agit d’apprendre, d’explorer et d’organiser vos découvertes.

Dans le passé, j’ai comparé les tests à un scientifique, je suis probablement biaisé parce que j’ai été physicien dans une vie antérieure, mais j’estime que les parallèles sont très clairs. Lorsque vous êtes confronté à une nouvelle application ou à un nouveau système, vous disposez de quelques informations sur ce qu’elle est censée faire et, si vous êtes très chanceux, sur une idée de la marche à suivre. Je traite cela comme l'hypothèse à l'essai et mon hypothèse nulle est que tout est cassé. (Après 6 ans sur le terrain, j’ai trouvé l’hypothèse nulle très bonne).

2) Pourquoi en ai-je besoin?
Le test, c’est la confiance, c’est un moyen de s’assurer que vous faites ce que vous devriez faire. C’est une information qui vous explique le fonctionnement de votre logiciel. C’est une facilité d’écriture. Si vous effectuez une refactorisation ou un TDD, vous constaterez que vos tests vous expliquent exactement ce que vous devez accepter et ce que vous devez faire ressortir, et le décomposer en morceaux conceptualisables. Si vous ne pouvez pas le conceptualiser, vous ne l’analyserez pas suffisamment, testez chaque étape et vous y arriverez.

Alors, quels tests est-ce que j'écris? Quels tests devrais-je écrire?

Comment puis-je tester l'hypothèse? Tout d’abord, j’examine mes hypothèses, les informations que j’ai reçues sur le fonctionnement du système. devrait travail, c’est une excellente source d’idées sur ce que le développeur pense que le code fera et devrait faire. Les développeurs aiment souvent tester le bon chemin, le cas optimal, où l'utilisateur sait exactement ce qu'il veut faire, est patient et ne se contente pas de soumettre dix fois par seconde de frustration lorsqu'une page Web prend plus de deux secondes à se charger. . Lorsque je vois des informations telles que des informations de négociation USB (comme je le faisais lorsque je testais un logiciel intégré) ou un jeton d'authentification (maintenant je vis dans le monde des tests Web), je sais immédiatement que je peux me permettre de penser à tout cela, pour voir comment il réagit. Je regarde les interfaces entre les pièces en mouvement, quelle clé puis-je jeter dans les travaux là-bas? C’est une bonne règle de base. Lorsque vous voulez déterminer ce qu’il faut tester, vous examinez les zones les plus risquées et les hypothèses que le développeur avait. Parfois, vous êtes ce développeur, et il vous est difficile de vous écarter des connaissances que vous possédez déjà, mais il est très important pour un développeur de pouvoir aborder son propre logiciel de manière critique. vous aider à devenir un meilleur programmeur. Ecrivez les tests qui vous semblent montrer que votre logiciel fonctionne, puis écrivez les tests que vous espérez ne pas le casser. Ensuite, écrivez les tests qui, selon vous, vont le casser, puis écrivez les tests que personne ne fera sûrement jamais (mais vous savez qu'un utilisateur le fera totalement).

Comment développer des cas de test? Qu'est-ce qu'un cas de test?

Je vais répondre à ces deux questions de l’autre côté. Un scénario de test est un scénario ou une expérience pour lequel vous prévoyez obtenir un résultat donné. Il peut être décrit de différentes manières, par programmation pour l’automatisation, dans une liste d’actions de type recette avec le résultat attendu, en tant que nœud dans une carte conceptuelle… Quelle que soit la méthode utilisée, il s’agit d’un scénario idempotent que vous souhaitez apprendre à apprendre. comment le système réagit ou attend une certaine réaction.

Comment développez-vous ces? Vous commencez comme ci-dessus en examinant les hypothèses, hypothèses et environnements du système testé. Maintenant, j'aime les regrouper par concepts, fonctionnalités, risques et conception logicielle. Qu'est-ce que je veux dire par là?

Les concepts sont, pour moi, des choses comme les interfaces, la sécurité, la convivialité, le timing.
La conception logicielle est idéale pour décomposer vos couches de tests. Si je teste avec une application Web, je testerai le serveur, l’API, le serveur frontal et la base de données séparément. C’est un excellent moyen de décomposer vos groupes de tests.
La fonctionnalité est simple, fait-il ce qu’il est supposé faire? Ne fait-il pas ce qu’il n’est pas censé faire?
Risques, il s’agit plus d’une méta-catégorie, c’est un filtre que j’applique aux catégories ci-dessus et décide ensuite quelle est la chose la plus importante à tester. C’est là que l’expérience entre en jeu. Je cherche des éléments comme un débordement de tampon, une attaque XSS, une base de données, puis-je faire une injection SQL? S'il y a un champ de texte, est-il correctement nettoyé? Que se passe-t-il lorsque je saisis Unicode? (Je me suis écrasé plus d'une fois dans Chrome avec l'entrée Unicode)
Donc, vous commencez par regarder manuellement le logiciel, ou ses idées, et vous le piquez avec un bâton pour ainsi dire. Vous les notez et ce sont les noyaux de votre automatisation. Toute automatisation commence par l'examen du système.

Comment organiser des tests?

Il y a des segmentations naturelles dans les tests. Les tests unitaires vivent naturellement avec le code qu'ils testent. Ils vous permettent de vous faire confiance dans vos interfaces entre les fonctions et les classes et de vous assurer que votre code fonctionne comme prévu de manière isolée et qu'il peut gérer correctement les entrées. Ils sont aussi généralement très rapides et j’aime personnellement les faire courir très souvent. Je les fais courir sur des dépôts vers certains dépôts via Jenkins. Les tests au niveau des composants exerceront votre structure interne sur un composant, comme une base de données ou un serveur Web. Les tests de niveau d'intégration utilisent beaucoup plus de code dans un test et garantissent que lorsque vous remplacez le back-end d'une interface de base de données, par exemple, les entrées et les sorties de cette interface fonctionnent toujours avec le reste de votre base de code. Ensuite, il y a des tests de niveau système, qui exercent autant de votre système en une fois automatiquement qu’ils le peuvent. Donc, pour moi, cela signifie actuellement utiliser du sélénium pour faire tourner Chrome, le diriger vers mon environnement de test, vous connecter, tester certaines fonctionnalités, puis quitter le navigateur et renvoyer le résultat. Plus le test est élevé, plus il coûte cher en temps et souvent, plus il peut être fragile. Ce que je fais le moins, c’est parcourir manuellement le système et regarder les sorties sous les yeux, car les humains sont lents et il est préférable de passer mon temps à obtenir autant d’automatisation que possible pour me donner le plus de couverture possible. Mais je vais quand même cerner manuellement chaque nouvelle fonctionnalité, car c’est le seul moyen de générer des idées de test appropriées.

J'applique mon filtre de risque à toutes les divisions ci-dessus, de sorte que je termine avec un sous-ensemble de tous les tests, que j'appelle ma suite de fumée. Ceci teste les parties les plus risquées et les plus importantes du système. Par conséquent, s’il ya des défaillances importantes dans les fonctionnalités, elles sont signalées plus tôt. Ces tests durent généralement moins de cinq minutes et sont marqués, avec pytest, de @ pytest.mark.smoke. J'ai plusieurs autres suites de tests, mais leur organisation dépend beaucoup du fonctionnement du système et de la manière dont les composants fonctionnent ensemble. J'aime les regrouper par tranche verticale dans la pile.

Quand devrais-je écrire des tests?

Tout le temps.
Testez la conception, testez les composants, testez vos fonctions, testez tout votre système. Lorsque vous remarquez un bogue, écrivez un test, puis corrigez-le. Ecrivez plus de tests autour de cette zone, corrigez les bugs exposés. Les tests devraient faire partie du développement autant que tout autre chose. De temps en temps, arrêtez d'écrire et explorez ce que vous avez.

C’est un article très long et très avisé, mais j’espère que cela explique pourquoi j’ai testé en tant que testeur de logiciel.