Comment puis-je gérer correctement les validations, prévenir les conflits de fonctionnalités et gérer les dépendances avec un VCS?

9

C'est devenu un facteur ennuyeux de travailler avec de grandes équipes: comment gérer les enregistrements et éviter les conflits de fonctionnalités et gérer correctement les dépendances avec le contrôle des sources?

Actuellement sur mon lieu de travail, nous utilisons TFS 2008 et nous migrons vers TFS 2010 début décembre. Tout d'abord, tout contrôle de source est meilleur que rien, mais quelle approche quelqu'un a-t-il trouvé utile pour empêcher plusieurs enregistrements et restaurations dans tout l'historique du contrôle de source? Est-ce qu'un tronc volatile est la meilleure façon d'aller ou de se dériver lorsque vous implémentez une nouvelle fonctionnalité et une fois que vous êtes heureux de le réintégrer dans le tronc?

J'aimerais vraiment entendre les expériences d'autres personnes et peut-être quelques meilleures pratiques pour gérer le contrôle des sources.

Nickz
la source
3
La meilleure solution que j'ai trouvée pour traiter avec TFS était d'avoir mon propre GIT privé où je peux parcourir toutes les branches dont j'ai besoin et effectuer des validations sur TFS par étapes mineures (petite fonctionnalité, fonctionnalité partielle) plus petite est meilleure, mais vous devez également assurez-vous que le code est sain lorsque vous vous engagez. Sur une branche par fonctionnalité / correction de bogue / itération, je m'engagerais sur TFS à la fin de la "branche". Cependant en interne, il est assez courant pour moi d'avoir plusieurs branches pour les différents essais et explorations. Les outils TFS Power ici sont très utiles pour automatiser la fusion
Newtopian
1
Veuillez expliquer plus en détail ce que vous entendez par «enregistrements multiples» et «violer le coffre». J'espère vraiment que chacun de mes ingénieurs effectue plus d'un enregistrement en tant que membres de mon équipe.
Manfred
La stratégie de branchement du contrôle des sources est un sujet important. programmers.stackexchange.com/questions/107884/…
gnat
@John - Je pense que "violer" était une faute de frappe pour "volatile"
ChrisF

Réponses:

7

TFS? Courez pour les collines! Partez aussi vite que possible. Il fait beaucoup de choses différentes, mais aucune n'est aussi bonne que les meilleurs outils disponibles.

Mais sérieusement:

Une fois que vous avez un système de contrôle de version décent (SVN, GIT, etc.), je recommanderais de définir des règles pour la gestion des succursales, par exemple quand créer des succursales, pour quoi, quand fusionner, qui, et bien plus encore.

Jusqu'à récemment, nous utilisions une seule branche pour les nouveaux développements («tronc»). Pour une version, nous créerions une branche hors du tronc. L'AQ finale serait effectuée dans cette branche et une fois terminée, nous publierions (nous sommes sur des versions mensuelles).

Nous sommes passés au concept de «pas de courrier indésirable dans le coffre» pour réduire le risque d'horaire. Ce concept contient essentiellement une règle par laquelle vous créez des branches pour le travail de développement distinctes du tronc. Par exemple, vous pouvez avoir une branche distincte pour une fonctionnalité, pour une petite équipe de développement ou similaire. Nous utilisons des «épopées» pour décrire une petite fonctionnalité ou une partie libérable d'une fonctionnalité et créer une branche pour chaque épopée. Au moins une fois par jour, tous les changements du tronc sont fusionnés dans la branche épique. La clé est une bonne prise en charge de la fusion par le contrôle de version ou un outil séparé (par exemple la fusion à trois voies). L'AQ pour l'épopée se ferait sur la branche épique. Une fois passée, la branche épique serait fusionnée dans le tronc et un test d'intégration serait exécuté. Nous avons encore des succursales pour les sorties.

