Share via


Tutoriel : Team System for Database Professionals

Par Christian Robert – Winwise

 

Cet article est également disponible sur ici sur le site www.sqlfr.com

Sur cette page
Introduction Introduction
Création du Projet de base de données Création du Projet de base de données
Création de la base de données exemple Création de la base de données exemple
Génération des données Génération des données
Tests unitaires Tests unitaires
Refactoring et Modifications Refactoring et Modifications
Contrôle de sources / Team Suite Contrôle de sources / Team Suite
Conclusion Conclusion

Introduction

10 mois après la sortie de la gamme Visual Studio 2005, une nouvelle édition vient de faire son apparition sous le label « Team System Edition for Database Professionals ». Comme son nom l'indique, celle-ci vient compléter la gamme Visual Studio Team System, déjà composée des éditions « Architect », « Developper », « Test » et « Suite » (contenant toutes les autres).

  • Code analysis : vérifie que les règles et conventions de nommage et d'écriture de code sont bien respectées
  • Testing policy : vérifie que les tests unitaires ont été exécutés avec succès
  • Work Items policy : vérifie qu'un ou plusieurs éléments de travails sont associés au code à archiver

De plus, Team Foundation Server offre un modèle de développement extensible afin de pouvoir compléter cette liste avec des règles supplémentaires...

La librairie « Microsoft.TeamFoundation.VersionControl.Client.dll », présente dans le répertoire « C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies\ » contient justement le modèle objet nécessaire à cette implémentation.

Haut de pageHaut de page

Création du Projet de base de données

Première étape la création d'un Projet. On remarque la présence d'un nouveau type de projet dans Visual Studio, les « Database Projects », sous lequel nous avons le sous-type « Microsoft SQL Server ». Dans celui-ci nous avons la possibilité de créer un projet simple qui nous permettra de gérer les objets d'une base SQL Server 2000 ou 2005, vous avez aussi la possibilité de ne gérer que vos scripts (par exemple les scripts de création de procédures stockées) pour profiter du contrôleur de source. Les projets SQL - CLR pour SQL Server 2005 sont aussi présents.

Choix du type de base de données, le choix est possible entre SQL Server 2000 et 2005.Team System for Database Professionals permet de créer tous les objets que SQL Server 2005 peut créer, y compris les index et les triggers sur des vues.

Des scripts de Pré et Post déploiement sont également disponibles, vous permettant de paramétrer votre serveur avant la génération des différents objets.

Haut de pageHaut de page

Création de la base de données exemple

Pour tester Team System for Database Professionals nous allons prendre un exemple très simple, avec 4 tables, 1 vue et 3 procédures stockées.

Les scripts utilisés sont ici.

A noter l'absence de générateur graphique pour les objets, alors qu'il existe sur SQL Server Management Studio lui-même basé sur Visual Studio 2005. Absent aussi la gestion par IntelliSense et la possibilité de faire du glisser déposer des noms d'objets et/ou de champs.

Une fois les scripts T-SQL ajouté à votre projet, éventuellement passé en Check-In pour les publier sur votre serveur de source, il n'y a plus qu'à faire un Build pour générer le script complet. Pour déployer votre base il vous suffit simplement de le copier et l'exécuter via sqlcmd.exe sur votre serveur de production.

2 répertoires sont créés dans votre projet :

  • NewDB : Script de déploiement complet de votre base de données
  • UpdateDB : Script de mise à jour de la base de données

Pour effectuer le déploiement depuis Visual Studio 2005, vous devez utiliser le bouton « Deploy » afin de vous connecter directement à la base de données qui vous intéresse et d'exécuter les scripts de déploiement à condition bien sur d'y avoir accès ainsi que les droits suffisant. Pour configurer la configuration vous devez au préalable allez dans les propriétés du projet et modifier le nom de votre serveur et celui de la base de données.

Haut de pageHaut de page

Génération des données

Chose généralement très gourmande en temps et malheureusement souvent oublié, c'est la génération de données de tests. Ces données pouvant valider la montée en charge de notre base de données pour de très gros volumes, et servant aussi comme nous le verrons plus tard à passer nos tests unitaires.

