BI Agile : Le TDD avec DbFIT et IC avec TFS Damien MARESMA Arnaud VOISIN
WAISSO CRM et Marketing : Base de données : Etude de cadrage Cahier des charges Développement d’add-on Intégration MS Dynamics Intégration Neolane Gestion de la qualité des données Base de données : Audit et expertise Optimisation du code Tuning de serveur Mise en haute-disponibilité Projet technique Projet d’infrastructure Migration Délégation de DBA Décisionnel et Collaboratif : Audit et expertise technique Etude de cadrage Création de datamart client Intégration MS BI (SSIS, SSAS, SSRS…) Intégration SharePoint TMA Waisso est une société de conseil et d’expertise, qui propose 5 domaines d’intervention : Le marketing et le CRM, pour lesquels nous proposons des missions de MOA et d’AMOA, ce conseil et d’accompagnement des métiers, et de mise en œuvre de solutions basées sur Microsoft Dynamics CRM pour les équipes commerciales, et sur Adobe Campaign – Neolane pour la gestion de campagnes marketing Le décisionnel et le collaboratif, offres sur lesquelles nous intervenons en expertise, en conseil et en intégration, sur toutes les phases d’un projet, du cahier des charges à la mise en production, en passant par le développement et l’intégration Les bases de données, et plus particulièrement SQL Server. Nous intervenons en missions longues aussi bien qu’en missions d’audit et d’expertise. Nous accompagnons les développeurs dans les phases de développement et d’optimisation, nous réalisons des missions de migration et de mise en place d’architecture, ainsi qu’en conseil. Waisso est composée d’une équipe de 35 personnes. Les consultants BI et SQL Server sont dans la majorité certifiés MCSA et MCSE sur SQL Server 2012. Depuis 2012, WAISSO est LA société de référence sur SQL Server chez Microsoft, en étant désigné comme V-TSP sur le domaine de compétences Data Platform. Enfin, Waisso a été sélectionnée pour participer aux premières formations « Train The Trainer » sur SQL Server 2014, à Redmond.
Agenda BI Agile DbFIT ALM : IC avec Team Fondation Service TDD IC : Intégration continue ALM : Application Life Management
BI Agile La méthodologie Agile dans le secteur de l’IT Les chiffres sur les projets 48% des projets de développement et de test sont externalisés mais environ ¼ échouent... (08/2013-cabinet Vanson Bourne) Méthodologie Agile de plus en plus répendue A la fois méthode de gestion de projet et d’équipe Et pratique de développement de code de qualité et facile à livrer
BI Agile Ce qu’il y a à tester ? ODS ETL (ODS vers SAS) MàJ, Fusion ETL (SAS vers Cible) L’entrepôt de données Traitements OLAP Rendu, Présentation Ken Collier Agile analytics 1)Operational databases. Generally the operational systems are running in production by the time data warehouse development begins. However, these systems should also undergo test-driven development during their development cycles. For systems already in production I encourage the use of test-driven development for new revisions and bug fixes. 2)Data update code. The ETL scripts that extract data from operational systems into the staging database must be validated. These scripts typically run on a nightly basis and include slowly changing dimension type 1 and type 2 updates. 3)Data preparation code. The code used for data merge/purge, cleansing, preparation, and processing in the staging database. 4)Data transformation code. The ETL scripts used to extract data from the staging database and transform it into the multidimensional database schema of the presentation database (e.g., star schema). 5)Data derivation code. The code or scripts used within the multidimensional presentation database for further data transformations and derivations (e.g., data mining scoring). 6)Data access layer code. Any customized server-side applications that are responsible for providing user access to the data in the warehouse. This includes OLAP cube specification code, deployed analytical models, and others. 7)BI application code. The customized client-side applications that present data to end users and enable end users to query the data warehouse. Administrative application code. There may additionally be a warehouse administrator interface application (not in the diagram) that must be tested as well.
BI Agile Où Quatre environnements ( Développeur, Intégration, Preview-Pre-Production et Production), Quatre typologies de tests
BI Agile Tests Q1 : environnement Développeur vue précédement Q2 : environnement d’Intégration Q3 : Preview – Pre-Production Q4 : Production
TDD TEST DRIVEN DEVELOPMENT Question Twitter !
TDD Le Test Astuce : Given, When, Then Il vérifie une nouvelle fonctionnalité ou qui a été changé. Il est indépendant des autres tests. Il vérifie un seul aspect ou comportement et documente le comportement attendu Il ne doit pas vérifier trop de fonctionnalité Astuce : Given, When, Then C’est un formalisme pour etablir des scenarii de test GIVEN : Pour les paramètres ou dans un contexte donnée WHEN : Quand je projette, fait quelque chose THEN : Voici le résultat que j’attend
TDD Les 3 lois du TDD 1. Vous ne devez pas commencer à écrire de code tant que vous n’avez pas écrit un test unitaire qui échoue 2. Vous devez écrire le test suffisant pour échouer. 3. Vous ne devez pas écrire plus de code que nécessaire pour la réussite du test qui est en cours
TDD Ecrire le test qui échoue Modifier le code Vérifier que tous les tests réussissent Loi 1 : les premiers Test vérifient la connexion au catalogue, la structure de données, la présence du programme Loi 2 : Un seul test, une seule fonctionnalité à la fois Loi 3 : Ecrire seulement le code nécessaire au succès du test en cours et des précédents. Le TDD n’est pas magique, ce n’est pas une religion, il ne vous garanti pas un code zéro défaut, vous ne serai pas à l’abri d’écrire un mauvais test, ou d’un mauvais code. Le but du TDD est d’écrire du code propre, ses bénéfices : Meilleur design du code, seulement le nécessaire Meilleure détection des défauts (plutôt durant la phase de développement) Moins de défaut livré en production Meilleure disciple, et développement orienté sur la qualité
TDD TDD RED Le mantra GREEN REFACTOR Red : Ecrire un test qui échoue Green : Faire que le code marche et passe le test Refactor : Eliminer la redondance de code, simplifier, normaliser
TDD ATDD Acceptance-test-driven development Test-driven development Echouer au test d’approbation Code ATDD Implémenter le(s) test(s) Test Ré-usinage Définir les conditions de satisfaction Nouvelle Itération Acceptance-test-driven development Test Choisir une user story Test-driven development Ré-usinage Code Approbation Client Test Acceptante test-driven development à ne pas confondre Ré-usiner le test Réussir les tests d’approbation Ré-usinage Code
DbFIT DbFit mais au-delà FIT et Fitnesse sont la contribution Open Source des signataires du manifeste agile.
DbFIT FIT : Framework for Integrated Test Développé par Ward Cunningham (fit.c2.com) FIT testing framework,. FIT est environnement de test d’approbation ou acceptance testing framework Developpé par Ward Cunningam, Sa force c’est ça simplicité à formaliser des cas de test Qui est orienté Client et n’a rien à voir avec les tests unitaires de base de données. Mais les test FIT sont décris comme des tableaux, ce qui le rapproche plus du monde relationnel que des langage objet.
DbFIT FitNesse = (FIT + Wiki) fitnesse.org Développé par Robert (Uncle Bob) Martin Un site wiki autonome, facilement distribuable Sans base de données Une hiérarchie de dossiers et de fichiers La communauté est très importante FIT est accompagné d’un sympatique Site Wiki nommé FitNesse, Qui permet aux développeur BI d’écrire des tests sans l’aide de méthode .Net en VB ou Csharp . Qui permet aux personnes extérieures au code de comprendre les test (pas de code XML à lire) Et DbFit utilises la puissance de ces deux outils pour rendre le test des bases des données, et autre, encore plus facile
DbFIT DbFIT Un aménagement ou fixtures de FIT dans FitNesse pour les bases de données Développé par Gojko Adzic, et maintenant supporté par Jake Benilov En version 2 depuis Octobre 2013 FitSharp est l’implémentation en .Net
DbFIT Fixtures Les commandes de bases Query Insert Update Execute Procedure Execute Inspect Store Query Compare Stored Queries Transaction Control Jeux de commande qui s’executent directement sur la base de donnée, sans ingérence
DbFIT Projet « AdventureWorksCredit » Sprint n°5 User Story Simulation de plan d’amortissement Test d’approbation : Appel d’une procédure stockée Résultats conforme au classeur Excel
DbFIT Le Développeur Agile L’architecture de son programme (nombres d’objet) Une procédure stockée avec paramètres Va projeter le résultat pour chaque paramètres Depuis une in-line function de calcul Une in-line function de calcul d’amortissement fixe avec paramètres Reflexe de développement BI : Factoriser les projections au moyen de Fonction Table ou de Vue Pensez grand, commencer petit
Commencer petit
DbFIT Fixture nécessaire Template de test Query Template de test Est-ce que l’objet(programme) existe déjà ? Est-ce que les paramètres sont définis ? Est-ce la projection attendu comporte 8 champs Quel est la description des données projetées Estimation 10 itérations en TDD Template : capitaliser sur l’expérience et les modèles de plan de test déjà utilisé par le passé. Il faut s’appuyer les méta-données, (Table INFORMATION_SCHEMA) pour contrôler la description des objets (Tables, Vue, Fonction), signature(paramètres), etc …
DbFIT Démarrage de FitNesse Téléchargement sur http://benilovj.github.io/dbfit/ Pré requis : SQL Server Data Tools 2012 + BI et JVM RE Lancer le fichier bat ou une ligne de commande à la racine du dossier dbFit. java -jar lib\fitnesse-standalone.jar -p 8085 -e 0 –o FitNesse (v20121220) Started... port: 8085 root page: fitnesse.wiki.FileSystemPage at ./FitNesseRoot logger: none authenticator: fitnesse.authentication.PromiscuousAuthenticator Page factory: fitnesse.responders.PageFactory Page theme: fitnesse_straight page version expiration set to 0 days. À l’itération zéro, l’environnement de développement du développeur est configuré : Intégration plugin du gestionnaire de source Utilitaires de développement, raccourcis clavier Dans Visual Studio on ajoute dans le menu Outil la commande pour lancer le .Bat de dbFit On ajoute également l’url par défaut de fitnesse pour ouvrir automatiquement FitNesse depuis une fenêtre « Navigateur Web » de VS.
DbFIT Se connecter au wiki http://localhost:8085 Depuis VisualStudio pour les développeurs Depuis un Navigateur (IE, Chrome) pour le Scrum Master et/ou Product Owner. Le wiki est un outil de communication, qui facilite les échanges et le suivi de l’avancement des développeurs.
DbFIT
DbFIT JumpStart Création de Page En PascalCase dans la barre d’addresse tapper LesJournéesSqlServer
DbFIT L’editeur
DbFIT La configuration du Dossier Racine !***< default configuration !define COMMAND_PATTERN {%m -r fitnesse.fitserver.FitServer %p} !define TEST_RUNNER {fitsharp\Runner.exe} !define PATH_SEPARATOR {;} !path fitsharp\*.dll *! !img files\images\JSS2013.jpg À ajouter dans la première page, faire correspondre ensuite l’arborescence Wiki avec l’arborescence Solution VisualStudio Projet base de données : Solution(Racine)>Schemas>TypeDObjet>Objet Etc …
DbFIT L’ajout de media http://localhost:8085/files/
DbFIT La page de SetUp (Attention à la casse) |import | |dbfit.fixture | !|dbfit.SQLServerTest| !|Connect|Data Source=localhost;Initial Catalog=JSS2013;Integrated Security=True;| !define pipe {!-|-!}
DbFIT Hello World
DbFIT !|Query|SELECT ’world' as Hello| |Hello| |world|
DbFIT RED
DbFIT GREEN Prochaine étape je REFACTOR : identation, renommage de variable, COMMENTAIRE !, Niveau d’Isolation, RowCount, Index, etc …
DbFIT Le script Hello Word C:\Users\dmaresma\Source\Repos\JSS2013\dbfit\FitNesseRoot\LesJourneesSqlServer\HelloWorld
DbFIT DbFit en Action Tester quoi, par où commencer ? Schémas Suivi et non régression du schéma, signatures Programmes Conformité et comportement attendu SSIS La source de données Le résultat de l’alimentation (les Transformations et Chargement) SSRS Projection d’extraction de données Calcul à l’intérieurs des rapports SSAS : avec OPENROWSET
DbFIT Schémas Schéma Table UDF Suivi et non régression du schéma, signatures
DbFIT Programmes USP Conformité et comportement attendu Copier Coller entre Excel et FitNesse Tester de manière ensembliste, projeter un champ pour une plage de données de test, itération suivante on ajoute un champ pour une nouvelle plage de valeur.
DbFIT SSIS Fixture InspectSsis SSISDtsConfig ExecuteSsisWithConfig
DbFIT SSRS Fixture ReportService Report
ALM (TFS) Liéer un test xUnit à l’appel du WebService FitNesse : MyDbSuite Liéer un test xUnit à l’appel du WebService FitNesse : [TestClass] public class dbFitCITest { [TestMethod] public void ProjetBaseDeDonnee() { var xml = XElement.Load("http://localhost:8085/LesJourneesSqlServer.ProjetBaseDeDonnees?suite&format=xml"); var results = ( from c in xml.Elements("finalCounts") select new { right =c.Element("right").Value, wrong = c.Element("wrong").Value, ignores = c.Element("ignores").Value, exceptions = c.Element("exceptions").Value}).First(); Assert.AreEqual(true,results.wrong.Equals("0"),string.Format("Il y a {0} test en échec, {1} en exception, {2} ignoré(s) et {3} passé(s)",results.wrong,results.exceptions,results.ignores, results.right )); Assert.AreEqual(false,xml.IsEmpty, "Aucun test ne semble avoir été joué "); } Content <xml> <> </xml> MyDbTest Testing À chaque Build la solution va jouer le projet de test unitaire Xunit qui va solliciter FitNesse à la manière d’un webservice et jouer l’ensemble des tests unitaires et d’acceptance content.txt properties.xml
Leçons Rendre les requêtes plus facile à maintenir A Encapsuler dans des VIEW et des UDF Limité le périmètre de chaque page Des données de test simples et pertinente Facile à comprendre et à maintenir Constamment revoir le périmètre du test S’assurer de l’adéquation des tests avec la réalité du métier Ça Marche !
Merci de votre attention
Q & R
Références BI Agile TDD Etudes Agile Analytics (Ken Collier) Refactoring Databases : EDD (Scott Ambler ) TDD TDD : By Example (Kent Beck ) The Clean Coder (Robert [Uncle Bob] Martin) Etudes Nagappan 2008 http://research.microsoft.com/en-us/groups/ese/nagappan_tdd.pdf Red : Ecrire un test qui échou Green : Faire que le code marche et passe le test Refactor : Eliminer la redondance de code, simplifier, normaliser
Merci à nos sponsors