Scub Foundation, usine logicielle Java libre

78
Scub Foundation Usine logicielle Java libre http://www.scub-foundation.org Stéphane Traumat http://about.me/straumat

description

Une usine logicielle est un ensemble d’outils pré-configurés, de frameworks, de conventions, de processus, de documentations et de modèles de projets qui structurent les développeurs et leurs développements. L’objectif est d’automatiser au maximum la production et la maintenance des applications afin d’améliorer leur qualité et le « time to market ».

Transcript of Scub Foundation, usine logicielle Java libre

Page 1: Scub Foundation, usine logicielle Java libre

Scub Foundation

Usine logicielle Java librehttp://www.scub-foundation.org

Stéphane Traumathttp://about.me/straumat

Page 2: Scub Foundation, usine logicielle Java libre

Agenda

● Qui sommes nous ?● Développement logiciel : notre constat.● Les étapes d'un projet.● Présentation de l'architecture SOA.● Qu'est-ce qu'une usine logicielle ?● Outil clé : Maven.● Développement d'un projet.● Outils tiers.● Questions.

Page 3: Scub Foundation, usine logicielle Java libre

Qui sommes nous ?

Page 4: Scub Foundation, usine logicielle Java libre

Notre métier & notre objectif

● Scub : spécialisé dans le développement Java et l'Open Source.

● Notre métier : Fournir du conseil et des applications sur mesure afin de résoudre les problèmes de nos clients.

● Notre objectif : Accélérer la transformation des idées de nos clients en solutions logicielles.

Page 5: Scub Foundation, usine logicielle Java libre

Nos moyens

● Une équipe de 20 personnes basée à Angoulême (2h15 de Paris) et spécialisée dans le développement au forfait.

● 10 ans de réalisation de projets et de maintenance d'applications.

● Membre du groupe Arrow, 120 personnes basées à Paris, Londres, Bruxelles, La Rochelle, Angoulême et Tunis.

Page 6: Scub Foundation, usine logicielle Java libre

Développement logiciel : notre constat

Page 7: Scub Foundation, usine logicielle Java libre

Un constat : Deux difficultés à gérer

Le développement doit être

incrémental pour gérer lesincertitudes.

Le développement doit être

industrialisé pour gérer lacomplexité.

Scrum Scub Foundation

Page 8: Scub Foundation, usine logicielle Java libre

Les étapes d'un projet

Page 9: Scub Foundation, usine logicielle Java libre

Étape 1 : Maquettage avec le client

Réalisation de maquettes avec le client et ses utilisateurs.

● Avantage 1 : On se met d'accord avec le client sur ce qu'il veut.

● Avantage 2 : On implique les utilisateurs finaux dans le projet.

● Avantage 3 : Pas d'effet tunnel.

Page 10: Scub Foundation, usine logicielle Java libre

Maquette d'écran réalisée avec Balsamiq (http://www.balsamiq.com/)

Page 11: Scub Foundation, usine logicielle Java libre

Écriture collaborative du cahier des charges dans un wiki.

● Avantage 1 : Travail en commun sur un même document.

● Avantage 2 : Pas d'échange de documents par email.

● Avantage 3 : Gestion des versions et des auteurs.

Étape 2 : Rédaction du cahier des charges

Page 12: Scub Foundation, usine logicielle Java libre

