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

Organisation

Syllabus

Ce cours a pour objectif de découvrir les outils et méthodes qu’il est fondamental de connaitre dans tout projet moderne de développement logiciel. Ils découvriront:

  • 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

Ils apprendront à utiliser des systèmes de contrôle distribué de versions, Systèmes de gestion de projet (Build), Pipeline d’intégration et de déploiement continue.

A la fin de l’unité pédagogique, l’élève sera capable de :

Niveau de taxonomie

Priorité

Comprendre les concepts intervenant tout au long du développement et de la mise en production de systèmes informatiques

Synthétiser

Essentiel

Connaître quelques outils et méthodes modernes adaptés au développement et à la mise en production de systèmes informatiques

Conaître

Essentiel

Evaluation

Le projet correspond à 100% de la notation pour cette UP.

Les rapports sont à envoyer avant le Mer 08/01/2020 AoE

J’ai mis à jour la description du projet pour clarifier le travail à réaliser et limiter ainsi la durée nécessaire pour le réaliser.

Programme

  • Ven 13/09/2019 13:30 - 16:45 - EF Lab room S2.11

  • Ven 20/09/2019 13:30 - 16:45 - EF Lab room S2.11

  • Ven 27/09/2019 13:30 - 16:45 - EF Lab room S2.11

  • Ven 04/10/2019 13:30 - 16:45 - EF Lab room S2.11

Cours et pointeurs

Introduction aux techniques modernes de développement et d’opération du logiciel (1h30)

  • Point sur les méthodologies et les outils que vous avez utilisé.

Pointeurs Git et Gitlab

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

Pointeurs Gitlab CI/CD

Un outil d’intégration et de déploiement continu. Il en existe d’autre, par exemple Travis, Jenkins, etc. Il n’y a pas de standard pour la configuration etc., mais ils offrent sensiblement les mêmes fonctionnalités, et évoluent très vite.

Vous aurez besoin de vous familiariser avec l’outil Gitlab CI/CD. Vous devrez lire en diagonale ou en détail les pages:

Connaissances et compétences visées

Voici une liste exhaustive des connaissances et compétences que vous devez chercher à acquérir pendant ce cours.

Votre Environnement de travail

Puisque vous avez tous Windows 10

Votre IDE

  • vous savez ouvrir un projet maven;

  • vous savez exécuter maven;

  • vous savez utiliser l’auto-complétion, et télécharger automatiquement la javadoc d’une librairie que vous utilisez depuis le dépôt central.

Java

  • vous connaissez le générateur de parseur javacc (compilation de compilation) et l’avez manipulé un peu;

  • vous connaissez le framework de tests unitaires junit, et l’avez manipulé un peu;

  • vous connaissez les annotations javadoc, l’outil javadoc, et l’avez manipulé un peu.

Git

  • vous savez ce qu’est un gestionnaire de versions;

  • vous savez expliquer en quoi git est un logiciel de gestion de versions distribué;

  • vous savez ce qu’est la remise, l’espace de travail, l’index, le dépôt local, le dépôt distant;

  • vous savez cloner un projet;

  • vous savez ce qu’est un commit, les données et métadonnées qu’il contient, le hash;

  • vous savez ce qu’est un tag;

  • vous savez ce que sont les branches, et comment elles sont utilisées;

  • vous savez mettre de côté des changements, et les récupérer (stash);

  • vous savez utiliser 50% et pouvez décrire 75% des commandes listées à la page http://ndpsoftware.com/git-cheatsheet.html ;

  • vous savez récupérer l’état d’un dépôt distant (fetch), intégrer les modifications (pull);

  • vous savez intégrer les modifications d’une référence dans une branche (merge);

  • vous savez à quoi ressemble un conflit, quand un conflit peut survenir, et comment les résoudre;

  • vous savez à quoi sert le .gitignore, vous l’avez utilisé.

Gitlab

  • vous savez distinguer les fonctionnalités du logiciel git et les fonctionnalités de la plateforme gitlab;

  • vous savez créer ou forker un projet;

  • vous savez créer des issues ou contribuer aux issues;

  • vous maîtrisez le format markdown pour formater les issues et leurs commentaires;

  • vous savez faire une référence aux issues dans les titres des commits, ou fermer automatiquement un commit;

  • vous savez créer une merge request, résoudre des conflits;

  • vous avez créé une issue, répondu à une issue, résolu une issue.

