J'ai introduit des tests unitaires pour des bases de code qui n'en avaient pas auparavant. Le dernier gros projet, j'ai participé à où j'ai fait ce que le produit était déjà en production avec zéro tests unitaires quand je suis arrivé à l'équipe. Quand j'ai quitté - 2 ans plus tard - nous avons eu plus de 4500 ou alors des tests de rendement de près de 33 % de couverture de code dans une base de code avec 230 000 + production LOC (temps réel financiers Win-Formes d'application). Cela peut paraître faible, mais le résultat a été une amélioration significative dans la qualité du code et un taux de défaut plus d'une amélioration du moral et de la rentabilité.
Il peut être fait lorsque vous avez à la fois une compréhension exacte et de l'engagement des parties concernées.
Tout d'abord, il est important de comprendre que le test unitaire est une compétence en soi. Vous pouvez être très productif pour le programmeur par les "classiques" des normes et encore de la difficulté à écrire des tests unitaires d'une manière qui évolue dans un projet plus vaste.
Aussi, et spécialement pour votre situation, l'ajout de tests unitaires à une base de code qui n'a pas de tests est également une compétence spécialisée en lui-même. À moins que vous ou quelqu'un dans votre équipe a une expérience réussie avec l'introduction de tests unitaires pour un code de base, je dirais que la lecture de la Plume du livre est une obligation (pas obligatoire ou fortement recommandé).
Faire la transition avec les tests unitaires, votre code est un investissement dans les personnes et les compétences, tout autant que dans la qualité de la base de code. Cette compréhension est très importante en termes de mentalité et de la gestion des attentes.
Maintenant, pour vos commentaires et questions:
Cependant, je crains que je vais à côté de l'essentiel et à la fin de manque fondamental tests qui aurait été inclus si j'avais utilisé TDD de l'aller.
Réponse courte: Oui, vous manquez de tests et oui, ils n'ont peut d'abord ressembler à ce qu'ils auraient dans un champ vert de la situation.
Niveau plus profond réponse est celle-ci: Il n'a pas d'importance. Vous commencez avec pas de tests. Commencer à ajouter des tests, et refactoriser comme vous allez. Comme les niveaux de compétence pour aller mieux, commencer à hausser la barre pour tous les code nouvellement écrit ajouté à votre projet. Continuer à améliorer etc...
Maintenant, en lisant entre les lignes ici, j'ai l'impression que cela vient de la mentalité de la "perfection comme une excuse pour ne pas agir". Un meilleur état d'esprit est de se concentrer sur l'auto-confiance. Donc, comme vous pouvez pas savoir comment le faire encore, vous allez comprendre comment comme vous allez, et de remplir les blancs. Par conséquent, il n'y a aucune raison de s'inquiéter.
De nouveau, ses compétences. Vous ne pouvez pas aller de zéro tests de TDD-la perfection dans un "processus" ou "étape par étape" cook book approche de façon linéaire. Il sera un processus. Vos attentes doit être de rendre progressive de progrès et d'amélioration. Il n'y a pas de pilule magique.
La bonne nouvelle est que la des mois (voire des années) passe, votre code va peu à peu commencer à devenir "bon" bien factorisé et bien testé le code.
Comme une note de côté. Vous trouverez que le principal obstacle à l'introduction de tests unitaires dans une ancienne base de code est le manque de cohésion et de l'excès de dépendances. Par conséquent, vous trouverez probablement la compétence la plus importante sera de savoir comment briser les dépendances existantes et de découplage de code, plutôt que d'écrire le réel de la part des tests eux-mêmes.
Il n'existe aucun processus/étapes qui doivent être respectées afin de s'assurer que les solutions existantes est correctement unité testé et pas seulement bodged?
Sauf si vous l'avez déjà, configurer un serveur de build et mis en place une intégration continue de construire qui s'exécute sur chaque enregistrement, y compris tous les tests unitaires avec la couverture de code.
Former votre personnel.
Commencer quelque part et commencer à ajouter des tests pendant que vous faites des progrès de la perspective du client (voir ci-dessous).
Utilisation de la couverture de code comme une référence, de la façon dont beaucoup de votre code de production de base est en cours de test.
Le temps de construction doit toujours être RAPIDE. Si votre temps de construction est lente, votre unité de tests de compétences sont à la traîne. Trouver la lenteur de tests et de les améliorer (découplage de la production de code et test en isolation). Bien écrit, vous devriez facilement être en mesure d'avoir plusieurs milliers de tests unitaires et encore remplir un construire en moins de 10 minutes (~1-quelques ms / test est un bon, mais très à titre indicatif, quelques exceptions peuvent s'appliquer, comme le code à l'aide de réflexion, etc).
Inspecter et de s'adapter.
Comment puis-je m'assurer que les tests sont de bonne qualité et ne sont pas simplement un cas de test est mieux que pas de tests.
Votre propre jugement doit être votre principale source de la réalité. Il n'y a pas de métrique qui peut remplacer les compétences.
Si vous n'avez pas d'expérience ou d'un jugement, d'envisager d'engager quelqu'un qui ne.
Deux bruts indicateur secondaire total de la couverture de code et de construire la vitesse.
Est-il en vaut la peine pour une solution existante qui est dans la production?
Oui. La grande majorité de l'argent dépensé sur une coutume construit solution ou d'un système est passé après qu'il est mis en production. Et d'investir dans la qualité, des personnes et des compétences ne devrait jamais sortir de style.
Serait-il mieux ignorer le test de dépistage de ce projet et l'ajouter dans un futur possible de ré-écrire?
Vous devez prendre en considération, non seulement l'investissement dans les personnes et les compétences, mais plus important encore, le coût total de possession et la durée de vie prévue du système.
Ma réponse serait "oui bien sûr" dans la majorité des cas parce que je sais que je suis juste tellement mieux, mais je reconnais qu'il y a peut-être des exceptions.
Ce sera plus bénéfique; de passer quelques semaines à l'ajout de tests ou de quelques semaines, l'ajout d'une fonctionnalité?
Ni. Votre approche doit être à ajouter des tests à votre code de base TANDIS que vous faites des progrès en termes de fonctionnalité.
Encore une fois, c'est un investissement dans les personnes, les compétences ET la qualité de la base de code et en tant que tel, il aura besoin de temps. Les membres de l'équipe ont besoin d'apprendre comment briser dépendances, écrire des tests unitaires, d'apprendre de nouvelles habbits, améliorer la discipline et de sensibilisation à la qualité, à la façon de mieux les logiciels de conception, etc. Il est important de comprendre que lorsque vous commencez à ajouter des tests de membres de votre équipe probable n'est pas encore au niveau qu'ils doivent être en faveur de cette approche pour réussir, de sorte que l'arrêt de progression de passer tout le temps d'ajouter un grand nombre de tests ne fonctionnerait tout simplement pas.
En outre, l'ajout de tests unitaires pour un code de base de tout projet considérable de la taille est une GRANDE entreprise, qui exige l'engagement et la persévérance. Vous ne pouvez pas modifier quelque chose de fondamental, s'attendre à beaucoup de choses à apprendre sur la façon et demandez à votre parrain de ne pas attendre un quelconque retour sur investissement, par l'arrêt de la circulation de la valeur de l'entreprise. Qui ne volent pas, et franchement, il ne devrait pas.
Troisièmement, vous voulez inculquer son recentrage sur les activités les valeurs de votre équipe. La qualité ne vient jamais à la charge du client et vous ne pouvez pas aller vite sans qualité. Aussi, le client est vivre dans un monde en mutation, et votre tâche est de rendre plus facile pour lui de s'adapter. Client alignement nécessite à la fois de la qualité et de la circulation de la valeur de l'entreprise.
Ce que vous faites est de rembourser la dette technique. Et vous le faites bien que toujours au service de vos clients en constante évolution des besoins. Progressivement à mesure que la dette est payée, la situation s'améliore, et il est plus facile de mieux servir notre clientèle et d'offrir plus de valeur. Etc. Cette dynamique positive est ce que vous devriez viser pour car il souligne les principes de durable rythme et la volonté de maintenir et d'améliorer la morale, à la fois pour le développement de votre équipe, vos clients et vos partenaires.
Espère que ça aide