Quel est l'effet de la création de tests unitaires pendant le développement sur le temps de développement ainsi que sur le temps consacré aux activités de maintenance?

24

Je suis consultant et je vais présenter des tests unitaires à tous les développeurs de mon site client. Mon objectif est de m'assurer que toutes les nouvelles applications doivent avoir des tests unitaires pour toutes les classes créées.

Le client a un problème avec des coûts de maintenance élevés liés à la correction de bogues dans leurs applications existantes. Leurs applications ont une durée de vie comprise entre 5 et 15 ans au cours de laquelle elles ajoutent continuellement de nouvelles fonctionnalités. Je suis tout à fait convaincu qu'ils bénéficieront grandement de commencer par des tests unitaires.

Je m'intéresse à l'effet des tests unitaires sur le temps et le coût de développement:

  • Combien de temps ajoutera l'écriture de tests unitaires dans le cadre du processus de développement?
  • Combien de temps sera économisé dans les activités de maintenance (test et débogage) grâce à de bons tests unitaires?
jgauffin
la source

Réponses:

25

Existe-t-il des statistiques sur le temps qu'il faudra pour développer des applications lors de la création d'un test unitaire pendant le développement par rapport au codage?

Il y a des recherches très intéressantes à ce sujet. Lisez le livre blanc suivant:

Améliorer la qualité grâce à un développement piloté par les tests: résultats et expériences de quatre équipes industrielles

Le livre blanc et d'autres recherches de l'un de ses auteurs, Nachi Nagappan , sont discutés ici: http://research.microsoft.com/en-us/news/features/nagappan-100609.aspx

L'étude et ses résultats ont été publiés dans un article intitulé Réaliser l'amélioration de la qualité grâce au développement piloté par les tests: résultats et expériences de quatre équipes industrielles, par Nagappan et ses collègues de recherche E. Michael Maximilien du IBM Almaden Research Center; Thirumalesh Bhat, responsable principal du développement logiciel chez Microsoft; et Laurie Williams de la North Carolina State University. L'équipe de recherche a découvert que les équipes TDD produisaient un code 60 à 90% meilleur en termes de densité de défauts que les équipes non TDD. Ils ont également découvert que les équipes TDD mettaient plus de temps à achever leurs projets - 15 à 35% de plus.

«Sur un cycle de développement de 12 mois, 35% représente encore quatre mois, ce qui est énorme», déclare Nagappan. «Cependant, le compromis est que vous réduisez considérablement les coûts de maintenance après publication, car la qualité du code est bien meilleure. Encore une fois, ce sont des décisions que les gestionnaires doivent prendre - où devraient-ils prendre le coup? Mais maintenant, ils ont en fait des données quantifiées pour prendre ces décisions. »

De plus, Jason Gorman a proposé une telle expérience pour la conférence Software Craftsmanship de cette année. Il a essayé une expérience créant la même application en utilisant une approche TDD et non TDD et il a récemment blogué sur ses résultats :

Sur 3 itérations, le temps moyen nécessaire pour terminer le kata sans TDD était de 28m 40s. Le temps moyen avec TDD était de 25m 27s. Sans TDD, j'ai fait en moyenne 5,7 passes (livrées en test d'acceptation). Avec TDD, j'ai fait en moyenne 1,3 passes (en deux tentatives, ils ont réussi la première fois, en une il a fallu 2 passes.)

Maintenant, c'était une expérience de bébé, bien sûr. Et pas exactement les conditions de laboratoire. Mais je note tout de même quelques choses intéressantes.

Il sera intéressant de voir les résultats complets de cette expérience lorsque plus de gens la réaliseront.

Existe-t-il des statistiques qui montrent combien d'heures de maintenance diminuent lors de (bons) tests unitaires?

Extrait du livre blanc ci-dessus:

Les résultats des études de cas indiquent que la densité des défauts avant la libération des quatre produits a diminué entre 40% et 90% par rapport à des projets similaires qui n’utilisaient pas la pratique TDD.

Paddyslacker
la source
J'aime cette réponse. J'ajouterais que l'outil Langue et test peut également avoir un impact important sur le temps TDD. Pour un langage comme C #, avant NCRUNCH, je n'étais pas tellement enthousiasmé par les avantages du TDD. Après avoir vu et utilisé NCRUNCH. À mon avis, la tendance à faire des tests parallèles si vous codez est un changement majeur dans l'efficacité de ces outils. La recherche basée sur 2008 peut ne pas refléter les outils actuels et leur efficacité.
phil soady