Je travaille sur un énorme projet (plutôt une combinaison enchevêtrée de dizaines de mini-projets qui ne peuvent pas être séparés facilement en raison d'une gestion médiocre des dépendances, mais c'est une discussion différente) en Java avec Eclipse. Nous avons déjà désactivé un certain nombre d'avertissements dans les paramètres du compilateur et le projet compte toujours plus de 10 000 avertissements.
Je suis un grand partisan d’essayer de répondre à tous les avertissements, de les corriger si possible, et de les supprimer pour ceux qui sont examinés et jugés sûrs. (Il en va de même pour mon obsession religieuse de marquer toutes les méthodes implémentées / annulées comme @Override). Mon plus gros argument est que généralement les avertissements vous aident à trouver des bugs potentiels pendant la compilation. Peut-être que 99 fois sur 100, les avertissements sont insignifiants, mais je pense que la tête qui gratte, cela enregistre pour la première fois qu’il évite un bug majeur, en vaut la peine. (Mon autre raison est mon OCD apparent avec la pureté du code).
Cependant, beaucoup de mes coéquipiers ne semblent pas s'en soucier. Je corrige parfois des avertissements lorsque je tombe sur eux (mais vous savez que c'est délicat lorsque vous touchez du code écrit par un collègue). Maintenant, avec littéralement plus d'avertissements que de classes, les avantages des avertissements sont très minimisés, car lorsque les avertissements sont si courants, personne ne se soucie de les examiner tous.
Comment puis-je convaincre mes coéquipiers (ou les pouvoirs en place) que les avertissements doivent être adressés (ou supprimés lorsqu'ils font l'objet d'une enquête approfondie)? Ou devrais-je me convaincre que je suis fou?
Merci
(PS j'ai oublié de mentionner ce qui m'a finalement poussé à poster cette question est que j'ai malheureusement remarqué que je corrige les avertissements plus lentement qu'ils ne sont produits)
javac
.-Wall -Wextra -Werror
(c'est-à-dire, activer la plupart des avertissements disponibles, les traiter tous comme des erreurs). Eclipse C ++ est presque inutilisable cependant: /Réponses:
Vous pouvez faire deux choses.
Faites remarquer que les avertissements sont là pour une raison. Les auteurs de compilateur ne les mettent pas parce qu'ils sont mesquins. Les gens de notre industrie sont généralement utiles. De nombreux avertissements sont utiles.
Rassemblez une histoire d'échecs spectaculaires résultant d'alertes ignorées. Une recherche sur le Web pour "Faites attention aux avertissements du compilateur" renvoie des anecdotes.
Votre obsession avec
@Override
n'est pas une "obsession". C'est une bonne chose. Jamais mal orthographié un nom de méthode?la source
if (error = 0)
au lieu deif (error == 0)
. En outre, de nombreux avertissements facilitent également la recherche d’ erreurs de compilation sans avoir à parcourir beaucoup d’alertes.Lecture pertinente ici . C ++, mais toujours d'actualité. J'aime particulièrement cet exemple (le commentaire de code est le mien):
Très souvent, un avertissement fera la différence entre le plantage de l'application avec une erreur, ce qui vous aidera réellement à repérer un défaut de conception et à le réparer (comme une transtypage en mode sûr ), ou à faire des hypothèses sur l'application, puis de vous comporter de manière incorrecte. ou de manière erronée (ce qui serait le cas avec une conversion de type non sécurisée ). De la même manière, ils indiquent également le code cru ou mort qui peut être supprimé (blocs de code inaccessibles, variables inutilisées), ce qui peut être considéré comme une optimisation du code ou des cas non comptabilisés qui apparaîtront dans les tests, comme l'exemple ci-dessus pour C ++. Notez que cet exemple entraîne une erreur de compilation en Java.
La résolution des avertissements présente donc (au moins) plusieurs avantages pour la gestion:
Notez que je ne suis encore qu'un jeune développeur qui connaît peu de choses sur la gestion de projet, donc si j'ai dit quelque chose de mal, corrigez mes pensées et donnez-moi une chance de faire des modifications avant que vous ne perdiez ma vie :)
la source
J'ai déjà travaillé sur un projet présentant des caractéristiques similaires. Celui-ci en particulier a été écrit à l'origine en Java 1.4. Une fois que Java 5 avec les génériques est sorti, on peut imaginer le nombre d’avertissements émis par le compilateur pour chaque utilisation de l’API Collections.
Il aurait fallu un certain temps pour se débarrasser de tous les avertissements, en commençant à utiliser des médicaments génériques. C’est un facteur qui doit être pris en compte, mais lorsque vous devez convaincre quelqu'un (en particulier votre responsable) qu'il doit être corrigé, vous aurez besoin de données fiables, telles que
Vous pouvez continuer à présenter un projet de loi qui montre comment vous perdez du temps et de l'argent en ignorant "certains" avertissements. Quelqu'un en comprendra l'idée. L’essentiel est que tous les avertissements ne valent pas la peine d’être examinés, du moins pas tout de suite; en termes plus simples, vous devrez établir la priorité des avertissements à traiter immédiatement. Pour commencer, considérez ceux qui sont pertinents pour les bogues que vous voyez dans votre projet.
Lorsque vous corrigez des bogues, vous pouvez également noter dans le suivi des bogues que celui-ci aurait pu être évité en ignorant un avertissement (ou peut-être en exécutant PMD ou FindBugs si vous avez un système de configuration ou un système de compilation). Tant qu'il y a un nombre suffisant de bogues qui peuvent être corrigés en tenant compte des avertissements du compilateur, votre remarque sur la consultation des avertissements du compilateur sera valide. Autrement, il s’agit d’une décision commerciale et, habituellement, il ne vaut pas la peine de consacrer du temps à cette bataille.
la source
Si vous réussissez et que votre équipe décide de respecter les avertissements, vous devez adopter une approche progressive. Personne ne peut et ne voudra 10000 avertissements en une fois. Vous pouvez donc sélectionner les plus importants (ceux qui présentent un risque élevé) et désactiver les moins importants. S'ils sont fixes, augmentez à nouveau le niveau d'avertissement. En outre, vous pouvez commencer par FindBugs, qui signale que le code est presque toujours un bogue.
la source
Je suis tout à fait d'accord avec vous, il est préférable de nettoyer les avertissements de compilation autant que possible. Vous avez mentionné que votre équipe utilise Eclipse comme outil de développement. Eclipse est un très bon outil pour vous aider à nettoyer le code et à en rendre le style cohérent.
Eclipse créera des fichiers de propriétés correspondant à ces préférences dans le dossier .settings. Vous pourrez les copier dans d'autres projets Java et les archiver dans SCM dans le code source.
Vous pouvez consulter le code d'Eclipse pour voir comment les développeurs Eclipse le font.
la source
Vous avez deux moyens de vous débarrasser de tous les avertissements (et je conviens que cela peut cacher un bogue subtil):
Je crois que 1 n'est plus faisable dans votre cas. En outre, cela prendra probablement si longtemps en raison du nombre d'avertissements que cela affichera dans la productivité, de sorte que la direction devra de toute façon savoir ce qu'elle en est.
Donc, ma suggestion est la suivante: prenez contact avec le patron, convainquez-le de la bombe à retardement et faites-le officialiser.
la source
Je voudrais juste leur dire que la plupart de ces avertissements sont des avertissements insignifiants et qu'il est essentiel que nous les retirions de la liste. Pour que nous ne manquions pas le véritable avertissement significatif dans la foule, comme cela se produit!
la source
Vous aurez besoin de beaucoup de patience pour essayer de les convaincre, supprimer les avertissements lors de la programmation en binôme aidera les autres à prendre l'habitude. Suggérez-leur de lire Effective Java 'Élément 24: Éliminer les avertissements non vérifiés' (pour la collecte générique). Et ignorez probablement de nombreux cas où les gens ne suivent pas vos conseils;)
la source
Une approche efficace consiste à installer un serveur d’ intégration continue qui construit automatiquement le projet et exécute les tests chaque fois que des personnes archivent du code. Si vous ne l'utilisez pas déjà, vous devriez le faire et il n'est pas très difficile de convaincre les autres des avantages de le faire.
Convaincre les chefs d’équipe / dirigeants des avantages de cette opération (éviter le déploiement de mauvaises versions, la détection précoce des bogues, en particulier ceux affectant accidentellement d’autres parties du logiciel, la maintenance des tests de régression, des tests rapides et fréquents, etc.).
Installez le serveur CI avec tous les tests réussis (si vous n'avez pas de test, écrivez-en un rapide qui passe, pour que tout le monde voie qu'il est vert).
Configurez des e-mails ou d’autres notifications sur l’état de chaque construction. Il est important ici d'inclure qui a enregistré dans le code, ce que la modification était (ou un lien vers la validation), et le statut + la sortie de la construction. Il s'agit d'une étape importante, car elle confère une visibilité à la fois aux succès et aux échecs pour l'ensemble de l'équipe.
Mettez à jour le serveur CI pour que les tests échouent s'il y a des avertissements. La direction et les chefs d’équipe y verront une augmentation systématique de la discipline de l’équipe, et personne ne veut être responsable de tous les courriels d’échec envoyés.
(optionnel) soyez sympa et geek avec ceci, en ajoutant des tableaux de bord visibles, des lampes à lave, des lumières clignotantes, etc. pour indiquer le statut de la construction et qui l'a cassé / réparé.
la source