Quels sont les programmes de contrôle de version peuvent appliquer la course et passer des tests avant l'intégration des changements?

StackOverflow https://stackoverflow.com/questions/681129

Question

A mon travail, nous utilisons actuellement Aegis contrôle de version / SCM. La façon dont nous avons configuré, nous avons un tas de tests, et il oblige les choses suivantes pour être vrai avant un changement peut être intégré:

  • L'ensemble complet de tests doit être rodé.
  • Tous les tests doivent avoir réussi.

Avec le développement piloté par les tests (TDD) ces exigences semblent comme sensibles. Mais je ne l'ai pas entendu parler de quelque façon que vous pouvez le faire avec d'autres systèmes de contrôle de version. (Nous ne sommes pas actuellement l'intention de changer, mais je voudrais savoir comment le faire à l'avenir sans utiliser Aegis.)

Je serais intéressé par any VCS (distribués ou non) qui peut le faire, je suis aussi intéressé par des plugins / extensions de VCS existantes qui permettent. De préférence, un logiciel open source.

ETA: OK, il semble que la chose habituelle à faire est d'avoir VCS + logiciel continu d'intégration et l'exécution des tests est automatisé dans le cadre de la construction, au lieu comme une étape distincte. Si je comprends bien, que toujours permet vous commettez code qui ne passe pas les tests, juste vous êtes informé à ce sujet - est-ce pas? Y at-il quelque chose qui vous empêcher d'être en mesure d'intégrer / engager du tout?

Était-ce utile?

La solution

OMI vous êtes beaucoup mieux à l'aide d'un système d'intégration continue comme CruiseControl ou Hudson si vous souhaitez appliquer que vos tests passent, et faire de la construction plutôt que l'enregistrement en fonction des résultats des tests. Les outils sont simples à mettre en place, et vous obtenez les avantages de la notification intégrée des résultats (par email, RSS ou plugins navigateur) et les résultats des tests de rapports via une page Web.

En ce qui concerne la mise à jour à la question, vous avez raison - VCS + CI vous permet de valider le code qui ne passe pas les tests; avec la plupart des configurations CI, vous ne pourrez pas obtenir une version finale de votre produit à moins que tous les tests passent. Si vous voulez vraiment empêcher quiconque de même commettre à moins que tous les tests que vous devrez passer à utiliser des crochets dans le VCS comme d'autres l'ont suggéré. Cependant, cela me semble être difficile à traiter - soit les développeurs auraient à exécuter tous les tests à chaque fois ils ont fait un checkin, y compris des tests qui ne sont pas pertinents pour le checkin qu'ils font, ou vous auriez à faire quelques crochets VCS très granulaires qui fonctionnent uniquement les tests qui sont pertinents à un checkin donné. Dans mon expérience, il est beaucoup plus efficace de compter sur les développeurs pour exécuter les tests pertinents au niveau local, et que le système de CI ramasser sur les erreurs occasionnelles.

Autres conseils

Avec la subversion et git vous pouvez ajouter des crochets pré-engager à le faire.

On dirait que vous avez besoin de regarder Intergration continu (ou une variante).

Pensez Git a un crochet appliquer trop patch.

Subversion et git la fois soutenir ceci par l'intermédiaire des crochets de pré-validation.

Visual Studio Team système prend en charge nativement par politiques checkin .

Je crois que Rational ClearCase soutient aussi, bien que je ne l'ai jamais vu que démontrais donc je ne peux pas dire avec certitude.

Nous utilisons git et buildbot pour faire quelque chose de similaire, mais pas tout à fait la même chose. Nous donnons chaque développeur leur propre dépôt Git, et ont le buildbot mis à construire tout moment pousse à l'un de ces dépôts. Ensuite, il y a quelqu'un qui agit comme intégrateur, qui peut vérifier l'état de buildbot, examiner les changements et fusionner leurs modifications ou leur dire de réparer quelque chose, selon le cas.

Il y a beaucoup de variations de ce flux de travail que vous pourriez faire avec Git. Si vous ne voulez pas que quelqu'un soit l'intégrateur, vous pouvez manuellement probablement régler la buildbot pour exécuter un script sur le succès, qui fusionnerait automatiquement le changement de cette personne dans le référentiel maître (bien qu'il faudrait traiter les cas où automatique fusion ne fonctionnait pas, et il faudrait tester les résultats de la fusion et puisque le code même qui fusionne proprement peut parfois introduire d'autres problèmes).

Je crois que le logiciel d'intégration continue, comme la ville d'équipe vous permettent de faire construire pré-validation et de test. Je ne connais pas de VCS qui fournit directement ... il peut y avoir un peu comme celui que vous utilisez, mais je ne suis pas familier avec eux.

Vous pouvez également utiliser des crochets pré-livraison en Perforce. Et, si vous êtes un magasin .NET, Visual Studio peut être configuré pour exiger checkins "gated".

VSTS avec des éléments de travail personnalisé, non? Je ne vois rien de mal à utiliser cela. Construit dans les rapports. Le choix d'automatiser. Pourquoi pas?

Ce que je fais ici suit une par modèle de tâche qui vous permet de tester le code déjà submmitted pour le contrôle de version, mais en gardant toujours la ligne principale vierge. En savoir plus sur ce modèle .

Vous pouvez trouver plus d'informations sur les stratégies d'intégration et aussi commentaires à propos de Mark Shuttleworth sur le contrôle version ici .

La plupart des implémentations de CI ont un mécanisme de rejeter check-ins qui ne répondent pas à tous les critères (plus passer notamment tous les tests). Ils sont appelés par des noms différents. VCS devraient faire ce qu'ils font le mieux le code source de la version ...

scroll top