Comment faire face à aucune critique de code dans mon nouvel endroit quand je viens de cette pratique?

33

L'équipe de ma nouvelle entreprise ne dispose pas d'un processus de révision du code.

Je viens d’entreprises dont la culture du code est une culture incontournable et je ne me sens donc pas à l’aise d’engager mon code sans le faire réviser par quelqu'un.

Je crois fermement que la révision de code est un moyen d'améliorer la qualité et de gagner du temps, car elle détecte les problèmes potentiels plus tôt (remarque, je ne parle pas de la programmation en binôme cependant).

  • Comment puis-je montrer que l'examen de code n'est pas une perte de temps, mais un gain de temps?
  • Peut-on ignorer la révision du code si vous avez des tests unitaires?
jparkcool
la source
Les recommandations de ressources hors site sont explicitement hors sujet par centre d'aide . Voir meta.programmers.stackexchange.com/questions/6483/…
gnat
1
Pensez à la poser ici: meta.codereview.stackexchange.com Et dans mon esprit, cette question peut être posée ici car il / elle veut juste connaître un concept lié à la programmation.
xqMogvKW
1
Même si je suis également un fervent partisan de la révision de code, j'ai également eu quelques mauvaises expériences: la révision de code est devenue une guerre perpétuelle et l'outil de révision de code (gerrit) s'est transformé en un mauvais avatar de forums de discussion animés de débats trop passionnés. par des egos surdimensionnés. Je ne sais pas si cela se produira dans une entreprise ou s'il s'agit simplement d'une question de maturité.
Joel
Renommé à ce que vous demandez, car "Est-ce que la révision de code est indispensable?" C’est une question trop vaste et sans réponse, car elle dépendra d’un grand nombre de facteurs - taille de la société, # développeurs, revenus, etc., etc. logiciel sur vos sites publics (curriculum vitae, linkIn, github, twitter, etc.). publiez ce que vous aimez et ce que vous cherchez pour que les gens avec qui vous voulez être accompagnent le voient. Ceci est un "futur" conseil bien sûr, d'où un commentaire :)
Michael Durrant
3
Je ne vois pas en quoi il s’agit d’une "recommandation de ressources hors site". Cela ne semble pas être la bonne raison pour moi.
Nyuszika7h

Réponses:

30

Peut-on ignorer la révision du code si vous avez des tests unitaires?

Mais pourquoi?

Le rôle principal de l'évaluation par les pairs n'est pas de détecter les bogues.

Oui, vous pouvez identifier des bogues potentiels et du code douteux, source de bogues, cela se produit souvent, mais détecter quelques erreurs parfois ne signifie pas que l'examen par les pairs est un moyen fiable d' éliminer la présence de bugs. Loin de ça. Ce n'est pas le bon outil pour vérifier l' exactitude fonctionnelle de la mise en œuvre.

La révision de code impose la maintenabilité du code , cependant. J'exigerai que le code soit propre et compréhensible (pas seulement pour son auteur) avant de passer en production.

La présence de tests unitaires est complètement orthogonale à cela. Vous pouvez avoir une couverture de code à 100% et tous les tests réussis pour un code totalement incompréhensible.

