web-dev-qa-db-fra.com

Comment réparer un projet avec fondamentalement aucune structure?

Je travaille sur un projet logiciel surtout solo depuis plus de 5 ans. C'était un gâchis de commencer (je suis le troisième ou quatrième développeur pour y travailler), et bien que ce soit moins en désordre, il est encore incroyablement désorganisé. Le taux de progrès dans le contrôle sous contrôle est glacial et je commence à me sentir découragé par rapport à l'État que c'est en. Comment puis-je vraiment commencer à la résoudre?

Spécifications du projet: Il s'agit d'un programme de vente écrit presque entièrement dans Visual Basic Classic (VB6) avec une back-end MySQL et un moteur de reporting écrit en C #. Le module de rapport C # est une joie de travailler, il n'a été simplement que écrit au cours des dernières années et avant que tous les rapports soient effectués dans Crystal Rapports 9 (oui, nous avons encore des rapports qui en font de la question).

Le programme actuel lui-même est toutefois un désastre complet. Il n'ya pas tout à fait de 90k LOC Total et d'environ 10 000 lignes de commentaires (surtout pas documentation, mais le code ancien qui a été commenté). 158 Fichiers de formulaires et 80 fichiers de module. Je ne sais pas combien de ceux-ci sont réellement utilisés, car certaines fonctionnalités du programme sont simplement obsolètes et (euh, parfois) notées comme telles sans avoir le code associé supprimé du programme. Je suppose que seulement 50% du code est dans une utilisation productive réelle.

J'ai peur de toucher beaucoup de code juste parce que je ne suis pas sûr que je casse quelque chose que l'un client obscur repose sur, c'est arrivé plus d'occasions que je ne peux compter. C'est comme s'il y a des mines terrestres éparpillées dans tout le code.

Il n'y a vraiment aucune structure au projet. Ce n'est pas orienté objet, sauf dans les quelques endroits où j'ai eu la patience de réformer jusqu'à présent. Si vous devez obtenir des données sur un formulaire, vous instanciez un objet de base de données, déclarez votre requête directement dans la fonction, en l'exécutant et faites ce que vous allez avec le jeu de données.

Quand j'ai commencé à travailler sur le projet, il n'y avait pas de contrôle source d'utilisation. J'ai essayé d'encourager les autres personnes que je travaillais à l'utiliser, mais j'étais le nouveau gars et mes tentatives d'amener les gens à utiliser Subversion tout sauf. Le développeur principal de la société a finalement attrapé un bogue mercurial au cours des deux dernières années et il est assuré que tous les développeurs utilisent le contrôle de la source sur tous les projets maintenant, donc au moins des progrès.

Je pense que si je pouvais travailler à réformer le projet à temps plein, je serais en mesure de faire des progrès décents et peut-être même avoir une estimation pendant combien de temps cela me conduirait à relever pleinement le projet, mais c'est une utilisation active et je suis Demandes constamment à émettre des incendies, corrigez des bugs, d'ajouter des fonctionnalités, etc.

Alors, comment puis-je commencer à réaliser ce projet? Essayez d'outils VB6 avec une autre langue? Essayez de réécrire le programme pendant mon temps libre? Ou est-ce complètement désespéré?

Mise à jour

Après cet article, je suis retourné au projet avec un zèle renouvelé, mais je suis retombé dans une désespoir dans quelques mois après avoir vu un taux de progrès aussi lent. J'ai ensuite répété ce cycle 2 ou 3 fois de plus au cours de la prochaine année environ.

J'ai depuis passé à un travail différent. Bien qu'après tant d'années de VB6, et uniquement d'expérience périphérique avec d'autres technologies, la recherche était difficile et j'ai fait face à de nombreuses rejets au cours de la route (autour d'une douzaine d'entretiens au cours d'une année). Mon conseil à d'autres personnes dans cette situation est d'envisager de partir pour que ce facteur seul. Considérez les dommages que vous pouvez faire à votre carrière en séjournant dans une position impasse comme celle-ci.

25
Dylan Nissley

Maintenant que c'est dans le contrôle de la source, vous pouvez vous débarrasser du code commenté.

J'ai commencé ici dans une situation similaire (application 80kloc VB6 sans contrôle source, aucune structure réelle, presque tout fait dans les gestionnaires d'événements).

En 2 ans d'environ 2 ans, j'ai obtenu plus de la moitié convertie en C # (généralement lorsque de nouvelles fonctionnalités importantes sont nécessaires). Tout nouveau code C # a une couverture de test unitaire. Cela prend vraiment beaucoup de temps pour convertir en C #. Si vous n'ajoutez pas de nouveaux modules significatifs, je ne vais pas descendre cet itinéraire.

