64 votes

Quand à la réécriture d'une base de code à partir de zéro

Je pense à Joel Spolsky de l'article à propos de ne jamais avoir à réécrire le code à partir de zéro. Pour résumer son argumentation: Le code n'est pas obtenir rouillé, et alors il ne peut pas regarder assez après de nombreuses versions de maintenance, si il fonctionne, il fonctionne. L'utilisateur final se complique pas attention à la manière assez le code est.

Vous pouvez lire l'article ici: des Choses que Vous Ne Devriez Jamais faire

J'ai récemment pris le contrôle d'un projet et à la recherche par le biais de leur code, c'est assez horrible. J'ai immédiatement pensé à des prototypes que j'avais construit avant, et déclare explicitement qu'il ne doit pas être utilisé pour n'importe quel environnement de production. Mais bien sûr, les gens n'écoutent pas.

Le code est construit comme un site web, n'a pas de séparation des préoccupations, pas de tests unitaires, et la duplication de code partout. Pas de couche de Données, pas de véritable logique d'entreprise, sauf si vous comptez un tas de classes dans App_Code.

J'ai fait la recommandation à l'enjeu titulaires, alors que nous devrions garder le code existant, et de faire des versions de correction de bogues et quelques petites versions de fonctions, nous devrions commencer à le réécrire immédiatement avec le Développement Piloté par les tests dans l'esprit et avec une claire séparation des préoccupations. Je pense d'aller le ASP.NET MVC route.

Mon seul souci est, bien entendu, la longueur de temps il pourrait prendre pour réécrire à partir de zéro. Il n'est pas entièrement compliqué, jolie course de l'usine de l'application web avec l'adhésion, etc..

N'avez-vous rencontré un problème similaire? Tout particulier étapes que vous avez pris?

Merci beaucoup!

Mise à JOUR:

Alors.. Ce qui fait que je finis par décider de le faire? J'ai pris Matt approche et a décidé de revoir de nombreux domaines.

  • Depuis App_Code était d'obtenir de grande et donc le ralentissement de la construire temps, j'ai enlevé beaucoup de classes et converti en une Classe De la bibliothèque.
  • J'ai créé un très simple d'Accès aux Données Couche, qui contenait tous les ADO appels, et a créé un SqlHelper objet pour exécuter ces appels.

  • J'ai mis en place un nettoyeur de journalisation
    la solution, qui est beaucoup plus concis.

Alors que je n'ai plus de travail sur ce projet [de financement, la politique, bla bla], je pense qu'il m'a donné un peu d'une grande perspicacité dans la façon dont le mauvais certains projets peuvent être écrites, et les étapes d'un développeur peut prendre pour rendre les choses beaucoup plus propre, lisible et juste à plat mieux avec de petits pas au fil du temps.

Merci encore à tous ceux qui ont commenté.

60voto

Matt Points 15107

Juste parce qu'il a tous ces problèmes maintenant, ne signifie pas qu'il doit continuer à en avoir. Si vous trouvez vous-même de faire un spécifique correction d'un bug dans le système qui pourrait bénéficier à partir de, disons, une nouvelle couche de données, puis créer une nouvelle couche de données. Tout simplement parce que l'ensemble du site ne l'utilisez pas, il ne signifie pas que vous ne pouvez pas commencer à l'utiliser. Refactoriser le code que vous avez besoin lors de vos corrections de bugs. Et assurez-vous de comprendre exactement ce que fait le code avant de le modifier.

Problème avec la duplication de code? Tirez dans une classe ou de l'utilité de la bibliothèque, dans un emplacement central, à côté du temps que vous avez à résoudre un bogue dans le code dupliqué.

Et, comme déjà mentionné par d'autres intervenants - commencer à écrire des tests maintenant. Il peut être difficile si le code est couplé à ce qu'il paraît, mais vous pouvez probablement commencer quelque part.

Il n'y a pas de bonne raison de réécrire le code du travail. Toutefois, si vous êtes déjà correction d'un bug, il n'y a pas de raison que vous ne pouvez retravailler cette partie spécifique du code avec un "meilleur" de la conception.

19voto

cletus Points 276888

Joël article vraiment tout dit.

En principe jamais.

Comme Joel points: vous n'aurez tout simplement perdre trop de le faire à partir de zéro. Il prendra probablement plus de temps que vous le pensez et ce qui est le résultat final? Quelque chose qui se fait de la même chose. Alors, quel est le business case pour le faire?

C'est un point important: il coûte de l'argent à écrire quelque chose à partir de zéro. Comment allez-vous récupérer cet argent? De nombreux programmeurs ignorer ce point, tout simplement parce qu'ils n'aiment pas le code, parfois avec justification, parfois pas.

18voto

swamplord Points 273

Le livre des Faits et les Illusions De Génie Logiciel membres de ce fait: "Modification de réutilisés code est particulièrement sujettes à l'erreur. Si plus de 20% à 25% d'un composant doit être révisé, il est plus efficace de le réécrire à partir de zéro." Les chiffres proviennent de certaines statistiques, des études réalisées sur le sujet. Je pense que les chiffres peuvent varier en raison de la qualité de la base de code, donc dans votre cas, il semble plus efficace de le réécrire à partir de zéro par cette affirmation en compte.

11voto

Milan Babuškov Points 20423

J'ai eu une telle demande, et de réécriture a été très enrichissante. Toutefois, vous devriez essayer d'éviter les "améliorations" de piège.

Lorsque vous réécrivez tout, il est très tentant d'ajouter de nouvelles fonctionnalités et correction de certains problèmes de longue date, vous n'avez pas eu le courage d'aborder. Cela peut conduire à la fonction de fluage et aussi de prolonger le temps nécessaire pour réécrire énormément.

Assurez-vous de vous décider exactement ce qui sera changé et ce ne seront réécrits - à l'avance.

6voto

mmr Points 7094

Seule quasi-motif légitime vient à l'esprit: la politique.

J'ai dû réécrire une base de code à partir de zéro, et qu'il avait à faire avec la politique. Fondamentalement, la précédente codeur qui a réussi le code est trop gêné pour libérer le code source de la nouvelle équipe qui vient d'être embauché. Elle sentait que toutes les critiques du code de la critique d'elle comme d'une personne, et par conséquent, elle a libéré le code pour le reste d'entre nous quand elle a été forcée. Elle est la seule personne avec un accès administratif à la source de dépôt, et à chaque fois qu'elle est invitée pour la libération de tous les source de, elle a menacé de quitter et de prendre toutes ses connaissances du code et rentrer à la maison.

Ce code est de plus de 15 ans, et a circonvolutions et des contorsions de différentes personnes à différents styles. Aucun de ces styles apparemment impliqué des commentaires ou des spécifications, au moins, en petites portions, elle a publié à nous.

Avec seulement partielle de code et une date limite, j'ai été obligé de faire une réécriture totale. J'ai crié comme un résultat, parce qu'il a été prétendu que j'ai causé un sérieux retard, mais j'ai juste gardé ma tête vers le bas et a obtenu il fait plutôt que d'argumenter.

La politique peut être une énorme douleur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X