La révision de code sert également à familiariser les autres développeurs avec votre travail afin qu'ils sachent ce qui est quoi et puissent le récupérer, ou qu'ils gèrent les rapports de bugs pendant vos vacances, etc. Savoir ce que vous avez fait tout de suite peut les aider. font bien leur travail - gardez la base de code cohérente (respectez les mêmes schémas et conventions dans l'application) ou évitez la duplication de code.

De manière plus générale, on apprend et grandit en tant que développeur en lisant le code des autres.

Les tests unitaires peuvent difficilement remplacer n'importe lequel d'entre eux. Oui, s’ils sont bien écrits, ils se lisent comme de la documentation et nous devrions nous efforcer de le faire. Mais là encore, l’examen par les pairs n’est pas exclusif, bien au contraire: tous les avantages de l’évaluation par les pairs restent valables, le fait que vos pairs aient de bons tests unitaires à examiner ne fera que rendre le processus de révision plus facile et encore plus bénéfique. plutôt que redondant.

Konrad Morawski
la source
4
Je ne crois pas non plus que les tests unitaires remplacent les révisions de code. Mais le rôle principal des tests unitaires n’est pas non plus de détecter les bogues. Oui, vous pouvez identifier des bugs potentiels lors de l'écriture d'un test unitaire, mais ces tests permettent de s'assurer que vous ne introduirez pas de bugs plus tard lorsque vous devrez modifier quelque chose. L'objectif des tests unitaires est donc de garder votre code maintenable, aussi.
Doc Brown
2
@ DocBrown vrai que. Cependant, la capture de bogues de régression fait également partie de la catégorie des bogues de capture. De toute évidence, c'est l'un des avantages des tests unitaires par rapport à l'évaluation par les pairs (dans cet aspect), car ils ne sont pas une opération ponctuelle. L'examen par les pairs ne tente même pas de s'attaquer à cet aspect important, car il n'est pas possible de réexaminer l'ensemble de la base de code après chaque modification.
Konrad Morawski
1
@DocBrown Peer review doesn't even attempt to tackle this important aspect- ben oui , en quelque sorte. Dans une mesure. Je me retrouve souvent à signaler par exemple. "Partenaire, vous répétez effectivement la même logique ici, et c'est une bombe à retardement. Un jour, cela changera à cet endroit et nous oublierons de l'actualiser ici ..."
Konrad Morawski Le
24

Existe-t-il des études et des statistiques montrant que la révision de code n’est pas une perte de temps mais une économie de temps?

Je n'en connais aucun. Il est également difficile de mener de telles études car il vous faudrait deux équipes dont la tâche est d' une complexité égale et réaliste , l'une utilisant la révision de code, l'autre non. Vous aurez probablement besoin de leur demander de résoudre le même problème, ce qui signifie jeter beaucoup d’argent par la fenêtre. Et vous auriez besoin de répéter l'expérience assez souvent pour obtenir une pertinence statistique, ce qui augmenterait cet investissement d'argent par des ordres de grandeur.

Si vous ne mesurez que l'efficacité des entreprises qui utilisent des révisions de code par rapport à des entreprises qui ne le font pas, vous ne savez pas seulement comment mesurer l'efficacité, mais également quelle en est la cause réelle. Les revues de code font partie d'une culture plus large. Il est difficile de dire quelle partie de celle-ci rend réellement l’équipe plus efficace (et peut très bien dépendre de la nature de l’équipe ou du projet). Ou encore, la présence de cette culture peut simplement signifier que la société est plus petite ou plus jeune, chacune d’elles ayant de nombreux effets. Ou bien il se peut que la volonté de se soumettre à des révisions de code exclue ou favorise une distance saine de votre ego;)

Mais n'oubliez pas: vous avez votre propre expérience à tirer. Cela fait partie de la raison pour laquelle ils vous ont embauché. Donc, si vous croyez vraiment que vous pouvez augmenter l'efficacité (et que votre équipe en souffre réellement), communiquez-le clairement.

Peut-on ignorer la révision du code si vous avez des tests unitaires?

Nan. Si vous croyez en l'importance des tests, alors vos tests devraient être la première chose à examiner. Et si ce sont des bêtises? Ou si la couverture est moche? Ou s'ils testent la mise en œuvre plutôt que le comportement?

back2dos
la source
2
Je pense que vous avez fait un très bon point sur la révision de code pour les cas de test. Je vous remercie!
jparkcool
4
+1 pour "vous avez votre propre expérience à partir" - en fait, si vous avez vraiment travaillé avec des revues de code pendant un certain temps, il doit avoir vu combien de problèmes de qualité étaient généralement résolus lors d'une revue de code typique et combien de transfert de connaissances a été atteint. À partir de cette expérience, il devrait être difficile de ne pas avoir une poignée d'arguments pour ou contre les révisions de code.
Doc Brown
2
En ce qui concerne votre premier paragraphe: il faudrait non seulement deux équipes effectuant la même tâche, mais deux équipes de capacités égales, l’expérience individuelle va faire l’éclat de toute tentative d’étudier cela.
David Wilkins
"Et s'ils sont absurdes? Ou si la couverture est moche?" Ou simplement dire return true;.
Burhan Ali
1
Lisez le chapitre 20 de Code Complete pour un traitement approfondi des révisions de code, ainsi que des études et statistiques à l'appui de leur utilisation. Voici quelques bons résumés: le blog de Jeff Atwood et un autre gars
Mike Partridge
5

Tiré de diapositives aléatoires que j'ai trouvées , mais les données concrètes proviennent du livre Code Complete de Steve McConnell:

Les revues de code sont-elles utiles?

"Je pense que les revues de code par les pairs sont la meilleure chose à faire pour améliorer votre code"

Jeff Atwood de Coding Horror à l' adresse http://www.codinghorror.com/blog/2006/01/code-reviews-just-do-it.html


"Les inspections individuelles détectent généralement environ 60% des défauts, ce qui est supérieur aux autres techniques, à l'exception du prototypage et des tests bêta à volume élevé."

Steve McConnell, Code Complete 2nd Edition, page 485

Ce chiffre de 60% provient du document de l'IEEE rédigé par Shull et al, 2002, intitulé Ce que nous avons appris sur la lutte contre les défauts, contient la section suivante:

"Les évaluations par les pairs détectent 60% des défauts"

icc97
la source
1
Je pense que le problème, c'est qu'en 2006, nous n'avions pas encore complètement adopté la programmation en binôme, ce qui, à mon avis, est devenu une sorte de substitut à la révision de code par les pairs. Je me rends compte qu'ils ne sont pas comparables à certains égards.
JP Silvashy
3

Disclaimer: Cette réponse est mon expérience personnelle :)

