(aucune "question liée" semble clouer ceci, alors voilà.) p>
Je travaille sur le code de production. En discutant pour tout ce qui n'est pas visible pour l'utilisateur est difficile à faire, parfois. Si les ventes ne peuvent pas le voir, c'est un coût externe pour eux, et ils se disputeront contre elle à moins que la grande raison ne le soit pas. P>
Combien de test unitaire est une bonne chose? Si vous testez chaque classe, chaque méthode, votre version actuelle prendra plus de temps, éventuellement beaucoup plus longtemps. Si vous ne testez rien, la maintenance à l'avenir vous mènera plus longtemps, éventuellement beaucoup plus longtemps que les bugsfixes et les nouvelles fonctionnalités causent des problèmes que vous n'avez pas prévu et que les tests de l'unité auraient attrapé. P>
Comment trouvez-vous un équilibre sain et justifiable? p>
Edit: Pour répondre à quelques questions que les personnes raisonnables ont augmenté ... p>
Les ventes ne sont pas en cours d'exécution, mais elles ont certainement une entrée et devraient avoir une entrée limitée dans un groupe. Ce sont eux qui paient les factures. S'ils dirigent complètement tout, ce serait déraisonnable, évidemment. P> Li>
Je suis certain qu'il n'y a pas de meilleure réponse, mais je suis curieux de savoir ce que les autres pensent est raisonnable. J'attends les deux extrêmes (tout! Rien!) Et beaucoup au milieu. P> Li>
Personne ne peut choisir son gestionnaire, et si une mauvaise politique sur les tests de l'unité est une décision de fabrication de marques dans une personne séjournant avec une entreprise / projet ... vous avez un lot em> plus d'options de carrière que la plupart d'entre nous, amis. :-)
i> p> li>
ol>
deuxième édition: "justifiable" est un mot important de là. Si je veux avoir du temps budgétisé / autorisé pour des tests unitaires et que je ne veux pas avoir à la faufiler, je vais devoir justifier la raison. La meilleure réponse en ce moment, pour moi, est "Test des choses qui ont été brisées auparavant", car je peux toujours justifier des politiques réactives. p>
Des idées sur la manière de justifier quelque chose de proactif? B> i> p>
15 Réponses :
Le test de l'unité automatisé apporte beaucoup à la table. Nous l'avons utilisé sur plusieurs projets. Si quelqu'un brise la construction, tout le monde sait immédiatement qui l'a fait et elle le réparait. Il est également intégré aux versions ultérieures de Visual Studio. Regarde dans p>
Développement piloté par tester P> blockQuote>
Cela devrait vous faire gagner beaucoup de temps et ne pas produire une quantité importante de frais généraux. J'espère que cela t'aides! Si oui, marquez-le. P>
Nous sommes Java et utilisez Hudson toutes les heures pour tirer le code de la version de la version, exécutez la construction et des tests sur la construction et envoyez-nous un e-mail si quelque chose est asflu. C'est un super i> addition.
imo, s'il y a suffisamment de donner à quelqu'un qui hérite du code une idée de sorte qu'ils puissent commencer à apporter des modifications, qu'il s'agisse de corriger des bogues ou de mettre en valeur, sans avoir à passer des jours à lire le code pour l'obtenir, c'est mon suggestion. p>
Ainsi, ne testez pas tout à mort, mais couvrez quelques cas courants et quelques cas de bord juste pour voir ce qui se passe si les choses ne vont pas comme étant disposées initialement. P>
Ceci, je pense, est une erreur: p>
Si vous testez chaque classe, chaque méthode, Votre version actuelle prendra plus de temps, Peut-être beaucoup plus longtemps. p> blockQuote>
Test - surtout test d'abord - améliore notre flux, nous garde dans la zone, nous accélère en réalité. Je suis au travail, parce que em> i test. Il ne faut pas tester cela qui nous ralentit. P>
Je ne teste pas les getters and Setters; Je pense que c'est inutile - surtout car ils sont générés automatiquement. Mais à peu près tout le reste - c'est ma pratique et mon conseil. P>
+1. C'est une erreur d'effacement qui a trop trop de traction.
Entièrement convenu. Bien que les tests d'écriture puissent ralentir le code initial (comme dans, les premières centaines de lignes), je constate qu'il accélère tout et tout ce qui est passé.
Qu'est-ce qui m'a été informé, c'est ceci: p>
Un autre algorithme: -) p>
mis à jour pour le commentaire, à propos de prouver l'utilité de certains tests (ceux que vous croyez fermement): p>
Je dis souvent à mes plus jeunes collègues que nous, des gens techniques (développeurs et autres), manque de communication Il ne s'agit pas de dire qu'ils ont raison de nous nier ces activités, que nous savons sont utiles. Mais nous Pour vraiment avoir un impact réellement sur le gestionnaire, vous pouvez les envoyer chaque semaine une feuille de calcul à jour (mais avec toute l'histoire, non seulement pour la semaine). Spreadsheet donne des graphismes qui donnent une compréhension immédiate et laissent le manager incroyable d'arriver aux chiffres bruts ... P>
Le problème que j'ai prouve que dans un groupe extérieur; Jouer à l'oreille va bien, mais je dois justifier ma décision, et c'est difficile i> de mesurer "retour sur investissement", car je n'ai pas les résultats des choix que je n'ai pas pris.
Commencez à créer des tests d'unités pour les domaines les plus problématiques (c.-à-d. Les sections de code qui rompent souvent et provoquent beaucoup de communication entre l'équipe de vente et les développeurs). Cela entraînera un impact immédiat et visible de l'équipe de vente et d'autres membres du personnel. P>
Puis une fois que vous avez de la crédibilité et que vous voyez la valeur, commencez à ajouter moins de zones problématiques jusqu'à ce que vous commenciez à noter que le ROI n'est plus là. p>
Bien sûr, la couverture complète est belle en théorie, mais dans la pratique, elle n'est souvent pas nécessaire. Sans parler trop coûteux. p>
Test suffisamment de temps afin que vous puissiez vous sentir à l'aise qu'un mauvais refacteur sera pris par les tests. Habituellement, c'est suffisamment pour tester la logique et le code de plomberie / câblage. Si vous avez du code qui est essentiellement getter / setters, pourquoi les tester? P>
Concernant l'opinion du gars des ventes que le test n'est pas nécessaire - Eh bien, s'ils savent beaucoup, pourquoi ne font pas le codage sanglant? P>
J'ai dit la même chose aux ventes, mais honnêtement, ils ne vont pas «l'obtenir» à moins que je ne me pose de justification derrière cela. Cela dit, les ventes ont une incitation à court terme dans la plupart des organisations que j'étais. Les développeurs ont des incitations à long terme, généralement; Il n'y a pas de bonus de paiement pour obtenir une libération plus rapide, mais il y a toujours un bonus de devoir travailler moins difficile à long terme si vous le faites plus efficacement.
Le "coût" est payé pendant le développement, lorsqu'il est beaucoup plus rentable, et le retour est réalisé pendant la maintenance continue, quand il est beaucoup plus difficile et coûteux de corriger des bugs. P>
Je fais généralement des tests unitaires sur des méthodes qui: p>
Puis, pour des méthodes plus complexes, je vais tester les tests. Pour des choses simples comme getter / setters, ou de simples trucs mathématiques, je ne teste pas. P>
Pendant la maintenance, la plupart des rapports de bogues légitimes obtiennent un test d'unité, pour assurer que le bogue spécifique ne se reproduira plus. P>
Je crois toujours à ne pas être extrême. En particulier lorsque le temps et l'énergie sont limités. Vous ne pouvez tout simplement pas tout tester. P>
Tous les procédés / fonctions n'ont pas besoin d'un test d'unité. Ce qui suit pourrait avoir besoin. (1) Celui qui n'est clairement pas complexe, comme il suffit d'obtenir / set, une petite condition ou une boucle. (2) celui qui sera appelé par d'autres méthodes qui ont des tests d'unités. P>
Avec ces deux critères, je pense que vous pouvez réduire beaucoup de ceux-ci. P>
Juste une pensée. P>
Vous TOUJOURS I> Croyez-vous pas d'être extrêmement extrême? Oh l'ironie!
Deux suggestions pour des tests unitaires minimes qui fourniront le plus "bang pour le dollar": p>
Commencez par profiler votre application pour trouver les pièces les plus couramment utilisées - assurez-vous que ce sont des tests de l'unité. Continuez à vous déplacer vers le code moins couramment utilisé. P>
Lorsqu'un bogue est corrigé, écrivez un test d'unité qui l'aurait détecté. P>
Je pourrais réellement pousser pour celui-ci; Lorsque nous trouvons un bug, le temps de budget non seulement pour le réparer, mais pour le tester afin que cela ne devienne plus un bug. Cela semble facile à argumenter; Cela pourrait être réactif au lieu de proactif, mais c'est un bon départ.
Pour les tests d'unités, ma société a adopté une assez bonne stratégie: nous avons une application à plusieurs niveaux (couche de données, couche de service / objets métier, couche de présentation). P>
Notre couche de service est le seul moyen d'interagir avec la base de données (via des méthodes dans la couche de données). P>
Notre objectif est d'avoir au moins un test d'unité de base en place pour chaque méthode de la couche de service. P>
Cela a bien fonctionné pour nous - nous ne vérifions pas toujours complètement chaque chemin de code (en particulier dans des méthodes complexes), mais chaque méthode a le ou les chemins de code les plus courants vérifiés. P>
Nos objets ne sont pas testés de l'unité, à l'exception accidentelle via les tests de la couche de service. Ils ont également tendance à être des objets «muettes» - la plupart n'ont aucune méthode que celles requises (telles que des égaux () et GetHastCode ()). P>
Des tests sur la couche de présentation?
Pas autre que manuel. Nous faisons des tests de fumée assez rigoureux sur chaque solution, cependant.
Le but du test des développeurs est d'accélérer le développement des logiciels remplis d'un niveau de qualité acceptable. P>
qui conduit à deux mises en garde: p>
logiciel qui fonctionne est un marché spécialisé, de niche, équivalent au matériel ingénierie haut de gamme fabriqué à partir de matériaux chers spécialisés. Si vous êtes à l'extérieur de ce marché, les clients n'attendront plus que votre logiciel fonctionne de manière fiable que de vous attendre à ce que leur chemise arrête une balle. p>
Combien de test unitaire est une bonne chose: strong> p>
Les tests unitaires ne sont pas statiques qu'une fois que vous avez effectué et que votre travail est complet, il ira à travers la durée de vie du produit jusqu'à ce que essentiellement des tests unitaires doit être effectué à chaque fois:
1) vous faites une solution p>
2) nouvelle version p>
3) ou vous trouvez un nouveau problème p>
Je n'ai pas mentionné la période de développement, comme au cours de cette période, votre test de niveau de l'unité est évolué. P>
Par exemple: Pour votre application, vous faites un problème une fonction particulière x, vous faites un Donc, votre test de l'unité doit vérifier: p>
1) chaque interface p>
2) Toutes les opérations d'entrée / sortie p>
3) vérifications logiques p>
4) Résultats spécifiques à l'application P>
Correction pour X, si aucun autre module n'est touché, vous pouvez faire des tests de l'unité
Applicable pour le module X, c'est maintenant le point de savoir combien de test de l'unité pour x
Couvrir p>
Je suggérerais de ramasser le livre L'art du test de l'unité . Le chapitre 8 couvre l'intégration des tests de l'unité dans votre organisation. Il y a une superbe table (p. 232) qui montre les résultats d'un essai à deux équipes (un utilisant des tests, un sans); L'équipe de test a rasé deux jours de réduction sur leur temps de libération global (y compris l'intégration, les tests et la fixation de bugs) et avait 1/6 les bugs trouvés dans la production. Le chapitre 9 traite des analyses de faisabilité des tests pour obtenir le plus bang-à-faire avec le code hérité. P>
Si seulement pour les données empiriques, cela semble en valeur. Merci!
S'il est possible de passer au-dessus du test (point de décomposition), il est difficile de le faire. Les tests (en particulier les tests tôt dans le processus) permettent de gagner du temps. Plus un défaut reste long dans un produit plus il coûte pour résoudre. p>
Testez souvent un test précoce et testez aussi complètement que pratique! P>
Bien que le test unitaire est utile, vous devez absolument avoir un plan de test système pour chaque version - ceci devrait inclure le test des cas d'utilisation normaux de votre application (pour la régression) et la fonctionnalité spécifique travaillant plus en profondeur. p>
Les tests de système automatisés sont à peu près essentiels pour éviter les régressions - les tests d'unité peuvent tous passer et votre application sera toujours un pot de bouse. P>
Mais si vous ne pouvez pas effectuer de tests de système automatisés pour tous vos cas d'utilisation (la plupart des applications ont des cas d'utilisation complexes, en particulier lorsqu'ils interagissent avec des systèmes de 3ème partie et des interfaces utilisateur), vous pouvez ensuite exécuter des tests système manuels. p>
Interfaces utilisateur Créez les principaux problèmes - la plupart des autres choses peuvent être automatisées relativement facilement. Il y a des tas d'outils pour tester automatiquement les interfaces utilisateur, mais ils sont notoirement fragiles, c'est-à-dire à chaque libération, les tests automatiques doivent être modifiés juste pour réussir (n'ayant pas de nouveaux bugs). P>
Pourquoi "ventes" exécute-t-elle votre processus de développement de logiciels? Vous avez besoin d'un dirigeant / gestionnaire de développement qui comprend en réalité le développement de logiciels.
@Nate - Jon Skeet a une flexibilité pour choisir la haute direction qu'il aime. Certaines personnes ne sont pas si chanceuses :)
Ceci est un sujet controversé. Il n'y a vraiment aucune meilleure réponse car il y a des situations où les tests sont bénéfiques et qu'il existe des situations où il s'agit d'une perte de temps. La seule façon pour nous de produire une réponse acceptable dépend de la façon dont vous décrivez votre situation individuelle i>.
@DVK, même si, à un certain niveau, une personne de vente n'est pas assise sur votre épaule en vérifiant vos algorithmes et surveille votre script de construction, de la même manière, ils ne vérifieront pas si vous écrivez des tests d'unité, juste si vous êtes productif. Si vous n'avez pas de gestionnaire décent, cependant, vous ne ferez pas l'équipe.
Sur podcast n ° 41 de Stackoverflow B> Jeff et Joel discutent de la couverture TDD avec Oncle Bob Martin. Était un bon conseil. Lire La transcription ou Écouter le podcast . Je pense que ce sera vraiment utile pour tout le monde intéressé par cette question.