Archives par étiquette : VS 11

image

RIP Client Profile –Tips #4

C’est avec surprise que je viens de constater que le framework .net 4.5 ne propose plus de profil “Client Profile” :

image

La confirmation officielle se trouve dans la MSDN avec une explication bateau qui tire plus du marketing que de la véritable explication technique : http://msdn.microsoft.com/en-us/library/cc656912(v=vs.110).aspx

Ce profil permettait de disposer d’un profil de framework très légèrement plus léger destiné au développements d’applicatifs clients (exit donc ASP.net, la couche serveur WCF, etc.).

Un des principaux avantages étant que cette version du framework .net était préinstallé sur les OS les plus récents, ou inclus dans des mises à jour via Windows Update.

Il ne reste plus qu’à espérer que le framework 4.5 soit installé d’office sur les prochains OS de Microsoft à commencer par Windows 8.

image

La détection de doublons de code – Tips #3 Bis

Je vous présentais hier la fonctionnalité de détection des doublons de code proposée par Visual Studio 11, je vous propose aujourd’hui un rapide retour d’expérience sur l’utilisation de cette fonctionnalité sur un vrai projet avec un bon volume de code (620 000 lignes).

image

L’analyse du code a pris 3h30. Le temps d’analyse pour un aussi gros volume de code est certes important mais ne me choque pas plus que cela. Je suis plutôt surpris par le fait que la machine ne soit pas “à genoux” durant l’analyse mais ne soit occupé qu’à  20% au niveau du CPU sachant qu’il ne semble pas y avoir d’autres goulots d’étranglements (mémoire, disque).

Les résultats sont classés en 4 catégories : exact match, strong match, medium match, weak match.

L’analyseur indique que 25% du code semble être du doublon (et peut donc être quasi-supprimé suite à du refactoring) soit dans mon cas plus de 150 000 lignes de code. Je sais que le code est très loin d’être optimisé et qu’il y a beaucoup de redondance de code mais ce résultat est pour le moins plutôt étrange…

J’ai vite été conforté dans mon impression en analysant la qualité des résultats. J’ai commencé l’étude par l’analyse des weak match.

Je n’ai pas réussi à trouver un résultat à peu près pertinent dans les weak match.

Un des exemples typiques concerne ce type de code :

image

Le moteur d’analyse prend en compte uniquement le texte et non pas le vocabulaire en lui-même et trouve donc des clones qui ne sont pas du tout pertinents.

Autre exemple avec l’initialisation “en masse” d’objets, l’affichage de ce type de résultat n’est pas forcément pertinent :

image

image

 

Les bonnes nouvelles se retrouvent plutôt au niveau des correspondances exact ou très voisines :

image

J’ai été ainsi surpris de découvrir qu’un même bloc de code a été repris 58 fois ( ! ) au sein de l’applicatif.

Une séance de refactoring va donc pouvoir être planifié afin d’éliminer cette redondance ainsi que les suivantes.

En résumé, cette nouvelle fonctionnalité est plus proche de l’analyseur de texte que de l’analyseur de code car le vocabulaire n’est pas pris en compte de manière pertinente. Et il ne faut pas se fier au grand nombre de résultats potentiels affiché mais faire un filtre et une analyse de ceux-ci afin de décider des actions à mener pour améliorer la qualité du code.

image

La détection de Copier Coller–Tips #3

Afin de lutter contre les copier coller intempestif et plus généralement d’aider à trouver des blocs de code identiques ou très proches, Visual Studio 11 propose une fonctionnalité de détection de clone de code.

Si l’on prend un exemple simple :

image

Un clic sur le menu Analyze, Analyze Solution for Code Clones permet de lancer une analyse sur le code source de l’intégralité de la solution et d’afficher un nouveau panneau :

image

Il est ensuite possible de naviguer dans les blocs de code détectés afin de refactorer et donc d’améliorer la qualité du code.

A noter que l’outil ne permet pas d’uniquement trouver les blocs de code strictement identique mais permet de faire des analyses légèrement plus poussées. Le nommage des variables n’est par exemple pas pris en compte, si la structure du code est voisine avec des noms de variables différents, la fonctionnalité sera capable de trouver des résultats pertinents.

Point qui peut être intéressant, l’analyse se fait bien sur le code source et non sur l’IL, il n’est donc pas nécessaire que le code compile pour lancer la détection (oui, je sais; c’est tordu mais c’est toujours bon à savoir Sourire).

Inconvénient, l’analyse se faisant sur la structure du code source, l’outil n’est pas capable de détecter du code identique  fonctionnellement mais pas syntaxiquement.

Par exemple le code suivant ne renvoie aucun résultat :

image

A noter que la fonctionnalité ne se concentre que sur des blocs d’une 10 de lignes de code uniquement, les blocs plus petits ne sont pas détectés.

De plus; il est possible de lancer une analyser afin de rechercher des clones d’un bloc de code en particulier. Il suffit pour cela de le sélectionner et de sélectionner le bon élément dans le menu contextuel pour y parvenir.

Et sur du vrai code ? J’ai lancé l’analyse sur l’application sur laquelle je travaille (plusieurs centaines de milliers de lignes de code) et j’attends le résultat depuis 2 heures !

