Filière: Informatique et systèmes de communication
Orientation: Informatique logicielle
Module: Intégration et optimisation des SI

Descriptif de cours

Retour Optimisation logicielle

  • Objectifs

    But général : saisir le fait qu'un logiciel n'est jamais parfait. Même s'il remplit parfaitement les exigences de la spécification en apparence, un logiciel pourra toujours être pris en défaut : incapacité à prendre en compte des cas spéciaux, non résistance à la charge, failles de sécurité, etc.

    On passe dans une phase ' d'optimisation logicielle ' lorsqu'on essaie de limiter les impacts de ces défauts, à périmètre constant, donc sans modifier le fonctionnement même du logiciel. Pour limiter les impacts, il faut connaître l'existence des défauts, et pour bien les connaître, il faut mesurer.

    A la fin du cours, l'étudiant est capable de :

    • Prouver pourquoi un logiciel ne peut être parfait
    • Comprendre que dès lors qu'un logiciel ne peut être parfait, le but de l'ingénieur est de trouver un équilibre entre risques qu'on est prêt à courir et moyens (financiers, temps) pour les réduire.
    • Décrire la notion de rendement, que l'on souhaite augmenter à travers l'optimisation
    • Citer selon quels axes un logiciel peut être optimisé, mentionner si ces axes sont quantitatifs ou qualitatifs, et pour les axes quantitatifs, indiquer quelle unité est utilisée.
    • Décrire et expliquer la notion d'optimisation prématurée.
    • Expliquer le concept de limite absolue de performance.
    • Identifier certains déterminants de la performance et de la scalabilité d'un logiciel, par exemple le nombre de requêtes par seconde, la taille des requêtes, la mémoire à disposition, etc.
    • Maîtriser les ordres de grandeurs de l'informatique : kilo/mega/giga/terabytes, requêtes par seconde, milli/microseconde, méga/giga-instructions par seconde, etc.
    • Esquisser un ordre de grandeur pour une performance cible d'un logiciel simple.
    • Mesurer la performance d'un logiciel selon plusieurs critères, d'une manière reproductible, documentée.
    • Valider et expliquer les mesures recueillies.
    • Automatiser la mesure de performance, et l'inclure dans le processus de vérification CI/CD du logiciel.
    • Prioriser les optimisations possibles, défendre ces choix de priorités
    • Comprendre que les gains réalisables par l'optimisation ne sont jamais infinis, et qu'un logiciel a toujours une limite fondamentale.
  • Contenu

    Le cours consiste à analyser un logiciel existant (codé en Java) selon plusieurs métriques, et à établir un premier rapport listant les principales limitations, si possible quantitativement. Pour chaque limitation, un objectif d'amélioration sera fixé. Dans la deuxième partie du cours, des améliorations seront réalisées en vue d'atteindre les objectifs visés. Un second rapport sera rédigé pour documenter l'atteinte ou non des objectifs.

    Durant le cours, des apports théoriques ou des démonstrations pratiques de technologies seront apportées au cas par cas par les enseignants, entre autres :

    • Profiler et outils d'analyse dynamique
    • Outils d'analyses mémoire, en particulier VisualVM pour Java
    • Outils de test de charge tels que k6
    • Outils de reporting de problèmes, tels que Sentry
    • Outils de monitoring bas-niveau (prometheus, top)

Forme d'enseignement et volume de travail

Cours magistral (y compris exercices)
10 périodes
Travaux pratiques / laboratoires
26 périodes
Travail personnel
24 périodes

Spécification du cours

Année de validité
2025-2026
Année du plan d'études
3ème année
Semestre
Printemps
Programme
Français,Bilingue
Filière
Informatique et systèmes de communication
Langue d'enseignement
Français
Identifiant
B3C-OPLO-S
Niveau
Avancé
Type de cours
complémentaire
Formation
Bachelor

Modalités d'évaluation

  • Contrôle continu: TP/évaluation de rapports, Evaluation orale

Mode de calcul de la note de cours

Moyenne des travaux écrits

Enseignant(s) et/ou coordinateur(s)

Sébastien Rumley