74
Industrialis ation des développemen ts (la recette)

Industrialisation des développements logiciels

Embed Size (px)

Citation preview

Page 1: Industrialisation des développements logiciels

Industrialisation des

développements

(la recette)

Page 2: Industrialisation des développements logiciels

Hello!Je suis Sylvain Leroy

Vous pouvez me trouver sur :[email protected] / @sleroy0 about.me/sylvain_leroy

2007

Ingénieur Recherche

Informatique

2011

Création Société Tocea

2014

Acquisition Tocea Groupe Metrixware

CTO Tocea

2015

Acquisition EchoesGroupe Metrixware

CTO Metrixware

Projet Recherche

Page 3: Industrialisation des développements logiciels

Ma Société

▧Assistance Qualité / Recette applications

▧Modernisation automatique d’applications

▧Offre Intégration Usine Logicielle

▧Formateurs Bonnes Pratiques /Cleancode / Qualité / Devops

▧Distributeur Outils de qualité de code (Optimyth)

▧Komea Dashboard (Pilotage développements par la qualité/productivité)

▧Offres Cobol/Mainframe

Page 4: Industrialisation des développements logiciels

TOP 20 Justifications les plus courantes

▧ Cela fonctionne sur ma machine▧ Ou étiez-vous quand le programme a crashé ?▧ Pourquoi voulez-vous faire ceci ainsi ?▧ Vous n’utilisez pas la bonne version du système d’exploitation▧ Même si cela ne fonctionne pas, est-ce gênant ?▧ Avez vous passé l’antivirus ?▧ Quelqu’un a du changé mon code▧ Cela fonctionne mais cela n’a pas été testé▧ Ceci ne peut être à l’origine de Cela!▧ Je ne peux pas tout tester!▧ C’est juste une coïncidence malchanceuse▧ Vous ne devez pas utiliser la dernière version du logiciel▧ Je n’ai pas touché à ce module depuis des lustres!▧ Il doit avoir quelque chose de bizarre dans vos données▧ Qu’avez vous pu taper pour faire planter le logiciel ?▧ Cela doit être un problème matériel▧ Comment est-ce possible ?▧ Cela fonctionnait hier▧ Cela fonctionne sur ma machine▧ Cela n’avait jamais cela avant▧ C’est bizarre▧ C’est normal, c’est une fonctionnalité

Page 5: Industrialisation des développements logiciels

L’industrialisation du processus de développement

Page 6: Industrialisation des développements logiciels

Quelles méthodologies et

outils pour démarrer

un nouveau développement ?

Page 7: Industrialisation des développements logiciels

Quels sont les pré-requis pour un projet de développement chez Google ?

Page 8: Industrialisation des développements logiciels
Page 9: Industrialisation des développements logiciels

Un outil de gestion des exigences et

des tests (réclamation

s..)

Page 10: Industrialisation des développements logiciels

Tracage des exigences

Identifiez les changements, la raison des changements et l’époque

Page 11: Industrialisation des développements logiciels

Evaluation des spécifications

Faîtes évaluer les spécifications par les développeurs

Page 12: Industrialisation des développements logiciels

Estimez le poids des exigences

Estimez la charge pour chaque exigence, visez 10 à 15j maximum.

Page 13: Industrialisation des développements logiciels

un dépôt de source unique qui contient tout

Page 14: Industrialisation des développements logiciels

Stockez tout!Utilisez votre dépôt de source pour stocker fichiers, sources, scripts, données.

Page 15: Industrialisation des développements logiciels

Définissez votre workflow

Parce que GIT vous en offre un tout cuit

Page 16: Industrialisation des développements logiciels
Page 17: Industrialisation des développements logiciels

Utilisation de Git + GitFlow

https://danielkummer.github.io/git-flow-cheatsheet/

Page 18: Industrialisation des développements logiciels
Page 19: Industrialisation des développements logiciels
Page 20: Industrialisation des développements logiciels

Les différentes GatesTests des fonctionnalités critiques (scénario nominal)Charge <= 1J

Q1

Tests complets : toutes les options sont testées, toutes les interactions complexes Charge : (max 1 semaine par env)

Q2Q3

Tests de performance , sécuritéCharge : 1 à 2 semaine par env

Qg

Analyse qualimétrique du programme.Règles de programmation, métriquesCharge : machine < 4h.

Page 21: Industrialisation des développements logiciels

Casser un build lors de l’analyse qualimétrique

▧Installation du plugin BuildBreaker de Sonar

