=Avant propos à la version WikiLivres=
Sorti en juin 1995 dans le sillon de la norme Ada 95, le livre "Méthodes de génie logiciel avec Ada 95" écrit par Jean-Pierre Rosen, était épuisé.
Pourquoi n'était-il pas réédité malgré de nombreuses demandes ?
De l'aveu même de son auteur le livre était à mettre au goût du jour des derniers langages (Java…) et méthodologies (UML…) : « "Si de nombreuses personnes m'ont amicalement poussé à mettre à jour cet ouvrage, il ne semble pas que le marché potentiel soit de nature à intéresser un éditeur.
Alors autant le mettre à disposition de tout le monde." » (voir texte complet dans la préface ci-après).
L'idée s'est fait jour de le placer sur Internet en mode collaboratif pour qu'il soit enrichi.
Initialement publié en 2004 sous Licence de Libre Diffusion des Documents (LLDD version 1), Jean-Pierre Rosen a donné son autorisation pour une publication sur WikiLivres sous Gnu Free Documentation Licence (GFDL).
=Préface à la deuxième édition=
Lorsque vers 2004 il me prit l'envie de relire la première édition de cet ouvrage, parue en 1995, je fus frappé de ce qu'il était à la fois obsolète et toujours d'actualité.
Obsolète, car de nouveaux langages, de nouvelles méthodes étaient apparus : on ne comprendrait pas aujourd'hui qu'un livre traitant des rapports entre langages de programmation et méthodes ne traite ni de Java, ni d'UML.
Mais toujours d'actualité, car si les modes changent, les problèmes restent les mêmes.
Les nouveaux outils permettent-ils vraiment de développer mieux qu'il y a dix ans ?
On est en droit d'en douter.
C'est pourquoi je décidai à l'époque de remettre à jour ce livre, en conservant l'essentiel de la version précédente, mais avec des modifications portant sur les langages et méthodes apparus postérieurement à l'édition originale, et en supprimant des méthodes qui avaient disparu, englouties dans la vague UML.
Hélas, les contraintes de la vie professionnelle ne m'ont pas permis de mener ce projet à bout.
Aussi, plutôt que de laisser perdre ce travail, il m'est apparu plus intéressant de diffuser cet ouvrage sous forme de document libre.
Si de nombreuses personnes m'avaient amicalement poussé à mettre à jour cet ouvrage, il ne semble pas que le marché potentiel soit de nature à intéresser un éditeur.
Alors autant le mettre à disposition de tout le monde.
Le logiciel libre, qui s'est considérablement développé ces dernières années, est un processus fondamentalement coopératif ; chacun peut apporter sa contribution au développement.
Le WikiLivre en est l'équivalent pour les publications, et j'espère que les lecteurs voudront bien me faire part de leurs remarques, de leurs critiques et de leur suggestions d'amélioration, ou mieux, apporter directement leurs modifications.
Grâce au WikiLivre, cet ouvrage pourra devenir un document vivant, évoluant au gré de l'apparition de nouvelles méthodes et de nouveaux langages.
Lecteurs qui bénéficiez du libre accès à ce livre, il n'appartient qu'à vous qu'il soit également un peu le vôtre !
=Introduction=
On pourrait définir le génie logiciel comme la conjonction de méthodes, de règles d'organisation et d'outils.
Les outils sont nombreux et abondamment vantés par leurs fabricants.
De multiples ouvrages décrivent des méthodes, certaines très célèbres, d'autres plus confidentielles.
Et pourtant, dans la pratique, il semble que le génie logiciel ne soit pas toujours entré dans les mœurs des informaticiens.
D'où provient ce décalage entre théorie et pratique ?
Au-delà des considérations théoriques, le génie logiciel est d'abord un état d'esprit, demandant rigueur, méthode…
et modestie, puisque toute la difficulté d'une « belle » conception est de faire en sorte que n'importe qui puisse la reprendre après son concepteur initial.
Le but de ce livre est de faire sentir au lecteur l'importance de la démarche « génie logiciel » et de mener une réflexion sur la nature des méthodes, leurs origines, leurs points communs et leurs différences, et leurs rapports aux langages de programmation.
Dans ce cadre, nous avons naturellement adopté le langage Ada comme moyen d'expression.
Pourquoi ?
Parce que c'est le seul langage qui ait été conçu dès le départ en fonction d'un cahier des charges dicté par les impératifs du génie logiciel.
Nous verrons tout au long de ce livre que chacune des fonctionnalités, chacun des contrôles apportés par ce langage trouvent leur origine dans un principe méthodologique.
Mieux : l'explication même des mécanismes du langage est souvent un exemple parlant d'un principe de génie logiciel sous-jacent.
Cette question du langage de programmation est souvent prétexte à des débats quasi religieux.
Soyons clair : la solution aux difficultés du développement logiciel ne saurait provenir seulement d'un langage de programmation, quel qu'il soit.
Seuls l'utilisation de méthodes de conception rigoureuses et le développement de composants logiciels réutilisables peuvent maîtriser la complexité.
Mais certains en ont un peu hâtivement conclu que le langage n'avait aucune importance, du moment que l'on adoptait une « bonne » méthode.
En fait, son rôle est beaucoup plus important qu'on ne le croit généralement.
D'une part, ses possibilités influencent, qu'on le veuille ou non, la conception ; d'autre part, un langage adapté doit poursuivre et vérifier la méthode, pour faciliter le passage de la conception au codage et détecter les incohérences possibles.
C'est typiquement ce qu'Ada permet, qu'apprécient ses zélateurs et que lui reprochent ses détracteurs : il ne laisse pas passer les fautes de conception et n'autorise pas la programmation indisciplinée.
Ce livre s'adresse donc aux responsables de projet, responsables qualité et développeurs, mais aussi aux enseignants et étudiants qui souhaitent un panorama des principes du génie logiciel, des méthodes qui l'accompagnent et de la façon de les mettre en œuvre jusqu'au niveau du codage.
Ceux qui ne connaissent pas Ada y découvriront qu'un langage de programmation peut être un véritable outil de génie logiciel, et nous espérons qu'ils auront alors à cœur de l'essayer, ce qu'ils peuvent faire aisément maintenant qu'il existe un compilateur libre ; quant à ceux qui le connaissent déjà, ils découvriront les nouvelles possibilités d'Ada 95 ainsi que la façon de l'utiliser au mieux dans un contexte de génie logiciel.
Dans la première partie, nous discuterons des rôles respectifs des méthodes de conception et des langages.
Nous verrons comment Ada peut apporter des modifications profondes à la façon d'organiser le développement du logiciel, d'autant plus que les nouvelles fonctionnalités apportées par la révision 95 ont permis de combler les dernières lacunes qu'il comportait vis-à-vis de certaines méthodes.
La deuxième partie présente les principales variétés de méthodes de conception utilisées aujourd'hui, et le support actif qu'Ada leur apporte.
La troisième partie se consacre au problème plus spécifique du développement et de l'utilisation de composants logiciels.
La quatrième aborde les problèmes de l'organisation générale du développement et des choix qui interviennent à tous les stades du projet.
Enfin la cinquième partie présente un cadre méthodologique général qui met en pratique, à partir d'une méthode traditionnelle, les principes exposés dans le reste du livre.
Chaque chapitre est accompagné d'exercices, sujets de réflexion ou mise en pratique de la théorie.
Si une certaine connaissance de la programmation et d'au moins un langage est nécessaire, il n'est nullement besoin de connaître Ada pour lire ce livre.
Un préambule présente rapidement le langage ; nous y avons séparé les fonctionnalités de la version 83 de celles de la version 95, pour permettre un accès plus facile à ceux qui, connaissant déjà l'ancien langage, ne sont intéressés que par les nouveautés.
Un glossaire et un index aideront également les nouveaux venus à mieux appréhender le livre.
 Des hors-texte de ce style donnent des digressions «linguistiques» complémentaires là où elles sont nécessaires à la bonne compréhension des exemples.
