Parcours Science et Technologie du Logiciel (STL)
Le parcours Sciences et Technologie du Logiciel (STL) a pour objectif de former des spécialistes en développement logiciel, possédant une assise solide dans les langages de programmation et les méthodes algorithmiques. Il s’adresse à des étudiantes et étudiants intéressés à la fois par les aspects fondamentaux et technologiques de l’informatique.
La formation est centrée sur l'apprentissage de méthodes et d'outils rigoureux pour la conception et le développement de logiciels complexes ainsi que pour la modélisation et l'analyse de problèmes algorithmiques issus de divers domaines applicatifs.
Le parcours STL propose une filière recherche (Algorithme et Programmation Recherche) et deux filières professionnelles, dont une classique (Algorithme et Programmation pour l’Ingénieur) et une en alternance par la voie de l'apprentissage, en partenariat avec le CFA INSTA.
Objectifs
Le parcours offre des agencements d'UE qui couvrent des compétences à la fois larges et pointues en particulier autour des thématiques suivantes :
- Fiabilité du logiciel et algorithmes.
- Programmation Web, concurrence et mobilité.
- Génie logiciel et environnements de développement.
Les voies professionnelles et les voies vers la recherche s'interpénètrent largement. Les débouchés professionnels sont ceux de spécialistes en architecture logicielle et outils d'ingénierie, de cheffes et chefs de projets à forte compétence technique en algorithmique et programmation. Les voies vers la recherche visent non seulement une poursuite d'étude en doctorat, mais ont aussi des débouchés immédiats dans les centres de recherche des grandes entreprises, les bureaux d'étude et les petites entreprises innovantes et de hautes technologies. Les domaines de recherche couverts concernent la programmation et les architectures logicielles, ainsi que l'algorithmique, avec des problématiques très actuelles, liées par exemple à la programmation concurrente ou à la fiabilité des programmes.
Du point de vue des connaissances scientifiques, la formation présente l'algorithmique et la programmation en profondeur afin que les étudiants soient en mesure de mettre leurs acquis en pratique directement à la sortie de la formation. Toutefois, notre champ scientifique étant en constante évolution, les étudiantes et étudiants doivent aussi saisir les notions abstraites fondamentales leur permettant de s'adapter aux changements importants auxquels ils seront confrontés tout au long de leur carrière. Enfin, la formation aborde les questions de pratique et de responsabilité de gestion de projets, connaissances requises pour bon nombre de postes offerts à la sortie de Master.
La première année M1 du parcours STL se caractérise à la fois par un complément sur les fondamentaux de la discipline transversal au master Informatique et par un début de spécialisation. Elle est donc un tronc commun offrant une importante mutualisation d’enseignements avec les autres parcours du master Informatique.
L’année se compose de deux semestres (S1 et S2) indépendants, dans la mesure où ils doivent être validés indépendamment l’un de l’autre. Au cours de chaque semestre, l’étudiant ou l'étudiante doit suivre un nombre d'UE correspondant à 30 ECTS, chaque UE correspondant généralement à 60 heures d’enseignement (généralement 20 heures de cours + 40 heures de TD/TP) et valant 6 ECTS.
Premier semestre (M1-S1)
Au semestre M1-S1, les étudiantes et étudiants suivent 6 UE, dont 2 UE obligatoires proposées par le parcours STL, 2 UE spécifiques et 2 UE à choisir parmi celles proposées par les autres parcours du master Informatique.
Les 2 UE obligatoires sont :
- ALGAV (Algorithmique Avancée, 6 ECTS)
- L'objectif de ce cours (obligatoire, pré-requis pour le S2) , est de montrer comment l'utilisation de structures de données avancées (files de priorité, arbres de recherche, hachage, arbres digitaux) permet d'optimiser les performances des algorithmes dans des domaines d'application variés comme la gestion et la compression de données massives.
- DLP (Développement de Langages de Programmation, 6 ECTS)
- Ce cours (obligatoire, pré-requis pour le S2) décrit les choix de conception et d'implantation des traits de haut niveau des langages de programmation au travers d'un petit langage non-typé de la classe de Python. Partant d'un noyau réduit, nous y ajoutons progressivement des traits de plus en plus complexes : boucles, fonctions, fonctions de première classe, exceptions, objets, coroutines. Le cours présente l'implantation de ces traits au sein d'un interprète écrit en Java et d'un compilateur écrit en Java et générant du C, ce qui donne l'occasion de comparer des langages très différents. Le cours et les TME développent les capacités de lecture de code, d'ajout incrémental de fonctionnalités dans un projet, et de conception guidée par le test.
Les 2 UE spécifiques sont :
- OUV (Ouverture et pré-requis, 3 ECTS)
-
L’UE d’ouverture se divise en deux parties. La première partie correspond à une mise à niveau des compétences en programmation fonctionnelle, un prérequis pour le parcours STL. La deuxième partie concerne la thématique : informatique et société. Les thèmes présentés, variables, peuvent par exemple s'intéresser à l’histoire de l’informatique, aux liens entre logique et informatique, à la philosophie des science, au droit informatique, au logiciel libre et la science ouverte, etc.
-
- ANG (Anglais, 3 ECTS)
Les 2 UE optionnelles recommandées sont à choisir (sous réserve de places disponibles) parmi :
- LS (Logiciel Sûr - UE du parcours STL, 6 ECTS)
-
Dans cette UE, nous abordons la question de la sûreté logicielle, c'est à dire le fait de garantir certaines propriétés comme l'absence d'erreur de typage pendant l'exécution, l'absence de corruption mémoire, etc. Le cours est divisé en deux parties principales. Tout d'abord, nous étudierons la sûreté du point de vue des fonctionnalités du logiciel. L'objectif est de relier la spécification du logiciel (son cahier des charges) avec son implémentation. Pour cela, nous nous baserons sur la conception par contrat ainsi que le test basé sur les modèles (MbT). Dans une seconde partie, nous étudierons la problématique de sûreté du point de vue du langage de programmation, en particulier les analyses effectuées au moment de la compilation et l'analyse statique de programmes. Le langage système Rust sera utilisé pour mettre en œuvre les différents concepts vus en cours.
-
- LRC (Logique et Représentation des Connaissances - UE du parcours ANDROIDE, 6 ECTS)
- NOYAU (Architecture avancée des noyaux des systèmes - UE du parcours SAR, 6 ECTS)
- PSCR (Programmation système concurrente et répartie - UE du parcours SAR, 6 ECTS)
- ARCHI (Architecture des processeurs et optimisations - UE du parcours SESI, 6 ECTS)
- COMPLEX (Complexité, Algorithmes Probabilistes et Approchés - UE du parcours SFPN, 6 ECTS)
- MOGPL (Modèlisation, Optimisation, Graphes, et Programmation Linéaire - UE du parcours ANDROIDE, 6 ECTS)
- UE libre : toute UE du catalogue d’UE global du master Informatique, sous réserve de validation par le responsable du parcours (et de compatibilité d’emploi du temps)
Deuxième semestre (M1-S2)
Au semestre M1-S2, les étudiantes et étudiants suivent également 5 UE :
- Une UEde projet : PSTL, 6 ECTS
- Quatre UE à choisir parmi :
- APS (Analyse des Programmes et Sémantique, 6 ECTS)
-
Cette UE propose une exploration des éléments de définition des langages de programmation : syntaxe, typage et sémantiques, à la fois par leur étude formelle et dans leur mise-en-oeuvre, à travers la réalisation d'une chaîne de typage/interprétation pour une série de langages introduisant de façon incrémentale des caractéristiques impératives (boucles, procédures) et fonctionnelles (récursion, ordre supérieur).
-
- CA (Compilation Avancée, 6 ECTS)
-
Ce cours a un double objectif. D'une part on étudie la compilation de structures de contrôle de haut niveau (fermetures, exceptions etc) vers du code pour machines virtuelles ainsi que l'implantation de celles-ci en s'intéressant particulièrement à la gestion automatique de mémoire. D'autre part on effectue le passage au code natif en appliquant des méthodes d'analyse et d'optimisation du code engendré.
-
- CPA (Conception et Pratique d'Algorithmes, 6 ECTS)
- Cette UE consiste en l'étude et la mise en oeuvre efficace d'algorithmes usuels, i.e. non triviaux, en développement logiciel. Le spectre des problèmes abordés couvrira un vaste panorama allant du traitement de texte à la géométrie algorithmique. On étudiera tout autant le fondement structurel de ces domaines que solutions algorithmiques et un soin particulier sera pris pour leur implantation dans des langages de programmation modernes.
- CPS (Composants, 6 ECTS)
- La complexité croissante des systèmes informatiques et leur évolution de plus en plus rapide suscitent un intérêt accru pour le développement logiciel à base de composants réutilisables. Cet intérêt est principalement motivé par la réduction des coûts de développement et l'augmentation de la fiabilité du logiciel. Cet enseignement propose d'étudier et de mettre en pratique les concepts sous-jacents de la conception et de l'implantation des logiciels basées sur les composants (component-based software engineering ou CBSE). Cet objectif est atteint en introduisant à la fois les principes et outils de conception à base de composants, les techniques de vérification associées et la mise en œuvre d'architectures et d'applications à base de composants répartis.
- PAF (Programmation Avancée en style Fonctionnel, 6 ECTS)
- La programmation fonctionnelle, basée sur les notions de fonctions composables et de données immuables, est aujourd'hui un paradigme incontournable. Tous les langages modernes disposent de traits fonctionnels (C++, Java, Javascript, etc.) et les langages dits fonctionnels (Ocaml, Haskell, Clojure, Scala, etc.) sont aujourd'hui très présents en milieu industriel, et en plein essor. Ce cours de perfectionnement expliquera le "comment" de la programmation fonctionnelle, en illustrant les concepts dans différents langages de programmation. il expliquera également le "pourquoi", c'est-à-dire les problèmes typiques pour lesquels le style fonctionnel fournit une meilleure solution que les autres styles de programmation (impératif, objet).
- PC3R (Programmation Concurrente Réactive, Répartie et Réticulaire, 6 ECTS)
-
L'objectif de cette UE est de comprendre la difficulté de la programmation concurrente et d'explorer différentes méthodes permettant de programmer de manière plus sûre des systèmes distribués. Après une présentation des problèmes classiques du modèle préemptif à mémoire partagée, on s'intéresse à la comparaison avec le modèle coopératif (fair threads), puis avec le modèle à mémoire répartie (go-routines), le modèle synchrone (Lustre/Esterel) et le développement d'applications réticulaires (illustré par la réalisation d'une application Web). On étudie également la faisabilité d'analyses automatiques de la sûreté d'applications concurrentes (avec le model-checker SPIN).
-
Il est possible de choisir une UE en dehors des UE STL, dans d'autres parcours du master, à condition d'obtenir l'accord du responsable du parcours.
L'année de M2 suit le planning et les règles générales du Master d'Informatique.
Pour STL, il y a trois filières : R&D : Algorithmes et Programmation Recherche, ING : Algorithmes et PRogrammation pour l'Ingénieu et ALT : en Alternance. Chaque filière définit des règles spécifiques d'agencement d'UE. Cette distinction entre filières est en réalité plus importante pour l'organisation que pour les contenus. Ceux-ci se déclinent en trois thématiques : 1. Fiabibilité du Logiciel et Algorithmes, 2. Web, Concurrence et Mobilité et 3. Génie Logiciel et Environnement de Développement. La totalité des UE de M2-STL sont mutualisées entre plusieurs filières comme indiqué sur le schéma. Cette mutualisation tient compte des périodes en entreprise pour la filière en alternance.
Au semestre M2-S3, les étudiantes et étudiants suivent également 6 UE parmi :
- AAGA ( Analyse d'Algorithmes et Génération Aléatoire, 6 ECTS)
- Ce cours introduit des méthodes pour étudier la complexité moyenne des algorithmes et la génération aléatoire de structures combinatoires. Divers types d'applications seront traitées, en liaison avec les structures arborescentes et l'algorithmique probabiliste.
La seconde partie du cours est scindée suivant le cursus des étudiants. Pour la filière classique, on introduit la complexité paramétrée dans le contexte du test et de la vérification de logiciel. Pour la filière en alternance, on s'intéresse à la résolution et l'approximation de problèmes difficiles.
- Ce cours introduit des méthodes pour étudier la complexité moyenne des algorithmes et la génération aléatoire de structures combinatoires. Divers types d'applications seront traitées, en liaison avec les structures arborescentes et l'algorithmique probabiliste.
- ALASCA (Architectures Logicielles Avancées pour les Syst&eagrave;mes Cyber-physiques Autonomiques , 6 ECTS)
- Etude des architectures logicielles appliquées aux systèmes informatiques cyber-physiques autonomiques, de leurs concepts, théories, techniques et méthodologies. Applications aux architectures à base de composants et fondées sur les services, aux architectures pour la robotique autonome, pour l'informatique autonomique, pour les systèmes cyber-physiques et plus généralement pour les systèmes embarqués et répartis à grande échelle.
- DAAR (Développement des Algorithmes d'Application Réticulaire, 6 ECTS)
-
Cette UE consiste en l'étude et la mise en œuvre efficace d'algorithmes usuels, i.e. non triviaux, en développement Web et Mobile. Le spectre des problèmes abordés couvrira un vaste panorama allant des moteurs de recherche (search engines) à l'analyse de flux de données (online algorithm). On étudiera tout autant le fondement structurel de ces domaines que solutions algorithmiques et un soin particulier sera pris pour leur implantation dans des frameworks Web et Mobile modernes. Dans un second temps, différents aspects de la sécurité du Web sont abordés : intimité (privacy) des utilisateurs, contrôle du flot d'information et technologies récentes de pistage (web tracking), à travers l'étude de techniques récentes (systèmes de types pour la non-interférence, analyse dynamique d'empreinte web, ...).
-
- PPC (Paradigmes de Programmation Concurrente, 6 ECTS)
- Ce cours se divise en deux grandes parties de sept semaines chacune. La première partie (plutôt théorique) présente différents modèles et styles de programmation concurrente avancés. Après une brève introduction de la concurrence sous l’angle des réseaux de Petri, nous utilisons le CCS et le pi-calcul pour la modélisation haut niveau de systèmes concurrents. Deux cours seront dédiés pour introduire le mu-calcul ainsi que les algèbres de processus temporelles. Une prise en main du software UPPAAL servira pour appliquer les concepts appris dans cette partie. La deuxième partie (plus pratique) aborde les langages de programmation de haut niveau. On s'intéresse notamment aux modèles synchrones (réactif, dataflow, GALS, ...) et aux modèles communicants (passage de messages, acteurs, …). Deux projets sont au coeur de cette dernière partie, à savoir : un projet synchrone en utilisant SCADE et un projet acteurs en AKKA.
- SVP (Spécification et Validation de Programmes, 6 ECTS)
-
Le cours SVP s'intéresse aux liens entre la spécification d'un logiciel et son implémentation. L'objectif est de permettre la validation de l'implémentation vis-à-vis de sa spécification. Au delà d'une simple politique de tests - inévitable incomplète - nous étudierons des techniques plus poussées permettant cette validation. En pratique, nous utiliserons un langage de programmation fonctionnel dont le système de types (dit à types dépendants) permet de spécifier, programmer et valider au sein d'un unique environnement.
-
- TAS (Typage et Analyse Statique, 6 ECTS)
-
Cette UE présente d'abord le typage statique : dans un premier temps par la définition formelle de systèmes de types dans des langages mathématiques simples (lambda-calculs), puis par l'étude des différentes classes de polymorphisme des langages de programmation usuels : paramétrique, objet, ad hoc, de rangées, borné, et leurs utilisations pour la conception de bibliothèques réutilisables, ainsi que des systèmes de types étendus pour vérifier d’autres propriétés d’exécution des programmes.
Cette UE présente ensuite l'interprétation abstraite pour l'inférence de propriétés numériques (intervalles, inégalités linéaires) et de pointeurs, et son application au développement d'analyses correctes par construction et utilisables pour la vérification formelle automatique des programmes.
-
- TPEA (Techniques Professionnelles - Environnement et Applications, 6 ECTS)
-
Ce cours présente les différents aspects d’un développement logiciel en s’appuyant sur des environnements de développement et des environnements collaboratifs issus du monde du logiciel libre. Il s’agit de montrer comment, à travers l’utilisation de ces outils, doit se mener la conduite et la réalisation d’un projet industriel. Les outils supports de cet enseignement seront des outils de modélisation, des environnements de développement, des outils collaboratifs et de déploiement ; le tout étant encadré par l’utilisation d’une méthodologie.
-
- GPSTL (Gestion de Projet STL, 6 ECTS)
-
Réalisation d'un projet informatique, de l'étude préalable au démonstrateur, par des équipes de six à dix étudiant(e)s, avec pour objectif non seulement la mise en application des concepts, techniques et outils du développement d'applications logicielles, mais aussi la mise en œuvre des compétences transversales requises pour la conduite de projet, le travail en équipe, la communication et le partage des informations, le respect des délais, le souci de la qualité du livrable et de sa documentation. Après une introduction, les étudiants choisissent un cahier des charges, forment leur équipe-projet et définissent leur méthodologie de travail. Ils peuvent s'appuyer pour cela sur des cours magistraux sur la méthode agile de développement suggérée : SCRUM. Après cette première étape, les étudiants rencontrent régulièrement leur enseignant-client. L'évaluation se fait sur la base du développement réalisé et présenté lors de la recette finale et sur la base d'une évaluation méthodologique à mi-parcours.
-
- PISTL (Projet d'Ingénierie STL, 6 ECTS)
- Projets d'ingénierie visant la production d'applications logicielles, réalisés en équipe et mettant en œuvre des outils de développement typiques des bonnes pratiques en ingénierie logicielle dans l'industrie. Adoptant une approche pédagogique dite par projets, les enseignements dispensés dans cette UE seront intégrés à la réalisation du projet, en réponse aux besoins suscités par ce dernier. Les projets sont proposés par nos partenaires industriels. Chaque projet est tuteuré par un ou plusieurs référents industriels et par l'équipe pédagogique. Un créneau de 4h par semaine est bloqué pour les étudiants pour se consacrer au projet. Dans ce créneau sont insérés cours, audits et potentiellement rendez-vous avec les référents industriels.
- GRAPA (Groupe de Recherche en Algorithmique et en Programmation Avancées, 6 ECTS)
- L'objectif du groupe de recherche est de sensibiliser les étudiants de master à la méthodologie de recherche scientifique, telle qu'elle se pratique en recherche et développement industriels, ainsi que dans les laboratoires académiques. Le cours se divise en trois parties : (1) étude bibliographique, (2) présentation d'articles et (3) projet de programmation. Les thématiques scientifiques couvrent l'algorithmique et la programmation avancée. Le cours offre également une sensibilisation aux métiers de la recherche : ingénieur de recherche et développement, gestion de projet scientifique, poursuite d'étude en doctorat. L’évaluation comporte fiches de lecture (bibliographie), présentation d'article (oral), rendu du projet et soutenance finale (oral).
Le choix des UE est contraint par rapport à la filière intégrée.
Il est aussi possible de choisir une UE en dehors des UE STL mentionnées ci-dessous (dans les autres parcours du master ou pour la filière recherche, une UE du MPRI) à condition d'obtenir l'accord du responsable de la filière.
Savoir-faire et compétences
À l’issue de la formation, les étudiantes et étudiants ont acquis une expertise en ingénierie du logiciel ainsi qu’une connaissance poussée de la sûreté de fonctionnement des logiciels tout en ayant été confrontés à la résolution de problèmes algorithmiques récents.
Le parcours STL forme des spécialistes à forte compétence technique en algorithmique et programmation, mais aussi avec un bagage conséquent en connaissances fondamentales dans ces thématiques facilitant l’évolution de carrière et l’acquisition ultérieure de nouvelles compétences.
Public visé et prérequis
Le parcours STL s’adresse à des titulaires d’un diplôme de Licence ou d’un diplôme équivalent, en informatique ou en mathématiques et informatique. Il peut également accueillir directement en M2, des étudiantes et étudiants ayant effectué leur première année de Master dans une autre école ou université, française ou étrangère. Une admission est envisageable pour des candidates et candidats en Formation Continue, postulant éventuellement au titre de la VAE.
Les prérequis de la première année de STL relèvent de connaissances et concepts de niveau Licence, essentiellement dans les domaines de la programmation et de l'algorithmique : notions générales sur les trois types de langages (fonctionnel, impératif et objet) ; connaissance approfondie d'au moins un langage (Java, OCaml ou C) ; structures de données et algorithmes fondamentaux (listes, arbres, graphes, recherche et tri) ; méthodes de conception des algorithmes (correction et complexité). Il faut aussi des bases de logique et de compilation ainsi que des principes sur les systèmes d'exploitation, ainsi qu'une bonne connaissance externe d'Unix et des outils de développement de programmes.
Débouchés
Les débouchés des filières professionnelles sont ceux d’expertes et experts en ingénierie du logiciel (maîtrise des techniques applicatives les plus récentes et capacités de prise en charge de la définition et de la gestion d’environnements de développement) ainsi que de spécialistes en sûreté de fonctionnement (conception ou validation de systèmes comportant de nombreux composants logiciels et devant répondre à des exigences de sûreté). La filière recherche vise non seulement une poursuite d’étude en Doctorat, en algorithmique et en programmation, mais elle a aussi des débouchés immédiats dans les centres de recherche des grandes entreprises, les bureaux d’étude et les startups logicielles.
Contacts
Responsables du parcours
Frédéric PESCHANSKI
Antoine GENITRINI
Secrétariat
Émilie AUGER