Dans quelques mois, un collègue passera à un nouveau projet et je vais hériter de l'un de ses projets. Pour me préparer, j'ai déjà commandé le logiciel Travailler efficacement avec Legacy Code de Michael Feathers .
Mais ces livres, ainsi que la plupart des questions sur le code existant que j'ai trouvées jusqu'à présent, concernent le cas de l'héritage du code tel quel. Mais dans ce cas, j'ai effectivement accès au développeur d'origine et nous avons un peu de temps pour une passation méthodique.
Quelques informations sur le morceau de code dont je vais hériter:
- Cela fonctionne: il n’ya pas de bugs connus, mais à mesure que les exigences de performances ne cessent d’augmenter, certaines optimisations deviendront nécessaires dans un avenir pas trop éloigné.
- Non documenté: Il n'y a pratiquement aucune documentation au niveau de la méthode et de la classe. Ce que le code est censé faire à un niveau supérieur, cependant, est bien compris, car j'écris depuis des années contre son API (en tant que boîte noire).
- Seuls les tests d'intégration de niveau supérieur: seuls des tests d'intégration testent l'interaction correcte avec d'autres composants via l'API (encore une fois, la boîte noire).
- Niveau très bas, optimisé pour la vitesse: ce code étant au cœur de tout un système d’applications, il a été optimisé à plusieurs reprises au fil des années et est de niveau extrêmement bas (une partie possède son propre gestionnaire de mémoire pour certaines structures). / enregistrements).
- Concurrent et sans verrouillage: Bien que je sois très familiarisé avec la programmation simultanée et sans verrouillage et que j'ai en fait contribué à quelques éléments de ce code, cela ajoute une couche de complexité supplémentaire.
- Large base de code: Ce projet particulier comporte plus de dix mille lignes de code, il est donc impossible que tout me soit expliqué.
- Écrit à Delphes: Je vais simplement exposer ceci, bien que je ne pense pas que le langage soit pertinent pour la question, car je pense que ce type de problème est agnostique.
Je me demandais quelle serait la meilleure utilisation de son temps jusqu'à son départ. Voici quelques idées:
- Tout construire sur ma machine: Même si tout doit être contrôlé dans le contrôle de code source, celui qui n’a pas oublié de vérifier un fichier de temps en temps, c’est donc probablement le premier ordre du jour.
- Davantage de tests: bien que je veuille davantage de tests unitaires au niveau de la classe afin de pouvoir détecter les bogues que je pourrais introduire très tôt, le code tel qu’il est actuellement n’est pas testable (classes énormes, méthodes longues, trop dépendances mutuelles).
- Ce qu'il faut documenter: Je pense que pour commencer, il serait préférable de centrer la documentation sur les zones du code qui seraient autrement difficiles à comprendre, par exemple en raison de leur nature de bas niveau / hautement optimisée. J'ai bien peur qu'il y ait quelques éléments qui pourraient paraître laids et qui auraient besoin d'être refactorisés / réécrits, mais il s'agit en réalité d'optimisations qui ont été publiées pour une bonne raison qui pourrait me manquer (cf. Joel Spolsky, Things You Should Ne fais jamais, partie I )
- Comment documenter: Je pense que certains diagrammes de classes de l'architecture et des diagrammes de séquence de fonctions critiques accompagnés de prose seraient les meilleurs.
- Qui documenter: Je me demandais ce qui serait mieux, de lui demander de rédiger la documentation ou de me l'expliquer, afin que je puisse rédiger la documentation. J'ai bien peur que des choses évidentes pour lui mais pas moi ne soient autrement pas couvertes correctement.
- Refactoriser à l'aide de la programmation par paire: cela pourrait ne pas être possible à cause des contraintes de temps, mais je pourrais peut-être refactoriser une partie de son code pour le rendre plus facile à maintenir pendant qu'il était encore là pour expliquer pourquoi les choses sont comme elles.
S'il vous plaît commenter et ajouter à cela. Puisqu'il n'y a pas assez de temps pour tout faire, je suis particulièrement intéressé par la définition de vos priorités.
Mise à jour: Une fois le projet de transfert terminé, j'ai développé cette liste avec mes propres expériences dans la réponse ci-dessous .