Module I : principes et fondements. Qu'est-ce que le génie logiciel ? Quelle est sa méthode ?
« Programmer est à la portée de tous, mais produire un ouvrage d'art est le fait d'un développeur » (Régis Clouard). Ce module donne les principes du métier : tout découle de deux définitions — celle du génie logiciel et celle du besoin à remplir.
| Informatique | traitement automatisé de l'information. |
| Algorithme | méthode de calcul qui termine en un nombre fini d'étapes pour toute entrée acceptée. |
| Programme | lecture séquentielle d'un ensemble d'instructions organisé en vue de produire un résultat. (Vue dynamique : l'exécution, pas le code.) |
| Ordinateur | (Turing) système programmable par la lecture séquentielle d'instructions, qui lui font exécuter des opérations logiques et arithmétiques. |
| Logiciel | ensemble de programmes, de données et d'interactions. |
| Système informatique | ensemble matériel et logiciel permettant le traitement automatique de l'information. |
| Logiciel applicatif | logiciel dont l'objectif est de rendre un service spécifique. |
| Logiciel système | logiciel dont l'objectif est de permettre la création et l'exécution d'autres logiciels. |
| Ingénierie | activité allant de la conception à la responsabilité de la construction. |
| Ingénieur | celui qui invente, qui trace et qui conduit des travaux et des ouvrages. |
| Art | (Galien) système des enseignements universels, vrais, utiles, partagés par tous, tendant vers une seule et même fin. |
| Génie | art de l'ingénieur. |
| Génie logiciel | art de l'ingénieur logiciel = activité allant de la conception à la responsabilité de la construction d'un ensemble de programmes, de données et d'interactions visant à rendre un service. |
| Qualité | niveau de satisfaction des besoins. (ISO-9001 : aptitude d'un ensemble de caractéristiques intrinsèques à satisfaire des exigences.) |
| Exigence | spécification atomique, testée et traçable, qui caractérise le produit pour répondre aux besoins. |
| Introduction | présentation du sujet, du point de vue formel et de la méthode. (Écourtée : présentation de la méthode.) |
| Formalisme | langage ayant pour objectif de représenter de manière non ambiguë un objet d'étude. |
| Méthode | moyen d'arriver au but. |
| Paradigme | méthode type de résolution fondée sur une méthode de conception type. |
| Objet | addition d'état et de comportement. |
| Approche itérative | conception par approches successives. |
| Crise | manifestation d'une maladie grave nécessitant un discernement. |
| Test unitaire | test sans Entrée/Sortie. |
| Test d'intégration | test sur une Entrée/Sortie. |
| Test système | test intégrant l'ensemble du système. |
| Entrée/Sortie | connecteur d'infrastructure. |
| Infrastructure | ensemble des éléments constituant la base nécessaire à l'édification et au fonctionnement d'un système. |
Le génie logiciel étant l'art de l'ingénieur, sa méthode est celle de l'ingénierie, spécifiée par le logiciel :
L'ingénierie a deux temps : la conception (= développement, « un exercice de découverte ») et la production (« un exercice de réduction de la variation », Poppendieck). D'où trois sources d'échec à surveiller — erreur sur la cible, sur la situation de départ, sur la méthode.
À ne pas confondre : une procédure agit par effet de bord ; une fonction n'agit que par sa valeur de retour.
L'histoire révèle la méthode qui a produit l'art — d'où son intérêt. On part de la préhistoire (avant l'écriture du logiciel) jusqu'à l'Agilité.
| Modèle | Idée |
|---|---|
| Cascade (1956) | phases linéaires top-down, copiées du bâtiment (conception → réalisation → maintenance). |
| Cycle en V | ajoute une validation à chaque phase (tests unitaires → intégration → système). Inspiré de la méthode scientifique. |
| Incrémental | découper le projet en incréments cohérents, et appliquer le cycle en V à chacun. |
| Itératif | conception par approches successives (Deming, années 1940 ; RAD = prototypage itératif + validation continue). |
| Agile (2001) | le développement est une activité humaine de conception collaborative ; premier principe : la livraison rapide. |
Le génie logiciel est lancé officiellement par les ateliers de l'OTAN en 1968. Il avance par crises (1re en 1965 ; 2e vers 1980, cauchemar de l'« effet-tunnel » ; nouvelle crise 2000-2005 avec Internet). Étymologiquement, crise = moment du discernement : trouver la cause du mal suppose des critères, c'est-à-dire des principes.
Idée fondatrice de Jack Reeves (1992) : dans le bâtiment, l'architecte écrit des documents et les ouvriers les transforment en réalité. En logiciel, qui transforme les documents en logiciel concret ? Le compilateur. Donc écrire du code, c'est concevoir — le développement est une pure activité de conception. En 2000, Robert Martin présente les principes SOLID ; en 2001, le Manifeste Agile ; en 2002, Martin reprend l'article de Reeves.
| Nom | Pourquoi il est cité |
|---|---|
| Aristote | inventeur de la logique (l'Organon), « père de la méthode » : la notion de principe et de méthode. |
| Alan Turing | bases théoriques de l'informatique (1936) ; définition de l'ordinateur ; premier ordinateur (1949). |
| John von Neumann | l'architecture de von Neumann (1945) qui transforme le calculateur en ordinateur. |
| Donald Knuth | The Art of Computer Programming (1968) — il choisit « Art » et non « Science » ; Literate Programming (1984). La programmation comme art. |
| Edsger Dijkstra | Go To Statement Considered Harmful (1968) → la programmation structurée (le goto disparaît au profit du if, for…). |
| Edwards Deming | la méthode itérative et la qualité (années 1940), enseignée au Japon. |
| Jack Reeves | What is Software Design? (1992) : le code est la conception ; le compilateur est l'« usine ». |
| Robert C. Martin (Uncle Bob) | les principes SOLID (2000) ; Agile Software Development (2002) ; signataire du Manifeste Agile. |
| Kent Beck | co-fondateur de l'agilité ; inventeur du TDD, de l'eXtreme Programming et des frameworks xUnit ; Implementation Patterns. |
| Ward Cunningham | inventeur du Wiki ; binôme de Kent Beck ; signataire Agile. |
| K. Schwaber & J. Sutherland | inventeurs de la méthode SCRUM ; signataires Agile. |
| Alistair Cockburn | inventeur de l'architecture hexagonale ; signataire Agile. |
| Martin Fowler | signataire Agile ; co-auteur avec Kent Beck (Planning XP). |
| Mary Poppendieck | Lean Software Development : développement = découverte, production = réduction de la variation. |
| Rick Kazman | « l'architecture logicielle est un exercice de gestion de la complexité ». |
| Galien | la définition de l'art reprise tout au long du cours. |
La grande spécificité du logiciel : le coût de construction est infime (le build/déploiement/livraison), donc une solution accumule très vite de la complexité, et les besoins sont volatils. Conséquence : le premier principe architectural est la gestion de la complexité, et le développement est avant tout une activité de conception.
Suivre des principes lors de la conception produit des attributs qualité : intégrité conceptuelle, auditabilité, testabilité, transparence, robustesse, prédictibilité, déployabilité, interopérabilité… On parle d'« <activité> by design » (ex. security by design). Le développement s'appuie sur les principes SOLID et les patrons de conception (vus en module II).
À retenir : tout découle de deux définitions — le génie logiciel (art de l'ingénieur logiciel) et le besoin. L'ingénierie n'est qu'une suite itérative d'élicitations : définir, formaliser, dériver, du besoin jusqu'à l'implémentation.
D'après le cours « Génie Logiciel » (A. Roger / R. Clouard, ENSICAEN). Fiche de révision personnelle.