54 votes

Quelle est l'utilité de PHP CodeSniffer? Code d'Application des Normes en Général?

Je suis tenté sa chance avec l'idée de la configuration de PHP CodeSniffer sur notre serveur d'intégration continue dans un effort pour améliorer la qualité de notre base de code. Après la lecture de la documentation, je suis très excité à l'idée de normaliser et l'application de nos normes de codage. Cependant, je suis de gauche s'interrogent sur la réelle amélioration de notre produit. Je suis bien conscient que le renifleur ne détecte que les violations à la définition de codage standard, mais ce type de prestations n'propre, cohérent, à base de code fournir? Est-il utile le travail supplémentaire à refactoriser un projet avec+ de 100k lignes de code pour se conformer à la POIRE standard?

Pour ceux qui ne sont pas familiers avec PHP CodeSniffer ou code-odeur en général, voici un exemple de sortie:

FICHIER: /path/to/code/myfile.php
5 ERREUR(S) AFFECTANT LES 2 LIGNE(S)
--
2 | | / ERREUR de fichier Manquant doc commentaire
20 | ERREUR | PHP mots-clés doivent être en minuscules; attendu "faux", mais trouve "FALSE"
47 | ERREUR | Ligne pas indenté correctement; attendu 4 espaces), mais à 1
51 | ERREUR | de fonction Manquant doc commentaire
88 | ERREUR | Ligne pas indenté correctement; attendu 9 places mais a trouvé 6

Strictement parlant, l'utilisateur/le client n'auraient pas remarqué aucune différence en un produit qui a été reconstruit pour être conforme aux normes, mais je me demandais si il y a d'autres avantages cachés

Droit maintenant, notre code est pas bâclée et nous nous efforçons de suivre nos propres normes qui, pour la plupart, sont issus de Poire de Normes de Codage , mais un œil exercé peut repérer les différences.

Donc ma question est de savoir comment peuvent-elles améliorer la qualité d'un produit. Quel genre d'avantages cachés en a résulté?

Suis-je tout simplement être le trouble obsessionnel-compulsif avec mon désir d'aller de notre produit plus proche d'un ensemble de normes? Serait-il la peine? Si oui, Quelle stratégie avez-vous utilisé pour mettre en œuvre le code sniffer et corriger les violations suivantes qui ont été détectés?

104voto

Greg Sherwood Points 641

Tout d'abord, je suis le responsable de PHP_CodeSniffer, donc je suis clairement biaisé dans ce domaine. Mais j'ai aussi travaillé sur des grandes bases de code dans mes 10 années en tant que dev PHP, donc j'espère que je peux apporter certaines des raisons pourquoi les normes de codage sont une bonne chose. Je pourrais écrire une série de blog sur ce sujet, mais je vais juste vous donner un peu d'histoire sur la façon dont PHP_CodeSniffer est venu à propos, de sorte que vous pouvez comprendre le problème que l'outil résolu pour moi.

J'ai travaillé sur quelques grands projets de la CMS. Le premier avait un tas de code derrière elle et une relativement petite équipe de développement. Nous n'avions pas de normes. Mais nous n'avions pas de réels problèmes. L'équipe était de petite taille et sont restés ensemble pendant un certain temps. Nous nous sommes habitués les uns aux autres.

Ensuite, nous avons construit un nouveau CMS. Nous avons commencé frais avec juste un couple de devs. J'étais alors partie d'une équipe de deux développeurs. Encore une fois, les normes de codage de ne pas nous causer des problèmes. Moi et les autres dev est venu de la même arrière-plan et a déjà établi des lignes directrices que nous avons suivi. Nous n'avons pas besoin de PHPCS.

Mais que l'équipe s'est un développeur à temps et a finalement atteint 12 à temps plein devs et tout à fait quelques-uns sont venus et repartis. Certains sont venus de l'ancien CMS et certains venaient de l'extérieur de l'entreprise. Tous avaient des origines différentes et une approche différente du développement. Il était évident qui a écrit ce code, parce que les styles si différents. Chaque fois que vous avez travaillé sur quelque chose de complexe, vous pensez d'abord à s'adapter à leur style parce que c'était juste pas la façon dont vous aviez l'habitude de voir le code. C'est comme la lecture de Shakespeare pour la première fois. Vous avez besoin de s'habituer à ce que vous puissiez les lire à votre rythme naturel.

