Le processus de révision du code dans hh.ru

Je suis tombé sur un document contenant des règles et des recommandations sur le processus de révision du code au sein de l'entreprise. J'ai décidé que ces informations utiles devraient être partagées avec le monde extérieur. Avec la bénédiction de l' auteur, je publie l'œuvre.



La plupart de ces règles sont de nature consultative et doivent être guidées principalement par le bon sens, et non par une observation aveugle.


Dispositions générales


  • Dans hh.ru, l'examen a lieu dans le format de demande de pull sur Github.
  • Les demandes de rĂ©vision et d'extraction sont requises, mĂŞme si, dans le cadre de la tâche, une ligne ou un caractère du code est modifiĂ©.
  • Chaque tâche doit avoir au moins un rĂ©viseur responsable, elle est indiquĂ©e dans la tâche en tant que rĂ©viseur et est responsable du code, comme l'auteur. Non interdit et encouragĂ© Ă  participer Ă  l'examen d'autres personnes.
  • La responsabilitĂ© de la rĂ©alisation de la tâche par le biais de la revue incombe Ă  l'auteur de la tâche.
  • Toutes les modifications après un examen, telles que les rĂ©visions pendant les tests, doivent Ă©galement ĂŞtre prĂ©visualisĂ©es.

Examiner les objectifs


  • Diffusion d'expĂ©rience et de connaissances entre dĂ©veloppeurs.
  • Prise en charge du principe - les modifications ne doivent pas aggraver le code existant, elles doivent l'amĂ©liorer.
  • Correction des erreurs de logique et des erreurs liĂ©es Ă  la sĂ©curitĂ©, traitement correct des exceptions.
  • AmĂ©lioration de la qualitĂ© du code, de la maintenabilitĂ© et de l'architecture du projet.
  • AmĂ©lioration de la lisibilitĂ© du code.
  • AmĂ©lioration de la couverture des tests et des tests au bon niveau.
  • AmĂ©lioration de la documentation.
  • ConformitĂ© des changements avec les exigences de la tâche.
  • PrĂ©vention de la dette technique ou de la taxe technique.
  • La conception rĂ©flĂ©chie de l'API, oĂą l'API est n'importe quel module avec une interface externe. Par exemple, qu'une ressource dans un service possède une URL bien pensĂ©e, un format JSON pratique, des codes de rĂ©ponse corrects dans diffĂ©rents cas, etc.
  • L'historique correct des validations dans la Gita, avec des messages qui reflètent l'essence du message, sans validations temporaires.

Préparation à l'examen


  • Avant de publier une pull request, lisez votre code 2-3 fois: avec une forte probabilitĂ©, vous y trouverez vous-mĂŞme des erreurs, ce qui fera gagner du temps au rĂ©viseur. VĂ©rifiez qu'aucune erreur ne peut ĂŞtre dĂ©tectĂ©e automatiquement - erreurs de style de code, tests abandonnĂ©s. Assurez-vous que le code n'a pas de commentaires temporaires et de code de dĂ©bogage, et vĂ©rifiez Ă©galement que votre code correspond aux guides de style acceptĂ©s.
  • Si vous crĂ©ez une demande d'extraction en cours de travail sur une tâche, Ă©crivez «[WIP]» dans l'en-tĂŞte et mettez une marque «work in progress». Lorsque le travail est terminĂ©, supprimez les balises et informez-en dans un commentaire sĂ©parĂ© afin que les parties intĂ©ressĂ©es sachent que le code peut ĂŞtre consultĂ©.
  • Soyez prĂŞt Ă  montrer Ă  l'examinateur une mini-dĂ©monstration de la tâche.
  • Donnez de petites portions de code pour examen. 200-300 lignes de changement - la limite pour un examen efficace.
  • Apportez des modifications indĂ©pendantes dans des validations distinctes.
  • DĂ©crivez les commits avec des messages courts et informatifs.
  • Faites une refactorisation en tant que commit sĂ©parĂ©, il est plus facile de voir les changements dans la logique, l'essence de la tâche.
  • Formatez le code en tant que validation distincte avant les modifications majeures, ou mĂŞme en tant que demande d'extraction distincte.
  • Ne commettez pas de modifications mineures. Par exemple, ajouter des sauts de ligne dans un fichier dans lequel vous n'avez rien changĂ© d'autre.
  • Dans le titre de la demande d'extraction, dĂ©crivez brièvement et de manière informative l'essence des modifications.
  • DĂ©crivez le problème et la solution dans la demande de tirage. DĂ©crivez les solutions alternatives et pourquoi la solution actuelle est sĂ©lectionnĂ©e. Si les modifications concernent l'interface, joignez les captures d'Ă©cran «avant» et «après».
  • Dans la demande d'extraction, indiquez un lien vers la tâche et dans la tâche, un lien vers la demande d'extraction.
  • Il est parfois utile de discuter de la solution choisie avec le rĂ©viseur avant d'Ă©crire le code. Cela vous aidera Ă  trouver la meilleure solution au problème et Ă  simplifier le processus d'examen.

