Que faites - vous avec un développeur qui ne teste pas son code? [fermé]
Un de nos développeurs écrit continuellement du code et le met en contrôle de version sans le tester. La qualité de notre code en souffre.
En plus de se débarrasser du développeur, Comment puis-je résoudre ce problème?
Modifier
Je lui ai parlé à ce sujet nombre de fois et même lui a donné un avertissement écrit
30 réponses
Si vous effectuez systématiquement des révisions de code avant de permettre à un développeur de valider le code, Eh bien, votre problème est principalement résolu. Mais cela ne semble pas être votre cas, c'est ce que je recommande:
- parlez au développeur. discutez des conséquences pour les autres membres de l'équipe. La plupart des développeurs veulent être reconnus par leurs pairs, donc cela pourrait suffire. Signalons également qu'il est beaucoup plus facile de corriger les bugs dans le code qui est frais dans votre esprit que semaines-vieux code. Cette partie a du sens si vous avez une forme de Code owneship en place.
- si cela ne fonctionne pas après un certain temps, essayez de mettre en place une politique qui rendra le code bogué de validation désagréable pour l'auteur. Un moyen populaire est de rendre la personne qui a brisé la construction responsable des tâches de création de la suivante. Si votre processus de construction est entièrement automatisé, cherchez une autre tâche subalterne à prendre en charge à la place. Cette approche a l'avantage supplémentaire de ne pas repérer qui que ce soit dans en particulier, ce qui le rend plus acceptable pour tout le monde.
- utiliser des mesures disciplinaires . Selon la taille de votre équipe et de votre entreprise, celles-ci peuvent prendre de nombreuses formes.
- Feu le développeur. Il y a un coût associé à la conservation des pommes pourries. Quand vous arrivez jusqu'ici, le développeur ne se soucie pas de ses collègues développeurs, et vous avez déjà un problème de personnes sur vos mains. Si l'environnement de travail devient empoisonné, vous risquez de perdre beaucoup plus de productivité et les gens-sage - que ce seul mauvais développeur.
Si vous pouvez faire des critiques de code-c'est un endroit parfait pour l'attraper.
Nous avons besoin de commentaires avant de fusionner au tronc d'itération, donc généralement tout est pris alors.
Coups rituels! Pour chaque insecte, un fouet du fouet!
(une blague pour quiconque ne comprend pas)
En tant que développeur qui teste rarement son propre code, je peux vous dire la seule chose qui m'a fait changer lentement mon comportement...
La Visibilité
Si l'environnement permet de pousser le code, d'attendre que les utilisateurs trouvent des problèmes, puis de demander essentiellement "Que diriez-vous maintenant?"après avoir apporté une modification au code, il n'y a aucune incitation réelle à tester vos propres choses.
Les revues de Code et la collaboration vous encouragent à travailler à la fabrication d'un produit de qualité beaucoup plus que si vous étaient juste livrer 'Widget X' pendant que vos collègues travaillent sur 'Widget Y 'et'Widget Z'
Plus votre travail est visible, plus vous êtes susceptible de vous soucier de la façon dont il fonctionne.
Faire partie de ses objectifs D'examen annuel. S'il n'y parvient pas, pas d'augmentation de salaire.
Parfois, bien que vous ayez juste à accepter que quelqu'un n'est tout simplement pas bon pour votre équipe/environnement, cela devrait être un dernier recours et peut être difficile à gérer, mais si vous avez épuisé toutes les autres options, cela peut être la meilleure chose à long terme.
Dites au développeur que vous souhaitez voir un changement dans leurs pratiques dans les 2 semaines ou vous commencerez la procédure disciplinaire de votre entreprise. Offrez autant d'AIDE et d'assistance que vous le pouvez, mais si vous ne pouvez pas changer cette personne, il n'est pas bon pour votre entreprise.
À l'aide du régulateur de vitesse ou d'un outil similaire, vous pouvez faire en sorte que checkins déclenche automatiquement une génération et des tests unitaires. Vous devrez toujours vous assurer qu'il existe des tests unitaires pour toute nouvelle fonctionnalité qu'il ajoute, ce que vous pouvez faire en regardant ses checkins. Cependant, c'est un problème humain, donc une solution technique ne peut aller aussi loin.
Révision du Code. Collez tous vos dev dans une pièce tous les lundis matin et demandez-leur d'apporter leur accomplissement basé sur le code le plus fier de la semaine précédente avec eux à la réunion.
Laissez - les prendre le feu des projecteurs et s'enthousiasmer pour expliquer ce qu'ils ont fait. Demandez-leur d'apporter des copies du code afin que les autres développeurs puissent voir de quoi ils parlent.
Nous avons commencé ce processus il y a quelques mois, et il est étonnant de voir la quantité de contrôles de qualité subconscients qui dérouler. Après tout, si les développeurs sont simplement invités à parler de ce qui les excite le plus, ils seront totalement ravis de montrer aux gens leur code. Ensuite, d'autres développeurs verront les erreurs de qualité et discuteront publiquement pourquoi ils ont tort et comment le code devrait vraiment être écrit à la place.
Si cela ne permet pas à votre dev d'écrire du code de qualité, il n'est probablement pas un bon choix pour votre équipe.
Pourquoi ne pas lui parler? Il ne te mordra probablement pas.
Faites - lui "garder" la construction, et devenez le gestionnaire de construction. Cela lui donnera moins de temps pour développer du code (augmentant ainsi les performances de tout le monde) et lui apprendra pourquoi une bonne construction est si nécessaire.
Appliquer les cas de test-le code ne peut pas être soumis sans cas de test unitaire. Modifiez le système de construction de sorte que si les cas de test ne compilent pas et ne s'exécutent pas correctement, ou n'existent pas, la vérification de la tâche entière est refusée.
-Adam
Publier des statistiques sur la couverture du code de test par développeur, ce serait après lui avoir parlé.
Voici quelques idées d'un bidonville de mer.
Intro
What shall we do with a drunken sailor, (3×)
Early in the morning?
Chorus
Wey–hey and up she rises, (3×)
Early in the morning!
Verses
Stick him in a bag and beat him senseless, (3×)
Early in the morning!
Put him in the longboat till he’s sober, (3×)
Early in the morning!
Etc. Remplacez "Drunken sailor" par un "développeur bâclé".
Selon le type de système de contrôle de version que vous utilisez, vous pouvez configurer des stratégies d'enregistrement qui forcent le code à passer certaines exigences avant d'être autorisé à s'enregistrer. Si vous utilisez un sytem comme Team Foundation Server, il vous permet de spécifier les exigences de couverture de code et de test unitaire pour les enregistrements.
Vous savez, c'est une occasion parfaite d'éviter de le singulariser (bien que je convienne que vous devez lui parler) et de mettre en œuvre un processus de Test en interne. Si les règles ne sont pas claires et que les attentes sont connues de tous, j'ai trouvé que ce que vous décrivez n'est pas si rare. Je trouve que faire le schéma de développement test-first fonctionne bien pour moi et améliore la qualité du code.
Ils peuvent être trop axés sur la vitesse plutôt que sur la qualité.
Cela peut inciter certaines personnes à se précipiter à travers les problèmes pour effacer leur liste et voir ce qui revient dans les rapports de bogues plus tard.
Pour corriger cet équilibre:
- n'affectez que quelques éléments à la fois dans votre système de suivi des problèmes,
- révision du code et tester tout ce qu'ils ont "terminé" dès que possible afin qu'il soit de retour avec eux immédiatement s'il y a des problèmes
- parlez-leur de vos attentes sur combien de temps un élément prendra pour faire correctement
La programmation par les pairs est une autre possibilité. S'il est avec un autre développeur qualifié de l'équipe qui meurt répond aux normes de qualité et connaît la procédure, cela a quelques avantages:
- avec un développeur expérimenté sur son épaule, il apprendra ce qu'on attend de lui et verra la différence entre son code et le code qui répond aux attentes
- L'autre développeur peut appliquer une stratégie test first: ne pas autoriser l'écriture du code tant que les tests n'ont pas été écrits pour il
- de même, l'autre développeur peut vérifier que le code est conforme aux normes avant qu'il ne soit vérifié, réduisant ainsi le nombre d'enregistrements incorrects
Tout cela nécessite bien sûr que l'entreprise et les développeurs soient réceptifs à ce processus qu'ils ne sont peut-être pas.
Il semble que les gens ont trouvé beaucoup de réponses imaginatives et sournoises à ce problème. Mais le fait est que ce n'est pas un jeu. Concevoir des systèmes de pression par les pairs élaborés pour "nommer et honte" lui ne va pas aller à la racine du problème, à savoir. pourquoi n'écrit-il pas de tests?
Je pense que vous devriez être direct. Je sais que vous dites que vous lui avez parlé, mais avez-vous essayé de savoir Pourquoi il n'écrit pas de tests? Clairement, à ce stade, il sait qu'il devrait Être, donc sûrement il doit y avoir une raison pour laquelle il ne fait pas ce qu'on lui a dit de faire. Est-ce de la paresse? La Procrastination? Les programmeurs sont célèbres pour leur ego et leurs opinions fortes-peut-être est-il convaincu pour une raison quelconque que les tests sont une perte de temps, ou que son code est toujours parfait et n'a pas besoin de tests. S'il est un programmeur immature, il pourrait ne pas comprendre pleinement les implications de ses actions. S'il est trop "mature", il pourrait être trop fixé dans ses voies. Quelle que soit la la raison, l'aborder.
Si cela revient à une question d'opinion, vous devez lui faire comprendre qu'il doit mettre de côté son opinion personnelle et suivre les règles. Indiquez clairement que s'il ne peut pas faire confiance à pour suivre les règles, il sera remplacé. S'il ne le fait toujours pas, faites-le.
Une dernière chose - documenter toutes vos discussions ainsi que les problèmes qui se produisent à la suite de ses changements. Si elle vient au pire vous pouvez être forcé de justifiez vos décisions, auquel cas, avoir des preuves documentaires sera sûrement inestimable.
Le coller sur sa propre branche de développement, et seulement apporter ses affaires dans le coffre quand vous savez qu'il est soigneusement testé. Cela pourrait être un endroit où un outil de gestion de contrôle de source distribué comme Git ou Mercurial excellerait. Bien qu'avec le soutien accru de branchement/fusion dans SVN, vous pourriez ne pas avoir trop de mal à le gérer.
Modifier
C'est seulement si vous ne pouvez pas vous débarrasser de lui ou l'amener à changer ses manières. Si vous ne pouvez tout simplement pas faire arrêter ce comportement (par changer ou tirer), alors le mieux que vous pouvez faire est de protéger le reste de l'équipe des mauvais effets de son codage.
Si vous vous trouvez à un endroit où vous pouvez affecter les stratégies, apportez quelques modifications. Faites des révisions de code avant les check-ins et faites des tests une partie du cycle de développement.
Cela semble assez simple. Faites-en une exigence et s'il ne peut pas le faire, remplacez-le. Pourquoi seriez-vous le garder?
Je ne préconise généralement pas cela à moins que tout le reste échoue...
Parfois, un tableau affiché publiquement du nombre de bugs par développeur peut appliquer suffisamment de pression par les pairs pour obtenir des résultats favorables.
Essayez la carotte, en faire un jeu amusant.
Par exemple le plugin de jeu D'Intégration Continue pour Hudson
http://wiki.hudson-ci.org/display/HUDSON/The+Continuous+Integration+Game+plugin
Mettez vos développeurs sur des branches de votre code, en fonction d'une logique comme, par fonctionnalité, par Correction de bug, par équipe de développement, peu importe. Ensuite, les mauvais enregistrements sont isolés de ces branches. Quand vient le temps de faire une construction, fusionnez dans une branche de test, trouvez des problèmes, résolvez, puis fusionnez votre version dans une branche principale.
Ou supprimez les droits de validation pour ce développeur et demandez-lui d'envoyer son code à un développeur plus jeune pour examen et test avant qu'il puisse être validé. Cela pourrait motiver un modification de la procédure.
Vous pouvez créer un rapport avec les erreurs trouvées dans le code avec le nom du programmeur responsable de ce logiciel.
Si c'est une personne raisonnable, discutez du rapport avec lui.
S'il se soucie de sa "réputation", publier le rapport régulièrement et le mettre à la disposition de tous ses pairs.
S'il n'écoute que l ' "autorité", faites le rapport et transmettez le problème à son gestionnaire.
De toute façon, j'ai souvent vu que quand les gens sont faits conscients de la façon dont ils semblent mauvais de l'extérieur, ils changent leur comportement.
Hé, ça me rappelle de quelque chose que j'ai lu sur xkcd :)
Faites-vous référence à la rédaction de tests unitaires automatisés ou de tests unitaires manuels avant l'enregistrement?
Si votre boutique n'écrit pas de tests automatisés, son contrôle du code qui ne fonctionne pas est imprudent. Est-il impact sur l'équipe? Avez-vous un département D'Assurance Qualité formalisé?
Si vous créez tous des tests unitaires automatisés, je suggérerais qu'une partie de votre processus de révision de code inclue également les tests unitaires. Il deviendra évident que le code n'est pas acceptable par votre normes lors de votre examen.
Votre question est plutôt large mais j'espère avoir fourni une orientation.
Je suis d'accord avec Phil que la première étape, de lui parler et expliquer l'importance de la qualité. La mauvaise qualité peut souvent être liée à la culture de l'équipe, du département et de l'entreprise.
Faire des cas de test exécutés l'un des livrables avant que quelque chose ne soit considéré comme "fait"."
Si vous n'avez pas exécuté de cas de test, alors le travail n'est pas terminé, et si le délai passe avant que vous ayez l'exécution documentée du cas de test, alors il n'a pas livré à temps, et les conséquences seraient les mêmes que s'il n'avait pas terminé le développement.
Si la culture de votre entreprise ne le permet pas, et qu'elle valorise la vitesse sur la précision, alors c'est probablement le racine du problème, et le développeur répond simplement aux incitations qui sont en place-il est récompensé pour faire beaucoup de choses à moitié assed plutôt que moins de choses correctement.
Faire nettoyer les latrines. A travaillé dans l'Armée. Et si vous travaillez dans un groupe avec des personnes qui mangent beaucoup de nourriture Indienne, il ne prendra pas longtemps pour tomber en ligne.
Mais c'est juste moi...
Chaque fois qu'un développeur vérifie quelque chose qui ne compile pas, mettez de l'argent dans un pot. Vous allez réfléchir à deux fois avant de vérifier ensuite.
Malheureusement, si vous lui avez déjà parlé plusieurs fois et lui avez donné des avertissements écrits, je dirais qu'il est temps de l'éliminer de l'équipe.
Vous trouverez peut-être quelques réponses utiles ici: Comment faire pour que les programmeurs Juniors écrivent des tests?