65
Code / Développement Agilité, Productivité et Qualité au Centre avec Visual Studio 2012 13 Février 2013 Philippe PUSCHMANN Architecte Solution CTO Office Avanade France Cédric GOUGE Architecte Solution Application Integration Avanade France

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

Embed Size (px)

Citation preview

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

Code / Développement

Agilité, Productivité et Qualité

au Centre

avec Visual Studio 2012

13 Février 2013Philippe PUSCHMANNArchitecte SolutionCTO OfficeAvanade France

Cédric GOUGEArchitecte Solution

Application IntegrationAvanade France

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

AvanadeLeader mondial dans l’intégration des technologies Microsoft, présent dans 24 pays

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.

Technology

Software

Products

Business &

Management

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

AGENDA

Succès = SCRUM + Excellence Technique

SCRUM : Quand et Pourquoi?

Done = Tested!!

Demo : Développement d’une application Windows 8

avec Visual Studio 2012 : Scrum Pomodoro

Visual Studio 2012 ALM : La Solution et les Outils

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

AGENDA

Succès = SCRUM + Excellence Technique

SCRUM : Quand et Pourquoi?

Done = Tested!!

Demo : Développement d’une application Windows 8

avec Visual Studio 2012 : Scrum Pomodoro

Visual Studio 2012 ALM : La Solution et les Outils

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

Always

7%

Seldom

19%

Sometimes

16%

Often

13%

Never

45%

Functionalities Usage Statistics

0%

20%

40%

60%

80%

100%Standish Group Chaos Report

Successful Challenged Failed

Principales Causes D’échecs

Time to Market

toujours plus agressif

Métier du client et technologies

utilisées toujours plus complexes

Manque de réactivité

face au changement

1

2

3

Gaspillage de Ressources (64%)

Forte part de livrables sans valeur métier

au détriment de livrables à haute valeur

ajoutée

Project Informatiques : La situation

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

Agile vs Waterfall

Successful

43%

Challenged

45%

Failed

12%

Successful

26%

Challenged

59%

Failed

15%

Agile Waterfall

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

Quels sont les fondements de l’Agilité?

L’ALM peut être définie comme une collection de disciplines

et d’outils qui vont permettre de transformer un besoin métier

en une solution informatique opérationnelle

Le Développement Agile confère une approche

incrémentale, itérative et flexible du développement

logiciel en s’appuyant sur 12 Principes qui constituent le

Manifest AGILE

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

Agile Manifesto (1/2)

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

Agile Manifesto (1/2)

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

Agile Manifesto (1/2)

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

Agile Manifesto (1/2)

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

Agile Manifesto (1/2)

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

Agile Manifesto (1/2)

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

Agile Manifesto (2/2)

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

Agile Manifesto (2/2)

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

Agile Manifesto (2/2)

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

Agile Manifesto (2/2)

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

Agile Manifesto (2/2)

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

Agile Manifesto (2/2)

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

Eligibilité de SCRUM

pl

Technologie : Le Comment

Fon

ctio

nn

alit

és:

Le Q

uo

i

CRITERESSimpleTout est connu

CompliquéPlus de connu que d’inconnu

ComplexePlus d’inconnu que de connu

ChaotiqueQuasiment rien n’est connu

SCRUM

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

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ésAyant vu sa fréquence de releases passer de 4 à 1 par an, et des clients insatisfaits, il a fallu réagir donc changerSalesforce décida d’engager une transition vers ScrumLes 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

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

Scrum est simplement un Framework avec

des règles…

Vous pouvez jouer et respecter les règles…ou vous pouvez tricher…

SCRUM And

SCRUM But

Water SCRUM Fall

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

Reduce waste

Page 24: Agilité, Productivité et Qualité au Centre avec Visual Studio 2012
Page 25: Agilité, Productivité et Qualité au Centre avec Visual Studio 2012

Think

Holistically Work

Incrementally

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

Succès = SCRUM + Excellence Technique

Done = Tested!!

Demo : Développement d’une application Windows 8

avec Visual Studio 2012 : Scrum Pomodoro

SCRUM : Quand et Pourquoi?

Visual Studio 2012 ALM : La Solution et les Outils

AGENDA

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

Specification by Example

CIContinuous

DeliveryBuild

AutomationTest Driven

Development

ContinuousDeployment

