École Privée d’Ingénierie du Niger — L’école du nouveau monde

✉ elearning@epiniger.edu.ne    🌐 epiniger.edu.ne

Unité d’enseignement : CYB · S3 · UE3 — Programmation / Base de données

  • Atelier génie logiciel – Langage Java 1

    Cet atelier de génie logiciel initie les étudiants de L2 Cybersécurité à la programmation en Java, langage orienté objet très utilisé dans les systèmes d’information des banques, des opérateurs télécoms et des administrations, dans les applications Android et dans de nombreux outils de sécurité. Au semestre 3, l’accent est mis sur les fondamentaux : environnement de développement, structure d’un programme, types et opérateurs, entrées/sorties, puis les structures de contrôle — branchements conditionnels et boucles. Chaque notion est illustrée par des programmes complets, compilés et testés, et par des cas tirés de la vie d’une école ou d’une entreprise de Niamey (frais de scolarité, notes, code PIN, politique de mots de passe). La suite du cours (AGL2435, semestre 4) abordera les tableaux, les chaînes, les méthodes et une étude de cas orientée objet.

    Objectifs d’apprentissage

    • Installer un JDK, compiler et exécuter un programme Java ; expliquer le rôle du bytecode et de la JVM.
    • Déclarer des variables de types primitifs et String, maîtriser les opérateurs, les conversions et leurs pièges (division entière, débordement).
    • Lire des données au clavier avec Scanner et afficher des résultats formatés.
    • Écrire des branchements conditionnels (if/else, switch, opérateur ternaire) corrects et lisibles.
    • Écrire des boucles (for, while, do-while) avec compteurs, accumulateurs et conditions d’arrêt sûres.
    • Adopter dès le départ des réflexes de programmation sûre : validation des saisies, limitation des essais, absence de secret en clair.

    Prérequis

    Algorithmique et programmation (S1 et S2) : variables, conditions, boucles en pseudo-code ; usage courant d’un ordinateur.

    Plan du cours

    1. Leçon 1 — Initiation à Java : environnement, compilation et premier programme
    2. Leçon 2 — Variables, types, opérateurs et entrées/sorties
    3. Leçon 3 — Structures de contrôle (1) : branchements conditionnels
    4. Leçon 4 — Structures de contrôle (2) : boucles et itérations

    Modalités d’évaluation

    Volume horaire : 10 h de CM, 10 h de TD, 10 h de TP et 30 h de TPE ; 3 crédits. Évaluation : contrôle continu (exercices de TD, programmes de TP rendus et testés, quiz, 40 %) et examen terminal sur papier et/ou sur machine (60 %).

    Bibliographie

    • Claude Delannoy, Programmer en Java, Eyrolles.
    • Kathy Sierra et Bert Bates, Head First Java, O’Reilly.
    • Joshua Bloch, Effective Java, Addison-Wesley.
    • Oracle, The Java Tutorials et documentation de l’API Java SE (docs.oracle.com).
    • SEI CERT, Oracle Coding Standard for Java (Carnegie Mellon University).
  • Application client-serveur et Web 1

    Ce cours du semestre 3 pose les fondations système indispensables au développement et à l’exploitation d’applications client-serveur et Web : un serveur Web, une base de données ou une API tournent presque toujours sur un système de type UNIX (Linux dans l’immense majorité des hébergeurs, des opérateurs télécoms et des datacenters de la sous-région). L’étudiant apprend à manipuler un système UNIX en ligne de commande, à comprendre et piloter les processus, les signaux et les services (démons), puis à automatiser les tâches d’administration par des scripts shell sûrs et lisibles. Le cours est orienté cybersécurité : droits minimaux, services réduits au strict nécessaire, journaux exploitables et scripts robustes. Il sera prolongé au semestre 4 (ACS2434) par l’étude des architectures client-serveur, du protocole HTTP et de la configuration des serveurs.

    Objectifs d’apprentissage

    • Décrire l’architecture d’un système UNIX (noyau, shell, système de fichiers, utilisateurs) et naviguer efficacement en ligne de commande.
    • Gérer les permissions et les comptes selon le principe du moindre privilège (chmod, chown, umask, sudo).
    • Observer et contrôler les processus : identification, états, priorités, envoi de signaux.
    • Administrer les services avec systemd : démarrage, arrêt, activation, consultation des journaux, réduction de la surface d’attaque.
    • Écrire des scripts Bash structurés (variables, conditions, boucles, fonctions, codes de retour) pour automatiser sauvegardes et analyses de journaux.

    Prérequis

    Algorithmique et programmation (S1-S2), notions d’architecture des ordinateurs et de systèmes d’exploitation. Disposer d’une machine virtuelle Linux (Debian ou Ubuntu Server) dans son propre laboratoire.

    Plan du cours

    1. Leçon 1 — Introduction au système UNIX : architecture, fichiers et droits
    2. Leçon 2 — Processus et signaux
    3. Leçon 3 — Services et démons : administration avec systemd
    4. Leçon 4 — Scripting shell Bash pour l’administration

    Modalités d’évaluation

    Volume horaire : 10 h de cours magistral (CM), 0 h de TD, 10 h de travaux pratiques (TP) et 20 h de travail personnel de l’étudiant (TPE) ; 2 crédits. Évaluation : contrôle continu (comptes rendus de TP, quiz en ligne, mini-projet de script, 40 %) et examen terminal écrit et/ou pratique sur machine (60 %).

    Bibliographie

    • Brian W. Kernighan et Rob Pike, The UNIX Programming Environment, Prentice Hall.
    • William E. Shotts, The Linux Command Line, No Starch Press.
    • Evi Nemeth, Garth Snyder, Trent R. Hein, Ben Whaley, Dan Mackin, UNIX and Linux System Administration Handbook, Addison-Wesley.
    • Christophe Blaess, Scripts shell Linux et Unix, Eyrolles.
    • ANSSI, Recommandations de configuration d’un système GNU/Linux (guide en ligne, ssi.gouv.fr).
  • UML et ITIL 1

    Ce cours présente les principales étapes d’une démarche de modélisation d’un système d’information (SI) d’entreprise et les bonnes pratiques de gestion des services informatiques. Il constitue la première partie (semestre 3) d’un enseignement qui se poursuit au semestre 4 (modélisation opérationnelle et fonctionnelle). On y étudie d’abord ce qu’est un SI et pourquoi on le modélise, puis les cadres d’architecture d’entreprise (Zachman, TOGAF, urbanisation) qui organisent les vues métier, fonctionnelle, applicative et technique. Le langage UML 2 est ensuite introduit comme langage commun de représentation de ces vues. Enfin, le référentiel ITIL 4 montre comment un SI, une fois construit, est exploité sous forme de services mesurés et améliorés en continu — un cadre indispensable pour un futur technicien en cybersécurité, qui interviendra dans la gestion des incidents, des changements et de la sécurité de l’information.

    Objectifs d’apprentissage

    • Définir un système d’information, ses composantes et ses éléments de contexte (acteurs, parties prenantes, périmètre, contraintes).
    • Expliquer le rôle d’un cadre d’architecture d’entreprise et positionner les vues métier, fonctionnelle, applicative et technique.
    • Situer les diagrammes d’UML 2 et réaliser des diagrammes simples de contexte, de paquetages, de classes et de déploiement.
    • Décrire le système de valeur des services d’ITIL 4, ses principes directeurs et ses principales pratiques.
    • Calculer et interpréter des indicateurs de service (disponibilité, MTBF, MTTR, priorité d’un incident).

    Prérequis

    Notions d’organisation des entreprises, bases de programmation et de bases de données (première année).

    Plan du cours

    1. Leçon 1 — Systèmes d’information et démarche de modélisation
    2. Leçon 2 — Cadres d’architecture d’entreprise
    3. Leçon 3 — UML 2 : langage de représentation des vues architecturales
    4. Leçon 4 — ITIL 4 : gérer le système d’information comme un ensemble de services

    Modalités d’évaluation

    Volume horaire : 13 h de CM, 7 h de TD, 0 h de TP, 20 h de TPE ; 2 crédits. Contrôle continu (40 % : études de cas en TD et un dossier de modélisation d’un SI nigérien réel ou fictif) et examen terminal écrit de 2 heures (60 %).

    Bibliographie

    • P. Roques, UML 2 par la pratique : études de cas et exercices corrigés, Eyrolles.
    • J. Gabay, D. Gabay, UML 2 Analyse et conception, Dunod, 2008.
    • G. Booch, J. Rumbaugh, I. Jacobson, The Unified Modeling Language User Guide, Addison-Wesley.
    • The Open Group, The TOGAF Standard (www.opengroup.org).
    • AXELOS, ITIL Foundation, ITIL 4 Edition, TSO, 2019.
  • Bases de données (SQL et Oracle)

    Ce cours approfondit les bases de données relationnelles au-delà du simple langage SQL. Il prolonge les cours d’analyse informatique des semestres 1 et 2 : après un rappel de la modélisation Entité-Association et de ses extensions (types et sous-types, identifiants relatifs, contraintes), il traite la spécification et le contrôle de l’intégrité sémantique dans Oracle (contraintes déclaratives, déclencheurs PL/SQL), la gestion des transactions (propriétés ACID, contrôle de concurrence, reprise après panne) puis l’exploitation performante des bases : structures de stockage, index, évaluation et optimisation des requêtes, dénormalisation, serveurs parallèles, bases réparties et fédérées, et introduction aux systèmes NoSQL. Pour un futur spécialiste de la cybersécurité, ces notions sont essentielles : l’intégrité et la disponibilité des données font partie de la triade de sécurité, et la traçabilité (journaux, audit) repose sur les mécanismes étudiés ici. Le cours est entièrement organisé en TD et en TP guidés sous Oracle, réalisés dans le laboratoire personnel de l’étudiant.

    Objectifs d’apprentissage

    • Modéliser un domaine avec le modèle Entité-Association étendu et le traduire en schéma relationnel.
    • Classer les contraintes d’intégrité et les implanter en SQL (PRIMARY KEY, FOREIGN KEY, CHECK, UNIQUE) ou par déclencheurs PL/SQL.
    • Expliquer les propriétés ACID, les anomalies de concurrence, la sérialisabilité, le verrouillage et les niveaux d’isolation d’Oracle.
    • Décrire les mécanismes de journalisation et de reprise après panne.
    • Estimer le coût d’accès aux données, lire un plan d’exécution et choisir index ou dénormalisation.
    • Situer les architectures parallèles, réparties et NoSQL et leurs compromis.

    Prérequis

    Modèle relationnel, normalisation (1FN à 3FN) et langage SQL de base (SELECT, jointures, agrégats, INSERT/UPDATE/DELETE) vus en première année.

    Plan du cours

    1. Leçon 1 — Rappels et modélisation conceptuelle avancée
    2. Leçon 2 — Intégrité sémantique : contraintes SQL et déclencheurs PL/SQL sous Oracle
    3. Leçon 3 — Gestion des transactions : concurrence et reprise après panne
    4. Leçon 4 — Stockage, optimisation des requêtes, bases réparties et NoSQL

    Modalités d’évaluation

    Volume horaire : 0 h de CM, 10 h de TD, 10 h de TP, 20 h de TPE ; 2 crédits. Contrôle continu (50 % : comptes rendus des TP guidés et interrogations de TD) et examen terminal (50 % : épreuve écrite de 2 heures comprenant modélisation, SQL/PL-SQL et analyse d’ordonnancements de transactions).

    Bibliographie

    • G. Gardarin, Bases de données, Eyrolles.
    • R. Elmasri, S. B. Navathe, Fundamentals of Database Systems, Pearson.
    • A. Silberschatz, H. F. Korth, S. Sudarshan, Database System Concepts, McGraw-Hill.
    • P. J. Sadalage, M. Fowler, NoSQL Distilled, Addison-Wesley, 2012.
    • Oracle Corporation, documentation officielle Oracle Database Concepts et PL/SQL Language Reference (docs.oracle.com).
  • Algorithmique et programmation 3

    Ce cours d’Algorithmique et programmation de 2e année (semestre 3) est consacré au langage C, langage des systèmes d’exploitation (noyau Linux), des pilotes, des équipements réseau et de nombreux outils de sécurité (OpenSSH, OpenSSL, Snort, Suricata). Le maîtriser est indispensable au spécialiste en cybersécurité : pour écrire des outils efficaces, pour lire et auditer du code, et pour comprendre l’origine des vulnérabilités de corruption mémoire afin de les prévenir. Le cours reprend les notions algorithmiques de L1 et les traduit rigoureusement en C : genèse et philosophie du langage, chaîne de compilation, structure d’un programme, types et opérateurs (y compris les opérateurs bit à bit utilisés pour les masques réseau et les permissions), instructions et structures de contrôle, tableaux et chaînes, fonctions et procédures, structures de données (struct, enum, typedef) et bibliothèque standard. Chaque leçon insiste sur les bonnes pratiques de programmation sûre (norme SEI CERT C) et se termine par des TP guidés sur la machine virtuelle de l’étudiant, jusqu’à un petit outil de dessin en mode texte.

    Objectifs d’apprentissage

    • Situer l’histoire et les normes du C, et décrire la chaîne préprocesseur – compilateur – assembleur – éditeur de liens.
    • Écrire des programmes C structurés, compilés sans avertissement avec gcc -Wall -Wextra.
    • Utiliser correctement les types et opérateurs, y compris conversions et opérateurs bit à bit.
    • Employer les structures de contrôle et manipuler tableaux et chaînes sans débordement.
    • Découper un programme en fonctions et en modules, et modéliser des données avec struct, enum et typedef.
    • Exploiter la bibliothèque standard et réaliser un petit outil de dessin.

    Prérequis

    Algorithmique et programmation S1 et S2 (pseudo-code, structures de contrôle, tableaux, sous-programmes, notions de pointeurs, listes et piles).

    Plan du cours

    1. Genèse du langage C, concepts de base et structure générale d’un programme
    2. Opérateurs sur les types de données simples et instructions simples
    3. Structures de contrôle et tableaux
    4. Procédures, fonctions et structures de données

    Modalités d’évaluation

    Volume horaire : 10 h de CM, 10 h de TD, 10 h de TP et 30 h de TPE ; 3 crédits. Évaluation : contrôle continu (comptes rendus de TP avec code source, quiz en ligne, mini-projet « outil de dessin ») pour 40 % et examen terminal (écrit : lecture et écriture de code C, traces d’exécution) pour 60 %.

    Bibliographie

    • B. W. Kernighan, D. M. Ritchie, Le langage C : norme ANSI, Dunod.
    • C. Delannoy, Programmer en langage C, Eyrolles.
    • K. N. King, C Programming: A Modern Approach, W. W. Norton.
    • R. C. Seacord, Secure Coding in C and C++, Addison-Wesley.
    • SEI CERT, SEI CERT C Coding Standard, Carnegie Mellon University (en ligne).