Parceque rare sont les équipes ou l'ensemble des développeurs applique le principe de ne jamais répéter du code (DRY!), il peut être utile d'avoir un petit outil sous la main pour détecter les éventuelles duplications au sein d'une solution.
En effet, tout code dupliqué pose des problèmes de maintenabilité accrus. Dans la majorité des cas on modifiera le code en question à un endroit, mais on oubliera systématiquement la copie qui se trouve ici ou là...
Simian est un outil qui permet d'avoir rapidement un apperçu de l'étendu des dégats en un temps record (20 secondes pour 200 000 lignes de code). Il s'intégre directement dans visual studio en tant qu'"Outil externe" et sa configuration se fait en à peine 2 minutes.
Autrement dit, il suffit de suivre les instructions suivantes :
Dans Visual Studio, aller dans "Outils" => "Outils externe..."
Cliquer sur "Ajouter"
Utiliser les paramètres suivants (sans les guillemets) :Titre : "Simian - Solution" (modifier par ce que vous arrange)
Commande : Chemin ou vous Simian est installé
Arguments : "-formatter=vs -excludes=**/*.Designer.cs **/*.cs"
Répertoire initial : "$(SolutionDir)"
Répéter la même opération 2 fois avec les paramètres suivants :Titre : "Simian - Projet courant"
Arguments : "-formatter=vs -includes=**/*.cs -excludes=**/*.Designer.cs $(ProjectDir)"
Répertoire initial : "$(ProjectDir)"
Resharper est pour moi l'outil le plus important en dehors de Visual Studio pour développer en .Net. C'est simple, je suis incapable de travailler sans, et la plupart des personnes que je connais qui l'utilisent sont dans le même cas. Je vous parle d'une productivité augmenté de plusieurs dizaines de pour cent pour les taches de développements! Et d'une qualité accrue pour la simple raison que l'on se permets de refactoriser le code en permanence comme l'opération devient indolore et peu couteuse. Pourtant, pour avoir rencontré un certain nombre d'éditeurs de logiciels récemment, je peux vous assurer que le taux de pénétration de cet add-in magique reste faible, trop faible.
Certes, parler de resharper ici revient à précher aux convaincus. Si vous lisez ce blog, il y a de fortes chances pour que vous soyez déjà utilisateur... Si ce n'est pas le cas, je vous invite non seulement à lire la suite mais surtout à essayer et faire essayer cet outil !
Resharper, ça sert à quoi ?
Resharper est un outil qui permet d'améliorer significativement la productivité des développeurs. Ses fonctionnalités couvrent les points suivants :
Refactoring
Analyse de code
Génération de code
Formatage de code
Navigation
Exécution des tests unitaires
Concrètement, Resharper vous permet de passer moins de temps sur l'accessoire et plus sur l'essentiel. Vous ne me croyez pas? voici quelques exemples de fonctionnalités (non exhaustif !):
Refactoring :
Créer une interface à partir d'une classe
Créer une méthode à partir du code sélectionné
Introduire un membre, une variable ou un paramètre à partir d'une expression
Changer la signature d'une méthode (par exemple, modifier l'ordre des paramètres)
Réécrire des expressions pour utiliser l'opérateur ??
Analyse de code :
Détecter toutes les erreurs de compilation dans la solution (sans compiler)
Détecter le code non utilisé dans la solution
Détecter les exceptions potentielles de type NullReferenceException
Suggestions sur les paramètres des fonctions. Par exemple utiliser un ICollection en paramètre plutôt qu'un IList si on n'utilise que des membres de ICollection dans le code de la fonction
Génération de code :
Générer les propriétés pour les membres sélectionnés (totalement configurable pour utiliser des propriétés automatiques ou non, des propriétés en lecture seule, etc.)
Générer un constructeur à partir des membres sélectionnés
Implémenter une interface en générant la structure des méthodes
Générer un membre (par exemple, après avoir tapé _foo = new Foo(); je peux générer _foo automatiquement avec un raccourci)
Générer une méthode (par exemple, après avoir tapé foo.Bar(); je peux générer la méthode Bar dans la classe Foo avec un raccourci)
Suggestion des using à ajouter au fur et à mesure que l'on écrit le code
Templates pour le code et les fichiers
Formatage de code :
Retirer les using inutile
Trier les membres d'une classe par visibilité (private, protected, internal, public)
Organiser la classe avec des régions de façon automatique
Navigation :
Trouver toutes les utilisations d'un symbole (Visual Studio le fait déjà mais très lentement par rapport à Resharper)
Surligner l'utilisation d'un symbole
Accès rapide aux fichiers, types et symboles en tapant leur nom ou initiales
Aller à la classe dont la classe courante hérite, à la classe fille.
Exécution des tests unitaires :
Exécuter le test spécifié
Exécuter tous les tests
Le plus simple pour se faire une idée concrète est encore de visionner les nombreux webcasts réalisés ici et la :
Toutes ces fonctionalités ont évidemment un prix, soit 315€ pour la version complète (c# + vb.net) ou 225€ pour la version C# seulement. Je peux vous assurer que c'est rentabilisé en 1 semaine !
P.S : Non, je n'ai pas d'actions chez Jetbrains, le créateur de Resharper :-)