Avec les branches épiques, nous avons considérablement réduit le risque de calendrier car nous sommes maintenant en mesure de sortir du coffre et d'inclure toutes les épopées qui ont été fusionnées avec succès dans le coffre. Les épopées qui ne sont pas complètes manquent le bus et feront la prochaine sortie (le mois prochain).

Bien sûr, cela ne peut fonctionner que dans notre environnement. Très probablement, vous aurez des facteurs différents des nôtres qui influeront sur les meilleurs choix pour la gestion des succursales.

Par exemple, si vous avez une équipe avec beaucoup de personnes travaillant à distance et n'étant pas toujours connectées au serveur de contrôle de version, alors vous voudrez utiliser un système de contrôle de version qui prend en charge un modèle distribué. GIT et quelques autres tomberaient dans cette catégorie. TFS à ma connaissance nécessite une connexion au serveur pour rendre les fichiers accessibles en écriture (corrigé dans la version 2010?).

J'espère avoir pu montrer qu'il n'y a pas de "taille unique". Commencez par vos processus en particulier la gestion des succursales, déterminez les exigences et enfin sélectionnez l'outil qui correspond le mieux à vos besoins. C'est peut-être TFS, peut-être pas.

Manfred
la source
2
"TFS? Courez pour les collines!" - Je suis tenté de créer un deuxième compte pour que je vote deux fois.
Ant
Heureux d'entendre que cela fonctionne pour vous. J'ai été dans des projets similaires où cela était nécessaire. Mais la façon dont vous effectuez la fusion des branches "épiques" facilite les choses. Je voudrais ajouter que ce sera probablement une horrible douleur à chaque fois.
Lionel du
1
@Lionel: Je suis d'accord, cela peut arriver. J'ai vu quelque chose de similaire dans le passé qui tournait horriblement mal aussi. D'après mon expérience, la clé pour réussir à utiliser cette approche est de garder le delta entre les branches de tronc et de fonctionnalité aussi petit que possible. Au moins une fois par jour, vous devez fusionner depuis le coffre. De même, il est rentable d'avoir des épopées / fonctionnalités aussi petites que possible, par exemple plus sur l'échelle jours / semaines que sur plusieurs mois. Extrêmement bénéfique est également une architecture et une conception propres et un code (entièrement) refactorisé.
Manfred
@John Entièrement d'accord avec votre dernier commentaire. Le principal problème que j'ai rencontré par le passé est que les «nouvelles fonctionnalités» sont généralement grandes, compliquées et contiennent des modifications de conception du code existant dans le coffre. Cela peut prendre des mois à mettre en œuvre et à tester. Leur fusion dans le coffre serait un cauchemar lorsqu'il y a plus d'une équipe travaillant sur différentes fonctionnalités.
Lionel
4

Je préconise une branche par fonctionnalité car elle permet une grande flexibilité lors du choix des fonctionnalités à expédier et de celles à reporter.

La façon dont cela fonctionne dans votre situation dépend de la façon dont votre VCS gère les branches et, plus important encore, la fusion. Les DVCS comme Git et Mercurial en font un exercice relativement trivial. SVN moins. J'ai réussi à éviter TFS bien que j'aie beaucoup lu à ce sujet, la plupart du temps peu compliqué, je le crains. Si vous êtes bloqué avec TFS, faites une petite version pilote basée sur une fonctionnalité par branche et voyez à quel point la fusion se déroule pour vous.

mcottle
la source
2

Tout d'abord, un avertissement. Il est difficile de dire quelle est la meilleure façon de gérer votre source, car nous ne savons pas comment votre ou vos équipes travaillent au quotidien.

Généralement, il vaut mieux travailler sur le tronc. Pour chaque version majeure, branchez-la - afin que les correctifs de bogues pour la version de la version se trouvent sur la branche qui peut être fusionnée dans le tronc. Tous les développeurs travaillent sur le tronc et commettent du code régulièrement (au minimum une fois par jour).

La fusion de nouveau code dans minimise régulièrement la douleur de la fusion de gros morceaux de code dans une phase d'intégration massive. En étalant la douleur, vous la ressentirez moins. Plus les membres de votre équipe valident le code, moins ils devront fusionner - car ils seront toujours sur la dernière source.

Lionel
la source
2
Je suis totalement en désaccord sur le travail sur le coffre. Si le tronc est cassé, tout le monde sera touché. Je suis également en désaccord sur la création de branches après une version majeure, et si un bogue affecte deux versions ou plus, vous le corrigez dans chaque branche?
Trasplazio Garzuglio
@ marco-dinacci: Ce que vous dites peut être correct si plusieurs versions sont maintenues à tout moment. Cependant, vous ignorez le fait que les correctifs de ces bogues seraient fusionnés dans le tronc. Les autres versions pourraient alors tirer les modifications. Concernant la rupture du tronc. Avant de valider le code dans le tronc, vous devez vous assurer que vous disposez de toutes les dernières sources et que votre modification n'a pas rompu le tronc. S'il est cassé, vous ne devez pas valider tant qu'il n'est pas corrigé. Bien sûr, les différentes approches présentent des avantages et des inconvénients.
Lionel
1

Je n'ai jamais utilisé TFS 2008/2010 mais d'après ce que j'ai lu dans divers forums, il y a beaucoup de négativité à utiliser TFS pour le contrôle de version. Cela m'a permis de rester loin de TFS jusqu'à présent.

J'utilise actuellement SVN et Git, je les trouve tous les deux bons pour les petites équipes ou les équipes individuelles, mais je ne recommanderais pas personnellement SVN pour une grande équipe.

J'ai mes yeux sur PlasticSCM et j'essaierai de le faire dans un proche avenir.

Je m'excuse de ne pas avoir répondu à votre question spécifique, j'aurais posté un commentaire si mes privilèges m'y avaient permis.

Filip
la source
1

Je pense que git rend tous les autres logiciels de contrôle de source obsolètes. Le branchement et la fusion sont faciles, et s'il y a des problèmes, ils sont contenus, mais de nombreux problèmes sont évités par la façon dont il encourage les commits, les branchements et les fusions très fréquents. Chaque utilisateur obtient une copie complète du dépôt (cela peut être élagué, mais je travaille avec une base de code assez énorme et ce n'est pas un problème), il y a donc quelque chose d'une sauvegarde automatique. Les validations / push / pull sont rapides, et l'une des choses les plus importantes est qu'il rompt le couplage entre le nom de fichier et le suivi. Les données du fichier, y compris le nom et le chemin, sont un objet de données référencé par un nœud d'arborescence, indépendant des chemins. Ce n'est pas seulement plus sûr, mais certains types de problèmes "ne faites jamais ça" dans quelque chose comme SVN ne sont pas un problème. Il peut être utilisé comme une configuration de concentrateur traditionnelle ou peer to peer, et ces utilisations peuvent être mélangées librement dans la même configuration. Il est cryptographiquement sécurisé contre les insertions non documentées. Et c'est très rapide.

Je trouve que je l'utilise à la maison maintenant tout le temps, juste pour garder une trace des documents et les synchroniser entre les ordinateurs, car il est plus facile de les valider et de les envoyer au serveur de fichiers que de les sauvegarder sur le serveur ou de les y enregistrer.

L'inconvénient est un peu une courbe d'apprentissage abrupte, car elle casse toutes les règles auxquelles les gens sont habitués avec le contrôle de source, de manière subtile, mais c'est une courte courbe d'apprentissage abrupte.

