Souvent, les correctifs / listes de modifications "complexes" sont ceux qui font beaucoup de choses différentes à la fois. Il y a un nouveau code, un code supprimé, un code refactorisé, un code déplacé, des tests étendus; il est difficile de voir la grande image.
Un indice commun est que le correctif est énorme mais sa description est minuscule: "Implement $ FOO".
Un moyen raisonnable de gérer un tel patch consiste à demander qu’il soit divisé en une série de morceaux plus petits et autonomes. Tout comme le principe de responsabilité unique stipule qu'une fonction ne doit faire qu'une seule chose, un patch doit également se concentrer sur une seule chose.
Par exemple, les premiers correctifs peuvent contenir des modifications de refactorisation purement mécaniques qui ne font pas de modifications fonctionnelles. Les correctifs finaux peuvent ensuite se concentrer sur la mise en œuvre et les tests réels de $ FOO avec moins de distractions et de faussetures.
Pour les fonctionnalités qui nécessitent beaucoup de nouveau code, le nouveau code peut souvent être introduit dans des fragments testables qui ne modifient pas le comportement du produit jusqu'à ce que le dernier correctif de la série appelle réellement le nouveau code (un flip d'indicateur).
Pour ce qui est de faire cela avec tact, je le considère généralement comme mon problème, puis je demande l'aide de l'auteur: "J'ai du mal à suivre tout ce qui se passe ici. Pourriez-vous diviser ce patch en étapes plus petites pour m'aider à comprendre comment ensemble?" Il est parfois nécessaire de faire des suggestions spécifiques pour les plus petites étapes.
Si gros patch comme "Implement $ FOO" se transforme en une série de patchs comme:
- Introduisez une nouvelle version de Frobnicate qui nécessite deux itérateurs, car je vais devoir l'appeler avec des séquences autres que vector pour implémenter $ FOO.
- Basculez tous les appelants existants de Frobnicate pour utiliser la nouvelle version.
- Supprimez l'ancien Frobnicate.
- Frobnicate en faisait trop. Intégrez l’étape la plus simple dans votre propre méthode et ajoutez des tests pour cela.
- Présentez Zerzify, avec des tests. Pas encore utilisé, mais j'en aurai besoin pour $ FOO.
- Implémentez $ FOO avec Zerzify et le nouveau Frobnicate.
Notez que les étapes 1 à 5 n'apportent aucune modification fonctionnelle au produit. Ils sont faciles à examiner, notamment pour vous assurer que vous avez tous les bons tests. Même si l'étape 6 est toujours "compliquée", au moins, elle est axée sur $ FOO. Et naturellement, le journal vous donne une bien meilleure idée de la façon dont $ FOO a été implémenté (et de la raison pour laquelle Frobnicate a été modifié).