Choix de l'évaluateur


  • Confiez la tâche de l'examen Ă  un spĂ©cialiste du domaine concernĂ©.
  • Si plusieurs commandes fonctionnent avec du code, il est utile de sĂ©lectionner un rĂ©viseur d'une autre Ă©quipe pour diffuser les connaissances.
  • L'agent de probation n'est peut-ĂŞtre pas l'examinateur responsable, mais peut participer au processus d'examen.
  • Ne confiez pas toutes vos tâches Ă  la revue aux mĂŞmes personnes - demandez des critiques Ă  diffĂ©rentes personnes.
  • Si le problème concerne un morceau de code non trivial qu'une certaine personne comprend, montrez-lui les modifications, quel que soit le responsable de l'Ă©valuation. Souvenez-vous Ă©galement que chaque rĂ©fĂ©rentiel a des mainteneurs, ils en savent plus sur ce code et supervisent le dĂ©veloppement.
  • Le reste du rĂ©viseur est choisi arbitrairement, d'un commun accord entre les parties. Utilisez les recommandations sur le github en fonction du «blâme» du code affectĂ© pour vous aider Ă  choisir.
  • Après avoir sĂ©lectionnĂ© un rĂ©viseur, spĂ©cifiez-le en tant que cessionnaire dans la demande d'extraction. Une liste de toutes les demandes d'extraction qui vous sont attribuĂ©es.

Processus d'examen, général


Désigne à la fois l'auteur du code et le réviseur.

  • Tout le code est commun, il n'y a pas de concepts tels que «mon code» ou «votre code». Cela signifie que chaque dĂ©veloppeur est responsable de n'importe quelle ligne de code, et pas seulement celui qui a Ă©crit cette ligne.
  • CrĂ©ez une atmosphère de comprĂ©hension mutuelle, soyez poli et amical, apprĂ©ciez-vous et respectez-vous les uns les autres, n'imposez pas votre opinion. Écoutez l'opinion de l'adversaire et ne tenez pas votre principe. Ne transformez pas l'examen en une expĂ©rience nĂ©gative pour vos collègues.
  • Posez des questions si quelque chose n'est pas clair. Argumentez et spĂ©cifiez les questions et rĂ©ponses. Il peut ne pas ĂŞtre Ă©vident pour l'auteur du code ce que l'on entend par la question «pourquoi en est-il ainsi?», Mais le critique ne comprend pas l'argumentation de la rĂ©ponse «en dĂ©saccord».
  • N'Ă©tirez pas le processus d'examen, gagnez du temps, rĂ©pondez rapidement aux commentaires, discutez verbalement, ne provoquez pas de longues discussions et n'engendrez pas de «holivars». Si vous ne parvenez pas rapidement Ă  un consensus, demandez l'aide de vos collègues, du responsable ou du responsable du domaine fonctionnel.
  • Si la tâche ne se dĂ©roule pas sur quelques lignes, passez 10 Ă  15 minutes avec le rĂ©viseur sur une rĂ©vision conjointe du code, il est utile de le faire avant de crĂ©er une demande de tirage. Discutez de l'essence de la tâche et de la solution, voyez comment cela s'est passĂ© et est devenu dans un environnement de travail. Cela aidera le rĂ©viseur Ă  mieux plonger dans le contexte de la tâche. La plupart des commentaires resteront non Ă©crits, ce qui fera gagner du temps Ă  tout le monde.
  • Après une discussion orale, dĂ©crivez toujours la dĂ©cision prise et les raisons de celle-ci dans la demande de retrait. La responsabilitĂ© de la description incombe Ă  l'auteur du code.
  • Si le code contient le mĂŞme type d'erreurs, le rĂ©viseur doit se concentrer sur l'attention de l'auteur du code dans le premier ou le deuxième commentaire, sans commenter chaque entrĂ©e, et l'auteur doit analyser le code pour le mĂŞme type d'erreurs avant de publier la correction.
  • FĂ©licitez les dĂ©cisions prises par l'auteur et les suggestions de l'examinateur.
  • Laissez des commentaires sur les modifications apportĂ©es Ă  la demande d'extraction elle-mĂŞme, et non sur les validations individuelles. Ainsi, toute la correspondance sera au mĂŞme endroit, y compris après le rebasage.
  • RĂ©pondez aux commentaires dans les mĂŞmes fils de discussion oĂą ils ont commencĂ©. Si le commentaire fait rĂ©fĂ©rence Ă  la demande d'extraction entière ou Ă  plusieurs commentaires dans le mĂŞme fil, citez le commentaire commentĂ©. Afin de passer d'un e-mail Ă  un fil de discussion obsolète, au lieu du lien «l'afficher sur GitHub», utilisez le lien «dans chemin / vers / fichier».
  • Si, au cours du processus de rĂ©vision, des dĂ©cisions cardinales sont prises du point de vue des normes de codage ou d'autres accords formalisĂ©s, l'auteur du code est tenu de noter ces dĂ©cisions dans les documents pertinents.
  • L'examen ne concerne pas seulement le code, mais l'ensemble de la tâche. Ne traitez pas les exigences de la tâche ou des mises en page comme la vĂ©ritĂ© ultime - tout le monde fait des erreurs et personne ne peut prendre en compte toutes les nuances. Un regard neuf et des suggestions judicieuses ne profiteront qu'au produit.

