Caractéristiques du produit logiciel. Gestion des configurations. Processus de développement logiciel et modèles du cycle de vie. Phases du cycle de vie : analyse, spécification, conception, réalisation, tests et maintenance. Définition des exigences : explicitation, contraintes usagers, frontières de système, consistance, complétude, vérifiabilité et maintenance. Hiérarchie et attributs des spécifications. Modélisation statique et opérationnelle, prototypage. Approches à la vérification : stratégie et planification des tests, évaluation de tests. Analyse de couverture et méthode de tests structurels. Tests unitaires, tests d'intégration et de régression. Tests à boîte noire, vérification fonctionnelle de systèmes et tests d'acceptation.
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. Cadres de référence et patrons de conception. Gestion des ressources et traitement des exceptions.
Rôle des structures discrètes en génie logiciel et génie informatique. Relations d'équivalence, partitions, ordres partiels. Fonctions injectives, bijectives et surjectives, composition de fonctions, notation asymptotique. Récursivité. Arbres et graphes. Relations de récurrence. Théorie des ensembles et logique de base. Techniques de preuves. Règles d'inférence et de déduction. Éléments de combinatoire : énumération, permutations et combinaisons. Machines à états finis, expressions régulières et grammaires.
Activités de base d'un processus de génie logiciel. Phases du cycle de vie du logiciel. Outils et méthodes de support au processus. Survol des différentes philosophies de processus de développement de logiciel. Disciplines techniques du processus du génie logiciel : requis, analyse et conception, implémentation, test. Disciplines de gestion des processus : gestion des configurations et des requêtes de changement, gestion des projets, gestion des équipes. Évaluation des processus. Amélioration des processus. Méthodes de représentation des processus. Méta modèle. Analyse empirique des processus.
Cette formation en communication écrite et orale s'étale de la première à la troisième année. Elle se présente en quatre étapes : une évaluation initiale d'une communication écrite et d'une communication orale en première année ; une prescription personnalisée (s'il y a lieu) ; une évaluation finale d'une communication écrite et d'une communication orale en troisième année ; la réalisation d'un portfolio sur ces formes de communication. Cette formation vise à apprendre à rédiger des textes de façon efficace et productive ainsi qu'à préparer et présenter des exposés de façon efficace et productive, conformes aux conventions de communication en vigueur dans la discipline.
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.
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.
É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.
Outils mathématiques de la fiabilité des systèmes et de sécurité de l'information : structures algébriques, calculabilité, complexité de calcul, cryptographie. Modélisation des systèmes séquentiels, concurrents : réseaux de Petri (places/transitions et colorés), systèmes de transitions communicants. Spécification : logique de Hoare, logique temporelle linéaire, propriétés de sûreté de fonctionnement et de sécurité (confidentialité, authentification, anonymat, non répudiation et équité des échanges électroniques), sécurité des systèmes. Vérification : analyse des réseaux de Petri, model checking, preuves de programmes, preuves de spécifications algébriques. Applications à la sécurité : construction de programmes fiables et sécurisés, analyse des protocoles de sécurité, monitoring des activités malicieuses des systèmes logiciels.
Conception de sites web complexes pour la génération dynamique de contenu et la gestion d'interactions avec les utilisateurs. Présentation générale de l'architecture du web et du protocole HTTP (HyperText Transfer Protocol). Structure d'un document HTML (HyperText Markup Language). Mise en forme d'un document HTML par l'utilisation de CSS (Cascading Style Sheet). Paradigmes de conception propres aux systèmes web. Programmation du côté serveur. Gestion d'une session sur un site web. Éléments de sécurité pour les sites web. Présentation du format XML (Extended Markup Language) et du langage de transformation de documents XSL (Extended Stylesheet Language). Programmation du côté client par le biais de scripts exécutés par le navigateur web. Interface avec une base de données relationnelle. Notions de performance et de sécurité. Notions de validation et de test de sites web dynamiques et transactionnels.

Méthodes de conception de logiciels et choix d'architecture. Architectures logicielles : multi-niveaux, clients-serveurs, extensibles et dynamiques. Bibliothèques et chargement de composantes dynamiques. Cadres de référence et plugiciels. Applets et programmation du côté client. Composition et architecture par composantes. Patrons de conception pour les systèmes distribués : accès aux services et configuration, traitement d'événements, synchronisation et accès simultanés. Approches émergentes de conception : conception orientée aspect.