Maven

  • vous savez ce qu’est un gestionnaire de dépendances;

  • vous savez ce qu’est un logiciel d’automatisation du build;

  • vous savez quelle est la structure d’un projet maven;

  • vous connaissez les grandes lignes de la structure du Project Object Model pom.xml;

  • vous savez ce que sont les cycles de vie et phases de maven;

  • vous savez ce que sont les coordonnées G-A-V, et comment on déclare une dépendance à une librairie;

  • vous savez quand (à quelle phase du cycle de vie) et où les dépendances sont automatiquement téléchargées; vous avez créé un lien symbolique dans votre environnement linux pour éviter d’avoir deux dossier .m2.

  • vous savez où sont les fichiers temporaires (./target) et quel cycle de vie permet de nettoyer un projet (mvn clean);

  • vous savez où et comment sont stockées les dépendances sur le web, vous savez comment chercher une dépendance ;

  • vous savez ce que sont les variables de configuration dans le pom, et comment elles peuvent être utilisées;

  • vous savez ce que sont les plugins, et les buts des plugins;

  • en ligne de commande, vous savez appeler un but d’un plugin précis

    • vous avez expérimenté avec le plugin maven-help-plugin, notemment pour regarder à quoi ressemble le pom effectif

    • vous avez pu alors identifier que le but compile du plugin maven-compiler-plugin est appelé lors de la phase compile du cycle de vie par défaut;

  • vous savez comment on associe une exécution d’un but de plugin à une phase d’un cycle de vie de l’application;

  • vous avez déjà configuré une exécution de plugin;

  • vous savez ce que sont les profils d’exécution;

  • vous savez ce que sont les rapports;

  • vous savez exécuter maven en ligne de commande;

  • en ligne de commande, vous savez appeler une phase d’un cycle de vie;

  • en ligne de commande, vous savez passer une variable de configuration;

    • vous avez expérimenté notemment pour passer la valeur true au paramètre de configuration skip;

  • en ligne de commande, vous savez comment activer un profil.

  • vous avez compris ce que fait le plugin RAT; vous savez le configurer pour passer (skip) son exécution.

  • vous savez ce que fait le plugin de javacc; où sont les classes générées automatiquement; pourquoi sont elles ajoutées au classpath par défaut; quel but de ce plugin s’exécute et à quelle phase du cycle de vie du projet, et pouquoi.

  • vous savez appeler directement le but javadoc du plugin javadoc; vous savez attacher l’exécution de ce but à une des phases du cycle de vie de votre application; où la doc est générée; comment configurer le plugin; quel but de ce plugin s’exécute et à quelle phase du cycle de vie du projet, et pourquoi.

  • vous avez trouvé le moyen d’empaqueter (package) la librairie dans trois jars (l’exécutable, la javadoc, les source).

  • vous avez compris ce que fait mvn site, vous l’avez utilisé.

Docker

  • Vous connaissez les principes et architecture de Docker

  • Vous connaissez la différence entre conteneurisation et virtualisation

  • Vous avez installé Docker

  • Vous connaissez l’anatomie des images Docker et vous savez les gérer

  • Vous savez ce qu’est le Docker hub

  • Vous savez télécharger une image et déclarer une dépendance à une image Docker

  • Vous savez comment gérer les volumes

  • Vous savez instancier une image, mapper les volumes et les ports

  • Vous savez ce que sont les Dockerfile et vous connaissez les instructions principales

Gitlab CI/CD

  • vous pouvez décrire brièvement ce qu’est le DevOps;

  • vous savez ce qu’est l’intégration continue et le déploiement continu;

  • vous savez ce que sont les pipelines, les phases, les jobs;

  • vous savez ce que sont les environnements;

  • vous savez ce que sont les artefacts, et comment ils sont utilisés;

  • vous savez ce que sont les images docker qui sont utilisées pour l’exécution d’un job;

  • vous avez mis en œuvre un pipeline d’intégration continue et déploiement continu avec maven;

  • ce pipeline valide les licences des fichiers et exécute les tests unitaires

  • ce pipeline génère et publie des artefacts (les trois jars)

  • ce pipeline génère et publie le site web (les site dans un dossier public)

  • vous avez choisi les images appropriées à vos job;

  • vous avez mis en œuvre un job qui commit des changements ou publie un artefact (le site dans le dossier public), vous avez utilisé les variables d’environnement pour éviter d’écrire en clair votre mot de passe ou clé ssh.

  • (avancé) ce pipeline édite la version du projet dans le pom pour y inclure le numéro du build avant d’exécuter mvn site, et si tout s’est bien passé, il commit le changement dans le pom.xml et pousse le changement dans la branche master.