Publicité
Publicité

Contenu connexe

Présentations pour vous(20)

Similaire à Formation Usine Logicielle gratuite par Ippon 2014(20)

Publicité
Publicité

Formation Usine Logicielle gratuite par Ippon 2014

  1. Usine logicielle Java L’industrialisation de la mise en production
  2. Ippon Technologies © 2014 Licence Cette formation vous est fournie sous licence Creative Commons AttributionNonCommercial- NoDerivatives 4.0 International (CC BY-NC-ND 4.0) Vous êtes libres de : Copier, distribuer et communiquer le matériel par tous moyens et sous tous formats Selon les conditions suivantes : ● Attribution : Vous devez créditer l'Oeuvre, intégrer un lien vers la licence et indiquer si des modifications ont été effectuées à l'Oeuvre. Vous devez indiquer ces informations par tous les moyens possibles mais vous ne pouvez pas suggérer que l'Offrant vous soutient ou soutient la façon dont vous avez utilisé son Oeuvre. ● Pas d’Utilisation Commerciale : Vous n'êtes pas autoriser à faire un usage commercial de cette Oeuvre, tout ou partie du matériel la composant. ● Pas de modifications : Dans le cas où vous effectuez un remix, que vous transformez, ou créez à partir du matériel composant l'Oeuvre originale, vous n'êtes pas autorisé à distribuer ou mettre à disposition l'Oeuvre modifiée. http://creativecommons.org/licenses/by-nc-nd/4.0/deed.fr
  3. Ippon Technologies © 2014 Ippon Formation en bref Pourquoi Ippon Technologies publie ses supports de formation ? Car Ippon participe à la communauté Java et Web et soutien le modèle open-source Le support théorique représente 40% du temps de formation, l'intérêt est dans les Travaux Pratiques et l'expert Ippon qui assure le cours
  4. Ippon Technologies © 2014 Pour nous contacter Pour nous contacter et participer à nos formations : ● Technique : formation@ippon.fr ● Commercial : nzago@ippon.fr Toutes les informations et les dates de formations sont sur notre site internet et notre blog: ● http://www.ippon.fr/formation ● http://blog.ippon.fr
  5. Ippon Technologies © 2014 Sommaire ● Introduction ● Le déploiement logiciel ○ Approche naïve ○ Problématiques ● Vers le déploiement continu ○ Grands principes ○ Solutions ● Le déploiement continu pas à pas ○ IDE ○ Versionnement & Gestion de configuration ○ Build ○ Intégration continue ○ Tests & Qualité du code ○ Bug tracking ○ Outils de déploiement & de monitoring
  6. Ippon Technologies © 2014 Introduction
  7. Ippon Technologies © 2014 Changement vs Stabilité (1) VS
  8. Ippon Technologies © 2014 Changement vs Stabilité (2) VS
  9. Ippon Technologies © 2014 Time to market vs Opportunités VS
  10. Ippon Technologies © 2014 Industrialisation du changement VS
  11. Ippon Technologies © 2014 Mise en production naïve Problèmes courants rencontrés Mise à jour des besoins Le déploiement logiciel
  12. Ippon Technologies © 2014 Une mise en production standard Développement Compilation Déploiement Intégration Validation / Recette manuelle Mise en production
  13. Ippon Technologies © 2014 Problèmes fréquemment rencontrés
  14. Ippon Technologies © 2014 Développement Mésinterprétation du cahier des charges Manque de configuration Ressources locales incompatibles avec la production Bugs
  15. Ippon Technologies © 2014 Compilation Quelles sources ? Quelles options de compilation ? Quelles dépendances de librairie ? Quelles versions ? Sur quelle plate-forme ? Qui est responsable ?
  16. Ippon Technologies © 2014 Déploiement Arrêt du service ? Copie du binaire au bon endroit (bon tomcat) Viabilité du fichier Traçabilité du fichier mis à disposition Communication quand à la disponibilité du livrable
  17. Ippon Technologies © 2014 Deploiement - Anti-pattern Un déploiement ? Quel déploiement ?
  18. Ippon Technologies © 2014 Intégration Le livrable n’est pas suffisamment configurable La configuration est mal faite ● Ressources inexistantes ● Ressources incomplètes ● Ressources pas à jour ● Mauvaise plate-forme cible ● Incompatibilités de version ● Mise à jour des données manquante/incomplète Elle nécessite une expertise technique Elle est fastidieuse en cas de plate-forme fortement redondante
  19. Ippon Technologies © 2014 Anti-pattern d’intégration Documentation fastidieuse Aller-retours Dev-Integration Modification de dernière minute Éléments de cluster hétérogènes Release de plus de quelques minutes
  20. Ippon Technologies © 2014 Recette Test volatiles ● non fiables ● non reproductibles ● incomplets Tâches rébarbatives, manuelles, hautement sujettes à l’ erreur Effet boite noire
  21. Ippon Technologies © 2014 Anti-pattern de recette Tests manuels
  22. Ippon Technologies © 2014 Mise en production Temps d’indisponibilité Comportement de l’application en condition réelle Multi-utilisateur ● Confidentialité des données ● Concurrence Tenue en charge Retour en arrière
  23. Ippon Technologies © 2014 Mise en production - Anti-pattern Temps d’indisponibilité excessif Issue imprévisible
  24. Ippon Technologies © 2014 Besoins mis à jour
  25. Ippon Technologies © 2014 Émergence de nouveaux besoins Une mise en production rapide, sans risque Visibilité des livrables : quoi, quand, où Visibilité de la disponibilité/performance Une mise en production doit devenir un processus automatisé, rapide, répétable et répété fréquemment, maîtrisé, prévisible, facilement inversable
  26. Ippon Technologies © 2014 Émergence de nouveaux besoins Identification du livrable ● Versionnement systématique Build automatique Validation / Non régression systématique ● Tests unitaires automatisés ● Tests d’intégration automatisés ● Tests fonctionnels automatisés ● Tests d’exploration
  27. Ippon Technologies © 2014 Émergence de nouveaux besoins Communication ● Centralisation des demandes d’amélioration / correction ● Statut des releases disponibles, des déploiements effectués ● Documentation type wiki
  28. Ippon Technologies © 2014 Émergence de nouveaux besoins Qualité Tests d’acceptance Tests de charge Métriques Automatisation du déploiement ...
  29. Ippon Technologies © 2014 Vers le déploiement continu
  30. Ippon Technologies © 2014 Principes du déploiement continu
  31. Ippon Technologies © 2014 Grands principes Processus fiable et répétable ● Automatisation systématique ● Versionnement systématique 3 grandes étapes : provisionner, installer, configurer
  32. Ippon Technologies © 2014 Grands principes Affronter les tâches pénibles
  33. Ippon Technologies © 2014 Grands principes “Bring Quality In”
  34. Ippon Technologies © 2014 Grands principes Fait = Démontré à l’utilisateur
  35. Ippon Technologies © 2014 Grands principes Responsabiliser toute l’équipe
  36. Ippon Technologies © 2014 Grands principes Amélioration Continue
  37. Ippon Technologies © 2014 Le déploiement continu pas à pas
  38. Ippon Technologies © 2014 Solutions Vers l’industrialisation logicielle ● Outillage ● Culture
  39. Ippon Technologies © 2014 Le déploiement continu pas à pas Environnement de Développement Intégré Versionnement Gestion de configuration Build tools Intégration continue Tests de non régression Bug Tracking Outils de déploiement Outils de monitoring
  40. Ippon Technologies © 2014 IDE Environnement de Développement Intégré
  41. Ippon Technologies © 2014 IDE - généralités Les caractéristiques d’un logiciel robuste : ● Code lisible ● Couverture de tests automatique raisonnable ● Architecture saine ● Outils de debugging performants ● Culture d’ingénierie qui valorise le refactoring
  42. Ippon Technologies © 2014 IDE - code lisible Formateur de code Application de convention de codage Détection de redondance de code
  43. Ippon Technologies © 2014 IDE - tests Création simplifiée de tests Lancement et résultat des tests Outil de visualisation de couverture de tests
  44. Ippon Technologies © 2014 IDE - debugging Debug en local Debug à distance Modification à chaud du code
  45. Ippon Technologies © 2014 IDE - refactoring Identification systématique des références (code et commentaire) Plugin de détection de code à factoriser/améliorer (PMD, Checkstyle)
  46. Ippon Technologies © 2014 IDE - interaction SCM (Source Code Management) Gestion des dépendances Outil de bug-tracking Serveur web, avec accès en mode debug Base de données
  47. Ippon Technologies © 2014 IDE - offre Intellij IDEA Eclipse Netbeans
  48. Ippon Technologies © 2014 IDE - Netbeans 1/2 Simple Robuste Lié à Oracle Fonctionne mieux avec Maven* et GlassFish
  49. Ippon Technologies © 2014 IDE - Netbeans 2/2 + Support des bases de données + Support web (HTML, CSS, Javascript, PHP) + Support de technologies avancées (JavaFX, Java 3D…) - Plugins moins nombreux - En retard sur les nouveaux langages - Utilisation de Maven quasi-obligatoire
  50. Ippon Technologies © 2014 IDE - Eclipse 1/2 Le plus répandu Communauté / contributeurs importants Nombreux plugins Couvre toutes les technologies Multi-lingue
  51. Ippon Technologies © 2014 IDE - Eclipse 2/2 + Versatile + Nombre impressionnant d’extensions disponibles + Compilation incrémentale + Visualisation instantanée des erreurs + Gestion des projets + Hautement configurable - Configuration spécifique - Lourdeur - Instabilité
  52. Ippon Technologies © 2014 IDE - Intellij IDEA 1/2 Stabilité Richesse du support “out-of-the-box” Nombreux plugins Support natif d’UML Intelligence contextuelle
  53. Ippon Technologies © 2014 IDE - Intellij IDEA 2/2 + Recherche et Navigation + Aide contextuelle pertinente + Support de Maven + Support d’Android + Import de projets avancé + Support enrichi des tests unitaires et de la couverture + Debugging avancé de technologies phares - N’affiche pas les erreurs des fichiers clos - Ergonomie spécifique - Payant en version commerciale
  54. Ippon Technologies © 2014 IDE TP Eclipse/IDEA/Netbeans
  55. Ippon Technologies © 2014 SCM Gestion de Code Source
  56. Ippon Technologies © 2014 SCM Stockage commun des ressources ● code ● configuration applicative ● librairies ● configuration serveur ● scripts ● schéma de la base de données ● … tout ce qui est utile à un déploiement
  57. Ippon Technologies © 2014 SCM - Services Centralise Versionne Résout les conflits Permet le catalogage (tagging)
  58. Ippon Technologies © 2014 SCM - Fonctionnalités Commit/Checkout Branching/Merging Diff current/tag/branch Intégrité des données
  59. Ippon Technologies © 2014 SCM - Usage Branching / merging ; deux approches : ● branche systématique ● tout sur le trunk
  60. Ippon Technologies © 2014 SCM - Usage
  61. Ippon Technologies © 2014 SCM - Solutions CVS SVN Git
  62. Ippon Technologies © 2014 Versionner Gérer les dépendances Gérer la configuration système Gérer les environnements Gestion de configuration
  63. Ippon Technologies © 2014 Gestion de conf - Versionner Aussi important que les sources Versionner Versionner tout Être à jour Messages explicites
  64. Ippon Technologies © 2014 Gestion de conf - Dépendances Dépendances externes Composants logiciels
  65. Ippon Technologies © 2014 Gestion de conf - Flexibilité Configuration et flexibilité ● Coût de développement ● Coût opérationnel ● Risques induits
  66. Ippon Technologies © 2014 Gestion de conf - Typologie Type de configuration ● build ● packaging ● deployment ● startup/runtime
  67. Ippon Technologies © 2014 Gestion de Configuration Applicative Configuration Applicative ● Ajout d’un nouvel environnement ● Nouvelle version de l’application ● Upgrade de release ● Relocalisation d’un serveur ● Le cas des VMs Validation de configuration ● Isolation ● Tests
  68. Ippon Technologies © 2014 Gestion de conf - Principes Principes ● Timing d’introduction des features ● Stockage des Variables et valeurs de configuration ● Automatisation de la configuration d’un environnement ● Catalogue des valeurs de configuration ● Nommage explicite ● Modularité et encapsulation ● DRY principle ● Minimalisme ● KISS principle ● Tester la configuration
  69. Ippon Technologies © 2014 Gestion de conf - Environnement Configuration environnement < Configuration application Outils de gestion de configuration Gestion du changement
  70. Ippon Technologies © 2014 Gestion de conf - Données Données et application diffèrent en 2 points ● volume ● cycle de vie
  71. Ippon Technologies © 2014 Gestion de conf - Données Préserver les données entre 2 release ● Database scripting ● Modification incrémentale Contrainte supplémentaire ● Rolling back Database et Zero downtime Release
  72. Ippon Technologies © 2014 Gestion de conf - Données Database scripting : ● Initialisation DB : script, versionnement ● Chaque Migration : script, versionnement Buts : ● Construire n’importe quelle version de la base ● formaliser la dépendance de version {base:application} ● Intégration au process de déploiement continu
  73. Ippon Technologies © 2014 Gestion de conf - Données Script d’initialisation ● Création de la structure ● Création des instances ● Création des schémas ● Alimenter les données de référence Pour la release de projet simple, le process suivant peut suffir : ● Suppression de la base N-1 ● Création de la base N ● Alimentation en donnée Projet plus complexe : Changement incrémentale
  74. Ippon Technologies © 2014 Gestion de conf - Données Migration Incrémentale Qu’est-ce : Roll-forward et Roll-back Comment : Versionner la base SQL Utilisation d’outil Flyway, Liquibase… Attention aux migrations dont le rollback est impossible
  75. Ippon Technologies © 2014 Migration Incrémentale Le cas des Migrations destructrices ● Copier le contenu de tables sous un autre nom versionné ● Backup/Restore
  76. Ippon Technologies © 2014 Gestion de conf - données Rolling back and zero downtime release ● Cacher les transactions et permettre leur rejeu ● Déploiement Blue-Green (prod-backup) ○ Backup Blue et restore sur Green ○ Migrate Blue ○ Rollback nécessaire : switch sur Green ● Découpler déploiement applicatif et migration de base ○ Faire en sorte que chaque version applicative fonctionne avec la version N et N+1 de la base de données
  77. Ippon Technologies © 2014 Build Tools
  78. Ippon Technologies © 2014 Build Tools Un build doit être : Indépendant de la plate-forme Reproductible Automatisable Configurable Gérer les dépendances Se connecter au SCM
  79. Ippon Technologies © 2014 Build Tools - L’offre Apache Ant Apache Maven Gradle
  80. Ippon Technologies © 2014 Build Tools - Ant “Modern build Tool”... qui date de 2000 Implémentation Java unifiant des commandes hétérogènes dans des environnements divers Une sorte de “make”, sans la complexité d’usage Flexible, adaptable, extensible Absence de contrainte Interaction avec un gestionnaire de dépendances
  81. Ippon Technologies © 2014 Ant - Cibles et points d’extension Create Directory Layout Ready to compile Generate source Compile depends extension-of depends
  82. Ippon Technologies © 2014 Build Tools - Maven Description du build du projet (POM) Description des dépendances du projet Conventions par l’exception Cycle de vie prédéfini Gestion de dépendances mutualisée (dépôt local/public) Nombreux plugins (appelés mojos pour Maven), que l’on peut développer soi-même
  83. Ippon Technologies © 2014 Maven lifecycle Validate Compile Test Package Install Verify Integration-test
  84. Ippon Technologies © 2014 Maven Profiles Séparer les tests Surcharger la configuration par environnement
  85. Ippon Technologies © 2014 Maven profiles - séparation des tests Product Integration Tests Functionnal Tests Parent Project … <modules> <product> </modules> <profiles> <profile id=”full-test”> <modules> <module>integration-tests</module> <module>functional-tests</module> </modules> </profile> </profiles> <profiles> <profile id=”integration-test”> <modules> <module>integration-tests</module> </modules> </profile> </profiles> ...
  86. Ippon Technologies © 2014 Maven profiles TP - Surcharge de configuration
  87. Ippon Technologies © 2014 Build Tools - Gradle Le meilleur de Ant et Maven DSL (Domain-Specific Langage) DAG (Directed Acyclic Graph) Conçu pour les projets très vastes Build incrémental Google Android OS
  88. Ippon Technologies © 2014 Gradle lifecycle <inclure un cycle de vie du build gradle>
  89. Ippon Technologies © 2014 Build Tools TP - Intégration de Maven dans Jenkins
  90. Ippon Technologies © 2014 Intégration Continue
  91. Ippon Technologies © 2014 Commit Stage Pipeline de déploiement Code analysis Build Configuration Managment SCM Intégration Continue Automatic QA Test Exploratory QA Test Capacity / Load Test UAT / Demo Production IDE Unit Test Test coverage Artifact
  92. Ippon Technologies © 2014 Intégration Continue - Tests Tests unitaires Tests d’intégration Tests fonctionnels Tests d’exploration
  93. Ippon Technologies © 2014 Test unitaire Tester des algorithmes isolés Valider les règles de gestion unitaires Prévenir les risques de régression Code testable = Code mieux pensé
  94. Ippon Technologies © 2014 Test unitaire - Solutions JUnit + Mockito ou EasyMock Spock + Groovy DEMO
  95. Ippon Technologies © 2014 Intégration Continue TP - Tests sous Jenkins
  96. Ippon Technologies © 2014 Test d’intégration Vérifier le chargement du contexte du cadre applicatif (Spring, Java EE, etc.) Repenser son cloisonnement par technologie Mettre à l’épreuve les transactions
  97. Ippon Technologies © 2014 Test d’intégration - Solutions Spring TestContext Framework Arquillian DEMO
  98. Ippon Technologies © 2014 Test d’intégration - Solutions Spring TestContext Framework @RunWith(SpringJUnit4ClassRunner.class) // specifies the Spring configuration to load for this test fixture @ContextConfiguration("daos.xml") public final class HibernateTitleDaoTests { // this instance will be dependency injected by name @Resource private HibernateTitleDao titleDao; public void testLoadTitle() throws Exception { Title title = this.titleDao.loadTitle(new Long(10)); assertNotNull(title); } }
  99. Ippon Technologies © 2014 Test d’intégration - Solutions Test 1 Test 2 Test Suite 1 Test 1 Test 2 Test Suite 2 chargement du contexte suppression du contexte chargement du contexte suppression du contexte
  100. Ippon Technologies © 2014 Test d’intégration - Solutions Spring TestContext Framework - astuces ● Charger des contextes allégés ● @DirtiesContext ● @IfProfileValue
  101. Ippon Technologies © 2014 Test d’intégration - Solutions Arquillian ● Conteneur sur mesure ● ShrinkWrap : artifact sur mesure
  102. Ippon Technologies © 2014 Test fonctionnel Jouer des scénarios complets Tester l’IHM au travers de laquelle on atteint toutes les couches applicatives Valider les règles de gestion non unitaires Non régression
  103. Ippon Technologies © 2014 Test fonctionnel - Solution Selenium 2 (webdriver, HQ et IDE) DEMO
  104. Ippon Technologies © 2014 Tests fonctionnels TP - Selenium 2
  105. Ippon Technologies © 2014 Tests Aller plus loin
  106. Ippon Technologies © 2014 Tests - Non régression Pierre angulaire de la confiance qualité Couvre toute l’application Systématisation Maintenance
  107. Ippon Technologies © 2014 Tests - Load Test Teste l’application déployée Simule la charge attendue par l’application Les statistiques de performance comme outils de non- régression
  108. Ippon Technologies © 2014 Tests - Stress Test Teste l’application déployée Augmente la charge pour identifier les limites
  109. Ippon Technologies © 2014 Tests - Couverture de code Indice quant à la quantité de code testé 100% n’est pas un objectif Favoriser le code sensible
  110. Ippon Technologies © 2014 Couverture de code - Solution Emma -> Jacoco Cobertura Clover Cobertura
  111. Ippon Technologies © 2014 Qualité
  112. Ippon Technologies © 2014 Qualité du code Homogénéiser le code Les sept péchés capitaux du développement : ● Duplication ● Convention d’écriture ● Manque de couverture ● Bugs potentiels courants ● Complexité ● Documentation ● Conception
  113. Ippon Technologies © 2014 Qualité du code - Concepts Analyse statique du code Analyse Dynamique Profilers Memory Tools Monitoring Tools
  114. Ippon Technologies © 2014 Qualité du code - Précautions Faux Positifs Adaptation au projet Règles personnelles Legacy projects
  115. Ippon Technologies © 2014 Qualité du code - Solutions FindBugs PMD CheckStyle et Jalopy Coverity SonarQube
  116. Ippon Technologies © 2014 Qualité du code - Recommandations Les premières analyses ne seront pas pertinentes L’analyse statique seule est insuffisante Automatiser l’analyse de code (et l'exécuter souvent) Communiquer sur la qualité Éviter l’excès de zèle Adapter l’analyse à chaque projet Ne pas oublier les priorités
  117. Ippon Technologies © 2014 Qualité du code TP Sonar
  118. Ippon Technologies © 2014 Bug Tracking
  119. Ippon Technologies © 2014 Bug Tracking Disposer de métriques sur les problèmes découverts Communiquer sur la documentation projet
  120. Ippon Technologies © 2014 Bug Tracking - besoins Classer les tickets Gérer les utilisateurs et leurs droits Distinguer les projets/releases Être connecté au SCM Faciliter la communication Constituer un tableau de bord
  121. Ippon Technologies © 2014 Bug Tracking - cycle de vie NEW ASSIGNED VERIFIEDREOPEN CLOSED RESOLVED FIXED DUPLICATE WONT FIX WORK FOR ME INVALID REMIND LATER
  122. Ippon Technologies © 2014 Bug Tracking - Livraison
  123. Ippon Technologies © 2014 Bug Tracking - Solutions BugZilla Jira Mantis Redmine Trac (+ Agilo)
  124. Ippon Technologies © 2014 Déploiement
  125. Ippon Technologies © 2014 Déploiement - Scripting One script to rule them all Un script principal pour tous les environnements
  126. Ippon Technologies © 2014 Déploiement - Le choix des armes Utiliser la bonne technologie de déploiement Utiliser des outils de packaging éprouvés
  127. Ippon Technologies © 2014 Déploiement - objectif et méthode Mise à niveau ou Installation complète Déploiement = processus idempotent Évolution incrémentale
  128. Ippon Technologies © 2014 Déploiement à grande echelle
  129. Ippon Technologies © 2014 Déploiement à grande échelle
  130. Ippon Technologies © 2014 Déploiement - astuces Automatisation ● Chemins relatifs ● Éliminer les étapes manuelles
  131. Ippon Technologies © 2014 Déploiement - astuces Versionning ● Marquer les binaires avec la version SCM ● Ne pas commiter les binaires : Nexus, Archiva
  132. Ippon Technologies © 2014 Déploiement - astuces Tests ● Test failed != Build Failed ● Smoke tests
  133. Ippon Technologies © 2014 Deploiement - Puppet Logiciel d’automatisation qui définit et vérifie l’état d’une infrastructure tout au long du cycle de développement ● Définir l’état attendu d’un serveur ● Classes, module ● Piocher dans l’existant
  134. Ippon Technologies © 2014 Déploiement - Puppet ● Fonctionne en Client/Serveur ● Chaque serveur de l’infrastructure est un client (puppet agent) ● Le serveur puppet (puppet master) héberge les modules ● Les modules sont rendu paramétrable pour s’ajuster sur chaque client ● Chaque client possède les modules qui le concerne ● A chaque run puppet, un différentiel est établi entre la configuration définie sur le master et ce que rapporte les agents.
  135. Ippon Technologies © 2014
  136. Ippon Technologies © 2014 Déploiement - Puppet TP Puppet : Configurer Apache
  137. Ippon Technologies © 2014 Monitoring
  138. Ippon Technologies © 2014 Superviser quoi ? Les temps d’exécution... ● de service ● de service distant L’occupation mémoire Les ressources partagées ● pool de threads ● pool de connexions ● DLQ et queue sevrée/surchargée Les succès/échecs
  139. Ippon Technologies © 2014 Monitoring Java Logs internes ● choisir le niveau et le support (fichiers séparés, voire en base de données) Standard JMX ● exposition de propriétés du SI ● de nombreuses API phares le mettent en oeuvre nativement Surveillance de la JVM ● analyse des performances et de l’occupation mémoire
  140. Ippon Technologies © 2014 Exploiter le monitoring ● Rendu graphique des métriques, dashboard (ex: Graphite) ● Seuils d’alerte sur des métriques réseau, souvent à l’ aide d’agents (ex: Zabbix) ● Analyse temps réel de la JVM et suivi fin en cas de dépassement des moyennes constatées (ex: AppDynamics) ● Exploitation de logs (ex: splunk, cacti, loggly, logstash, kibana, nagios…)
  141. Ippon Technologies © 2014 Monitoring Sur mesure Diagnostic temps réel Alerte
  142. Ippon Technologies © 2014 Monitoring TP Instrumentation et exploitation
  143. blog.ippon.frippon.fr atomes.com @ippontech contact@ippon.fr
Publicité