2010-07-08 8 views
12

La situation: des millions de lignes de code, plus de cent développeurs et des défauts fréquents. Nous voulons éviter répétant défauts et nous voulons améliorer la conception de code (qui ne le fait pas?).Comment mettre en œuvre un développement piloté par les tests avec du code existant?

Le développement piloté par les tests (premier test unitaire, puis code) semble idéal: écrivez un scénario de test pour chaque fonction. Mais, avec autant de code écrit, comment TDD peut-il être implémenté? Où commencez-vous - avec des fonctions de bas niveau? Ou sommes-nous trop en retard pour commencer TDD?

Répondre

21

Commencez par Working Effectively with Legacy Code.

Ce n'est pas vraiment TDD si vous commencez avec du code existant - mais tout votre codage peut être TDD. Lorsque vous abordez un nouveau problème, écrivez un test pour celui-ci. Si vous ne pouvez pas, parce que les classes héritées sont trop difficiles à tester, alors commencez à écrire des tests pour eux, à découper des bits, et à couvrir les bits avec des tests.

Refactor the Low-Hanging Fruit.

Pour éviter les défauts répétitifs: en vous basant sur un exemple de défaut, écrivez un test qui le démontre. Ce pourrait être un test relativement large qui simule simplement l'activité de l'utilisateur; pas encore un test unitaire. Assurez-vous que le test échoue. Faire votre recherche; comprendre pourquoi le test échoue. Maintenant - c'est important - avant de corriger le bug, écrivez un test unitaire qui démontre le bug. Corrigez le bug, et maintenant vous avez deux tests, au moins un rapide, qui vous protègent contre les régressions.

+2

+1: La clé ici est de * pas * essayer et moderniser complètement les tests unitaires. – Richard

+1

@Carl - bon résumé. J'aime particulièrement comment vous avez un test unitaire et un texte système sur le défaut. – Wikis

+0

@Richard - Je suis perplexe - n'est-ce pas le contraire de ce que Carl dit? – Wikis

2

Depuis que Carl a suggéré un livre, je vais en suggérer un autre: le Art of Unit Testing de Roy Osherove a un chapitre entier sur "Travailler avec le code hérité". Je n'ai pas encore lu ce chapitre, mais les 5 premiers chapitres sont excellents, et j'ai hâte d'y être. +1:

+0

FYI J'ai apprécié la comparaison de Osherove des définitions pour le code existant: « code source qui concerne sans plus soutenu par la technologie » « code qui fonctionne » « toute application plus ancienne en maintenance » « code qui n'a pas de test » (du livre de Feathers) – orbfish

+0

@Carl merci pour le lien C2, c'est hilarant. – orbfish

+0

@Orbfish - Merci pour le conseil. Peut-être que lorsque vous l'aurez lu, vous reviendrez et partagerez quelques idées? – Wikis

Questions connexes