Je travaille avec une équipe qui est passée de 2 développeurs à 10 en moins d'un an. J'étais numéro 3 et le premier à soulever un problème de normes de codage. Les deux développeurs originaux travaillaient côte à côte depuis quelques années et ils avaient adopté une norme commune qui me semblait étrangère. Nous avons eu exactement les mêmes problèmes que vous décrivez.
Ce que nous avons fait était:
Normes de codage de recherche
Nous avons passé quelques jours à vérifier les projets open source établis. Nous savions que l'équipe se développerait rapidement et nous recherchions de vraies solutions basées sur de vrais projets et non sur des directives génériques. Nous ne nous soucions pas non plus des normes de codage optimales, mais d'un ensemble de règles et de directives qui auraient du sens et ne nécessiteraient pas la refactorisation de l'ensemble de notre base de code. Nous recherchions un hack de normes de codage si vous voulez.
Nous avons décidé tous les trois que les meilleures normes de codage pour un projet PHP établi étaient celles suivies par Zend Framework. Heureusement, les gens de Zend Framework fournissent un document de normes de codage très complet .
Création de nos propres normes de codage
Bien sûr, appliquer les normes de codage d'un autre projet sur notre projet tel quel n'était pas logique. Nous utilisons le document Zend Framework comme modèle:
- Nous avons d'abord supprimé tout ce qui ne s'appliquait pas à notre projet
- Ensuite, nous avons changé tout ce que nous percevions comme une question de style pour notre style
- Et finalement nous avons tout écrit
Nous avions donc un document assez volumineux à portée de main, stocké dans notre wiki de fantaisie , c'était une bonne lecture, convenue par nous tous. Et complètement inutile en soi.
Rester fidèle à notre promesse
Notre base de code à l'époque était d'environ 1 * 10 ^ 6 sloc. Nous savions que depuis que nous avons adopté des normes de codage formelles, nous avons dû commencer à refactoriser notre code, mais à l'époque, nous étions confrontés à d'autres problèmes. Nous avons donc décidé de refactoriser simplement nos bibliothèques de base, un simple sloc 5 * 10 ^ 3.
Nous avons confié à l'un d'entre nous le rôle de maître des normes de codage (nous avons utilisé des jurons locaux à la place du maître ) avec la responsabilité de vérifier et d'appliquer les normes. Nous recyclons le rôle tous les quelques sprints. J'étais le premier, et c'était beaucoup de travail, car je devais surveiller presque chaque commit.
Nous avons eu plusieurs nouvelles discussions et petits addenda au document original pendant mon mandat, et finalement nous avons eu un document quelque peu stable. Nous le changeons de temps en temps, mais la plupart de ces changements concernent les nouvelles fonctionnalités du langage, car PHP 5.3 était une version majeure à part nom.
Traiter avec le nouveau mec
Lorsque le prochain nouveau venu est arrivé, il était temps de mettre nos normes de codage à l'épreuve. Après une petite introduction à notre base de code, nous lui avons demandé d'évaluer notre document sur les normes de codage. Il a presque pleuré. Il est apparu qu'il avait tout fait différemment.
Comme j'étais le maître des normes de codage à l'époque, c'était à moi d'évaluer sa contribution et de réviser le document en conséquence. Ses propositions étaient les suivantes:
- Questions de style personnel (rejetées sommairement)
- Des normes qui avaient du sens pour son expérience Java mais pas tellement avec PHP (rejeté)
- Conventions qu'il portait de sa brève exposition avec PHP (certaines ont été rejetées, mais beaucoup se sont avérées être des conventions populaires auxquelles nous n'avons jamais pensé ou découvert dans nos recherches initiales)
Au cours des deux semaines suivantes, on lui a confié une tâche simple: mettre à jour plusieurs parties de notre base de code avec les normes. J'ai dû choisir soigneusement ces pièces en fonction de quelques règles:
- Le code devrait être relativement facile pour quelqu'un qui ne connaît pas notre base de code (et PHP en général)
- Le code devrait être sur ce qu'il a été embauché pour faire
J'ai surveillé son processus et il a fait du bon travail. Nous avons identifié plusieurs parties de code qui étaient impossibles à adapter à notre document et révisées en conséquence (code et / ou normes, selon ce qui était le plus logique)
Et puis un autre nouveau type est arrivé. Nous avons répété le processus (maître différent cette fois), et cela a de nouveau fonctionné. Et encore.
En conclusion
- Créez un document de normes de codage, mais assurez-vous que vos normes ne sont pas exclusivement les vôtres, mais qu'elles reflètent des normes communes dans la communauté plus large de votre plate-forme.
- Attribuez un rôle similaire à notre maître des normes de codage. Quelqu'un pour surveiller au moins le nouveau code, et surtout le nouveau code des nouveaux membres. Recyclez le rôle, car il est extrêmement ennuyeux.
- Évaluez toujours les commentaires d'un nouveau membre. Révisez toujours vos normes si cela a du sens. Votre document sur les normes de codage devrait évoluer, mais lentement. Vous ne voulez pas refaçonner votre base de code à chaque itération.
- Prévoyez un certain temps pour que chaque nouveau membre apprenne et s'adapte à vos normes et conventions. Apprendre en faisant des travaux dans ces situations
- Le wiki fait des merveilles pour de tels documents.
- Les révisions de code font des merveilles dans toutes les situations!
À un moment donné du processus, il a été suggéré d'utiliser un hook de pré-validation pour automatiser la vérification des normes. Nous l'avons décidé pour diverses raisons, il y a des discussions intéressantes sur StackOverflow sur la question:
Certains sont spécifiques à PHP, mais les réponses s'appliquent à toutes les plateformes.