it-swarm-fr.com

Quel est le véritable surcharge de TDD une fois que toute l'équipe y est habituée?

Quel pourcentage de temps est sauvé et cher à faire du TDD.

Je suppose que ce pourcentage de coûts et de récompenses changeait lors d'un cycle de vie des projets.

J'imagine que la phase initiale a beaucoup plus de coûts, mais de petites récompenses attachées. Plus loin (pendant ré-factory), vous bénéficiez de vos tests.

J'ai entendu n'importe où à 50% de votre temps Ecrivez des tests d'unité. Cependant, cela ne prend pas en compte le Time Saveed de l'écriture de ces tests.

Quelle est l'expérience de tout le monde avec cela?

Nous s

[~ # ~] éditer [~ # ~ ~] Quel est le temps enregistré ainsi que le coût de temps? Dans la fixation de bugs et le refactoratalité?

24
Wes

J'ai entendu n'importe où de 30 à 50% de votre temps écrit des tests d'unité. Cependant, cela ne prend pas en compte le temps sauvé

Dans mon expérience, il est plus de 50%.

Une fois que vous avez écrit le test, la solution a tendance à venir très facile. Donc, je ne pense pas qu'il soit étrange de dépenser 70% - 75% de vos tests d'écriture de temps, mais vous dépensez beaucoup moins de temps à écrire le " code de production " (testé le code-être-) et passer pratiquement pas de temps dans le débogueur .

Plus tôt vous trouverez un bogue, le moins cher est de corriger et TDD aide à ce que cela soit énormément. J'ai travaillé sur des projets où les 2 derniers mois (d'un projet de 8 mois) ont été consacrés à la fixation de bugs et que cette phase serait presque entièrement éliminée avec TDD.

Pour moi cependant, la valeur réelle est en maintenance. Héritage d'une base de code avec des tests vous rend moins effrayé pour le modifier. Vous avez envie de ne rien briser lorsque les tests passent toujours. Puisque vous n'avez pas peur de faire des changements, vous êtes prêt à refroidir si quelque chose n'est pas correct. Ce qui signifie que le code peut être rendu plus propre, la conception peut être meilleure et, en théorie, des modifications peuvent être appliquées. Contraste qu'avec le code Voodoo, tout le monde a peur de toucher.

8
Brad Cupit

Chaque fois que vous exécutez vos tests de l'unité, vous vous épargnez le temps qu'il aurait pris pour tester votre code manuellement.

Les 30% à 50% du temps que vous citez comme étant requis pour écrire vos tests sont également compensés par les avantages d'avoir une meilleure conception logicielle (testable).


Disons que cela prend quatre fois plus de temps pour écrire un test automatisé car il le fait pour effectuer manuellement le test. Cela signifie que la quatrième fois que vous exécutez votre test automatisé, elle paie elle-même. Chaque fois que vous exécutez le test automatisé après cela, c'est gratuit.

Cela est vrai que le test est un test d'unité automatisé ou un test fonctionnel automatisé. Tous les tests fonctionnels ne peuvent pas être automatisés, mais beaucoup d'entre eux peuvent. De plus, le test automatisé est plus fiable qu'une personne; Il fonctionnera le test exactement de la même manière, à chaque fois.

