Visual Studio 2012 constitue véritablement une release majeure de la plateforme de développement ALM de Microsoft. On note un momentum important autour de l’ALM et des méthodes Agiles en France depuis 2 ans. Au cours de cette session, vous découvrirez, au travers de démonstrations, les fonctionnalités clés de la plateforme pour augmenter la productivité de vos équipes de développement tant pour ce qui concerne les outils de développement que le support de l’agilité et la qualité des incréments de produits livrés. Avec le développement d’applications modernes avec Windows 8, l’intégration full ou hybrid Cloud avec Windows Azure, le contrôle de qualité du code avec les outils Code Analysis, ou encore Code Clone Analysis, l’analyse des dépendances et le profiler de performance pour détecter au plus tôt les goulots d’étranglement. Sera abordé également le nouvel environnement de travail optimisé pour le développeur dans Team Explorer avec la gestion du travail en cours, les processus de Code Review et de Feedback Request ainsi que les fonctions de Suspend Resume. Egalement, La planification Agile et le travail en mode SCRUM avec les outils intégrés à la nouvelle version du Web Access. Enfin le bénéfice de la nouvelle version du centre qualité sera démontré pour assurer un haut niveau de qualité délivré avec Test & Lab Mangement, des scénarios BDT s’appuyant sur des tests unitaires et des Tests d’interfaces automatisés et les fonctions de Remote Device testing pour les tablettes Windows 8. Au travers d'un retour d'expérience client, nous porterons également un focus particulier sur les bénéfices obtenus dans le cas d’un contexte offshore à la suite d’une migration vers TFS 2012
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%
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
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
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);
}
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
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
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