Cahier des charges du projet réalisé avec Dokuwiki (http://www.dokuwiki.org)

Page 13: Scub Foundation, usine logicielle Java libre

Découpage en lots du projet, planification des lots, livraison et démonstration toutes les 4 semaines.

● Avantage 1 : Démarrage rapide.● Avantage 2 : Possibilité d'adapter le projet

au fur et à mesure.● Avantage 3 : Pas d'effet tunnel.

Étape 3 : Découpage et planification

Page 14: Scub Foundation, usine logicielle Java libre

Mise en place du projet sur les serveurs de production du client par nos équipes de développement.

Étape 4 : Livraison en production

Page 15: Scub Foundation, usine logicielle Java libre

Présentation de l'architecture SOA

Page 16: Scub Foundation, usine logicielle Java libre

Principe des architectures SOA

Mettre en place une Architecture OrientéService (SOA) consiste à bâtir des services(fonctions) qui vont pouvoir être utilisés parl'ensemble du système d'information.

Exemple : Une fonction creerDevis() qui va permettre à n'importe qu'elle application du système d'information (CRM, site web, applications mobiles, extranet...) de créer un devis.

Page 17: Scub Foundation, usine logicielle Java libre

Architecture SOA

Page 18: Scub Foundation, usine logicielle Java libre

Schéma du système d'information de l'un de nos clients

Page 19: Scub Foundation, usine logicielle Java libre

● Avantage 1 : Une fonction ainsi développée est utilisable par toutes les applications et dans tous les langages.

● Avantage 2 : Le service n'étant développé qu'une fois, il est plus simple de contrôler sa qualité et de valider son fonctionnement.

● Avantage 3 : Les développeurs "utilisateurs" n'ont pas à connaître l'implémentation (réduction de la complexité).

Architecture orientée serviceAvantages

Page 20: Scub Foundation, usine logicielle Java libre

Qu'est ce qu'une usine logicielle ?

Page 21: Scub Foundation, usine logicielle Java libre

Notre définition d'une usine logicielle

Une usine logicielle est un ensemble d’outils pré-configurés, de frameworks, de conventions, de processus, de documentations et de modèles de projets qui structurent les développeurs et leurs développements.

L’objectif est d’automatiser la production et la maintenance des applications afin d’améliorer leur qualité et le « time to market ».

Page 22: Scub Foundation, usine logicielle Java libre

Objectifs de l'usine logicielle (1/3)

● Ne pas réinventer la roue en intégrant le meilleur de l’Open Source (Eclipse, Jetty, Hibernate, Spring, GWT, JUnit…).

● Disposer de modèles de projets pour chaque type d’applications (noyau, web, mobile…) avec, à chaque fois, une structure standardisée (configuration, scripts d’alimentations, sécurité…).

Page 23: Scub Foundation, usine logicielle Java libre

Objectifs de l'usine logicielle (2/3)

● Avoir des tâches automatisées pour l’ensemble des processus du cycle de vie du projet.

● Gestion automatique des dépendances / librairies / versions.

● Gestion des différents environnements et de leurs configurations (Test / Développement / Pré production / Production…).

Page 24: Scub Foundation, usine logicielle Java libre

Objectifs de l'usine logicielle (3/3)

● Développement SOA (Architecture Orienté Service).

● Une documentation complète qui permet à un développeur de se mettre rapidement au travail. Ceci afin de gérer la croissance des équipes et le turn-over.

Page 25: Scub Foundation, usine logicielle Java libre

Outil clé : Maven

Page 26: Scub Foundation, usine logicielle Java libre

Un outil structurant : Maven

Maven est un outil pour la gestion et l'automatisation de la production des projetslogiciels.

L'objectif de Maven est de simplifier le processus de fabrication d'un logiciel.

Page 27: Scub Foundation, usine logicielle Java libre

Maven - Fonctionnalités

● Permet de définir la configuration d'un projet dans un fichier XML (qui peut lui même hériter d'un autre fichier).

● Permet de forcer les développeurs à utiliser une structure de projet et des taches communes.

● Permet de gérer les dépendances vers des projets externe ou interne.

Page 28: Scub Foundation, usine logicielle Java libre

Exemple de fichier de configuration Maven

Page 29: Scub Foundation, usine logicielle Java libre

Structure des dossiers d'un projet Maven

Page 30: Scub Foundation, usine logicielle Java libre

Tâches d'un projet Maven

Page 31: Scub Foundation, usine logicielle Java libre

Gestion des dépendances avec Maven

Page 32: Scub Foundation, usine logicielle Java libre

Développement d'un projet

Page 33: Scub Foundation, usine logicielle Java libre

Le socle propose un ensemble de modèles de projets : ● Noyau de service.● Application GWT.● Application Spring MVC.● Application webservices.● Application batch.

Nous allons développer un îlot de service !

Développement d'un projetCréation du projet via Maven

Page 34: Scub Foundation, usine logicielle Java libre

Choix de l'archetype de projet

Page 35: Scub Foundation, usine logicielle Java libre

Développement d'un projetNoyau de service = deux projets

core-interfaces

