Faut-il essayer de revoir tout notre code?

18

Nous modifions actuellement le processus de développement et je me demande si nous devrions essayer de garder 100% de nos commits évalués par les pairs.

Quelle est votre expérience concernant les revues de code?

  • Avez-vous tendance à y consacrer "beaucoup" de temps (disons 1/2 heure par jour), ou à parcourir simplement 5/10 minutes maximum?
  • Avez-vous un temps fixe à consacrer par jour / semaine / sprint / projet?
  • Plus important encore, pensez-vous que l'objectif devrait être que 100% du code soit évalué par des pairs ou que 100% ne soit pas nécessaire?
Siméon
la source
Essayez de toucher 80% du code avec 20% de l'effort. Investissez dans les meilleurs outils automatisés que l'argent peut acheter.
Job du
2
Les outils automatisés sont excellents, mais deviennent inutiles à moins d'avoir le temps et les ressources pour maintenir tous les tests à jour.
Kieren Johnstone,

Réponses:

19

Nous avons une tâche de «révision du code» dans chaque histoire. Une personne idéalement non impliquée dans le développement de cette histoire examinera toutes les modifications de code associées à cette histoire. Ça marche bien.

Beaucoup de temps? Pas beaucoup, cela dépend de la quantité de code - nous recherchons des erreurs évidentes, des fautes de frappe, une vérification de la logique de base, des exceptions non capturées, etc.

C'est une étape de qualité qui trouve des bogues, donc elle a une certaine valeur. L'allocation de temps n'est peut-être pas la meilleure façon de le faire - qu'en est-il si quelque chose est assez complexe, il devrait être révisé par le code?

Soit dit en passant, il est important que quelqu'un d'autre fasse la révision du code.

Kieren Johnstone
la source
3
"Soit dit en passant, il est important que quelqu'un d'autre fasse la révision du code ..", la question implique-t-elle que la même personne qui écrit le code devrait la revoir? Si ça fait où? Je voudrais résoudre ce problème :)
Simeon
4
Non, je n'étais pas complet et je disais que c'est important
Kieren Johnstone
5
@Simeon est en fait une idée fausse très répandue que le propriétaire peut réviser son propre code. Cela mine toute l'opération
Tom Squires
5
@TomSquires: Exactement. Lorsque vous travaillez avec un morceau de code depuis longtemps, vous pouvez devenir «aveugle» à des défauts autrement évidents, car vous le voyez comme ce qu'il est censé être au lieu de ce qu'il est. Ces problèmes seront plus faciles à repérer pour quelqu'un qui n'a jamais vu le code auparavant. Les écrivains ont le même problème, et tout comme les livres ne sont pas publiés sans relecture, le code ne doit pas être publié sans révision. Il y a aussi d'autres avantages à faire des revues de code, par exemple c'est bon pour transférer des connaissances entre les membres de votre équipe.
hammar
@hammar - bien sûr, essayer de trouver quelqu'un qui n'a pas écrit le code qui a le temps de se familiariser si intimement avec lui qu'il peut le réviser utilement, est un défi
Peter Ajtai
12

Un problème plus important est de savoir à quel point votre code est couvert par les révisions, à savoir l'efficacité des révisions. Si vos avis ne révèlent que peu ou pas de problèmes, atteindre une couverture complète sera inutile.

Commencez par rendre vos avis plus efficaces, puis décidez de la couverture.

Les examens doivent être effectués non seulement sur le code, mais également sur la conception.



De plus, les avis ne remplacent pas les tests et les outils:

  • Les avis peuvent tester le code à sec
  • Les avis peuvent inclure une analyse de code
  • Les examens examinent la réutilisation et la lisibilité
  • Les examens peuvent examiner certains aspects de l'efficacité, mais cela ne remplace pas la mesure réelle du temps d'exécution et la recherche de cols de bouteilles
  • Il existe des outils pour l'analyse de code statique
  • Il existe des outils pour tester les conventions de codage, ne perdez pas de temps de révision à ce sujet
  • Unité, système et tests d'intégration du code de fonctionnement humide
  • Les tests de tests unitaires, système et d'intégration peuvent être répétés automatiquement, les revues de code sont généralement ponctuelles
  • Les tests unitaires doivent avoir une couverture de code élevée et tester à la fois les principaux scénarios de réussite et les conditions de fin, les revues de code ne peuvent le faire que partiellement
  • Les tests d'intégration testent la capacité des unités ou des systèmes à fonctionner ensemble, la révision du code ne peut pas remplacer cela
  • Le système teste la fonctionnalité de test d'un système entier, la révision du code ne peut pas le remplacer



Essayez de consacrer un temps prédéfini par mois (ou par sprint) aux révisions. Sélectionnez le code que vous souhaitez consulter au prochain emplacement dédié à l'aide d'une heuristique telle que:

  • Code pouvant contenir un bogue non identifié qui a été signalé
  • Le code qui a récemment identifié des bogues
  • Code avec des problèmes de performance (cols de bouteille)
  • Code écrit par de nouveaux développeurs
  • Code hérité récemment mis à jour par une personne qui ne le connaissait pas auparavant
  • Code dans de nouveaux domaines
  • Code existant que vous souhaitez que les nouveaux développeurs connaissent
  • Code qui résout des problèmes complexes
  • Code identifié comme complexe par les outils d'analyse

