Index of /GestionProjetInfo/Génie Logiciel/Historique

Icon  Name                                Description
[PARENTDIR] Parent Directory                    
<style>
#contenu h1 { padding: 2px 10px;}
#contenu h1>* { background-color: rgba(255, 238, 221, 0.8);margin: 0 10px;padding: 0 10px;border: 2px solid #114499;} 
.attention { background-color: rgba(255, 238, 221, 0.8); border:1px dotted #114499;margin: 0 10px;padding: 0 10px;color:#991144; }
</style>
<h1><span>Historique du GL</span></h1>


<style>
#contenu dl dt { padding-top:6px;padding-bottom:2px;/*text-decoration:underline;*/color: #114499;} 
#contenu dl:after {clear:both; content:' ';display:block; }
#contenu table th:last-child {background-color: rgba(255, 238, 221, 0.8);margin: 0 10px;padding: 0 10px;border: 1px solid #114499;}
#contenu i { color: #114499; }
</style>


<p>
Le génie logiciel est un domaine relativement récent: 
la première conférence avec pour thème le génie logiciel eut lieu en 1968. 
En schématisant beaucoup, on peut poser le problème sous la forme suivante: 
comment automatiser et sytématiser la traduction de la pensée humaine en code machine. 
En disant cela, il faut rappeler l’importance du contexte et du non-dit 
dans le fonctionnement du dialogue entre personnes.
</p><p>
Au début de l'ère des ordinateurs, l'homme se contentait de rmanipuler des idées simples 
liées à des opérations arithmétiques compliquées. 
Puis il a essayé de développer des projets plus importants 
comportant des traitements et des données complexes, 
jusqu'à arriver aujourd'hui à des projets de très grande taille, 
allant du projet de guerre des étoiles prévoyant 
entre 10 et 100 millions de lignes de code source 
aux diverses versions de Windows’95 et Windows-NT pres- que aussi impressionnantes.
</p><p>
L'historique du génie logiciel peut être résumé de la façon suivante, 
en indiquant quels ont été les faits marquants au cours de ces quelques décennies.
</p>
<dl>
<dt>1945 :</ddt>
<dd>
La programmation s'effectue en code binaire et ensuite en assembleur 
mais seul celui qui développe est capable de comprendre et de maintenir son projet. 
Les projets sont alors de petite taille.
</dd>
<dt>1955 :</ddt>
<dd>
Apparition et utilisation de langages évolués 
qui permettent de développer des projets plus importants.
</dd>
<dt>1965 :</ddt>
<dd>
C'est la <i>crise du logiciel</i>. 
On se rend compte que l'intuition ne suffit plus pour développer correctement du logiciel.
</dd>
<dt>1968 :</ddt>
<dd>
Première conférence sur le génie logiciel. 
</dd>
<dt>1970 :</ddt>
<dd>
Définition de la notion de programmation structurée: suppression de l'utilisation du GOTO, 
structuration du code en niveaux hiérarchiques 3.
</dd>
<dt>1972 :</ddt>
<dd>
Développement des méthodes de preuves de programmes (difficiles à appliquer à de grands logiciels).
</dd>
<dt>1975 :</ddt>
<dd>
On se rend compte que développer un projet ne consiste pas seulement à le coder mais à le comprendre, le spécifier et le concevoir en des étapes successives, d'où apparition de la notion de cycle de vie et essais de développement de méthodes adaptées à ces phases.
</dd>
<dt>1980 :</ddt>
<dd>
Après avoir développé des méthodes et des outils de manière isolée, on les rassemble pour former des environnements homogènes. On prend aussi conscience de l'impor- tance des premières phases dans le coût de développement d'un projet. Il semble logi- que qu'une erreur de conception soit moins coûteuse à corriger lors de la conception que lors d'une phase suivante, comme l'implantation ou la maintenance.
</dd>
<dt>1990 :</ddt>
<dd>
C’est la décennie de la programmation orientée objet, avec comme objectifs, d’une part, la réutilisation des logiciels et, d’autre part, le passage aussi naturel que possible pour l’utilisateur d’une application à une autre (de Word à Excel par exemple).
</dd>
<dt>1994 :</ddt>
<dd>
Arrivée d'Internet et de ses moteurs de recherche (Yahoo puis Google)</dd>
<dt>2000 :</ddt>
<dd>
C'est la peur du "bogue de l'an 2000"
</dd>
<dt>2004 :</ddt>
<dd>
Web 2.0 : l'appropriation par le grand publique des réseaux sociaux (FaceBook)
</dd>

</dl>

<p>
On peut rassembler sous forme graphique les différentes approches qui ont eu lieu, 
qui sont en cours ou qui, peut-être se produiront. 
On remarque d'abord que les premiers langages de haut niveau diffèrent 
par le domaine d'utilisation visé. 
Les problèmes numériques scientifiques sont à l'origine du langage Fortran, 
les problèmes de manipulation de grands volumes de données sont à l'origine du langage Cobol 
et les problèmes de manipulation de connaissances sont à l'origine du langage Lisp. 
Les divergences entre ces trois approches se sont perpétuées 
au cours des quelques vingt années suivantes, chaque approche ayant ses propres problèmes.
</p><p>
La découverte qu’il était possible de programmer dans un langage de haut niveau 
a conduit aux langages impératifs, préoccupés principalement par des problèmes de rendement 
(en fonction du coût) et de qualité du logiciel. 
Les leçons à retenir de cette approche sont modularité et types abstraction. 
La deuxième approche a donné lieu aux systèmes de gestion de base de données 
et plus généralement aux systèmes d'information, qui repose entre autres sur le modèle relationnel. 
Enfin l’intelligence artificielle a introduit la programmation logique 
qui possède une sémantique plus riche que les autres langages, 
facilitant ainsi la réalisation d'outils tels que les systèmes experts.
</p><p>
Dans la figure ci-dessous, l'évolution du génie logiciel est présentée sous forme d'un graphe. 
Les noeuds de ce graphe correspondent à des outils (bien souvent des langages) 
qui ont marqué chaque grande étape de développement. 
Les flèches indiquent les principaux problèmes et sujets de réflexions 
qui ont conduit à la création de nouveaux outils.
</p>

<div style="text-align:center;">
<img src="Génie Logiciel/_images/historiqueGL-Levrat.png" style="width:420px" />
</div>

<p>
Depuis quelques années apparaissent des tentatives de convergence entre ces approches, 
reflétant le fait que les projets actuels sont vastes et couvrent plusieurs domaines. 
Les bases de connaissances illustrent cette tendance puisqu'elles réunissent 
les principes des systèmes de gestion de bases de données (SGBD), 
le principe d'inférence des langages d'intelligence artificielle 
et les principes de modélisation et de structuration des langages de programmation traditionnels. 
Le tout peut être intégré dans un environnement orienté objet.
</p><p>
Selon Hervé Gallaire, la base théorique de ces domaines a tendance à s'unifier par la logique. 
La programmation conventionnelle va évoluer vers la programmation logique qui s'appuie 
sur la description de la structure logique des problèmes 
au lieu de la description de la façon dont l’ordinateur doit les résoudre. 
Ceci n'implique pas forcément l'existence d'un langage unique 
mais diminue les frontières existant entre les différentes approches. 
Le langage universel n'est certainement pas le but recherché: 
il vaut mieux donner aux informaticiens de bonnes bases théoriques 
et leur fournir des outils adaptés à leurs besoins que de chercher un outil 
tout à fait général et donc difficilement utilisable 
(le couteau suisse est l'exception qui confirme la règle).
</p><p>
Parallèlement à cette évolution, on assiste depuis peu à un développement 
de langages de conception et de langages de spécification 
qui devraient permettre de réduire encore, sans perte de précision, 
l’écart entre les représentations accessibles à l’homme et les langages de programmation existants. 
Ces langages devraient s'accompagner de compilateurs générant du code 
dans un langage de plus bas niveau, ce qui fait encore partie des domaines de la recherche.
</p>




<p class="signature" style="text-align:right;font-size:80%;font-style:italic;"> 
Ce contenu est largement inspiré 
du livre de <a href="http://cui.unige.ch/Levrat/ch2.pdf">Cours de Génie Logiciel</a>
de B. Levrat.
</p>