▧Définition d’alertes sur les métriques ciblées

Page 22: Industrialisation des développements logiciels

Un système de

gestionnaire de sources distribué

Page 23: Industrialisation des développements logiciels

Un serveur d’intégration continue

Page 24: Industrialisation des développements logiciels

Ne négligez pas le temps de build !Parce que personne n’aime attendre.

Page 25: Industrialisation des développements logiciels

L’intégration continue

est une machine, maintenez-la!

Inspirez-vous de la maintenance industrielle (MTBF, MTTM, Availability)

Page 26: Industrialisation des développements logiciels

Un processus

de fabrication

Page 27: Industrialisation des développements logiciels

Le pipeline de

déploiement

Page 28: Industrialisation des développements logiciels
Page 29: Industrialisation des développements logiciels

Build Pipeline plugin

Page 30: Industrialisation des développements logiciels

Jenkins Workflow plugin( $$$)

Page 31: Industrialisation des développements logiciels

Documentez votre processus de fabrication

Page 32: Industrialisation des développements logiciels

Un serveur de

documentation

centralisé

Page 33: Industrialisation des développements logiciels

Générez votre documentation

Utilisez un format de documentation pour la génération automatique

Page 34: Industrialisation des développements logiciels

Versionnez votre documentation

Stocker votre documentation sur votre SCM

Page 35: Industrialisation des développements logiciels

Un dépôt Maven/GEM/

Deb

Page 36: Industrialisation des développements logiciels

Rationalisez les technologies

Identifier et rationalisez les technologies, suivez les évolutions

Page 37: Industrialisation des développements logiciels

Utilisez un outil de

build (Gradle,

maven, ..)

Page 38: Industrialisation des développements logiciels

Privilégiez les outils de scripting

Parce que coder un plugin Maven ce n’est pas sympa du tout (et maven assembly, release…)

Page 39: Industrialisation des développements logiciels

Une architecture d’entreprise

Page 40: Industrialisation des développements logiciels

Découvrez les outils comme Puppet, Ansible, Docker, ...

Virtualisez vos

environnements

Page 41: Industrialisation des développements logiciels

Gestion des livraisons et des notes

de livraison

Page 42: Industrialisation des développements logiciels

Tracez les modifications!

Associez les numéros de tickets aux messages de commits

Page 43: Industrialisation des développements logiciels

Gestion des livraisons▧Les dates de release

doivent être planifiées selon une fréquence régulière

▧La procédure et l’outillage de release doivent être documentés

▧Identifiez et documentez tous les éléments liés à une unité de déploiement

▧La fonction de release doit être réalisée par une entité autonome

▧Les unités de déploiement doivent être construites tôt

▧Le processus de déploiement doit être testé avant le déploiement réel.

▧Prévoyez un plan de restauration

▧Utilisez des outils▧Gérez et configurer les

outils

Page 44: Industrialisation des développements logiciels

Pas de contrainte sur le choix

de l’IDE

Page 45: Industrialisation des développements logiciels

Un logiciel de suivi de

bugs(bugtracker)

Page 46: Industrialisation des développements logiciels

Personnalisez le workflow

N’oubliez pas les champs nécessaires pour calculer les KPIs par la suite!

Page 47: Industrialisation des développements logiciels

Root Cause Analysis

Indispensable pour évaluer la qualité de votre processus

Page 48: Industrialisation des développements logiciels

Testez votre application!

Automatisez autant que possible

Page 49: Industrialisation des développements logiciels

Mesurer la couverture

de code

Page 50: Industrialisation des développements logiciels

Quels outils de couverture de code ?

Cobertura Atlassian Clover

Jacoco Code Cover

https://confluence.atlassian.com/display/CLOVER/Comparison+of+code+coverage+tools

Page 51: Industrialisation des développements logiciels

<project> ... <reporting> <plugins> ... <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>cobertura-maven-plugin</artifactId> <version>2.7</version> </plugin> </plugins> </reporting></project>

PetClinic Maven projecthttps://github.com/spring-projects/spring-petclinic/

Page 52: Industrialisation des développements logiciels

Exemple de rapport

Page 53: Industrialisation des développements logiciels

allprojects { apply plugin: 'jacoco' repositories { jcenter() } jacoco { toolVersion = '0.7.1.201405082137' }}

task jacocoRootReport(type: org.gradle.testing.jacoco.tasks.JacocoReport) { dependsOn = subprojects.test sourceDirectories = files(subprojects.sourceSets.main.allSource.srcDirs) classDirectories = files(subprojects.sourceSets.main.output) executionData = files(subprojects.jacocoTestReport.executionData) reports { html.enabled = true xml.enabled = true csv.enabled = false }}

