Le classement des personnes dans une revue va à l'encontre des systèmes les plus performants avec lesquels j'ai travaillé, voire de tous. Mais l'objectif que j'essaie d'atteindre depuis plus de 20 ans est de réduire le nombre de bugs et d'augmenter la productivité par heure d'ingénieur. Si l’évaluation des individus est un objectif, je suppose que les examens pourraient être utilisés. Je n'ai jamais vu une situation où cela était nécessaire, en tant que travailleur ou en tant que chef.
Certaines études objectives (Fagan, etc.) et beaucoup de sagesse populaire suggèrent que les relations entre pairs facilitent la révision du code visant à réduire les bugs et à augmenter la productivité. Les gestionnaires qui travaillent peuvent participer en tant que travailleurs, mais pas en tant que gestionnaires. Les points de discussion sont notés, les modifications visant à satisfaire les examinateurs sont généralement une bonne chose, mais elles ne sont pas obligatoires. D'où la relation entre pairs.
Tous les outils automatisés pouvant être acceptés sans autre analyse ni jugement sont utiles: C, C ++, Java. Compilation régulière. Les compilateurs sont vraiment bons pour trouver des bogues de compilateur. La documentation des écarts dans les contrôles automatisés ressemble à une mise en accusation subtile des contrôles automatisés. Les directives de code (comme Java) qui autorisent les écarts sont assez dangereuses, à mon humble avis. Idéal pour le débogage, pour vous permettre de comprendre rapidement le cœur du problème. Pas si bon à trouver dans un bloc de code mal documenté, 50 000 dont vous êtes devenu responsable.
Certaines règles sont stupides mais faciles à appliquer; les valeurs par défaut pour chaque instruction switch même lorsqu'elles sont inaccessibles, par exemple. Ensuite, c’est juste une case à cocher, et vous n’avez pas à perdre du temps et de l’argent à faire des tests avec des valeurs qui ne correspondent à rien. Si vous avez des règles , vous aurez des bêtises , elles sont inextricablement liées . Tout avantage d’une règle doit valoir la sottise qu’il coûte, et cette relation doit être vérifiée à intervalles réguliers.
D'un autre côté, "ça marche" n'est pas une vertu avant l'examen ou la défense en examen. Si le développement suivait le modèle en cascade , vous souhaiteriez effectuer la révision lorsque le codage est terminé à 85%, avant que des erreurs compliquées ne soient détectées et résolues, car la révision est un moyen moins coûteux de les trouver. Puisque la vraie vie n’est pas le modèle de la cascade, il est en quelque sorte un art de réviser qui constitue une norme sociale. Les personnes qui liront votre code et y chercheront des problèmes sont en or massif. La direction qui soutient cela de manière continue est une perle au-dessus du prix. Les critiques doivent ressembler à des checkins - tôt et souvent .
J'ai trouvé ces choses bénéfiques:
1) Pas de guerres de style . Les accolades ouvertes ne doivent être soumises qu’à un contrôle de cohérence dans un fichier donné. Tous les mêmes. C'est bien alors. Ditto profondeur de pénétration ** s et largeur de l' onglet ** . La plupart des entreprises découvrent qu'elles ont besoin d'un standard commun pour les onglets, qui est utilisé comme un grand espace.
2) `Ragged
looking
texte qui ne
line up is hard to read
pour le contenu.
BTW, K & R ont mis en retrait cinq (CINQ) espaces, de sorte que les appels à l'autorité ne valent rien. Juste être cohérent.
3) Une copie numérotée, non modifiable et accessible au public du dossier à examiner doit être indiquée au moins 72 heures avant l’examen.
4) Pas de design à la volée. En cas de problème, notez son emplacement et continuez.
5) Des tests qui suivent tous les chemins dans l'environnement de développement sont une très, très, très bonne idée. Les tests nécessitant des données externes massives, des ressources matérielles, l'utilisation du site du client, etc., etc.
6) Un format de fichier non ASCII est acceptable si des outils de création, affichage, édition, etc. existent ou ont été créés au début du développement. C’est un de mes préjugés personnels, mais dans un monde où le système d’exploitation dominant ne peut s’échapper avec moins d’un gigaoctet de RAM, je ne comprends pas pourquoi des fichiers inférieurs à, par exemple, 10 mégaoctets devraient faire l’objet de rien. autre que ASCII ou un autre format pris en charge par le commerce. Il existe des normes pour les graphiques, le son, les films, les exécutables et les outils qui vont avec. Il n'y a aucune excuse pour un fichier contenant une représentation binaire d'un certain nombre d'objets.
Pour la maintenance, la refactorisation ou le développement de code publié, un groupe de collègues de travail que j'avais utilisé était examiné par une autre personne, assise devant un écran et regardant un diff, ancien ou nouveau , comme passerelle vers l'enregistrement dans une succursale. Je l’ai aimé, c’était bon marché, rapide, relativement facile à faire. Les visites guidées destinées aux personnes qui n'ont pas lu le code à l'avance peuvent être instructives pour tous, mais améliorent rarement le code du développeur.
Si vous êtes géographiquement distribué, il serait relativement facile de regarder les diffs sur un écran tout en discutant avec quelqu'un d'autre. Cela couvre deux personnes à la recherche de changements. Pour un groupe plus important qui a lu le code en question, plusieurs sites ne sont pas plus difficiles que tous dans la même pièce. Plusieurs salles reliées par des écrans d'ordinateur partagés et des boîtes à squak fonctionnent très bien, à mon humble avis. Plus il y a de sites, plus la gestion des réunions est nécessaire. Un responsable en tant qu'animateur peut gagner sa vie ici. N'oubliez pas de continuer à interroger les sites sur lesquels vous n'êtes pas.
À un moment donné, la même organisation avait automatisé des tests unitaires, qui étaient utilisés comme tests de régression. C'était vraiment sympa. Bien sûr, nous avons ensuite changé de plate-forme et les tests automatisés ont été laissés pour compte. La révision est meilleure, comme le note le Manifeste Agile , les relations sont plus importantes que les processus ou les outils . Mais une fois que vous avez passé en revue, les tests unitaires automatisés / tests de régression sont la prochaine aide la plus importante dans la création d'un bon logiciel.
Si vous pouvez baser les tests sur les exigences , eh bien, comme le dit la dame dans "When Harry Met Sally" , j'aurai ce qu'elle a!
Toutes les revues doivent avoir un parking pour capturer les exigences et les problèmes de conception au niveau supérieur au codage. Une fois que quelque chose est reconnu comme appartenant au parking, la discussion devrait s'arrêter lors de l'examen.
Parfois, je pense que la révision de code devrait ressembler à la révision schématique de la conception matérielle: complètement publique, complète, tutoriel, fin d'un processus, passerelle après laquelle il est construit et testé. Mais les critiques schématiques sont lourdes, car le changement d'objets physiques coûte cher. Les revues d'architecture, d'interface et de documentation de logiciels devraient probablement être lourdes. Le code est plus fluide. La révision du code devrait être plus légère.
À bien des égards, je pense que la technologie est autant une question de culture et d’attente qu’un outil spécifique. Pensez à toutes les improvisations " Swiss Family Robinson " / Flintstones / McGyver qui ravissent le cœur et stimulent l'esprit. Nous voulons que nos affaires fonctionnent . Il n’ya pas de chemin unique à suivre, pas plus qu’il n’existait une "intelligence" qui pouvait être extraite et automatisée de façon ou d’autre par les programmes d’ IA des années 1960 .