L'application de synthèse a pour but de mettre en application les connaissances acquises dans l'UE4, mais aussi de mettre en œuvre les bonnes pratiques de projet de programmation vues en UE1.

Public :

  • Licence professionnelle Développement de Logiciels Innovants et Sécurisés - Alternants

Pré-requis :

  • Cours de programmation Web (PHP, Javascript)

Résultats attendus :

Découverte du sujet

Langages : Javascript (React), HTML5, CSS3, Python (FastAPI, SQLAlchemy, Motor, Beanie) MySQL ou SQLite, MongoDB

4 groupes de 4 à 5 étudiants.

Existant : la base de données relationnelle La Fnuc a donné lieu à des applications web classiques en Java et en PHP puis en Python avec Flask. A côté de ces applications web, des web services SOAP avec le framework java Apache Axis2 et une API RESTFul disposant d'une documentation OpenAPI 3.0.3 autonome avec le framework python Flask en mode Code First avec le noyau SQLAlchemy (requête exprimée soit en SQL standard i.e. non spécifique à un SGBD ou soit exprimée en

SQL Expression Language via SQLAlchemy Core) voisinent et sont utilisées par des applications web essentiellement écrites en javascript natif.

  • Sujet 1 : Par rapport à l’existant, sécuriser l’API RESTFul existante. Lorsque les API pour FastAPI seront disponibles, il faudra aussi les sécuriser. La sécurisation passera par un service d’authentification qui servira aussi pour les 3 autres sujets.
  • Sujet 2 : Créer une nouvelle version de l'API RESTFul utilisant la couche ORM de SQLAlchemy donc s'appuyant encore sur la version relationnelle de la base de données mais aussi sur le framework FastAPI https://fastapi.tiangolo.com/, certes pas très original, mais rudement efficace, performant, avec une génération dela doc OpenAPI automatique avec OpenAPI déjà implémentée, et complètement asynchrone y compris jusqu'à la BDD. L'API s'appuiera sur un serveur de données MySQL 8 ou PostgreSQL 12.5. Pour la couche ORM, vous fournirez la documentation au format reStructuredText (également connu sous le nom de "reST").
  • Sujet 3 : Vous créerez une nouvelle version de l'API RESTFul utilisant une couche ODM comme MongoEngine et le framework FastAPI avec le module Motor pour MongoDB. Il vous faudra créer des modèles de documents pour MongoDB 6.0 utilisables par l'API. Ceci peut entrainer une simplification de l'API RESTful suite à une incorporation plus poussée soutendue par MongoDB. Pour la couche ODM, vous fournirez la documentation au format reStructuredText (également connu sous le nom de "reST") ;
  • Sujet 4 : Une application web essentiellement écrite en javascript objet (vanilla JS voire React, voire VueJS) utilisera cette API. Par rapport à l’application existante, il faudra compléter la fonction de recherche des livres en javascript utilisant cette API. De plus une partie administration de l’application comme celle qui existe dans l’application Flask classique sera proposée. Vous établirez un diagramme de classes pour votre application javascript et vous fournirez la documentation en JSDoc ("à la javadoc", prioritairement sur les classes). Voici quelques écrans de l'application existante hors administration :
  • Sujet 5 : Une application Google Android devra reprendre les fonctionnalités de l’application Flask classique en s’appuyant d’abord sur l’API RESTFUL existante puis sur les deux autres versions de l’API (ORM et ODM). Une autre application enrichie des fonctionnalités d’administration peut voir le jour.

Vous utiliserez l'approche TDD pour les parties objets de Python (pytest, coverage, pytest-cov voire pytest-flask) et les parties objets Javascript (jasmine, mocha, jest). Si le code existant repose sur Python 3.5 et un serveur MySQL ou PostgreSQL « portable » pour Windows, vous pouvez utiliser une version récente de Python comme 3.9 ou 3.10 et Docker afin de composer des microservices.

Pour les APIs RESTful nous utilisons soit un ORM, soit un ODM pour ne pas être tributaire d'un éditeur de base de données SQL ou NoSQL. Or l'implantation de l'indexation Full Text est spécifique pour chaque éditeur (BLOB, CLOB, etc.). Une implantation puissante et indépendante de l'indexation Full Text peut se baser sur Elastic Search, un moteur de recherche qui s’installe et s’initialise très facilement. Vous pourrez indexer vos premiers documents comme la description des livres, et vous pourrez faire alors vos premières requêtes.

Vous pouvez utiliser des portails d’intégration continue à base de jenkins et sonarQube dans le nuage s’ils sont munis des plugins pour l’analyse des langages Web et Python et que votre code source est disponible sur Gitlab.

Apprentissage des rôles et des outils (S24)

La présentation du projet en semaine S16. Affectation des groupes. Affectation à chaque groupe de la présentation des outils.

  • Auto apprentissage :
    • Rôles (avec répartition des rôles au sein de chaque équipe)
    • Git (tout le monde) ;
    • Tests unitaires en Python avec unitest ;
    • Jenkins / SonarQube (y compris SonarPython, SonarJS, SonarLint) ;
    • Test unitaires en javascript avec Jest, Mocha ou Jasmine ;

