% MGL7760 — Qualité et productivité des outils logiciels % UQAM — Département d'informatique % Plan de cours — Hiver 2023 * Horaires, locaux et enseignants: Responsable(s) du cours ======================= Coordination ------------ Trudel, Sylvie PK-4720 Enseignement ------------- Boulgoudan, Moustapha Groupes: 030 Le site web officiel du cours est sur Moodle \[https://www.moodle2.uqam.ca/coursv3/course/view.php?id=42145\], il contient le matériel du cours et servira pour les évaluations en ligne (examens, remises de TP, etc.). Toutes les séances du cours vont se dérouler en mode synchrone via la plateforme Zoom \[https://uqam.zoom.us/\]. Le lien sera fourni dans la page du cours sur Moodle. Les étudiants doivent consulter régulièrement leur courriel UQAM, moyen de communication du professeur avec le groupe-cours. Description du cours ==================== Aperçu des outils pour assister au développement et à l'entretien des logiciels. Plateformes d'intégration des outils. Environnements de développement. Outils pour la rétro-ingénierie des logiciels. Critères et stratégies d'évaluation des outils. Objectif du cours ================= - Maîtriser l'utilisation de divers outils d'assistance au développement et à la maintenance de logiciels. - Maîtriser l'utilisation de plateformes de développement libres intégrant divers outils. - Être capable d'identifier, d'évaluer et d'apprendre à utiliser de nouveaux outils d'assistance au développement. - Maîtriser l'utilisation de dépôts de code permettant le développement collaboratif et la préservation de l'historique de développement du code. - Apprécier l'importance des enjeux reliés à la qualité et la productivité engendré par l'utilisation d'outils logiciels. - Comprendre les tendances émergentes en réalisation de logiciels. - Initier les étudiants aux techniques de métaprogrammation. - Initier les étudiants aux nouvelles approches dans le domaine. Contenu du cours ================ THÈMES - Ligne de commande et automatisation (Commandes, Scripts Shell, Sed/AWK, Expressions régulières) - Écosystèmes de développement pour l'intégration continue - Gestionnaire de versions (Git) pour supporter l'intégration - Assemblage complexe de logiciels avec *Gradle* - Contrôle de versions des bases de données via un ORM comme Hibernate, via des outils spécialisés comme *Liquibase* - Amélioration de la productivité via des Environnements de développement intégrés - Conteneurs (Docker) - Principes et utilisation des conteneurs *Docker* - Composition des conteneurs avec *docker-compose* - Orchestration des conteneurs avec *Kubernetes* - Infonuagique avec *OpenStack* - Gestion des configurations avec *Ansible* - L'IaC (Infrastructure as Code) avec *Terraform* - GitOps et Déploiement Continu - CI/CD avec un pipeline - Environnements de développement Infonuagiques (CDEs : Cloud Development Environments) - Les environnements de programmation *Serverless* - Langages spécifiques au domaine (*Domain-Specific Languages ou DSL*) APPROCHE PÉDAGOGIQUE Le cours se base sur une approche par projet. L'approche par projet s'inscrit dans l'esprit de la formation par compétence. Il permet la mobilisation des ressources de l'étudiant dans la réalisation d'une tâche authentique. Les étudiants devront travailler en équipe (taille: de 2 à 3 étudiants maximum). Il est fortement conseillé d'effectuer les projets par groupe de 3. Les critères de correction et les attentes ne seront pas modifiés en fonction du nombre d'étudiants dans l'équipe. Chaque période de cours sera divisée en deux. La première partie abordera un des thèmes du contenu du cours. La deuxième partie consistera à réviser avec chaque équipe le déroulement des travaux entrepris dans le but d'éviter des dérives éventuelles. Modalités d'évaluation ====================== **Éléments d'évaluation** ------------------------------------------------------------------------ Description sommaire Date Pondération -------------------------------------- ---------------- ---------------- Projet partie 1 - Environnement de 15 février 2023 20% développement avec Docker Projet partie 2 - Environnement 15 mars 2023 20% d'intégration continue avec Jenkins Projet partie 3 - Déploiement dans 19 avril 2023 30% Kubernetes et Présentations/démonstrations Examen final 26 avril 2023 30% ------------------------------------------------------------------------ Les présentations/démonstrations et l'examen final sont sujets à la politique d'absence aux examens du département d'informatique. Les présentations sont effectuées de manière synchrone durant la période de cours (avec diaporama). La qualité du français fait partie intégrante des critères d'évaluation des travaux jusqu'à un MAXIMUM DE 15% (1% de la note de chaque travail pour chaque faute; non applicable sur l'examen). Tous les étudiants ont accès au logiciel Antidote pour corriger leur texte. Les règlements concernant le plagiat seront strictement appliqués. Pour plus de renseignements, consultez le site suivant : La note de passage du cours est de 60% pour l'ensemble de l'évaluation et de 50 % pour l'examen final. **Examen** L'examen de fin de session se déroulera en présentiel, durant la période indiquée à l'horaire. Médiagraphie ============ VO -- Notes de cours sur le site Moodle VO -- Winters, T. and Manshreck, T. and Wright H.K. - *Software Engineering at Google: Lessons Learned from Programming Over Time* - O'Reilly Media; 1st edition, 2020 VC -- Miell, I, and Sayers, A. H. - *Docker In Practice* - Manning Publications; 2nd edition, 2019 VC -- Miell, I, and Sayers, A. H. - *Kubernetes: Up and Running* - O'Reilly; 3rd edition, 2022 VC -- Yuen, B. and Matyushentsev, A. and Ekenstam, T. - *GitOps and Kubernetes: Continuous Deployment with Argo CD, Jenkins X, and Flux* - O'Reilly; 1st edition, 2021 VC -- Duvall, P. M. - *Continuous Integration: Improving Software Quality and Reducing Risk* - Addison-Wesley Professional; 1st edition, 2007 VC -- Humble, J. and Farley, D. *Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation* - Addison-Wesley Professional; 1st edition, 2010 VC -- Bryant, D. and Marín-Pérez, A. *Continuous Delivery in Java* - O'Reilly Media; 1st edition, 2018 VC -- Ford, N. -- *The Productive Programmer* -- O'Reilly, 2008 VC -- Stojanovic, S. and Simovic, A. - *Serverless Applications with Node.js: Using AWS Lambda and Claudia.js* - Manning Publications; 1st edition, 2019 VC -- Carlson, D. -- *Eclipse Distilled* -- Addison-Wesley, 2005 VC -- Ford, N. -- *The Productive Programmer* -- O'Reilly, 2008 VC -- Stojanovic, S. and Simovic, A. - *Serverless Applications with Node.js: Using AWS Lambda and Claudia.js* - Manning Publications; 1st edition, 2019