Et rappelez-vous, vous examinez le code (ou la conception ou les tests) et non les auteurs.



Je recommande les documents de lecture suivants:

Examens sélectifs sans devoirs Les
secrets les mieux gardés de l'examen du code des pairs

Danny Varod
la source
5

Ça dépend.

Cela dépend de ce que fait votre logiciel:

  • S'il contrôle un stimulateur cardiaque électronique ou une navette spatiale, alors certainement oui.

  • S'il s'agit d'un prototype jetable, alors probablement non.

Cela dépend également de la qualité de vos ressources, de l'expérience de vos développeurs et de ce que vous recherchez dans les revues de code. (Gardez à l'esprit que le développeur moyen qui examine le code de quelqu'un d'autre va probablement remarquer des problèmes de style et manquer des bogues algorithmiques subtils ... d'autant plus que la révision du code est une corvée.)

Mon conseil serait d'économiser vos efforts de révision de code pour le code où l'exactitude est critique et le coût des erreurs non détectées est élevé.

Stephen C
la source
5

Tout d'abord, vous devez répondre à cette question: pourquoi révisez-vous le code?

Avec cette réponse en main, vous pouvez déterminer quel code doit être examiné.

Certaines revues de code accomplissent exactement ce que les tests font ou auraient fait. Si tel est le but de vos avis, alors se rapprocher de 100% est une bonne idée si vous avez peu de tests. Cependant, laisser les outils de test faire cela réduirait la nécessité de revoir tout le code.

La plupart des bonnes critiques semblent se concentrer sur le partage des connaissances et l'augmentation des capacités des développeurs dans la révision (soit celui qui a écrit le code, soit ceux qui ont révisé le code). Avec cela comme principale raison des révisions, il est probablement exagéré de vérifier 100% du code.

John Fisher
la source
3

Dans un monde parfait, tout serait explicitement lu par l'auteur et évalué par des pairs par au moins une autre personne, des spécifications des exigences aux manuels d'utilisation en passant par les cas de test. Mais les examens, même les simples vérifications sur place, prennent du temps et coûtent de l'argent. Cela signifie que vous devez choisir ce que vous devez réviser et quand vous devez le réviser.

Je recommande de hiérarchiser les éléments à réviser, de choisir la manière dont vous souhaitez les réviser et d'essayer de les réviser autant que possible avec le niveau de détail approprié. La priorisation peut être basée sur le type d'artefact, par exemple en stipulant que les exigences doivent être examinées, le code de conception et de production doit être examiné et les cas de test peuvent être examinés. Dans ce cadre, vous pouvez également spécifier que les composants à haut risque ou à haute valeur reçoivent une priorité dans l'examen, ou peut-être un examen plus formel.

En ce qui concerne le temps, tout remonte à la hauteur de priorité du composant. Il y a eu des moments où j'ai passé 10 à 15 minutes à réviser, et d'autres fois où plusieurs personnes ont lu le code individuellement, puis sont allées dans une pièce pour faire un processus d'inspection plus formel qui dure 30 à 45 minutes (selon la taille de le module).

En fin de compte, c'est un équilibre entre le temps, le coût, la portée et la qualité. Vous ne pouvez pas les avoir tous, vous devez donc optimiser où vous le pouvez.

Thomas Owens
la source
3

À titre de suggestion, si vous prévoyez de faire des révisions, ayez des directives communes sur la portée et l'objectif de la révision pour vous assurer que les révisions ne causent pas de frictions inutiles entre les membres de l'équipe.

Des équipes cohérentes construisent de meilleurs projets. Les gens peuvent perdre leurs relations pour des absurdités ou des demandes de perfection. Il y a toujours cette personne qui se plaindrait de ceci ou de cela et qui dérangerait les autres juste parce qu'il est comme ça ...

Aucune chance
la source
2

Je réserve une heure par jour pour faire des évaluations par les pairs, mais je ne l'exige pas toujours. Notre base de code est partagée entre quelques dizaines de produits. Notre politique est qu'un changement trivial de code unique à un produit peut être enregistré sans examen. Les modifications plus complexes d'un produit nécessitent un examen, mais cela peut être aussi informel que d'appeler un collègue à votre bureau pour le lui donner une fois de plus. Les modifications du code partagé nécessitent une révision plus formelle, y compris les développeurs sur d'autres produits. Je pense que notre politique établit un assez bon équilibre par rapport aux autres entreprises pour lesquelles j'ai travaillé.

Je passe plus de temps par jour sur les critiques que certains de mes collègues avec des rôles moins centraux, mais je ne considère pas cela comme un temps déraisonnable, car avant la politique de révision, je pouvais facilement perdre plus de temps que la recherche de bogues qu'un développeur sur un autre produit introduit.

