Quels sont les processus courants de révision de code et qu'est-ce qui est considéré comme mauvais?

16

Mon entreprise a récemment commencé à faire des revues de code formalisées. Le processus se déroule comme suit: vous soumettez dans un github, demandez une demande de pull, le code est examiné par environ trois personnes, puis si tout réussit, votre code entre.

Le processus semble juste, mais les trois personnes qui effectuent les révisions de code ne semblent pas être justes. Je remarque que lorsque je mets mon code en revue, j'obtiens entre 100 et 200 commentaires. Le premier chiffre pour moi était de 300 commentaires une fois. Bien sûr, vous pensez que ce sont de grands changements, mais cela peut aussi être de très petits changements avec moins de 50 lignes de code (ce qui inclut des tests unitaires). Tous les commentaires sont considérés comme "à faire" et sans argument.

Dans cet esprit, mon principal problème ici est qu'il semble un peu excessif. J'ai parlé au groupe et ils m'ont dit que ce n'est pas parce que j'ai eu tant d'années de développement en php que je suis un "développeur". Bien sûr, cela semble plus blessant qu'improbable. Je remarque également qu'au sein du groupe, ils ne semblent pas produire autant de commentaires et la plupart du temps, ils ignorent ou ignorent les autres commentaires ou suggestions, l'acceptant rarement comme un point valide même si quelque chose est cassé.

Donc ma question est de savoir si c'est juste? Ou commun?

user1207047
la source
3
Quel genre de commentaires recevez-vous? Semble beaucoup. S'agit-il d'un formatage de commentaires? Codage? Il est difficile de répondre sans en savoir plus sur la nature des commentaires (et peut-être exactement ce qui, dans votre code, a déclenché les commentaires).
MetalMikester
1
Hé - je ne sais pas si c'est le bon terme, mais ce sont surtout des commentaires de "meilleure pratique" généraux comme renommer des variables, déplacer des fonctions, renommer des fonctions de 3 à 5 fois, etc. Nous avons installé phpcs donc la mise en forme est correcte.
user1207047
J'ai également oublié de mentionner sur ce billet, je suis en fait un développeur de niveau 3 dans cette entreprise. J'ai la certification php et je vais très bien depuis 8 ans en travaillant ici. Ce n'est que récemment que cela a commencé à se produire. Donc je veux dire que l'on aimerait penser qu'après 8 ans, vous sauriez quelque chose non?
user1207047
1
"Donc je veux dire que l'on aimerait penser qu'après 8 ans, vous sauriez quelque chose non?" - Eh bien, vous seriez surpris ... Les choses que je vois au travail parfois ...
MetalMikester

Réponses:

15

Tous les commentaires sont considérés comme "à faire" et sans argument.

À mon humble avis, c'est le vrai problème, car il n'y a pas de priorisation. Lorsque vous obtenez 100 à 300 commentaires, certains doivent avoir une priorité A (vrais bugs), certains prio B (susceptibles de conduire à des bugs plus tard) et certains prio C (tout le reste). Dites à vos collègues que vous êtes prêt à respecter tous leurs souhaits, mais pour que les changements soient effectifs et que votre temps est limité, insistez sur une priorisation. Ensuite, commencez par fixer le prio A en premier, et si vous avez vraiment le temps d'en avoir plus après, vous pouvez commencer par B (si vous êtes chanceux, votre patron comprendra que la fixation du prio B et C n'est pas si importante et vous donne certaines tâches plus importantes au lieu de perdre votre temps).

