Génie logiciel

Génie logiciel

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'arriver à ce que des logiciels de grande taille correspondent aux attentes du client, soient fiables, aient un coût d'entretien réduit et de bonnes performances tout en respectant les délais et les coûts de construction[1].

Sommaire

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[2].

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[3].

Complexité des logiciels ayant ouvert la voie à l'ingénierie logiciel

Jusque 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 graphique, 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 œuvre 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 personnel en 1980, le logiciel devient un bien de grande distribution, orienté vers le consommateur, par l'arrivée des progiciels - des logiciels prêts-à-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[4].

Génie logiciel comme profession de l'ingénieur

Les débuts de la profession en amérique du nord

Aux États-Unis, en 1993, l'IEEE et Association for Computing Machinery (ACM) ont commencé un effort conjoint appelé JCESEP, qui a évolué en SWECC en 1998 pour envisager le génie logiciel comme une profession. L'ACM a quitté le SWECC en mai 1999, s'opposant à son soutien aux efforts de professionnalisation du génie logiciel au Texas, qui a permis aux ingénieurs logiciels d'obtenir une licence d'exercice[5]. ACM a statuer que l'état des connaissances et des pratiques en génie logiciel était trop immature pour justifier une licence, et que les licences donnerait de fausses assurances de compétence, même si le corps de connaissance étaient matures dans ce domaine. L'IEEE a continué à appuyer le génie logiciel comme une branche de l'ingénierie traditionnelle[6].

Au Texas, Donald Bagert du Texas est devenu le premier professionnel ingénieur logiciel aux Etats-Unis au mois de septembre 1998. En mai 2002, le Texas avait délivré 44 licences professionnelles d'ingénieurs pour des ingénieurs logiciels. Rochester Institute of Technology fut la première université à accordée un degrés en génie logiciel en 2001. D'autres universités ont suivi ce pas.

Au Canada, Colombie-Britannique en 1999, l'Association of Professional Engineers and Geoscientists of British Columbia (APEGBC) reconnue la discipline du génie logiciel comme une discipline d'ingénierie professionnelle[5]) . Cela a causé certains différends entre les associations provinciales d'ingénieurs et les entreprises qui nomment leurs développeurs de logiciels des ingénieurs, même si ces développeurs n'ont pas de permis par une association d'ingénieurs[7]. Les premiers programmes de génie logiciel ont été accrédité par le Bureau d'accréditation des Programmes de Génie en 2001[8] pour McMaster University, University of Ottawa et University of Western Ontario. D'autres universités Canadienne ont suivi ce pas. Ceci permis aux organismes d'attribution des permis d'ingénieur du Canada d'octroyer des licences d'exercice au finissant de ces programmes. Avant cette date, chaque candidature devait faire l'objet d'une évaluation au cas par cas avant qu'une licence soit octroyé[5].

La motivation principale des diverses associations régulant la pratique du génie d'étendre la licence d'exercice au génie logiciel est de reconnaitre la contributions des practiciens de ce domaine de l'ingénierie et la nécessité pour ces même professionnels d'avoir une réglementation dans l'industrie du logiciel ayant une visibilité significative pour assurer la protection du public[5].

Règlementation canadienne du génie logiciel

Le terme «Ingénieur» au Canada a une utilisation règlementée, car il oblige à avoir terminé un programme en génie accrédité et être membre d'un ordre professionnel dans l'une des provinces canadiennes régulant la profession d'ingénieur dans son territoire[9]. Certaines universités ayant des programmes de "génie logiciel" offert dans la faculté d'ingénierie sont donc admissibles. D'autres, offerts dans une faculté des sciences informatiques ne sont pas admissibles.

Cette distinction est en relation avec la façon dont la profession est réglementée. Un grade de «B.Ing.» doit être accrédité par le Bureau Canadien d'Accréditation des Programmes en Génie (BCAPG) et ont des exigences particulières pour permettre aux diplômés de poursuivre une carrière en tant qu'ingénieur. Les degrés en Informatique (B.Sc.), même ceux avec des spécialités en génie logiciel ne permettent pas de répondre à ces exigences.

