Software Modelling and Design, Model-Driven Engineering, Model-Based Software Development, Model Driven Architecture, Conceptual Modelling, Domain Modelling, Meta-Models, Unified Modeling Language (UML) Profiling, Modelling Behaviour and Interactions, Domain-Specific Modelling Languages, Model Validation and Verification, Model Transformation (e.g., Model to Model (M2M), Model to Text (M2T), Template-Based transformations), Action Specification, Action Languages, Automatic Code Generation.
Introduction à la sécurité logicielle. Analyse des vulnérabilités, testing de sécurité, stratégies de mitigation. Sécurité multi-niveau des systèmes numériques. Sécuriser la périphérie, sécuriser le logiciel, sécuriser les données (encryption), contrôle d'accès et authentification. Développement de logiciel sécuritaire. Exigences de sécurité,  sécurité par conception. Introduction aux DevOps, intégration et déploiement continus, containeurs et microservices. Introduction aux DevSecOps, monitorage et mitigation des menaces dynamiques, automatisation des réponses aux menaces. Systèmes auto-adaptatifs et auto-protecteurs. Analyse des risques des vulnérabilités et des menaces sécuritaires.
Rôle des structures discrètes en génie informatique et en génie logiciel. Ensembles et logique de base. Techniques de preuves : règles d'inférence et de déduction. Relations et fonctions. Algorithmes : définition, analyse, récursivité. Théorie des nombres : arithmétique, congruences, application à la cryptographie. Éléments de combinatoire : énumération, permutations et combinaisons. Relations de récurrence. Théorie des graphes. Arbres. Langages et grammaires, automates finis, machines de Turing.
Processus du génie logiciel et cycle de vie du logiciel . Phases du cycle de vie du logiciel: analyse, conception, réalisation, test, maintenance et exploitation. Activité d'analyse et de conception dans le processus du génie logiciel : principes, spécifications et méthodes. Méthodes d'analyse et de conception orientée-objet : langages et notation standards, modélisation structurelle, modélisation de comportement et modélisation architecturale. Décomposition en couches logicielles. Patrons de conception.
Software release engineering process: integration, build, multi-staged testing, deployment, release and operations. Definition and base concepts of mining software repositories. Different types of repositories: version control, bug reports, code review, mailing lists, StackOverflow, project ecosystems, collaboration platforms. Techniques for empirical analysis of repositories: data mining, statistical analysis, natural language processing, source code analysis, qualitative analysis. Integration: configuration management, branching patterns, feature toggles, merge conflicts. Build: maintenance and verification of build, build failures, continuous integration, infrastructure-as-code, software configuration. Multi-staged testing: bug prediction, test selection, continuous testing. Deployment/release: large-scale distributions, deployment/release strategies, source code provenance, app stores. Operations: log analysis, rollback.
Modern software DevOps process. State-of-the-art DevOps research. Methods for conducting and reporting research. Concepts and techniques of DevOps monitoring: logging, tracing, and performance monitoring. Concepts and techniques of DevOps data analytics: static analysis, dynamic analysis, statistical analysis, data mining. Applications of DevOps data analytics: log analytics, performance analytics, anomaly detection, failure diagnosis, incident prediction, security analytics, system configuration, and self-adaptive and self-healing systems. DevOps for machine learning applications.
Caractéristiques des logiciels pour le Web. Notions de client, de serveur et de logiciels distribués. Conception d'applications Web pour la génération dynamique de contenu et la gestion d'interactions avec les utilisateurs. Structure d'un document HTML (HyperText Markup Language). Mise en forme d'un document HTML par l'utilisation de CSS (Cascading Style Sheet). Programmation du côté client et du côté serveur. Présentation générale de l'architecture du web et du protocole HTTP (HyperText Transfer Protocol). Approches à la vérification: stratégie et planification des tests, évaluation de tests. Tests unitaires et tests d'intégration. Tests à boîte noire, vérification fonctionnelle d'une application et tests d'acceptation.
Basic concepts and definitions relevant to software quality, quality assurance, tests, quality engineering and quality planning. Anomaly prevention and fault classification. Fault tolerance. Software reliability engineering. Quality models. Comparison of different quality assurance techniques. Improvement of the software development process. Measuring the software and its processes. Identification of risks for the quantifiable improvement of quality.
Réalisme des personnages en intelligence artificielle. Conception de règles de jeu. Sensibilisation à l'utilisation de la physique dans un jeu pour mieux percevoir et agir sur son environnement: intégration de bibliothèque de physique du jeu vidéo, lancer de rayon, cinématique inverse, voxelisation. Sensibilisation à l'animation : vallée dérangeante, animation faciale. Sensibilisation à la génération de contenu procédural: algorithmes génératifs pour la voix, les animations, les niveaux, les personnages, les situations rencontrées, ainsi que le contrôle dynamique et personnalisé de la difficulté du jeu. Navigation. Boucles de perception, de décision et d'action. Systèmes complexes et efficacité.
Historique des jeux vidéo. Types de jeux vidéo. Rôles impliqués dans la création de jeux vidéo. Conception de jeux : apprentissage, plaisir, document de conception de jeu vidéo. Personnage, caméra et contrôle. Règles et mécaniques de jeu : jeux d'émergence et jeux de progression, économie interne, mécanismes de progression, structures de rétroaction, patrons de conception, incitatifs, monétisation. Conception de niveaux. Interface utilisateur. Notions de jeux multijoueurs. Assurance qualité. Production et communauté.
Importance de la validation et de la vérification dans le processus du génie logiciel. Méthodes de test et de validation. Classification des méthodes. Rappel des méthodes de test structurel. Méthodes de test fonctionnel. Génération de tests pour automates finis. Stratégies de tests d'intégration et d'installation pour programmation procédurale et orientée objet. Approches statistiques en validation et en vérification. Méthodes du développement pour assurer la fiabilité. Planification des activités de test du logiciel.
Introduction à l'analyse de programmes en langages évolués, aux grammaires et aux langages. Analyse structurelle : analyse syntaxique, arbre d'appels des procédures et graphes de flux de contrôle. Introduction et fondements théoriques en analyse statique de flux : théorie des graphes et algorithmes, ordre partiel, treillis, analyse de flux. Analyses élémentaires : définitions, variables vives, expressions disponibles, propagation de copies, initialisation des variables et paramètres, détection des instructions inaccessibles ou inutiles, vérification de l'utilisation efficace des variables, propagation des constantes, analyse des pointeurs ou des alias, analyse des dépendances et analyse d'impact en maintenance du logiciel. Analyse dynamique : instrumentation des programmes, tests à boîte blanche, évaluation des performances.
Conception et réalisation en équipe d'un produit logiciel nécessitant l'application de notions et de méthodes acquises préalablement dans le programme de génie logiciel. Les étudiants auront recours à une méthodologie de conception et de gestion nécessaire pour la réalisation d'un produit logiciel. Une attention particulière sera accordée à l'assurance qualité. Pour chacune des étapes, l'étudiant utilisera les outils logiciels appropriés. L'étudiant mettra en pratique un processus structuré de GL tel que UPEDU (Unified Process for Education) et utilisera quelques pratiques des méthodes Agiles.

Conception, réalisation, validation et test d'une application Web. Concepts techniques intégrés : notions de base en infographie, interfaces utilisateur, structures de données et algorithmes, programmation orientée objet, patrons de conception, révision de code, intégration continue, tests de logiciel. Concepts techniques enseignés: gestion de projet logiciel, services web, approche agile. Travaux en équipe.

Évolution et maintenance d'un système logiciel. Ce cours-projet intègre les connaissances acquises en ingénierie des exigences, en analyse et conception et en validation et test de logiciel. Il met en pratique les notions acquises sur le processus de développement du logiciel. Tous les travaux sont réalisés en équipe.
Tendances en réalité virtuelle, en réalité augmentée et en réalité mixte. Cycle de développement logiciel en réalité étendue. Techniques de conception en réalité étendue. Caméra et contrôle. Applications en réalité virtuelle. Applications en réalité augmentée. Usages de la réalité étendue.