Comprendre comment le logiciel de test qui fonctionne et ce pour tester
Intro:
J'ai vu beaucoup de sujets ici sur DONC sur les tests de logiciels et d'autres termes que je ne comprends pas.
Problème:
En tant que développeur débutant j'ai, malheureusement, n'ont aucune idée de la façon dont le logiciel de test fonctionne, pas même comment tester une fonction simple. C'est une honte, mais c'est la vérité. J'espère aussi que cette question peut aider d'autres débutants développeurs.
Question:
Pouvez-vous m'aider à comprendre ce sujet un peu plus?
Peut-être quelques questions pour commencer: mettre
- Quand je développe une fonction, comment dois-je le tester? Par exemple: lorsque l'on travaille avec une fonction somme, dois-je tester chaque valeur d'entrée possible ou seulement certaines limites? Que diriez-fonctions de test avec des chaînes comme paramètres?
- Dans un gros programme, dois-je tester chaque morceau de code de celui-ci? Lorsque vous les gars, le programme ne vous testons chaque code écrit?
- Automatisée comment le test fonctionne et comment puis-je essayer un? Comment les outils de tests automatisés qui fonctionne et ce qu'ils font?
- J'ai entendu parler de tests unitaires. Puis-je avoir une brève explication sur ce?
- Ce qui est un framework de test?
Si possible, veuillez poster du code, avec des exemples pour clarifier les idées.
Toute aide sur ce sujet est le bienvenu! Merci.
Vous devez vous connecter pour publier un commentaire.
Commençons par l'évidence:
Comment fonctionnent les tests ? En test-driven development, vous pensez d'abord à la fonctionnalité que vous souhaitez mettre en œuvre, puis d'écrire un test pour elle. Dans l'exemple que vous avez donné d'une fonction somme, il est assez évident ce qu'il doit faire. Vous, puis d'écrire un test qui permet de s'assurer que la sommation travaillé.
Les tests unitaires doivent être aussi légers que possible de sorte que vous pouvez exécuter chaque fois que vous frappez le bouton générer. Lorsque vous faites cela maintenant, dans cet exemple, votre test échoue, parce que vous n'avez pas encore mis en œuvre une fonction somme.
Maintenant vous écrivez la fonction réelle et continuer le débogage et la mise en œuvre jusqu'à ce que le test passe. Ensuite, vous êtes sûr que vous avez mis en œuvre la fonctionnalité que vous vouliez.
Maintenant, comment devriez-vous la conception de votre test ? Vous ne pouvez pas tester tous, ce qui est impossible. Un exemple permet de dire que vous prenez d'entrée de l'utilisateur, il faut les valider. Ensuite, il serait naturel d'écrire au moins deux cas de test pour la validation du code: l'une qui permet de s'assurer que l'entrée valide est analysée en tant que telle. Le deuxième cas de test obtient d'entrée non valide et que vous vous assurez qu'il ne parvient pas, déclenche une exception ou quel que soit le comportement que vous souhaitez. Donc, dans ce cas, il est bon d'avoir un test positif qui devrait passer et négatif d'un test qui vérifie si l'entrée non valide n'est pas validé.
Quand faut-il tester? Comme je l'ai mentionné avant, le test doit être suffisamment léger de sorte qu'ils peuvent être exécutés sur chaque build. Et oui, toutes les courir. Cela permet de s'assurer que vous ne manquez pas une dépendance dans le code qui casse les choses loin de le point que vous l'avez édité.
Quelque chose peut être testé ? Eh bien, en général les méthodes qui s'appuient sur des ressources sont difficiles à tester. Ce que je veux dire par la que sont les bases de données, des connexions réseau ou spécifique du matériel et des pilotes. Il peut être fait, mais ensuite, vous avez à mettre en place un plus grand essai de l'installation.
Bugfixing et tests Un scénario typique où test vraiment utile si vous êtes en serrant les bugs. Pas littéralement, bien sûr. Si vous avez un bug, vous avez à résoudre, essayez d'abord d'écrire un test pour elle. Et puis réparer votre code jusqu'à ce que votre test passe. À partir de ce point sur ce test "regarde au-dessus de votre code" que ce bug ne sera jamais revenir.
Que gagnez-vous par les tests ? À mon avis, il y a beaucoup de choses
Il faut un certain effort pour s'habituer à l'aide de tests, mais je pense qu'il en vaut la peine. Surtout si vous écrivez des bibliothèques d'une certaine sorte.
Bien,
Généralement, il y a trois sortes de tests. Des Tests unitaires, des tests de Système et des tests de QA. Les tests unitaires, comme son nom l'indique, de tester de petites unités distinctes de fonctions et de classes.
Pour tous les environnements de développement, il y a unité de frameworks de test. Il y a Nunit pour .net, ainsi que MME unit test framework dans Visual Studio, CPPUnit pour le C++, JUnit, etc. Tous signifiait qu'une chose: se connecter à des parties de votre programme, exécutez vos pré-définis de scripts et de rapport d'erreur.
CPPUnit, par exemple, est basé sur des macros comme CPPUNIT_ASSERT_EQUAL, destiné à être utilisé en tant que quelque chose comme ceci: CPPUNIT_ASSERT_EQUAL(somme(arr), 17). Et il serait dire si ce n'est pas l'égalité, auquel cas le test sera considéré comme échoué.
Vous êtes censé développer les tests pour chaque fonction, et après, vous n'avez pas peur de changer et d'optimiser le code. Il est généralement appelé un "répétabilité" - possibilité de faire une action complexe, telles que l'analyse complète de tous les codebase, avec un seul clic.
Les tests unitaires sont requis pour chaque moden de développement de logiciels, parce que l'expérience montre qu'ils améliorent la vitesse de développement. Il est également suggéré que l'unité de test de code peut servir comme une sorte de "documentation" pour la bibliothèque.
Système de tests sont des tests automatisés de plus, la fonctionnalité de niveau supérieur. L'idée de tests du système est de se nourrir d'entrée propre (comme les bases de données, la saisie de l'utilisateur, etc) pour tester le tout, la validation de la sortie contre les pré-défini affichage des trésors.. Il est essentiel que le système de sortie est déterministe, et ne dépend que de l'entrée. Chaque fois que le système change, le système de tests de changement aussi.
TDD est un endroit frais à consonance mauvaise idée, ce qui suggère que vous ne devriez pas développer quoi que ce soit avant la mise en œuvre de la bonne de tests automatisés, et puis l'écriture de code pour satisfaire les tests. Il est regardedd comme un échec, parce que les changements dans la conception sont inévitables au cours du développement, et un petit changement de conception qui provoque généralement des changements drastiques dans les tests unitaires.
Manuel de l'assurance qualité est la finale, et le plus important type de test de logiciels. L'idée est de préparer un plan de test, qui est effectué lors de la conception et de codage des phases, la collecte de toutes les idées, les développeurs devaient cours de codage de chaque instruction if, comment réellement faire de ce particulier si la déclaration d'exécution le long de la moins attendue chemin d'accès du code. L'assurance de la qualité du personnel, destiné à être capable de tout ce qui peut être fait avec le programme sans environnement de développement, peuvent suivre l'résultant de la procédure de test et de leurs propres idées, de trouver plus de bugs.
J'ai trouvé le livre "JUnit Guide de Poche" par Kent Beck comme un excellent (et pas cher et compact!) introduction aux Tests Unitaires: le livre est divisé à peu près dans les sections sur le bien-fondé de test-driven programmation générale et techniques d'essai et puis s'en va dans les détails du framework JUnit (qu'il a co-créé).
http://www.amazon.co.uk/JUnit-Pocket-Guide-Kent-Beck/dp/0596007434/ref=sr_1_7?ie=UTF8&s=books&qid=1276811600&sr=8-7
En ce qui concerne votre demande de quelques exemples qui illustrent les Tests Unitaires; ce JUnit Apprêt n'est pas mauvais:
http://www.clarkware.com/articles/JUnitPrimer.html#testcase
Ce que pour tester
Il ya un couple de vraiment utile concepts qui m'ont aidé à faire ce travail:
Équivalence de partitionnement dit "l'Exécution de l'essai dans ce contexte de ces événements est équivalente à cette autre test ici, je n'ai pas besoin de faire les deux."
Analyse des limites, dit "Voici le point où un changement de contexte ou un autre événement provoque un résultat différent, donc je veux des tests sur chaque côté de cette frontière."
La réflexion sur ceux-ci peuvent vraiment aider à réduire le nombre de tests que vous devez écrire.
Quand à tester
J'ai toujours tester manuellement mon code pour vous assurer qu'il fonctionne. J'écris souvent d'une unité supplémentaire de test qui couvre chaque ligne de code, je suis en train d'écrire. L'unité de test échoue avant d'écrire le code pour le faire passer. Si c'est quelque chose que l'utilisateur va faire, puis j'écris souvent un test d'acceptation ou automatisé scénario, trop.
De tests automatisés
De tests automatisés, au moyen soit de script ou de l'enregistrement d'un test de sorte que vous n'avez pas à le faire manuellement votre script ou un code va le faire pour vous. Il existe deux types d'outils d'automatisation: BDD - ou anglais-lisible de test d'acceptation appareils qui vous permettent d'écrire les scripts et automatisation des wrappers qui vous permettent d'automatiser plus facilement. Ainsi, par exemple, vous pourriez choisir d'utiliser GivWenZen ou Fitnesse comme votre appareil, et le Sélénium dans votre web outil d'automatisation.
Si vous avez Visual Studio 2008+ vous pouvez télécharger le code source à partir d'ici et d'essayer le scénario de la voir courir:
http://code.google.com/p/wipflash/
Tests unitaires
Dans son sens strict, de l'Unité des moyens d'Essai, le test d'un élément de code dans l'isolement de tous les autres éléments de code. Nous utilisons se moque en place de vrais morceaux de code que notre Code en Vertu de l'Essai exige. En réalité, nous sommes souvent pragmatique sur la nature des "unités" - je ne pas se moquer de sortir les objets de domaine, par exemple.
Cependant, les tests unitaires dans la façon dont la plupart des gens utilisent ce n'est pas vraiment à propos de l'essai. Surtout que c'est un mécanisme propre de la conception et de la séparation des responsabilités, parce que vous êtes contraints par essayer de le tester.
J'aime à penser que les tests unitaires comme "l'écriture d'un exemple de la façon dont je vais utiliser le code, je suis en train d'écrire". La chance de résider dans une unité cadre de tests et d'être exécutable.
Infrastructures de test
Bonne chance!
Vous pouvez diviser les tests en trois grandes branches (en fait il y a plus, mais si vous êtes un débutant, vous devez comprendre la base de la première): Alpha, Bêta, Plein de code de travail.
En alpha, vous avez à penser à TOUTES les possibilités de votre code peut être composer avec.
Dans le cas d'une fonction sum (), ils sont quelques-uns, mais si vous êtes en développement, disons, d'une grande base de données de serveur d'applications, vous avez besoin de prendre en compte tous les possibles d'entrée et de gérer toutes les erreurs possibles, pensez à l'utilisateur final comme une personne stupide ou même comme un pirate malveillant.
Je ne, vous devriez, microsoft n'a pas. (capture de la blague 😉 )
Aucune automatisation peut surmonter l'intelligence humaine et un bon débogueur (c'est le seul outil dont vous avez vraiment besoin!)
http://en.wikipedia.org/wiki/Unit_testing
http://en.wikipedia.org/wiki/Test_automation_framework
Quand je développe une fonction, comment dois-je le tester? Par exemple: lorsque l'on travaille avec une fonction somme, dois-je tester chaque valeur d'entrée possible ou seulement certaines limites? Que diriez-fonctions de test avec des chaînes comme paramètres? Vous pouvez utiliser la valeur limite de l'analyse de la boîte noire test de type
Dans un gros programme, dois-je tester chaque morceau de code de celui-ci? Lorsque vous les gars, le programme ne vous testons chaque code écrit? Oui, Vous devez confirmer chaque module de travail que par les résultats attendus
Automatisée comment le test fonctionne et comment puis-je essayer un? Comment les outils de tests automatisés qui fonctionne et ce qu'ils font? Automatisation de Tests dépend de différents facteurs ex. Portée du projet , les délais, les coûts , les ressources disponibles, etc . Vous recommandons d'explorer d'automatisation de tests de concepts
J'ai entendu parler de tests unitaires. Puis-je avoir une brève explication sur ce point?
Qu'est ce qu'un framework de test? . Dépend de votre langage de programmation de la sélection, car en python unittest fourni et java ont une autre unit test framework
Besoin de passer par l'Automatisation de tests de concepts et l'application.