J'ai fait de très mauvaises expériences avec les révisions de code dans le code que nous maintenons. Parce que nous n’avons généralement qu’une ou plusieurs doublures et qu’il n’ya pas grand chose à revoir.

Mais dans le cadre de projets concrets, j’ai fait de bonnes expériences, au moment de l’examen, mon formateur revoyait régulièrement mon code et cela m’a beaucoup aidé à trouver les erreurs que je faisais très souvent, que je ne fais plus.

Je dirais donc que cela dépend fortement de ce que vous faites, du nombre de personnes que vous êtes, etc.

De plus, le risque que vos codereviews aboutissent à une guerre ne doit pas être sous-estimé.

Knerd
la source
3

Vous pouvez demander à votre chef d'équipe et / ou à votre collègue de réviser votre code par les pairs, même si les révisions de code ne sont pas effectuées normalement, peut-être dans le cadre de votre formation.

Assurez-vous que votre code est bien écrit et testé avant l'examen.

Lorsque j'étais chef d'équipe, j'avais l'habitude de réviser moi-même les codes des nouveaux employés, jusqu'à ce que, au bout d'un moment, j'arrête de chercher des bogues ou quoi que ce soit d'autre à critiquer dans leur code, et à quel point je cesserais de réviser les codes avec eux; cela arriverait quand:

  • Ils ont appris les systèmes avec lesquels ils s'interfaçaient et n'ont pas eu besoin de mes explications
  • Ils ont appris à concevoir et / ou tester leur code jusqu'à ce qu'il soit sans bug avant de le voir
  • Ils en ont suffisamment appris sur les directives de mon style de codage pour que je considère leur code maintenable

Les revues de code ont plusieurs objectifs:

  • Trouver des défauts dans le code
  • Transfert de connaissances entre les membres de l'équipe

Je pense que c'est bien de réviser les codes des nouveaux employés, même si l'équipe choisit de ne pas les réviser parmi les membres expérimentés.

ChrisW
la source
2

