Mon manager veut que je refactore une gigantesque quantité de méthodes macrodées, pleines d'espace de noms privées, hiérarchie-perverse (même 10+ niveaux d'héritage) code qui n'a pas été conçu (en effet) conçu avec un concept "de la vision entière".
J'ai essayé de lui expliquer que ce code doit être réécrit, pas seulement refouturé, mais il n'a pas écouté et déclaré explicitement que Je dois le refroidir .. d'une manière ou d'une autre.
Je pourrais plonger dans tous les livres "Traiter avec le code hérité", mais je pense que rien d'utile ne sortirait.
Comment puis-je le convaincre qu'une réécriture, au lieu d'un refactoring, est en réalité nécessaire?
Il a probablement raison.
Si le codeBase est si monstrueux, si gigamment compliqué, si difficile à comprendre ... Qu'est-ce qui vous fait penser que vous pouvez écrire quelque chose qui fait la même chose correctement?
Généralement, un grand refactoring est le meilleur endroit pour commencer - commencer à déchirer des morceaux et les combiner dans des morceaux réutilisables; ranger le code de sorte qu'il est plus facile de voir; aplatir la hiérarchie de l'héritage et éliminer les cas de bord pendants; combiner les espaces de noms; dérouler les macros; Quoi qu'il en soit pour transformer le grand désordre en un système raisonnablement compréhensible.
Vous devez le comprendre avant de pouvoir y réécrire - sinon vous allez vous retrouver avec un désordre différent.
Réécriture d'un grand projet à partir de zéro est souvent beaucoup plus difficile qu'il ne ressemble au début. Les chances sont si le code est un gâchis, les exigences et la documentation sont encore pires. Vous allez dépenser beaucoup de temps à venir avec les exigences et à déterminer comment et pourquoi chaque partie du code spaghetti fonctionne. Vous allez vous demander constamment, c'est ce comportement particulier d'un bogue, d'une fonctionnalité ou simplement d'une commodité pour le gars qui l'a écrit.
De la perspective de vos responsables et, espérons-le, de la vôtre, le but ultime est de créer de la valeur pour l'entreprise. Après tout, comme un professionnel, nous n'écrivons pas de code juste pour écrire du code que nous écrivons du code afin de gagner de l'argent.
Quelque chose que vous ne cherchez peut-être pas est le niveau de risque pour la société et pour votre responsable. Si vous commencez à travailler sur la construction à partir de zéro et ne sont pas en mesure de le compléter pour une raison quelconque de la nouvelle écriture à moitié terminée pourrait être abandonnée. Pensez à l'endroit où cette réécriture serait prioritaire s'il existe déjà une version de travail et que l'architecte principal quitte au milieu du projet. Serait-il une raison assez forte pour la société avec cette mise à niveau?
Comparez cela pour refléter le code existant où il existe toujours une version développée activement du projet. Si vous n'êtes plus disponible pour travailler sur le projet, il ne sera pas idéal, mais le risque est beaucoup plus bas.
Pour un responsable de vous laisser effectuer une réécriture complète prend beaucoup de confiance et ne vaut parfois parfois pas la peine de faire, même si la réécriture est bien plus amusante que de nettoyer le désordre d'un autre.
Je suis dans la situation où une réécriture totale est la meilleure solution. Où le code d'origine est un tas de mal conçu, peu compris, piraté par des ordures de programmeurs paresseux.
Il est presque toujours possible de refroidir ce code de la malbouffe au code utilisable. Mais le problème est le temps qu'il faudra. Toute série de refactoring va impliquer des coûts supplémentaires. Cela étant le temps et le code qu'il faut pour rendre chaque bloc de modifications fonctionnent avec le code hérité qui n'a pas encore été changé. Un autre kicker est qu'il n'est pas inhabituellement que le code d'origine ait été originaire de la même chose que vous envisagez parce que quelqu'un a commencé à "le refactoriser" et a fait le minimum (lecture de moitié arsed) ou laissée avant qu'elle soit terminée.
La plupart des gens soutiennent le refactoring parce que leur compréhension est qu'il conserve les choses qui travaillent et peuvent être faites de repas en pièce. Par conséquent, ils le perçoivent comme l'option "sûre". Principalement correct, mais pas toujours. Ils le choisissent souvent parce qu'ils sont trop effrayés pour prendre une réécrire.
Cela dit tout cela, vous devez bien comprendre ce que l'application doit faire. Si vous n'avez pas de vision claire de cela. Ensuite, il est peu probable que votre ré-écriture soit bien meilleure que l'original.