% INF3135 — Construction et maintenance de logiciels % UQAM — Département d'informatique % Plan de cours — Été 2020 * Horaires, locaux et enseignants: * Site web du cours: Responsable(s) du cours ======================= Coordination ------------ Blondin Massé, Alexandre PK-4525 poste 5516 Enseignement ------------- Blondin Massé, Alexandre Description du cours ==================== Objectifs --------- Initier les étudiants à la programmation à l'aide d'un langage impératif et procédural. Familiariser les étudiants à la construction professionnelle de logiciels et à leur maintenance. Sommaire du contenu ------------------- - Notions de base de la programmation procédurale et impérative en langage C sous environnement Unix/Linux (définition et déclaration, portée et durée de vie, fichier d'interface, structures de contrôle, unités de programme et passage des paramètres, macros, compilation conditionnelle). - Décomposition en modules et caractéristiques facilitant les modifications (cohésion et couplage, encapsulation et dissimulation de l'information, décomposition fonctionnelle). - Style de programmation (conventions, documentation interne, gabarits). - Déboggage de programmes (erreurs typiques, traces, outils). - Assertions et conception par contrats. - Tests (unitaires, intégration, d'acceptation, boîte noire vs. boîte blanche, mesures de couverture, outils d'exécution automatique des tests). - Évaluation et amélioration des performances (profils d'exécution, améliorations asymptotiques vs. optimisations, outils). - Techniques et outils de base pour la gestion de la configuration. Système de contrôle de version. Modalité d'enseignement ----------------------- Ce cours comporte une séance obligatoire de laboratoire (2 heures). Préalables académiques ---------------------- - INF1120 - Programmation I (pour le certificat en réseaux et systèmes de télécommunications et le baccalauréat en systèmes informatiques et électroniques) - INF2050 - Outils et pratiques de développement logiciel Objectif du cours ================= Ce cours vise à introduire les étudiants à la construction professionnelle de logiciels. Il vise aussi à familiariser les étudiants avec la programmation procédurale et impérative. À la fin du cours, l'étudiant devrait être capable : - de développer et modifier des composants logiciels écrits dans un langage impératif et procédural; - de bien maîtriser le langage C et le compilateur du C sous UNIX/Linux; - d'utiliser les notions de module, de cohésion et couplage, de complexité structurale, de dissimulation de l'information, etc., pour évaluer la qualité d'un composant logiciel; - d'expliquer et d'utiliser les principales techniques de modularisation : décomposition fonctionnelle, dissimulation de l'information, filtres et pipelines; - d'utiliser des assertions (pré/post-conditions, invariants) pour documenter des composants logiciels et assurer leur bon fonctionnement; - de déboguer un programme à l'aide de techniques, stratégies et outils appropriés; - de vérifier le bon fonctionnement d'un composant logiciel à l'aide de tests fonctionnels et structurels, et d'évaluer à l'aide des notions et outils appropriés la qualité des tests (par ex., complexité cyclomatique, mesures de couvertures des tests); - d'évaluer de façon empirique à l'aide d'outils appropriés (par ex., profils d'exécution) les performances d'un composant logiciel de façon à pouvoir, si nécessaire, en améliorer les performances; - d'utiliser divers outils (outil de gestion de configuration, fichiers Makefile, langage de scripts) pour organiser le développement de programmes comportant plusieurs composants ou modules; - d'expliquer les notions de base de la maintenance des logiciels et d'appliquer certaines techniques de maintenance (tests de régression exécutés automatiquement, remodelage de programmes). Contenu du cours ================ Le contenu du cours sera divisé comme suit: - **Chapitre 1:** Base du langage C - **Chapitre 2:** Environnement de développement - **Chapitre 3:** Pointeurs et mémoire - **Chapitre 4:** Entrées et sorties - **Chapitre 5:** Maintenance - **Chapitre 6:** Structure de données - **Chapitre 7:** Bibliothèques - **Chapitre 8:** Qualité d'un programme - **Chapitre 9:** Tests et analyse de programme - **Chapitre 10:** Scripts - **Chapitre 11:** Intégration et déploiement continus - **Chapitre 12:** Sujets divers Si le temps le permet, divers sujets pourront être abordés dans le chapitre 12: profilage, performance et optimisation, interface avec d'autres langages, etc. Ateliers (laboratoires) ======================= - Il y a une séance de laboratoire de 2h prévue à l'horaire toutes les semaines (sauf le 24 juin et le 1er juillet qui sont fériés) - Tout le contenu abordé pendant les laboratoires est matière à évaluation Modalités d'évaluation ====================== Description sommaire Date Pondération ---------------------- ------------ ------------- Quiz 1 26 mai 10 % Quiz 2 23 juin 10 % Quiz 3 14 juillet 10 % Quiz 4 11 août 10 % TP1 19 juin 20 % TP2 17 juillet 20 % TP3 18 août 20 % Directives pour les quiz ------------------------ - Chaque quiz se déroulera sur Moodle - Une période de vingt-quatre (24) heures sera prévue pour chaque quiz - Pendant cette période, chacun d'entre vous pourra choisir le moment qui lui convient le mieux pour démarrer le quiz - À partir du moment où le quiz sera commencé, vous aurez une (1) heure pour le compléter Le TP1 et le TP2 doivent être complétés de façon individuelle. Le TP3 pourra être complété en équipe d'au plus 3 personnes. La qualité du français sera prise en considération (jusqu'à 10% de pénalité). Les règlements concernant le plagiat seront strictement appliqués. Pour plus de renseignements, consultez le site suivant : Médiagraphie ============ UO . Site web du cours. VC Kernighan, B.W. et Ritchie, D.M. -- Le langage C -- deuxième édition, MASSON, PARIS, 1990. UC . Site web du cours INF1070 Utilisation et adminitsration des systèmes informatiques. VC Blaquelaire, J.P. -- *Méthodologie de la programmation en C (4e édition)* -- DUNOD, 2005. \[QA76.73 C15B75\]. VC Kernighan, B.W. et R. Pike, R. -- *The Practice of Programming* -- ADDISON-WESLEY, 1999. VC Kernighan, B.W. et R. Pike, R. -- *La programmation - En pratique* -- VUIBERT, 2001. \[QA76.6K48814\]. VC Loukides, M. et Oram, A. -- *Programming with GNU Software* -- O'REILLY, 1997. VC McConnell, S. -- *Code Complete - A Practical Handbook of Software Construction* -- (SECOND EDITION). MICROSOFT PRESS, REDMOND, WA, 2004. VC ZELLER, A. and KRINKE, J. -- *Essential Open Source Toolset* -- JOHN WILEY & SONS, LTD, 2005. UR . Site web contenant des notes de cours et transparents, des anciens examens, etc.