Les exemples de programme, ainsi que les références dans le texte à des éléments du langage (instructions, variables...) sont en caractères courrier; lorsqu'il s'agit de mots clés du langage, ils sont en caractères gras.
Le problème de la langue est toujours présent dans un ouvrage d'informatique, domaine souvent envahi de jargon anglophone.
Nous utilisons le français autant que possible, sans aller jusqu'à employer certaines locutions qui, bien que recommandées officiellement, nous ont paru exagérées : disons-le franchement, nous n'avons jamais pu nous habituer à dire « bogue » pour « bug ».
Les termes purement Ada ont été repris du lexique qui sert à la traduction, en cours à l'heure où nous écrivons ces lignes, de la norme Ada 95 en français.
Si, à la fin de cet ouvrage, le lecteur est convaincu de l'importance des méthodes de conception et de la démarche générale du génie logiciel ; s'il a pris conscience que le développement informatique est une longue suite de choix demandant d'arbitrer des compromis parmi des exigences contradictoires ; si notamment son choix du langage de programmation résulte d'une volonté consciente de prolonger le cadre méthodologique et non du simple hasard des disponibilités de compilateurs sur sa machine ; s'il décide de mettre en place une politique de réutilisation à l'échelle de son entreprise ; alors nous sommes convaincu que le langage choisi sera souvent Ada, et nous penserons que le but de cet ouvrage aura été atteint.
Je terminerai en remerciant, selon la tradition, ceux dont les avis, conseils, critiques et remarques ont contribué à faire de ce livre ce qu'il est.
Je dois tout d'abord, et à de multiples titres, une mention spéciale à Michel Gauthier, de l'université de Limoges ; les nombreuses références à ses publications montrent bien ce que je lui dois.
Mes remerciements vont ensuite à mon assistante de tous les jours, Catherine Supper, et à ceux qui ont bien voulu consacrer une partie de leur temps toujours précieux à relire les premières versions de cet ouvrage : Alain Detrie, Michael Feldmann, Jean-Alain Hernandez et Patrice Jano.
Je dois également une mention spéciale à tous les membres d'Ada-France : nombre des idées de ce livre proviennent des discussions que nous avons eues lors de nos réunions.
Je ne saurais oublier non plus tous mes élèves, depuis mes débuts à l'ENST jusqu'aux participants des séminaires Adalog : ils ne se rendront jamais compte à quel point une question apparemment naïve peut obliger un enseignant à faire progresser sa propre réflexion sur un sujet.
Je tiens enfin à remercier mon portable, un petit Compaq Aero, pour m'avoir permis de travailler à ce livre dans les endroits les plus divers, depuis les fauteuils d'avion (sans oublier, hélas ! les salles d'attente) jusque dans le lit conjugal ; je remercie ma femme de m'avoir encouragé durant tout ce temps, ainsi que d'avoir bien voulu tolérer la présence dudit portable dans ledit lit conjugal ; enfin je remercie mes enfants de m'avoir parfois laissé utiliser mon ordinateur malgré la présence sur son disque dur de jeux dont ils voyaient beaucoup plus clairement l'utilité !