Quelques observations :
Sur place : 1. Tu n'as jamais eu le temps de le faire.
Si vous traitez le remaniement comme quelque chose de distinct du codage (au lieu d'une partie intrinsèque du codage correct), et si vous ne pouvez pas gérer le temps, alors oui, vous n'aurez jamais le temps pour cela.
- Le "changement de contexte" est mentalement coûteux (il est difficile de quitter ce que l'on est en train de faire au milieu de celui-ci).
Voir le point précédent ci-dessus. Le remaniement est une composante active des bonnes pratiques de codage. Si vous séparez les deux comme s'il s'agissait de deux tâches différentes, alors 1) vos pratiques de codage ont besoin d'être améliorées/maturées, et 2) vous vous engagerez dans un changement de contexte sévère si votre code a grand besoin d'être refactoré (encore une fois, la qualité du code).
- Ce n'est généralement pas une tâche facile.
Seulement si le code que vous produisez ne se prête pas à une refactorisation. En d'autres termes, le code qui est difficile à remanier présente un ou plusieurs des éléments suivants (la liste n'est pas exhaustive) :
-
Complexité cyclomatique élevée ,
- Pas de responsabilité unique par classe (ou procédure),
- Couplage élevé et/ou faible cohésion (c'est à dire faible) Métriques LCOM ),
- mauvaise structure
- Ne pas suivre le Principes SOLIDES .
- Aucune adhésion à la Loi de Déméter le cas échéant.
- Une adhésion excessive à la Loi de Déméter quand c'est inapproprié.
- Programmer en fonction des implémentations plutôt que des interfaces.
- Il y a toujours la peur de casser quelque chose qui fonctionne maintenant.
Les tests ? Vérification ? Analyse ? Tout cela avant d'être enregistré dans le contrôle de la source (et certainement avant d'être livré aux utilisateurs) ?
De l'autre : 1. L'utilisation de ce code est source d'erreurs.
Seulement s'il n'a jamais été testé/vérifié et/ou s'il n'y a pas de compréhension claire des conditions et des modèles d'utilisation dans lesquels le code potentiellement sujet aux erreurs fonctionne de manière acceptable.
- Au fil du temps, vous pouvez vous rendre compte que si vous aviez remanié le code de la manière suivante première fois que vous l'avez vu - Cela vous aurait fait gagner du temps sur le long terme.
Cette prise de conscience ne doit pas se faire au fil du temps. Une bonne ingénierie et une bonne éthique de travail exigent que cette prise de conscience ait lieu lorsque l'artefact (matériel ou logiciel) est en cours de réalisation.
Ma question est donc la suivante : en pratique, quand décidez-vous qu'il est temps de remanier votre code ?
Pratiquement Lorsque je suis en train de coder, je détecte un domaine qui doit être amélioré (ou quelque chose qui doit être corrigé après une modification des exigences ou des attentes) et j'ai l'occasion de l'améliorer sans sacrifier un délai. Si je ne peux pas remanier à ce moment-là, je documente simplement le défaut perçu et je crée un plan réalisable et réaliste pour revisiter l'artefact afin de le remanier.
Dans la vie réelle, il y aura des moments où nous coderons un affreux bidule juste pour que les choses fonctionnent, ou parce que nous sommes épuisés et fatigués ou autre. C'est la réalité. Notre travail consiste à faire en sorte que ces incidents ne s'accumulent pas et ne restent pas sans réponse. Et la clé pour cela est de refactorer au fur et à mesure que vous codez, de garder le code simple et avec une bonne structure, simple et élégante. Et par "élégant", je ne veux pas dire "malin" ou ésotérique, mais qui affiche ce qui est typiquement considéré comme des attributs lisibles, simples, composables (et des attributs mathématiques lorsqu'ils s'appliquent pratiquement.)
Un bon code se prête au remaniement ; il affiche de bonnes métriques ; sa structure ressemble à la fois à celle d'un code de base et à celle d'un code de base. composition de la fonction informatique y composition de fonctions mathématiques il a une responsabilité claire ; il rend ses invariants, ses pré et post-conditions évidents ; et ainsi de suite.
J'espère que cela vous aidera.