vendredi 29 août 2008

ROSARIO : Module Développeurs

La nouvelle version Team Developer de Rosario apporte elle aussi sa part de nouveautés qui vont permettre au développeur un contrôle plus efficace concernant la qualité du code écrit au travers de nouveaux outils dont :

  • Le Standalone Debugger
  • Le History Debugger
  • La gestion des tests unitaires impactés.
  • La gestion de l'analyse statique de code par groupe de règles paramétrables.
Le Standalone Debugger : Zero Impact Debugging
Ce nouvel outil a pour vocation de permettre à un développeur d'effectuer des opérations de débogage sur une machine cible (pré-production, intégration ou test) sans avoir à installer Visual Studio. Cet outil est simplement généré à partir de la station de développeur sous forme d'un ensemble de fichiers et est simplement déployable suivant une procédure XCopy.

L'outil pourra donc être utilisé soit :
  • à partir d'une clé usb.
  • à partir d'un share réseau.
  • en copiant les fichiers sur la machine cible.
La taille de l'outil généré est de moins de 50 Mo!
Ci dessous les étapes pour générer un Standalone Debugger puis le mettre en oeuvre :

A partir de visual Studio lancer la commande Debug / Create Standalone Debugger

L'assistant suivant démarre, spécifier l'emplacement disque pour la création de l'outil (dossier, clé usb ou encore partage réseau :

Cliquer sur Suivant, le processus de génération est lancé :

Cliquer sur Finish pour finaliser le processus

Si l'on ouvre le dossier cible, on constate la création des binaires de l'outil sous forme de différents exécutables, assemblies et fichiers :

Pour démarrer le Standalone Debugger, il suffit de double cliquer sur le fichier Vsdebug.exe. L'interface graphique se présente comme illustré ci dessous et affiche une page d'accueil permettant de démarrer rapidement sans consulter de fichiers d'aide :

Les taches tels que démarrer un programme, s'attacher à un process, ouvrir un fichier ou une solution sont disponibles directement à partir de la page d'accueil.
Pour démontrer la puissance de cet outil nous allons effectuer une petite démonstration édifiante :
Créons une petite application Winform avec comme unique fonction un bouton affichant une message box.
Déployons cette application sur une station cliente (attention, le fichier pdb doit être présent sur la machine cible). Ci dessous le contenu du dossier de cette application :

Le développeur doit déboguer l'application sur cette station et va donc générer une instance de l'outil sur sa clé usb ainsi qu'une copie des fichiers C# à déboguer, dans notre exemple, il s'agit du fichier form1.cs par exemple.

Etape 1 : Démarrage de l'application sur la machine cible

Etape 2 : Démarrer le Standalone Debugger à partir de la clé USB en cliquant sur VSDebug.exe

Etape 3 : A partir de la page d'accueil du Debugger cliquer sur le lien Attach : Process




Etape 4 : Selectionner le processus de l'application à déboguer puis valider

Etape 5 : A partir de la clé usb ouvrir le fichier form1.cs et placer un point d'arrêt sur l'évènement on_click du bouton



Etape 6 : Le clic sur le bouton "demo" de l'application active le point d'arrêt (mode Debug) comme si le développeur utilisait Visual Studio directement sur son poste de développement.

Il est évident que cette nouvelle fonctionnalité va grandement aider à la résolution des bugs et notamment réduire le fameux syndrome de non reproductibilité des bugs. Le développeur a à sa disposition un outil lui permettant de diagnostiquer de manière efficace les anomalies d'une application directement sur les plates formes cibles réduisant ainsi considérablement les temps d'investigation pour la résolution de bugs

L'History Debugger : Trouver et fixer rapidement un bug (Nom de code Proteus)
L'history Debugger est une nouvelle experience F5 pour le développeur , ce nouvel outil intégré à Visual Studio for Developer Edition enregistre l'ensemble des artefacts produits durant l'exécution d'une application en mode debug et permet de retracer ou rejouer l'execution :
En cas de Bug, il est très simple et rapide de trouver la cause simplement en consultant les information recueillies par l'outil présentées sous la forme d'une structure arborescente.
L'outil augmente la productivité du développeur en réduisant le temps d'investigation sur la cause d'une erreur dans le code ou sa reproduction.
Regardons le fonctionnement de l'outil à travers une démonstration :
Pour cette démonstration nous allons utiliser l'application Patient Monitoring, application de démonstration écrite en WPF fournie avec la VPC Rosario (CTP d'Avril.).
Pour ce scénario de Debug, on démarre l'application à partir de la solution dans Visual Studio en pressant la touche F5

L'application Patient Monitoring s'affiche

Sur activation de l'onglet Details, la photo du patient apparait ainsi que des informations détaillées

Le développeur choisit alors le patient "Aaberg" et constate que pour ce patient, la photo n'apparait pas :


Le développeur va alors lancer à partir du menu Debug / Windows la commande Debug History pour accèder à l'historique des actions effectuées durant la session de debug :

La fenêtre apparait comme illustré ci dessous :

Le développeur clique sur le lien "Break into the Debugger", affichant ainsi l'historique de l'ensemble des évènements survenus lors de la phase de debug sour forme d'une arborescence :

On remarquera l'iconographie placé devant les noeuds de la treeview, et notamment les symboles d'erreurs en rouge, indiquant les erreurs levées lors de l'exécution. Dans notre cas, on remarque que le chargement de l'image du patient a déclenché une erreur qui a été gérée, raison pour laquelle l'application n'a pas planté.
Le développeur va donc pouvoir rapidement corriger l'anomalie en consultant simplement les informations fournies en regard de l'icone Erreur : le message est "cannot locate ressource ..."