Vous pouvez créer un ou plusieurs plan de génération de données, qui peuvent être utilisé pour tester votre base en direct depuis votre application, une application tierce ou uniquement pour valider un ou plusieurs test unitaires. Attention à ne pas générer un volume de données trop important lors de l'exécution de tests unitaire.

Ajoutons dans notre projet un Data Generation Plan.

Le Data Generation Plan reprend la liste des tables de notre projet, en face de chaque table est indiqué le nombre d'enregistrements que nous souhaitons y insérer, par défaut 50 que l?on peut modifier à souhait. Dans Related Table, l'on trouve une liste référençant les tables liées à la table courante par une clef étrangère, ce qui permet de spécifier le ratio d'enregistrement de cette table par rapport à celle qui lui est liée.

Au niveau de chaque table, il est possible pour chaque champ de pouvoir choisir le type de générateur de données, dans la colonne « Generator », une liste prédéfinie de générateur pour ce type champ apparaît et vous permet de choir entre un générateur aléatoire ou via le DataBound de piocher les valeurs possibles dans des tables annexes. Les générateurs sont extensibles via .Net vous laissant la possibilité de développer les vôtres.

Au niveau des propriétés de chaque champ, on retrouve les principaux paramètres de ces générateurs, tel que l'unicité des valeurs générées, le pourcentage de valeurs nulles, les plages de valeurs accepté (la longueur pour les chaînes de caractères, la valeur minimales et maximales pour les autres types), ainsi que les relations entre tables et les éventuelles contraintes à respecter.

Pour les champs texte : les expressions régulières peuvent aussi être utilisées pour générer le contenu.

Une fois le plan de génération configuré en cliquant en haut à gauche sur la flèche d'exécution, Visual Studio vous demande la connexion sur laquelle générer le jeu de test. Il est possible de vider les tables de destination avant l'insertion des données de test, en l'indiquant dans la boite de dialogue qui suit.

La génération s'effectue de manière assez rapide, dépendant bien entendu de la capacité de votre serveur. Les données générées sont conformes à nos souhaits, même si l'on peut noter que les chaînes de caractères exploitent tous les caractères possibles de la page de code spécifiée (Ici français). La présence de valeurs en doubles (faibles) est aussi à noter dans les chaines de caractères.

Pour créer son propre générateur vous devrez référencer dans un nouveau projet de classe l'assembly Microsoft.VisualStudio.TeamSystem.Data.dll

Puis le générateur se défini comme suit :

using Microsoft.VisualStudio.TeamSystem.Data.DataGenerator;
[Generator()]
public class
CustomGenerator:Generator
{
     // Code du générateur
}  

Puis implémentez la méthode GenerateNextValues.

Haut de pageHaut de page

Tests unitaires

Les tests unitaires déjà présents dans Visual Studio Team Suite ont été étendus pour pouvoir accepter le nouveau venu et vous permettre de générer des tests unitaires sur votre base de données. Ceux-ci s'appellent « Database Unit Test ».

Lors de la création de notre test unitaire on nous propose de choisir le projet de base de données précédemment créé, ainsi qu'un plan de génération de données. Il est en effet possible de constituer plusieurs jeux de données pour chaque jeu de tests en plus de ceux qu'on l'on utilisera pour charger notre base de données en vues de tests applicatifs.

Ces jeux de données permettraient par exemple de charger des données propres pour valider le fonctionnement correct de nos procédures stockées, ainsi que des données « sales » (contre exemple des données que vous auriez en réalité) pour tester le comportement de vos requêtes, procédures stockées et fonctions.

Les tests unitaires vous permettent de générer des scripts de tests, les scripts peuvent être précédés d’un script de préparation et éventuellement suivi d'un script de nettoyage. La notion de batch (code SQL terminé par un GO sur SQL Server) est supportée ainsi que le renvoie de jeux de résultats multiples.

Les critères que vous pouvez tester, sont ceux-ci :

  • Temps d'exécution de la requête
  • Nombres d'enregistrements renvoyés
  • Présence d'enregistrements ou non
  • Test d'une valeur de retour

Ce qui suffit à la majorité des scénarios de test de votre base de données, cependant les tests sont extensible, il vous est permis de développer les votre via .Net.