Contient seulement les interfaces services et les DTO échangées par ces interfaces.

core-implementations

Contient l'implémentation de core-interfaces.

Page 36: Scub Foundation, usine logicielle Java libre

Développement d'un noyauStructure des deux projets

core-interfaces core-implementations

Page 37: Scub Foundation, usine logicielle Java libre

Développement d'un noyauCouche base de données

Page 38: Scub Foundation, usine logicielle Java libre

Développement d'un noyauCouche base de données

Gère le stockage des données (select, update, delete et insert seulement).

En production : PostgreSQL préféré.En développement : HyperSQL.

Avantages : Indépendance vis à vis de la base de données.

Page 39: Scub Foundation, usine logicielle Java libre

Développement d'un noyauCouche modèle

Page 40: Scub Foundation, usine logicielle Java libre

Développement d'un noyauCouche modèle

Représente les données persistantes de l'application avec des objets Java simples.

Utilisation d'Hibernate pour gérer le mappingObjet / Relationnel.

Avantages : Non intrusif / Indépendance.

Page 41: Scub Foundation, usine logicielle Java libre

Développement d'un noyauCode source du modèle

Page 42: Scub Foundation, usine logicielle Java libre

Développement d'un noyauCouche d'accès aux données

Page 43: Scub Foundation, usine logicielle Java libre

Développement d'un noyauCouche d'accès aux données

Abstrait et encapsule l'accès aux données.

Utilisation d'Hibernate et Spring.

Avantages : Découplage entre interfaces etimplémentations mais aussi séparation ducode métier et du code technique.

Page 44: Scub Foundation, usine logicielle Java libre

Développement d'un noyauInterface du DAO

Page 45: Scub Foundation, usine logicielle Java libre

Développement d'un noyauImplémentation du DAO

Page 46: Scub Foundation, usine logicielle Java libre

Développement d'un noyauDéclaration du DAO

Page 47: Scub Foundation, usine logicielle Java libre

Développement d'un noyauCouche service

Page 48: Scub Foundation, usine logicielle Java libre

Développement d'un noyauCouche service

Contient la logique métier de l'application.

Elle utilise la couche DAO pour accéder auxdonnées. Elle est testée grace à JUnit etEclemma.

Couche indépendante des technologies sous-jacentes.

Page 49: Scub Foundation, usine logicielle Java libre

Développement d'un noyauDéclaration du DTO

Page 50: Scub Foundation, usine logicielle Java libre

Développement d'un noyauDéclaration de l'interface

Page 51: Scub Foundation, usine logicielle Java libre

Développement d'un noyauÉcriture du test

Page 52: Scub Foundation, usine logicielle Java libre

Développement d'un noyauImplémentation du service

Page 53: Scub Foundation, usine logicielle Java libre

Développement d'un noyauDéclaration du service

Page 54: Scub Foundation, usine logicielle Java libre

Développement d'un noyauConfiguration général

Page 55: Scub Foundation, usine logicielle Java libre

Développement d'un noyauConfiguration d'un environnement

Page 56: Scub Foundation, usine logicielle Java libre

Développement d'un noyauFichier de configuration

Page 57: Scub Foundation, usine logicielle Java libre

Développement d'un noyauExemple de surchargefilter.properties du répertoire test#Configuration dbcp

database.connection.driver_class=org.hsqldb.jdbcDriver

database.connection.url=jdbc:hsqldb:hsql://localhost:9015/test

database.connection.username=sa

database.connection.password=

#Configuration Hibernate

hibernate.query.substitutions=true 1, false 0, yes 'Y', no 'N'

hibernate.show_sql=false

hibernate.use_sql_comments=true

hibernate.hbm2ddl.auto=create

hibernate.dialect=org.hibernate.dialect.HSQLDialect

hibernate.search.default.directory_provider=org.hibernate.search.store.RAMDirectoryProvider

#CONFIGURATION MONITORING

monitoring.enable=false

monitoring.patterns=* org.scub.foundation.contact.manager.core.*.service.interfaces..*.*(..)

Page 58: Scub Foundation, usine logicielle Java libre

Développement d'un noyauExemple de données de tests

Page 59: Scub Foundation, usine logicielle Java libre

