Revue de code: expérience réussie



Il y a une tonne d'informations sur Internet sur les revues de code:

  • comment un examen du code de quelqu'un d'autre affecte la culture de l'entreprise
  • ContrĂŽles de sĂ©curitĂ© rĂ©glementaires
  • manuels abrĂ©gĂ©s
  • longues listes de recommandations
  • revue de code d'un point de vue interpersonnel
  • pourquoi ai-je besoin d'une rĂ©vision du code
  • mĂ©thodes Ă©prouvĂ©es
  • en savoir plus sur les mĂ©thodes Ă©prouvĂ©es
  • statistiques: dans quelle mesure la rĂ©vision du code aide Ă  dĂ©tecter les bogues
  • exemples d'erreurs commises lors de la rĂ©vision du code

Oui, bien sĂ»r, il existe des livres sur ce sujet. En un mot, cet article dĂ©crit comment la rĂ©vision du code est organisĂ©e par Palantir. Dans les organisations dont la culture n'accepte pas un tel examen par les pairs, il peut ĂȘtre utile de lire d'abord le brillant essai de Karl E. Wiegers, The Code Revision with a Human Face, puis d'essayer de suivre ce guide.

Ce texte est extrait des recommandations d'amélioration de la qualité basées sur le travail avec Baseline , notre outil de contrÎle qualité du code Java. Il couvre les sujets suivants:

  • Pourquoi, quoi et quand essayons-nous de rĂ©aliser la rĂ©vision du code
  • PrĂ©paration du code pour rĂ©vision
  • ExĂ©cution de la revue de code
  • Exemples de rĂ©vision de code

Traduit en Alconost


XKCD Comic 'Code Quality', copié sous licence CC BY-NC 2.5

La motivation


Nous sommes engagés dans la révision du code (RC) pour améliorer la qualité du code et voulons ainsi influencer positivement la culture d'équipe et d'entreprise. Par exemple:

  • Les auteurs du code sont motivĂ©s car ils savent que leur Ă©quipe de relecteurs tiendra compte de leur demande de changement: l'auteur essaie de nettoyer la rugositĂ©, de suivre le plan d'action et d'amĂ©liorer globalement l'ensemble du commit. Lorsque des collĂšgues reconnaissent votre professionnalisme dans l'Ă©criture de code - pour de nombreux programmeurs, c'est l'occasion d'ĂȘtre fiers d'eux-mĂȘmes.
  • Le partage des connaissances aide l'Ă©quipe de dĂ©veloppement de plusieurs maniĂšres:

- Dans le cadre du RK, il est clairement indiqué quelle partie de la fonctionnalité a été ajoutée / modifiée / supprimée afin qu'à l'avenir, les membres de l'équipe puissent compter sur le travail déjà effectué.

- L'auteur du code peut utiliser une technique ou un algorithme sur lequel les examinateurs eux-mĂȘmes apprendront quelque chose. Dans l'ensemble, une rĂ©vision du code aide Ă  Ă©lever la barre de la qualitĂ© dans toute l'organisation .

- Les examinateurs peuvent connaĂźtre les techniques de programmation ou la base de code elle-mĂȘme qui permettront d'amĂ©liorer ou de consolider les modifications apportĂ©es; par exemple, quelqu'un peut en mĂȘme temps dĂ©velopper ou modifier exactement la mĂȘme opportunitĂ©.

