% INF3135 — Construction et maintenance de logiciels % UQAM — Département d'informatique % Plan de cours — Automne 2019 * Horaires, locaux et enseignants: * Site web du cours: Responsable(s) du cours ======================= Coordination ------------ Blondin Massé, Alexandre PK-4525 514-987-3000 \#5516 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ébogage de programmes (erreurs typiques, traces, outils, par ex., GDB). - 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, par exemple, xUnit, scripts). - É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 (par exemple, make, CVS). - Introduction à la maintenance de logiciels (types de maintenance, techniques de base, par exemple, remodelage, automatisation des tests de régression). 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 maitriser 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 ================ 1. Introduction - Éditeur de texte - Langage C - Langages de balisage léger - Environnement Unix - Git - Compilation 2. Bases du langage C - Variables et constantes - Structures de contrôle - Opérateurs - Tableaux - Chaînes de caractères - Pointeurs - Fonctions - La fonction main - Chaînes de caractères - Tableaux multidimensionnels - Structures et unions - Types - Entrées et sorties - Manipulation de fichiers - Entrée et sortie standard 3. Structures de données et allocation dynamique - Allocation dynamique - Généricité - Listes - Piles - Files - Arbres 4. Modularité - Modules en C - Cohésion/couplage - Précompilation - Makefiles - Bibliothèques 5. Style et documentation - Principes de base - Variables - Fonctions - Structure du code - Commentaires 6. Contrats et maintenance - Contrats - Assertions - Exceptions - Maintenance 7. Tests - Généralités - Boîtes blanches - Boîtes noires 8. Scripts et automatisation - Bash - Expressions régulières - Commandes Unix - Débogage - Évaluation des performances Modalités d'évaluation ====================== ---------------------- -------------- ------------- Description sommaire Date Pondération Examen intra À déterminer 25 % Examen final À déterminer 25 % TP1 À déterminer 15 % TP2 À déterminer 15 % TP3 À déterminer 20 % ---------------------- -------------- ------------- Les examens sont individuels et à livres ouverts (documentation papier seulement, aucune documentation électronique). Une moyenne d'au moins 50% aux **examens** et dans les **travaux pratiques** est exigée pour réussir le cours. L'étudiant ne remettant aucun des travaux se verra attribuer un échec. À moins d'indication contraire, les travaux pratiques doivent être réalisés individuellement. Une pénalité de 1% **par heure** de retard sera appliquée. 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. 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 Purdy, G.N. -- *CVS Précis & concis* -- ÉDITIONS O'REILLY, 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.