Avoir des tests d'unités signifie que vous pouvez refroidir la mise en œuvre sous-jacente d'une méthode (pour des raisons de performance ou d'autres raisons), et les tests d'unités vérifient que la fonctionnalité de la méthode n'a pas changé. Ceci est particulièrement vrai pour TDD, où le test de l'unité spécifie la fonctionnalité de la méthode.

15
Robert Harvey

TDD est souvent mesuré vers la qualité du code plutôt que sur le temps et le coût dépensé. Cependant, avec une meilleure qualité de code, des développeurs et des personnes qui travaillent avec eux peuvent mieux fonctionner (moins de temps dépensés, moins de coûts impliqués, plus heureux, etc.). http://davidlongstreet.wordpress.com/2009/04/29/new-software-metric-wtfs-per-minute/

Les tests d'écriture sont parfaits pour aider à automatiser la vérification des exigences fonctionnelles et non fonctionnelles. Une vidéo qui m'a convaincu d'adopter TDD (en fait BDD, TDD de haut niveau): http://video.google.com/videoplay?docid=8135690990081075324#

  • L'écriture de tests fonctionnels peut aider Repérer des bugs/problèmes plus tôt pendant la phase de développement. Supposons que vous avez une base de code importante. avec des tests/spécifications d'unités , vous n'avez besoin que de voir "Tous les tests passés"/"2 tests ont échoué, reportez-vous à la ligne XYZ". Vous avez seulement besoin une équipe de développeurs à faire en développement et à tester. sans tests/spécifications d'unité , vous devez comparer manuellement Déclarations imprimées avec des instructions attendues et manuellement TRACE Quelles méthodes/classes ont des bugs. Vous avez probablement besoin Deux équipes distinctes (développeurs et testeurs) pour le faire.

  • Les tests écrits aident les développeurs à expliquer les progrès et les problèmes rencontrés.

  • TDD aide à remplir la maintenabilité, l'adaptabilité et la flexibilité du code. Il encourage les développeurs à écrire de petits morceaux expérimentés et de les mettre en place dans de plus gros morceaux d'essais. L'autre sens (une partie de la pratique du refactoring) fonctionne également, avec condition que nous avons écrit des tests solides. En conséquence, nous pouvons avoir un code modulaire bien écrit et modulaire.

Avec TDD, nous sommes heureux de savoir quand:

  • un client demande des modifications aux exigences (exigences satisfaisantes)
  • de meilleurs moyens de rédaction de code sont découverts
  • les coéquipiers ont des suggestions pour l'amélioration du code
  • nous devons expliquer/passer notre code à d'autres personnes

TDD peut être ennuyeux car le processus de développement prend de petites étapes et cela devient ainsi si prévisible.

5
n193853

Dans notre cas, j'aurais d'estimer qu'il est proche de 40%. Cependant, je ne pense pas que nous avons traversé une phase où c'était plus que cela. Nous avons un générateur de code qui crache à la fois un squelette de code qui se termine par les développeurs et une suite de tests qui devient également étoffée. La plupart de nos efforts de test vont en réalité dans le suivi (ou la création) des données de test appropriées pour garantir la couverture complète.

4
TMN

les mesures importantes à long terme ne sont pas seulement une qualité de code et de la confiance du code, mais même de Moreso ne brûle pas l'équipe qui fait des tests sans dérangement

les mesures à court terme seraient le retour sur investissement de l'automatisation des tests

par exemple: la semaine dernière, j'ai effectué plus de 1000 changements de code en raison d'un changement d'architecture interne, a commencé la suite de tests automatisés et s'est endormie.

les tests ont pris 28 minutes à courir; ils ont tous passé. Effectuer manuellement les mêmes tests d'acceptation de plus de 40+ prendrait environ 6 heures.

un autre exemple: dans une itération préalable, j'avais goofé l'un des scénarios de test avec un bogue subtil que les tests manuels n'auraient probablement pas trouvé (les tests automatisés effectuent des contrôles d'intégrité DB que les testeurs manuels ne font presque jamais). Je devais exécuter ce scénario de test environ 50 fois avant que je réussisse à la comprendre et à le réparer. Effectuer manuellement les opérations de scénario de test prendrait environ 50 minutes. Donc, c'est 41,6 heures d'homme de main-d'œuvre sauvées en une journée

il n'y a aucun moyen de calculer à l'avance le retour sur investissement des tests automatisés, car vous ne pouvez pas savoir exactement combien de fois vous aurez besoin d'exécuter les tests.

mais pour moi, le retour sur investissement des tests automatisés est presque infini

3
Steven A. Lowe

Il peut aider beaucoup à restreindre les tests d'unité à des algorithmes complexes, des cas où ils peuvent être générés automatiquement et des régressions.

Le test de composant fait souvent un excellent travail pour un code plutôt trivial, plus le changement de mise en œuvre est beaucoup moins cher, car les tests ne sont couplés que à l'interface.

La couverture complète avec des tests d'unité à grains fins a une énorme surcharge pour changer ou refacter une implémentation, ce qui est exactement ce qu'ils prétendent faciliter la tâche.

0
yeoman