% INF3135 — Construction et maintenance de logiciels % UQAM — Département d'informatique % Plan de cours — Hiver 2023 * Horaires, locaux et enseignants: Responsable(s) du cours ======================= Coordination ------------ Beaudry, Éric PK-4635 Enseignement ------------- Dogny, Gnagnely Serge PK-4115 Groupes: 010 Description =========== 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). - 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 Objectifs détaillés =================== 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; - bien maîtriser le langage C et le compilateur du C sous UNIX/Linux; - 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; - expliquer et utiliser les principales techniques de modularisation : décomposition fonctionnelle, dissimulation de l'information, filtres et pipelines; - utiliser des assertions (pré/post-conditions, invariants) pour documenter des composants logiciels et assurer leur bon fonctionnement; - déboguer un programme à l'aide de techniques, stratégies et outils appropriés; - 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); - é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; - 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; - expliquer les notions de base de la maintenance des logiciels et appliquer certaines techniques de maintenance (tests de régression exécutés automatiquement, remodelage de programmes). Contenu détaillé ================ **Environnement Linux/Unix, Introduction au langage C et aux outils de développement.** Introduction au langage C. Phases de compilation. Éditeurs de texte. Environnements de développement. Gestion de sources (rappels). **Les bases du langage C.** Types de bases. Variables et constantes. Opérateurs. Mots-clés. Instructions de contrôle d'exécution. Structures et unions. Variables et leur portée. Énoncés et expressions. Fichiers. Fonctions. Pointeurs. Tableaux. Tableaux à plusieurs dimensions. Préprocesseur. Mémoire et allocation dynamique. Entrées et sorties(`printf`, `scanf`, `stdin`, `stdout`, `stderr`). Tubes et redirection. **Construction automatisée de base.** Ficher `Makefile` et outil `make`. **Autres outils de compilation et configuration automatique.** Limites de `make`. Aperçu d'autres outils rependus (CMake, Autoconf/Automake). **Modularité.** Cohésion et couplage. Encapsulation et dissimulation de l'information. Décomposition fonctionnelle. **Maintenance.** Notion de base de la maintenant de logiciels. Types de maintenance. **Tests.** Niveaux de tests (boîte noire, boîte blanche). Types de tests (unitaires, intégration, acceptation). **Débogage de programmes.** Erreurs typiques. Outils : GNU gdb, Valgrind. Techniques. **Structures de données.** Tableau dynamique. Ensemble. Tableau associatif. Pile. File. **Évaluation et amélioration des performances.** Profils d'exécution, améliorations asymptotiques *vs* optimisations de code. Outils. **Bibliothèques en C.** Conception et intégration; statique vs dynamique, Aperçu de bibliothèques C populaires. Calendrier ========== \#Semaine Cours ----------- ----------------------------------------------------------- 1 Environnement Linux et développement en C 2 Base du langage C - partie 1 3 Base du langage C - partie 2 4 Base du langage C - partie 3 5 Modularité 6 Construction automatisée **7** **Examen de mi-session** 8 Autres outils de compilation et configuration automatique 9 Maintenance 10 Tests 11 Débogage de programmes 12 Structures de données 13 Évaluation et amélioration des performances 14 Bibliothèques en C **15** **Examen final** Ateliers (laboratoires) ======================= - Les ateliers concernent la matière vue. - Ne pas prendre de retard dans vos devoirs. - Les ateliers sont obligatoires et individuels à raison de 2 heures par semaine. Modalités d'évaluation ====================== Description sommaire Date Pondération ---------------------- ---------------------------------- ------------- Examen intra 6 mars 2023 25 % Examen final 24 avril 2023 25 % TP1 Remise : 12 février 2023 à 23h55 15 % TP2 Remise : 19 mars 2023 à 23h55 15 % TP3 Remise : 23 avril 2023 à 23h55 20 % Seuil de passage ---------------- Pour obtenir une note de passage (D ou mieux), l'étudiant doit obtenir: - au moins 50% dans la moyenne cumulée des examens; et - au moins 50% dans la moyenne cumulée aux travaux pratiques. Si l'un de ces seuils n'est pas atteint, la mention échec (E) sera attribuée. Obtenir 50 % ou plus aux examens et aux travaux pratiques ne garantit pas l'obtention d'une note de passage (D ou mieux). Attribution des notes --------------------- Les seuils des notes littérales (A+, A, ..., D) sont déterminés à la fin en normalisant les notes numériques. Autres dispositions ------------------- La qualité de présentation est sujette à évaluation. Sans s'y limiter, cela inclut le style de codage, la qualité de présentation de rapport, l'anglais et le français utilisé. Médiagraphie ============ 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 administration 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.