Est Tests Unitaires de la valeur de l'effort?
Je suis en train de travailler à intégrer les tests unitaires dans le processus de développement sur l'équipe avec laquelle je travaille et il ya certains sceptiques. Quelles sont les bonnes façons de convaincre les sceptiques développeurs de l'équipe de la valeur de l'Unité de Test? Dans mon cas précis, nous serions ajout de Tests Unitaires que nous avons ajouter des fonctionnalités ou des corrections de bogues. Malheureusement, notre base de code ne se prête pas à tester facilement.
- Comment pouvez-vous demander une telle chose.. le test Unitaire est donc de la hanche 🙂 ? Sérieusement... l'idée générale est la même chose... faire le test unitaire si vous vous sentez que les avantages l'emportent sur le coût... si vous avez des raisons de croire le contraire.. trouver quelque chose d'autre qui permet de.
- (régulier affirme avec debug\release build + interface propre aux classes + dédié mannequin testeur) > tests unitaires
- Après avoir été sur quelques équipes avec la même attitude, mon expérience est que vous perdez votre temps. Les sceptiques sont juste de vous donner la course autour de, et de saboter et de stonewall vous jusqu'à ce que vous obtenez frustré et de passer à une organisation qui partage vos valeurs. Ce qui est probablement ce que vous devez faire. Si le "chef de file" de l'équipe est l'un des sceptiques, réfléchir sérieusement à sortir. J'ai vu cette sorte de résistance pour les tests unitaires que juste la pointe de l'iceberg de mauvaises pratiques en matière de développement.
- les tests unitaires ne sont pas en opposition propres interfaces, en fait, ils sont à l'opposé lors de l'application de TDD. Soit ça, ou siège conducteur + volant > garage.
- Le test unitaire est un énorme gaspillage de temps rarement jamais découvre des bugs, mais mange loin de 30% de correction de bugs et de temps de développement et le budget de
- Si vous êtes l'espoir d'attraper des bugs avec les tests unitaires, je comprends pourquoi vous êtes déçu. Si vous lisez le plus voté réponses que vous trouverez qu'aucun d'entre eux déclare que c'est pourquoi vous faites les tests unitaires. Si vous ne voyez pas les autres avantages, vous n'êtes probablement pas en train de faire.
- Les tests unitaires ne sont pas les mêmes que les tests automatisés. Certaines des réponses à cette question n'est pas bien clair.
- programmeurs-sans-ats-va-être-emploi-par-2022
- De mon expérience, de la douleur dans le cul à suivre, mais l'homme.. si écrit correctement, il est très rassurant de savoir que les fonctionnalités de base a été testé avant de le déployer à l'extérieur.
- Pourquoi la plupart des tests unitaires est un gaspillage, par James O'Coplien est intéressant à lire.
Vous devez vous connecter pour publier un commentaire.
Tous les jours dans notre bureau, il y a un échange qui va quelque chose comme ceci:
Les détails changent tous les jours, mais le sentiment n'est pas. Tests unitaires et de développement piloté par les tests (TDD) ont donc beaucoup de caché et d'avantages personnels, ainsi que les plus évidents que l'on ne peut pas vraiment l'expliquer à quelqu'un jusqu'à ce qu'ils le font eux-mêmes.
Mais, ignorant qu', voici ma tentative!
Tests unitaires permet de faire de grands changements à code rapidement. Vous savez qu'il fonctionne maintenant, parce que vous venez d'exécuter les tests, quand vous faites les changements que vous devez faire, vous avez besoin pour obtenir les tests de travailler à nouveau. Cela permet d'économiser des heures.
TDD vous permet de savoir quand arrêter de codage. Vos tests vous donner la confiance que vous avez assez fait pour aujourd'hui et peut arrêter de peaufinage et de passer à autre chose.
Les tests et le code du travail, ensemble, pour atteindre un meilleur code. Votre code pourrait être mauvais /buggy. Votre TEST peut être mauvais /buggy. En TDD vous êtes bancaire sur les chances de les deux mauvais /buggy être faible. Souvent, c'est le test qui doit être réparé, mais c'est toujours un bon résultat.
TDD aide à l'encodage de la constipation. Lorsqu'ils sont confrontés à une grande et lourde pièce de travail à venir écrire les tests vont vous faire bouger rapidement.
Tests unitaires vous aider à vraiment comprendre la conception du code, que vous travaillez sur. Au lieu d'écrire du code pour faire quelque chose, vous commencez par énumérer toutes les conditions de soumettre le code et quels résultats vous attendez de la part de qui.
Tests unitaires vous donner un retour visuel instantané, nous aimons tous le sentiment de tous ceux qui s'allume en vert lorsque nous avons fait. C'est très satisfaisant. Il est également beaucoup plus facile pour reprendre là où vous l'avez laissé après une interruption, parce que vous pouvez voir où vous avez obtenu à la prochaine lumière rouge qui a besoin de fixation.
Contrairement à la croyance populaire, les tests unitaires ne signifie pas écrire deux fois plus de code, ou de codage plus lent. C'est plus rapide et plus robuste que le codage sans tests une fois que vous avez obtenu le coup de lui. Le code de Test lui-même est généralement relativement simple et ne pas ajouter une grosse surcharge de ce que vous faites. C'est l'un vous ne croyez quand vous le faites 🙂
Je pense que c'était Fowler, qui a dit: "Imparfaite tests, souvent, sont beaucoup mieux que parfait tests qui ne sont jamais écrit à tous". Je interpréter cela comme de me donner la permission d'écrire des tests où je pense qu'ils seront plus utiles, même si le reste de ma couverture de code est malheureusement incomplète.
Bon les tests unitaires peuvent aider de document et de définir ce qu'est censé faire
Tests unitaires aider avec le code de la réutilisation. Migrer votre code et vos tests à votre nouveau projet. Modifier le code jusqu'à l'exécution des tests de nouveau.
Beaucoup de travail, je me suis impliqué n'a pas d'Unité de puits d'Essai (application web les interactions de l'utilisateur, etc.), mais même si nous sommes tous d'essai infectés dans cette boutique, et plus heureux quand nous avons eu nos tests liés. Je ne peux pas recommander l'approche fortement.
Le test unitaire est un peu comme aller à la gym. Vous savez qu'il est bon pour vous, tous les arguments de sens, de sorte que vous commencer à travailler. Il y a un rush initial, ce qui est excellent, mais après quelques jours, vous commencez à vous demander si cela en vaut la peine. Vous prenez une heure de votre journée de changer de vêtements et d'exécuter sur une roue de hamster et vous n'êtes pas sûr que vous êtes vraiment gagner autre chose que des maux de jambes et des bras.
Puis, après peut-être une ou deux semaines, tout comme la douleur s'en va, un Grand Délai commence à la date approche. Vous avez besoin de passer chaque heure de réveil à essayer d'obtenir des "utile" le travail effectué, de sorte que vous découpez substances étrangères, comme aller à la salle de gym. Vous sortez de l'habitude, et par le temps, Big Limite d'inscription est terminée, vous êtes de retour à la case départ. Si vous parvenez à le faire revenir à la salle de gym à tous, vous vous sentez juste que les maux que vous avez été la première fois que vous êtes allé.
Vous faire un peu de lecture, pour voir si vous faites quelque chose de mal. Vous commencez à ressentir un peu d'irrationnel, malgré l'égard de l'ensemble de l'ajustement, les gens heureux vantant les vertus de l'exercice. Vous vous rendez compte que vous n'avez pas beaucoup de choses en commun. Ils n'ont pas de lecteur de 15 minutes de la route pour aller à la salle de gym; il y en a un dans leur immeuble. Ils n'ont pas à discuter avec quelqu'un sur les bienfaits de l'exercice; c'est juste quelque chose que tout le monde le fait et accepte aussi important. Lors d'une Grande approche de la date Limite, ils ne sont pas dit que l'exercice est inutile, pas plus que votre patron vous demande d'arrêter de manger.
Donc, pour répondre à votre question, le Test Unitaire est généralement en vaut la chandelle, mais le montant de l'effort requis ne va pas être la même pour tout le monde. Les Tests unitaires peuvent exiger une énorme quantité d'effort si vous travaillez avec des spaghetti code de base dans une société qui n'a pas fait valeur de la qualité du code. (Beaucoup de gestionnaires de chanter les Tests Unitaires de louanges à, mais cela ne signifie pas qu'ils vont en tenir pour elle quand il le faut.)
Si vous essayez d'introduire des Tests Unitaires dans votre travail et ne voient pas le soleil et les arcs-en-ciel que vous avez été amené à croire, ne vous blâmez pas. Vous pourriez avoir besoin de trouver un nouveau travail pour vraiment faire les Tests Unitaires du travail pour vous.
Meilleur moyen de convaincre les... trouvez un bug, écrire un test unitaire pour elle, corriger le bug.
Ce bug est peu probable à apparaître à nouveau, et vous pouvez le prouver avec votre test.
Si vous faites cela assez, d'autres vont se rattraper rapidement.
Tout le monde ici va pile sur beaucoup de raisons de le bleu pourquoi le test unitaire est bon. Cependant, je trouve que souvent le meilleur moyen de convaincre quelqu'un de quelque chose est à écouter à leur argument et d'y répondre point par point. Si vous écouter et de les aider à verbaliser leurs préoccupations, vous pouvez vous adresser à chacun et peut-être de les convertir à votre point de vue (ou à tout le moins, de les laisser sans une jambe de se tenir debout). Qui sait? Peut-être qu'ils vont vous convaincre pourquoi les tests unitaires ne sont pas appropriés pour votre situation. Peu probable, mais possible. Peut-être que si vous postez leurs arguments contre les tests unitaires, nous pouvons vous aider à identifier les contre-arguments.
Il est important d'écouter et de comprendre les deux côtés de l'argument. Si vous essayez d'adopter des tests unitaires avec trop de zèle, sans égard aux préoccupations de la population, vous vous retrouverez avec une guerre de religion (et sans doute vraiment de valeur les tests unitaires). Si vous l'adopter lentement et commencer par l'appliquer où vous verrez le plus d'avantages à moindre coût, vous pourriez être en mesure de démontrer la valeur de l'unité des tests et ont une meilleure chance de convaincre les gens. Je me rends compte que ce n'est pas aussi facile qu'il y paraît, il nécessite généralement un certain temps et d'attention à la métrique de l'artisanat un argument convaincant.
Les tests unitaires sont un outil, comme n'importe quel autre, et doit être appliquée de telle manière que les avantages (la capture des bugs) l'emportent sur les coûts (l'effort de les écrire). Ne les utilisez pas si/quand elles ne font pas de sens et n'oubliez pas qu'ils ne sont qu'une partie de votre arsenal d'outils (par exemple, des inspections, des assertions, des analyseurs de code, méthodes formelles, etc). Ce que je dis à mes développeurs est-ce:
Ils peuvent ignorer la rédaction d'un essai d'une méthode si ils ont un bon argument pourquoi il n'est pas nécessaire (par exemple, trop simple pour être la peine ou trop difficile d'être en vaut la peine) et comment la méthode sera autrement vérifiés (par exemple, inspection, des assertions, des méthodes formelles, interactive/tests d'intégration). Ils ont besoin de considérer que certaines vérifications, comme les inspections et les preuves formelles sont fait à un point dans le temps et doivent ensuite être répété à chaque fois que la production de changements de code, alors que les tests unitaires et les assertions peuvent être utilisés comme tests de régression (écrite une fois exécuté à plusieurs reprises par la suite). Parfois, je suis d'accord avec eux, mais le plus souvent je vais débat quant à savoir si une méthode est vraiment trop simple ou trop difficile de test de l'unité.
Si un développeur a fait valoir qu'une méthode semble trop simple à l'échec, n'est-il pas la peine de prendre le 60 secondes nécessaires à l'écriture d'un simple 5-ligne de test unitaire pour elle? Ces 5 lignes de code sera exécuté chaque nuit (vous ne les nightly builds, non?) pour l'année prochaine ou plus et être en vaut la peine même si seulement une fois qu'il arrive à attraper un problème qui peut avoir pris plus de 15 minutes ou plus, afin d'identifier et de débogage. D'ailleurs, à la rédaction facile des tests unitaires grimper le nombre de tests unitaires, ce qui rend les développeurs semblent bonnes.
D'autre part, si un développeur a fait valoir qu'une méthode semble trop difficile de test de l'unité (pas la peine de l'important effort requis), peut-être que c'est une bonne indication que la méthode doit être divisé ou refait le test le plus facile. Généralement, ce sont des méthodes qui s'appuient sur inhabituelle des ressources comme des singletons, à l'heure actuelle, ou ressources externes comme une base de données ensemble de résultats. Ces méthodes ont généralement besoin d'être refait dans une méthode qui est la ressource (par exemple, les appels getTime()) et une méthode qui prend de la ressource comme un argument (par exemple, prend le timestamp comme paramètre). Je les fais sauter les tests de la méthode qui récupère la ressource et ils, au lieu d'écrire un test unitaire pour la méthode qui prend maintenant la ressource comme un argument. Généralement, ce qui rend l'écriture de l'unité de test plus simple et donc la peine d'écrire.
Le développeur doit tracer une ligne dans le sable" dans quelle est l'étendue de leurs tests unitaires doivent être. Plus tard dans le développement, chaque fois que nous trouvons un bug, ils doivent déterminer si la plus complète de tests unitaires aurait pris le problème. Si oui, et si de tels bugs de la récolte jusqu'à plusieurs reprises, ils ont besoin de déplacer la "ligne" à l'égard de l'écriture plus complète de tests unitaires dans l'avenir (en commençant par de l'ajout ou de l'expansion de l'unité de test pour le bug actuel). Ils doivent trouver le juste équilibre.
Il est important de réaliser les tests unitaires ne sont pas une solution miracle, et il n'y est une telle chose comme trop de tests unitaires. Sur mon lieu de travail, chaque fois que nous faisons une des leçons apprises, je inévitablement entendre "nous avons besoin de plus d'écrire des tests unitaires". Gestion hoche la tête en accord, en raison de sa fait ramoner dans leurs têtes que les "tests unitaires" == "bon".
Cependant, nous avons besoin de comprendre l'impact de la "plus de tests unitaires". Un développeur peut écrire seulement ~N de lignes de code d'une semaine et vous avez besoin de comprendre à quel pourcentage de ce code doit être l'unité de code de test vs code de production. Lâche le lieu de travail peut avoir 10% du code, tests unitaires et 90% du code comme le code de production, résultant en un produit avec beaucoup de (quoique très buggy) les fonctions (pense que MS Word). D'autre part, une stricte boutique avec plus de 90% des tests unitaires et de 10% de la production du code aura un rocher solide produit avec très peu de fonctionnalités (pensez à "vi"). Vous pouvez ne jamais écouter les rapports sur le dernier produit de s'écraser, mais qui a probablement autant le faire avec le produit ne vendent pas très bien d'autant qu'il a à voir avec la qualité du code.
Pire encore, peut-être la seule certitude dans le développement de logiciels est que "le changement est inévitable". Assumer la stricte boutique (90% des tests unitaires/10% de la production de code) crée un produit qui a exactement 2 caractéristiques (en supposant que 5% de la production de code == 1 fonction). Si le client arrive et modifications 1 les fonctions, alors que le changement des ordures de 50% du code (45% de tests unitaires et de 5% de la production de code). Le laxisme de la boutique (10% des tests unitaires/90% de la production de code) est un produit avec 18 fonctions, aucun de qui fonctionnent très bien. Leur client entièrement refait les exigences pour 4 de leurs caractéristiques. Même si le changement est 4 fois plus grande, seulement la moitié de la base de code devient saccagé (~25% = ~4.4% des tests unitaires + 20% de la production de code).
Mon point est que vous avez à communiquer que vous comprenez que l'équilibre entre trop et trop peu de choses de tests unitaires - essentiellement que vous avez pensé à travers les deux côtés de la question. Si vous pouvez convaincre vos pairs et/ou de votre gestion, vous gagner en crédibilité et peut-être avoir une meilleure chance de gagner plus.
J'ai joué avec les tests unitaires d'un certain nombre de fois, et je suis encore à être convaincu qu'il vaut la peine compte tenu de ma situation.
Je développe des sites web, où une grande partie de la logique implique la création, de la récupération ou de mise à jour des données dans la base de données. Quand j'ai essayé de "se moquer de" la base de données pour l'unité des fins de test, il a obtenu très salissant et semble un peu inutile.
Quand j'ai écrit les tests unitaires autour de la logique d'entreprise, il n'a jamais vraiment aidé moi dans le long terme. Parce que j'ai largement travailler sur des projets seul, j'ai tendance à connaître intuitivement les zones de code peut être affecté par quelque chose que je suis en train de travailler sur, et je teste ces zones manuellement. Je tiens à fournir une solution à mon client le plus rapidement possible, des tests unitaires et semble souvent une perte de temps. J'ai la liste des tests manuels et de marcher à travers moi-même, en cochant comme je vais.
Je peux voir qu'il peut être bénéfique quand une équipe de développeurs travaillent sur un projet et la mise à jour des uns et des autres code, mais même alors, je pense que si les développeurs sont d'une haute qualité, une bonne communication et bien écrit le code doit souvent être suffisant.
Une grande chose au sujet des tests unitaires, c'est qu'ils servent de documentation de la façon dont votre code est censé se comporter. De bons tests sont un peu comme une implémentation de référence, et ses coéquipiers peuvent regarder pour voir comment intégrer leur code avec les vôtres.
De tests unitaires vaut bien l'investissement initial. Depuis le début de l'utilisation de l'unité de test il y a quelques années, j'ai trouvé de réels avantages:
faire des changements de code (il n'y a rien
comme la lueur chaleureuse de voir le code
de travail ou d'exploser à chaque fois qu'un changement est
fait)
d'autres membres de l'équipe (et vous-même en
six mois de temps..)
Des extraits de Code peut être d'une grande aide dans la réduction de la surcharge de la création des tests. Il n'est pas difficile de créer des modèles qui permettent la création d'un contour de classe et associé à une unité de montage de test en secondes.
Vous devez tester aussi peu que possible!
sens, vous devriez écrire juste assez de tests unitaires pour révéler l'intention. Cela devient souvent passées sous silence. Les tests unitaires coûts vous. Si vous apportez des modifications et vous devez changer de tests, vous serez moins agile. Gardez les tests unitaires court et doux. Puis ils ont beaucoup de valeur.
Trop souvent, je vois beaucoup de tests qui ne peut se briser, sont gros et maladroit et n'offrent pas beaucoup de valeur, ils finissent par vous ralentir.
Je ne vois pas cela dans les autres réponses, mais une chose que j'ai remarqué, c'est que je pourrais debug donc beaucoup plus rapide. Vous n'avez pas besoin de forer vers le bas par le biais de votre application avec juste la bonne séquence d'étapes à suivre pour obtenir le code de votre fixation, seulement pour trouver que vous avez fait un boolean erreur et le besoin de faire tout cela de nouveau. Avec une unité de test, vous pouvez tout simplement directement dans le code, vous êtes le débogage.
[J'ai un point à préciser que je ne peux pas le voir ci-dessus]
"Tous les tests unitaires, ils n'ont pas nécessairement conscience que cela FAIT"
Pense, de vous écrire une fonction qui peut-être analyser une chaîne de caractères et de supprimer les caractères de nouvelle ligne. Comme un débutant développeur vous pouvez soit exécuter quelques cas par l'intermédiaire de la ligne de commande de mise en œuvre dans Main() ou vous whack ensemble visuel frontal avec un bouton, la cravate de votre fonction pour un couple de zones de texte et d'un bouton et de voir ce qui se passe.
Qui est l'unité de test de base et mal ficelé, mais vous tester le morceau de code pour un certain nombre de cas.
Vous écrivez quelque chose de plus complexe. Il jette les erreurs lorsque vous vous débarrassez de quelques cas par des (tests unitaires) et de débogage dans le code et d'oligo-si. Vous regardez les valeurs que vous allez à travers et à décider s'ils sont bons ou mauvais. C'est l'unité de test à un certain degré.
Tests unitaires ici, c'est vraiment prenant ce comportement, formalisant dans une structure de motif et de l'enregistrer, de sorte que vous pouvez facilement ré-exécuter ces tests. Si vous écrivez un "bon" scénario de test unitaire plutôt qu'à la main de test, il prend la même quantité de temps, ou peut-être moins que vous obtenez expérimenté, et vous l'avez à disposition pour le répéter encore et encore
Pendant des années, j'ai essayé de convaincre les gens qu'ils ont besoin de l'écrire unité de tester leur code. Si ils ont écrit les premiers tests (comme en mode TDD) ou après qu'ils ont codé la fonctionnalité, j'ai toujours essayé de les expliquer tous les avantages d'avoir des tests unitaires pour le code. À peine quelqu'un est en désaccord avec moi. Vous ne pouvez pas être en désaccord avec quelque chose qui est évidente, et toute personne intelligente pourront voir les avantages de l'unité de test et TDD.
Le problème avec les tests unitaires, c'est qu'il nécessite un changement de comportement, et il est très difficile de changer le comportement des gens. Avec les mots, vous obtiendrez beaucoup de gens d'accord avec vous, mais vous ne pouvez pas voir beaucoup de changements dans la manière de faire les choses.
Vous devez convaincre les gens par la pratique. Votre succès personnel sera elle plait plus de personnes que tous les arguments que vous pourriez avoir. Si ils voient que vous ne parlons pas seulement de l'unité de test ou TDD, mais vous faites ce que vous prêchez, et vous avez du succès, les gens vont essayer de vous imiter.
Vous devez également assumer un rôle de chef de file parce que personne n'écrit de test de l'unité de droit la première fois, vous devrez peut-être coach sur la façon de le faire, pour leur montrer le chemin, et les outils à leur disposition. Les aider alors qu'ils écrivent leurs premiers essais, l'examen les épreuves qu'ils écrivent sur leur propre, et de leur montrer les astuces, les expressions idiomatiques et les modèles que vous avez appris par le biais de vos propres expériences. Après un certain temps, ils vont commencer à voir les avantages de leur propre chef, et ils vont changer leur comportement pour intégrer les tests unitaires ou TDD dans leur boîte à outils.
Changements ne se produira pas plus de nuit, mais avec un peu de patience, vous pouvez atteindre votre objectif.
Une partie importante de développement piloté par les tests est souvent abstraction est l'écriture de code de tests. Il semble comme une sorte de compromis au premier abord, mais vous allez découvrir que les tests de code est aussi, finalement, modulaire, facile à entretenir et facile à lire.
Si vous avez encore besoin d'aide pour convaincre les gens de la cette est une simple présentation sur les avantages de l'unité de test.
Si votre code existant de la base de ne pas se prêter à des tests unitaires, et il est déjà en production, il peut créer plus de problèmes que de les résoudre en essayant de revoir l'ensemble de votre code afin qu'il soit l'unité-testable.
Vous pouvez être mieux de mettre les efforts vers l'amélioration de votre test d'intégration de la place. Il y a beaucoup de code qui est juste plus simple à écrire sans un test unitaire, et si de l'assurance qualité peut valider la fonctionnalité à l'encontre d'un document d'exigences, alors vous êtes fait. L'expédier.
L'exemple classique de cela dans mon esprit, c'est un SqlDataReader incorporé dans une page ASPX lié à un GridView. Le code est dans le fichier ASPX. Le SQL est dans une procédure stockée. Que pensez-vous de l'unité de test? Si la page fait ce qu'il est censé faire, si vous le redessiner en plusieurs couches si vous avez quelque chose à automatiser?
L'une des meilleures choses à propos de l'unité de test est que votre code sera plus facile à tester comme vous le faites. Préexistante code créé sans tests est toujours un défi, parce que depuis qu'ils ne sont pas destinés à être l'unité testée, il n'est pas rare d'avoir un haut niveau de couplage entre les classes, dur-à-configurer les objets à l'intérieur de votre classe - comme un e-mail de l'envoi de service de référence et ainsi de suite. Mais ne vous laissez pas vous faire tomber! Vous verrez que l'ensemble de votre conception de code va devenir meilleur que vous commencez à écrire unité-tests, et plus vous test, plus confiants que vous allez devenir, à faire encore plus de modifications sans crainte de rupture de l'application ou de l'introduction de bugs.
Il y a plusieurs raisons à l'unité-tester votre code, mais au fil du temps, vous verrez que le temps que vous économisez sur les tests est l'une des meilleures raisons de le faire. Dans un système que j'ai juste remis, j'ai insisté sur le fait de faire automatisée de tests unitaires, malgré les demandes que j'avais de passer beaucoup plus de temps à faire les tests que j'ai serait de tester le système manuellement. Avec tous mes tests unitaires fait, j'ai couru plus de 400 cas de test en moins de 10 minutes, et à chaque fois j'ai eu à faire une petite modification dans le code, tout ce qu'il m'a fallu pour être sûr que le code était toujours sans bugs a dix minutes. Pouvez-vous imaginer le temps qu'on passerait de les exécuter plus de 400 cas de test à la main?
Quand il s'agit de tests automatisés - être c'unité d'essais ou de tests d'acceptation - tout le monde pense que c'est un gaspillage d'efforts de code que vous pouvez le faire manuellement, et parfois, il est vrai - si vous envisagez d'exécuter vos tests en une seule fois. La meilleure partie du test automatisé est que vous pouvez les exécuter à plusieurs reprises, sans effort, et après la deuxième ou la troisième terme, le temps et les efforts que vous avez gaspillée est déjà payé.
Un dernier conseil serait de ne pas seulement l'unité de tester votre code, mais de commencer à faire de test de la première (voir TDD et BDD pour plus d')
Les tests unitaires sont également particulièrement utile quand il s'agit de refactoring ou la ré-écriture d'une pièce d'un code. Si vous avez une bonne unité de couverture de tests, vous pouvez restructurer avec confiance. Sans les tests unitaires, il est souvent difficile de s'assurer de la vous n'avez rien cassé.
En court - oui. Ils sont une valeur de chaque once d'effort... à un point. Les Tests sont, à la fin de la journée, encore de code, et bien comme typiques du code de la croissance, de vos tests auront éventuellement besoin d'être remaniée afin d'être facile à entretenir et durable. Il y a une tonne de PIÈGES! quand il s'agit de tests unitaires, mais man oh man oh man, rien, et je veux dire que RIEN autorise un développeur de faire des changements avec plus de confiance qu'un riche ensemble de tests unitaires.
Je suis en train de travailler sur un projet.... c'est un peu TDD, et nous avons la majorité de nos affaires les règles de encapuslated que les tests... nous avons environ 500 tests unitaires droit maintenant. Cette dernière itération, j'ai dû réorganiser notre source de données et le fonctionnement de notre application de bureau interfaces avec cette source de données. M'a fallu quelques jours, tout le temps, j'ai juste continué à exécuter des tests unitaires pour voir ce que j'ai cassé et réparé. Faire un changement; créer et exécuter vos tests; corriger ce que vous avez cassé. Laver, Rincer, Répéter au besoin. Ce qui aurait traditionnellement pris des jours de garantie de la qualité et de bateaux charges de stress était plutôt une courte et agréable expérience.
Prep à l'avant, un peu d'effort supplémentaire, et il paie 10 fois plus tard, quand vous devez commencer à dicking autour avec les principales caractéristiques/fonctionnalités.
J'ai acheté ce livre, c'est une Bible de xUnit Tests de connaissances - tis probablement l'un des plus référencés livres sur mon étagère, et je la consulte tous les jours: texte du lien
Parfois moi-même ou un de mes collègues va passer une couple d'heures à aller au fond de quelque peu obscur de bug et une fois la cause du bug est trouvé que 90% du temps, ce code n'est pas testé unitaire. L'unité de test n'existe pas, car le dev est de prendre des raccourcis pour gagner du temps, mais perd cette et plus de débogage.
La petite quantité de temps pour écrire un test unitaire peut économiser des heures de débogage futures.
Je travaille en tant que maintenance engineer d'un mal documenté, terrible et grosse base de code. Je souhaite que les gens qui ont écrit le code avait écrit les tests unitaires.
Chaque fois que je fais une modification et mise à jour de la production de code que j'ai peur que je pourrait introduire un bug pour n'avoir pas considéré comme une condition.
Si ils ont fait le test de faire des changements à la base de code serait plus facile et plus rapide.(en même temps la base de code serait dans un meilleur état)..
Je pense que les tests unitaires prouver beaucoup utile lors de la rédaction de l'api ou les cadres qui ont pour durer de nombreuses années et à être utilisé/modifié/a évolué par d'autres que l'origine des codeurs.
Le Test unitaire est certainement en valeur l'effort. Malheureusement, vous avez choisi une difficile (mais malheureusement commun) scénario dans lequel la mettre en œuvre.
Le meilleur profit de l'unité de test que vous obtenez est lors de l'utilisation du sol sur quelques, de sélectionner, de petits projets que j'ai eu la chance d'écrire mes tests unitaires avant de mettre en application mes cours (l'interface était déjà terminée à ce stade). Avec le bon de tests unitaires, vous permettra de trouver et de corriger les bugs dans vos classes alors qu'ils sont encore à leurs balbutiements et pas n'importe où près de ce système complexe qu'ils vont sans doute s'intégrer dans l'avenir.
Si votre logiciel est solidement orientée objet, vous devriez être en mesure d'ajouter des tests unitaires au niveau de la classe sans trop d'effort. Si vous n'êtes pas chanceux, vous devriez toujours essayer d'intégrer les tests unitaires partout où vous le pouvez. Assurez-vous que lorsque vous ajoutez de nouvelles fonctionnalités que les pièces sont bien définis avec des interfaces claires et vous trouverez des tests unitaires qui rend votre vie plus facile.
Quand vous avez dit, "notre base de code ne se prête pas facilement à un test" est le premier signe d'une odeur de code. L'écriture de Tests Unitaires moyens en général, vous écrivez le code différemment, afin de rendre le code plus testable. C'est une bonne chose à mon avis que ce que j'ai vu au fil des ans dans l'écriture de code que j'ai eu à écrire des tests, il m'a forcé à mettre de l'avant une meilleure conception.
Je ne sais pas. Beaucoup d'endroits ne pas faire de test de l'unité, mais la qualité du code est bon. Microsoft ne l'unité de test, mais Bill Gates a donné un écran bleu lors de sa présentation.
J'ai écrit un très grand billet de blog sur le sujet. J'ai trouvé que les tests unitaires à elle seule ne vaut pas le travail et obtient habituellement coupé lorsque l'échéance se rapprocher.
Au lieu de parler des tests unitaires à partir du "test-après la" vérification " de point de vue, nous devrions nous pencher sur la vraie valeur trouvée lorsque vous vous apprêtez à écrire une spécification/test/idée avant la mise en œuvre.
Cette idée simple a changé ma façon d'écrire le logiciel et je ne voudrais pas revenir à "l'ancienne" façon.
Comment tout d'abord un test de développement a changé ma vie
Oui - Tests Unitaires en vaut certainement la peine, mais vous devez savoir qu'il n'est pas une balle d'argent. Le Test unitaire est un travail et vous aurez à travailler pour garder le test de mise à jour et pertinents que les changements de code, mais la valeur proposée est la valeur de l'effort que vous avez à faire. La capacité de refactoriser avec l'impunité est un énorme avantage que vous pouvez toujours valider les fonctionnalités par l'exécution de vos tests après tout changement de code. L'astuce est de ne pas avoir trop accroché sur exactement l'unité de travail, vous effectuez le test ou la façon dont vous êtes l'échafaudage des exigences de test et quand un test unitaire est vraiment un test fonctionnel, etc. Les gens vont argumenter sur ce genre de choses pendant des heures sur la fin et la réalité est que tout les tests que vous faites votre écriture de code est mieux que de ne pas le faire. L'autre axiome, c'est la qualité et non la quantité - j'ai vu du code des bases de 1000 de test qui sont essentiellement vide de sens que le reste n'a pas vraiment de tester quelque chose d'utile ou quoi que ce soit de domaine spécifique, comme les affaires et les règles de la domaine particulier. J'ai aussi vu des bases de codes avec 30% de couverture de code, mais les tests ont été pertinente, utile et vraiment impressionnant comme ils ont testé les fonctionnalités de base de ce code a été écrit et exprimé la façon dont le code doit être utilisé.
Un de mes trucs favoris lors de l'exploration de nouveaux cadres ou des bases de codes est-à-unitaires-tests pour "elle", à découvrir comment les choses fonctionnent. C'est un excellent moyen d'en apprendre plus à propos de quelque chose de nouveau au lieu de la lecture d'un sèche doc 🙂
Je suis récemment allé à travers l'expérience exactement la même dans mon milieu de travail et a trouvé la plupart d'entre eux connaissaient les avantages théoriques, mais a dû être vendus sur les avantages pour eux spécifiquement, donc voici les points que j'ai utilisé (avec succès):
et le grand...
J'ai découvert ATS il y a quelques années, et ont, depuis, écrit tous mes projets animal à l'aide. J'ai estimé qu'il faut à peu près le même temps à l'ATS un projet qu'il faut pour cowboy ensemble, mais j'ai une telle augmentation de la confiance dans le produit final que je ne peux pas aider un sentiment d'accomplissement.
J'ai aussi l'impression que ça s'améliore mon style de conception (beaucoup plus interface orientée dans le cas où j'ai besoin de se moquer des choses ensemble) et, comme le vert post en haut écrit, elle contribue à la "codage de la constipation": quand vous ne savez pas quoi écrire, ou vous avez une tâche ardue en face de vous, vous pouvez écrire de petits.
Enfin, je trouve que de loin l'application la plus utile du TDD est dans le débogage, si seulement parce que vous avez déjà développé un interrogatoire cadre avec lequel vous pouvez prod le projet d'élaboration du bug dans un modèle de mode.
Une chose que personne n'a encore mentionné est l'engagement de tous les développeurs pour exécuter et mettre à jour les tests automatisés existants. Tests automatisés qui vous revenir et de trouver brisé à cause de la nouvelle de développement perd beaucoup de la valeur et de faire des tests automatisés vraiment douloureux. La plupart de ces tests ne seront pas en indiquant bugs car le développeur a testé le code manuellement, de sorte que le temps passé à la mise à jour est juste déchets.
Convaincre les sceptiques, pour ne pas détruire le travail que les autres sont en train de faire sur l'unité de test est beaucoup plus important pour l'obtention de la valeur de l'essai et peut-être plus facile.
Passer des heures à mettre à jour les tests qui a cassé à cause de nouvelles fonctionnalités à chaque fois que vous mettez à jour à partir du référentiel n'est ni productif ni agréable.
Si vous utilisez NUnit un simple mais efficace de démonstration consiste à exécuter NUnit propre suite de test(s) en face d'eux. Voir une vraie suite de test en donnant un code de base d'une séance d'entraînement est une image vaut mille mots...
Tests unitaires aide beaucoup dans des projets qui sont plus grandes que n'importe quel développeur peut tenir dans leur tête. Ils vous permettent d'exécuter des tests unitaires avant d'archivage et de découvrir si vous avez cassé quelque chose. Cela coupe un beaucoup sur les instances d'avoir à s'asseoir et à se tourner les pouces en attendant que quelqu'un d'autre pour corriger un bug ils ont vérifié dans, ou d'aller les tracas de retour de leur changement de sorte que vous pouvez obtenir un peu de travail. Il est également extrêmement utiles dans de refactoring, de sorte que vous pouvez être sûr que la refonte du code de passe tous les tests que le code d'origine n'.
Avec l'unité de la suite de tests, on peut apporter des modifications de code tout en laissant le reste des fonctionnalités intacte. C'est un grand avantage. Utilisez-vous du test de l'Unité sutie et de régression, test de suite quand vous avez fini de codage nouvelle fonctionnalité.
Je suis d'accord avec le point de vue à l'opposé de la majorité des gens d'ici:
C'est OK de ne Pas Écrire des Tests Unitaires
Surtout prototype-lourds de programmation (IA par exemple) est difficile à combiner avec des tests unitaires.
De mon expérience, les tests unitaires et les tests d'intégration sont un "must have" dans un complexe environnements logiciels.
Afin de convaincre les développeurs de votre équipe pour écrire des tests unitaires, vous pourriez envisager l'intégration de l'unité de test de l'analyse de régression dans votre environnement de développement (par exemple, dans votre quotidien de processus de construction).
Une fois que les développeurs savent que si une unité de test échoue, ils n'ont pas à passer autant de temps sur le débogage à trouver le problème, ils seraient plus incités à les écrire.
Voici un outil qui fournit des fonctionnalités de ce type:
test de l'unité de l'analyse de régression de l'outil
La seule chose à garder à l'esprit à propos de l'unité de test est que c'est un confort pour le développeur.
En revanche, les tests fonctionnels sont pour les utilisateurs: chaque fois que vous ajoutez un test fonctionnel, vous testez quelque chose que l'utilisateur voit. Lorsque vous ajoutez une unité de test, vous êtes juste faire de votre vie plus facile en tant que développeur. C'est un peu un luxe dans ce domaine.
Garder cette dichotomie à l'esprit lorsque vous avez un choix à faire entre l'écriture d'une unité ou d'un test fonctionnel.
Le point de l'ensemble de l'unité de contrôle est de rendre le test plus facile. Il est automatisé. "make test" et vous avez terminé. Si l'un des problèmes que vous rencontrez est difficile de tester le code, c'est la meilleure raison de tous les tests unitaires.
Lorsque vous manuellement le logiciel de test, vous avez normalement une petite série de tests/actions que vous utilisez. Éventuellement, vous allez transformer automatiquement vos données en entrée ou d'actions de sorte que vous naviguez-vous autour de problèmes connus. Les tests unitaires doivent être là pour vous rappeler que les choses ne fonctionnent pas correctement.
Je recommande d'écrire les tests avant le code, l'ajout de nouveaux tests/de données pour faire évoluer les fonctionnalités du code principal!
Comme un étudiant en physique, je suis très motivé à fait prouver que mon code fonctionne comme il est censé le faire. Vous de prouver cette logique, qui de difficulté augmente de manière considérable à la mise en œuvre devient de plus en plus complexes, ou vous pouvez faire une (aussi près que possible) de la preuve empirique de la fonction par le biais de bons tests.
Si vous n'avez pas à fournir de preuve logique de fonction, vous devez le tester. La seule alternative, c'est-à-dire "je pense que le code fonctionne...."
Un des avantages de l'unité de test est la prévisibilité.
Avant les tests unitaires j'aurais pu prédire à un grand degré de précision combien de temps il faudrait pour coder quelque chose, mais pas de la façon dont combien de temps j'aurais besoin de le déboguer.
Ces jours-ci, puisque je ne peux plan quels sont les tests que je vais écrire, je sais combien de temps de codage va prendre, et à la fin de l'encodage, le système est déjà réglé! Cela améliore la prévisibilité du processus de développement, ce qui élimine beaucoup de pression, mais conserve encore toute la joie!!.
Juste aujourd'hui, j'ai dû changer une classe pour laquelle un test unitaire qui a été écrit précédemment.
Le test lui-même est bien écrit et inclus des scénarios de test que je n'avais même pas pensé.
Heureusement, tous les tests passés, et mon changement a été rapidement vérifié et mis dans l'environnement de test avec confiance.
@George Stocker "Malheureusement, notre base de code ne se prête pas à tester facilement.". Tout le monde est d'accord qu'il y a des avantages pour les tests unitaires, mais il semble que pour ce code de base, les coûts sont élevés. Si les coûts sont plus importants que les avantages, alors pourquoi devraient-ils être enthousiaste à ce sujet? Écoutez vos collègues de travail; peut-être que pour eux, la perception de la douleur de l'unité de test est supérieure à la valeur perçue de tests unitaires.
Spécifiquement, essayez de prendre de la valeur dès que possible, et certains se sentent-goodery "xUnit est vert" de la valeur, mais le code propre que les utilisateurs et les responsables de la valeur. Peut-être que vous avez à mandat de tests unitaires pour une itération, puis en discuter si cela en vaut la peine ou non.
Faire les premières choses que vous ne testent pas lié à l'unité de test. Je travaille principalement en Perl, ce sont donc Perl-des exemples précis, mais vous pouvez vous adapter.
Est-ce que chaque module de chargement et de compiler correctement? En Perl, c'est une question de la création d'un Foo.t pour chaque Foo.h dans la base de code qui n':
Est tout le POD (Plain Ol' Documentation) mis en forme correctement? Utilisez le Test::Pod pour valider la validité de la mise en forme de tout le POD dans tous les fichiers.
Vous ne pouvez pas pense que ce sont de grandes choses, et ils ne le sont pas, mais je peux vous garantir attire la pâtée. Lors de ces tests s'exécutent une fois une heure, et il attrape quelqu'un est prématuré de s'engager, vous aurez des gens dire "Hey, c'est assez cool."
Qui êtes-vous essayer de les convaincre? Ingénieurs ou manager? Si vous essayez de convaincre votre ingénieur de co-travailleurs, je pense que votre meilleur pari est de faire appel à leur désir de faire de haute qualité morceau de logiciel. Il existe de nombreuses études qui montrent qu'il trouve des bugs, et si ils se soucient de faire un bon travail, qui doit être suffisant pour eux.
Si vous essayez de convaincre la direction, vous aurez probablement à faire une sorte de coût/bénéfice raisonnement en disant que le coût des défauts qui ne soit pas détectée est supérieure au coût de la rédaction de tests. Assurez-vous d'inclure intagable coûts trop, tels que la perte de confiance des clients, etc.
Unité de test vous aider à vous libérer de logiciels avec moins de bugs tout en réduisant les coûts de développement global. Vous pouvez cliquer sur le lien pour en savoir plus sur la avantages des tests unitaires
C'est très .Net-centric, mais personne n'a essayé Pex?
J'étais extrêmement sceptique jusqu'à ce que j'ai essayé - et wow, quelle performance. Avant j'ai pensé: "je ne vais pas être convaincu par ce concept jusqu'à ce que je comprends de ce qu'est réellement faire de bénéficier de moi". Il a pris une course unique pour moi de changer mon esprit et de dire "je n'ai pas soins comment vous savez qu'il y a le risque d'une exception irrécupérable, mais il n' est et maintenant je sais que j'ai à traiter avec elle"
Peut-être le seul inconvénient de ce comportement est qu'il va marquer tout et vous donner un délai de six mois carnet de commandes. Mais, si vous aviez le code de la dette, vous avez toujours eu le code de la dette, vous ne le savais pas. Raconter un MP il y a un potentiel de deux cent mille points de défaillance lors de l'avant vous étiez au courant de quelques dizaines est une mauvaise perspective, ce qui signifie qu'il est essentiel que le concept est explique d'abord.
Le Test unitaire est une de la plupart des méthodes adoptées pour la haute qualité de code. Sa contribution à un plus stable, indépendant et documenté code est bien prouvé . Code de test unitaire est considérée et traitée comme une partie intégrante de votre référentiel, et en tant que telle, exige le développement et la maintenance. Cependant, les développeurs ont souvent face à une situation où les ressources investies dans les tests unitaires où pas aussi fructueux que l'on pourrait attendre.
Dans un monde idéal, chaque méthode nous code disposent d'une série de tests couvrant son code et de le valider l'exactitude. Cependant, le plus souvent en raison de contraintes de temps nous ignorer certains tests ou d'écrire de piètre qualité. Dans cette réalité, tout en gardant à l'esprit la quantité de ressources investies dans les tests unitaires de développement et de maintenance, il faut se demander à lui-même, étant donné le temps disponible, le code qui méritent d'essais le plus? Et à partir de l'existant, des tests, des tests sont en fait la peine de les garder et de les maintenir? Voir ici
Unité des travaux d'essais pour le contrôle de qualité les gars ou de vos gestionnaires, pas pour vous; il est donc certainement pas la peine.
Vous devriez vous concentrer sur l'écriture de code correct (quoi que cela signifie), pas de cas de test. Laisser les autres gars s'inquiéter de ces.