Vous êtes prêt pour une révision de code en tant que développeur?


10

Je cherche quelques idées ici.

Je lis l'article Comment être pratiquée doivent revues de code et code avis, quels sont les avantages? qui étaient très instructifs mais j'ai encore besoin de plus de clarté sur la question ci-dessous.

Ma question est,

  1. En tant que développeur cible, pouvez-vous suggérer quelques bonnes pratiques qu'un développeur peut intégrer avant que son code ne soit examiné.

    • Actuellement, je pratique les méthodes suivantes

      • PPT pour un flux logique
      • Commentaires détaillés.

Problème: Même si j'ai mis en œuvre les pratiques ci-dessus, elles n'aident pas à l'examen. Le problème auquel j'ai été confronté est que lorsque certaines logiques sont renvoyées, je continue de rechercher la mise en œuvre et le flux et trop de temps est gaspillé dans le processus et je suis nerveux.

Je pense que beaucoup de développeurs vivraient aussi ce que je vis.


2
Un seul: ne faites pas de bêtises dans votre code.
BЈовић

1
KISS: si le code est simple, votre cerveau est capable de tout gérer.
mouviciel

lorsque vous effectuez une révision du code dans votre entreprise, qui dirige généralement la réunion? vous ou une personne qui examine votre travail? Je demande parce que la réunion de révision du code à l'OMI n'est pas l'endroit idéal pour passer du temps à chercher des morceaux de code, même si vous avez été très rapide à rechercher les choses.
DXM

@DXM Merci pour la réponse. C'est mon TL qui dirigerait la réunion.
Karthik Sreenivasan

@Karthik: k, cette partie est bonne. Donc, sur la base de votre question, vous ne demandez pas comment écrire et produire du code de haute qualité qui est prêt pour la révision du code. Au lieu de cela, votre principale préoccupation est la suivante: «Je continue de rechercher la mise en œuvre et le flux et trop de temps est perdu». Pourriez-vous préciser ceci? pourquoi faites-vous des recherches si TL a le code devant lui et dirige la réunion?
DXM

Réponses:


8

Donc, sur la base des détails fournis par OP, il semble que la question soit: "comment puis-je apprendre mon propre code afin que lorsqu'on lui demande de trouver X ou d'expliquer Y, je puisse répondre rapidement."

