Librairies et solutions open source du socle technique

Open source

PASS Technologie utilise pour son socle technique un grand nombre de solutions open source. Les solutions uniquement leaders dans leur domaine de compétence sont utilisées. Un soin particulier est pris pour ne prendre que des licences sans copyleft (License Apache, License MIT, License BSD,...) permettant la commercialisation des développements réalisés avec les libriairies open source afin de propotéger l'investissement réalisé et ne pas dépendre d'un fournisseur.

Languages

Deux langages sont principalement utilisés :

  • Java pour la partie serveur en version 11. La distribution OpenJDK est généralement utilisée : https://openjdk.java.net/
  • Typescript en version 4. Le typescript permet de générer du Javascript et assure un développement du Javascript de meilleure qualité grâce au typage (une variable ne peut contenir qu'un seul type de valeur) et à la structuration du code.

Librairies

Voici une liste non exhaustive des solutions open source utilisées dans le socle technique. Les solutions sont séparées par catégorie :

  • Solutions open source dans l'application développée. Ce sont les solutions les plus sensibles en terme de sécurité car elles ne doivent contenir aucun défaut de sécurité.
  • Solutions open source utilisées pour construire l'application
  • Solutions open source utilisées pour tester et qualifier l'application

Librairies et solutions utilisées coté serveur dans les applications développées avec le socle technique

SolutionFonctionInformation
Spring framework Librairie en language Java permettant de structurer le développement du socle (framework). C'est le framework le plus déployé dans les développements Java importants. https://spring.io/projects/spring-framework
Liquibase Librairie en language Java permettant de créer la base de données et de gérer une version du modèle de données. Une nouvelle livraison de l'application permet de modifier le schéma de données sans perdre les données existantes. Liquibase génére automatiquement les requêtes SQL permettant les modifications du schéma. Le code Java est ainsi lié à une version du modèle de données évitant des requetes SQL en echec. https://www.liquibase.org/
Hibernate Hibernate est une librairie Java gérant l'accès à la base de données. Hibernate génére les requêtes SQL permettant aux developpeurs de manipuler des objets et leurs relations. Certaines requetes SQL sont réalisés manuellement dans nos applications pour des raisons de performances et éviter le multi-requetage. https://hibernate.org/
EhCache ehCache est un cache permettant de garder mémoire des objets. Il est utilisé comme cache de 2ème niveau avec Hibernate pour éviter de solliciter la base de données. Tous les objets courant comme par exemple le profil de l'utilisateur sont gardés en mémoire au lieu de refaire une connexion SQL. https://www.ehcache.org/
Hazelcast ehCache gère le cache sur un seul serveur. Lorsque l'application est déployée sur plusieurs serveurs (dans plusieurs noeuds d'un cluster Kubernetes par exemple), il est nécessaire certaine fois de mettre un cache distribué. Hazelcast peut être utilisé pour cela. Un alternative peut être de déployer un cluster de noeud PostgreSQL actif / actif avec Crunchy Data par exemple mais cela demande une synchronisation des données. https://hazelcast.com/open-source-projects/downloads/
HikariCP HikariCP permet d'optimiser les connexions à la base de données graĉe à un gestionnaire de connexions. Le nombre de connexions actives peut être défini ainsi que le temps à partir duquel une connexion sera fermée sans activité. https://github.com/brettwooldridge/HikariCP
ElasticSearch ElasticSearch est une solution open source de moteur de recherche permettant de créer rapidemment une application centrée sur la recherche. Les documents sont stockés sous forme d'index. Les aggrégations permettent https://www.elastic.co/fr/elastic-stack/
Camunda Solution open source permettant de modéliser avec la notation BPMN les processus. Le moteur en Java gére les différentes étapes dans la base de données PostgreSQL. Le lancement des activités des processus est sécurisé par le socle technique permettant à un utilisateur de lancer uniquement une activité suivant son rôle et ses permissions. https://camunda.com/

Librairies et solutions utilisées coté client (navigateur) dans les applications développées avec le socle technique

SolutionFonctionInformation
Angular Librairie développée par Google permettant de développer un site chargé dans une seule page. L'expérience utilisateur est améliorée avec la possibilité de rafraichir que ce qui est nécessaire à chaque action. De nombreuses librairies de composants existent permettant un developpement plus modulaire. https://angular.io/
Angular Material Composants graphiques permettant de réutiliser dans un panel https://material.angular.io/
bpmn-io Représentation visuelle des processus BPMN https://bpmn.io/toolkit/bpmn-js/

Librairies et solutions mobiles utilisées dans les applications développées avec le socle technique

SolutionFonctionInformation
Capacitor Capacitor permet à nos développements Angular d'accèder aux fonctions des téléphones portables (envoi de SMS, notification, stockage, ...) https://capacitorjs.com/

Librairies et solutions utilisées dans les applications installés sur les postes de l'utilisateur développées avec le socle technique

SolutionFonctionInformation
Electron Les applications Electron intègrent le navigateur open source Chromium qui est également utilisé dans Google Chrome et Microsoft Edge. Les applications ont une grande liberté dans la mise en page des informations grâce au HTML tout en utilisant les capacités du poste de l'utilisateur comme la lecture et la sauvegarde de fichier dans le système de fichiers. https://www.electronjs.org/

Librairies pour construire l'application

SolutionFonctionInformation
Maven Maven permet de gérer les dépendances de l'application (lien vers les autres librairies), de construire l'application et d'executer les tests unitaires ou les tests d'intégration. Les commandes Maven sont exécutés localement sur le poste du développeur ou sur nos serveurs avec Jenkins ou GitHub Action, une solution permettant d'automatiser la construction des applications. https://maven.apache.org/
Jenkins ou GitHub Actions Pière angulaire de l'automatisation, les solutions Jenkins, GitHub Actions ou Bitbucket pipelines permettent d'automatiser beaucoup d'étapes du développement : la compilation, l'execution des tests, la création des packages, le déploiement ...

Cette chaîne est communément appelée CI/CD (Continuous Integration / Continuous Delivery) par le fait que continuellement tout au long du développement, les étapes sont automatiquement executées permettant de tester l'application tout au long du développement (voir aussi la partie méthodologie pour plus de renseignements)

On utilise :

https://www.jenkins.io/
Buildpacks.io La construction des containers contenant les applications du socle technique s'appuie sur Buildpacks.io permettant d'avoir toujours les dernières versions du système d'exploitation (Debian), du language (Java), du serveur d'application (Tomcat) et des certificats. Nous utilisons généralement le builder Paketo. https://buildpacks.io/
Paketo Paketo est une implémentation de la solution buildpacks.io. https://paketo.io/

Librairies pour tester et qualifier l'application coté serveur

SolutionFonctionInformation
JUnit Chaque fonction de l'application peut être testée unitaire graĉe à JUnit. Une converture des tests est mesurée avec Jacoco (Java Code Coverage) afin de verifier la qualité des tests. https://junit.org/junit5/
Cucumber Les fonctions de l'application sont détaillées avant développement pour vérifier le cahier des charges grâce à Cucumber. La description de ces fonctions complète les récits de l'utilisateur (User stories). La syntaxe des critères d'acceptation est simple avec 3 étapes :
  • 1ère étape : décrire la situation avec le mot clé "Etant donné que..."
  • 2ème étape : décrire l'action avec le mot clé "Quand..."
  • 3ème étape : décrire la conséquence avec le mot clé "Alors..."
https://cucumber.io/
Mockito Cette solution permet de créer des bouchons pour les applications tiers ou des parties de l'application non disponibles. Chaque classe, chaque fonction peut être déclarée en exprimant les valeurs retournées en fonction des valeurs d'entrée. https://site.mockito.org/
Mockoon Mockoon est une solution simple permettant de démarrer un serveur Web et de simuler les réponses en fonction des requêtes. Uniquement les requetes HTTP et le format JSN sont supportés (requête REST). D'autres solutions sont utilisées pour supporter les autres protocoles (JMS, GRPC, WebSocket), ... https://mockoon.com/
SOAP-UI SOAP-UI permet de simuler un client avec de nombreux protocoles (JMS, GRPC, HTTP). Les requêtes peuvent être rejoués dans des scénarios. https://www.soapui.org/
Gatling Gatling permet de réaliser des tests de montée en charge avant mise en production. Les utilisateurs sont simulés simplement avec la possibilité de changer les utilisateurs. La première simulation est réalisée avec un enregisteur de scénario. Les protocoles suivants sont supportés : HTTP, GRPC, WebSockets, JMS, KAFKA. Nous définissons la limite du bon fonctionnement de nos applications lorsque les pages prennent plus de 2s à se charger. https://gatling.io/
Zipkin Zipkin est un système distribué de traces. Il permet de mettre dans chaque requête un marqueur permettant de suivre les différentes étapes d'appel (appel du navigateur vers le serveur Java, appel du serveur Java vers la base de données, ...) Il met en avant le temps passé dans les différentes couches logicielles permettant de faciliter l'optimisation de l'application. https://zipkin.io/
SonarQube SonarQube anlyse le code et génère les rapports nécessaires à l'amélioration du code. Chaque développeur de PASS Technologie reçoit un rapport le matin avec les points à améliorer. L'analyse de code est réalisée la nuit automatiquement lors d'une nouvelle fonctionnalité déployé dans l'outil de gestion de configuration logicielle (Git). https://www.sonarqube.org/
pgBadger pgBadger permet d'analyser les traces des logs PostgreSQL et d'en extraire les statistiques. Une optimisation à partir de ce statistiques permet d'optimiser le fonctionnement de la base de données PostgreSQL. https://github.com/darold/pgbadger
dependabot Dependabot de Github va parcourir l'ensemble des dépendances du socle technique pour vérifier les mises à jour nécessaires pour les librairies Java et Angular. Il s'appuie sur les 2 fichiers de configuration, pom.xml pour Java avec Maven et package.json pour NodeJS et Angular contenant l'ensemble des dépendances du socle. https://github.com/dependabot

Librairies pour tester et qualifier l'application coté client

SolutionFonctionInformation
cypress Cypress permet de sauvegarder des scénarios de tests à partir du navigateur et de rejouer ces scénarios. On ajoute des assertions afin de vérifier que l'interface fonctionne correctemment. Les interfaces développées dans le socle technique contiennent des balises permettant de tester l'interface. https://www.cypress.io/
PageSpeed Insights Outil Google permettant de réaliser un rapport sur un site Web en proposant des optimisations. https://pagespeed.web.dev/