kylben
la source
1
Git est vraiment bon, mais (comme tout) ce n'est pas la meilleure solution pour tout le monde et tout. programmers.stackexchange.com/questions/111633/…
Rook
4
De quelle manière Git rend-il Mercurial obsolète? Surtout dans un environnement de développement Windows. Il serait préférable de dire que le DVCS rend les autres VCS obsolètes plutôt que de jeter une bombe à essence et de déclencher une guerre sainte.
mcottle
@mcottle - Je n'irais même pas aussi loin. SVN par exemple est un bel exemple de VCS non distribué de qualité. Nous pouvons dire que SVN rend CVS obsolète, mais je m'arrêterais là. Git ne rend en aucun cas SVN obsolète - c'est une approche complètement différente qui est bonne pour certains, mais mauvaise pour d'autres approches (pour plus voir le lien ci-dessus). Par exemple, Git et Hg "sucent" relativement les fichiers binaires.
Tour
@ldigas: De quelle manière git et hg "sucent" pire avec des fichiers binaires que svn? Aucun des deux ne peut suivre les modifications des binaires au-delà de la granularité par fichier, avec toutes les conséquences associées. En outre, ils rendent tous les deux svn obsolètes, en voyant comment l'un ou l'autre peut faire exactement ce que fait svn (à part quelques fonctionnalités obscures), puis certaines; il vous suffit de le configurer de cette façon. La meilleure raison d'utiliser SVN à laquelle je peux penser est que vous l'utilisez déjà et que la migration serait trop douloureuse / risquée / coûteuse.
tdammers
@tdammers - Je ne suis pas intéressé par une discussion à la traîne. Pour tous les points ci-dessus, google un peu et vous tomberez sur quelque chose d'assez rapide.
Tour
1

Certaines des bonnes pratiques que nous suivons vraiment et nous ont beaucoup aidés:

1) Assurez-vous que vous ne disposez pas d'une copie inscriptible du fichier dans votre section locale et que vous vérifiez toujours pour modifier. (Si vous devez parfois travailler localement, essayez de le fusionner dans le contrôle de source avant EOD.)

2) Étiquetez vos fichiers périodiquement, après de petits jalons importants.

3) Donnez de bons commentaires sur le paiement ou l'enregistrement. Cela vous aidera lorsque vous réviserez, parfois vous n'avez pas besoin d'ouvrir et de comparer les versions.

franklins
la source
1

comment gérez-vous les enregistrements et empêchez-vous les conflits de fonctionnalités et gérez-vous correctement les dépendances avec le contrôle de code source?

C'est, d'après mon PDV, une tâche à deux facteurs: vous devez le faire du côté technique (branchement bon et facile et à l'épreuve des balles | fusion | audit, etc.) et de la gestion (politique bien établie "quoi" "quand" "comment"). Deux ou même trois niveaux de code de séparation dans ALM: quelque chose comme "stable" (test unitaire réussi), "instable" (toutes les fonctionnalités incluses sont terminées, mais l'application en tant que produit a des questions après l'intégration / oui, cela peut arriver /) et " travaux en cours ". De cette façon, un chef de projet approprié peut réduire l'interférence du travail de développeur séparé en commun.

TFS (que je n'utilise pas, utilise et n'utiliserai pas) a, AFAIK, des problèmes fondamentaux dans son aspect de gestion du contrôle de source. Je fais juste un lien ici vers certains des textes de James McKay:

Blaireau paresseux
la source
1

Un article très agréable et récent qui compare et contraste de manière claire et concise quelques façons différentes de travailler avec le contrôle de source est ici: Source Control Done Right .

Je ne pense pas qu'il existe une stratégie / meilleure pratique pour l'utilisation du contrôle de code source. Les équipes matures qui travaillent ensemble depuis longtemps éprouvent beaucoup moins de «douleur» dans ce domaine même si elles ne suivent pas exactement les «meilleures pratiques» populaires.

Quant aux outils ... Peu importe presque. Ce qui compte vraiment, c'est que tout le monde dans votre équipe soit sur la même page en ce qui concerne l'utilisation. Cela signifie que tout le monde doit comprendre comment la ligne de code est gérée et ce qu'ils doivent faire. Et de toute façon, dans la pratique, vous n'avez généralement pas le choix de l'outil à utiliser. Tirez le meilleur parti de tout ce que vous utilisez.

Angelo
la source