Doc Brown
la source
J'ai essayé à plusieurs reprises de demander la priorité des commentaires. Je récupère quelque chose comme "agréable à avoir" et "obligatoire". Il s'avère qu'une grande majorité d'entre eux sont "nécessaires".
user1207047
2
J'ai vu cela se produire lorsqu'un développeur spécifique reçoit de nombreux éléments d'action de ses critiques afin de l'empêcher de gâcher le code dans d'autres domaines du programme. Mais ce serait pour un développeur exceptionnellement pauvre qui est «forcé» sur le projet et le responsable ne peut pas s'en débarrasser à cause des décisions de gestion.
Dunk
2
Vous savez @Dunk, je pense que vous êtes ici. Votre commentaire a vraiment frappé la maison et j'ai accepté cette réponse car je ne pense pas pouvoir accepter un commentaire. Je suis un "étranger" à ce groupe et je comprends maintenant pourquoi le cercle intérieur s'améliore et se fait plus rapidement et ce qui ne l'est pas. J'ai été «forcé» dans cette équipe par la direction, oui et nous sommes «forcés» de travailler ensemble. Cela semble donc très raisonnable et une explication logique pour expliquer pourquoi c'est plus dur. Ça ou je pue vraiment le codage. La seule façon de comprendre cela est d'aller dans un autre groupe / entreprise et de voir par moi-même.
user1207047
4
@ user1207047: Vous ne devriez pas accepter une réponse car vous aimez l'un des commentaires en dessous car il va à l'encontre des normes et de l'objectif du site (je pense que je sens un modèle ici). Il existe une fonctionnalité de commentaire upvote pour cela.
webbiedave
10

Les révisions de code peuvent être un processus de division.

Vous êtes cependant à un carrefour important. Faites une analyse approfondie de leur évaluation. Identifient-ils des problèmes de pioche ou mettent-ils en évidence de graves lacunes dans votre style et votre logique?

Si c'est le premier, je recommanderais de travailler vers une résolution (nouveau travail ou nouveaux processus de révision de code).

Si c'est le dernier, je recommande de faire beaucoup de lecture de code et d'étudier pour essayer de mettre votre code à la qualité professionnelle.

JoeG
la source
Hé, bonnes pensées. D'après ce que je peux rassembler, certaines d'entre elles sont en effet une analyse réfléchie, mais la plupart d'entre elles apparaissent comme des fonctions délicates telles que des fonctions mobiles ou des fonctions de changement de nom. Le problème est que lorsqu'ils expliquent leur processus de pensée, cela a du sens, mais entre eux, ils ne font pas la même chose et ne font pas les mêmes erreurs que moi.
user1207047
Plus encore, la révision du code est si profonde que j'oublie ce que je faisais et crée plus de bugs corrigeant l'application en raison des centaines de commentaires excessifs. Par exemple, une fois, on m'a dit de réécrire une grande partie du code. Avant cela, le code était correct et fonctionnel. Après les révisions du code et près de 150 commentaires, la fonction et l'exactitude d'origine ont disparu et des tonnes de bugs ont été insérés. Quand j'ai réalisé cela et les ai corrigés, on m'a essentiellement dit: "Ouais, notre processus de révision de code fait de vous un programmeur génial parce que maintenant vous allez le réparer et c'est plus facile à faire."
user1207047
8
@user: le nommage des méthodes / fonctions est important, ce n'est pas forcément un choix. Si vous faites un mauvais travail de nommage, cela peut être ennuyeux pour votre équipe. Si vous ne pouvez pas trouver un nom clair, ce n'est probablement pas une bonne fonction. Vous semblez être le "nouveau" gars et les autres ont apparemment une méthode à leur folie dont ils ont probablement discuté plusieurs fois auparavant. Ainsi, la raison de moins de commentaires. Je vous suggère d'apprendre ce qu'ils veulent et d'essayer de se conformer plutôt que de se faire la tête. Gagnez du respect, vous serez alors en mesure de proposer des idées alternatives qui seront accueillies avec un esprit ouvert.
Dunk
1
@user: Il semble que vous ayez besoin de normes de codage / conception.
Dunk
2
@user: Tout ce que vous pouvez faire est d'essayer de travailler dans le système et de démontrer que vous êtes un joueur d'équipe. Si vous l'avez fait. alors soit votre perception n'est pas correcte, vous traitez avec des gens irrationnels, ils perçoivent votre attitude comme litigieuse OU c'est simplement une politique de bureau tout simplement désagréable. Les seuls que vous contrôlez sont votre attitude / perception. Si vous êtes convaincu que vous n'êtes pas en quelque sorte à l'origine du problème, je ne sais pas pourquoi vous resteriez. Allez trouver un endroit où il fait bon travailler parce que les gens s'entendent. Si les mêmes problèmes se produisent ailleurs, regardez dans le miroir.
Dunk
5

