SlideShare une entreprise Scribd logo
1  sur  65
Télécharger pour lire hors ligne
Agilité, Productivité et Qualité
               au Centre
     avec Visual Studio 2012

                       13 Février 2013
Philippe PUSCHMANN                                Cédric GOUGE
Architecte Solution                         Architecte Solution
CTO Office                               Application Integration
Avanade France                                  Avanade France



Code / Développement
Avanade
Leader mondial dans l’intégration des technologies Microsoft, présent dans 24 pays




                                                                                             Technology




                                                                                      Business &          Software
                                                                                     Management           Products




   La mission d’Avanade consiste à aider les entreprises à optimiser leurs
   investissements informatiques et à développer des solutions complètes,
   génératrices de bénéfices concrets, autour des technologies Microsoft.
AGENDA
 SCRUM : Quand et Pourquoi?
 Succès = SCRUM + Excellence Technique
 Done = Tested!!
 Visual Studio 2012 ALM : La Solution et les Outils
 Demo : Développement d’une application Windows 8
 avec Visual Studio 2012 : Scrum Pomodoro
AGENDA
 SCRUM : Quand et Pourquoi?
 Succès = SCRUM + Excellence Technique
 Done = Tested!!
 Visual Studio 2012 ALM : La Solution et les Outils
 Demo : Développement d’une application Windows 8
 avec Visual Studio 2012 : Scrum Pomodoro
Project Informatiques : La situation
       Standish Group Chaos Report                   Principales Causes D’échecs
100%

80%                                                                 Time to Market
60%
                                                     1            toujours plus agressif

40%                                                         Métier du client et technologies
20%                                                  2      utilisées toujours plus complexes
 0%
                                                                  Manque de réactivité
                                                     3            face au changement
       Successful    Challenged         Failed

        Functionalities Usage Statistics

                     Always
                       7%

                              Seldom
          Never
                                                    Gaspillage de Ressources (64%)
                               19%
          45%                                       Forte part de livrables sans valeur métier
                                                     au détriment de livrables à haute valeur
                            Sometimes
                              16%                    ajoutée
                    Often
                    13%
Agile vs Waterfall

           Failed                  Failed
            12%                     15%
                                               Successful
                                                 26%
                    Successful
                      43%


     Challenged
        45%

                                        Challenged
                                           59%




        Agile                    Waterfall
Quels sont les fondements de l’Agilité?




     Le Développement Agile confère une approche
L’ALM peut êtreitérative et flexible du collection de disciplines
  incrémentale,
                  définie comme une développement
logiciel en s’appuyant sur 12 Principes qui constituent le
et d’outils qui vont permettre de transformer un besoin métier
                     Manifest AGILE
en une solution informatique opérationnelle
Agile Manifesto (1/2)
Agile Manifesto (1/2)
Agile Manifesto (1/2)
Agile Manifesto (1/2)
Agile Manifesto (1/2)
Agile Manifesto (1/2)
Agile Manifesto (2/2)
Agile Manifesto (2/2)
Agile Manifesto (2/2)
Agile Manifesto (2/2)
Agile Manifesto (2/2)
Agile Manifesto (2/2)
Eligibilité de SCRUM
CRITERES
Simple




                              Fonctionnalités: Le Quoi
Tout est connu                                           SCRUM

Compliqué
Plus de connu que d’inconnu

Complexe
Plus d’inconnu que de connu

Chaotique
Quasiment rien n’est connu
                                             pl

                                                         Technologie : Le Comment
Le cas Salesforce.com : un cas édifiant
Salesforce, une exemple de succès de l’ère .com qui a su durer.
Avec en 2006 plus de 450 millions de dollars de revenus, et 2000 employés
Ayant vu sa fréquence de releases passer de 4 à 1 par an, et des clients insatisfaits, il a
fallu réagir donc changer
Salesforce décida d’engager une transition vers Scrum
Les résultats furent édifiant:
• 1ère année : Salesforces a augmenté de 94% le nombre de fonctionnalités, délivré 38%
    de fonctionnalités en plus par développeur, et délivré plus de 500% de valeur
    supplémentaire à ses clients
• Les 2 années suivantes ont permis de doubler le revenu à plus d’un milliard de dollars
• Au regard de tels résultats, il n’est pas étonnant de voir l’engouement autour de
    l’adoption de Scrum
Scrum est simplement un Framework avec
des règles…
                          Vous pouvez jouer et
                          respecter les règles…
                          ou vous pouvez tricher…

                           SCRUM But


                           Water SCRUM Fall


                           SCRUM And
Reduce
 waste
Think
Holistically
  Work
Incrementally
AGENDA
 SCRUM : Quand et Pourquoi?
 Succès = SCRUM + Excellence Technique
 Done = Tested!!
 Visual Studio 2012 ALM : La Solution et les Outils
 Demo : Développement d’une application Windows 8
 avec Visual Studio 2012 : Scrum Pomodoro
SCRUM…AND
                                                         Continuous            Build              Test Driven
  Specification by                  CI
                                                          Delivery          Automation           Development
     Example
                     Just in Time           User Stories       Collective      Planning Poker
                       Planning                                Ownership                             Continuous
    BDD                                                                                              Deployment


                                                        SCRUM
    ATDD         Burndown                                                                Relative
                                                                                                      Design for
                   Charts                                                               Estimation
                                                                                                      Operations
 Executable
Specifications       Information                            Pair                   Release            Refactoring
                      Radiators                         Programming                Planning
   Fitness for
                                          Emergent                        Reducing                   Clean Code
    Purpose
                                         Architecture                  Technical Debt
Clean Code == Quality Code;
                                                     Pour Eviter
                                           TDD /   Duplicated Code