Il n’existe pas de règle empirique permettant de réviser le code de tout logiciel développé ... Tout dépend de la portée de l’application, de la taille du client et de la taille de la société. Par exemple, si vous construisez une application pour laquelle il s’agit d’une application simple pour laquelle aucune autre version ne sera éventuellement implémentée à l’avenir, les tests unitaires y suffisent. Mais encore une fois, l'examen du code se met en place lorsque vous parlez de performances de l'application. Vous devez donc examiner le code pour éviter toute chute brusque de celui-ci, ce qui aurait pu être fait de manière à accélérer les performances.

Les révisions de code sont généralement effectuées lorsqu'il y a une équipe de plus de 2 développeurs et un responsable technique où le responsable technique veut assurer la qualité de l'application et s'assurer que les normes de code sont respectées pour adapter l'application aux futures améliorations et la mettre à niveau pour différents utilisateurs. versions à venir.

Par exemple, nous avons maintenant de nombreuses plates-formes open source CMS et ces plates-formes publient des mises à niveau de temps à autre pour améliorer les fonctionnalités de la plate-forme. Imaginez un développeur utilisant l'une de ces plates-formes et ne respectant pas les normes de code telles que le codage en dur dans les fichiers de base, l'écriture d'applications. code dans les fichiers de modèle et si ce code passe en production et ultérieurement, lorsque le client souhaite mettre à niveau la plate-forme vers la nouvelle version, il ne sera jamais mis à niveau à moins que le codage ne soit refait conformément aux normes de code de cette plate-forme. Cela devient un problème sérieux pour la publication du code en production sans révision du code.

Je dirais donc que les critiques de code avant publication sont indispensables pour les éditeurs de logiciels professionnels et que les exceptions ne peuvent concerner que les applications personnelles / à très petite échelle, où le développeur est un programmeur très expérimenté et qui possède de l'expérience.

Venkat
la source
1

Les révisions de code ont des avantages qui ne proviennent pas du processus de révision lui-même: il existe toujours un dilemme pour obtenir un code de haute qualité, mais créé en peu de temps. Sans révision de code, vous êtes autonome, vous pouvez donc sacrifier la qualité pour effectuer le code en peu de temps. Avec les critiques de code, il y a ce critique qui ne vous laisse pas vous échapper avec une qualité de code faible - ce qui est exactement ce que vous voulez, être obligé de passer du temps à obtenir un code de qualité qui est ce que vous vouliez en premier lieu, et qui vous savez que vous gagnerez du temps, car chaque heure passée à écrire un code de meilleure qualité équivaut à deux heures de débogage (ou plus).

Sans révision de code, vous êtes autonome. Il vous appartient donc de maintenir une qualité de code élevée. Une solution simple consiste à examiner chaque changement que vous apportez vous-même et à corriger les problèmes non conformes à vos normes de qualité.

Cela évite également les situations horribles dans lesquelles les critiques de code entraînent des conflits d’égoïsme - la situation dans laquelle le programmeur A utiliserait la méthode X, tandis que B utiliserait la méthode Y; si A écrit le code qu’il utilise la méthode X, le relecteur B insiste sur la méthode Y, donc A réécrit le code en utilisant la méthode Y, alors que si B l’avait écrit et qu’il l’avait examiné, c’était exactement le contraire qui s’était passé.

gnasher729
la source
0

Si vous êtes un partisan des révisions de code, je crains qu'il n'y ait pas de véritable substitut. Le cas malheureux et stéréotypé est un lieu de travail qui n'effectue pas de révision de code car (A) il n'est pas familier avec la pratique et / ou (B) il ne veut pas consacrer le temps et les efforts nécessaires à la révision de code système en place.

Fondamentalement, pour obtenir ce que vous voulez ici, vous avez besoin d'un changement de culture sur le lieu de travail - et ce n'est jamais simple ni facile. N'oubliez pas que même si votre lieu de travail est persuadé à 100% que les révisions de code sont excellentes et qu'il souhaite les adopter, il faudra encore beaucoup de temps, d'énergie et de productivité pour adopter une nouvelle méthode de travail. Cet investissement devrait être rentable - mais vous devez avoir un investissement pour l'investissement, pas seulement pour le gain. Voir la vidéo de Roy Osherove "Test unitaire et TDD - Comment y arriver" - les défis de l'adoption de révisions de code sont très très similaires à ceux de l'adoption d'un test unitaire.