Il semble que vos collègues utilisent le processus de révision du code pour convenir d'une méthodologie ou peaufiner le code. Je viens de commencer à faire des révisions de code comme vous et je remarque que parfois nous discutons beaucoup de choses qui ne sont que des approches d'implémentation ou des améliorations. Ce n'est pas mal du tout dans la mesure du raisonnable (300 commentaires me semblent trop nombreux, cela doit ressembler à un fil reddit)

Peut-être que vous devez vous mettre d'accord sur certaines décisions architecturales concernant le code avant de commencer à l'implémenter ou peut-être êtes-vous simplement d'accord sur les conventions de dénomination, les modèles et les bonnes pratiques afin que vous sachiez tous ce qu'il est considéré comme un "bon code".

Si vous respectez vos normes de code comme vous le dites et que le code fonctionne comme prévu, il ne devrait pas y avoir autant de commentaires, alors soit ils utilisent votre code comme forum, soit ils vous trollent comme il semble que vous pointez.

J'essaierais d'être critique avec moi-même, j'essaierais de participer aux conversations et de voir la raison de tous ces commentaires et peut-être d'en parler de manière constructive pour voir pourquoi ils sont si mécontents de votre code et si vous le pouvez code d'une manière qui rend tout le monde heureux et le travail ne reste pas bloqué dans la révision du code.

Je viens de lire vos derniers commentaires, parfois lorsque vous n'êtes pas d'accord avec le code, vous pouvez le parcourir cent fois et proposer des changements partout qui ne vous rendent pas heureux parce que la vraie raison est que vous auriez pris une décision architecturale différente et vous n'aimez tout simplement pas ce code, peu importe combien de fois vous le refactorisez. Comme je l'ai dit ci-dessus, vous devez peut-être convenir de l'approche du code à l'avance, donc lorsque vous l'écrivez, vous savez ce qu'ils en attendent et donc votre code serait plus raisonnable pour eux.

Juanmi Rodriguez
la source
1
100% d'accord avec le dernier paragraphe: vous devez discuter de la conception que vous envisagez avant de mettre en œuvre. Au moins, vous commencez avec un cadre supposé acceptable. Ensuite, après la mise en œuvre, cela pourrait valoir la peine de discuter de la conception finale (pas du code). Modifiez ensuite le code pour qu'il corresponde au résultat de la discussion de conception finale. Si après quelques essais, cela n'améliore pas les choses, cela devrait rendre évident que la position est juste un mauvais ajustement et que vous devriez commencer à chercher ailleurs.
Dunk
4

D'après ce que vous dites, il me semble qu'ils pourraient avoir un parti pris contre les développeurs php, et donc ils essaient de trouver tout ce qui ne va pas avec votre code afin de prouver leur point.

En ce qui concerne l'examen du code lui-même, je crois, comme vous l'avez déjà dit, qu'une telle quantité de commentaires mineurs est moins utile que quelques critiques bonnes et valides. Et bien que j'ai une expérience limitée en ce qui concerne les revues de code, la technique suivante a bien fonctionné pour les équipes dans lesquelles j'ai travaillé dans le passé.

  • Tout d'abord, un analyseur de code statique doit être utilisé pour identifier la plupart des problèmes avant la révision du code. Par exemple: l'exécution de votre code via Sonar, Lint ou tout autre bon analyseur de code devrait vous aider à vous débarrasser de la plupart des problèmes mineurs. D'autant plus que vos réviseurs peuvent définir des profils personnalisés pour garantir tout, depuis le placement des parenthèses, les espaces blancs, les commentaires, la dénomination correcte des variables et bien plus encore ...
  • Deuxièmement, je semble bien fonctionner si vous divisez les commentaires en différentes catégories. Par exemple, deux catégories où un groupe comprend de petites choses que vous devriez prendre en note et appliquer à l'avenir. Et un deuxième groupe pour les commentaires qui nécessitent une modification immédiate de votre code qui nécessiterait un autre commit et un examen ultérieur. Bien sûr, le nombre de commentaires dans ce dernier groupe devrait être plus petit.

