Contenu des enseignements de la spécialité Ingénierie Logicielle
Système d’exploitation
Objectif : Le cours prolonge et complète la formation dispensée en L2. Il aborde les aspects pratiques de la programmation système UNIX dans sa version libre LINUX.
Contenu
Après un rappel sur les différents modes existants (mono-tache mono-processeur, multi-tâches mono-processeur, multi-tâches multiprocesseurs), ce cours détaille le mécanisme de la programmation parallèle. Les notions de tubes (« pipe »), et de mémoires partagées, sont introduites dans le contexte de la communication des processus. Leur synchronisation est étudiée avec la présentation des sémaphores. La notion de processus légers ou « threads » est alors introduite pour montrer comment réduire le temps de commutation des contextes, lorsque le système d’ordonnancement choisit de mettre en attente un processus, pour rendre actif un autre plus prioritaire. La gestion des fichiers est analysée au plus bas niveau du système (celui du noyau). La gestion de la mémoire (pagination, mémoire virtuelle), est également abordée dans l’environnement de la programmation multi-tâches. La communication par messages (systèmes distribués) dans le mode Client/ Serveur à travers les sockets permet alors à l’étudiant de comprendre le fondement de l’Internet.
Architecture des machines
Objectif :Le but du cours est de donner aux étudiants les outils d’architecture matérielle nécessaire à l’évaluation de la performance des applications logicielles. Par surcroît, les étudiants acquièrent des compétences en programmation assemblage.
Contenu
1. Généralités : interface matériel-logiciel, organisation en niveaux.
2. Représentation des données en machine.
3. Description d’un jeu d’instructions RISC : MIPS.
4. Cycle d’exécution (compilateur, assembleur, chargement en mémoire).
5. Circuits logiques combinatoires et séquentiels.
6. Construction d’un CPU (chemin de données et contrôle)
8. Optimisation par « pipelining ».
9. Hiérarchie de la mémoire (caches et mémoire virtuelle)
10.Bus et entrées/sorties. Mécanismes d’interruption
Programmation impérative (C sous Unix)
Objectif : L’objectif de ce cours est de permettre aux étudiants de se remettre à niveau en programmation C sous Unix. Ce cours permet une introduction au développement de projets en langage C sous Unix.
Contenu : Unix: Introduction à Unix, commandes, système de fichiers, processus, interpréteurs de commandes. Langage C: opérateurs, boucles, variables, fonctions, bibliothèques, pointeurs, tableaux, chaînes de caractères, structures, directives du préprocesseur, inclusion de fichiers, compilation, déclaration et définition des objets.
Programmation fonctionnelle
Objectif : Ce cours de programmation fonctionnelle s’appuiera sur le langage Caml
Contenu : Généralités sur les ensembles – Produit d’ensembles – Somme directe d’ensembles – Fonctions et fonctionnelles – Isomorphismes.
Introduction à Caml – Déclarations – Identificateurs – Environnements.
Modules.
Fonctions simples – Fonctions récursives.
Types simples – Types polymorphes.
Types récursifs.
AspCrédits impératifs de Caml.
Programmation objet
Contenu : Classes, objets, instances, méthodes, envoi de message (principes généraux) éléments syntaxiques du langage de programmation choisi, programmation par contrat (invariant de classe, pré-conditions, post-conditions) héritage simple Extension souhaitée (éléments supplémentaires abordés actuellement en Licence/ILOG): principe général de l’héritage multiple: pseudo-héritage multiple (en JAVA/SMALLTALK), vrai héritage multiple (en Eiffel/C++)
Exceptions architecture logicielle (exemple de l’architecture Model View Controller)
Programmation logique
Objectif : Le but du cours est double : (i) présenter les idées fondamentales qui fondent les approches opérationnelle et dénotationnelle en sémantique formelle des langages de programmation et (ii) montrer, à l’aide d’exemples d’application précis, comment ces approches peuvent être utilisées pour valider des prototypes, analyser l’implémentation de fonctionnalités plus sophistiquées et vérifier certaines propriétés des programmes. Chaque type de sémantique formelle sera illustré sur un langage-test, appelé WHILE (une version très simplifiée de PASCAL) et certaines de ses extensions et variantes : construction par blocs, procédures (récursives ou non) avec liaison statique ou dynamique des variables et des procédures, non déterminisme, etc.
Contenu :
Description et spécification rapides du langage WHILE.
Sémantique opérationnelle structurelle et sémantique naturelle du Langage WHILE et de ses extensions.
Application : preuve de la correction d’un compilateur pour WHILE.
Equivalence entre sémantiques naturelle et structurelle.
Sémantique dénotationnelle du langage WHILE et de ses extensions.
Application : analyse statique des programmes (ex : dépendance entrées-sorties).
Génie logiciel I
Objectif : 1. Niveau de base de pratique de spécification précise
2. Qualité logicielle : pratique systématique et planifiée du test.
Contenu : Techniques de spécification algébrique de base appliquée à la spécification formelle des structures de données de base de l’informatique (booléens, entiers, listes, piles, arbres binaires, graphes). Le langage utilisé est CASL (langage commun établi). Les structures de données choisies feront partie de celles étudiées dans le cours d’algorithmique qui a lieu en parallèle.
Qualité logicielle : techniques de test de logiciel, les différentes approches de test (fonctionnelle, structurelle), et les différents critères utilisés pour sélectionner un jeu de test, plan de test. Principes d’aide à la génération de pilotes de test.
Objectif : Techniques d’analyse, de conceptualisation et de structuration de systèmes informatiques
Contenu : Description des systèmes informatiques structurée par buts à l’aide des cas d’utilisation
Application du 1. à la description de systèmes en langage UML. Etude d’UML. Structuration des problèmes à l’aide des schémas de problème (« problem frames »).Illustration de ces techniques sur des études de cas de grande taille.