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

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é.

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)

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:

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

    • Plateformes basées sur Git: GitHub, GitLab

    • Stratégies de développement collaboratif et distribué de logiciels, issues, fork/pull.

TP 2: Utilisation des plateformes Git

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

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.

  • 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)

Docker enables to decouple application and infrastructure concerns. Using Docker, you can ensure your testing and deployment environment is exactly the same.

Instead of pushing just code to Heroku and let it choose the deployment environment, it is possible to: