scub foundation, usine logicielle java libre
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
Scub Foundation
Usine logicielle Java librehttp://www.scub-foundation.org
Stéphane Traumathttp://about.me/straumat
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.
Qui sommes nous ?
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.
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.
Développement logiciel : notre constat
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
Les étapes d'un projet
É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.
Maquette d'écran réalisée avec Balsamiq (http://www.balsamiq.com/)
É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
Cahier des charges du projet réalisé avec Dokuwiki (http://www.dokuwiki.org)
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
Mise en place du projet sur les serveurs de production du client par nos équipes de développement.
Étape 4 : Livraison en production
Présentation de l'architecture SOA
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.
Architecture SOA
Schéma du système d'information de l'un de nos clients
● 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
Qu'est ce qu'une usine logicielle ?
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 ».
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é…).
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…).
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.
Outil clé : Maven
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.
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.
Exemple de fichier de configuration Maven
Structure des dossiers d'un projet Maven
Tâches d'un projet Maven
Gestion des dépendances avec Maven
Développement d'un projet
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
Choix de l'archetype de projet
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.
Développement d'un noyauStructure des deux projets
core-interfaces core-implementations
Développement d'un noyauCouche base de données
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.
Développement d'un noyauCouche modèle
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.
Développement d'un noyauCode source du modèle
Développement d'un noyauCouche d'accès aux données
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.
Développement d'un noyauInterface du DAO
Développement d'un noyauImplémentation du DAO
Développement d'un noyauDéclaration du DAO
Développement d'un noyauCouche service
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.
Développement d'un noyauDéclaration du DTO
Développement d'un noyauDéclaration de l'interface
Développement d'un noyauÉcriture du test
Développement d'un noyauImplémentation du service
Développement d'un noyauDéclaration du service
Développement d'un noyauConfiguration général
Développement d'un noyauConfiguration d'un environnement
Développement d'un noyauFichier de configuration
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..*.*(..)
Développement d'un noyauExemple de données de tests
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.
Développement d'un noyauCouche Applications
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
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.
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.
Développement d'applicationsTests des interfaces utilisateurs
Outils tiers
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.
Outils tiersCheckstyle
Outils tiersEclemma
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.
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.
Outils tiersJenkins : Intégration continue
Outils tiersJenkins : Schéma de build
Outils tiersJenkins : Création d'un job
Outils tiersJenkins : Paramétrage du build
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.
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.
Questions
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