- Un contact et une communication positifs renforcent les liens sociaux entre les membres de l'équipe.

  • En raison de la cohĂ©rence de la base de code, le code lui-mĂȘme est beaucoup plus facile Ă  lire et Ă  comprendre. Il est plus facile de prĂ©venir les bogues et de promouvoir la collaboration entre les programmeurs installĂ©s et nomades.
  • Il est difficile pour l'auteur du code de juger de la lisibilitĂ© de sa propre crĂ©ation, et pour le rĂ©viseur, c'est juste facile, car il ne voit pas dans quel contexte se situe ce code. Le code lisible par l'homme est plus facile Ă  rĂ©utiliser, il contient moins de bogues et est plus durable.
  • Les erreurs alĂ©atoires (par exemple les fautes de frappe), ainsi que les erreurs structurelles (par exemple le code non exĂ©cutable, les erreurs de logique ou d'algorithmes, les problĂšmes de performances et d'architecture) sont souvent beaucoup plus faciles Ă  dĂ©tecter par un critique pointilleux qui regarde le code de cĂŽtĂ©. Selon la recherche, mĂȘme une revue de code courte et non officielle affecte de maniĂšre significative la qualitĂ© du code et l'occurrence de bogues .
  • Les exigences de conformitĂ© et les cadres rĂ©glementaires nĂ©cessitent souvent des examens obligatoires. Un examen du code est un excellent moyen d'Ă©viter les problĂšmes de sĂ©curitĂ© courants. Si les exigences de sĂ©curitĂ© dans cet environnement ou par rapport Ă  cette opportunitĂ© sont augmentĂ©es, alors l'examen sera recommandĂ© (ou mĂȘme demandĂ©) par des satrapes des autoritĂ©s rĂ©glementaires (un bon exemple est le guide OWASP ).

Que chercher