Développement d'un noyauTâches du projet

L'usine propose un ensemble de taches pour,par exemple :● La compilation.● Le lancement des tests.● Le packaging.● Le déploiement.● L'initialisation de la base de données.

Page 60: Scub Foundation, usine logicielle Java libre

Développement d'un noyauCouche Applications

Page 61: Scub Foundation, usine logicielle Java libre

Développement d'un noyauAvantages d'une couche service

● Centralisation de la logique métier.● Réutilisation du code.● Qualité plus facile a gérer.● Simplification de la programmation pour les

développeurs d'interfaces utilisateurs.● Interfaces Java + DTO = Indépendance des

technologies

Page 62: Scub Foundation, usine logicielle Java libre

Dernier point

Les tests du noyau nous permettent de valider l'ensemble des services.

Cependant, des surprises peuvent arriver, notamment en production, et certaines ne sont pas de notre fait (serveur en panne, applications tierces down...)

Il nous faut donc valider des scénarios.

Page 63: Scub Foundation, usine logicielle Java libre

Tests de scénario utilisateurs

Réalisation de tests avec Selenium IDE.

Permet de simuler l'utilisation de l'application et de valider son bon fonctionnement.

● Avantage : Permet de valider des scénarios classiques (ex : validation d'une adhésion complète pour une mutuelle).A la fois en recette et en production.

Page 64: Scub Foundation, usine logicielle Java libre

Développement d'applicationsTests des interfaces utilisateurs

Page 65: Scub Foundation, usine logicielle Java libre

Outils tiers

Page 66: Scub Foundation, usine logicielle Java libre

Outils tiersPlugins eclipse pré installés

Checkstyle : Vérification de règles de bases sur l'écriture du code.

Eclemma : Permet de voir quelles parties du code est couverte par les tests.

Page 67: Scub Foundation, usine logicielle Java libre

Outils tiersCheckstyle

Page 68: Scub Foundation, usine logicielle Java libre

Outils tiersEclemma

Page 69: Scub Foundation, usine logicielle Java libre

Outils tiersTravail en équipe

Les sources sont centralisées sur notre serveur de source SVN (Subversion).

Les demandes (bugs, modifications et ajouts) sont gérées via Mantis.

Le référentiel Maven de l'entreprise est Artifactory.

Page 70: Scub Foundation, usine logicielle Java libre

Outils tiersJenkins : Intégration continue

Jenkins est un outil d'intégration continue,il vérifie de manière automatique que lesmodifications de code source n'ont pasgénérées de régressions de l'application. Il va aussi se charger des livraisons.

Pour schématiser, tous les soirs, Jenkins varécupérer les sources et va lancer les tachesMaven pour construire, tester et livrer le projet.

Page 71: Scub Foundation, usine logicielle Java libre

Outils tiersJenkins : Intégration continue

Page 72: Scub Foundation, usine logicielle Java libre

Outils tiersJenkins : Schéma de build

Page 73: Scub Foundation, usine logicielle Java libre

Outils tiersJenkins : Création d'un job

Page 74: Scub Foundation, usine logicielle Java libre

Outils tiersJenkins : Paramétrage du build

Page 75: Scub Foundation, usine logicielle Java libre

Outils tiersJenkins : Livraisons

● Lignes de recette : Nouveaux développements livrés tous les vendredi (plusieurs lignes possibles).

● Ligne de pré production : Version prêt à être déployée en production chez le client. Livraison tous les soirs.

● Ligne de production : Version en production chez le client.

Page 76: Scub Foundation, usine logicielle Java libre

Outils tiersDivers

● CAS pour le SSO.● Graylog pour la visualisation des logs.● Sonar pour la gestion de la qualité.● Jetty comme serveur d'applications.● Eclipse comme environnement de

développement.● Dozer pour gérer le mapping entre objets du

modèle et dto.● Oval pour les validations.

Page 77: Scub Foundation, usine logicielle Java libre

Questions

Page 78: Scub Foundation, usine logicielle Java libre

Questions ?

http://www.arrow-group.euhttp://www.scub.nethttp://www.scub-foundation.org

http://twitter.com/straumathttp://twitter.com/scub_france

Stéphane Traumat : http://about.me/straumat