Situation professionnelle du génie logiciel au Québec, Canada
Au Québec, la profession d'ingénieur est régie par l'Ordre des ingénieurs du Québec (OIQ). Seuls les ingénieurs inscrits au tableau de l'Ordre et titulaires d'un permis d'ingénieur peuvent utiliser le titre "ingénieur" et donc ingénieur logiciel. L'ordre a d’ailleurs gagné en justice contre Microsoft sur l'utilisation illégale au Québec du titre d'ingénieur dans la formation MSCE (Microsoft Certified Systems Engineer[10]. La loi sur les ingénieurs actuellement en vigueur (en 2011) n'encadre pas les actes réservés à la profession d'ingénieur logiciel. De nombreux débats afin de statuer sur les actes réservés de la profession sont actuellement en cours entre les informaticiens (via Association professionnelle des Informaticiens et Informaticiennes du Québec (APIIQ)) et les ingénieurs logiciels (via l'Ordre des ingénieurs du Québec (OIQ)). Le statu quo prévaut, ce qui implique qu'il n'est pas nécessaire d'être ingénieur logiciel au Québec pour exercer le génie logiciel faisant en sorte que plusieurs titres d'emploi tels que Concepteur, Architecte ou développeur logiciel sont utilisés en entreprise. Également, plusieurs diplômés des écoles d'ingénieur dans le domaine du génie logiciel ne s'inscrivent pas au tableau de l'Ordre ou acquièrent seulement leur permis d'apprenti (ingénieur junior) après leur étude. Ils sont alors considérés comme des spécialistes du génie logiciel en entreprise sans toutefois être ingénieurs.

Les professions du génie logiciel

Le titulaire d'un diplôme dans ce domaine peut exercer dans les diverses professions suivantes :

  • Ingénieur en logiciel
  • Ingénieur au niveau conception de logiciel
  • Ingénieur en informatique

Le titulaire d'un diplôme en génie logiciel sera amené à travailler un peu partout où le développement de logiciel sera nécessaire, voici quelques exemples d'employeurs pouvant avoir besoin de personnels spécialisé dans le génie logiciel :

Normes internationales en génie logiciel

Le génie logiciel repose sur un ensemble de normes de niveau international permettant de définir le champs de connaissance et d'application.

  • IEEE Standard for Software Quality Assurance Plans - IEEE Std. 730
  • IEEE Standard for Software Configuration Plans - IEEE Std. 828
  • IEEE Standard for Software Test Documentation - IEEE Std. 829
  • IEEE Recommended Practice for Software Requirements Specifications - IEEE Std. 830
  • IEEE Recommended Practice for Software Design Descriptions - IEEE Std. 1016
  • IEEE Standard for Software User Documentation - IEEE Std. 1063
  • Guide SWEBOK - Software Engineering Book of Knowledge
  • Software engineering for small organizations - ISO 29110
  • Software life cycle - ISO 12207

Également, ISO 15504 fourni un ensemble structuré de bonnes pratiques destinée à appréhender, mesurer et améliorer la qualité des produits d'une entreprise d'ingénierie informatique.

Domaines de connaissance du génie logiciel

Article connexe : développement logiciel.

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 défini dans le SWEBOK : l'analyse fonctionnelle, l'architecture, la programmation, les tests, la validation, la maintenance et la gestion de projet.

  • Analyse des requis

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.

  • Conception

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.

Des plans conceptuels du logiciel selon les formalismes de modélisation (UML par exemple seront alors réalisé. C'est également a cette étape que l'utilisation de patrons de conception logiciel sont appliqués afin de résoudre certains problèmes de conceptions communs.

  • Construction

Consiste à la rédaction du code source, des instructions de programme qui offriront les fonctions attendues, et qui sont le corps du logiciel. La programmation est alors effectué en suivant les plans initialement établie lors de la conception. Selon la méthodologie choisie (ex: itératif), les ingénieurs pourront retourner sur les planches a dessin afin d'ajuster la conception avec la réalité de la construction.

  • Tests

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.

  • Maintenance

Des opérations d'analyse, de programmation et de test 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 facilité de cette maintenance dépendra de l'importance qui lui a été accordé durant la phase de conception.

  • Gestion de projets

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 outils et méthodes

Les thématiques du génie logiciel recouvrent notamment les outils et méthodes de spécification de fonctionnalités d'un logiciel, les méthodes formelles (Méthode B par exemple), les outils et les méthodes de conception de logiciel, les outil de conception, atelier logiciel, Ingénierie des modèles Kermeta par exemple, l'automatisation de l'optimisation du code.

D'autres domaines sont connexes au génie logiciel dans la mesure où ils partagent des outils communs : description formelle du code, grammaires des langages manipulés. Ces domaines sont par exemple :

- la compilation ; - l'interprétation de code ; - la traduction de code d'un langage de programmation vers un autre. - un éditeur dédié au langage de programmation - les bibliothèques de composants - les outils de planification - un outil de gestion des exigences pour développer et gérer les exigences relatives au code produit - un outil de gestion de configuration pour contrôler les évolutions du code produit - des moyens de tester pour vérifier la conformité du code produit - des outils de génération de métriques pour caractériser la conformité du code produit

  • La Gestion de la Qualité

Bien que l'on passe du génie de la production à celui de la décision, ces domaines ont un impact tellement important sur l'activité de génie logiciel qu'ils doivent être mentionnés [11]:

- La gestion de la qualité permet de contrôler l'organisation de la production du code. - La qualité repose sur des méthodes. - Le management est un modèle et un moyen humain qui a pour but d'améliorer la production.

  • La gestion de la configuration

Permet de contrôler les évolutions du code produit et les différentes versions du produit.

Les méthodes et pratiques de construction (développement)

cycle en spirale
  • Cascade

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.

  • Itératif

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 rafiné, et ainsi de suite, selon un cycle en spirale.

  • Agile

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[12].

  • Extreme

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[13].

  • Scrum

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 facon à 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[14].

  • Brouillon

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.

Croyances erronées de la pratique

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 ê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 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 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)[15]

Quelques disciplines couvertes par le génie logiciel

  • Gestion de la qualité du logiciel
  • Architecture de haut niveau
  • Architecture détaillée
  • Analyse/spécification des besoins
  • Documentation logicielle
  • Établissement de programme de mesure du logiciel
  • Implantation de norme logicielle (ISO, IEEE)
  • Connaissance dans l'application du CMM/CMMI
  • Les cycles de vie du logiciel
  • Optimisation des interfaces usager
  • Gestion de projet
  • Les métriques (par exemple : Point de Fonction)

Voir aussi

Articles connexes

Bibliographie

  • Strohmeier A., Buchs D., Génie logiciel : principes, méthodes et techniques, Lausanne, Presses polytechniques et universitaires romandes, 1996.
  • SWEBOK: Software Engeneering Body Of Knowledge, norme IEEE, 2004. Voir SWEBOK.

Notes et références

  1. Marylène Micheloud et Medard Rieder,Programmation orientée objets en C++: Une approche évolutive,PPUR presses polytechniques - 2002,(ISBN 9782880745042)
  2. (en)Ian Sommerville,Software engineering - International computer science series,Pearson Education - 2001,(ISBN 9780321313799)
  3. (en)Pankaj Sharma,Software Engineering - Volume 2,APH Publishing - 2004,(ISBN 9788176485401)
  4. (en)Bharat Bhushan Agarwal et Sumit Prakash Tayal,Software Engineering,Firewall Media,(ISBN 9788131802151)
  5. a, b, c et d http://sce.uhcl.edu/helm/SWEBOK_IEEE/papers/10%20reprint%205.pdf
  6. http://www.cs.wm.edu/~coppit/csci690-spring2004/papers/selep_main.pdf
  7. http://www.peo.on.ca/enforcement/Software_engineering_page.html
  8. http://www.peo.on.ca/enforcement/ja01software_news1.pdf
  9. http://www.peng.ca/francais/etudiants/quatre.html
  10. http://www.oiq.qc.ca/jugement_decision/107/0118-0651.pdf
  11. Alain April et Claude Laporte, Assurance qualité logicielle 1: concepts de base, Lavoisier, 2011, (ISBN 9782746231474), page 387
  12. (en)Peter Schuh,Integrating agile development in the real world,Cengage Learning - 2005,(ISBN 9781584503644)
  13. (en)James,Software Engineering,PHI Learning Pvt. Ltd.,(ISBN 9788120335899)
  14. (en)Mike Cohn,User stories applied: for agile software development,Addison-Wesley - 2004,(ISBN 9780321205681)
  15. (en)A.A.Puntambekar,Software Engineering,Technical Publications - 2009 (ISBN 9788184313963)

Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article Génie logiciel de Wikipédia en français (auteurs)

Игры ⚽ Поможем решить контрольную работу

Regardez d'autres dictionnaires:

  • Genie logiciel — Génie logiciel Le génie logiciel (en anglais : software engineering) désigne l ensemble des méthodes, des techniques et des outils concourant à la production d un logiciel, au delà de la seule activité de programmation. Sommaire 1… …   Wikipédia en Français

  • Génie Logiciel — Le génie logiciel (en anglais : software engineering) désigne l ensemble des méthodes, des techniques et des outils concourant à la production d un logiciel, au delà de la seule activité de programmation. Sommaire 1 Définitions 2 Compétences …   Wikipédia en Français

  • Génie logiciel — ● Génie logiciel ensemble des méthodes et des procédures mises en œuvre dans les différentes phases de la production d un logiciel afin d en améliorer les qualités et la maintenance …   Encyclopédie Universelle

  • génie logiciel — ● loc. m. ►PROG Ensemble des techniques et des méthodes permettant de produire du logiciel, de A à Z (c est à dire depuis les premières spécifications jusqu à la maintenance en cours d exploitation) …   Dictionnaire d'informatique francophone

  • Atelier De Génie Logiciel — Pour les articles homonymes, voir AGL. On désigne par atelier de génie logiciel (AGL) un ensemble de programmes informatiques permettant eux mêmes de produire des programmes de manière industrielle. On parle aussi d outils CASE pour Computer… …   Wikipédia en Français

  • Atelier de genie logiciel — Atelier de génie logiciel Pour les articles homonymes, voir AGL. On désigne par atelier de génie logiciel (AGL) un ensemble de programmes informatiques permettant eux mêmes de produire des programmes de manière industrielle. On parle aussi d… …   Wikipédia en Français

  • Ateliers de génie logiciel — Atelier de génie logiciel Pour les articles homonymes, voir AGL. On désigne par atelier de génie logiciel (AGL) un ensemble de programmes informatiques permettant eux mêmes de produire des programmes de manière industrielle. On parle aussi d… …   Wikipédia en Français

  • Atelier de génie logiciel — Pour les articles homonymes, voir AGL. On désigne par atelier de génie logiciel (AGL) un ensemble de programmes informatiques permettant eux mêmes de produire des programmes de manière industrielle. On parle aussi d outils CASE pour Computer… …   Wikipédia en Français

  • Genie des technologies de l'information — Génie des technologies de l information Le génie des technologies de l information ou génie des TI est un programme de premier cycle universitaire québécois (canadien) offert par l École de technologie supérieure et visant à former des ingénieurs …   Wikipédia en Français

  • Génie Des Technologies De L'information — Le génie des technologies de l information ou génie des TI est un programme de premier cycle universitaire québécois (canadien) offert par l École de technologie supérieure et visant à former des ingénieurs généralistes et multidisciplinaires en… …   Wikipédia en Français

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”