Design for Operations

Refactoring

Clean CodeReducingTechnical Debt

Emergent Architecture

Fitness for Purpose

ExecutableSpecifications

ATDD

BDD

SCRUM…AND

Just in Time Planning

User Stories Collective Ownership

Planning Poker

Relative Estimation

Release Planning

Pair Programming

Information Radiators

BurndownCharts

SCRUM

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

Clean Code == Quality Code;

SOLID

DI BDD

YAGNI

MVVM / MVC

CITDD /

ATDD

Pour EviterDuplicated Code

Long Method

Large Class

Too many Params

Feature envy

Inapropriate intimacy

Refused bequest

Contrived Complexity

Lazy Class /

Freeloader

Excessive Long

Identifiers

Excessive short

identifiers

UberCallback

Complex Conditionals

DRY

IoC

SoC

GRASP (Object

Oriented design)

Design Patterns

High Cohesion

CQRS

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

SOLID

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

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

SOLID

Single

Responsability

Open/Closed

Liskov

Substitution

Interface

Segregation

Dependency

Inversion

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

SOLID

Ca n’est pas parce que vous pouvez le faire que vous devez le faire

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

SOLID

Responsabilités Multiple Responsabilité Unique

public interface IBankAccount {string AccountNumber;decimal AccountBalance;

}

public interface IInterestRateCalculator {decimal CalculateInterest(IBankAccount account);

}

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;

}}

public class BankAccount{

public string AccountNumber { get; set; }

public decimal AccountBalance { get; set; }

public decimal CalculateInterest() {return 42M;

}}

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

SOLID

De la chirurgie n’est pas nécessaire pour mettre un manteau

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

public abstract class Geometrie {public abstract double Aire();

}

public class Cercle : Geometrie {public double Rayon { get; set; }

public override double Aire() {return Math.PI * this.Rayon * this.Rayon;

} }

public class Rectangle : Geometrie {public double Largeur { get; set; }public double Longueur { get; set; }

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());

}}

SOLIDNon ouvert pour extensions Ouvert pour extensions

