Que faire en tant que nouveau chef d'équipe sur un projet avec des problèmes de maintenabilité?

19

Je viens d'être mis en charge d'un projet de code avec des problèmes de maintenabilité. Que puis-je faire pour mettre le projet sur une base stable?

Je me retrouve dans un endroit où nous travaillons avec un très grand système .NET à plusieurs niveaux qui manque beaucoup de choses importantes telles que les tests unitaires, IOC, MEF, trop de classes statiques, des ensembles de données purs, etc. seulement 24 mais je suis ici depuis près de trois ans (cette application est en développement depuis 5 ans) et principalement en raison de contraintes de temps, nous avons simplement ajouté plus de merde pour s'adapter à l'autre merde. Après avoir fait un certain nombre de projets pendant mon temps libre, j'ai commencé à comprendre à quel point tous ces concepts sont importants. En raison du changement d'employé, je me retrouve maintenant à être le chef d'équipe de ce projet et je veux vraiment trouver des moyens intelligents d'améliorer cette application. Façons dont la valeur peut être expliquée à la direction. J'ai des idées de ce que j'aimerais faire, mais ils semblent tous si accablants sans beaucoup de gain initial. Toute histoire sur la façon dont les gens ont traité ou auraient traité cela serait une lecture très intéressante. Merci.

Mr_E
la source
Je suggérerais d'investir massivement dans des outils de couverture de code comme Re # et StyleCop (gratuit), etc. Il est beaucoup moins cher qu'un logiciel détecte des problèmes dans le code source, au moins pour la première passe.
Job

Réponses:

14

Prévoyez du temps pour attaquer la dette technique. Tu dois juste le faire. Les parties que vous attaquez en premier dépendent de l'endroit où vos développeurs passent le plus de temps actuellement, mais il est plus important que vous commenciez ensuite que vous commenciez sur les choses idéales. Si vous utilisez Scrum, mettez des éléments spécifiques de travail technique sur la dette dans votre carnet de commandes et traitez-les comme des fonctionnalités jusqu'à ce que vous les maîtrisiez.

Travailler efficacement avec Legacy Code est fortement recommandé et serait probablement utile. Je ne l'ai pas lu, mais il semble avoir beaucoup d'informations sur la façon de faire des tests unitaires dans le code hérité afin que vous puissiez le modifier et le mettre à jour en toute sécurité.

Utilisez l'analogie de la carte de crédit avec la direction - vous "payez des intérêts" sur tout ce que vous faites parce qu'il est si difficile d'accomplir quoi que ce soit. Si vous remboursez votre dette technique, vous libérerez ces ressources et pourrez développer de nouvelles fonctionnalités plus rapidement à l'avenir. Si vous ne le faites pas, vos «paiements d'intérêts» (payés en temps de développement) continueront de s'accumuler et votre équipe produira plus lentement de nouvelles fonctionnalités.

Peut-être commencez-vous à estimer le temps que vous passez chaque cycle à lutter contre la dette technique pour leur donner une idée du montant déjà accumulé. Décrivez à quoi ressemblerait un correctif ou un changement de fonctionnalité dans un système maintenable, à quoi il ressemble dans le système réel et quelles modifications devraient être apportées ou pourraient être de bonnes premières étapes pour y arriver.

Ethel Evans
la source
1
J'ai lu WEWLC et c'est vraiment bien. La chose la plus précieuse du livre est probablement la connaissance qu'il existe des moyens de gérer les choses merdiques que vous rencontrez dans les projets hérités et que vous POUVEZ inverser le processus de pourriture des logiciels.
Jason Swett
4

Faites rouler la dette technique en corrections de bugs et en fonctionnalités supplémentaires.

