Répondre

5

J'ajoute des tests unitaires à une grande base de code spaghetti héritée.

Mon approche est, lorsqu'on me demande de résoudre un problème, j'essaie de créer une nouvelle enveloppe autour de la partie de la base de code qui est pertinente pour ma tâche actuelle. Ce nouveau wrapper est développé en utilisant TTD (en écrivant le test en premier). Une partie du temps appelant en le code ancien non testé unitaire. À d'autres moments, je fais une nouvelle copie d'un module existant et commence à faire de la violence sérieuse. Parfois, je réécris des fonctionnalités à partir de zéro.

Mais comme je le garde assez bien testé, je me sens assez en contrôle. Ce que je trouve avec cette base de code, qui a été développée avec beaucoup trop de copier et de coller, c'est qu'une fois que je comprends une partie particulière, et en extrait quelques fonctions (qui sont faites en premier) ... ces fonctions s'avèrent souvent utilisables dans beaucoup d'autres endroits et donc le taux de remplacement du code existant par mes propres bibliothèques testées unitairement augmente.

Je n'ai pas (et n'ai aucune autorité pour) essayer de réécrire ou d'ajouter des tests à des parties du code qui ne sont pas touchées par mon problème actuel (généralement un bogue que j'essaie de corriger) mais j'ai un position proactive assez agressive sur tout ce qui est touché et pourrait être pertinent.

Mise à jour: Penguinix a demandé: «Dans quelles langues travaillez-vous? Existe-t-il un harnais de test spécifique que vous recommandez?

En ce moment je travaille dans ... euh ... les oreillons! Mais le même principe fonctionne n'importe où.

Quelque chose qui a transformé ma compréhension de l'UT était MinUnit: http://www.jera.com/techinfo/jtns/jtn002.html

Quand j'ai vu MinUnit, qui était un peu un moment « zen » de l'illumination pour moi. Il a éliminé les malentendus que j'avais sur les tests unitaires étant quelque chose de compliqué nécessitant des frameworks OO sophistiqués, etc. J'ai compris que UT était juste en train d'écrire un tas de tests. Le "harnais" vous pouvez écrire vous-même, dans environ 3 minutes, dans n'importe quelle langue que vous aimez. Allez-y et faites-le.

+0

Dans quelles langues travaillez-vous? Existe-t-il un harnais de test spécifique que vous recommandez? –

1

Cela dépend vraiment de l'état de la base de code ... y a-t-il des classes massives? une classe avec des méga-méthodes? Les classes sont-elles étroitement couplées? la configuration est-elle une charge? Compte tenu de cela, je suggère de lire Working Effectively with Legacy Code, en décrivant vos problèmes, et en appliquant les recommandations.

+0

http://www.manning.com/baley/ Les applications Brownfield dans .NET sont également bonnes. –

+0

Cela semble intéressant. J'utilise actuellement «Travailler efficacement ...» sur ma première application majeure sur les friches industrielles et cela aide beaucoup. Je pense que Refactoring http://www.amazon.com/dp/0201485672 peut également être utile (mon prochain achat). –

+0

Refactorisation par Martin Fowler est une bible de refactor-er. Cela a été très utile dans mon développement. Je recommande également Head First Design Patterns et Code Complete. –

Questions connexes