De plus, je dois dire que mes premiers vrais examens de code contenaient également plus de commentaires que je ne le pensais à l'origine. Cependant, je n'ai jamais considéré cela comme une mauvaise chose. Si vous continuez à apprendre de leurs commentaires² et êtes prêt à appliquer ces techniques / meilleures pratiques nouvellement apprises dans vos futures soumissions de code, les commentaires devraient diminuer. C'était sûrement le cas pour moi ;-)

¹ D'après mon expérience, cela se produit souvent car de nombreux programmeurs affirment que php est le langage de programmation le plus mauvais, ayant les programmeurs les plus inexpérimentés qui l'utilisent. Je m'éloigne de cette affirmation car je crois qu'un excellent logiciel peut être écrit dans n'importe quelle langue!

² En supposant que même si les commentaires sont excessifs, une certaine valeur y est

Jérôme
la source
Je suis entièrement d'accord avec ce que vous avez dit. C'est une expérience d'apprentissage et il faut apprendre. Cependant, cela dure depuis assez longtemps au point qu'il ne semble tout simplement pas que ce soit le cas. Soit je deviens plus bête, soit quelque chose d'autre se passe. Je suppose que si chaque demande d'extraction génère des centaines de commentaires, soit vous vous trompez tout le temps, soit il y a quelque chose d'autre en jeu ici qui ne coïncide pas avec ce qu'ils prétendent qu'ils essaient de faire. Soit ils doivent dire: «D'accord, arrêtons-nous et apprenons», soit allons droit au but. Du moins, c'est comme ça que je le vois.
user1207047
1
@ user1207047 Après avoir lu vos réponses aux autres réponses, il me semble que vous connaissez déjà la réponse à votre propre question .. :-) Il semble assez clair que quelque chose est louche avec vos revues de code. Peut-être qu'il est temps de parler avec un supérieur ou de demander un transfert dans une autre équipe?
Jérôme
3

Est-il courant que quiconque obtienne plus de 100 commentaires dans ses revues de code sur une base régulière? Je dirais que non. Est-il courant que les personnes dont la qualité du code «laisse beaucoup à désirer» obtiennent beaucoup de commentaires, absolument.

Cependant, cela dépend aussi des "règles" du processus de révision du code. TOUT LE MONDE a ses propres idées sur la façon dont quelque chose aurait dû être fait. Si votre processus de révision de code permet aux commentaires de prendre la forme "Vous devriez le faire de cette façon plutôt que de cette façon", vous obtiendrez probablement BEAUCOUP de commentaires même pour un code adéquat. Si votre processus vise à détecter des "défauts", le nombre de commentaires doit être beaucoup plus petit.

D'après mon expérience, les critiques qui permettent des "suggestions" pour des méthodes alternatives sont des pertes de temps. Ces «suggestions» devraient être traitées individuellement en dehors du processus d'examen. Les examens de défauts sont plus utiles car ils amènent les gens à se concentrer sur les bugs au lieu de "pourquoi ne l'avez-vous pas fait comme je l'aurais fait?". Il est également plus utile car il est impossible de nier un bug si quelqu'un en trouve un. Ainsi, il n'y a pas de sentiments blessés mais plutôt de gratitude.

MISE À JOUR: Cela dit, certains codes sont tout simplement mauvais, même s'ils sont exempts de défauts. Dans ce cas, le commentaire de révision doit être un seul commentaire qui dit quelque chose comme. "Ce code doit être nettoyé. Veuillez reporter l'examen jusqu'à ce que le code soit discuté avec [votre nom ici]." Dans ce cas, la révision du code devrait s'arrêter jusqu'à ce que le commentaire soit corrigé.

