Toolbox 80 - Ingénierie et Interopérabilité des Systèmes Informatiques (I2SI)
Département Informatique et Systèmes intelligents - Institut Henri Fayol
Socle technique de développement logiciel
Objectifs de l’UP
Systèmes de contrôle distribué de versions, Systèmes de gestion de projet (Build), Pipeline d’intégration et de déploiement continue.
Notions abordées
-
Les concepts intervenant tout au long du développement et de la mise en production de systèmes informatiques
-
Les outils et les méthodes modernes adaptés au développement et à la mise en production de systèmes informatiques
Programme
Ven 14/09/2018 13:30 - 16:45 - EF Cours en S2.03, puis TD/TP S2.23
Ven 21/09/2018 13:30 - 16:45 - EF TD/TP en S2.23
Ven 28/10/2018 13:30 - 16:45 - EF TD/TP en S2.03, puis S2.23
Ven 05/10/2018 13:30 - 16:45 - EF TD/TP en S2.03, puis S2.23
Prerequis
-
Linux
-
Linux pour windows 10 with updated and upgraded distribution https://docs.microsoft.com/fr-fr/windows/wsl/install-win10
Cours 1: Introduction au développement logiciel
Introduction aux techniques modernes de développement et d’operation du logiciel (1h30)
-
Point sur les méthodologies et les outils que vous avez utilisé.
-
Méthodologies de développement logiciel
-
V-Cycle vs Agile: http://agilemanifesto.org/principles.html
-
-
IDE
-
Lesquels utilisez-vous ?
-
Votes pour Java
-
Votes pour le dévelopment Web
-
-
Création d’un projet étape par étape … et discussion
-
illustration avec Java
-
illustration pour un site Web
-
-
Gestion des dépendances
-
Où sont stockées les librairies ? Où publie-t-on une librairie ? Dans des dépôts de code open-source
-
Exemple pour java: The Central Repository
-
Exemple pour javascript (et css): npm
-
-
Sémantique des numéros de version
-
Gestionnaires de dépendance
-
Outils de gestion et d’automatisation de production des projets logiciels
-
Cycle de vie avec Maven
-
tâches et pipes avec npm https://gulpjs.com/
-
TP 1: Outils de gestion et d’automatisation de production des projets logiciels
Deux TP en un, dans l’ordre que vous voulez. Vous terminerez chez vous.
POUR INFO: Il est fortement probable que ces outils, ou des outils similaires, soient utilisées plus tard dans d’autres cours ou dans votre entreprise.
Maven (pour Java)
Parcourez la page wikipedia de Maven.
Des concurrents de Maven (2004) existent: ant (2000), et Gradle (v1 en 2012). Voir ce comparatif (datant de 2014)
Au fur et à mesure de ce TP, vous aurez besoin de vous familiariser avec la documentation de Maven. Vous aurez très besoin de lire en diagonale ou en détail les pages suivantes (à priori, seulement celles là):
Téléchargez l’archive pour le TP, qui contient les sources de deux classes java. C’est pas la peine de regarder le code en détail, il faut juste vérifier la première ligne, et compléter la classe Staff.java
Créez un projet Maven dans Eclipse, vérifiez que le dossier sur le disque dur a la bonne structure de fichiers. Placez les classes java au bon endroit (dans le bon dossier, selon le package que vous aurez choisi).
Ajoutez au fichier de configuration de projet pom.xml
les info suivantes:
-
les les coordonnées GAV (normalement, correspond également au package de base de vos classes) pour info, la page à laquelle je fais référence décrit les critères de qualité qui doivent être satisfaits pour que vous puissiez publier une bibliothèque java en open source dans le Central Repository. Voici le point d’entrée pour la procédure complète.
Executez quelques "buts" du cycle de vie de Maven, en prenant soin de sauvegarder la sortie de la console. Quelles sont les plugins qui sont exécutés, dans quelles phases du cycle de vie ?
La compilation de fonctionne pas car nous n’avons pas ajouté la dépendance à une certaine librairie. Les classes qui ne sont pas trouvées appartiennent aux packages com.fasterxml.jackson.core
, et com.fasterxml.jackson.databind
. Allez chercher dans le Central Repository les librairies qu’il ajouter en dépendances, en faisant une recherche directement avec le nom de ces packages. Copiez le snippet de XML de déclaration de la dépendance (balise dependency
) et collez-le là où il faut dans le pom.xml
.
Vérifiez que la compilation et l’execution fonctionnent bien.
Ajoutez au cycle de vie de votre application l’exécution de tests unitaires avec JUnit. Pour celà, ajoutez la bibliothèque externe de tests unitaires JUnit aux dépendances "de test" de votre projet. Ecrivez un bête test unitaire (qui assert true
) qui doit être placé dans le bon dossier de votre projet. Ajoutez enfin et configurez le plugin Maven standard pour exécuter les tests et générer un rapport de tests est Maven Surefire Plugin. Attention: Il faut que le nom de votre classe contienne le mot Test
.
Vérifiez que le test est bien exécuté pendant l’exécution du cycle de vie du projet. Lors de quelle phase ?
Ajoutez au cycle de vie de votre application la génération de la Javadoc pour votre projet (comme ceci). Trouvez vous-même le plugin Maven qui permet de faire ça, et configurez-le.
Enfin, suivez le guide pour créer un site automatiquement à partir de votre projet, en utilisant le cycle de vie site
. Vous configurerez le pom.xml
de sorte que votre site contienne:
-
une page index.html vide (ou peu importe son contenu)
-
la page présentant les membres de l’équipe de développement (générée automatiquement)
-
la page présentant le rapport des tests unitaires (générée automatiquement)
-
un lien vers la javadoc (générée automatiquement)
Pour le développement JavaScript fullstack: npm
Suivez le tutoriel https://mnemotix.github.io/gulp-tuto/ qui permet de prendre en main npm, gulp.
Pendant le processus:
-
vous ferez attention à bien identifier ce qui relève de la gestion de dépendances, et ce qui relève de l’automatisation de production du logiciel,
-
vous essaierez de bien comprendre le code que vous copiez,
-
vous satisferez votre curiosité (ça parle de LESS à un moment, c’est quoi LESS… ?).
Séance 2: Gestion du projet et du code versionné
-
Rappel des notions vues en séance 1
-
Démonstration TPs
-
TP Maven
-
TP Javascript Gulp
-
-
Outils de gestion du code source
-
logiciel Git
-
Documentation de référence https://git-scm.com/docs
-
Concepts essentiels à l’utilisation quotidienne de git (remotes, branches, commits, tags, …), et commandes importantes (init, log, checkout, add, diff, commit, merge, …)
-
Cheat sheet interactive http://ndpsoftware.com/git-cheatsheet.html
-
-
Plateformes basées sur Git: GitHub, GitLab
-
Gestion des tickets, bugs, milestones par l’exemple avec Gradle
-
-
Stratégies de développement collaboratif et distribué de logiciels, issues, fork/pull.
-
TP 2: Utilisation des plateformes Git
Dans ce TP vous suivrez pas à pas les guides de prise en main de GitHub et de Git, dans l’ordre ci-dessous.
Vous utiliserez le projet https://github.com/maximelefrancois86/i2si-maven-tutorial comme exemple pour créer vos fork et pull requests.
Séance 3: Intégration et Déploiement Continu avec Travis-CI pour GitHub
-
Outillage de livraison continue du code cycle de vie du développement logiciel
-
Une Galaxie d’outils
-
-
Outils de gestion Agile de projet
Forkez le projet solution de la semaine dernière https://github.com/maximelefrancois86/i2si-maven-tutorial
L’objectif de ce TP est de prendre en main le serveur d’intégration et de déploiement continue Travis-CI
Point de départ: documentation de Travis
Lien vers le projet sur GitHub à m’envoyer à la fin du TP, incluant un readme.md
bien formaté avec les explications de vos choix.
Exercice 1
Vous utiliserez Travis pour que, lorsqu’un nouveau commit est réalisé, travis exécute automatiquement les tests unitaires et rapporte les erreurs à GitHub en cas de problème de compilation ou de test.
Vérifiez sur github et sur travis que les tests se sont bien exécutés.
Ajoutez un test unitaire défaillant et poussez-le sur github, vérifiez alors que Travis envoie bien une alerte à Github
Dans votre git local, ajoutez le projet d’un autre élève en tant que remote
, fetch
son code, créez une branche locale qui track sa branche master
, ajoutez un test unitaire défaillant, poussez votre nouvelle branche sur votre github, créez une pull-request pour proposer vos modifications à l’autre élève. Vérifiez alors que Travis l’alertera bien que votre nouvelle version du code pose des problèmes.
Exercice 2
Vous utiliserez Travis pour que, lorsqu’un nouveau commit est réalisé, Travis déploie le contenu du site web sur la branche gh-pages
de votre projet (custom build step)
Exercice 3
Testez les outils d’intégration et de notification (SonarCloud en priorité)
Séance 4: The Docker container technology, the Heroku cloud platform, use with CI/CD
Heroku is a Cloud Platform you can use for free to publish dynamic apps using git.
-
Follow and carefully read the get-started guide for Java on Heroku. You will deploy your first Spring Boot application on the Web :-)
-
Now we want to store the source code of the application on GitHub, and configure Travis-CI to test and push your application directly to Heroku. (Heroku also has a CI/CD pipeline service, but you already learned how to use Travis last week so let’s stick with it)
-
delete the git remote called
heroku
, and use instead a git remote calledorigin
pointing to a new GitHub project you own. -
configure Travis to test and deploy your Spring Boot project on Heroku. https://docs.travis-ci.com/user/deployment/heroku/
-
Docker enables to decouple application and infrastructure concerns. Using Docker, you can ensure your testing and deployment environment is exactly the same.
-
Follow and carefully read the official get-started guide for Docker https://docs.docker.com/get-started/
Instead of pushing just code to Heroku and let it choose the deployment environment, it is possible to:
-
Build a Docker container with a certain version of Java for our app. Check https://spring.io/guides/gs/spring-boot-docker/ for Maven
-
This process can be done:
-
Locally on your machine, and the container can be deployed on Heroku https://devcenter.heroku.com/articles/container-registry-and-runtime
-
By a CI/CD server like Travis-CI https://docs.travis-ci.com/user/docker/
-