La lecture en ligne est gratuite
Le téléchargement nécessite un accès à la bibliothèque YouScribe
Tout savoir sur nos offres
Télécharger Lire

THESE

372 pages
THESE
présentée par
Jean Marie FAVRE
pour obtenir le titre de
Docteur de l’Université Joseph Fourier - Grenoble I
(arrêtés ministeriels du 5 juillet 1984 et du 30 mars 1992)
Spécialité : Informatique
Une approche pour la maintenance et
la ré-ingénierie globale des logiciels
date de soutenance : 26 octobre 1995
Composition du Jury :
J.P. Verjus
K. Bennett
J. Estublier
G. Kahn
S. Krakowiak
A. Van Lamsweerde
Thèse préparée au sein
du Laboratoire de Génie Informatique - Institut Imag à Carolina et à notre famille ❤


Je tiens vivement à remercier les membres du jury pour m’avoir fait l’honneur d’y participer et
pour le temps qu’ils ont consacrés à cette thèse malgré leurs emplois du temps souvent
surchargés :
Monsieur Jean-Pierre Verjus, Professeur à l’Institut National Polytechnique de Grenoble,
Directeur de l’Institut de Mathématique Appliquée de Grenoble (IMAG), Directeur de l’INRIA
Rhône-Alpes, pour m’avoir fait l’honneur de présider le jury de cette thèse.
Monsieur Keith Bennett, Professeur à l’université de Durham, Directeur du Laboratoire pour la
Maintenance à Durham, Editeur du journal international “Software Maintenance”, pour son
accueil à Durham le mois dernier, pour avoir lu en détails cette thèse bien qu’elle soit écrite dans
la langue de Molière et pour être venu d’Angleterre malgré un calendrier bien chargé.
Monsieur Gilles Kahn, Directeur de recherche INRIA, Directeur Scientifique de l’INRIA France,
et Monsieur Axel Van Lamsweerde, Professeur à ...
Voir plus Voir moins
THESE présentée par Jean Marie FAVRE pour obtenir le titre de Docteur de l’Université Joseph Fourier - Grenoble I (arrêtés ministeriels du 5 juillet 1984 et du 30 mars 1992) Spécialité : Informatique Une approche pour la maintenance et la ré-ingénierie globale des logiciels date de soutenance : 26 octobre 1995 Composition du Jury : J.P. Verjus K. Bennett J. Estublier G. Kahn S. Krakowiak A. Van Lamsweerde Thèse préparée au sein du Laboratoire de Génie Informatique - Institut Imag à Carolina et à notre famille ❤ ❤ ❤ Je tiens vivement à remercier les membres du jury pour m’avoir fait l’honneur d’y participer et pour le temps qu’ils ont consacrés à cette thèse malgré leurs emplois du temps souvent surchargés : Monsieur Jean-Pierre Verjus, Professeur à l’Institut National Polytechnique de Grenoble, Directeur de l’Institut de Mathématique Appliquée de Grenoble (IMAG), Directeur de l’INRIA Rhône-Alpes, pour m’avoir fait l’honneur de présider le jury de cette thèse. Monsieur Keith Bennett, Professeur à l’université de Durham, Directeur du Laboratoire pour la Maintenance à Durham, Editeur du journal international “Software Maintenance”, pour son accueil à Durham le mois dernier, pour avoir lu en détails cette thèse bien qu’elle soit écrite dans la langue de Molière et pour être venu d’Angleterre malgré un calendrier bien chargé. Monsieur Gilles Kahn, Directeur de recherche INRIA, Directeur Scientifique de l’INRIA France, et Monsieur Axel Van Lamsweerde, Professeur à l’Université Catholique de Louvain (Belgique), éditeur du journal international “Transactions on Software Engineering and Methodology” pour avoir consacré de leur temps à rapporter sur ce travail et pour les remarques qu’ils m’ont faites. Monsieur Jacky Estublier, Directeur de cette thèse, Directeur de recherche CNRS, Directeur de l’équipe ADELE, pour m’avoir accueilli dans son équipe et pour m’avoir toujours fait confiance. Je tiens également à lui témoigner ma reconnaissance pour m’avoir permis de travailler dans d’aussi bonnes conditions. Monsieur Sacha Krakowiak, Professeur à l’Université Joseph Fourier, Co-directeur du projet Guide et de l’unité de recherche Bull-Imag, pour m’avoir accueilli en stage, il y a déjà bien longtemps, dans le projet Guide, et pour l’honneur qu’il me fait aujourd’hui de participer à ce jury. Je voudrais aussi remercier tous les membres de l’équipe ADELE qui, de deux personnes lors de mon arrivée, est passée à plus d’une dizaine aujourd’hui. Tous m’ont permis d’une manière ou d’une autre de travailler dans la joie et la bonne humeur... Je tiens aussi à remercier les membres de la escuela de computaciòn qui m’ont si bien accueilli lors de mon séjour à l’Universidad Central de Venezuela en tant que coopérant. Je garde un très bon souvenir de ces deux années et de l’accueil exceptionnel qui m’a été fait. Finalement, ou plutôt avant tout, je tiens à remercier ma famille pour sa patiente et son soutient inconditionnel ainsi que Carolina pour son courage et son amour . A tous, merci !!! Introduction Alors que l’informatique est résolument tournée vers l’avenir, cette thèse se concentre sur le passé ; non pas par nostalgie mais plutôt parce que le futur des logiciels âgés est une question d’actualité. I.1 Contexte Présentons tout d’abord le contexte général, puis le contexte spécifique. I.1.1 Contexte général : maintenance, programmation globale et ré-ingénierie Trop souvent recherche et industrie s’opposent, tout comme théorie et pratique, comprendre et faire, développer et maintenir, etc. Cette thèse se réclame comme faisant partie du Génie Logiciel et à ce titre ces oppositions devraient plutôt être vues comme des complémentarités. En effet, le génie logiciel, comme toute discipline d’ingénierie, est la rencontre entre la science et l’industrie [Shaw90]. Cette définition marque la direction à suivre, même si l’on a parfois tendance à l’oublier. Le génie logiciel est en effet une discipline très large. Selon que l’on se place dans un milieu académique ou un milieu industriel, sa signification est susceptible de changer. Pour certains ce terme fait référence à des méthodes abstraites qu’il est aujourd’hui impossible d’appliquer en pratique. Pour d’autres, il fait référence à des pratiques éloignées de tout fondement scientifique. Quoi qu’il en soit ces deux visions ne sont que les extrêmes d’un spectre voué à être équilibré. Cette thèse retient trois thèmes du génie logiciel : la maintenance, la programmation globale et la ré-ingénierie. Ces thèmes correspondent à des préoccupations industrielles particulièrement importantes et pourtant elles sont souvent regardées avec dédain dans le monde académique. Cette tendance est sans doute liée au fait que les notions et les concepts sous-jacents sont particulièrement flous. Mais n’est ce pas justement parce qu’il y a des problèmes que l’on doit chercher des solutions? En fait, ces trois thèmes correspondent en eux même à des oppositions. 1 2 La maintenance s’oppose au développement. Bien que les problèmes qu’elle pose soient très importants, pendant longtemps ils ont tout simplement été ignorés. Bien qu’aujourd’hui la situation se soit améliorée, la maintenance reste l’une des principales zones d’ombre du génie logiciel. Maintenance et rapiéçage sont encore trop souvent associés dans la réalité. En génie logiciel, presque tous les efforts pour diminuer les coûts de la maintenance consistent à améliorer la qualité des logiciels développés. Cette approche est indispensable. Pourtant elle est loin d’être suffisante : (1) Tout au long de la maintenance, les modifications successives du logiciel détériore sa qualité initiale. (2) La notion même de qualité évolue dans le temps, tout comme la technologie. (3) Améliorer la qualité des logiciels lors du développement n’est valable que pour le futur ; le problème de la maintenance consiste à considérer le passé et le présent. La programmation globale s’oppose à la programmation détaillée. Dès le début de l’informatique, ce sont les notions de la programmation détaillée qui ont été étudiées : les algorithmes et les structures de données. Après plus de 5 décennies, cette discipline a acquis un niveau de maturité important. Dans ce domaine des théories sont parfois utilisées. Il est par exemple possible de décrire formellement la sémantique d’un langage de programmation. Au contraire la programmation globale est basée sur des notions floues. On parle de versions, de configurations et d’objets dérivés, sans pour autant que les concepts associés soient toujours les mêmes ; en tout cas ils ne sont que rarement définis formellement. Il est vrai que ce thème a reçu bien peu d’attention par rapport à la programmation détaillée : ce n’est qu’au cours de la dernière décennie que des recherches actives y ont été consacrées. Aujourd’hui de nombreux systèmes de programmation globale voient le jour. Pourtant les fondements sur lesquels ceux-ci sont basés ne sont pas toujours très clairs. Dans ces conditions comparer et évaluer ces différents systèmes est difficile. Dans bien des cas, l’apparition d’un nouveau système correspond plus à des variations de surface qu’à des améliorations de fond. Cette situation pourrait être comparée, dans le domaine de la programmation détaillée, à la prolifération de nouveaux langages de programmation dans les années 60. Par contre, dans ce dernier cas, ces apparitions ont étés suivies par un processus de classification et de rationalisation. Remarquons finalement que dans le domaine de la programmation globale, l’état de la pratique est encore dominé par l’utilisation de techniques rudimentaires conçues dans les années 70. La ré-ingénierie est liée à la différence entre l’état de l’art et l’état de la pratique. Il s’agit d’une approche pour diminuer le coût de la maintenance. Comme son nom l’indique, l’idée sous jacente est de “refaire” en utilisant des méthodes et des techniques (plus) adaptées. Refaire, non seulement parce que quelque chose a été mal fait, mais aussi parce que la manière de faire a changé. En fait la ré-ingénierie est un support pour l’évolution des logiciels existants mais peut être vue aussi comme un moyen facilitant le transfert de technologie. La rétro-ingénierie est l’une des composantes de la ré-ingénierie. Comme son nom le suggère, il s’agit de “faire les choses à l’envers”. Une telle approche est contestable dans bien des cas ; mais elle peut aussi être utile. Les fonctionnalités offertes par les logiciels âgés ont souvent été affinées au cours de longues années et il peut être préférable d’examiner le logiciel existant que de faire une nouvelle analyse des besoins. La ré-ingénierie s’est surtout intéressée à la programmation détaillée. Par contre son intersection avec la programmation globale est quasi-inexplorée. 3 I.1.2 Contexte spécifique : maintenance en présence de préprocesseurs Le point de départ de cette thèse est plus spécifique. Nous nous intéressons aux problèmes posés par l’utilisation de préprocesseurs dans le domaine de la programmation globale et de son rapport avec la maintenance et la ré-ingénierie. Le cas du préprocesseur CPP est plus particulièrement étudié. CPP est le préprocesseur du langage C. Pour les chercheurs il s’agit d’un outil dépassé et pourtant il est cité dans de nombreux articles... Pour beaucoup de programmeurs il s’agit d’un outil du passé mais aussi du présent ; dans le futur, il risque d’être encore présent... L’utilisation extensive et excessive des préprocesseurs rend les programmes impossibles à lire ; pourtant ils sont utilisés pour écrire de grands volumes de code... L’utilisation des préprocesseurs rend la maintenance difficile et pourtant ils sont largement utilisés par les chargés de maintenance... La présence des préprocesseurs est un problème pour les programmeurs, les chargés de maintenance, les constructeurs d’outils et pourtant ils sont toujours là... Malgré les problèmes occasionnés par les préprocesseurs, aucun support ne leur est dédié... Ces paradoxes forment le contexte spécifique de cette thèse. Ce contexte s’insère parfaitement dans le contexte général: les préprocesseurs sont typiquement utilisés pour résoudre les problèmes de programmation globale (problème d’architecture, de variation, etc.). C’est essentiellement dans le cadre de la maintenance qu’ils sont utilisés et qu’ils posent des difficultés. De nombreux logiciels âgés utilisent de tels outils et le problème de leur ré-ingénierie se pose. Bien que le cas particulier des préprocesseurs ait été le point de départ de ce travail, ce n’est aujourd’hui que l’illustration d’un discours bien plus général. I.2 Objectifs Les oppositions et les paradoxes présentés ci-dessus donnent lieu à différents objectifs. I.2.1 Objectifs généraux Trois objectifs généraux sont poursuivis : O1 Montrer que la maintenance, la programmation globale et la ré-ingénierie sont des thèmes dignes d’intérêt, autant pour la recherche que pour l’industrie. L’effort doit se porter surtout du côté de la recherche : tout au long de la préparation de la thèse, l’expérience nous a montré que les préoccupations qui nous animaient étaient souvent bien éloignées de celles d’autres chercheurs en génie logiciel. Insister sur la problématique et la justifier a été un passage obligé à chaque présentation de nos travaux. Bien souvent cela revient à combattre les préjugés négatifs associés à la maintenance ; car finalement, si depuis des décennies la maintenance est une zone sombre du génie logiciel, c’est entre autre parce qu’elle est accompagnée d’un manque d’intérêt généralisé. O2 Clarifier les relations entre maintenance, programmation globale et ré-ingénierie. Expliquer clairement ce que recouvre chaque domaine et les relations qui les lient est important pour leur développement. 4 O3 Favoriser un processus de rationalisation dans le domaine de la programmation globale. Dans le domaine de la programmation détaillée, l’apparition d’un grand nombre de langages a été suivie par un processus de rationalisation. Aujourd’hui on dispose de certains critères pour comparer et classer les langages de programmation. Ceux-ci sont fondés sur des bases théoriques et concevoir un nouveau langage est une activité d’ingénierie dans le sens propre du terme. Pourquoi ne pas essayer d’atteindre le même degré de maturité dans le domaine programmation globale ? Conceptualiser et formaliser devient un objectif primordial dans ce domaine; même si c’est un objectif à long terme. Nous chercherons plus particulièrement à montrer que bien que la pratique de la programmation globale se caractérise par des échafaudages de systèmes hétérogènes, ceux-ci sont basés sur un nombre limité de concepts. O4 Définir et explorer le thème de la ré-ingénierie globale. L’intersection entre la programmation globale et la ré-ingénierie est un thème peu étudié. Présenter les concepts sous-jacents est l’un de nos objectifs. Ces objectifs sont aussi généraux que difficiles à atteindre. O1 est très subjectif. Bien qu’il ne 1corresponde pas à une démarche habituelle dans une thèse , il nous a semblé important qu’il y figure. O2 et O4 sont difficiles à atteindre car les domaines mis en jeu sont plutôt flous. Finalement O3 est un objectif à long terme et notre travail ne constitue qu’un pas dans cette direction. Les deux tiers de cette thèse sont consacrés à ces 4 objectifs. I.2.2 Objectifs spécifiques Le reste de la thèse est consacré à deux objectifs particuliers : O5 Etudier le rôle des préprocesseurs et montrer qu’il s’agit d’un thème digne d’intérêt. Si paradoxe il y a dans l’utilisation des préprocesseurs, il est naturel d’en chercher les causes. La deuxième partie de cet objectif est un sous-ensemble réduit de O1. Montrer qu’un préprocesseur peut être un sujet de recherche actuel représente l’un des défis de cette thèse. O6 Faciliter la maintenance et la ré-ingénierie de programmes utilisant des préprocesseurs. Cet objectif est une réponse naturelle au dernier paradoxe présenté en I.1.2 (”Bien que les préprocesseurs posent des problèmes de maintenance, ils ne bénéficient d’aucun support...”) Ces objectifs forment le point de départ de ce travail, ils ne sont que cependant l’argument d’une approche plus générale. 1. Souvent une thèse a pour but de résoudre un problème particulier dans un domaine donné. Justifier l’importance de la problématique du domaine est souvent moindre.
Un pour Un
Permettre à tous d'accéder à la lecture
Pour chaque accès à la bibliothèque, YouScribe donne un accès à une personne dans le besoin