J'ai trouvé qu'une approche itérative de l'amélioration donne les meilleurs résultats. Le mantra de mon travail est d'améliorer la qualité du code chaque fois que vous le touchez. Chaque travail, qu'il s'agisse d'une correction de bogue ou d'une fonctionnalité, commence par une analyse de ce qui peut être corrigé / refactorisé / nettoyé. Nous essayons de faire le refactor à la hauteur (à l'échelle) du travail que nous devons terminer.

Créez une liste ordonnée des problèmes dans la base de code. Assurez-vous que tout le monde connaît la liste et l'ordre de priorité. Chaque fois qu'ils obtiennent un travail, ils devraient rechercher un problème dans la liste liée au code sur lequel vous travaillerez.

Cela ne résoudra pas tout. Certains refacteurs ou correctifs nécessitent une grande quantité de temps et de ressources. J'essaie généralement de les lier à d'autres gros travaux qui en bénéficieront.

Dietbuddha
la source
1

Je pourrais simplement dire l'évidence, mais bon.

Écrivez un petit test unitaire qui exerce un morceau de code qui a des problèmes, puis refactorisez ledit morceau, en vous assurant que le test réussit toujours. Passez à un autre morceau de code, celui que vous pouvez atteindre le plus facilement à partir de cette minuscule portion de terrain solide que vous venez de construire. Faire mousser, rincer, répéter.

Cela vous aidera également à vous familiariser un peu avec la base de code.

Après avoir fait cela pendant un certain temps, vous comprendrez qu'il est temps de faire un refactoring plus étendu. Comprendre le code dupliqué, les violations du principe DRY ... vous savez, les trucs habituels. D'ici là, vous aurez une couverture de code sans doute décente, qui vous permettra de mélanger les méthodes, d'extraire les interfaces et toutes ces commodités.

Laissez toujours la base de code un peu mieux qu'elle ne l'était avant de commencer à pirater votre chemin. Je suis sûr que c'est un petit investissement qui sera payant, même à moins long terme.

sm
la source
1

Vous pourriez essayer d'expliquer la dette technique de ce projet pour avoir une idée par où commencer. Vous pouvez également essayer de négocier qu'en raison du changement d'employé, il faut passer du temps à se familiariser avec le code et cela signifie mettre des tests pour assurer un meilleur développement futur, car les tests peuvent aider à prévenir les bogues et à faciliter les choses pour éventuellement de nouvelles personnes pour travailler sur le projet.

JB King
la source
1

Dans de tels cas, j'aime essayer de rationaliser le projet autant que possible. Découvrez quelles fonctionnalités sont absolument nécessaires pour le faire avancer. Tout système qui existe depuis longtemps a probablement un arriéré très long. Beaucoup de ces éléments seront critiques et beaucoup ne seront que des «cloches et sifflets».

En ce qui concerne les tests, les tests unitaires seront certainement utiles, mais vous voudrez peut-être demander à certains membres du personnel non technique de participer aux tests et de soumettre des bogues aux membres de votre équipe.

Bonne chance.

Britt Wescott
la source
1

Une option consiste à dépoussiérer votre curriculum vitae et à commencer la recherche d'emploi.

Une bonne question à vous poser est de savoir si ce projet mal géré est révélateur de la façon dont toute l'entreprise est gérée. Si la réponse est oui, demandez si vous êtes suffisamment payé pour rester dans une entreprise mal gérée.

smithco
la source
Oui, quelques questions à poser: la direction vous a-t-elle remis un navire abandonné? Qu'est-il arrivé à ces autres personnes qui travaillaient sur la base de code? Se sont-ils déplacés après avoir jeté la serviette dans le ring? Peut-être que le projet doit déjà être abandonné sans qu'il vous soit communiqué en tant que tel? Y a-t-il plus à réparer qu'il n'y a à récupérer?
Joppe
0

Plusieurs fois, vous pouvez pousser le refactoring par la haute direction si vous pouvez leur dire que ce sera une mise à niveau des performances ou corrigera un bogue existant. Ne modifiez pas simplement quelque chose pour changer ce que vous feriez, surtout si cela fonctionne. Le temps de correction des bogues peut également être un bon moyen d'intégrer une refactorisation car vous y êtes déjà de toute façon. Soyez assuré et ne le regardez pas car vous êtes plus jeune que vos collègues codeurs. Commencez par quelque chose de petit comme entrer dans certains tests unitaires et travailler à partir de là, vous pourriez exposer quelques bogues qui peuvent amener la gestion à vous donner des cycles pour d'autres choses.

scrappedcola
la source
0

Je lis actuellement Brownfield Application Development dans .NET qui, fondamentalement, concerne la façon de traiter les problèmes que vous rencontrez actuellement. Jusqu'à présent, j'aime la plupart de ce qu'il dit (pas tout à fait - mais c'est le genre de livre pour vous aider à réfléchir à votre manière à travers les problèmes, pas un livre qui soit destiné à être complètement normatif). Cela peut aider de plusieurs façons - cela montre que vous n'êtes pas seul; nous espérons qu'il vous donnera des conseils sur la façon de résoudre certains des problèmes.

Fondamentalement, je suis d'accord avec la plupart des approches - vous ne pouvez pas tout réparer du jour au lendemain, mais vous pouvez l'améliorer progressivement par très petites étapes. Et oui - la dette technique est la métaphore que vous devez utiliser.

Murph
la source
0

Cela dépend en fin de compte de la qualité de vos collaborateurs dans le projet. Si c'est le même équipage qui a créé le gâchis, vous avez peu de chances de l'améliorer avec le même groupe. Analysez votre personnel, trouvez vos membres les plus faibles et remplacez-les (si vous en avez la possibilité).

"Vous ne pouvez pas faire un sac en soie avec l'oreille d'une truie".

jmq
la source