Scub Foundation est un ensemble de frameworks, de conventions, d'outils et de procédures qui structurent les développeurs et leurs développements. Pour simplifier, c'est une plateforme qui permet l'industrialisation des projets de développement informatique.
Plus d'informations à http://www.scub-foundation.org
Objectifs du socle
- Ne pas réinventer la roue ! (Intégration d'Eclipse et des frameworks populaires comme hibernate, spring, gwt, JUnit…).
- Avoir des modèles de projets pour chaque type de projet mais avec des structures identiques.
- Avoir des tâches automatisées pour l'ensemble du cycle de vie du projet (compilation, packaging, test…).
- Développement SOA (intégration de la notion de noyau et du découplage Interface/implémentation).
- Gestion automatique des dépendances / librairies.
- Gérer les différents environnements (Test / Développement / Pré production / Production…).
Concrètement, notre socle technique offre au développeur un environnement de développement intégrant les meilleurs éléments Open Source (Eclipse, Maven, Spring, GWT…) ainsi que des modèles de projet.
4. 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.
5. 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.
8. Un constat : Deux difficultés à gérer
Le développement Le développement
doit être doit être
incrémental industrialisé
pour gérer les pour gérer la
incertitudes. complexité.
Scrum Scub Foundation
10. É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.
12. Étape 2 : Rédaction du cahier des
charges
É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.
13. Cahier des charges du projet réalisé avec Dokuwiki (http://www.dokuwiki.org)
14. Étape 3 : Découpage et planification
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.
15. Étape 4 : Livraison en production
Mise en place du projet sur les serveurs de
production du client par nos équipes de
développement.
17. Principe des architectures SOA
Mettre en place une Architecture Orienté
Service (SOA) consiste à bâtir des services
(fonctions) qui vont pouvoir être utilisés par
l'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.
20. Architecture orientée service
Avantages
● 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é).
22. 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 ».
23. 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é…).
24. 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…).
25. 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.
27. Un outil structurant : Maven
Maven est un outil pour la gestion et
l'automatisation de la production des projets
logiciels.
L'objectif de Maven est de simplifier le
processus de fabrication d'un logiciel.
28. 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.
34. Développement d'un projet
Création du projet via Maven
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 !
36. Développement d'un projet
Noyau de service = deux projets
core-interfaces core-implementations
Contient seulement Contient
les interfaces services l'implémentation de
et les DTO échangées core-interfaces.
par ces interfaces.
39. Développement d'un noyau
Couche 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.
41. Développement d'un noyau
Couche modèle
Représente les données persistantes de
l'application avec des objets Java simples.
Utilisation d'Hibernate pour gérer le mapping
Objet / Relationnel.
Avantages : Non intrusif / Indépendance.
44. Développement d'un noyau
Couche 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 et
implémentations mais aussi séparation du
code métier et du code technique.
49. Développement d'un noyau
Couche service
Contient la logique métier de l'application.
Elle utilise la couche DAO pour accéder aux
données. Elle est testée grace à JUnit et
Eclemma.
Couche indépendante des technologies sous-
jacentes.
60. Développement d'un noyau
Tâ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.
62. Développement d'un noyau
Avantages 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
63. 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.
64. 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.
67. Outils tiers
Plugins 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.
70. Outils tiers
Travail 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.
71. Outils tiers
Jenkins : Intégration continue
Jenkins est un outil d'intégration continue,
il vérifie de manière automatique que les
modifications de code source n'ont pas
générées de régressions de l'application. Il va
aussi se charger des livraisons.
Pour schématiser, tous les soirs, Jenkins va
récupérer les sources et va lancer les taches
Maven pour construire, tester et livrer le projet.
76. Outils tiers
Jenkins : 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.
77. Outils tiers
Divers
● 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.