Pour les développeurs, que le temps supplémentaire d'avoir à arrêter et trouver un autre style de codage est juste pur gaspillage de temps. C'est une chance pour une idée de glisser loin alors que vous êtes embourbé avec l'espacement, l'indentation et l'emplacement de support. À la fin de la journée, ces choses n'ont d'importance. Mais laissez-moi vous dire, elles sont très importantes si elles sont à l'origine de développeurs à sortir de leur flux. Nous avons donc besoin d'un moyen de leur faire obtenir le droit de sortir de la voie et permettre aux développeurs de faire ce qu'ils font de mieux.

Dans le même temps, nous avons été fouiller dans JavaScript beaucoup plus. Un nouveau langage où le style est généralement jeté par la fenêtre. Le Code a été copié/collé à partir de l'exemple des sites et à la purée d'ensemble. Lors de l'apprentissage de développer un code complexe dans une nouvelle langue, il est logique de trouver un moyen de rendre notre JS ressembler à notre PHP. Nous pouvons minimiser elle plus tard, mais nous avons besoin pour être en mesure de basculer entre les langues rapidement, encore une fois à garder nos flux.

Donc PHP_CodeSniffer est né à le faire. Il permet aux développeurs de travailler pour le même style de codage pour faire le formatage et d'autres de la flamme appât pour les questions de déplacer complètement hors de la voie. Il vous permet de traiter vos JS comme votre PHP dans une certaine mesure. - Je l'utiliser pour détecter des produits spécifiques sent comme non-traduit de chaînes ou de développeurs de ne pas utiliser notre propre classe d'inclusion de code. Je l'utilise aussi pour la langue spécifique sent comme vous assurer que JS virgule qui tue IE n'est pas de gauche autour de. Vous pouvez l'utiliser pour tout ce que vous voulez. Il est livré avec des tas de renifle qui sont faciles à fusionner à l'aide de l' XML, base de règles de fichier. Vous pouvez également écrire votre propre. Vous pouvez intégrer la 3e partie des outils pour en faire un one-stop-shop pour l'analyse statique de code. Vous pouvez être sérieux au sujet des normes et des odeurs de code que vous le souhaitez.

PHP_CodeSniffer, comme n'importe quel outil de dev, qui devrait fonctionner pour vous. Vous n'avez pas de travail pour elle. Si elle produit trop d'erreurs que vous ne se soucient pas de, personnaliser la norme pour supprimer ceux que vous ne voulez pas, ou tourner les erreurs dans les avertissements. Mais si mon histoire ressemble à quelque chose que vous allez à travers ou peut passer dans l'avenir, il vaut la peine de prendre un coup d'oeil étroit à PHP_CodeSniffer pour voir si ça peut vous aider.

J'espère que vous aide, et les autres, à comprendre pourquoi les normes de codage sont vraiment importantes à certains projets et de développeurs. Il n'est pas sur le détail. C'est sur la suppression de style de codage à partir de la liste de choses que les développeurs de perdre le focus.

32voto

molf Points 34978

Ayant style de codage des conventions est une bonne idée, car il permet aux développeurs de ne pas se laisser distraire par le code écrit dans un style différent lorsque l'on travaille sur le code n'a pas l'écrire. Il fera de votre base de code superficiellement cleaner. Il est grand si vous pouvez l'automatiser, mais il n'est habituellement pas besoin de passer par de grands efforts pour se conformer (à moins que le style actuel est terrible). Si vous avez déjà un bon-assez standard, s'en tenir à elle.

Code odeur est quelque chose de différent: c'est (un ensemble de symptômes qui peuvent indiquer un problème plus profond avec le code. Des exemples sont la complexité cyclomatique, de longs noms de méthode, de grandes classes, undescriptive noms de code dupliqué, etc. Cela est généralement beaucoup plus problématique, car il peut complètement mal à la maintenabilité du code. Vous devriez certainement résoudre ces problèmes.

PHP CodeSniffer semble être principalement développé pour le contrôle des conventions de style, pas d'odeur de code. Si vous pouvez l'utiliser pour aider à faire respecter les conventions de style, grande. Mais attention, il ne fera pas votre code de base sensiblement mieux. Vous voulez faire de manuel des examens d'accomplir cela.

Si vous voulez l'utiliser pour vérifier si vous vous conformez à votre actuel standard, qui semble être possible, voir la réponse à la question "je ne suis pas d'accord avec vos normes de codage! Puis-je faire PHP_CodeSniffer faire respecter mes propres?" dans leur FAQ.

11voto

Jeff Dickey Points 488

Comptez-moi parmi ceux qui évangéliser CodeSniffer. Après avoir été très sceptique pendant des années, j'ai maintenant l'utiliser sur tous les projets que je suis en train de travailler sur. Pourquoi?

Comme Grace Hopper et/ou Andrew Tanenbaum l'a dit,

La chose merveilleuse au sujet des normes est que vous avez donc beaucoup à choisir de.

De même, il est presque toujours une Mauvaise Idée™ pour créer votre propre norme de codage; la création d'un assez complète pour couvrir tous vos code est dur, et, plus important encore, il ne sera pas du goût de la personne à côté pour maintenir votre code, qui va essayer de les "améliorer" votre standard, de sorte qu'il convient à sa longue-tenue style de codage. L'adoption d'une appropriée en dehors de la norme, si c'est Zend ou de POIRE ou de Kohana ou JoeBobBriggsAndHisFifthCousin, vous permet de vous concentrer sur le contenu plutôt que la mise en forme. Mieux encore, des outils comme PHP CodeSniffer le support de la norme ", fraîchement sorti de la boîte" ou ceux qui les ont précédés ont presque certainement mis en œuvre un soutien comme un add-on.

Mélanger les normes de codage avec du code existant pas écrit à la norme donnera vous correspond, sauf si vous adoptez deux simples, des règles complémentaires.

Exclure les fichiers qui sont antérieurs à votre l'adoption de la norme de codage de en cours de vérification, par le biais de la --ignorede la ligne de commande option ou l'équivalent configuration des paramètres de fichier. Mais, quand vous ne modifier aucune partie d'un fichier source, mise à jour de l'ensemble du dossier à se conformer à votre norme choisie.

J'ai juste écrit un nouveau billet de blog à propos de ce genre de chose.

6voto

porneL Points 42805

Il y a beaucoup de cas qui nécessitent un jugement humain, et CodeSniffer n'en a pas.

Cohérence entre parenthèses, l'indentation d'améliorer le code. Le manque d'espace après les virgules dans l'appel de fonction? Sans doute peut être pardonné, mais que l' ERREUR selon CodeSniffer.

À mon humble avis il y a beaucoup trop d'erreurs signalées par CS. Même les projets qui semblent avoir soigné code peut facilement atteindre des milliers de CS questions. Il devient vite fatiguant et presque impossible à résoudre toutes ces questions, en particulier lorsqu'il s'agit d'un mélange de vrais problèmes et de obsesive-compulsif non-sens - à la fois tout aussi souvent marqués comme des ERREURS.

Vous pouvez être mieux ignorer CS et passer du temps sur des améliorations réelles de la code (en termes de conception, algorithmes), plutôt que de simplement complètement superficiel espaces et commentaires des changements (1 ligne, isAlpha fonction vraiment besoin de 8 lignes de commentaires? Oui, si vous demandez à CS).

Le CS peut devenir trop facilement étron-outil à polir.

3voto

DavidWinterbottom Points 2632

C'est certainement une bonne chose. Nous courons le nôtre à partir d'un SVN crochet de sorte que l'ensemble du code a à passer la chambre standard (une modification de la POIRE) avant d'être engagé (ce fut une des meilleures décisions que j'ai jamais fait).

Bien sûr, ce qui fonctionne le mieux pour un nouveau projet, où il n'y a pas de charges de code hérité de convertir à la nouvelle norme. Un moyen de contourner cela est de modifier votre SVN pre-commit hook uniquement l'exécution de nouveaux ajouts à la codesniffer et pour ignorer les modifications. Vous pouvez le faire en ajoutant la ligne:

$SVNLOOK changed "$REPOS" -t "$TXN" | grep "^A.*\.php " > /dev/null || exit 0

Cela va quitter le script hook s'il n'y a pas un nouveau code PHP pour parser. Par conséquent, tous les nouveaux fichiers doivent obéir à la norme et vous pouvez mettre le code hérité à la norme dans votre propre temps.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X