SOLID         YAGNI                CI      ATDD    Long Method
                                                   Large Class
                                                   Too many Params
                                                   Feature envy
                                                   Inapropriate intimacy
  DI    BDD   MVVM / MVC         High Cohesion     Refused bequest
                                                   Contrived Complexity
                                                   Lazy Class /
                                                   Freeloader
                                 Design Patterns   Excessive Long
DRY           SoC
                                                   Identifiers
                                                   Excessive short
                                                   identifiers
              GRASP (Object                        UberCallback
IoC           Oriented design)   CQRS              Complex Conditionals
SOLID




        Le développement d’application n’est pas un jeu de Jenga
SOLID
                Single
                Responsability


        Open/Closed

                Liskov
                Substitution

        Interface
        Segregation

                Dependency
                Inversion
SOLID




        Ca n’est pas parce que vous pouvez le faire que vous devez le faire
SOLID
Responsabilités Multiple                          Responsabilité Unique

public class BankAccount                          public interface IBankAccount {
{                                                     string AccountNumber;
    public string AccountNumber { get; set; }         decimal AccountBalance;
                                                  }
    public decimal AccountBalance { get; set; }
                                                  public interface IInterestRateCalculator {
    public decimal CalculateInterest() {              decimal CalculateInterest(IBankAccount account);
        return 42M;                               }
    }
}                                                 public class BankAccount : IBankAccount {
                                                      public string AccountNumber { get; set; }
                                                      public decimal AccountBalance { get; set; }
                                                  }


                                                  public class InterestRateCalculator : IInterestRateCalculator
                                                  {

                                                      public decimal CalculateInterest(IBankAccount account) {
                                                          return 42;
                                                      }
                                                  }
SOLID




        De la chirurgie n’est pas nécessaire pour mettre un manteau
SOLID
   Non ouvert pour extensions                             Ouvert pour extensions