Il n'y a pas de rĂ©ponse claire Ă  cette question et chaque Ă©quipe de dĂ©veloppement doit se mettre d'accord sur sa propre approche. Certaines Ă©quipes prĂ©fĂšrent vĂ©rifier les Ă©ventuelles modifications apportĂ©es Ă  la branche principale de dĂ©veloppement, tandis que d'autres prennent en compte le «seuil de trivialité», au-delĂ  duquel la vĂ©rification est obligatoire. Dans ce cas, vous devez trouver un Ă©quilibre entre l'utilisation efficace du temps du programmeur (Ă  la fois l'auteur et le rĂ©viseur de code) et le maintien de la qualitĂ© du code. Dans certains contextes stricts, il est parfois nĂ©cessaire de tout vĂ©rifier, mĂȘme les modifications les plus triviales, dans le code.

Les rĂšgles de rĂ©vision du code sont les mĂȘmes pour tout le monde: mĂȘme si vous ĂȘtes le dĂ©veloppeur le plus expĂ©rimentĂ© de l'Ă©quipe, cela ne signifie pas que votre code ne nĂ©cessite pas de rĂ©vision. MĂȘme si (parfois cela arrive) le code est parfait, la revue ouvre des opportunitĂ©s de mentorat et de coopĂ©ration, et, au moins, aide Ă  regarder la base de code sous diffĂ©rents points de vue.

Quand vérifier


Un examen du code devrait avoir lieu aprÚs la réussite des vérifications automatiques (tests, conception, autres étapes de l'intégration continue), mais avant la fusion du nouveau code avec la branche principale du référentiel. Habituellement, nous n'avons pas recours à une vérification formelle de l'ensemble des modifications apportées au code depuis la derniÚre version.

Pour les modifications complexes qui doivent ĂȘtre ajoutĂ©es Ă  la branche principale du code en tant qu'unitĂ© unique, mais si Ă©tendues qu'elles ne peuvent pas rĂ©ellement ĂȘtre couvertes en une seule vĂ©rification, essayez une rĂ©vision en plusieurs phases. Nous crĂ©ons la branche principale / grande fonctionnalitĂ© et un certain nombre de branches secondaires (par exemple, fonctionnalitĂ© / grande fonctionnalitĂ©-api, fonctionnalitĂ© / grande fonctionnalitĂ©-test, etc.), chacune d'entre elles encapsulant un sous-ensemble de la fonctionnalitĂ© commune, et chacune de ces branches vĂ©rifiĂ© par rapport Ă  la branche principale de fonctionnalitĂ© / grande fonctionnalitĂ©. Une fois que toutes les branches secondaires ont Ă©tĂ© fusionnĂ©es en fonction / grande fonctionnalitĂ©, crĂ©ez une revue de code pour injecter cette derniĂšre dans la branche principale.

Préparation du code pour révision


L'auteur du code est tenu de fournir le code de la revue sous une forme digestible, afin de ne pas prendre de temps supplémentaire aux relecteurs et de ne pas les démotiver:

  • PortĂ©e et taille . Les changements doivent porter sur un champ d'application Ă©troit, bien dĂ©fini et autosuffisant, entiĂšrement couvert par l'examen. Par exemple, les modifications peuvent ĂȘtre liĂ©es Ă  l'implĂ©mentation de certaines fonctionnalitĂ©s ou corrections de bogues. De brefs changements sont prĂ©fĂ©rables aux longs. Si la revue contient du matĂ©riel qui inclut des modifications dans plus de ~ 5 fichiers, ou nĂ©cessite plus de 1 Ă  2 jours pour l'enregistrement, ou si la revue elle-mĂȘme peut prendre plus de 20 minutes, essayez de diviser le matĂ©riel en plusieurs fragments autonomes et de les vĂ©rifier sĂ©parĂ©ment. Par exemple, un dĂ©veloppeur peut soumettre une modification qui dĂ©finit l'API d'une nouvelle fonctionnalitĂ© en termes d'interfaces et de documentation, puis ajouter une deuxiĂšme modification qui dĂ©crit les implĂ©mentations de ces interfaces.
  • Vous devez envoyer uniquement du matĂ©riel complet, testĂ© indĂ©pendamment (utilisez diff) et testĂ© indĂ©pendamment . Pour gagner du temps sur le rĂ©viseur, testez les modifications soumises (c'est-Ă -dire exĂ©cutez la suite de tests) et assurez-vous que le code passe tous les assemblages, ainsi que tous les tests et toutes les Ă©tapes du contrĂŽle qualitĂ©, Ă  la fois localement et sur des serveurs d'intĂ©gration continue, puis sĂ©lectionnez uniquement examinateurs .
  • La refactorisation des changements ne devrait pas affecter le comportement et vice versa; les changements qui affectent le comportement ne doivent pas impliquer une refactorisation ou un reformatage du code. Il y a plusieurs bonnes raisons Ă  cela:

- Les modifications liĂ©es au refactoring affectent gĂ©nĂ©ralement de nombreuses lignes de code dans de nombreux fichiers - par consĂ©quent, ce code ne sera pas vĂ©rifiĂ© avec autant de soin . Des changements de comportement imprĂ©vus peuvent s'infiltrer dans la base de code, et personne ne le remarquera mĂȘme.

- Les changements majeurs associés au refactoring violent les mécanismes de mouvement, de sélection et autres "magie" associés au contrÎle de source. Il est trÚs difficile d'annuler un tel changement de comportement qui a été effectué aprÚs l'achÚvement de la refactorisation qui couvrait l'ensemble du référentiel.

- Le temps de travail coûteux qu'une personne consacre à la révision du code devrait aller vérifier la logique du programme, et non les différends concernant le style, la syntaxe ou la mise en forme du code. Nous préférons résoudre ces problÚmes à l'aide d'outils automatisés, en particulier, Checkstyle , TSLint , Baseline , Prettier , etc.

Valider les messages


Voici un exemple de message de validation compétent, conçu conformément à la norme largement utilisée:

 ( 80 )    ,  ,   .   72 .          ,    —   .   ,       (   );     ,  rebase,    .  -   : « »,   « »   « ».      -,  , ,  git merge  git revert.      .    . 

Essayez de décrire les modifications apportées lors de la validation, et comment exactement ces modifications sont effectuées:

 > .   .    . > .  jcsv-     IntelliJ 

Rechercher des réviseurs


GĂ©nĂ©ralement, l'auteur d'une validation recherche un ou deux rĂ©viseurs qui connaissent la base de code. Souvent, Ă  ce titre, le chef de projet ou l'ingĂ©nieur principal. Il est conseillĂ© au propriĂ©taire du projet de s'abonner Ă  son propre projet afin de recevoir des notifications de nouvelles rĂ©visions de code. Avec la participation de trois rĂ©viseurs ou plus, une rĂ©vision du code s'avĂšre souvent improductive ou contre-productive, car diffĂ©rents rĂ©viseurs peuvent proposer des changements mutuellement contradictoires. Cela peut indiquer un dĂ©saccord fondamental sur la mise en Ɠuvre correcte, et de tels problĂšmes ne devraient pas ĂȘtre rĂ©solus lors de la rĂ©vision du code, mais lors d'une rĂ©union prolongĂ©e Ă  laquelle toutes les parties intĂ©ressĂ©es participent en personne ou en mode vidĂ©oconfĂ©rence.

Exécution de la revue de code


Un examen de code est un point de synchronisation entre diffĂ©rents membres de l'Ă©quipe, il peut donc potentiellement arrĂȘter le travail. Par consĂ©quent, la rĂ©vision du code doit ĂȘtre opĂ©rationnelle (prendre environ plusieurs heures, pas plusieurs jours), et les membres de l'Ă©quipe et les dirigeants doivent ĂȘtre conscients du temps qu'il faudra pour vĂ©rifier et prioriser le temps qui lui est allouĂ© en consĂ©quence. S'il vous semble que vous n'avez pas le temps de terminer la rĂ©vision Ă  temps, informez-en immĂ©diatement l'auteur du commit afin qu'il puisse vous trouver un remplaçant.

La rĂ©vision doit ĂȘtre assez approfondie pour que le rĂ©viseur puisse expliquer le changement Ă  un autre dĂ©veloppeur avec suffisamment de dĂ©tails. Nous veillerons donc Ă  ce que les dĂ©tails de la base de code soient connus d'au moins deux, et non d'un seul.

En tant que rĂ©viseur, vous devez respecter les normes de qualitĂ© du code et le maintenir Ă  un niveau Ă©levĂ©. Une rĂ©vision de code est plus un art qu'une science. Cela ne peut ĂȘtre appris qu'en pratique. Un rĂ©viseur expĂ©rimentĂ© doit d'abord essayer de laisser ses collĂšgues moins expĂ©rimentĂ©s changer et les laisser ĂȘtre les premiers Ă  rĂ©viser. Si l'auteur a suivi les rĂšgles ci-dessus (en particulier celles liĂ©es Ă  l'auto-test et Ă  l'exĂ©cution prĂ©liminaire du code), alors c'est ce que le rĂ©viseur doit faire attention lors de la rĂ©vision:

But


  • Le code atteint-il l'objectif fixĂ© par l'auteur? Tout changement doit avoir une raison spĂ©cifique (nouvelle fonctionnalitĂ©, refactoring, correction de bug, etc.). Le code proposĂ© nous conduit-il vraiment Ă  cet objectif?
  • Posez des questions. Les fonctions et les classes doivent ĂȘtre justifiĂ©es. Si leur affectation au rĂ©viseur n'est pas claire, cela signifie peut-ĂȘtre que le code devrait ĂȘtre réécrit ou soutenu par des commentaires ou des tests.

Implémentation


  • RĂ©flĂ©chissez Ă  la façon dont vous rĂ©soudriez ce problĂšme. Sinon, pourquoi? Votre code gĂšre-t-il davantage de cas (limites)? Peut-ĂȘtre que c'est plus court / plus facile / plus propre / plus rapide / plus sĂ»r, et fonctionnellement pas pire? Peut-ĂȘtre avez-vous remarquĂ© une rĂ©gularitĂ© profonde qui n'est pas couverte par le code existant?
  • Voyez-vous la possibilitĂ© de crĂ©er des abstractions utiles? Si le code est partiellement dupliquĂ©, cela signifie souvent qu'un Ă©lĂ©ment plus abstrait ou gĂ©nĂ©ral de la fonction peut en ĂȘtre extrait, qui peut ensuite ĂȘtre rĂ©utilisĂ© dans d'autres contextes.
  • Pensez comme un adversaire, cependant, restez gentil. Essayez de «rattraper» les auteurs qui ont coupĂ© des coins ou qui manquent des cas spĂ©cifiques en lançant des configurations / donnĂ©es d'entrĂ©e problĂ©matiques qui cassent leur code.
  • Pensez aux bibliothĂšques ou au code de travail prĂȘt Ă  l'emploi. Si quelqu'un rĂ©implĂ©mente la fonctionnalitĂ© existante - ce n'est pas seulement parce qu'il ne connaĂźt pas l'existence d'une solution toute faite. Parfois, du code ou des fonctionnalitĂ©s sont intentionnellement rĂ©inventĂ©s - par exemple, pour Ă©viter les dĂ©pendances. Dans ce cas, cela doit ĂȘtre clairement commentĂ© dans le code. Cette fonctionnalitĂ© est-elle dĂ©jĂ  fournie dans une bibliothĂšque existante?
  • Le changement correspond-il aux modĂšles standard? Dans les bases de code existantes, des rĂ©gularitĂ©s sont souvent tracĂ©es liĂ©es aux conventions de dĂ©nomination, Ă  la dĂ©composition de la logique du programme, aux dĂ©finitions des types de donnĂ©es, etc. Il est gĂ©nĂ©ralement souhaitable que toutes les modifications soient mises en Ɠuvre conformĂ©ment aux modĂšles existants.
  • Des dĂ©pendances qui surviennent lors de la compilation ou lors de l'exĂ©cution (en particulier entre les sous-projets) sont-elles ajoutĂ©es lors d'une modification? Nous recherchons la faible cohĂ©rence du code de nos produits, c'est-Ă -dire que nous essayons de permettre un minimum de dĂ©pendances. Les modifications liĂ©es aux dĂ©pendances et au systĂšme de gĂ©nĂ©ration doivent ĂȘtre vĂ©rifiĂ©es particuliĂšrement attentivement.

Lisibilité et style


  • Pensez Ă  la façon dont vous lisez ce code. Pouvez-vous saisir ses concepts assez rapidement? Est-il raisonnablement prĂ©sentĂ©, est-il facile de garder une trace des noms des variables et des mĂ©thodes? Puis-je tracer du code sur plusieurs fichiers ou fonctions? Avez-vous dĂ©jĂ  Ă©tĂ© dĂ©rangĂ© par un nom incohĂ©rent quelque part?
  • Le code est-il conforme aux directives de programmation et de style bien connues? Le code sort-il de l'ensemble du projet par style, conventions de dĂ©nomination d'API, etc.? Comme mentionnĂ© ci-dessus, nous essayons de rĂ©soudre les diffĂ©rends stylistiques Ă  l'aide d'outils automatiques.
  • Le code a-t-il des listes de tĂąches (TODO)? Les listes de tĂąches s'accumulent simplement dans le code et finissent par se transformer en ballast. Attribuez Ă  l'auteur de soumettre un ticket Ă  GitHub Issues ou JIRA et associez un numĂ©ro de tĂąche Ă  TODO. Il ne devrait pas y avoir de code commentĂ© dans la modification proposĂ©e.

Support d'utilisation


  • Lisez les tests. S'il n'y a pas de tests dans le code, mais qu'ils devraient ĂȘtre lĂ , demandez Ă  l'auteur d'en Ă©crire quelques-uns. Les fonctionnalitĂ©s vraiment non testĂ©es sont rares, et les implĂ©mentations de fonctionnalitĂ©s non testĂ©es - malheureusement, souvent. VĂ©rifiez les tests eux-mĂȘmes: couvrent-ils des cas intĂ©ressants? Est-il pratique de les lire? La couverture globale du test diminue-t-elle aprĂšs ce test? RĂ©flĂ©chissez Ă  la façon dont ce code pourrait Ă©chouer. Les normes de conception de test et le code de base sont souvent diffĂ©rents, mais les normes de test sont Ă©galement importantes.
  • L'examen de ce fragment prĂ©sente-t-il un risque de rupture du code de test, du code d'effraction ou des tests d'intĂ©gration? Souvent, un tel examen n'est pas effectuĂ© avant la validation / fusion, mais si de tels cas sont nĂ©gligĂ©s, tout le monde en souffrira. Faites attention aux choses suivantes: suppression des utilitaires ou modes de test, modification de la configuration, modifications de la disposition / structure de l'artefact.
  • Ce changement viole-t-il la compatibilitĂ© descendante? Dans l'affirmative, est-il possible d'apporter cette modification Ă  la version Ă  ce stade, ou doit-elle ĂȘtre reportĂ©e Ă  une version ultĂ©rieure? Les violations peuvent inclure des modifications de la base de donnĂ©es ou de son schĂ©ma, des modifications des API publiques, des modifications du flux de tĂąches au niveau de l'utilisateur, etc.
  • Ce code nĂ©cessite-t-il des tests d'intĂ©gration? Parfois, le code ne peut pas ĂȘtre correctement vĂ©rifiĂ© en utilisant uniquement des tests unitaires, surtout s'il interagit avec des systĂšmes ou une configuration externes.
  • Laissez des commentaires sur la documentation de ce code, des commentaires et des messages de validation. De nombreux commentaires obstruent le code et signifient que les messages de validation dĂ©routent ceux qui doivent ensuite travailler avec le code. Ce n'est pas toujours le cas, mais des commentaires de qualitĂ© et des messages de validation au fil du temps vous seront certainement utiles. (N'oubliez pas que vous avez vu un commentaire ou un message de validation magnifique ou tout simplement horrible.)
  • La documentation externe a-t-elle Ă©tĂ© mise Ă  jour? Si le LISEZMOI, le CHANGELOG ou toute autre documentation est conservĂ© pour votre projet, est-il mis Ă  jour pour reflĂ©ter les modifications apportĂ©es? Une documentation obsolĂšte peut ĂȘtre plus nocive que nulle, et il sera plus coĂ»teux de corriger des erreurs Ă  l'avenir que d'apporter des modifications maintenant.

N'oubliez pas de louer le code concis / lisible / efficace / beau. Au contraire, rejeter ou rejeter un code proposé pour révision n'est pas impoli. Si le changement est excessif ou insignifiant - rejetez-le en expliquant la raison. Si le changement vous semble inacceptable en raison d'une ou plusieurs erreurs fatales - rejetez-le, encore une fois, avec raison. Parfois, le meilleur résultat d'une révision de code est de dire «faisons-le complÚtement différemment» ou «ne le faisons pas du tout».

RespectĂ© par les pairs. Bien que la position de l'adversaire soit saine, vous ne vous ĂȘtes pas rendu compte de cette opportunitĂ© et vous ne pouvez pas tout dĂ©cider pour lui. Si vous ne pouvez pas obtenir une opinion Ă©valuĂ©e par les pairs sur le code, organisez une consultation en temps rĂ©el et Ă©coutez l'opinion d'une troisiĂšme personne.

La sécurité


Assurez-vous que tous les points de terminaison API sont correctement autorisés et authentifiés conformément aux rÚgles adoptées dans le reste de la base de code. Recherchez d'autres failles courantes, par exemple: configuration faible, entrées d'utilisateurs malveillants, entrées de journal manquantes, etc. En cas de doute, montrez le code évalué par les pairs à un professionnel de la sécurité.

Commentaires: concis, poli, incitatif


L'examen doit ĂȘtre concis, soutenu dans un style neutre. Critiquez le code, pas l'auteur. Si quelque chose n'est pas clair - demandez des Ă©claircissements et ne prĂ©sumez pas que le tout rĂ©side dans l'ignorance de l'auteur. Évitez les pronoms possessifs, en particulier dans les jugements de valeur: « mon code fonctionnait avant vos changements», «il y a un bug dans votre mĂ©thode», etc. Ne coupez pas l'Ă©paule: «ça ne marchera pas du tout », «le rĂ©sultat est toujours incorrect».

Essayez de faire la distinction entre les recommandations (par exemple, «Recommandation: extraire la méthode, cela rendra le code plus clair»), les modifications nécessaires (par exemple, «Ajouter un remplacement »), et les opinions qui nécessitent une clarification ou une discussion (par exemple, «ce comportement est-il vrai? ? Si oui, veuillez ajouter un commentaire expliquant la logique. ») Essayez de mettre des liens ou des pointeurs vers une description détaillée du problÚme.

Lorsque vous avez terminé la révision du code, indiquez dans quelle mesure la réaction à vos commentaires que vous attendez de l'auteur est détaillée, souhaitez-vous répéter la révision une fois les modifications apportées, par exemple: «Vous pouvez télécharger le code en toute sécurité dans la branche principale aprÚs ces corrections mineures» ou «Veuillez noter mes commentaires et faites-moi savoir quand je pourrai revoir le code. »

Examiner la réponse


La rĂ©vision du code, en particulier, vise Ă  amĂ©liorer la demande de modifications proposĂ©e par l'auteur; par consĂ©quent, ne prenez pas l'hostilitĂ© des recommandations de l'examinateur, prenez-les au sĂ©rieux, mĂȘme si vous n'ĂȘtes pas d'accord avec elles. RĂ©pondez Ă  tout commentaire, mĂȘme Ă  l'habituel «ACK» (approuvĂ©) ou «terminé» (terminĂ©). Expliquez pourquoi vous avez pris telle ou telle dĂ©cision, pourquoi vous avez certaines fonctions dans votre code, etc. Si vous ne parvenez pas Ă  un avis commun avec le rĂ©viseur, organisez une consultation en temps rĂ©el et Ă©coutez l'avis d'un tiers spĂ©cialiste.

Les corrections doivent ĂȘtre corrigĂ©es dans la mĂȘme branche, mais dans un commit sĂ©parĂ©. Si vous respectez les validations au stade de la rĂ©vision, il sera plus difficile pour le rĂ©viseur de suivre les modifications.

La politique de fusion de code est différente pour différentes équipes. Dans certaines entreprises, la fusion de code n'est approuvée que par le propriétaire du projet; dans d'autres, un participant peut le faire aprÚs que son code a été examiné et approuvé.

Examen du code tĂȘte-Ă -tĂȘte


En rĂšgle gĂ©nĂ©rale, les outils de type diff asynchrones, tels que Reviewable, Gerrit ou GitHub, sont parfaits pour les rĂ©visions de code. Si nous parlons d'un examen complexe ou d'un examen, dont les participants diffĂšrent considĂ©rablement en termes d'expĂ©rience ou de professionnalisme, il peut ĂȘtre plus efficace d'effectuer un examen personnellement - soit assis ensemble devant un moniteur ou un projecteur, ou Ă  distance, via des outils de vidĂ©oconfĂ©rence ou de partage d'Ă©cran.

Des exemples


Dans les exemples suivants, les commentaires des réviseurs dans les listes sont saisis à l'aide de

 //R: ... 


Dénomination incohérente


 class MyClass { private int countTotalPageVisits; //R:    private int uniqueUsersCount; } 

Signatures de méthode incohérentes


 interface MyInterface { /**  {@link Optional#empty},  s   . */ public Optional<String> extractString(String s); /**  null,  {@code s}   . */ //R:    :    // Optional<> public String rewriteString(String s); } 

Utilisation de la bibliothĂšque


 //R:     MapJoiner   Guava String joinAndConcatenate(Map<String, String> map, String keyValueSeparator, String keySeparator); 

Préférences personnelles


 int dayCount; //R: :   numFoo   fooCount;   ,          

Bugs


 //R:    numIterations+1 –    ? //    –     numIterations? for (int i = 0; i <= numIterations; ++i) { ... } 

Considérations architecturales


 otherService.call(); //R: ,      OtherService.    ? 

À propos du traducteur

L'article a été traduit par Alconost.

Alconost localise des jeux , des applications et des sites dans 70 langues. Traducteurs en langue maternelle, tests linguistiques, plateforme cloud avec API, localisation continue, chefs de projet 24/7, tout format de ressources de chaĂźne.

Nous réalisons également des vidéos de publicité et de formation - pour les sites qui vendent, présentent des images, de la publicité, des formations, des teasers, des explicateurs, des bandes-annonces pour Google Play et l'App Store.

Plus de détails

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


All Articles