Quelques suggestions auxquelles je peux penser:

  • Lors du codage, vous devez prendre le temps d'apprendre et de comprendre votre propre code. C'est peut-être ce que votre TL essaie de vous faire comprendre en moins de mots. Étant un TL sur le projet en cours, j'ai fait beaucoup de révisions de code au cours des 11 derniers mois et je remarque une pratique de certains développeurs de rechercher un "exemple de code" soit dans notre propre base de code, soit ailleurs (google , etc ...) et le copier / coller dedans. Personnellement, je ne peux pas le supporter parce que même si leur code passe les tests unitaires simples, ils ne comprennent pas ce qu'il fait réellement, donc nous ne sommes jamais garantis qu'il n'y a pas ' t un cas limite ou une condition de défaillance attendue qui pourrait se produire.

  • En corollaire de la déclaration précédente, si vous devez copier / coller, essayez de copier / coller uniquement le code que vous avez écrit précédemment et que vous comprenez. Il est certainement correct d'emprunter l'idée des autres, mais dans ce cas, réécrivez leur code ligne par ligne car au fur et à mesure que vous l'écrivez, vous comprendrez mieux ce qu'il fait. Si vous utilisez des API externes, même si vous avez un exemple qui utilise cette API, prenez quand même quelques minutes pour trouver une référence et apprendre comment cette API fonctionne. Ne vous contentez pas de supposer que si cela a fonctionné auparavant, cela fonctionnera également dans votre situation.

  • Lisez et apprenez à aimer le principe SEC . Souvent, ce que vous êtes tenté de copier / coller peut être placé dans un emplacement commun (fonction séparée, classe séparée, bibliothèque séparée ...)

  • Lisez et apprenez à aimer les principes SOLIDES et pendant que vous y êtes, passez en revue KISS qui a déjà été mentionné par mouviciel. Ces principes visent tous à produire un code très concis, propre et modulaire. Si vous avez de grandes classes et de grandes fonctions au sein de celles-ci, il sera clairement beaucoup plus difficile de trouver des choses et, en plus, essayez d'expliquer ce que fait le code. D'un autre côté, si vous suivez (ou du moins essayez de suivre) SRP et rendez chaque classe / fonction responsable d'une seule chose, votre code sera petit et très lisible.

  • Procurez-vous une copie de Clean Code . Très bon livre. Il s'agit d'écrire du code explicite et facile à lire, à entretenir et à étendre. Si vous vous entraînez à écrire du code facile à lire, vous ne devriez pas avoir de problèmes pour lire votre propre code dans les revues de code. Et c'est la partie amusante, j'ai demandé aux gens de lire leur propre code ou simplement de me dire ce que les variables représentaient et ils n'ont pas pu répondre même s'ils ont écrit ce code (classes toutes nouvelles, pas héritées) il y a seulement une semaine . Une bonne dénomination va un long chemin.

  • Si après toute la simplification et la refactorisation, vous avez toujours une fonction qui doit exécuter une sorte d'algorithme qui n'est pas très apparent, prenez le temps et écrivez un bloc de commentaires dans cette fonction expliquant l'algorithme. Non seulement cela sera utile lorsque vous devrez modifier cette fonction dans 2 mois, mais si vous êtes pris en embuscade dans une révision de code, vous pourrez simplement relire ce que vous avez écrit.

  • Si après tous les éléments ci-dessus, vous trouvez-vous toujours des ennuis? êtes-vous nouveau dans l'équipe et invité à travailler avec beaucoup de code hérité? Dans ce cas, il se pourrait que votre TL soit un A $$ et vous pourriez être proactif en lui demandant avant la réunion de se détendre et de ne pas perdre le temps de toutes les personnes impliquées. Lorsque de nouvelles personnes rejoignent une équipe, TL doit avoir assez de patience car travailler dans une nouvelle plate-forme, un nouveau produit, de nouvelles personnes, un nouvel environnement prend beaucoup de concentration à une nouvelle personne, et cette personne manquera de détails au début. Fonctionne comme conçu et votre TL devrait simplement l'accepter.

  • Si après tous les éléments ci-dessus, vous sentez toujours que vous avez d'horribles critiques de code. Parlez à votre TL. Parfois, les gens se sentent mal à cause de la nature des réunions de révision du code alors qu'en fait TL est parfaitement satisfait de vous. Lorsque je fais des revues de code, mon objectif est de mettre en évidence ce qui doit être changé, de m'assurer de bien comprendre les changements et de continuer. Souvent, je n'ai pas le temps d'être poli et certaines personnes sont sur la défensive et tentent de répondre à chacun de mes commentaires. Dans ces situations, la réunion de révision du code s'arrête donc j'ai tendance à les interrompre et à continuer. Généralement, après la réunion, je parlais aux nouveaux gars pour m'assurer qu'ils comprenaient le processus et que ce n'était rien de personnel. Après quelques révisions de code, les gens sont généralement beaucoup plus à l'aise.


+1 pour "ne pas copier-coller de code que vous ne comprenez pas". C'est intolérable! +1 également pour "parler à votre TL"
MarkJ

@DXM Votre capacité à comprendre les nuances les plus fines de la question était très professionnelle sans parler de votre réponse est très informative et descriptive. Mind = Blown!
Karthik Sreenivasan

@DXM D'après votre référence "D'un autre côté, si vous suivez (ou essayez au moins de suivre) SRP et rendez chaque classe / fonction responsable d'une seule chose, votre code sera petit et très lisible." Pouvez-vous me dire ce que signifie * SRP ? * J'ai vu un autre article intéressant sur la clarté du code ici .
Karthik Sreenivasan

1
@KarthikSreenivasan - Dans le contexte utilisé, c'est une pratique où une méthode ou une classe est responsable d'une chose. Par exemple, une méthode qui additionne des nombres ne devrait pas également renvoyer la moyenne. Une recherche simple a trouvé ceci: en.wikipedia.org/wiki/Single_responsibility_principle
Ramhound

10