public static double SommeAires(IEnumerable<Geometrie>    public abstract class Geometrie {
geometries)                                                   public abstract double Aire();
{                                                         }
    double aireTotale = 0d;
                                                          public class Cercle : Geometrie {
                                                              public double Rayon { get; set; }
    foreach (var geo in geometries)
    {                                                           public override double Aire() {
        if (geo is Cercle)                                          return Math.PI * this.Rayon * this.Rayon;
        {                                                 } }
            var cercle = (Cercle)geo;
            aireTotale += cercle.Rayon * cercle.Rayon *   public class Rectangle : Geometrie {
Math.PI;                                                      public double Largeur { get; set; }
                                                              public double Longueur { get; set; }
        }
        else if (geo is Rectangle)                              public override double Aire() {
        {                                                           return this.Largeur * this.Longueur;
            //...                                         } }
        }
    }                                                     public static class CalculAire {
}                                                             public static double SommeAires(IEnumerable<Geometrie>
                                                          geometries) {
                                                                  return geometries.Sum(g => g.Aire());
                                                              }
                                                          }
SOLID




        S’il ressemble a un canard, cancane comme un canard, mais a besoin de
                  piles – vous avez certainement la mauvaise abstraction.
SOLID
public interface IDuck
{
    void Swim();
}

public class Duck : IDuck {
    public void Swim() {
    }
}                                     Que ce passe-t-il si l’on a pas allumé notre canard?
public class ElectricDuck : IDuck {
    public void Swim() {
        // Swim logic
    }
}



void MakeDuckSwim(IDuck duck)
{
      duck.Swim();
}
SOLID
Option 1 : Sans respecter les principes d’OpenClose
public interface IDuck
{
    void Swim();
}

public class Duck : IDuck {
    public void Swim() {
    }
}
                                      Que ce passe-t-il si l’on a pas allumé notre canard?
public class ElectricDuck : IDuck {
    public void Swim() {
        // Swim logic
    }
}

void MakeDuckSwim(IDuck duck)
{
voidif (duck is ElectricDuck)
     MakeDuckSwim(IDuck duck)
{       ((ElectricDuck)duck).TurnOn();
      duck.Swim();
}   duck.Swim();
}
SOLID
Option 2 : L’approche SOLID
public interface IDuck                public interface IDuck
{                                     {
    void Swim();                          void Swim();
}                                     }

public class Duck : IDuck {           public class Duck : IDuck {
    public void Swim() {                  public void Swim() {
    }                                     }
}                                     }
                                      public class ElectricDuck : IDuck {
                                          public void Swim() {
public class ElectricDuck : IDuck {
    public void Swim() {
                                              if (!this.IsTurnedOn)
        // Swim logic
                                                  return;
    }
}
                                              // Swim logic
                                          }
                                      }
void MakeDuckSwim(IDuck duck)         void MakeDuckSwim(IDuck duck)
{                                     {
      duck.Swim();                          duck.Swim();
}                                     }
SOLID




        Vous voulez que je branche ce composant, Où?
SOLID
public interface IOiseau {                                       public interface IOiseau {
    void Voler();                                                    void Pondre();
    void Pondre();                                               }
}
                                                                 public interface IVolatile : IOiseau {
public class Canard : IOiseau {                                      void Voler();
    public void Voler() { // ...                                 }
    }
                                                                 public class Canard : IVolatile{
    public void Pondre() { // ...                                    public void Voler() { // ...
    }                                                                }
}
public class Manchots : IOiseau {                                    public void Pondre() { // ...
    public void Voler() {                                            }
        throw new NotSupportedException();                       }
    }
                                                                 public class Manchots : IOiseau {
    public void Pondre() {                                           public void Pondre() { // ...
    }                                                                }
}                                                                }

                                                                 static void FaireVolerLesOiseaux(IEnumerable<IVolatile> oiseaux)
static void FaireVolerLesOiseaux(IEnumerable<IOiseau> oiseaux)   {
{                                                                        foreach (var oiseau in oiseaux)
    foreach (var oiseau in oiseaux)                                          oiseau.Voler();
        oiseau.Voler();                                              }
}                                                                }
SOLID




        Est-ce que vous brancheriez une lampe en faisant une soudure
               directement sur le réseau électrique dans le mur?
SOLID
Méthode Créeant une dépendance                     Inversion de dépendance par constructeur
                                                   d’injection
                                                   public interface ICoolRepository {
public class CoolSQLRepository
                                                           CoolThing GetThing(int id);
{
                                                       }
   public CoolThing GetThing(int id);
}
                                                   public class CoolService
                                                   {
public class CoolService
                                                       private ICoolRepository repository;
{
   public CoolThing GetCoolThing(int id)
                                                       public CoolService(ICoolRepository repository){
   {
                                                           this.repository = repository;
       var repository = new CoolSQLRepository();
                                                       }
       return repository.GetThing(id);
   }
                                                       public CoolThing GetCoolThing(int id) {
}
                                                           return repository.GetThing(id);
                                                       }
                                                   }

                                                   public class CoolSQLRepository : ICoolRepository {
                                                      public CoolThing GetThing(int id);
                                                   }
Demo Clean Code with Visual Studio 2012
AGENDA
 SCRUM : Quand et Pourquoi?
 Succès = SCRUM + Excellence Technique
 Done = Tested!!
 Visual Studio 2012 ALM : La Solution et les Outils
 Demo : Développement d’une application Windows 8
 avec Visual Studio 2012 : Scrum Pomodoro
TESTS FONCTIONNELS ET TECHNIQUES

Pourquoi Tester?
Mais aussi pour éviter cela!
Ariane 5 Flight 501
Le bug le plus couteuxde l’histoire

•   Réutilisation de code d’Ariane 4 d’ou une
    trajectoire différente à cause d’un design
    diffèrent du Booster. Code non retesté!
•   La Conversion d’un float 64 bit en int 16
    bits a causé un erreur de type overflow
    exception
•   Cout du Bug : > $370 million (1996),
    temps d’occurrence : 40 secondes
Pratiques de Tests et domaines

                       Développement          Acceptance         Exploratoire




  ATDD                      Extensibility           Performance            System
  BDD                       Functional              Regression             TDD
  Beta                      Integration             Scenario               Unit
  Black Box                 Load                    Security               Usability
  Build verification        Maintainability         Smoke                  User
  Component                 Module                  Static                 White Box
  End to End                Non Functional          Story                  …Autres
Tests et Visual Studio 2012
Types de Tests        Visual Studio 2012
                                           Automation
Tests Unitaires       Unit Tests           Build and Lab
                                           Management

Tests d’intégration   UI Coded Tests



Tests d’acceptance    Test cases           Isolation
                                           Mock / Stub /
Tests de              Performance /        Shims / Fakes
Performance           Load Tests
Principes TDD
TDD : Test Driven Development
• Pratique qui consiste à écrire les tests unitaires
  avant d’écrire le code d’implémentation                         Red
• TDD est utilisé comme
    • Une pratique de Design
    • Un moyen puissant pour éviter les
                                                       Refactor         Green
        anomalies dans une application
    • Une garantie de l’écriture des tests
    • Techniques de non régression
    • Production de code plus robuste
La Dynamique TDD / ATDD

                                                          Pass
                                                   Fail
                                       Pass
                                Fail            Automated Tests
                      Pass    Automated Tests
               Fail
                 Sprint 1         Sprint 2          Sprint 3


   Les équipes de développement performantes utilisent les test de non
                         régression automatisés
Demo TDD with Visual Studio 2012
Office
                                  Test Case
                                 Management
Web Access                                               System
                  Requirements        Feedback           Center
                  Management          Management
                                        Intellitrace       Windows
              Project
              Management                In Production       Azure
             Preemptive                 Lab Management
             Analytics




                                              New Enhanced
Agenda
 SCRUM : Quand et Pourquoi?
 Succès = SCRUM + Excellence Technique
 Done = Tested!!
 Visual Studio 2012 ALM : La Solution et les Outils
 Demo : Développement d’une application Windows 8
 avec Visual Studio 2012 : Scrum Pomodoro
Presentation Pomodoro Technique
La technique Pomodoro est une technique de planification développée par Francesco
Cirillo à la fin des années 1980. Cette méthode se base sur l'usage d'un minuteur
permettant de respecter des périodes de 25 minutes appelées pomodori (qui signifie
en italien « tomates »). Ces différentes périodes de travail sont séparées par de courtes
pauses.
Proches des concepts de cycles itératifs et des méthodes de développement agiles,
utilisées dans le développement de logiciel, la méthode est utilisée pour la
programmation en binôme.
La méthode a pour principale idée que des pauses régulières favorisent l'agilité
intellectuelle.

La technique se présente sous la forme de cinq étapes :

•   décider de la tâche à effectuer ;
•   régler le pomodoro (minuteur) sur 25 minutes ;
•   travailler sur la tâche jusqu'à ce que le minuteur sonne et la noter comme faite ;
•   prendre une courte pause (5 minutes) ;
•   tous les quatre pomodori prendre une pause un peu plus longue (15-20 minutes).
Réunion de démarrage : Envisioning




Sketch : Croquis sur une serviette en papier   Backlog : Liste des fonctionnalités sur
                                               une page de cahier
Création du Product Backlog avec
          Web Access
Scrum Pomodoro Application
Demo SQL Server Data Tools / SQL Azure
       Productive Database Development
Demo PowerPoint Storyboarding
merci!



         Scrum On!

Contenu connexe

Tendances

Marc SALIS CV 2016-08-18
Marc SALIS CV 2016-08-18Marc SALIS CV 2016-08-18
Marc SALIS CV 2016-08-18
Marc Salis
 

Tendances (20)

Industrialisation des développements CRM 2011
Industrialisation des développements CRM 2011Industrialisation des développements CRM 2011
Industrialisation des développements CRM 2011
 
Workflow : qu’apporte K2 à SharePoint 2010 ?
Workflow : qu’apporte K2 à SharePoint 2010 ?Workflow : qu’apporte K2 à SharePoint 2010 ?
Workflow : qu’apporte K2 à SharePoint 2010 ?
 
Kinect, Tablette ou PC, Microsoft Dynamics NAV 2013 la nouvelle expérience ERP
Kinect, Tablette ou PC, Microsoft Dynamics NAV 2013 la nouvelle expérience ERPKinect, Tablette ou PC, Microsoft Dynamics NAV 2013 la nouvelle expérience ERP
Kinect, Tablette ou PC, Microsoft Dynamics NAV 2013 la nouvelle expérience ERP
 
Retours d'experience de déploiements Windows 7
Retours d'experience de déploiements Windows 7 Retours d'experience de déploiements Windows 7
Retours d'experience de déploiements Windows 7
 
Présentation de SQL Azure
Présentation de SQL AzurePrésentation de SQL Azure
Présentation de SQL Azure
 
Gestion des conversions de fichiers en entreprise : PDF - PDF/A
Gestion des conversions de fichiers en entreprise : PDF - PDF/AGestion des conversions de fichiers en entreprise : PDF - PDF/A
Gestion des conversions de fichiers en entreprise : PDF - PDF/A
 
Présentation des Nouveautés de Sage CRM v 6.6
Présentation des Nouveautés de Sage CRM v 6.6Présentation des Nouveautés de Sage CRM v 6.6
Présentation des Nouveautés de Sage CRM v 6.6
 
Duet Entreprise 2.0 pour SharePoint et SAP
Duet Entreprise 2.0 pour SharePoint et SAPDuet Entreprise 2.0 pour SharePoint et SAP
Duet Entreprise 2.0 pour SharePoint et SAP
 
SharePoint et SQL Server pour un étudiant : quels débouchés et quelles opport...
SharePoint et SQL Server pour un étudiant : quels débouchés et quelles opport...SharePoint et SQL Server pour un étudiant : quels débouchés et quelles opport...
SharePoint et SQL Server pour un étudiant : quels débouchés et quelles opport...
 
Présentation LO-Cockpit , SAP
Présentation LO-Cockpit , SAPPrésentation LO-Cockpit , SAP
Présentation LO-Cockpit , SAP
 
2008-10-02 Paris - Intégrer tout type de Données
2008-10-02 Paris - Intégrer tout type de Données2008-10-02 Paris - Intégrer tout type de Données
2008-10-02 Paris - Intégrer tout type de Données
 
Etat de l'art (et roadmap) de la BI mobile Microsoft
Etat de l'art (et roadmap) de la BI mobile MicrosoftEtat de l'art (et roadmap) de la BI mobile Microsoft
Etat de l'art (et roadmap) de la BI mobile Microsoft
 
Restitution des données environnement Microsoft & data visualization : panel ...
Restitution des données environnement Microsoft & data visualization : panel ...Restitution des données environnement Microsoft & data visualization : panel ...
Restitution des données environnement Microsoft & data visualization : panel ...
 
Marc SALIS CV 2016-08-18
Marc SALIS CV 2016-08-18Marc SALIS CV 2016-08-18
Marc SALIS CV 2016-08-18
 
Gérez votre laboratoire de tests avec Visual Studio 2010 Lab Management
Gérez votre laboratoire de tests avec Visual Studio 2010 Lab ManagementGérez votre laboratoire de tests avec Visual Studio 2010 Lab Management
Gérez votre laboratoire de tests avec Visual Studio 2010 Lab Management
 
MERAZKA Messaoud
MERAZKA MessaoudMERAZKA Messaoud
MERAZKA Messaoud
 
Webinar Smile et Talend : Faites communiquer vos applications en temps réel
Webinar Smile et Talend  : Faites communiquer vos applications en temps réelWebinar Smile et Talend  : Faites communiquer vos applications en temps réel
Webinar Smile et Talend : Faites communiquer vos applications en temps réel
 
La boite à outils pour réussir sa migration vers Windows 7
La boite à outils pour réussir sa migration vers Windows 7La boite à outils pour réussir sa migration vers Windows 7
La boite à outils pour réussir sa migration vers Windows 7
 
X-Analysis - for IBM partners - FR
X-Analysis - for IBM partners - FRX-Analysis - for IBM partners - FR
X-Analysis - for IBM partners - FR
 
Flexible Workstyle : Comment réussir l'évolution du poste de travail vers les...
Flexible Workstyle : Comment réussir l'évolution du poste de travail vers les...Flexible Workstyle : Comment réussir l'évolution du poste de travail vers les...
Flexible Workstyle : Comment réussir l'évolution du poste de travail vers les...
 

En vedette (7)

SQL Azure Data Sync ou comment synchroniser vos données avec le Cloud ?
SQL Azure Data Sync ou comment synchroniser vos données avec le Cloud ?SQL Azure Data Sync ou comment synchroniser vos données avec le Cloud ?
SQL Azure Data Sync ou comment synchroniser vos données avec le Cloud ?
 
Order to cash Agile
Order to cash AgileOrder to cash Agile
Order to cash Agile
 
Stratégie de tests type
Stratégie de tests typeStratégie de tests type
Stratégie de tests type
 
Test acceptance
Test acceptanceTest acceptance
Test acceptance
 
Thiga - Notre retour d'expérience sur le Design sprint
Thiga - Notre retour d'expérience sur le Design sprintThiga - Notre retour d'expérience sur le Design sprint
Thiga - Notre retour d'expérience sur le Design sprint
 
Adoption De Pratiques De Test Agile Dans Un Environnement Legacy
Adoption De Pratiques De Test Agile Dans Un Environnement LegacyAdoption De Pratiques De Test Agile Dans Un Environnement Legacy
Adoption De Pratiques De Test Agile Dans Un Environnement Legacy
 
Présentation Agile Testing
Présentation Agile TestingPrésentation Agile Testing
Présentation Agile Testing
 

Similaire à Agilité, Productivité et Qualité au Centre avec Visual Studio 2012

AgileTour Toulouse 2012 : agilité, innovation utile au business !
AgileTour Toulouse 2012 : agilité, innovation utile au business !AgileTour Toulouse 2012 : agilité, innovation utile au business !
AgileTour Toulouse 2012 : agilité, innovation utile au business !
Agile Toulouse
 
AgileTour Toulouse 2012 : TFS
AgileTour Toulouse 2012 : TFSAgileTour Toulouse 2012 : TFS
AgileTour Toulouse 2012 : TFS
Agile Toulouse
 

Similaire à Agilité, Productivité et Qualité au Centre avec Visual Studio 2012 (20)

Audit - Le pitch
Audit - Le pitchAudit - Le pitch
Audit - Le pitch
 
ROK Solution pour les Ressources Humaines
ROK Solution pour les Ressources HumainesROK Solution pour les Ressources Humaines
ROK Solution pour les Ressources Humaines
 
Keynote Retmo2018 : le test QA et UAT en méthode agile
Keynote Retmo2018 : le test QA et UAT en méthode agileKeynote Retmo2018 : le test QA et UAT en méthode agile
Keynote Retmo2018 : le test QA et UAT en méthode agile
 
Grille de lecture des méthodes agiles
Grille de lecture des méthodes agilesGrille de lecture des méthodes agiles
Grille de lecture des méthodes agiles
 
Pourquoi Faire Du Bi Agile
Pourquoi Faire Du Bi AgilePourquoi Faire Du Bi Agile
Pourquoi Faire Du Bi Agile
 
Expériences Clients Visiativ
Expériences Clients VisiativExpériences Clients Visiativ
Expériences Clients Visiativ
 
AgileTour Toulouse 2012 : agilité, innovation utile au business !
AgileTour Toulouse 2012 : agilité, innovation utile au business !AgileTour Toulouse 2012 : agilité, innovation utile au business !
AgileTour Toulouse 2012 : agilité, innovation utile au business !
 
Session #2 : CA Technology : outillage et produit
Session #2 : CA Technology : outillage et produitSession #2 : CA Technology : outillage et produit
Session #2 : CA Technology : outillage et produit
 
AT Marseille 2011 - Réduisons les gaspillages
AT Marseille 2011 - Réduisons les gaspillagesAT Marseille 2011 - Réduisons les gaspillages
AT Marseille 2011 - Réduisons les gaspillages
 
SnowcampIO 2023 - 1 plateforme à concevoir + 2 architectes = 3 solutions
SnowcampIO 2023 - 1 plateforme à concevoir + 2 architectes = 3 solutionsSnowcampIO 2023 - 1 plateforme à concevoir + 2 architectes = 3 solutions
SnowcampIO 2023 - 1 plateforme à concevoir + 2 architectes = 3 solutions
 
Développez des applications métiers avec Microsoft Sharepoint et Dynamics NAV...
Développez des applications métiers avec Microsoft Sharepoint et Dynamics NAV...Développez des applications métiers avec Microsoft Sharepoint et Dynamics NAV...
Développez des applications métiers avec Microsoft Sharepoint et Dynamics NAV...
 
Interopérabilité cao cad interop 2012
Interopérabilité cao   cad interop 2012Interopérabilité cao   cad interop 2012
Interopérabilité cao cad interop 2012
 
Tendances de l'ERP pour 2014
Tendances de l'ERP pour 2014Tendances de l'ERP pour 2014
Tendances de l'ERP pour 2014
 
Vr4 d design_dev
Vr4 d design_devVr4 d design_dev
Vr4 d design_dev
 
Presentation Proficiency
Presentation ProficiencyPresentation Proficiency
Presentation Proficiency
 
Agl2012
Agl2012Agl2012
Agl2012
 
Table ronde solution center v3 lexmark only
Table ronde solution center v3 lexmark onlyTable ronde solution center v3 lexmark only
Table ronde solution center v3 lexmark only
 
Valtech - Quel ROI pour ma transformation Agile ? PARTIE 2
Valtech - Quel ROI pour ma transformation Agile ? PARTIE 2Valtech - Quel ROI pour ma transformation Agile ? PARTIE 2
Valtech - Quel ROI pour ma transformation Agile ? PARTIE 2
 
AgileTour Toulouse 2012 : TFS
AgileTour Toulouse 2012 : TFSAgileTour Toulouse 2012 : TFS
AgileTour Toulouse 2012 : TFS
 
Cas APHP - solution de mobilité avec Windows 8
Cas APHP - solution de mobilité avec Windows 8Cas APHP - solution de mobilité avec Windows 8
Cas APHP - solution de mobilité avec Windows 8
 

Plus de Microsoft

Plus de Microsoft (20)

Uwp + Xamarin : Du nouveau en terre du milieu
Uwp + Xamarin : Du nouveau en terre du milieuUwp + Xamarin : Du nouveau en terre du milieu
Uwp + Xamarin : Du nouveau en terre du milieu
 
La Blockchain pas à PaaS
La Blockchain pas à PaaSLa Blockchain pas à PaaS
La Blockchain pas à PaaS
 
Tester, Monitorer et Déployer son application mobile
Tester, Monitorer et Déployer son application mobileTester, Monitorer et Déployer son application mobile
Tester, Monitorer et Déployer son application mobile
 
Windows 10, un an après – Nouveautés & Démo
Windows 10, un an après – Nouveautés & Démo Windows 10, un an après – Nouveautés & Démo
Windows 10, un an après – Nouveautés & Démo
 
Prenez votre pied avec les bots et cognitive services.
Prenez votre pied avec les bots et cognitive services.Prenez votre pied avec les bots et cognitive services.
Prenez votre pied avec les bots et cognitive services.
 
Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...
Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...
Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...
 
Créer un bot de A à Z
Créer un bot de A à ZCréer un bot de A à Z
Créer un bot de A à Z
 
Microsoft Composition, pierre angulaire de vos applications ?
Microsoft Composition, pierre angulaire de vos applications ?Microsoft Composition, pierre angulaire de vos applications ?
Microsoft Composition, pierre angulaire de vos applications ?
 
Les nouveautés SQL Server 2016
Les nouveautés SQL Server 2016Les nouveautés SQL Server 2016
Les nouveautés SQL Server 2016
 
Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?
Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?
Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?
 
Administration et supervision depuis le Cloud avec Azure Logs Analytics
Administration et supervision depuis le Cloud avec Azure Logs AnalyticsAdministration et supervision depuis le Cloud avec Azure Logs Analytics
Administration et supervision depuis le Cloud avec Azure Logs Analytics
 
Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...
Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...
Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...
 
Plan de Reprise d'Activité avec Azure Site Recovery
Plan de Reprise d'Activité avec Azure Site RecoveryPlan de Reprise d'Activité avec Azure Site Recovery
Plan de Reprise d'Activité avec Azure Site Recovery
 
Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...
Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...
Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...
 
Transformation de la représentation : De la VR à la RA, aller & retour.
Transformation de la représentation : De la VR à la RA, aller & retour.Transformation de la représentation : De la VR à la RA, aller & retour.
Transformation de la représentation : De la VR à la RA, aller & retour.
 
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...
 
Introduction à ASP.NET Core
Introduction à ASP.NET CoreIntroduction à ASP.NET Core
Introduction à ASP.NET Core
 
Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?
 
Comment développer sur la console Xbox One avec une application Universal Win...
Comment développer sur la console Xbox One avec une application Universal Win...Comment développer sur la console Xbox One avec une application Universal Win...
Comment développer sur la console Xbox One avec une application Universal Win...
 
Azure Service Fabric pour les développeurs
Azure Service Fabric pour les développeursAzure Service Fabric pour les développeurs
Azure Service Fabric pour les développeurs
 

Agilité, Productivité et Qualité au Centre avec Visual Studio 2012

  • 1. Agilité, Productivité et Qualité au Centre avec Visual Studio 2012 13 Février 2013 Philippe PUSCHMANN Cédric GOUGE Architecte Solution Architecte Solution CTO Office Application Integration Avanade France Avanade France Code / Développement
  • 2. Avanade Leader mondial dans l’intégration des technologies Microsoft, présent dans 24 pays Technology Business & Software Management Products La mission d’Avanade consiste à aider les entreprises à optimiser leurs investissements informatiques et à développer des solutions complètes, génératrices de bénéfices concrets, autour des technologies Microsoft.
  • 3. AGENDA SCRUM : Quand et Pourquoi? Succès = SCRUM + Excellence Technique Done = Tested!! Visual Studio 2012 ALM : La Solution et les Outils Demo : Développement d’une application Windows 8 avec Visual Studio 2012 : Scrum Pomodoro
  • 4. AGENDA SCRUM : Quand et Pourquoi? Succès = SCRUM + Excellence Technique Done = Tested!! Visual Studio 2012 ALM : La Solution et les Outils Demo : Développement d’une application Windows 8 avec Visual Studio 2012 : Scrum Pomodoro
  • 5. Project Informatiques : La situation Standish Group Chaos Report Principales Causes D’échecs 100% 80% Time to Market 60% 1 toujours plus agressif 40% Métier du client et technologies 20% 2 utilisées toujours plus complexes 0% Manque de réactivité 3 face au changement Successful Challenged Failed Functionalities Usage Statistics Always 7% Seldom Never  Gaspillage de Ressources (64%) 19% 45%  Forte part de livrables sans valeur métier au détriment de livrables à haute valeur Sometimes 16% ajoutée Often 13%
  • 6. Agile vs Waterfall Failed Failed 12% 15% Successful 26% Successful 43% Challenged 45% Challenged 59% Agile Waterfall
  • 7. Quels sont les fondements de l’Agilité? Le Développement Agile confère une approche L’ALM peut êtreitérative et flexible du collection de disciplines incrémentale, définie comme une développement logiciel en s’appuyant sur 12 Principes qui constituent le et d’outils qui vont permettre de transformer un besoin métier Manifest AGILE en une solution informatique opérationnelle
  • 20. Eligibilité de SCRUM CRITERES Simple Fonctionnalités: Le Quoi Tout est connu SCRUM Compliqué Plus de connu que d’inconnu Complexe Plus d’inconnu que de connu Chaotique Quasiment rien n’est connu pl Technologie : Le Comment
  • 21. Le cas Salesforce.com : un cas édifiant Salesforce, une exemple de succès de l’ère .com qui a su durer. Avec en 2006 plus de 450 millions de dollars de revenus, et 2000 employés Ayant vu sa fréquence de releases passer de 4 à 1 par an, et des clients insatisfaits, il a fallu réagir donc changer Salesforce décida d’engager une transition vers Scrum Les résultats furent édifiant: • 1ère année : Salesforces a augmenté de 94% le nombre de fonctionnalités, délivré 38% de fonctionnalités en plus par développeur, et délivré plus de 500% de valeur supplémentaire à ses clients • Les 2 années suivantes ont permis de doubler le revenu à plus d’un milliard de dollars • Au regard de tels résultats, il n’est pas étonnant de voir l’engouement autour de l’adoption de Scrum
  • 22. Scrum est simplement un Framework avec des règles… Vous pouvez jouer et respecter les règles… ou vous pouvez tricher… SCRUM But Water SCRUM Fall SCRUM And
  • 24.
  • 26. AGENDA SCRUM : Quand et Pourquoi? Succès = SCRUM + Excellence Technique Done = Tested!! Visual Studio 2012 ALM : La Solution et les Outils Demo : Développement d’une application Windows 8 avec Visual Studio 2012 : Scrum Pomodoro
  • 27. SCRUM…AND Continuous Build Test Driven Specification by CI Delivery Automation Development Example Just in Time User Stories Collective Planning Poker Planning Ownership Continuous BDD Deployment SCRUM ATDD Burndown Relative Design for Charts Estimation Operations Executable Specifications Information Pair Release Refactoring Radiators Programming Planning Fitness for Emergent Reducing Clean Code Purpose Architecture Technical Debt
  • 28. Clean Code == Quality Code; Pour Eviter TDD / Duplicated Code SOLID YAGNI CI ATDD Long Method Large Class Too many Params Feature envy Inapropriate intimacy DI BDD MVVM / MVC High Cohesion Refused bequest Contrived Complexity Lazy Class / Freeloader Design Patterns Excessive Long DRY SoC Identifiers Excessive short identifiers GRASP (Object UberCallback IoC Oriented design) CQRS Complex Conditionals
  • 29. SOLID Le développement d’application n’est pas un jeu de Jenga
  • 30. SOLID Single Responsability Open/Closed Liskov Substitution Interface Segregation Dependency Inversion
  • 31. SOLID Ca n’est pas parce que vous pouvez le faire que vous devez le faire
  • 32. SOLID Responsabilités Multiple Responsabilité Unique public class BankAccount public interface IBankAccount { { string AccountNumber; public string AccountNumber { get; set; } decimal AccountBalance; } public decimal AccountBalance { get; set; } public interface IInterestRateCalculator { public decimal CalculateInterest() { decimal CalculateInterest(IBankAccount account); return 42M; } } } public class BankAccount : IBankAccount { public string AccountNumber { get; set; } public decimal AccountBalance { get; set; } } public class InterestRateCalculator : IInterestRateCalculator { public decimal CalculateInterest(IBankAccount account) { return 42; } }
  • 33. SOLID De la chirurgie n’est pas nécessaire pour mettre un manteau
  • 34. SOLID Non ouvert pour extensions Ouvert pour extensions public static double SommeAires(IEnumerable<Geometrie> public abstract class Geometrie { geometries) public abstract double Aire(); { } double aireTotale = 0d; public class Cercle : Geometrie { public double Rayon { get; set; } foreach (var geo in geometries) { public override double Aire() { if (geo is Cercle) return Math.PI * this.Rayon * this.Rayon; { } } var cercle = (Cercle)geo; aireTotale += cercle.Rayon * cercle.Rayon * public class Rectangle : Geometrie { Math.PI; public double Largeur { get; set; } public double Longueur { get; set; } } else if (geo is Rectangle) public override double Aire() { { return this.Largeur * this.Longueur; //... } } } } public static class CalculAire { } public static double SommeAires(IEnumerable<Geometrie> geometries) { return geometries.Sum(g => g.Aire()); } }
  • 35. SOLID S’il ressemble a un canard, cancane comme un canard, mais a besoin de piles – vous avez certainement la mauvaise abstraction.
  • 36. SOLID public interface IDuck { void Swim(); } public class Duck : IDuck { public void Swim() { } } Que ce passe-t-il si l’on a pas allumé notre canard? public class ElectricDuck : IDuck { public void Swim() { // Swim logic } } void MakeDuckSwim(IDuck duck) { duck.Swim(); }
  • 37. SOLID Option 1 : Sans respecter les principes d’OpenClose public interface IDuck { void Swim(); } public class Duck : IDuck { public void Swim() { } } Que ce passe-t-il si l’on a pas allumé notre canard? public class ElectricDuck : IDuck { public void Swim() { // Swim logic } } void MakeDuckSwim(IDuck duck) { voidif (duck is ElectricDuck) MakeDuckSwim(IDuck duck) { ((ElectricDuck)duck).TurnOn(); duck.Swim(); } duck.Swim(); }
  • 38. SOLID Option 2 : L’approche SOLID public interface IDuck public interface IDuck { { void Swim(); void Swim(); } } public class Duck : IDuck { public class Duck : IDuck { public void Swim() { public void Swim() { } } } } public class ElectricDuck : IDuck { public void Swim() { public class ElectricDuck : IDuck { public void Swim() { if (!this.IsTurnedOn) // Swim logic return; } } // Swim logic } } void MakeDuckSwim(IDuck duck) void MakeDuckSwim(IDuck duck) { { duck.Swim(); duck.Swim(); } }
  • 39. SOLID Vous voulez que je branche ce composant, Où?
  • 40. SOLID public interface IOiseau { public interface IOiseau { void Voler(); void Pondre(); void Pondre(); } } public interface IVolatile : IOiseau { public class Canard : IOiseau { void Voler(); public void Voler() { // ... } } public class Canard : IVolatile{ public void Pondre() { // ... public void Voler() { // ... } } } public class Manchots : IOiseau { public void Pondre() { // ... public void Voler() { } throw new NotSupportedException(); } } public class Manchots : IOiseau { public void Pondre() { public void Pondre() { // ... } } } } static void FaireVolerLesOiseaux(IEnumerable<IVolatile> oiseaux) static void FaireVolerLesOiseaux(IEnumerable<IOiseau> oiseaux) { { foreach (var oiseau in oiseaux) foreach (var oiseau in oiseaux) oiseau.Voler(); oiseau.Voler(); } } }
  • 41. SOLID Est-ce que vous brancheriez une lampe en faisant une soudure directement sur le réseau électrique dans le mur?
  • 42. SOLID Méthode Créeant une dépendance Inversion de dépendance par constructeur d’injection public interface ICoolRepository { public class CoolSQLRepository CoolThing GetThing(int id); { } public CoolThing GetThing(int id); } public class CoolService { public class CoolService private ICoolRepository repository; { public CoolThing GetCoolThing(int id) public CoolService(ICoolRepository repository){ { this.repository = repository; var repository = new CoolSQLRepository(); } return repository.GetThing(id); } public CoolThing GetCoolThing(int id) { } return repository.GetThing(id); } } public class CoolSQLRepository : ICoolRepository { public CoolThing GetThing(int id); }
  • 43. Demo Clean Code with Visual Studio 2012
  • 44. AGENDA SCRUM : Quand et Pourquoi? Succès = SCRUM + Excellence Technique Done = Tested!! Visual Studio 2012 ALM : La Solution et les Outils Demo : Développement d’une application Windows 8 avec Visual Studio 2012 : Scrum Pomodoro
  • 45. TESTS FONCTIONNELS ET TECHNIQUES Pourquoi Tester?
  • 46. Mais aussi pour éviter cela! Ariane 5 Flight 501 Le bug le plus couteuxde l’histoire • Réutilisation de code d’Ariane 4 d’ou une trajectoire différente à cause d’un design diffèrent du Booster. Code non retesté! • La Conversion d’un float 64 bit en int 16 bits a causé un erreur de type overflow exception • Cout du Bug : > $370 million (1996), temps d’occurrence : 40 secondes
  • 47.
  • 48.
  • 49.
  • 50.
  • 51. Pratiques de Tests et domaines Développement Acceptance Exploratoire ATDD Extensibility Performance System BDD Functional Regression TDD Beta Integration Scenario Unit Black Box Load Security Usability Build verification Maintainability Smoke User Component Module Static White Box End to End Non Functional Story …Autres
  • 52. Tests et Visual Studio 2012 Types de Tests Visual Studio 2012 Automation Tests Unitaires Unit Tests Build and Lab Management Tests d’intégration UI Coded Tests Tests d’acceptance Test cases Isolation Mock / Stub / Tests de Performance / Shims / Fakes Performance Load Tests
  • 53. Principes TDD TDD : Test Driven Development • Pratique qui consiste à écrire les tests unitaires avant d’écrire le code d’implémentation Red • TDD est utilisé comme • Une pratique de Design • Un moyen puissant pour éviter les Refactor Green anomalies dans une application • Une garantie de l’écriture des tests • Techniques de non régression • Production de code plus robuste
  • 54. La Dynamique TDD / ATDD Pass Fail Pass Fail Automated Tests Pass Automated Tests Fail Sprint 1 Sprint 2 Sprint 3 Les équipes de développement performantes utilisent les test de non régression automatisés
  • 55. Demo TDD with Visual Studio 2012
  • 56.
  • 57. Office Test Case Management Web Access System Requirements Feedback Center Management Management Intellitrace Windows Project Management In Production Azure Preemptive Lab Management Analytics New Enhanced
  • 58. Agenda SCRUM : Quand et Pourquoi? Succès = SCRUM + Excellence Technique Done = Tested!! Visual Studio 2012 ALM : La Solution et les Outils Demo : Développement d’une application Windows 8 avec Visual Studio 2012 : Scrum Pomodoro
  • 59. Presentation Pomodoro Technique La technique Pomodoro est une technique de planification développée par Francesco Cirillo à la fin des années 1980. Cette méthode se base sur l'usage d'un minuteur permettant de respecter des périodes de 25 minutes appelées pomodori (qui signifie en italien « tomates »). Ces différentes périodes de travail sont séparées par de courtes pauses. Proches des concepts de cycles itératifs et des méthodes de développement agiles, utilisées dans le développement de logiciel, la méthode est utilisée pour la programmation en binôme. La méthode a pour principale idée que des pauses régulières favorisent l'agilité intellectuelle. La technique se présente sous la forme de cinq étapes : • décider de la tâche à effectuer ; • régler le pomodoro (minuteur) sur 25 minutes ; • travailler sur la tâche jusqu'à ce que le minuteur sonne et la noter comme faite ; • prendre une courte pause (5 minutes) ; • tous les quatre pomodori prendre une pause un peu plus longue (15-20 minutes).
  • 60. Réunion de démarrage : Envisioning Sketch : Croquis sur une serviette en papier Backlog : Liste des fonctionnalités sur une page de cahier
  • 61. Création du Product Backlog avec Web Access
  • 63. Demo SQL Server Data Tools / SQL Azure Productive Database Development
  • 65. merci! Scrum On!