Release 1 (S24)

  • On propose un backlog pour le produit et un backlog pour le sprint

Le client a défini le travail de chaque groupe.

Sprint 1

Sprint 2

Release 2 (S25)

Ce projet écrit en Python/Javascript utilise une chaine d'intégration continue avec Jenkins éventuellement doté de ses plugins relatifs à la qualimétrie PHP (Phing, PHP Depend, PHP Mess Detector, phpcpd, phploc, PHP_CodeSniffer, phpDocumentor, PHP_CodeBrowser / Ant, Template for Jenkins Jobs for PHP Projects) et Maven (Jenkins) et utilise SonarQube muni des modules pour les langages Web/JavaScript/PHP pour la qualimétrie. Pour la couverture de tests en Javascript, le plugin SonarJS nécessite la pile Node.js/Gulp/Karma. Gulp pilote le processus de construction tandis que Karma le lanceur de tests génère des rapports JUnit et LCOV au final compris par SonarJS. Maven lance gulp via le plug-in frontend-maven-plug-in de Jenkins qui lui délègue le processus de construction.

Ils développent via le Git.

Le projet est géré entièrement en mode agile avec SCRUM et XP

Environnement :

Vous disposez sur le bureau à distance statdeci5 d'espace de projets PHP :

  • PRJSYNTH_2022_3PDL11_1 ;
  • PRJSYNTH_2022_3PDL11_2 ;
  • PRJSYNTH_2022_3PDL11_3 ;
  • PRJSYNTH_2022_3PDL11_4.

En plus, vous disposez d'un espace personnel correspondant à votre compte etudiantXX, x de 03 à 21.

Ces espaces sont modifiables via le lecteur P:. Par exemple PRJSYNTH_2022_3PDL11_1 correspond au répertoire P:\PRJSYNTH_2022_3PDL11_1 et etudiant03 correspond au répertoire P:\etudiant03. Vous pouvez tester votre projet en PHP 5.6.33 ou en PHP 7.0.33 ou en PHP 7.2.15 :

Ainsi, si vous êtes plusieurs de votre équipe à utiliser le bureau à distance, il est pratique de faire de P:\etudiantXX\ le répertoire de votre copie clonée de votre repository Github/GitLab à l'aide de Autres raccourcis\eclipse & visual paradigm\GitHubDesktop. Les espaces partagés PRJSYNTH_2022_3PDL11_X ne sont utiles que si vous n'utilisez pas avec Jenkins d'un gestionnaire de version Git, cas peu probable en réalité.

De plus, les bases de données P_2022_3PDL11_1, P_2022_3PDL11_2 et P_2022_3PDL11_3 associées aux utilisateurs dont le mot de passe correspond au login ont été créées sur le serveur MySQL 8.0.18 hébergé sur ubsbase04.ubs-bi.local, port 3313. Vous pouvez y accéder à partir du bureau soit via phpMyAdmin (http://ubsbase04:95/phpmyadmin/index.php?server=4) soit via le client lourd et graphique Autres raccourcis\MySQL 8.0\MySQL Workbench 8.0.11 CE Win64 ou le client lourd et console Autres raccourcis\MySQL 8.0\Shell MySQL 8.0.11 Win64 :

#mysql -P 3313 -h ubsbase04 -u P_2022_3PDL11_1 -pP_2022_3PDL11_1 P_2022_3PDL11_1

Le serveur tomcat 7.0.56 s'exécutant dans une JVM 1.8.0_144 atteignable depuis le bureau à distance statdeci5.univ-ubs.fr à l'adresse http://ubsbase04:9092 offre une chaîne d'intégration continue jenkins 2.138.1 (http://ubsbase04:9092/jenkins/) liée à un serveur sonarqube 5.6.7 (http://ubsbase04:9000/) muni des modules pour les langages Web/CSS/JavaScript/PHP/Python en plus de Java et Maven.

A noter que les distributions Eclipse suivantes peuvent vous intéresser :

  • Autres raccourcis\eclipse & visual paradigm\eclipse-jee-neon-3 avec jre 8 : plugins PDT, SonarLint ;
  • Autres raccourcis\eclipse & visual paradigm\eclipse-jee-mars-1 avec jre 8 : plugins PDT, SonarSource ;
  • Autres raccourcis\eclipse & visual paradigm\eclipse-jee-juno-2 avec jre 7 : plugins PDT, PTI, SonarSource.

SonarLint récupère pour vous la liste des problèmes depuis le portail sonarqube pour les afficher directement dans votre code dans éclipse. Sinon, il faut prendre connaissance des problèmes dans le menu code du portail sonarqube de votre projet. SonarSource fait la même chose mais uniquement pour Java.

Enfin, pour pouvoir utiliser sur votre espace de projet PHP les utilitaires composer, PHPDOC, PHPUnit, Phing, des raccourcis se trouvent dans Autres raccourcis\eclipse & visual paradigm :

  • Shell PHP 5.6.33 ;
  • Shell PHP 7.0.33 ;
  • Shell PHP 7.2.15.

Ce cours a été mis en ligne en 2022-2023.

Accéder au cours en ligne : NetUBS

Se connecter "en tant qu'invité" : Aide à la connexion