Une chose que j'ai faite était de créer une couche d'accès à des données rudimentaires qui se sont générées automatiquement de la base de données. Cela au moins attrapé des problèmes dans lesquels un nom de colonne de table a changé et je n'ai pas trouvé tous les endroits du code. De plus, j'ai lentement déplacé la logique commerciale dans des modules, hors de la forme des gestionnaires d'événements.

Cependant, j'avais l'avantage que l'application n'était que interne. Depuis que je n'avais qu'un seul site à déployer, je pourrais prendre des risques plus gros que vous le pouviez. Si j'ai commis une erreur, ce n'était généralement pas un gros problème de le réparer. On dirait que vous n'avez pas ce luxe.

Je pense vraiment que votre meilleur pari est de prendre l'approche suivante:

  1. Apprenez chaque bit dans les détails arsciateurs. Cela le rend moins probable que vous allez casser quelque chose par inadvertance.
  2. Refacteur sans pitié pour améliorer la séparation et la structure, mais n'essayez pas de chaussette une nouvelle méthodologie comme une programmation orientée objet, car VB6 est juste en train de cycler.
  3. Traitez-le comme une expérience d'apprentissage. Comment sauriez-vous savoir d'une manière différente, c'est mieux si vous n'aviez jamais vu la manière inférieure?
  4. Ne vous embêtez pas de la réécriture dans une nouvelle langue/cadre/plate-forme, sauf si vous avez un module majeur à écrire. Même alors, examinez attentivement.

N'oubliez pas que l'objectif du programme est d'être un produit qui rend l'argent de votre entreprise. Ce n'est pas obligé d'être une œuvre d'art sans faille (et je suis un perfectionniste, donc c'est vraiment difficile pour moi d'admettre cela). Parfois, il vaut mieux embrasser le pragmatisme.

Il existe donc beaucoup de programmeurs de Cobol sur le maintien des quantités massives de code hérité. Je doute qu'ils travaillent tous follement à la réécriture dans une nouvelle langue. :)

28
Scott Whitlock

Une règle de David Agan's "-- Débogage " vient à l'esprit: arrêter de penser et de regarder. Vous avez à votre disposition une machine capable de traiter de vastes quantités de texte. Utilisez-le pour comprendre précisément quel code n'est plus utilisé et la retirez-le sans pitié. Si vous faites une erreur, c'est ce que le contrôle de la source est pour.

C'est la partie facile. Qu'est-ce que vous devez penser à la suivante, c'est comment mangez-vous un éléphant? Une bouchée à la fois. Pick up Martin Fowler's "- refactoring " et prenez la fonction informatique par fonction, fichier par fichier. NE PAS complètement fermé quelque chose et réécrivez-le de ce que vous pensez que les exigences sont. Travaillez comme un alpiniste de montagne, ne jamais retirer votre sécurité avant que le prochain soit en place.

Avait encore assez de métaphores? Le fait est que si vous le prenez lentement et régulièrement, avec de nombreuses améliorations aussi simples que de renommer ou de fractionnement une fonction, vous pouvez améliorer les mauvaises parties du code sans détruire les bonnes parties de celui-ci qui ont été construits à travers des années de débogage et de demandes de fonctionnalités. . Vous voulez que le code reste expédiable à tout moment. S'il est possible de le faire en portant une langue plus moderne, allez-y.

3
Karl Bielefeldt

Je déteste le dire, mais j'irais avec "complètement sans espoir" au-delà de continuer à faire un cycle sans fin de patch/d'amélioration et d'espérer que rien ne se casse. J'ai vu beaucoup trop de projets VB6 comme celui que vous décrivez et tentent de refacteur/réécrire/les refaire dans C # /. Net échouez terriblement, souvent avec les responsables de la tentative de cuisson.

La chose est qu'une réécriture complète de la terre augmente va être nécessaire tôt ou tard. VB6 et les versions Windows qui le soutiennent bien sont sur le déclin. Trouver des développeurs qui connaissent les bizarreries de Vb6 et qui sont disposés à travailler sur des programmes comme celui-ci deviennent plus rares. Les limites internes de VB6 seront touchées sur d'énormes programmes comme celui-ci, causant des erreurs étranges.

S'il y a un bon consensus et un bon engagement pour un total, mis en place, refonte et réécrire à ce stade, commencez à travailler sur elle et déléguer une maintenance continue à quelqu'un d'autre (entrepreneurs, programmeurs juniors, tout ce qui fonctionne pour vous). Si les gens ne sont pas suffisamment convaincus pour commencer cela, attendez simplement que la douleur devienne assez grande ou d'autres passages à des pâturages plus verts.

3
jfrankcarr