Historique du jeu vidéo. Types de jeu vidéo. Rôles impliqués dans la création de jeu vidéo. Conception de jeu : expérience de jeu, jouabilité, document de conception de jeu vidéo. Personnage, caméra et contrôle. Conception de niveau. Mécaniques de jeu : notions d'émergence et de progression, types et équilibre des mécaniques, système de récompenses. Interface utilisateur. Notions de jeu multijoueur. Création 3D : modélisation, animation, nuanceurs, textures, éclairage et rendu. Assurance qualité : playtest, tests de conformité, de compatibilité et de charge. Production : structure et dynamique d'équipe, gestion de projet et processus de développement.
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.
Types de processus : philosophie Agile, processus discipliné, modèles de référence, CMMI, ISO 15504 et méta-modèle. Rôles des processus en fonction des contextes suivants : qualité du logiciel, cycle de vie, disciplines d\'ingénierie et de support, pratiques de développement, interactions face-à-face et virtuelle, équipe distribuée, gestion des équipes, mobilité, environnement de développement, techniques d\'amélioration des processus, estimations, outils logiciels, méthodologies, métriques, certification. Application de la méthodologie de la revue systématique de la littérature dans le contexte des processus de génie logiciel.
Introduction aux méthodes empiriques en génie logiciel. Métamodélisation et mesures. Principales théories de la mesure et validation des mesures. Introduction aux études empiriques et techniques d'analyses empiriques. Principales définitions de patrons (patrons architecturaux, de conception, anti-patrons, idiomes). Principales théories liées à la compréhension de programmes et à l'utilisation de patrons. Principales méthodes d'utilisation des patrons pour le développement et la maintenance et pour faciliter la compréhension de programmes. Principales techniques d'application de patrons et d'identification d'occurrences dans divers artefacts logiciels (code source, modèles statiques, dynamiques, historiques). Impact des patrons sur la compréhension des programmes.
Processus de la mise en production de logiciel : intégration, manufacture, tests en plusieurs étapes, emballage et livraison. Planification de la mise en production et problématiques liées. Définition et concepts de base de la fouille de référentiels logiciels. Différents types de référentiels : gestion des configurations, gestion de bogues, listes de diffusion, écosystèmes de projets et sites de collaboration. Techniques pour l\'analyse empirique des référentiels: fouille de données, analyse statistique, traitement de la langue naturelle, analyse du code source et analyse manuelle. Intégration : gestion des configurations, impact des patrons de branchement sur la qualité du logiciel, patrons d\'intégration dans des projets à grande échelle. Manufacture : maintenance et vérification de la manufacture, gestion de la variabilité logicielle. Tests en plusieurs étapes : prédiction de bogues, réduction/minimalisation/sélection de tests et assurance qualité en continu. Emballage : distributions de logiciels à grande échelle, provenance de code source et applications mobiles. Livraison : techniques de déploiement, magasins d\'applications mobiles (« app stores ») et infonuagique.
Concepts et exemples d'applications des systèmes de recommandations et des filtres d'information. Modélisation des intérêts, buts et connaissances des utilisateurs. Matrices de votes, matrices termes-documents et matrices d'adjacence. Filtres collaboratifs item-item et utilisateur-utilisateur. Approches probabilistes et algorithme PageRank. Réduction de dimensions. Facteurs de confiance, transparence et sérendipité de l'information filtrée. Techniques de personnalisation en fonction de la connaissance et des actions des utilisateurs. Techniques de validation
Méthodes de conception avancées de logiciels et choix d'architecture. Architectures logicielles : multi-niveaux, clients-serveurs, extensibles et dynamiques. Concepts et implantations avancées des bibliothèques et du chargement de composantes dynamiques. Cadres de référence et plugiciels. Composition et architecture par composantes. Patrons de conception avancés pour les systèmes distribués : accès aux services et configuration, traitement d'événements, synchronisation et accès simultanés. Approches émergentes de conception et d'architecture : conception orientée aspect, architecture orientée services et autres.