public static double SommeAires(IEnumerable<Geometrie> geometries){

double aireTotale = 0d;

foreach (var geo in geometries){

if (geo is Cercle){

var cercle = (Cercle)geo;aireTotale += cercle.Rayon * cercle.Rayon *

Math.PI;}else if (geo is Rectangle){

//...}

}}

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

SOLID

S’il ressemble a un canard, cancane comme un canard, mais a besoin de

piles – vous avez certainement la mauvaise abstraction.

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

SOLID

public interface IDuck{

void Swim();}

public class Duck : IDuck {public void Swim() {}

}

void MakeDuckSwim(IDuck duck){

duck.Swim();}

public class ElectricDuck : IDuck {public void Swim() {

// Swim logic}

}

Que ce passe-t-il si l’on a pas allumé notre canard?

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

SOLID

Option 1 : Sans respecter les principes d’OpenClose

public interface IDuck{

void Swim();}

public class Duck : IDuck {public void Swim() {}

}

void MakeDuckSwim(IDuck duck){

duck.Swim();}

public class ElectricDuck : IDuck {public void Swim() {

// Swim logic}

}

Que ce passe-t-il si l’on a pas allumé notre canard?

void MakeDuckSwim(IDuck duck){

if (duck is ElectricDuck)((ElectricDuck)duck).TurnOn();

duck.Swim();}

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

SOLID

Option 2 : L’approche SOLID

public interface IDuck{

void Swim();}

public class Duck : IDuck {public void Swim() {}

}

void MakeDuckSwim(IDuck duck){

duck.Swim();}

public class ElectricDuck : IDuck {public void Swim() {

// Swim logic}

}

public interface IDuck{

void Swim();}

public class Duck : IDuck {public void Swim() {}

}

void MakeDuckSwim(IDuck duck){

duck.Swim();}

public class ElectricDuck : IDuck {public void Swim() {

if (!this.IsTurnedOn)return;

// Swim logic}

}

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

SOLID

Vous voulez que je branche ce composant, Où?

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

SOLIDpublic interface IOiseau {

void Voler();void Pondre();

}

public class Canard : IOiseau {public void Voler() { // ...}

public void Pondre() { // ...}

}

static void FaireVolerLesOiseaux(IEnumerable<IOiseau> oiseaux){

foreach (var oiseau in oiseaux)oiseau.Voler();

}

public class Manchots : IOiseau {public void Voler() {

throw new NotSupportedException();}

public void Pondre() {}

}

public interface IOiseau {void Pondre();

}

public interface IVolatile : IOiseau {void Voler();

}

public class Canard : IVolatile{public void Voler() { // ...}

public void Pondre() { // ...}

}

public class Manchots : IOiseau {public void Pondre() { // ...}

}

static void FaireVolerLesOiseaux(IEnumerable<IVolatile> oiseaux) {

foreach (var oiseau in oiseaux)oiseau.Voler();

}}

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

SOLID

Est-ce que vous brancheriez une lampe en faisant une soudure

directement sur le réseau électrique dans le mur?

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

SOLID

Méthode Créeant une dépendance

public class CoolSQLRepository{

public CoolThing GetThing(int id);}

public class CoolService{

public CoolThing GetCoolThing(int id){

var repository = new CoolSQLRepository();return repository.GetThing(id);

}}

public interface ICoolRepository {CoolThing GetThing(int id);

}

public class CoolService{

private ICoolRepository repository;

public CoolService(ICoolRepository repository){this.repository = repository;

}

public CoolThing GetCoolThing(int id) {return repository.GetThing(id);

}}

public class CoolSQLRepository : ICoolRepository {public CoolThing GetThing(int id);

}

Inversion de dépendance par constructeurd’injection

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

Demo Clean Code with Visual Studio 2012

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

Done = Tested!!

Demo : Développement d’une application Windows 8

avec Visual Studio 2012 : Scrum Pomodoro

SCRUM : Quand et Pourquoi?

Succès = SCRUM + Excellence Technique

Visual Studio 2012 ALM : La Solution et les Outils

AGENDA

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

TESTS FONCTIONNELS ET TECHNIQUES

Pourquoi Tester?

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

Ariane 5 Flight 501Le 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

Mais aussi pour éviter cela!

Page 47: Agilité, Productivité et Qualité au Centre avec Visual Studio 2012
Page 48: Agilité, Productivité et Qualité au Centre avec Visual Studio 2012
Page 49: Agilité, Productivité et Qualité au Centre avec Visual Studio 2012
Page 50: Agilité, Productivité et Qualité au Centre avec Visual Studio 2012
Page 51: Agilité, Productivité et Qualité au Centre avec Visual Studio 2012

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

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

Tests et Visual Studio 2012

Visual Studio 2012

Build and Lab

Management

Mock / Stub /

Shims / Fakes

Tests Unitaires

Tests d’intégration

Tests d’acceptance

Tests de

Performance

Unit Tests

UI Coded Tests

Performance /

Load Tests

Test cases

Types de Tests

Isolation

Automation

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

Principes TDD

TDD : Test Driven Development• Pratique qui consiste à écrire les tests unitaires

avant d’écrire le code d’implémentation• TDD est utilisé comme

• Une pratique de Design• Un moyen puissant pour éviter les

anomalies dans une application• Une garantie de l’écriture des tests• Techniques de non régression• Production de code plus robuste

Red

GreenRefactor

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

La Dynamique TDD / ATDD

FailPass

FailPass

FailPass

Automated Tests

Automated Tests

Sprint 1 Sprint 2 Sprint 3

Les équipes de développement performantes utilisent les test de non régression automatisés

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

Demo TDD with Visual Studio 2012

Page 56: Agilité, Productivité et Qualité au Centre avec Visual Studio 2012
Page 57: Agilité, Productivité et Qualité au Centre avec Visual Studio 2012

System Center

Office

Web Access

Windows Azure

RequirementsManagement

Test CaseManagement

ProjectManagement

Intellitrace In Production

Lab ManagementPreemptiveAnalytics

FeedbackManagement

New Enhanced

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

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

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

Presentation Pomodoro TechniqueLa 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).

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

Réunion de démarrage : Envisioning

Sketch : Croquis sur une serviette en papier Backlog : Liste des fonctionnalités sur une page de cahier

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

Création du Product Backlog avec

Web Access

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

Scrum Pomodoro Application

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

Demo SQL Server Data Tools / SQL AzureProductive Database Development

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

Demo PowerPoint Storyboarding

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

merci!

Scrum On!