Karl Bielefeldt
la source
Est-ce une moyenne? Limiter une revue complexe à une heure semble étrange, et s'il n'y a pas grand-chose à revoir ... eh bien je ne vois pas comment une heure par jour serait réalisable?
Kieren Johnstone
Ce n'est pas une limite. Je fixe le temps en fonction du temps qu'il a fallu, et non l'inverse. Je peux généralement obtenir 2 avis en une heure. Si cela prend plus de temps, vos enregistrements sont trop importants, vous ne recevez pas suffisamment de révision de conception au préalable ou vos outils de révision de code sont trop lourds. Les révisions de code sont un chèque, pas une refonte.
Karl Bielefeldt
2

Nous avons effectué des évaluations à 100% du code. C'est beaucoup moins cher que les tests, en particulier les tests de couverture de code à 100%. Nous n'y consacrons pas trop de temps, les révisions pendant plus d'une heure par jour deviennent moins productives. (30 minutes n'est pas beaucoup).

Pendant que vous mettez à zéro dans le processus, prenez des notes. Qu'as-tu trouvé? Qu'a trouvé QA plus tard? Qu'ont trouvé vos clients? Pourquoi ces insectes vous ont-ils échappé?

MSalters
la source
7
Comment revoit-il moins cher que les tests automatisés? En supposant que vous écriviez un test une fois, que vous examiniez un test une fois et que vous disposiez d'une suite de tests stable, vous devriez passer beaucoup moins de temps et d'argent à exécuter des tests qu'il n'en faut pour effectuer tout type de révision (pendant la durée de vie du projet). En outre, viser une couverture de code à 100% est un gaspillage de ressources, ce qui pourrait expliquer le temps / coût plus élevé des tests. Je remets également en question les 30 minutes dans les révisions - nous pourrions examiner un module pendant 30 minutes, mais il y a le temps de préparation de lire le code initialement, de comprendre son rôle dans le système et de le commenter.
Thomas Owens
Les affirmations de @MSalters ne sont pas inconnues, même si je suis sceptique, cela ne prend que 30 minutes. Je n'ai lu qu'un seul endroit où il était vrai que l'inspection était plus rentable que les tests unitaires automatisés et c'était la NASA. Dans ce cas, ils ont finalement abandonné les tests unitaires, car il était moins coûteux d'inspecter manuellement le code. Bien sûr, la NASA avait toujours un ratio testeur / développeur de 12: 1, donc ils faisaient aussi beaucoup d'autres tests ...
Michael
2
@Thomas Owens: les tests unitaires trouvent de simples bugs. Les bogues coûteux sont ceux où plusieurs unités se combinent de manière inattendue. Un autre type de bogues est les cas d'angle manqués. Un développeur qui a raté un cas ne l'écrira pas non plus, mais un deuxième groupe d'yeux le repèrera.
MSalters
@MSalters C'est pourquoi vous écrivez des tests automatisés d'intégration et de système ainsi que des tests unitaires. En réalité, les seuls tests qui pourraient devoir être effectués manuellement sont les tests d'acceptation. Et en examinant les tests lors de la création, cela aiderait à garantir que les cas les plus critiques sont testés.
Thomas Owens
2

Ayez des révisions régulières du code, principalement pour le renforcement d'équipe et le partage d'idées sur la mise en œuvre. Vous pouvez ainsi apprendre beaucoup de vos collègues.

codeur
la source
Cela n'indique que quelques avantages. Pensez-vous qu'il est important de trouver des erreurs? Si oui, combien?
JeffO
Bien sûr, la recherche d'erreurs est importante, mais l'avantage le plus important est la connaissance à long terme acquise grâce aux revues de code. Peut-être qu'un bogue a été créé par une mauvaise approche qui pourrait être évitée à l'avenir
codeur
2

Nous exigeons un examen du code des pairs pour chaque enregistrement. Si aucun pair n'est disponible, nous organisons un examen post-enregistrement. Le réviseur est noté dans le commentaire d'enregistrement du contrôle de source.

Celles-ci ne prennent pas beaucoup de temps, et puisqu'elles sont effectuées entre pairs, elles n'ont aucun aspect toxique adulte-enfant.

Jim au Texas
la source
2

La révision du code est, OMI, nécessaire. Vous êtes 99,999 ...% du temps ne va pas toujours avoir raison, vous devez donc vous assurer que c'est correct. Ai-je une heure fixe? Non. Mais je prends le temps de vérifier mon code. Habituellement, j'ai un collègue qui fait de même.

Dynamique
la source
1

Les révisions de code peuvent sembler intimidantes, mais elles sont un outil précieux lorsqu'elles sont menées correctement. Ils seront votre première ligne de défense contre les erreurs de conception et de mise en œuvre. Si vous n'effectuez pas de révision de code sur chaque fonctionnalité que vous mettez en place, vous devez démarrer dès que possible.

En ce qui concerne le temps à consacrer à l'examen par les pairs, une bonne pratique consiste à laisser 5 à 10% de votre temps de développement total estimé pour mener et répondre à l'examen du code.

Nous avons un livre blanc sur la conduite de revues de code efficaces qui peuvent vous aider à démarrer du bon pied. Il s'agit d'un guide étape par étape et discute des pièges courants que vous pourriez rencontrer et comment les résoudre. Vous pouvez le télécharger depuis notre site Web.

Katie B.
la source