Le génie logiciel, qu'est-ce que c'est ?

Le génie logiciel (anglais software engineering) est une science de génie industriel qui étudie les méthodes de travail et les bonnes pratiques des ingénieurs qui développent des logiciels...

Le génie logiciel s'intéresse en particulier aux procédures systématiques qui permettent d'obtenir que des logiciels de grande taille correspondent aux attentes du client, sont fiables, ont un coût d'entretien réduit et de bonnes performances tout en respectant les délais et les coûts de construction.

Définitions
Selon l'arrêté ministériel du 30 décembre 1983 relatif à l'enrichissement du vocabulaire de l'informatique [Journal officiel du 19 février 1984], le génie logiciel est « l'ensemble des activités de conception et de mise en œuvre des produits et des procédures tendant à rationaliser la production du logiciel et son suivi ».

Est aussi appelée génie logiciel : l'ingénierie appliquée au logiciel informatique, l'activité par laquelle le code source d'un logiciel est spécifié puis produit. Le génie logiciel touche au cycle de vie des logiciels. Toutes les phases de la création d'un logiciel informatique y sont enseignées : l'analyse du besoin, l'élaboration des spécifications, la conceptualisation du mécanisme interne au logiciel ainsi que les techniques de programmation, le développement, la phase de test et finalement la maintenance.

La norme SWEBOK du IEEE définit les champs de connaissance du génie logiciel, comme le Project Management Body of Knowledge (PMBOK) du Project Management Institute (PMI) le fait, pour la gestion de projet.

Histoire
La notion de génie logiciel a été mentionnée pour la première fois à une conférence concernant la crise du logiciel en 1968. La crise du logiciel est une baisse significative de la qualité des logiciels dont la venue coïncide avec le début de l'utilisation des circuits intégrés dans les ordinateurs: l'augmentation de la puissance de calcul des ordinateurs a permis de réaliser des logiciels beaucoup plus complexes qu'auparavant.

Les premières tentatives de création de logiciels de grande ampleur ont vite montré les limites d'un travail informel d'ingénieurs logiciel : Les produits réalisés ne sont pas terminés dans les temps, coutent plus cher que prévus, ne sont pas fiables, peu performants et coutent cher en entretien. La baisse du coût du matériel informatique s'accompagnait d'une augmentation du coût du logiciel. Des études se sont penchées sur la recherche de méthodes de travail adaptées à la complexité inhérente aux logiciels contemporains et ont donné naissance au génie logiciel.

Aujourd'hui (en 2004), l'utilisation des méthodes de génie logiciel reste quelque chose de relativement peu répandu dans l'industrie du logiciel. Le programmeur travaille souvent comme un artisan, guidé par son talent, son expérience et ses connaissances théoriques et la crise du logiciel s'apparente à une maladie chronique de l'industrie du logiciel.

Complexité des logiciels
Jusqu'en 1985 les ordinateurs appartenaient à des sociétés ou des institutions. Dans les années 1950 à 1960 les logiciels étaient développés par des membres des institutions pour leurs propres besoins, la distribution de logiciel était très limitée, et ceux-ci servaient essentiellement à effectuer des traitements par lots (anglais batch).

En 1970 sont apparus de nouvelles notions telles que le multi-utilisateur, les interfaces graphiques, la programmation concurrente, les bases de données et le temps-réel. Les logiciels sont devenus beaucoup plus sophistiqués qu'auparavant, du fait qu'ils mettent en oeuvre et exploitent ces nouveautés. C'est à la même époque que sont apparus les premiers éditeurs de logiciels et que le logiciel est devenu un bien du marché.

Depuis 1973, et à fortiori depuis l'arrivée des ordinateurs personnels en 1980, le logiciel devient un bien de grande distribution, orienté vers le consommateur, par l'arrivée des progiciels - des logiciels prêt-à-porter. Le prix du matériel informatique a également beaucoup diminué, ce qui augmente la proportion du coût du logiciel sur le coût total de l'ordinateur.

 

Entre 1985 et le début des années 2000, avec l'avènement des systèmes distribués, de l'Internet, de l'architecture client-serveur et du cloud computing, le logiciel passe du statut de produit stand-alone indépendant à celui d'élément d'un ensemble, dans lequel plusieurs ordinateurs et plusieurs logiciels travaillent en collectivité. L'arrivée de la programmation orientée objet et la conception orientée objet transforment le travail des ingénieurs et les logiciels incluent alors des formes d'intelligence artificielle telle que la reconnaissance de forme, la déduction automatique la traduction automatique et l'exploration de données.

Les bases
Le génie logiciel étudie le processus de création de logiciels, les différentes activités, leur répartition dans le temps, les profils des membres d'une équipe qui crée des logiciels ainsi que les formalités de communication entre les membres de l'équipe. Les études en génie logiciel ont également relevé diverses croyances erronées de la communauté des ingénieurs qui ont un impact direct sur leurs méthodes de travail.

Exemples: 

Un logiciel peut-il  être construit uniquement par assemblage de fonctions et de standards ?
Les standard et fonctions existantes sur le marché sont une aide utile, mais ne sont pas suffisamment complets et adaptables pour permettre la construction complète du logiciel.

