Le développement d'un système d'information ne se résume pas à une activité de codage des programmes. C'est la phase préliminaire d'analyse qui est la plus délicate : outre la complexité inhérente à la situation à modéliser et celle liée aux contraintes imposées les techniques informatique, il est nécessaire d'élaborer un modèle du problème qui fasse la synthèse des besoins des acteurs du projet. Développeurs de programmes, chef de projet, clients ont tous leurs besoins et leur point du vue. La représentation est au carrefour de ces différentes visions, elle doit être le reflet des spécificités des langages de chacun, mais aussi pouvoir en faire la synthèse. Elle doit permettre de représenter un problème à un moment donné, mais également être capable de s'adapter aux évolutions inévitables qu'il subira.
Force est de reconnaître que ce n'est pas le cas des projets informatiques actuels. La nécessité d'un progrès est d'autant plus cruciale que le bilan de trente ans d'activité n'est pas brillant. Alors que le "hardware" devient de plus en plus rapide et fiable, le "software" est devenu le goulot d'étranglement de l'informatique, au point que l'on parle de "crise du logiciel". Depuis une étude du 'department of defense' américain démontrant que les trois quarts des logiciels commandés ne sont jamais livrés ou jamais utilisés, la situation ne s'est guère améliorée. C'est du moins ce que tendraient à prouver quelques fiascos informatiques récents, comme le système Socrate de la SNCF ou le système de cotation de la bourse de Paris. Quant aux applications qui fonctionnent, on s'accorde pour évaluer leurs coûts de maintenance et d'adaptation entre 50 et 80% du coût global de l'application. Rappelons enfin que, dans le monde de l'informatique, les retards et les dépassements de budgets ont tendance à être la norme plutôt que l'exception.
C'est dans ce contexte qu'est apparu le génie logiciel. L'accroissement de la taille et de la complexité des applications ayant sonné le glas du mythe du "programmeur solitaire", la nécessité d'une approche raisonnée et globale du développement s'est imposée. Le génie logiciel se préoccupe donc tout à la fois des langages de l'informatique, des méthodes et de l'organisation des équipes de développement.
Notre thèse est qu'il repose, implicitement ou explicitement sur des paradigmes qui servent tout à la fois à comprendre les problèmes, à les communiquer, à entreprendre les modélisations et à concevoir les programmes. C'est à ces paradigmes et à leur évolution que nous nous intéresserons. Après avoir décrit le cycle de vie du logiciel, nous exposerons les deux familles de paradigmes du génie logiciel : celle de la décomposition fonctionnelle des traitements et celle de l'analyse des structures de données. Nous montrerons leurs liens avec les écoles cartésienne et systémique.
Après un bilan des échecs des méthodes classiques, nous retracerons l'émergence de l'analyse orientée objet. Dans ce domaine, la mise au point de langages informatiques orientés vers la résolution de problèmes spécifiques a précédé le développement des concepts. Nous explorerons ensuite les quatre principaux concepts de l'analyse objet : la réification, l'encapsulation, l'héritage et la coopération entre objets. Pour finir, nous reviendrons sur l'impact de cette nouvelle approche sur le cycle de vie du logiciel. Précisons enfin que le point de vue adopté est celui de la pratique du génie logiciel, nous nous excusons donc par avance de l'emploi de termes spécialisés que nous nous sommes efforcés de définir. Certains de ces termes, par exemple "réification" sont employés dans un sens très différent de celui qui leur est attribué en sociologie.