UPDATE2: @User: Discutez-vous de votre code / design avec l'un d'entre eux pendant que vous le développez afin de pouvoir implémenter ce qu'ils recherchent avant de vous lancer dans votre chemin? Êtes-vous en train de changer quoi que ce soit sur la façon dont vous développez du code en fonction de leurs suggestions ou continuez à penser que votre chemin va bien? Apprenez-vous quelque chose de leurs commentaires?

Quand je suis le chef de file d'un projet, c'est mon travail d'être responsable de TOUS les produits de travail. Si j'approuve un produit de travail, je prétends que le produit est acceptable. Je veux avoir la réputation de construire des produits de qualité. Ainsi, j'ai des attentes et n'accepterai pas moins que satisfaisant. En même temps, j'essaie d'enseigner et d'expliquer les raisons de mes préférences. Ces préférences ne sont pas toujours idéales (en particulier aux yeux des autres), mais la plupart de ces préférences proviennent de l'expérience. Habituellement, une réaction pour éviter de répéter les mauvaises. Ainsi, il y a quelques-uns de mes "adeptes" personnels qui sont nécessaires pour obtenir mon approbation, indépendamment du refoulement.

De l'autre côté, vous devez connaître les attentes qui sont nécessaires pour faire approuver vos produits de travail. Vous pouvez être en désaccord, mais comme vous ne semblez pas avoir le pouvoir de passer outre, apprenez ce qui est attendu. Je doute que l'équipe essaie de vous faire échouer. Comme cela les fait mal paraître aussi. À cet égard, démontrez simplement que vous êtes désireux d'apprendre (même si vous ne l'êtes pas), prenez ce qu'ils disent et faites de votre mieux pour vous adapter à leurs préférences et vous les verrez probablement reculer un peu. Peut-être trouvez-vous celui que vous pouvez au moins tolérer et voyez s'ils feront un peu de main pour vous enseigner leurs façons de faire. Qui sait, dans le processus, vous pouvez apprendre quelque chose qui pourrait vraiment faire passer vos compétences au niveau supérieur.

Tremper
la source
D'accord, et vous n'entendriez aucun argument de ma part pour ces motifs. Cependant, le processus n'est pas tout à fait comme ça. Ils disent que c'est le cas et, dans la plupart des cas, il semble que seules les personnes en dehors de ces trois groupes soient soumises à un examen plus approfondi qu'eux. Ils prétendent que d'autres sont de mauvais développeurs mais ils sont les seuls "développeurs" de l'équipe.
user1207047
Cependant, une chose est que si vous ne pouvez pas comprendre le code, ou si le développeur a réinventé la roue au lieu d'utiliser une méthode existante, ou si sa méthode a une complexité cyclomatique de 50, alors c'est certainement un cas pour un commentaire, même si il n'y a pas de bug. Le code difficile à lire et la duplication sont un handicap, même si ce n'est pas un bug. C'est pourquoi je n'hésite jamais à signaler qu'une variable est mal nommée, ou que la solution introduit un couplage temporel qui rend la compréhension du code plus difficile. La dette technique doit être gérée.
Laurent Bourgault-Roy
1
@Laurent: Je sais ce que vous dites et à bien des égards d'accord. Cependant, cela ouvre une boîte de vers qui a tendance à faire boule de neige. Si votre entreprise a les fonds et le calendrier nécessaires pour permettre aux révisions de code de prendre une part importante de l'effort, alors tout va bien (comme les équipements médicaux / projets d'avions). Mais la plupart des projets n'ont pas le luxe. Par conséquent, limiter la portée des commentaires de révision est très utile. Pour compenser vos inquiétudes, il incombe au responsable de la surveillance de superviser les développeurs et leur travail. Ils doivent savoir qui surveiller le plus étroitement et corriger ces problèmes avant la révision du code.
Dunk
Nous devons accepter d'être en désaccord ici :). La dette technique est quelque chose que vous devrez payer tôt ou tard (et plus vous attendez, plus vous payez d'intérêts). Vous n'économiserez pas un sou en retardant le nettoyage. Si vous ne prenez pas le temps de le nettoyer maintenant, la prochaine modification peut vous coûter le double du temps car vous aurez du mal à comprendre le code. Je travaille avec une base de code vieille de 8 ans et le développement a été ralenti à cause de problèmes de qualité. Nous avons maintenant une règle officielle "la qualité interne n'est pas négociable". Je peux attester que cela nous a sauvés!
Laurent Bourgault-Roy
J'ai relu votre commentaire et je me rends compte que nous avons peut-être une perspective différente en raison de notre méthodologie. Je travaille dans une équipe Agile où il n'y a pas de lead. Puisque nous sommes tous égaux et tous responsables de la qualité du code, nous devons tous nous surveiller mutuellement. Et la révision du code est effectuée toutes les 3-4 heures avant chaque intégration. Donc, nettoyer une grosse demande de traction est de quelques heures si nous sommes très nazis ou si nous avons fait un refactor qui a impacté une partie ancienne et cruelle du logiciel. D'où la raison pour laquelle je considère le commentaire sur la qualité du code comme un "pas biggy".
Laurent Bourgault-Roy
2

Quelques différences importantes avec notre processus d'inspection d'équipe:

  • la base d'une inspection est une liste de contrôle, compilée par toute l'équipe.
  • L'accent est mis sur les défauts (présents et futurs), pas sur le style pour le style.
  • les 3 inspecteurs (dont l'auteur) s'assoient ensemble pour parcourir les commentaires. Seuls les commentaires avec vote majoritaire restent.
Kris Van Bael
la source
2

Pour 50 LOC 300 commentaires semblent être un peu excessifs et - wow - 3 critiques pour chaque demande de tirage? Votre entreprise doit disposer de nombreuses ressources.

D'après mon expérience pour un processus de révision de code utile, il doit y avoir quelques règles et / ou directives:

  • Priorité des commentaires
  • Classification des commentaires (bug, style de code, etc.)
  • Architecture / conception convenue à suivre
  • Style de code convenu

Si vous n'obtenez pas une priorité des examinateurs, demandez à votre chef de projet / chef d'équipe responsable; la personne responsable des coûts doit avoir une opinion sur les priorités.

Si vous avez une architecture définie, une compréhension commune des modèles de conception que vous utilisez dans votre projet et un style de code convenu, les commentaires de révision ne doivent concerner que les "vrais problèmes" comme les problèmes de sécurité, les bugs involontaires, les cas d'angle non couverts par le spécifié architecture, etc.

Si votre équipe de développement n'est pas d'accord sur les "problèmes de goût" (par exemple si une variable membre commence par "m_"), chaque critique vous forcera à suivre son style, ce qui n'est qu'une perte de temps / argent.

Simon
la source
1

Cela me semble vraiment être un problème de communication. Vous vous attendez à ce que votre code ne soit pas assez mauvais pour mériter 300 commentaires. Les examinateurs semblent penser que vous avez besoin de beaucoup de commentaires. Se disputer d'avant en arrière de manière asynchrone va perdre beaucoup de temps. Heck, écrire 300 commentaires est une perte de temps ÉNORME. Si ce ne sont pas tous des défauts, il est possible en tant que nouveau membre de l'équipe que vous ne connaissiez pas encore le style de l'équipe. C'est normal et quelque chose qui devrait être appris pour accélérer toute l'équipe.

Ma suggestion est de gagner du temps. Accélérez la rétroaction. Je voudrais:

  • Faites plus d'examens intermédiaires pour éviter de faire la même erreur et de générer le même commentaire 50 fois
  • Asseyez-vous avec un réviseur pendant qu'il examine votre code afin que vous puissiez parler des problèmes à mesure qu'ils surviennent, évitant ainsi de documenter 300 "problèmes" qui seront effacés lors du prochain commit.
  • Associez-vous à l'un de ces "vrais" développeurs pendant un certain temps pendant que vous écrivez le code pour voir ce qu'ils feraient différemment

Les gens peuvent s'opposer au jumelage parce que "cela prendra plus de temps" mais ce n'est évidemment pas un problème ici.

Steve Jackson
la source