Ajouter des personnes à une équipe d'ingénieurs permet-il  de rattraper le retard ?
C'est le contraire : les personnes qui arrivent doivent être formées et informées sur le logiciel en cours de construction par les autres ingénieurs, ce qui entraine des retards supplémentaires. (loi de Brooks)

Le travail est-il  terminé une fois que le logiciel fonctionne ?
L'expérience montre que la majeure partie du travail commence après la livraison du logiciel au client. (phase de maintenance)

Le processus de création de logiciels
Le cycle de vie d'un logiciel commence par une demande d'un maître d'ouvrage et va jusqu'à la mise hors service définitive du produit, en passant par sa construction et son utilisation. Au cours du cycle vont intervenir différentes personnes, parmi lesquelles il y a les technico commercial, les ingénieurs, les acheteurs, les utilisateurs, et le directeur des systèmes d'information.

Les intervenants vont participer à différentes activités telles que l'analyse fonctionnelle, l'architecture, la programmation, les tests, la validation, la maintenance et la gestion de projet.

Contrairement à un produit manufacturé ou un ouvrage de génie civil, chaque logiciel est un ouvrage unique, il est construit une seule fois et possède son propre éventail de fonctions et de mécanismes. L'éventail de fonctions et de mécanismes évolue tout au long du cycle de vie du logiciel.

- l'analyse fonctionnelle consiste à récolter des informations détaillées concernant l'éventail de fonctions que devra offrir le logiciel, ainsi que les résultats qu'il devra donner. Des connaissances du domaine d'activité du logiciel (exemple: banque, industrie, administration) facilitent le travail de l'ingénieur.

- l'architecture consiste à déterminer et schématiser les grandes lignes des mécanismes qui devront être programmés en vue d'obtenir chacune des fonctions que devra offrir le logiciel.

- la programmation consiste à la rédaction du code source, des instructions de programme qui offriront les fonctions attendues, et qui sont le corps du logiciel.

- les tests sont une suite de vérifications faites par les ingénieurs qui servent à déceler un maximum de bugs, des défauts de programmation qui provoquent des pannes ou des résultats incorrects.

- la validation est un examen réalisé par le client durant lequel il vérifie que les fonctions offertes par le logiciel correspondent à ses attentes et à ses besoins.

- les maintenances sont des opérations d'analyse, de programmation et de tests réalisés après coup, une fois que le logiciel a été mis à disposition des utilisateurs et durant lesquelles le logiciel subit des transformations, des corrections ou des améliorations.

- la gestion de projet est une activité réalisée tout au long des travaux sur le logiciel, qui consiste à organiser une équipe d'ingénieurs, répartir les tâches et veiller à l'avancée des travaux en vue de finir dans les délais prévus. C'est une activité de management également exercée dans d'autres domaines d'ingénierie.

Les méthodes et pratiques
La méthode classique de génie consiste à effectuer successivement, en cascade, les travaux d'analyse fonctionnelle, puis de conception, de programmation et de test.

Une autre méthode consiste à effectuer les travaux d'analyse, de programmation, de test et de validation tout d'abord sur un jeu restreint de fonctions du logiciel, puis une nouvelle itération servira à répéter ces opérations sur un jeu de fonctions plus raffiné, et ainsi de suite, selon un cycle en spirale.

Quick-and-dirty, littéralement rapide et sale, traduit vite fait-mal fait, est une méthode de programmation souvent utilisée pour réaliser des prototypes et des maquettes, elle est utilisée en particulier en vue de présenter rapidement au client un brouillon du logiciel.

Agile est un qualificatif de divers procédés de développement en rupture avec les procédés d'ingénierie classiques hérités du génie. Ces procédés mettent l'accent sur les changements constants de cahier des charges et de code source des logiciels, une collaboration étroite et une forte implication de l'utilisateur final, et un cycle de développement en spirale avec de nombreuses et courtes itérations. Scrum, Extreme programming et Rational Unified Process sont des méthodes agile.

CMMi (sigle de Capacity Maturity Model and integration) est un ensemble structuré de bonnes pratiques et une échelle de mesure à 5 niveaux destinée à appréhender, mesurer et améliorer la qualité des produits d'une entreprise d'ingénierie informatique. CMMI a été créé par le Software Engineering Institute, l'institut de recherche en génie logiciel de l'université Carnegie Mellon.

Dans la méthode Extreme programming les activités d'analyse, de programmation, de test et de validation sont effectuées continuellement et parallèlement, selon un cycle qui comporte de très nombreuses et fréquentes itérations avec à chaque fois un jeu restreint de fonctionnalités. Ce procédé, appelé intégration continue, implique une forte coopération de l'utilisateur, qui est considéré comme co-auteur du logiciel.

Dans la méthode de gestion de projet Scrum, les itérations - sprints - sont d'une durée fixe de 1 à 4 semaines, durant lesquelles les intervenants se voient attribuer des travaux d'analyse, de programmation et de test, conformément à une liste de priorités. Les tâches sont distribuées de façon à occuper une équipe de 4 à 7 personnes et obtenir au bout d'un mois un logiciel candidat - mais incomplet - qui sera présenté au client.

Un spécialiste en ingénierie informatique et en génie logiciel :

92170 - ALLIANCE SERVICES PLUS (AS+) http://www.conseil-ingenierie-innovation.com


Lien vers HaOui :
www.haoui.com
Lien vers : historique des newsletters