L’exécution des tests unitaire va au préalable générer vos données, puis exécuter les différents scripts et les tests unitaires associé. Attention à nouveau de ne pas générer des volumes de données trop important au risque de laisser votre test tomber en timeout au niveau de la génération des données de test.

A noter que les tests unitaires et les données de tests (Generation Plan) qui leurs sont associés sont générés dans une base de données de travail (généralement placé sur SQL Express) portant le nom de votre projet avec un Guid généré à sa suite, celle là même directement créée sur un serveur SQL Express installé sur votre poste ou sur un SQL Server 2005 installé pour l’occasion. Les tests unitaires dès lors n'interfèrent pas avec le reste de votre environnement, de plus celles-ci sont supprimées à la fin des tests.

Haut de pageHaut de page

Refactoring et Modifications

Le refactoring est la fonctionnalité indispensable de l'outil. Les vues, les procédures stockées et les fonctions ont toutes en communs de ne pas empêcher la suppression ou les modifications des tables auxquels elles accèdent (sauf à les lier au schéma via SCHEMABINDING pour certaines). Cela peut générer des soucis si l'administrateur des bases de données ne prend pas la précaution de valider les dépendances avant une telle modification du schéma. De plus, même des précautions sont prises les changements à effectuer sont conséquent, le gain de temps procuré par cette fonctionnalité est donc non négligeable.

Il suffit pour renommer un objet de faire un clic droit dessus, prenons notre tables Ventes et renommons le par Vente et laissons l'option « Preview changes » cochée, cliquez ensuite sur OK.

La fenêtre suivante montre l'impact du changement de nom sur l'ensemble du schéma ainsi que les modifications qui vont être apportées aux scripts de génération des différents objets. Si vous êtes d'accord avec ces modifications, faites « Apply » pour les générer.

Attention à ne pas renommer les objets directement dans leur scripts de génération auquel cas le refactoring ne fera pas office et risque de vous laisser des problèmes d'incohérence.

Haut de pageHaut de page

Contrôle de sources / Team Suite

Le principal avantage de cette édition de Visual Studio 2005 est, comme ses frères de la gamme Team Edition, de permettre d'intégrer tout les documents de travail directement dans Team Foundation Server. Les projets de base de données peuvent ainsi être archivés sur le serveur, au même titre que du code source classique.

Fonctions diverses
A noter divers outils utiles fournis avec la suite, des possibilités telles que la comparaison d'objet ou de schéma et la possibilité de générer un script de différence directement exécutable sur la base de données. La comparaison peut se faire entre un projet et une base de données existante, sur 2 projets et même sur 2 bases de données.

La comparaison de données est aussi prévue au programme, permettant de mettre à jour les données de l'une ou l'autre source.

Possibilité aussi de récupérer les objets présents dans une base de données existante pour générer le projet de base de donnée associé.

Toutes les fonctionnalités de Visual Studio sont bien entendu encore là :

  • Développement d'objets SQL avec .net
  • Débogage de scripts SQL / procédures stockées depuis Visual Studio
  • Formatage des scripts SQL
  • Snippets SQL, etc.

A noter que la fonctionnalité de reverse engineering ne fonctionne pas, dommage il aurait été intéressant de pouvoir remonter le schéma de base de données dans Visio, voir de pouvoir générer les tables du projet depuis celui-ci.

Haut de pageHaut de page

Conclusion

Les différentes fonctions du produit répondent toutes à des besoins très fréquents dans le monde de la base de données. Les fonctions de ce produit sont très complètes, cela va de la génération de script de mise à jour de base de données à la gestion des codes sources de celle-ci.

Cela permet de mieux intégrer le développement de la base de données au sein du développement global de l'application et dans Visual Studio.

Il est à regretter le manque de fonctionnalités graphiques dans l'interface, tel que les concepteurs présent dans SQL Server Management studio, les possibilités de glisser-déposé quasi-absentes, ce qui oblige à la conception d’une partie de la base de données dans un autre outil, puis à la copie des scripts générés. Et toujours pas d'IntelliSense pour le SQL.

Il ne faut pas oublier que cette article ce base sur une version bêta du produit. Les fonctionnalités offertes par celui-ci semble prometteuse, et nous laisse présumer un bon outil pour les concepteurs de base de données.

Haut de pageHaut de page