Les pratiques varient, mais d'après mon expérience:

  • Ne faites rien de spécial au code. Il est naturel de relooker un peu plus votre code lorsque vous apprenez qu'il va être révisé, et il n'y a aucun mal à corriger des choses évidentes comme des fautes d'orthographe et autres. Mais n'entrez pas et n'ajoutez pas beaucoup de commentaires détaillés ou changez le code simplement parce qu'il est prévu de le réviser.

  • Le code est préparé et distribué aux examinateurs bien avant l'examen. Cela est généralement effectué par un tiers neutre, probablement le facilitateur de révision du code. S'il est imprimé, le code doit être suffisamment petit pour que les lignes ne soient pas trop souvent enroulées, mais suffisamment grand pour que tout le monde puisse le lire facilement. Imprimez-le au format paysage si c'est ce qu'il faut.

  • Le code doit être imprimé ou affiché avec des numéros de ligne . De préférence, le numéro doit continuer d'un fichier à l'autre. Il est beaucoup plus facile de se référer à la "ligne 3502" qu'à la "ligne 238 de foo.c", et avoir les numéros permet à tout le monde de parler de lignes spécifiques sans perdre de temps à trouver ces lignes.

  • Il devrait certainement y avoir un facilitateur , au fait. Son travail consiste à empêcher l'examen de s'enliser dans les moindres détails, à l'empêcher de devenir personnel ou chauffé et à limiter strictement la durée de l'examen.

  • En tant qu'auteur, vous devez réviser le code vous-même avant la réunion de révision. Notez les modifications que vous suggéreriez s'il s'agissait du code de quelqu'un d'autre. Cela vous rafraîchit la mémoire du code que vous n'avez peut-être pas consulté en quelques jours et vous aide également à vous entraîner à regarder votre propre code avec un œil critique. Après avoir passé en revue quelques critiques, à la fois en tant que critique et en tant qu'auteur, vous constaterez que vos propres notes correspondront mieux à celles du reste du groupe.

  • Soyez prêt à prendre des notes pendant l'examen. Cela ne devrait pas être votre principale préoccupation - quelqu'un d'autre devrait enregistrer les éléments d'action sur lesquels le groupe est d'accord afin que vous puissiez vous concentrer sur l'explication du code et écouter les commentaires. Mais il y aura des moments où vous obtiendrez des commentaires précieux qui ne sont pas un élément d'action, et vous devriez corriger ces choses lorsqu'elles se produisent.

  • N'oubliez pas que ce n'est pas personnel. Il est difficile d'éviter de se sentir (et d'agir) défensif lors d'un examen. C'est bien d'expliquer votre code si vous pensez qu'il a été mal compris, mais surtout essayez d'écouter.


J'ajouterais une chose: "la ligne 3502" serait une grosse marque rouge. Avoir de très longs fichiers est définitivement une mauvaise chose.
BЈовић

2
@VJo: Caleb a suggéré que les numéros de ligne continuent à travers les fichiers, donc la ligne 3502 est en fait la ligne 238 de foo.c.
Heinzi

Je suis en désaccord avec le numéro de ligne qui continue dans les fichiers. Pour moi, c'est juste déroutant et maladroit. Si des problèmes sont détectés, ils doivent être suivis par module (classe, fichier, peut-être même méthode) de toute façon. De plus, lors d'une révision de code, vous ne devriez pas revoir un système entier, mais plutôt un sous-système ou même quelques classes ou fichiers, il ne devrait donc pas être trop difficile de suivre où se trouvent les modifications.
Thomas Owens

1
@ThomasOwens Les numéros de ligne sont uniquement destinés à décrire facilement un emplacement dans le code révisé lors de l'examen. C'est plus rapide et moins sujet aux erreurs que d'utiliser "file foo.c, ligne 123", et l'OP demande spécifiquement de passer moins de temps à trouver du code. Acceptez que les problèmes soient suivis par fichier. IME, les évaluations couvrent généralement un groupe de classes, peut-être deux grandes ou une douzaine de petites. Plus de 3500 lignes sont trop nombreuses pour être examinées à la fois - essayait seulement de faire valoir que les chiffres continuent d'un fichier à l'autre.
Caleb

Si vous êtes organisé, cela ne devrait pas avoir d'importance. Pour moi, je sens que cela me ralentirait. J'ai été impliqué dans les révisions de code et j'imprime toujours les fichiers, les agrafe par classe / fichier, puis les lis et les annote. Si quelqu'un veut me dire où chercher, je veux une paire nom de fichier / numéro de ligne - cela me faciliterait la tâche, d'autant plus que mon IDE imprime le nom du fichier dans l'en-tête / pied de page de chaque page et j'imprime le numéros de ligne par fichier.
Thomas Owens

3

Une dernière chose à ajouter aux autres réponses: pour faciliter les réviseurs de code formels , effectuez BEAUCOUP de révisions de code informelles ! Par exemple:

"Hey Bob, je peux te montrer comment j'ai implémenté la fonction foo ()?" "Hey Steve, peux-tu jeter un œil à ce diagramme de classe et me dire ce que tu en penses?" "Hey Karen, pouvez-vous m'aider à réfléchir à ce problème? Je pense que j'ai une bonne solution, mais je pourrais utiliser votre aide ..."

Faites-en une habitude régulière. Lorsque vous impliquez vos collègues au début du processus de conception, vous:

  • Établir des relations
  • Obtenez de nouvelles informations sur le problème
  • Améliorez votre capacité à expliquer le problème / la solution à portée de main
  • Gagnez du temps plus tard dans les révisions de code formelles

+1 pour le renforcement de l'équipe et améliorez votre capacité à expliquer le problème. C'est en effet une excellente idée!
Karthik Sreenivasan
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.