Le nouvel outil History Debugger permet également au développeur de naviguer dans le scénario de debug simplement en cliquant sur les noeuds de l'arborescence avec la possibilité par un simple double clic d'afficher le code concerné par l'action enregistrée.
Il est incontestable que cet outil sera d'une aide précieuse au développeur pour l'activité de Bug fixing.
L'outil fonctionne comme un recorder durant les phases de Debug, le niveau d'informations est d'ailleurs paramétrable comme le montre la capture d'écran ci dessous :


Paramétrage de l'outil History Debugger

La gestion des tests unitaires impactés

Il est aujourd'hui largement établi que la qualité d'un développement passe par l'activité de test et que le métier de développeur est bien évidemment d'écrire du code mais surtout de vérifier que le code écrit fonctionne.
A ce titre Le message de Microsoft au travers l'implémentation du module Team Tester est clair : "Du code qui n'a pas été testé ne doit pas être livré!".
Dans les versions précédentes de Visual Studio (2005 et 2008), sur la partie tests unitaires, l'outil permet de générer l'ossature des tests unitaires pour l'ensemble des fonctions écrites dans un projet en quelques clics de souris. Néanmoins, sur des projets de taille importante le développeur se trouve très rapidement en face de centaines de tests unitaires à gérer et dans l'incapacité de savoir pour une modification de code donnée quel test unitaire est impacté. Compte tenu des temps d'exécution des test unitaires, le fait de rejouer l'intégralité est couteux en temps.
C'est exactement à cette problématique que répond la nouvelle version de l'outil : Afficher les tests unitaires impactés par une modificaiton de code.
Regardons dans la pratique à travers un exemple comment cette nouvelle fonctionnalité est implémentée dans l'outil.
Pour gérer les test unitaires impactés, le développeur doit tout d'abord afficher la nouvelle version de la fenêtre "Test View" en lançant la commande Test / Other Windows / Test View.

La fenêtre apparait à priori identique à celle de la version 2008


Le développeur active la fonction Group By en choisissant la nouvelle option "Test Impact Status"

La fenêtre affiche l'ensemble des tests dans la rubrique "Not Impacted"

Le développeur effectue alors des modifications dans le code de son application, (dans notre exemple, 2 lignes de code) puis sauvegarde ses modifications.

Aussitot l'outil detecte les tests unitaires qui ont été impactés par les modifications de code et affichent les tests unitaires impactés dans la rubrique "recommended", ce qui indique au développeur qu'il est recommandé de rejouer ces tests afin de vérifier l'impact des modifications afin d'éviter de potentielles régressions.

Le développeur procède à l'éxécution des tests impactés en utilisatnt le menu contextuel à partir de la fenêtre "Test View".

Lorsque les tests sont rejoués, ils apparaissent dans la rubrique "Verified"

La fenètre sera remise à jour au fur et à mesure des modifications apportées. Le développeur a donc en permanence une vision de l'impact de ses modifications sur la stabilité de l'application au travers des tests unitaires.

La gestion de l'analyse statique de code par groupe de règles paramétrables

Suivant l'adage bien connu "Trop d'information tue l'information", voici une nouvelle fonctionnalité qui va améliorer le contrôle et le focus du développeur sur la mise en conformité de son code par rapport aux règles appliquées par l'outil d'analyse statique de code fourni avec Visual Studio FXCop (206 règles réparties dans 11 groupes : Design, Globalisation, intéropérabilité, maintenabilité, mobilité, Nommage, Performance, Portabilité, Stabilité, Sécurité et Usage). Dans les versions précédentes, le nombre d'erreurs et de warnings générés par cet outil décourageait rapidement les développeurs pourtant plein de bonne intention au départ. Grace à la nouvelle version de l'outil, il est maintenant possible de simplement Créer des groupes de règles en fonction de critères pertinents par rapport à un contexte projet puis choisir les groupes de règles à appliquer. Cela agit comme un filtre qui va permettre de cibler le travail du développeur. Au travers d'un scenario, nous allons voir comment tirer profit de cette nouvelle fonctionnalité. Lançons tout d'abord une analyse de code statique sur un des projets de notre solution en utilisant la commande "Run Code Analysis" du menu contextuel :

Le résultat de l'analyse laisse apparaitre 18 warnings :

Nous allons modifier le paramétrage en utilisant les groupes de règles paramétrables. Pour cela, il suffit d'ouvrir la fenêtre de propriétés du projet et activer l'onglet "Code Analysis" comme indiqué ci dessous :

On remarque que la configuration en cours est "All Rules" et entraine l'applicaiton des 206 règles.Hors en supposant que la livraison d'une release est proche, nous allons sélectionner l'option "Release Criteria CheckList" dans la liste Rule Set. Instantanément, le nombre de règles tombe à 48, ce qui va fortement limiter le nombre de warnings à traiter par le développeur.

Le développeur relance une analyse sur le projet, le nombre de warning est tombé de 18 à 5

Le développeur ou le responsable projet pourra également créer des règles customs et les exporter sous forme de fichiers XML afin de les distribuer à l'équipe de développement.
Dans ce dernier exemple, on personnalise une règle Custom pour n'adresser que les violations concernant les performances.


En relançant l'analyse, le développeur a isolé les warnings concernant les règles de performances.

Encore une innovation qui va contribuer à la qualité des développements, à disposition des développeurs pour une travail avec plus de productivité.

Aucun commentaire: