% MGL7760 — Qualité et productivité des outils logiciels % UQAM — Département d'informatique % Plan de cours — Hiver 2021 * Horaires, locaux et enseignants: Responsable(s) du cours ======================= Coordination ------------ Mosser, Sébastien PK-4820 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. Plates-formes 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 plate-formes 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 (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) - Mettre en place un environnement de développement avec Docker - Orchestration des conteneurs (Docker Swarm, Kubernetes) - Infonuagique (Cloud Computing) - Infrastructure as Code ou IaC (Terraform) - Déploiement Continue (Jenkins, Docker, Terraform) - Le paradigme de programmation *Serverless* - Langages spécifiques au domaine (*Domain-Specific Languages ou DSL*) - Méta-programmation 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 ------------------------------ -------------------- ------------- Présentation/démonstration 1 24-02-2021 18h-21h 15% Présentation/démonstration 2 24-03-2021 18h-21h 20% Présentation/démonstration 3 21-04-2021 18h-21h 20% Rapport d'analyse d'outils 10-03-2021 18h 15% Examen final 05-05-2021 18h-21h 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 et des examens jusqu'à un maximum de 25 %. 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 50% pour l'ensemble de l'évaluation et de 50 % pour l'examen final. **Participation en classe** La participation en classe inclut les lectures à faire à chaque semaine dans le livre du cours : *Software Engineering at Google* (voir la section Médiagraphie). Au début de chaque séance de cours, 2 ou 3 étudiants seront appelés à faire un résumé verbal des lectures. **Examen** L'examen de session se déroulera à distance, via Internet, durant la période indiquée à l'horaire et il sera uniquement possible de répondre aux questions durant cette a période. Tous les étudiants devront se connecter sur la plateforme Zoom en mode Vidéo. Il est de la responsabilité de l'étudiant de s'assurer d'avoir une bonne connexion Internet le jour de l'examen. 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 -- Clark, M. -- *Pragmatic project automation* -- Pragmatic Bookshelf, 2004 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 -- Miell, I, and Sayers, A. H. - *Docker In Practice* - Manning Publications; 2nd edition, 2019 VC -- Ruby, S. and Dave T. and Copeland D.B. -- *Agile Web Development with Rails 6* -- Pragmatic Programmers, 2005 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