9
votes

Complémentaire Visual Studio pour valider la chaîne.Format Méthode

string.format est une méthode très risquée. Il y a beaucoup de choses qui pourraient aller mal, sans aucune erreur de compilation: xxx

Je cherche un moyen de trouver ces problèmes dans le temps de compilation. Si je me souviens bien, Resharper trouve certaines de ces erreurs, mais c'est trop riche pour mon sang.


14 commentaires

Économisez pour Resharper - vaut chaque centime.


Resharper attrape tous des erreurs ci-dessus, pas seulement certains.


Donc, je vais achèterai soit Restomer ou écrivez moi-même cette extension? Aucune option 3ème?


Juste curieux, pourquoi avez-vous besoin d'une telle validation? Je pense que les exemples que vous avez énumérés ne sont pas différents pour les bogues de développeurs ordinaires qui devraient être pris dans une révision par des pairs ou des tests unitaires.


@J Angwenyi: Je fais maintenant un refactoring majeur et remplace l'ancien enregistreur interne avec commun. C'est beaucoup de travail répétitif et je manque probablement quelques-uns. Il n'y a actuellement aucun test d'unité pour ce module. En outre, ce type d'outil pourrait aider au travail quotidien, en particulier dans ces moments faibles, humainement que nous sautons tous les règlements et la bureaucratie - et en vérifiant simplement des choses.


@J Angwenyi - Savoir que vous avez commis une erreur à l'instant que vous le faites sauve une tonne de votre temps et le temps de toutes les personnes impliquées après le fait. De plus, de nombreuses erreurs de ce type que j'ai vues sont dans des blocs de capture, et à moins que vous ne couvrez vraiment votre code avec vos tests de l'unité, vous avez une bombe de temps dans le code.


@Acarcain: Exactement. J'ai rencontré tant de fois dit que "je n'ai ajouté que quelques inserts de bûches. C'est compiler. Qu'est-ce qui pourrait mal tourner?"


Un problème «dangereux» est celui que vous ne pouvez pas facilement détecter facilement. C'est juste jamais le cas avec String.Format ().


@Hans Passant: Il est facile de détecter, mais uniquement sur le temps d'exécution. On pourrait passer beaucoup de temps sur les tests d'intégration à cause de ces petits méshaps. Je ne peux pas comprendre pourquoi ce sujet est contesté. J'ai même eu un bowvote.


Vous pouvez essayer d'écrire vos propres règles de stylécop personnalisées pour attraper des choses comme celle-ci. Vous devriez utiliser Styecop, FXCop ou toute analyse de code de code à ce sujet.


Tests unitaires dans le cadre du déploiement?


J'ai vu ce genre de chose causer des problèmes dans les produits d'expédition plusieurs fois. Le format est souvent utilisé pour générer un journal ou un message d'erreur dans une circonstance exceptionnelle, qui n'a jamais eu lieu pendant les tests.


@CAINE, @Bernard, @antsyawn: La mise à jour de progression est disponible dans ma réponse ci-dessous.


Cela devrait être une simple regex pour couvrir 90% des cas. Y a-t-il une extension qui fait cela en plus de Resharper? J'aimerais une mise à jour pour 2014.


3 Réponses :


2
votes

Resharper fait cela pour vous - même au moment de la modification: -).

Cependant Sachez que des choses comme xxx

ne génèrent pas d'erreur (après tout, décider de masquer une valeur est parfaitement bien).


0 commentaires

0
votes

Restomer vous aidera à l'identifier, mais il est très lourd et doit être utilisé avec précaution si vous travaillez sur l'application existante.


0 commentaires

1
votes

Vérification du format de chaîne pour .NETT2.0

Après quelques recherches, j'ai découvert que FXCop contient déjà une règle pour la vérification du format de chaîne ( Règles d'utilisation \ Fournissez des arguments corrects aux méthodes de formatage ). Il identifie même l'exemple de la réponse @sklivvz. Malheureusement:

  1. la règle n'existe que dans l'ancienne version 1.35 mais pas en 1.36 (voir: Règles de FXCOP abandonnées en V1.36 ).
  2. L'existant de Expressions Lambda dans le code ne produisent aucune erreur de règle ni message d'exception. Cela arrête simplement le chèque sans informer . Je suppose que c'est parce que v1.35 utilise .NET Runtime 2.0.
  3. la règle ne couvre que des appels pour console.write , console.writeline , string.format stringbuilder.appendFormat . j'ai réussi à le modifier (à l'aide de réflecteur) pour couvrir également commun.logging.ilog.debuggat , mais je suis à peu près sûr que cela contredit avec Mme Clea ( " Vous ne pouvez pas renverser l'ingénieur, décompiler ou désassembler ... ").

    Donc, vous pouvez utiliser en toute sécurité FXCop pour tester la mise en forme de chaîne dans vos applications .net2.0.


    Mais qu'en est-il des versions de Newer .net?

    Pour vous tous travailler avec des versions plus à jour, J'ai écrit une règle de stylécop que vérifiez les littéraux de chaîne pour Modèles d'erreur de format commun . C'est loin d'être parfait et donne de nombreux faux positifs mais couvre toujours tous les gallots.

    Je voudrais vérifier le nouveau SDK FXCOP pour une solution plus complète.

    Je posterai mes conclusions ici.


1 commentaires

Merci beaucoup, vous m'avez sauvé une tonne de temps pour essayer FXCop pour que cela fonctionne pour travailler! Je pense que votre lien vers "Discontinued Règles FXCOP en V1.36" est cassé cependant. Je serais intéressé par votre règle de stylécop et des conclusions supplémentaires