50 votes

Utilisez-vous vraiment des tests unitaires?

J'ai participé à de nombreux projets, anciens et nouveaux, et l'un des points communs est que pratiquement aucun d'entre eux n'a eu recours au test unitaire. Je préfère l’utiliser, mais souvent le client n’est pas prêt à payer pour cela, et supposons que le code fonctionne comme il se doit.

Alors, utilisez-vous des tests unitaires dans vos projets ou utilisez-vous vos compétences en matière de codage?

71voto

Ken Points 23619

L'utilisation de tests unitaires est une compétence de codage.

Je trouve que cela ajoute très peu de temps au codage. En plus de cela, le code produit a tendance à être beaucoup plus facile à comprendre et à refactoriser, avec une réduction considérable du temps de maintenance.

Une discussion complète des avantages ici: le test unitaire en vaut-il la peine?

37voto

Nicholas Piasecki Points 13681

Je vais être honnête. J'ai récemment commencé à écrire des tests unitaires, et quand je reviens à modifier une ancienne DLL qui est de mes mauvais jours, je vais courber l'échine et d'écrire des tests unitaires pour l'obtenir près de 100% de couverture de code. Je dis "quasi" car les derniers pour cent peut être difficile à obtenir en raison de la façon dont le code est structuré, qu'il n'a pas les moqueries ou les tests unitaires dans l'esprit (ce qui arrive beaucoup avec les classes abstraites ou les classes de P/Invoke en code natif). Et bien que je comprenne que 100% de couverture de code n'est pas la même chose que 100% de la totalité du code de chemins d'exécution, j'ai trouvé que le fait d'avoir les tests il est un bon moyen de dire quand je suis en train de faire quelque chose qui va casser beaucoup de choses.

