Génie logiciel — fiche de révision

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.

Définitions à savoir

Le vocabulaire de base

Informatiquetraitement automatisé de l'information.
Algorithmeméthode de calcul qui termine en un nombre fini d'étapes pour toute entrée acceptée.
Programmelecture 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.
Logicielensemble de programmes, de données et d'interactions.
Système informatiqueensemble matériel et logiciel permettant le traitement automatique de l'information.
Logiciel applicatiflogiciel dont l'objectif est de rendre un service spécifique.
Logiciel systèmelogiciel dont l'objectif est de permettre la création et l'exécution d'autres logiciels.

Ingénierie & génie logiciel

Ingénierieactivité allant de la conception à la responsabilité de la construction.
Ingénieurcelui 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énieart de l'ingénieur.
Génie logicielart 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.)
Exigencespécification atomique, testée et traçable, qui caractérise le produit pour répondre aux besoins.

Méthode & concepts

Introductionprésentation du sujet, du point de vue formel et de la méthode. (Écourtée : présentation de la méthode.)
Formalismelangage ayant pour objectif de représenter de manière non ambiguë un objet d'étude.
Méthodemoyen d'arriver au but.
Paradigmeméthode type de résolution fondée sur une méthode de conception type.
Objetaddition d'état et de comportement.
Approche itérativeconception par approches successives.
Crisemanifestation d'une maladie grave nécessitant un discernement.

Tests & infrastructure

Test unitairetest sans Entrée/Sortie.
Test d'intégrationtest sur une Entrée/Sortie.
Test systèmetest intégrant l'ensemble du système.
Entrée/Sortieconnecteur d'infrastructure.
Infrastructureensemble des éléments constituant la base nécessaire à l'édification et au fonctionnement d'un système.

La méthode de l'ingénieur

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 :

1 · Le besoin 2 · Formaliser 3 · Le traitement 4 · Implémenter
Recueillir le besoin → le formaliser → définir le traitement → implémenter avec les bonnes technologies.

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.

Les 4 paradigmes

À ne pas confondre : une procédure agit par effet de bord ; une fonction n'agit que par sa valeur de retour.

Histoire

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é.

1936 Turing (théorie) 1947 1er ordinateur assembleur 1965 3e génération · OS 1re crise 1980 4e génération · PC 2e crise 1945 von Neumann architecture 1955 2e génération compilateur 1968 OTAN · Dijkstra Knuth 2001 Manifeste Agile
Repères : invention de l'ordinateur (préhistoire), naissance du logiciel, puis du génie logiciel rythmé par ses crises.

Préhistoire et naissance du logiciel

Les modèles de développement

ModèleIdée
Cascade (1956)phases linéaires top-down, copiées du bâtiment (conception → réalisation → maintenance).
Cycle en Vajoute une validation à chaque phase (tests unitaires → intégration → système). Inspiré de la méthode scientifique.
Incrémentaldécouper le projet en incréments cohérents, et appliquer le cycle en V à chacun.
Itératifconception 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.

Les crises et l'Agilité

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.

Les grands noms (et pourquoi)

NomPourquoi il est cité
Aristoteinventeur de la logique (l'Organon), « père de la méthode » : la notion de principe et de méthode.
Alan Turingbases théoriques de l'informatique (1936) ; définition de l'ordinateur ; premier ordinateur (1949).
John von Neumannl'architecture de von Neumann (1945) qui transforme le calculateur en ordinateur.
Donald KnuthThe Art of Computer Programming (1968) — il choisit « Art » et non « Science » ; Literate Programming (1984). La programmation comme art.
Edsger DijkstraGo To Statement Considered Harmful (1968) → la programmation structurée (le goto disparaît au profit du if, for…).
Edwards Demingla méthode itérative et la qualité (années 1940), enseignée au Japon.
Jack ReevesWhat 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 Beckco-fondateur de l'agilité ; inventeur du TDD, de l'eXtreme Programming et des frameworks xUnit ; Implementation Patterns.
Ward Cunninghaminventeur du Wiki ; binôme de Kent Beck ; signataire Agile.
K. Schwaber & J. Sutherlandinventeurs de la méthode SCRUM ; signataires Agile.
Alistair Cockburninventeur de l'architecture hexagonale ; signataire Agile.
Martin Fowlersignataire Agile ; co-auteur avec Kent Beck (Planning XP).
Mary PoppendieckLean 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é ».
Galienla définition de l'art reprise tout au long du cours.

Spécificités & attributs qualité

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.