Processus d'examen par l'auteur du code


  • La tâche n'a pas Ă©tĂ© achevĂ©e jusqu'Ă  ce qu'elle ait passĂ© l'examen, les tests et la sortie sur le "prod".
  • RĂ©pondez Ă  tous les commentaires du rĂ©viseur, ne laissez pas de commentaires sans rĂ©ponse, que vous les acceptiez ou non.
  • RĂ©flĂ©chissez aux questions qui se posent ou peuvent se poser pendant l'examen. Peut-ĂŞtre qu'il manque un commentaire Ă  la section de code ou qu'il est prĂ©fĂ©rable d'Ă©crire le code plus explicitement.
  • Ne corrigez pas les validations existantes avec un commit gend --amend; apportez plutĂ´t des modifications en tant que validations distinctes, une pour chaque correctif. La correction des validations existantes complique considĂ©rablement le processus de rĂ©vision, car vous devez revoir tout le code.
  • Après avoir ajoutĂ© un nouveau commit Ă  la demande d'extraction, Ă©crivez dans un commentaire sĂ©parĂ© un rĂ©sumĂ© des modifications afin que les parties intĂ©ressĂ©es soient au courant. Cela s'applique aux corrections lors de l'examen, ainsi qu'aux corrections lors des tests.
  • Après la rĂ©vision, avant d'envoyer la tâche pour test, réécrivez l'historique des validations (git rebase --interactive), apportez des corrections aux validations individuelles et supprimez les validations temporaires. DĂ©couvrez l'option --autosquash pour simplifier le processus.

Processus d'examen par l'examinateur


  • Si vous ĂŞtes occupĂ© au moment de la demande de rĂ©vision, faites-moi savoir exactement quand vous commencerez la rĂ©vision.
  • N'exigez pas, mais suggĂ©rez d'apporter des changements.
  • Commentez le code, pas la personne qui l'a Ă©crit.
  • Vous assumez la responsabilitĂ© du code Ă©crit, approchez l'examen en consĂ©quence, mais cela ne signifie pas que l'auteur du code doit se conformer strictement Ă  toutes vos exigences. N'oubliez pas que beaucoup de choses peuvent ĂŞtre faites de diffĂ©rentes manières.
  • Suivez les objectifs de l'examen et proposez des modifications substantielles. N'insistez pas sur des changements non critiques. Indiquez l'importance des corrections dans un commentaire.
  • Si vous rencontrez un problème grave, suspendez la rĂ©vision et attendez que l'auteur le corrige. Très probablement, après la correction, il sera encore nĂ©cessaire de rĂ©viser Ă  nouveau.
  • Faites attention non seulement Ă  ce qui a Ă©tĂ© changĂ©, mais aussi Ă  ce qui n'a pas Ă©tĂ© changĂ©. Recherchez et montrez Ă  l'auteur le code qui aurait dĂ» ĂŞtre changĂ©, mais qui ne l'a pas Ă©tĂ© (importations ou classes inutilisĂ©es oubliĂ©es, utilisation du code refactorisĂ© ailleurs, etc.).
  • Après avoir apportĂ© des modifications par l'auteur du code, passez en revue les corrections et rĂ©examinez la demande d'extraction dans son intĂ©gralitĂ©. Peut-ĂŞtre, sous rĂ©serve de corrections, vous aurez de nouveaux commentaires ou questions.
  • Ne perdez pas de temps Ă  revoir le code qui n'a pas changĂ© dans le cadre de la tâche. L'allocation d'une partie du code dans une fonction est considĂ©rĂ©e comme un changement. Le transfert de code «tel quel» n'est pas considĂ©rĂ© comme un changement. La rĂ©forme du code dans le fichier concernĂ© est Ă  la discrĂ©tion de l'auteur.
  • Le rĂ©viseur n'Ă©dite pas indĂ©pendamment le code dans la branche, car il le veut tellement ou plus facilement. Les modifications sont apportĂ©es par l'auteur du code.
  • Si vous avez entrepris une rĂ©vision, essayez de ne pas retarder ou passer Ă  d'autres tâches au dĂ©triment du courant

Matériaux utilisés et liens connexes



PS Partagez vos règles, recommandations et cas d'utilisateurs utiles sur le processus de révision dans les commentaires

Source: https://habr.com/ru/post/fr422399/


All Articles