Pour être honnête, c'est probablement une des raisons pourquoi il a pris beaucoup de développeurs (dont moi-même) tellement de temps pour obtenir autour de l'adoption de tests unitaires (ne parlons pas de TDD pour l'instant).

Je ne dis pas que ce sont des raisons légitimes, mais ils ne l'ont plus ou moins de passer par ma tête, et je parie qu'ils sont allés à travers certains des vôtres:

  • Tout d'abord, il y a une pensée du genre "Oh, j'ai écrit des montagnes de code avec zéro tests, et vu que j'en suis déjà écrasé par la montagne, je n'ai pas pu le temps d'ajouter plusieurs montagnes de code de test sur le dessus de cela."

  • Deuxièmement, personne n'aime parler du fait que le classique code-run-debug cycle de fait les œuvres "assez bon" lorsque vous êtes

    • l'écriture de nouveaux codes qui ne modifie pas le comportement de l'ancien code
    • travail sur un relativement petit projet de logiciel ou un jetable utilitaire
    • le seul développeur sur un projet (vous pouvez garder plus de votre tête, jusqu'à un certain point)
  • Troisièmement, les tests unitaires sont plus faciles à apprécier quand vous êtes le maintien de code existant, et si vous êtes toujours d'écrire du nouveau code, ainsi, les avantages ne sont pas immédiatement évidentes. Quand votre travail est de fournir une utilité et ne jamais toucher à nouveau, un développeur peut voir que peu de valeur dans l'unité de test parce qu'ils ne sera probablement pas travailler sur l'utilité ou à la société par le temps d'un entretien programmeur (qui le souhaite il y a une unité de test).

  • Quatrième, le test unitaire est une innovation relativement récente. (Oh, chut ... je sais que l'idée a été autour pour toujours, en particulier dans la mission-critique et DoD applications, mais pour le "Joe le Plombier Développeur" les types comme moi? Unité de test n'a pas été mentionné du tout pendant toute ma CS de premier cycle carrière au début de la présente décennie; en 2008, j'entends c'est une exigence pour tous les projets de niveau 101. Visual Studio n'a pas encore intégré dans le framework de test jusqu'à cette année, et même alors, seulement dans l'édition professionnelle.) C'était une douce ignorance de ma part? Bien sûr, et je pense que beaucoup de gens qui code parce que c'est leur travail de jour (qui est très bien) ne sont pas au courant. Si elles le sont, alors qu'ils savent qu'ils doivent rester à jour, mais quand il s'agit de l'apprentissage d'une nouvelle méthodologie (en particulier celui qui consiste à écrire plus de code et de prendre plus d'avance de temps lorsque vous avez besoin de cette nouvelle fonctionnalité fait hier) signifie que ça va repousser. C'est le long de la queue, et dans une décennie ou ainsi de nos discussions sur les tests unitaires semble aussi pittoresque que nos murmures à propos de la programmation orientée objet permettant une nouvelle ère de développement au cours des années 1990. Heck, si j'ai commencé les tests unitaires, la fin doit être proche, parce que d'habitude je suis un idiot.

  • Cinquièmement, les tests unitaires certaines zones de code est vraiment difficile, et cela me fait peur d'oublier pour un temps. Multi-thread files d'attente d'événement, le rendu graphique, et des Interfaces utilisateur graphiques viennent à l'esprit. De nombreux développeurs s'en rendent compte et penser "bien heck, tests unitaires serait formidable pour le code de la bibliothèque, mais c'était quand la dernière fois que j'ai écrit juste une bibliothèque de classe." Il faut un certain temps à venir. À cette fin, aucun des tests unitaires ne signifie pas nécessairement mauvais code qui se trouve devant.

  • Enfin, le niveau de l'évangélisation qui vient parfois de tests unitaires avocats peut être intimidant et rebutant. Sérieusement, j'ai pensé que j'étais un crétin, parce que je n'arrivais pas à comprendre comment simuler une certaine interface et pourquoi je veux. Égoïstement, je voulais la haine de l'unité de test si c'est juste pour le fait que tout le monde n'aurait pas parlé. Pas de solution miracle.

Donc, toutes mes excuses pour la randonnée post. En résumé:

  • Je n'ai pas de test de l'unité pendant une longue période. Maintenant, je ne. Les tests unitaires sont un excellent outil, en particulier lors de l'entretien.

  • Pour les projets existants, vous pouvez au moins aller dans l'écriture d'un test que les documents d'un courant d'entrée et sa sortie. Lorsque vous modifiez que les gros gâchis de trouble dans le futur, vous serez en mesure de voir si vous avez modifié ce petit instantané. C'est aussi un excellent moyen de modifier le développement de la culture de votre entreprise.

Laissez les flammes commencent! =)

12voto

annakata Points 42676

Les tests unitaires ne peuvent pas être une réflexion après coup, c'est et doivent être quelque chose qui prend en compte votre conception. J'irais même jusqu'à dire que même si vous n'écrivez ou n'appliquez jamais un test unitaire, les avantages qu'il offre en matière de logiciels à composants stricts en valent la peine 95% du temps.

7voto

David Hall Points 17450

Après la mise sur un couple de projets qui étaient en production mais avait besoin d'une nouvelle fonctionnalité majeure, l'une de mes bas de lignes en tant que responsable technique de départ d'un projet, c'est que l'unité-les tests sont un must.

Ça coûte seulement trop de choses à essayer et de réécrire le code qui a été écrit sans les tests unitaires. Le code est toujours mal structuré (Un millier de multi-ligne web-service, le tout dans un seul code derrière quelqu'un?) et de faire des changements (même quand il est bien structuré) sans introduire des bogues est vraiment un processus douloureux.

Cela est particulièrement vrai quand un projet entre de lutte contre l'incendie mode (et ne pas avoir des tests unitaires contribue à des projets d'arriver dans cet état trop) - les clients sont grincheux, ils ont perdu la foi dans le projet, peu de choses pire que d'être le pauvre gars en essayant d'obtenir la prochaine dose sans l'introduction d'un tas de régression de bugs, et n'ayant même pas les tests unitaires.

Ces situations peuvent être facilement évités, ou du moins atténués en expliquant la valeur des tests avant. Bien sûr, il ya des situations où les tests unitaires ne sont pas si importants, mais ils sont vraiment l'exception.

Donc, oui - j'insiste sur les tests unitaires et ont passé beaucoup de temps à corriger les dégâts faits par d'autres développeurs qui comptaient sur leurs compétences de codage.

7voto

JesperE Points 34356

Écrire et exécuter des tests unitaires fait partie d'un processus de codage sain. Ce n'est pas un ajout pour lequel le client devrait avoir le choix de payer ou de ne pas payer.

La stratégie de test est un problème de codage comme un autre: quelles infrastructures de données utiliser, conventions de nommage des variables, normes de commentaire, etc.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X