Grosse déception, le moteur d’analyse ne semble à priori pas multithreadé. Sur mon quad-coeur, le process de VS 11 tourne en moyenne à 20%, la consommation mémoire reste à peu près stable, et les accès disque sont faibles. Le CPU semble donc être le goulot d”étranglement…

image

Après 2 heures d’analyse, cela progresse lentement… mais surement… Je mettrais à jour ce post si cela se termine un jour ! Sourire

image

3 bonnes raisons d’utiliser différents frameworks de tests – Tips #1 Bis

Suite au relai de mon post sur le très bon test runner proposé par Visual Studio 11 et son support de différents frameworks de tests par Richard Clark, celui-ci se posait la question de l’intérêt de supporter différents frameworks de tests au sein (par exemple) d’une même solution.

image

Je vous propose donc aujourd’hui 3 bonnes raisons d’utiliser différents frameworks de tests :

  • La possibilité de réutiliser, sans migrer, des tests existants tout en switchant (pour tout ou partie) les nouveaux tests sur un nouveau framework. Vous appréciez l’intégration de MS Test mais ne supportez pas le non respect du pattern AAA pour les tests liés à la gestion d’exception ? Continuez d’utiliser MS Test, et utilisez un autre framework comme xUnit qui vous permettra d’avoir des tests de meilleure qualité.
  • Le support de frameworks de tests ciblants différents langages. Exemple : Je développe un site web ASP.net et je souhaite créer et exécuter des tests unitaires et d’intégration pour mon code VB ou C# mais également pour du code javascript. Je peux donc utiliser à présent MS Test, xUnit, nUnit ou autres pour le code managé, mais également Chutzpah pour les tests du code JS.
  • Le support de frameworks de tests proposant différents types de tests. On utilise en effet généralement un seul et même framework pour développer tests unitaires et tests d”intégration, mais il existe d’autres types de framework permettant d’écrire des tests se rapprochant au plus près de la définition des spécifications (comme MSpec), ou proposant une syntaxe naturelle pour les assertions. Il est donc possible de les utiliser de manière complémentaire avec les frameworks plus “traditionnels” avec Shoudly par exemple.
image

L’exécution automatique de tests avec VS 11 – Tips #2

Après la présentation hier de l’ouverture de VS 11 à tous les frameworks de tests qui permet d”éviter d’avoir différents tests runner et surtout de développer des tests basés sur plusieurs frameworks de tests, je vous propose aujourd’hui une astuce toute bête mais bien pratique : l’exécution automatique de tests.

image

Il est à présent possible d’exécuter les tests présents dans votre solution de manière automatique juste après une simple compilation.

Un petit Ctrl+Shift+B et une fois la compilation réussie l’exécution de tests se lance :

image

A noter qu’une sélection des tests à exécuter est réalisée par Visual Studio. Contrairement à mon screenshot qui présente un cas simple, Visual Studio 11 décide quels tests sont à exécuter en priorité. Ceux qui ne sont pas exécutés se retrouvent avec une icône légèrement grisée afin d’indiquer qu’ils n’ont pas été ré-exécutés.

image

Le support des framework de test dans VS 11

La beta de Visual Studio 11 est disponible depuis hier, je vais donc à présent essayer de vous présenter quelques nouveautés présentes dans cette beta.

Une des nouveautés les plus intéressantes concerne le support de différents frameworks de test directement dans Visual Studio 11.

Il était bien évidemment possible de développer des tests unitaires et d’intégration en utilisant d’autres framework que MS Test, mais l’utilisation de ces frameworks nécessitaient jusqu’à présent l’utilisation de tests runners dédiés ou génériques plus ou moins bien intégrés avec Visual Studio. Une des références dans le domaine est le test runner de ReSharper qui permet d’exécuter des tests MS Test mais aussi des tests nUnit.

Visual Studio 11 propose à présent d’intégrer simplement n’importe quel framework de tests via une API qui permet de développer des adapters.

En autres mots, le test runner de Visual Studio 11 est à présent totalement découplé de MS Test.

Prenons comme premier exemple, une classe bateau :

image

Si vous avez installé xUnit, vous pouvez à présent installer le runner de xUnit compatible avec Visual Studio 11. Ce test runner n’est pas un test runner indépendant, il s’agit en réalité d’un simple adapter qui permet de se plugger au test runner de Visual Studio 11 :

image

Il est évidemment possible de créer un test en suivant les principes de ce framework :

image

Et lorsque l’on exécute le test, on retrouve ensuite le résultat de ce test directement l’explorateur de tests de VS 11.

image

Ce qui rend encore plus intéressant avec cette ouverture vers d’autres frameworks de tests, est qu’il est tout à fait possible de créer des tests en utilisant d’autres frameworks de test tout en restant dans le même projet !

Ainsi l’ajout d’un test basé sur MS Test :

image

permet d’avoir directement le résultat de ce test intégré avec les autres tests :

image

Fini donc les frustrations d’utiliser tel ou tel framework de test, ou les potentielles difficultés de switcher vers tel ou tel framework de test, il est possible d’utiliser simultanément ceux qui vous conviennent le mieux !

Et bien évidemment, l’outil de couverture de code de Visual Studio 11 prend en compte l’intégralité des tests :

image

Vous pouvez consulter la liste des adapters déjà disponibles sur ce lien, à savoir que d’autres adapters pour d’autres framework devraient arriver très prochainement.