En attendant, faites ce que vous pouvez pour en obtenir le plus possible:

  • Si d'autres développeurs voient la valeur des révisions de code, essayez de les examiner, même de manière informelle.
  • Si vous avez un mentor ou un développeur responsable de votre formation, expliquez-lui la valeur que vous voyez dans les revues de code et demandez-lui s'il accepterait de réviser votre code, au moins à l'occasion.
  • Dites à votre responsable que vous souhaitez consulter le code des autres utilisateurs, car cela vous aidera à mieux comprendre le système.
  • Si, à un moment donné, vous devenez chef d'équipe, vous pouvez créer des revues de code localement, uniquement pour votre équipe.

L'un des principaux avantages de ces solutions est que, si vous êtes en mesure de les conserver au fil du temps, les développeurs autour de vous commenceront à remarquer les révisions de code. Vous montrerez efficacement comment les révisions de code peuvent être intégrées à la culture existante - et cela ouvre la voie à un changement de culture. Les révisions de code vous aident . Ainsi, si vous êtes en mesure de démontrer cela à petite échelle, cela ouvrira la voie aux autres - et à la culture dans son ensemble - pour qu'ils suivent votre exemple.

Standback
la source
-2

Arrêtez de vous inquiéter, votre nouvel employeur ne se soucie pas des critiques de code. Apprenez à avoir confiance en vos capacités sans que quelqu'un d'autre ne vous dise qu'il est correct de vérifier le code que vous avez écrit. Vous allez bientôt apprendre à vivre sans le processus fastidieux et fastidieux qui consiste à examiner le code d'autres personnes.

Suivez les directives de style (ou tout simplement le style) que tout le monde utilise. Utilisez votre expérience pour décider de ce qui doit être commenté, des conventions de dénomination à utiliser, etc.

Puis testez tout avant de l’archiver. Le plus important est que cela fonctionne correctement.

Simon B
la source
2
-1: Le fait que la nouvelle équipe de l'OP n'effectue pas de révision du code n'en fait pas une mauvaise idée. C'est un signe d'un bon ingénieur pour aider à améliorer la qualité du processus de développement.
Jørgen Fogh
1
@ JørgenFogh Je suis également en faveur des révisions de code, mais vous semblez supposer que les révisions de code aideraient ce processus de développement spécifique. En plus de cette réponse, je voudrais demander pourquoi ils ne font pas de révision de code - ils peuvent avoir une bonne raison. Peut-être, comme le suggère cette réponse, cette entreprise embauche des personnes qui n'ont pas besoin de faire réviser leur code, ou du moins, les avantages qui en découlent ne valent tout simplement pas le coût supplémentaire. Si le PO essaie de changer quelque chose sans avoir de chance, ce sera la solution.
DoubleDouble
1
Il est possible que les avantages ne valent pas le coût. Cependant, le fait que l'équipe n'effectue pas de révision du code ne nous dit rien sur le point de savoir si elle devrait ou non le faire.
Jørgen Fogh
4
-1: "Le plus important, c'est que cela fonctionne correctement." Il s’agit là d’une vision à courte vue de ce qui est important en matière de code de production. Le code est lu plus souvent qu'il n'est écrit. La valeur d'une révision de code (bien effectuée) va bien au-delà de la vérification de l'exactitude. Parmi les nombreux avantages, les révisions de code garantissent que le code a du sens pour ceux qui ne l’ont pas écrit.
Dancrumb
-2

Si votre nouvel employeur n’apprécie pas l’idée de révision du code, c’est peut-être parce qu’il est associé de manière négative aux méthodologies obsolètes de type commande et contrôle et qu’il vise un ensemble de pratiques de type plus moderne et agile. Dans ce cas, ils peuvent être plus ouverts à l’idée de la programmation en binôme, qui offre nombre des mêmes avantages et qui est largement considérée comme une pratique moderne plus dynamique.

Jules
la source