PetClinic Gradle projecthttps://github.com/sleroy/spring-petclinic

Page 54: Industrialisation des développements logiciels

Rapport obtenu

Page 55: Industrialisation des développements logiciels

Pour les projets open

source : Coveralls.io

Page 56: Industrialisation des développements logiciels

Employez des méthodologies

de tests (TDD,BDD)

Page 57: Industrialisation des développements logiciels

“Test Driven Development :

Développement piloté par les tests

Page 58: Industrialisation des développements logiciels

Crédit : alphatalk.vn

Page 59: Industrialisation des développements logiciels

Astuces Tests unitaires▧Exécuter les tests en mémoire▧Ecrire les tests de manière à ce qu’ils soient

indépendants▧Les tests doivent être isolés (pas d’effet de bord)▧Exécuter chaque test (pas d’@Ignore ou de /**/)▧Ecrire chaque test sous la forme d’une assertion (ou

d’un prédicat)▧Ecrire chaque test avec l’assertion la plus forte possible▧Assurez-vous que le code requis pour les tests et

séparé du code en production▧Refactorez avant de déboguer▧Ajoutez un timeout▧Nommez bien vos tests▧Utilisez des exceptions spécifiques▧Rendez vos tests exigeants

Page 60: Industrialisation des développements logiciels

“Behaviour Driven Development :

Développement piloté par les tests

Page 61: Industrialisation des développements logiciels
Page 62: Industrialisation des développements logiciels
Page 63: Industrialisation des développements logiciels

Multipliez les niveaux

de tests

Page 64: Industrialisation des développements logiciels

▧Tests unitaires▧Tests d’intégration▧Tests fonctionnels▧Tests d’acceptation▧Smoking Tests▧Tests de déploiement▧Tests du système▧Tests de performance▧Tests de sécurité▧Tests manuels

Les différents tests :

Page 65: Industrialisation des développements logiciels
Page 66: Industrialisation des développements logiciels

80%Couverture de code optimale à

atteindre(Pour les système ne menaçant pas

la vie humaine)

Page 67: Industrialisation des développements logiciels

50%Le nombre de défauts en moyenne

supprimés par les (seuls) tests unitaires

Page 68: Industrialisation des développements logiciels

▧Au dessus, le coût de détection des bugs est trop important

▧Intégrés directement à Eclipse, Maven ..▧Utilisation de JUnit ou TestNG▧Suivre les évolutions (régulières) des

frameworks qui simplifient l’écriture▧Les tests unitaires c’est du code, écrivez-

les bien!

Tests unitaires

Page 69: Industrialisation des développements logiciels

▧Approche BigBang▧Approche ToP/Down▧Approche Bottom/Up▧Problématique des bases de données :

mémoire, embarquée ou simple fichier ?▧Problématique de simulation des web-

services : bouchons, stubs,...

Tests d’intégration

Vérifier le fonctionnement des “grands” composants de l’architecture

Page 70: Industrialisation des développements logiciels

▧TF : fonctionnalités du logiciel / aux spécifications.

▧TS : fonctionnalités du logiciel / aux exigences clients.

▧Tests réalisés en boîte noire à partir d’un livrable de l’IC

▧4 Vérifications : Tests des fonctionnalités critiques (Smoke

Testing)Tests de validation de résultats (Sanity Testing)Tests de non-régressionTests d’ergonomie / utilisabilité

Tests fonctionnels / système

Page 71: Industrialisation des développements logiciels

▧Créés généralement par le client▧Exprimés avec son vocabulaire (DDD)▧Tests boîte noire▧Utilisation d’outils comme Fitnesse

peuvent simplifier l’expression de ces tests.

Tests d’acceptation

Page 72: Industrialisation des développements logiciels

▧Utilisation d’un outil de gestion d’exigences et de scénarios de tests

▧Un Cas de test doit avoir un objectif▧Une description de l’environnement de

test est requise▧L’installation de l’environnement de tests

doit être vérifiée▧Chaque cas de test doit être associé à un

ou plusieurs requirements▧Un cas de test doit être simple et

déterministe

Tests manuels

Page 73: Industrialisation des développements logiciels

(A suivre)Contrôler la qualité du code de

l’application (et pas que…)

Page 74: Industrialisation des développements logiciels

Merci

Vous pouvez me trouver :@sleroy0

[email protected]