% INF2050 — Outils et pratiques de développement logiciel % UQAM — Département d'informatique % Plan de cours — Été 2022 * Horaires, locaux et enseignants: Enseignement ============ Zaier, Zied PK-4115 Groupes: 020 Description du cours ==================== Objectifs --------- Initier les étudiants au développement de logiciel dans un contexte et un environnement de développement professionnel. Sommaire du contenu ------------------- Faire connaître aux étudiants les principaux outils utilisés pour le développement professionnel de logiciel. Comparaison des modèles de développement traditionnels et des processus de développements modernes. Développement de logiciel dans un contexte de logiciel libre (open source). Étude de cas. Utilisation d'outils contemporains pour de développement : cadre de test, gestion de la configuration, construction automatisée, environnement intégré de développement, outils de pistage et de revue de code. Modalité d'enseignement ----------------------- Ce cours comporte une séance obligatoire de laboratoire (2 heures). Préalables académiques ---------------------- - INF1070 - Utilisation et administration des systèmes informatiques - INF1120 - Programmation I Objectif du cours ================= - Comprendre les principales caractéristiques des différentes approches de développement. - Identifier les facteurs favorisant une approche agile. - Établir des normes de codification et paramétrer les outils pour les mettre en application. - Sensibiliser les étudiants aux techniques du réusinage (refactoring). - Rendre les étudiants aptes à définir et à implémenter des tests. - Initier les étudiants aux principales normes en génie logiciel. - Familiariser les étudiants avec les outils de construction automatisée. - Sensibiliser les étudiants à la problématique de la gestion des changements durant la réalisation des projets. - Familiariser les étudiants à un environnement de développement intégré (IDE). - Initier les étudiants à la problématique de la gestion des versions. - Sensibiliser les étudiants aux concepts d'écosystème de développement. - Initier les étudiants aux nouvelles approches dans le domaine. - Connaître certains outils de pistage et de documentation agile. - Identifier les principaux facteurs favorisant un écosystème de développement efficace. Contenu du cours ================ 1. Méthodes de développement : Agilité 1. Écrire les récits utilisateurs 2. Méthode Scrum 2. Clean code 1. Convention du codage 2. Nommage & Demeter 3. Gestion de l'erreur 3. Gestion de versions 1. GIT 2. Branches 4. Build 1. Construction automatique (make/maven) 2. Gestion des dépendances (maven) 5. Tests 1. Tests unitaires (Junit) : Savoir écrire un test unitaire 2. BICEP / CORRECT / savoir quoi tester (Analyse, conception des tests + tests fonctionnels) 6. Livraison et intégration continues (CD / CI) 1. Objectifs, processus, outils 2. Tests d'acceptation Semainier ========= 1. Génie logiciel, développement, cycle de vie, qualité, dette technique, maintenance. 2. Méthodes agiles, récits utilisateurs, scrum. 3. Gestion de version, git, commit, push, pull, *feature-branching*, forge logicielle (gitlab). 4. Tests, mise au point, tests unitaires, junit. 5. Coder proprement. 6. Construction automatisée, make, ant, maven, gestion des dépendances. 7. Examen intra. 8. Gestion des sources, branches, merge, git avancé, forge avancé, workflows. 9. Normes de codage, styles, outils et pratiques. 10. Tests unitaires avancés: fake, mock, injection de dépendances, etc. 11. Tests fonctionnels et plan de tests. 12. Refactorisation, qualité logicielle. 13. Développement dans le logiciel libre et accompagnement pour le projet de session 14. Intégration continue et déploiement continue (CI/CD), DevOps 15. Examen final. Modalités d'évaluation ====================== Description Date Pondération ------------------- ----------------- ------------- Quiz 1 31 mai 2022 5% Examen intra 21 juin 2022 25% Quiz 2 26 juillet 2022 5% Examen final 9 aout 2022 25% Projet - Sprint 1 6 juin 23h55 10% Projet - Sprint 2 4 juillet 23h55 15% Projet - Sprint 3 1er aout 23h55 15% Détails ------- - Les quiz tirées au hasard d'une banque de questions Moodle et devront être réalisés en 10 minutes (sur une période d'une journée). - Les examens sont constitués d'une partie quiz et d'une partie écrite avec des questions à développement, de réflexion, d'étude de cas, etc. Il seront réalisables de façon asynchrone sur plusieurs jours mais sont calibrés pour demander 3h de travail. - Le projet est un travail à réaliser en groupe de trois ou quatre, avec trois sprints évalués indépendants. L'évaluation prendra en compte toutes les dimension du développement : le code, la documentation, les tests, la construction automatique, l'historique de développement, la revue de code par les pairs, et autres artefacts. Remarques particulières ----------------------- Un travail remis en retard reçoit la note zéro à moins d'avoir fait l'objet d'une entente préalable avec l'enseignant. Le détail des conditions de réalisation de chaque évaluation est précisé avec la description de l'évaluation. La qualité du français fait partie intégrante des critères d'évaluation des travaux jusqu'à un maximum de 10%. La note de passage du cours est de 60% pour l'ensemble des évaluations. Même si le travail est réalisé en équipe, la note obtenue dans le projet de session est individuelle. La note finale (en lettre, A+, A, etc.) pour le trimestre sera attribuée en fonction de l'atteinte des objectifs spécifiques à travers les évaluations. La distribution des résultats dans le groupe pourrait aussi être utilisée. Aucune autre opportunité (travail supplémentaire, etc.) d'augmenter le nombre de points ne sera accordée. Les règlements concernant le plagiat seront strictement appliqués. Pour plus de renseignements, consultez le site suivant : Médiagraphie ============ - VC MARTIN, Robert C. -- *Coder proprement 2009* -- PEARSON -- ISBN: 978-2-7440-2327-9 - VC MARTIN, Robert C. -- *Agile Software Development, Principles, Patterns, and Practices 2002* -- PEARSON -- ISBN: 0135974445 - VC McCONNELL, Steve -- Code Complete, 2e édition -- MICROSOFT PRESS - ISBN: 978-0735619678