Cours de Gnie Logiciel PDF
Document Details
Université Ibn Khaldoun de Tiaret
2020
Boudjemaa BOUDAA
Tags
Summary
Ce document présente un cours de Génie Logiciel, destiné aux étudiants de 1ère année Master. Le cours couvre les notions de base et avancées de l'ingénierie des logiciels et inclut des exercices résolus. Des références comme les livres de Sommerville et Pressman sont mentionnées.
Full Transcript
RÉPUBLIQUE ALGÉRIENNE DÉMOCRATIQUE ET POPULAIRE MINISTÈRE DE L’ENSEIGNEMENT SUPÉRIEUR ET DE LA RECHERCHE SCIENTIFIQUE UNIVERSITÉ IBN KHALDOUN-TIARET FACULTÉ DES MATHÉMATIQUES ET DE L’INFORMATIQUE Cours de Génie Logic...
RÉPUBLIQUE ALGÉRIENNE DÉMOCRATIQUE ET POPULAIRE MINISTÈRE DE L’ENSEIGNEMENT SUPÉRIEUR ET DE LA RECHERCHE SCIENTIFIQUE UNIVERSITÉ IBN KHALDOUN-TIARET FACULTÉ DES MATHÉMATIQUES ET DE L’INFORMATIQUE Cours de Génie Logiciel (avec exercices résolus) Destiné aux étudiants de la : 1ere Année Master Spécialité : Génie Logiciel Réalisé par : Dr. Boudjemaa BOUDAA Expertisé par : Pr. Youcef DAHMANI - Université Ibn Khaldoun, Tiaret. Pr. Sidi Mohammed BENSLIMANE - ESI, Sidi Bel-Abbès. Avant-propos Ce polycopié de cours est le fruit de six années d‟expérience dans l‟enseignement du module « Génie Logiciel » en faveur les étudiants de la 1ere année Master (spécialité GL) au niveau du département informatique de l‟université de Tiaret. Il contient neuf (09) chapitres détaillant les connaissances de base ainsi que les concepts avancés de l‟ingénierie des logiciels. D‟autres part, il est enrichi par une variété de questions et d‟exercices proposés avec solutions de la plupart d‟entre eux. Apres fixer les objectifs visés, chaque chapitre commence par une introduction avant d‟aborder les thèmes y afférant. Et il se termine par un rappel des points clés retenus et une série d‟exercices avec leurs solutions. Aussi, et pour un accès rapide et permanent, les chapitres de ce polycopié sont disponibles en ligne via la plateforme Moodle de l‟université de Tiaret (http://moodle.univ-tiaret.dz/course/view.php?id=37). Ce document a été élaboré en se basant sur les célèbres références dans le domaine du génie logiciel, tel que les livres de Sommerville, Pressman, Shari et Jacques Lonchamp, et plusieurs d‟autres sources intéressantes et disponibles sur Internet (Springer, par exemple). Le présent polycopié pourrait servir un grand public de lecteurs : - En premier lieu, les étudiants en génie logiciel vont y trouver les connaissances théoriques et les bonnes pratiques nécessaires pour apprendre la discipline de l‟ingénierie des logiciels. - Egalement, les enseignants peuvent en bénéficier pour préparer soit des cours ou des fiches de travaux dirigés (TD) à travers les exercices et les solutions proposés. - Enfin, ce polycopié s‟adresse à toute personne intéressée par la conception et le développement des logiciels de manière professionnelle. Bonne lecture. Tiaret, le 02/02/2020 Sommaire Sommaire Chapitre 1: Introduction au Génie Logiciel....................................................................................................5 1. Introduction..................................................................................................................................................... 5 2. Histoire du Génie Logiciel................................................................................................................................ 6 3. Développement de logiciel professionnel....................................................................................................... 7 4. Éthiques de l'ingénierie du logiciel................................................................................................................ 12 5. Étude de Cas.................................................................................................................................................. 13 6. Points clés...................................................................................................................................................... 17 7. Exercices........................................................................................................................................................ 18 8. Solutions........................................................................................................................................................ 19 Chapitre 2: Processus de Développement Logiciel..................................................................................... 22 1. Introduction................................................................................................................................................... 22 2. Modèles d’un processus logiciel.................................................................................................................... 23 3. Les activités d’un processus........................................................................................................................... 26 4. Faire face au changement............................................................................................................................. 28 5. Amélioration des processus........................................................................................................................... 31 6. Points clés...................................................................................................................................................... 32 7. Exercices........................................................................................................................................................ 32 8. Solutions........................................................................................................................................................ 35 Chapitre 3: Développement Agile des Logiciels........................................................................................... 39 1. Introduction................................................................................................................................................... 39 2. Méthodes Agiles............................................................................................................................................ 40 3. Techniques de développement agile............................................................................................................. 42 4. Gestion de Projet Agile.................................................................................................................................. 48 5. Mise à l'échelle des méthodes agiles............................................................................................................ 51 6. Points clés...................................................................................................................................................... 56 7. Exercices........................................................................................................................................................ 57 8. Solutions........................................................................................................................................................ 60 1 Sommaire Chapitre 4: Ingénierie des Exigences................................................................................................................ 65 1. Introduction................................................................................................................................................... 65 2. Exigences fonctionnelles et non fonctionnelles............................................................................................ 67 3. Processus d'ingénierie des exigences............................................................................................................ 71 4. Elicitation des exigences................................................................................................................................ 72 5. Spécification des exigences........................................................................................................................... 76 6. Validation des exigences................................................................................................................................ 82 7. Changement des exigences........................................................................................................................... 83 8. Points clés...................................................................................................................................................... 85 9. Exercices........................................................................................................................................................ 86 10.Solutions........................................................................................................................................................ 88 Chapitre 5: Modélisation du Système........................................................................................................... 93 1. Introduction................................................................................................................................................... 93 2. Modèles de Contexte..................................................................................................................................... 94 3. Modèles d’Interaction................................................................................................................................... 96 4. Modèles Structurels....................................................................................................................................... 99 5. Modèles comportementaux........................................................................................................................ 102 6. Ingénierie Dirigée par les Modèles.............................................................................................................. 108 7. Points clés.................................................................................................................................................... 110 8. Exercices...................................................................................................................................................... 111 9. Solutions...................................................................................................................................................... 114 Chapitre 6: Conception Architecturale....................................................................................................... 119 1. Introduction................................................................................................................................................. 119 2. Décisions de Conception Architecturale...................................................................................................... 121 3. Vues architecturales.................................................................................................................................... 122 4. Patrons architecturaux................................................................................................................................ 123 5. Architectures d'application.......................................................................................................................... 130 6. Points clés.................................................................................................................................................... 134 7. Exercices...................................................................................................................................................... 135 8. Solutions...................................................................................................................................................... 137 Chapitre 7: Conception et Implémentation des Logiciels......................................................................... 141 1. Introduction................................................................................................................................................. 141 2. Conception orientée objet en utilisant UML............................................................................................... 141 2 Sommaire 3. Patrons de conception « Design Patterns »................................................................................................. 154 4. Issues de l’Implémentation.......................................................................................................................... 157 5. Développement open source...................................................................................................................... 161 6. Points clés.................................................................................................................................................... 162 7. Exercices...................................................................................................................................................... 163 8. Solutions...................................................................................................................................................... 167 Chapitre 8: Test du Logiciel........................................................................................................................ 173 1. Introduction................................................................................................................................................. 173 2. Tests de Développement............................................................................................................................. 178 3. Développement piloté par les tests............................................................................................................. 185 4. Les Tests de Sortie....................................................................................................................................... 186 5. Test d’utilisateur.......................................................................................................................................... 188 6. Points clés.................................................................................................................................................... 190 7. Exercices...................................................................................................................................................... 190 8. Solutions...................................................................................................................................................... 191 Chapitre 9: Evolution du Logiciel............................................................................................................... 194 1. Introduction................................................................................................................................................. 194 2. Processus d'évolution.................................................................................................................................. 195 3. Systèmes hérités (Legacy systems).............................................................................................................. 197 4. Maintenance logicielle................................................................................................................................. 202 5. Points clés.................................................................................................................................................... 208 6. Exercices...................................................................................................................................................... 208 7. Solutions...................................................................................................................................................... 210 Références................................................................................................................................................... 213 3 Chapitre I Introduction au Génie Logiciel Objectifs Comprendre le génie logiciel et pourquoi il est important; Comprendre que le développement de différents types de systèmes de logiciels peut nécessiter des techniques de génie logiciel; Comprendre certains enjeux éthiques et professionnels qui sont importants pour les ingénieurs des logiciels. Themes couverts Histoire du Génie Logiciel; Développement des logiciels professionnels; Éthiques de l’Ingénierie du Logiciel; Etudes de cas. 4 Chapitre 1: Introduction au Génie Logiciel Chapitre 1: Introduction au Génie Logiciel 1. Introduction Pourquoi le Génie logiciel? Les économies de tous les pays développés dépendent sur des logiciels. De plus en plus, les systèmes sont pilotés par des logiciels Le génie logiciel est intéressé par les théories, les méthodes et les outils de développement des logiciels professionnels. Les dépenses sur les logiciels représentent une fraction significative du PNB (Le produit national brut) de tous les pays développés. Les coûts des logiciels Les coûts des logiciels dominent souvent les coûts d‟un système informatique. Les coûts des logiciels sur un ordinateur sont souvent plus élevés que le coût du matériel. Logiciel coûte plus cher à maintenir que d'en développer. Pour les systèmes avec une longue durée de vie, les coûts de maintenance peuvent être de plusieurs fois des coûts de développement. Le génie logiciel est préoccupé par le développement de logiciels rentables. Échec du projet logiciel Accroissement de la complexité du système: Au fur et à mesure que de nouvelles techniques d'ingénierie logicielle nous permettent de construire des systèmes plus grands et plus complexes. Les systèmes doivent être construits et livrés plus rapidement; doivent avoir de nouvelles capacités qui auparavant étaient considérées comme impossibles. Défaut d'utiliser les méthodes d'ingénierie logicielle: Il est assez facile d'écrire des programmes informatiques sans utiliser de méthodes et de techniques d'ingénierie logicielle. Beaucoup d'entreprises ont dérivé du développement de logiciels à mesure que leurs produits et services ont évolué. Ils n'utilisent pas les méthodes d'ingénierie logicielle dans leur travail quotidien. Par conséquent, leur logiciel est souvent plus coûteux et moins fiable qu'il ne le devrait être. 5 Chapitre 1: Introduction au Génie Logiciel 2. Histoire du Génie Logiciel Naissance du Génie Logiciel La notion de «Génie Logiciel» a été proposé en 1968 lors de la conférence «Garmisch-Partenkirchen, Germany, 7th to 11th October 1968 » pour discuter de ce qui était alors appelé la «Crise du Logiciel». Il est devenu clair que les approches individuelles au développement du programme n‟ont pas pu développer les grands et complexes systèmes logiciels et qui restent: non fiables et ne satisfont pas leurs cahiers des charges coûtent plus chers que prévu, et ont été livrés en retard. Tout au long des années 1970 et 1980, une variété de nouvelles techniques et méthodes de génie logiciel ont été développés. Outils et notations standards ont été élaborés et sont maintenant largement utilisés. L‟initiative viendra de la division des affaires scientifiques de l‟OTAN (NATO)1, qui organise en octobre 1968 sur la suggestion de F. L. Bauer, professeur à l‟université technique de Munich, une conférence de travail sur les difficultés de la production de logiciel et les moyens de les surmonter. Intitulée Working Conference on Software Engineering, elle est considérée comme l‟événement fondateur de cette nouvelle discipline et c‟est elle qui popularise le terme de software engineering, traduit en français par « génie logiciel ». Bauer donne la définition suivante du terme GL : “Establishment and use of sound engineering principles to obtain economically software that is reliable and works on real machines efficiently” Objectifs du Génie Logiciel Le génie logiciel (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 qualité et de bonnes performances tout en respectant les délais et les coûts de construction. Le génie logiciel est préoccupé par le développement des logiciels professionnels rentables. 1 L'Organisation du traité de l'Atlantique Nord (OTAN ou Otan ; en anglais : North Atlantic Treaty Organization) 6 Chapitre 1: Introduction au Génie Logiciel 3. Développement de logiciel professionnel Qu’est-ce que le génie logiciel ? Définition 1: « Le génie logiciel est une discipline d'ingénierie qui s'occupe de tous les aspects de la production de logiciels ». Le génie logiciel est intéressé par les théories, les méthodes et les outils de développement de logiciels professionnels. Définition 2: selon l'arrêté du 30 décembre 1983: « ensemble des activités de conception et de mise en œuvre des produits et des procédures tendant à rationaliser la production du logiciel et de son suivi » Définition 3: « Le génie logiciel est un domaine des sciences de l‟ingénieur dont l‟objet d‟étude est la conception, la fabrication, et la maintenance des systèmes informatiques complexes». Outils UML, plateformes, … Techniques Interview, analyse grammaticale, brainstorming, … Méthodes OO, Merise, … Méthodologies (ou processus) UP, RUP, XP, Scrum, … Qu’est-ce qu’un système ? Définition 1: ensemble d'éléments en interaction dynamique, dont les éléments sont organisés et coordonnés en vue d'atteindre un objectif, qui évolue dans un environnement. Definition 2: Un système est un ensemble d‟éléments interagissant entre eux suivant un certains nombres de principes et de règles dans le but de réaliser un objectif. L‟environnement est la partie du monde extérieure au système. Un système est souvent hiérarchisé à l‟aide de sous-systèmes. Un système complexe se caractérise par : sa dimension, qui nécessite la collaboration de plusieurs personnes; son évolutivité. Exemples : Une fourmilière, l‟économie mondiale, le noyau Linux,... De plus en plus, les systèmes sont pilotées par des logiciels 7 Chapitre 1: Introduction au Génie Logiciel Qu’est-ce qu’un logiciel ? Définition 1: Les programmes informatiques et la documentation associée. Les produits logiciels peuvent être développés pour un client particulier ou peuvent être développés pour un marché général. Définition 2: « Un logiciel est un ensemble d‟entités nécessaires au fonctionnement d‟un processus de traitement automatique de l‟information». Parmi ces entités, on trouve par exemple : des programmes (en format code source ou exécutables); des documentations d‟utilisation; des informations de configuration. Définition 3: selon l'arrêté du 22 décembre 1981: ensemble des programmes, procédés et règles, et éventuellement de la documentation, relatifs au fonctionnement d'un ensemble de traitements de l'information. FAQ sur le génie logiciel Question Réponse Qu'est ce qu'un logiciel? Les programmes informatiques et la documentation associée. Les produits logiciels peuvent être développés pour un client particulier ou peuvent être développés pour un marché général. Quelles sont les Un bon logiciel doit offrir la fonctionnalité et les performances requises caractéristiques d‟un bon pour l'utilisateur et doit être maintenable, fiable et utilisable. logiciel? Qu'est-ce que le génie Le génie logiciel est une discipline d'ingénierie qui s'occupe de tous les logiciel? aspects de la production de logiciels. Quelles sont les activités Spécification des logiciels, développement des logiciels, validation des fondamentales de génie logiciel et l'évolution des logiciels. logiciel? Quelle est la différence entre L‟informatique focalise sur la théorie et les principes fondamentaux; génie le génie logiciel et de logiciel est concerné par les pratiques de développement et de la l'informatique? réalisation des logiciels utiles. Quelle est la différence entre Ingénierie des systèmes s'intéresse à tous les aspects du développement des le génie logiciel et de systèmes à base d'ordinateur, y compris le matériel, les logiciels et l'ingénierie de système? l'ingénierie des processus. Génie logiciel fait partie de ce processus plus général. Les produits logiciels Les produits génériques: Systèmes autonomes qui sont commercialisés et vendus à un client qui souhaite les acheter. Exemples : logiciel de PC tels que les programmes graphiques, les outils de gestion de projet; les logiciels de CAO; logiciels pour des marchés spécifiques tels que les systèmes de rendez-vous pour les dentistes. 8 Chapitre 1: Introduction au Génie Logiciel Les produits commandés (ou sur mesure, personnalisés): Le logiciel qui est commandé par un client spécifique pour répondre à leurs propres besoins. Exemples: systèmes embarqués de contrôle, logiciel de contrôle du trafic aérien, les systèmes de surveillance (monitoring) du trafic. Spécification du produit Les produits génériques: La spécification de ce que le logiciel doit faire est détenue par le développeur du logiciel et les décisions de modification (changement) sur les logiciels sont faites par le développeur. Les produits sur mesure: La spécification de ce que le logiciel doit faire est détenue par le client du logiciel et qui prend des décisions de changement sur les logiciels qui sont nécessaires. Les caractéristiques essentielles pour un bon logiciel (Comment concevoir un logiciel de qualité ?) Caractéristique Description Maintenabilité Le logiciel doit pouvoir évoluer pour s‟adapter aux besoins changeants des (maintainability) clients. Il s'agit d'un attribut essentiel parce que le changement de logiciel est une exigence inévitable dans un environnement commercial en évolution. Fiabilité et sécurité La Fiabilité du Logiciel comprend un éventail de caractéristiques, la (Dependability and disponibilité (availability), la sécurité (security) et la sûreté (safety). Un logiciel security) fiable ne devrait pas causer des dommages physiques ou économiques en cas de défaillance du système. Les utilisateurs malveillants ne devraient pas être en mesure d'accéder ou endommager le système. Efficacité ou performance Les logiciels ne doivent pas gaspiller les ressources système telles que la (Efficiency or performance) mémoire et les cycles du processeur. L‟efficacité inclut donc la réactivité, le temps de traitement, l‟utilisation de la mémoire, etc. Acceptabilité ou Le logiciel doit être acceptable par les utilisateurs pour lesquels il est conçu. utilisabilité (acceptability or Cela signifie qu'il doit être documenté, compréhensible, utilisable et compatible usability) avec d'autres systèmes qu'ils utilisent. Génie logiciel Le génie logiciel est une discipline d'ingénierie qui s'occupe de tous les aspects de la production de logiciels dès les premières étapes de spécification du système jusqu‟à la maintenance du système après qu'il a été mis en usage. Discipline d'ingénierie : Utilisation des théories et des méthodes appropriées pour résoudre les problèmes en tenant compte de l'organisation et les contraintes financières. Tous les aspects de la production de logiciels 9 Chapitre 1: Introduction au Génie Logiciel N‟est pas seulement le processus technique de développement. Aussi, la gestion de projet et le développement d'outils, de méthodes, etc… pour soutenir la production de logiciels. Activités du processus logiciel Spécification du logiciel, où les clients et les ingénieurs définissent le logiciel qui doit être produit et les contraintes sur son fonctionnement. Développement de logiciel, où le logiciel est conçu et programmé. Validation du logiciel, où le logiciel est vérifié pour s'assurer que c'est ce que le client demande. L'évolution du logiciel, où le logiciel est modifié pour tenir compte de l'évolution des besoins des clients et du marché. Issues générales affectant la plupart des logiciels Hétérogénéité De plus en plus, les systèmes doivent fonctionner comme des systèmes distribués dans des réseaux qui regroupent différents types d‟ordinateurs et d‟appareils mobiles. Economie et changement social L‟économie et la société changent incroyablement vite avec l‟émergence de nouvelles technologies. Ils doivent être capables de changer leurs logiciels existants et de développer rapidement de nouveaux logiciels. Sécurité et confiance Comme le logiciel est intimement lié à tous les aspects de nos vies, il est essentiel que nous puissions faire confiance à ce logiciel. Echelle Le logiciel doit être développé dans une très large gamme d'échelles, à partir de très petits systèmes embarqués dans des appareils mettables (wearable) ou portables, jusqu'à des systèmes basés sur l'Internet, basés sur le cloud, qui desservent une communauté mondiale. Diversité de génie logiciel Il y a beaucoup de différents types de systèmes de logiciels et il n'y a pas de techniques logicielles universelles qui sont applicables à tous ces systèmes de logiciels. Les méthodes de génie logiciel et les outils utilisés dépendent du type d'application en cours d'élaboration, des exigences de la clientèle et l„esprit de l'équipe de développement. Types d'applications 1) Applications autonomes (Stand-alone applications) Ce sont des systèmes d'application s'exécutant sur un ordinateur local, tel qu'un PC. Elles comprennent toutes les fonctionnalités nécessaires et n'ont pas besoin d'être connecté à un réseau. Ex. applications bureautiques. 10 Chapitre 1: Introduction au Génie Logiciel 2) Applications basés sur les transactions interactives (Interactive transaction-based applications) Les applications qui s'exécutent sur un ordinateur distant et qui sont accessibles par les utilisateurs à partir de leurs propres ordinateurs ou terminaux. Il s'agit notamment des applications Web telles que les applications de e-commerce. Ex. applications d‟entreprise (business systems), services en nuage (cloud-based services) 3) Systèmes embarqués de contrôle Ce sont des systèmes logiciels de contrôle qui contrôlent et gèrent les périphériques matériels. Numériquement, il y a probablement plus de systèmes embarqués que n'importe quel autre type de système. Ex. logiciel dans un téléphone portable, logiciel contrôlant le freinage dans une voiture (anti-lock braking) et logiciel dans un four à micro-ondes permettant de contrôler le processus de cuisson. 4) Les systèmes de traitement par lots Ce sont des systèmes de gestion qui sont conçus pour traiter des données en grandes séries. Ils traitent un grand nombre de différentes entrées pour créer des sorties correspondantes. Ex. systèmes de facturation périodique. 5) Systèmes de divertissement Ce sont des systèmes qui sont principalement pour un usage personnel et qui sont destinées à divertir l'utilisateur. Ex. Games. 6) Systèmes de modélisation et de simulation Ce sont des systèmes qui sont développés par des scientifiques et des ingénieurs pour modéliser des processus ou des situations physiques, qui comprennent de nombreux objets séparés et en interaction. 7) Systèmes de collecte de données Ce sont des systèmes de collecte de données à partir de leur environnement, en utilisant un ensemble de capteurs et d'envoyer ces données à d'autres systèmes de traitement. 8) Systèmes de systèmes Ce sont des systèmes qui sont composés d'un certain nombre d'autres systèmes logiciels. Remarque: les limites entre ces types de systèmes sont floues. Ex. Les systèmes de traitement par lots sont souvent utilisés avec des systèmes Web. Par exemple, dans une entreprise, les demandes de remboursement de frais de déplacement peuvent être soumises via une application Web, mais traitées dans une application de traitement par lots pour un paiement mensuel. Principes Fondamentaux de Génie Logiciel Certains principes fondamentaux s'appliquent à tous les types de système de logiciels, quelles que soient les techniques de développement utilisées: Les systèmes doivent être développés en utilisant un processus de développement réussi et compréhensible. L'organisation qui développe le logiciel doit planifier le processus de développement et avoir une idée claire de ce qui sera produit et du moment où il sera terminé. Bien entendu, différents processus sont utilisés pour différents types de logiciels. La fiabilité et la performance sont importantes pour tous les types de systèmes. Les 11 Chapitre 1: Introduction au Génie Logiciel logiciels doivent se comporter comme prévu, sans défaillance et doivent être disponibles pour une utilisation en cas de besoin. Son fonctionnement doit être sûr (savety) et, dans la mesure du possible, protégé contre les attaques externes (security). Le système doit fonctionner efficacement et ne doit pas gaspiller de ressources. Comprendre et gérer les spécifications logicielles et les exigences (ce que le logiciel doit faire) sont important. Vous devez savoir ce que les différents clients et utilisateurs du système attendent de celui-ci et gérer leurs attentes afin qu'un système utile puisse être livré dans les limites du budget et du calendrier. Vous devez utiliser le plus efficacement possible les ressources existantes. Cela signifie que, le cas échéant, vous devez réutiliser un logiciel déjà développé plutôt que d‟écrire un nouveau logiciel. Génie logiciel basé sur le Web Systèmes basés sur le Web sont des systèmes distribués complexes mais les principes fondamentaux du génie logiciel discutés précédemment s'appliquent aussi à eux car ils sont parmi les types de systèmes. Les idées fondamentales de l'ingénierie logicielle discutés s'appliquent au logiciel basé sur le Web de la même manière qu'ils s'appliquent à d'autres types de systèmes logiciels. Réutilisation des logiciels Réutilisation de logiciels est l'approche dominante pour la construction de systèmes basés sur le Web. Lors de la construction de ces systèmes, vous pensez à comment vous pouvez les assembler à partir de composants et de systèmes logiciels préexistants. Développement incrémental et agile Systèmes basés sur le Web devraient être élaborés et exécutés progressivement (par l‟incrémentation). Maintenant, Il est admis généralement qu'il est impossible de spécifier toutes les exigences de ces systèmes à l'avance. Systèmes orientés services (Service-oriented systems) Le logiciel peut être implémenté à l'aide d'une ingénierie logicielle axée sur les services, où les composants logiciels sont des services Web autonomes. Les interfaces riches Les technologies telles que AJAX et HTML5 permettent la création des interfaces riches au sein d'un navigateur Web, mais sont encore difficiles à utiliser. Les formulaires Web avec les scripts locaux sont plus communément utilisés. 4. Éthiques de l'ingénierie du logiciel Génie logiciel implique des responsabilités plus larges que la simple application des compétences techniques. Les ingénieurs logiciels doivent se comporter de façon responsable, honnête et éthique s‟ils veulent être respectés en tant que professionnels. Le comportement éthique est plus que simplement faire respecter la loi, mais consiste à la suite d'une série de principes qui sont moralement corrects. 12 Chapitre 1: Introduction au Génie Logiciel Les issues de responsabilité professionnelle Confidentialité Les ingénieurs devraient normalement respecter la confidentialité de leurs employeurs ou clients, indépendamment de si oui ou non un accord formel de confidentialité a été signé. Compétence Les ingénieurs ne devraient pas dénaturer leur niveau de compétence. Ils ne doivent pas accepter le travail qui est en dehors de leur compétence. Droits de propriété intellectuelle Les ingénieurs devraient être au courant des lois locales régissant l'utilisation de la propriété intellectuelle telle que les brevets, droits d'auteur, etc. Ils devraient faire attention à ce que la propriété intellectuelle des employeurs et des clients est protégé. Mauvaise utilisation de l'ordinateur Les ingénieurs logiciels ne doivent pas utiliser leurs compétences techniques pour abuser les ordinateurs d'autres personnes. Mauvaise utilisation de l'ordinateur varie de relativement trivial (jeu en jouant sur la machine de l'employeur, par exemple) au extrêmement graves (diffusion de virus). Code d'éthique ACM/IEEE Les sociétés professionnelles publient des codes de conduite définissant les normes de comportement attendues de leurs membres. Exemple de code: ACM/IEEE code d'éthique (voir le livre de sommerville 2015). 5. Étude de Cas Une pompe à insuline personnel Un système embarqué dans une pompe à insuline utilisée par les diabétiques pour maintenir le contrôle glycémique. Un système de gestion des patients des cas de santé mentale MentCare: Un système utilisé pour tenir les enregistrements des personnes recevant des soins pour des problèmes de santé mentale. Une station météorologique de désert (zones de nature sauvage) Un système de collecte de données qui recueille des données sur les conditions météorologiques dans les régions éloignées. iLearn: un environnement d'apprentissage numérique Un système de soutien à l'apprentissage dans les écoles 1) Système de contrôle de la pompe à insuline Collecte des données provenant d'un capteur de glucose sanguin et calcule la quantité d'insuline nécessaire pour être injecté. 13 Chapitre 1: Introduction au Génie Logiciel Calcul basé sur la vitesse de variation du taux de sucre dans le sang. Envoie des signaux à une micro-pompe pour délivrer la dose correcte d'insuline. Un système de sécurité critique parce que les faibles taux de glycémie peuvent entraîner un mauvais fonctionnement du cerveau, le coma et la mort; et des taux élevés de sucre dans le sang ont des conséquences à long terme, tels que des lésions oculaires et rénales. Exigences essentielles de haut niveau Le système doit être disponible pour fournir de l'insuline si nécessaire. Le système doit fonctionner de manière fiable et de fournir la bonne quantité d'insuline pour contrer le niveau actuel des taux de sucre sanguin. Le système doit donc être conçu et mis en œuvre pour s'assurer que le système répond toujours à ces exigences. Mentcare: Un système d'information sur les patients pour soins de santé mentale Un système d'information patient pour soutenir les soins de santé mentale est un système d'information médicale qui gère les informations sur les patients souffrant de problèmes de santé mentale et les traitements qu'ils ont reçus. La plupart des patients de santé mentale ne nécessitent pas de traitement de l'hôpital dédié, mais ont besoin d'assister à des cliniques spécialisées régulièrement où ils peuvent rencontrer un médecin qui a une connaissance approfondie de leurs problèmes. Pour aider les patients à y assister, ces cliniques n‟existent pas seulement dans les hôpitaux. Ils peuvent également être organisés dans les cabinets médicaux locales ou dans les centres communautaires. Le Mentcare est un système d'information qui est destiné à être utilisé dans les cliniques. Il fait usage d'une base de données centralisée de l'information du patient, mais a également été conçu pour fonctionner sur un PC, de sorte qu'il peut être consulté et utilisé à partir des sites qui n'ont pas de connectivité réseau sécurisée. 14 Chapitre 1: Introduction au Génie Logiciel Lorsque les systèmes locaux disposent d'un accès réseau sécurisé, ils utilisent l'information du patient dans la base de données, mais ils peuvent télécharger et utiliser des copies locales des dossiers des patients lorsqu'ils sont déconnectés. Buts de Mentcare: Pour générer des informations de gestion qui permettent aux gestionnaires de services de santé d‟évaluer le rendement par rapport aux objectifs locaux et gouvernementaux. De fournir au personnel médical de l'information opportune pour soutenir le traitement des patients. Principales caractéristiques du Mentcare La gestion de la prise en charge individuelle Les cliniciens peuvent créer des dossiers pour les patients, modifier les informations dans le système, voir l'historique du patient, etc. Le système prend en charge des résumés de données afin que les médecins peuvent apprendre rapidement les problèmes et les principaux traitements qui ont été prescrits. La surveillance du patient Le système surveille les dossiers des patients qui sont impliqués dans le traitement et émet des avertissements si les éventuels problèmes sont détectés. Rapports administratifs Le système génère des rapports de gestion mensuels indiquant le nombre de patients traités dans chaque clinique, le nombre de patients qui sont entrés et sortis du système de soins, le nombre de patients sélectionnés, les médicaments prescrits et leurs coûts, etc. Préoccupations Mentcare Vie privée Il est essentiel que l'information du patient est confidentielle et n'est jamais divulguée à personne en dehors de personnel médical autorisé et le patient lui-même. Sécurité Certaines maladies mentales provoquent les patients à devenir suicidaire ou un danger pour d'autres personnes. Chaque fois que possible, le système doit avertir le personnel médical sur les patients potentiellement suicidaires ou dangereux. Le système doit être disponible en cas de besoin par ailleurs, la sécurité peut être compromise et il peut être impossible de prescrire le bon médicament aux patients. 2) Station météorologique sauvage Le gouvernement d'un pays avec de grandes zones de nature sauvage décide de déployer plusieurs centaines de stations météorologiques dans les régions éloignées. Les stations météorologiques collectent des données à partir d'un ensemble d'instruments qui mesurent la température et la pression, le soleil, la pluie, la vitesse du vent et direction du vent. La station météorologique comprend un certain nombre d'instruments qui mesurent les paramètres météorologiques tels que la vitesse et direction du vent, les températures du sol et de l'air, la pression barométrique et les précipitations sur une période de 24 heures. Chacun 15 Chapitre 1: Introduction au Génie Logiciel de ces instruments est contrôlé par un système de logiciel qui effectue les lectures de paramètres périodiquement et gère les données collectées à partir des instruments. Système d'information météorologique Le système de la station météo Ceci est responsable de la collecte de données météorologiques, la réalisation d'un certain traitement de données initial et de la transmettre au système de gestion de données. La gestion de données et le système d'archivage Ce système recueille les données de toutes les stations météorologiques de nature sauvage, effectue le traitement des données et l'analyse et archive les données. Le système de maintenance de la station Ce système peut communiquer par satellite avec toutes les stations météorologiques de désert pour surveiller la santé de ces systèmes et de fournir des rapports de problèmes. Fonctionnalité supplémentaire du logiciel Surveiller les instruments, le matériel électrique et la communication et signaler les défauts du système de gestion. Gérer l'alimentation du système, veiller à ce que les batteries sont chargées à chaque fois que les conditions environnementales le permettent, mais aussi si les générateurs sont arrêtés à cause des conditions météorologiques potentiellement néfastes, tels que des vents forts. Soutenir la reconfiguration dynamique où des parties du logiciel sont remplacés par de nouvelles versions et où les instruments de sauvegarde sont commutés dans le système en cas de défaillance du système. 3) iLearn: Un environnement d'apprentissage numérique Un environnement d'apprentissage numérique est un cadre de travail (framework) dans lequel un ensemble d'outils d'apprentissage à usage général et spécialement conçus pour l'apprentissage peut être embarqués avec un ensemble d'applications adaptées aux besoins des apprenants utilisant le système. Les outils inclus dans chaque version de l'environnement sont choisis par les enseignants et les apprenants en fonction de leurs besoins spécifiques. Ceux-ci peuvent être des applications générales telles que des feuilles de calcul, des applications de gestion de l'apprentissage comme un environnement d'apprentissage virtuel (VLE) pour gérer la soumission et l'évaluation des devoirs, les jeux et les simulations. Systèmes orientés services Le système est un système axé sur les services avec tous les composants du système considérés comme un service remplaçable. Cela permet au système d'être mis à jour progressivement à mesure que de nouveaux services sont disponibles. 16 Chapitre 1: Introduction au Génie Logiciel Il permet également de configurer rapidement le système pour créer des versions de l'environnement pour différents groupes tels que les très jeunes enfants qui ne peuvent pas lire, les étudiants seniors, etc. Services d’iLearn Services d'utilité qui fournissent des fonctionnalités basiques indépendantes de l'application et qui peuvent être utilisées par d'autres services du système. Services d'application qui fournissent des applications spécifiques telles que les courriels, les conférences, le partage de photos, etc., et l'accès à des contenus éducatifs spécifiques tels que des films scientifiques ou des ressources historiques. Les services de configuration utilisés pour adapter l'environnement à un ensemble spécifique de services d'application et définir comment les services sont partagés entre les étudiants, les enseignants et leurs parents. Service iLearn d’integration Les services intégrés sont des services proposant une API (interface de programmation d'applications) et auxquels les autres services peuvent accéder par l'intermédiaire de cette API. La communication directe entre les services est donc possible. Les services indépendants sont des services auxquels on accède facilement via une interface de navigateur et qui fonctionnent indépendamment d'autres services. L'information ne peut être partagée qu'avec d'autres services grâce à des actions explicites de l'utilisateur telles que copier et coller; une ré-authentification peut être requise pour chaque service indépendant. 6. Points clés Les ingénieurs en logiciel ont des responsabilités à la profession d'ingénieur et de la société. Ils ne doivent pas simplement être concernés par les questions techniques. Les associations professionnelles publient des codes de conduite qui énoncent les normes de comportement attendues de leurs membres. Trois études de cas sont présentées pour les utilisés dans les futurs chapitres. Le génie logiciel est une discipline d'ingénierie qui s'occupe de tous les aspects de la production de logiciels. Les caractéristiques essentielles des logiciels sont la maintenabilité, la fiabilité et la sécurité, l'efficacité et l'acceptabilité. Les activités de haut niveau de spécification, de développement, de validation et d'évolution font partie de tous les processus de logiciels. Les notions fondamentales du génie logiciel sont universellement applicables à tous les types de développement des systèmes. Il y a beaucoup de différents types de systèmes et chacun requiert des outils et des techniques de génie logiciel appropriés pour leur développement. Les idées fondamentales du génie logiciel sont applicables à tous les types de système de logiciel. Les ingénieurs logiciels ont des responsabilités à l'égard de la profession d'ingénieur et de la société. Ils ne devraient pas seulement se préoccuper des problèmes techniques. Les sociétés professionnelles publient des codes de conduite définissant les normes de comportement attendues de leurs membres. 17 Chapitre 1: Introduction au Génie Logiciel 7. Exercices I) Quiz : 1: Quelle question ne concerne plus l'ingénieur logiciel moderne? a. Pourquoi le matériel informatique coûte très cher? b. Pourquoi le logiciel prend-il beaucoup de temps pour terminer? c. Pourquoi coûte tellement le développement d‟un logiciel? d. Pourquoi les erreurs de logiciel ne peuvent pas être retirées des produits avant la livraison? 2: Le logiciel est un produit qui peut être fabriqué en utilisant les mêmes technologies utilisées pour d'autres artefacts d'ingénierie. a. Vrai b. Faux 3: Le logiciel se détériore plutôt que s‟use parce que a. Le logiciel souffre d'une exposition à des environnements hostiles b. Les défauts sont plus susceptibles de se produire après que le logiciel a été souvent utilisé. c. Les demandes multiples de changement introduisent des erreurs dans les interactions des composants. d. Les parties de rechange des logiciels deviennent plus difficiles à commander. 4: Les WebApps sont un mélange de publication imprimée et de développement de logiciels, rendant leur développement hors du domaine de la pratique de l'ingénierie logicielle. a. Vrai b. Faux 5: Il n'y a pas de différences réelles entre le développement des WebApps et MobileApps. a. Vrai b. Faux 6: Dans sa forme la plus simple, un dispositif (device) informatique externe peut accéder aux services de données en nuage (cloud computing) à l'aide d'un navigateur Web. a. Vrai b. Faux 7: Le développement du logiciel de ligne de produits (Product Line Software) dépend de la réutilisation des composants logiciels existants dans leur ingénierie logicielle. a. Vrai b. Faux 8: La réutilisation des logiciels réduit le coût et augmente la valeur des systèmes dans lesquels ils sont incorporés. 18 Chapitre 1: Introduction au Génie Logiciel a. Vrai b. Faux 9: L'essence de la pratique de l'ingénierie logicielle pourrait être décrite comme comprendre le problème, planifier une solution, exécuter le plan et examiner le résultat pour plus de précision. a. Vrai b. Faux 10: En général, le logiciel ne réussit que si son comportement est conforme aux objectifs de ses concepteurs. a. Vrai b. Faux II) Questions de recherche : 1. Donner les différentes sortes de documents qui accompagnent un logiciel professionnel. 2. Quelle est la différence la plus importante entre le développement des produits logiciels génériques et sur mesure? Qu'est-ce que cela peut signifier dans la pratique pour les utilisateurs des produits logiciels génériques? 3. Quels sont les quatre attributs importants que tout logiciel professionnel devrait avoir? suggérer quatre autres attributs qui peuvent parfois être significatifs. 4. En donnant des exemples, définir la fiabilité et la performance des logiciels ? donner aussi leurs métriques ? 8. Solutions I) Quiz : 1:a 2:b 3:c 4:b 5:b 6:a 7:a 8:a 9:a 10:b II) Questions de recherche : 1. Le Logiciel professionnel est associé à une documentation pour informer le client des différentes étapes d‟installation et d‟utilisation et même des détails concernant le logiciel (le processus de développement) pour l‟aider à bien comprendre le fonctionnement de ce dernier. On distingue 3 sortes de documents : a) Documentation concernant la spécification, l‟architecture et la conception b) Documentation technique (code, API, Algos, scripts d‟installation et de configuration) c) Manuel d‟utilisation. 2. Il existe deux types de produits logiciels (génériques et sur mesure) La différence essentielle est que dans le développement de produits logiciels génériques, la spécification est possédée par le développeur du produit. Pour le développement de produits personnalisés (sur mesure), la spécification est détenue et contrôlée par le client. Les implications sont importantes - le développeur peut rapidement décider de changer la spécification en réponse à un changement externe (par exemple un produit concurrent), mais, lorsque le client possède les spécifications, les changements doivent 19 Chapitre 1: Introduction au Génie Logiciel être négociés entre le client et le développeur et peuvent avoir des conséquences contractuelles. Pour les utilisateurs de produits génériques, cela signifie qu'ils n'ont aucun contrôle sur la spécification de logiciels et ne peuvent donc pas contrôler l'évolution du produit. Le développeur peut décider d'inclure/exclure des fonctionnalités et changer l'interface utilisateur. Cela pourrait avoir des implications pour les processus métiers de l'utilisateur et ajouter des coûts de formation supplémentaires lorsque de nouvelles versions du système sont installées. Il peut également limiter la flexibilité du client à changer leurs propres processus métiers. 3. Les quatre caractéristiques standards sont : La maintenabilité (maintainability), la fiabilité (dependability or reliability), la performance ou l‟efficacité (performance), et la utilisabilité (facile à utiliser, convivialité) ou acceptabilité (usability). D'autres attributs peuvent être inclus: - La réutilisabilité (reusability) : peut être utilisé dans d‟autres applications, - la distribuabilité (distributability) : peut être distribué sur un réseau ou sur un ensemble de processeurs, - la portabilité (portability) : peut fonctionner sur des plateformes multiples, et - l'interopérabilité (interoperability) : peut travailler avec une large gamme de systèmes logiciels. 4. La fiabilité et la performance des logiciels : a) Fiabilité : Correction, justesse, conformité : le logiciel est conforme à ses spécifications, les résultats sont ceux attendus. Robustesse, sureté : le logiciel fonctionne raisonnablement en toutes circonstances, rien de catastrophique ne peut survenir, même en dehors des conditions d‟utilisation prévues - Quelques métriques: MTBF : Mean Time Between Failures Disponibilité (pourcentatge du temps pendant lequel le système est utilisable) et Taux d‟erreur (nombre d‟erreurs par KLOC) b) Performance : Les logiciels doivent satisfaire aux contraintes de temps d‟exécution Quelques métriques: Temps d‟exécution. 20 Chapitre Processus de II Développement Logiciel Objectifs comprendre les concepts des processus logiciels et les modèles de processus logiciel; Les trois modèles de processus logiciels génériques et leurs utilisations; connaître les activités fondamentales du processus de l'ingénierie des exigences, le développement des logiciels, les tests, et l’évolution; comprendre pourquoi les processus devraient être organisés pour faire face aux changements dans les exigences et la conception des logiciels; comprendre comment améliorer les processus de développement. Themes couverts Modèles de processus logiciel Activités du processus Faire face au changement Amélioration des processus 21 Chapitre 2: Processus de Développement Logiciel 1. Introduction Le processus logiciel Un processus logiciel est un ensemble structuré d'activités nécessaires pour développer un système logiciel. De nombreux processus de logiciels, mais tous impliquent: Spécification: définir ce que le système doit faire; Conception et mise en œuvre: la définition de l'organisation du système et la mise en œuvre du système; Validation: vérifier si le système fait ce que le client veut; Evolution: changer le système en réponse à l'évolution des besoins des clients. Un modèle de processus logiciel est une représentation abstraite d'un processus. Il présente une description d'un processus d'une certaine perspective particulière. Descriptions de processus logiciel Lorsque nous décrivons et discutons les processus, nous parlons généralement sur les activités de ces processus tels que la spécification d'un modèle de données, la conception d'une interface utilisateur, etc., et l'ordre de ces activités. Descriptions de processus peuvent également inclure: Produits, qui sont les résultats d'une activité de processus; Rôles, qui reflètent les responsabilités des personnes impliquées dans le processus; Pré- et post-conditions, qui sont des déclarations qui sont vraies avant et après une activité de processus a été adoptée ou un produit fabriqué. Les processus planifies et agiles : Deux catégories (approches) pour les processus de développement des logiciels: 22 Chapitre 2: Processus de Développement Logiciel Processus pilotés par plan (planifié): sont des processus où toutes les activités du processus sont planifiées à l'avance et les progrès sont mesurés sur ce plan. Processus agiles, dont la planification est progressive et il est plus facile de modifier le processus afin de refléter l'évolution des besoins des clients. Dans la pratique, les processus les plus pratiques comprennent des éléments des deux approches planifiée et agiles. Il n'y a aucun processus logiciel correct ou incorrect. 2. Modèles d’un processus logiciel Les modèles de processus génériques* (parfois appelés «processus paradigmes») sont: Le modèle en cascade (Royce, 1970) : modèle piloté par plan (Plan-driven), phases de spécification et de développement sont distinctes. Le développement incrémental : Les phases de Spécification, développement et validation sont entrelacés. Peut-être agile ou planifié. Intégration et configuration (réutilisation des composants) : Le système est assemblé à partir des composants configurables. Peut-être agile ou planifié. Dans la pratique, la plupart des grands systèmes sont développés en utilisant un processus qui intègre des éléments de tous ces modèles. 1) Le modèle en cascade (The waterfall model) Phases du modèle en cascade Il y a des phases séparées identifiés dans le modèle en cascade: Définition et analyse des besoins Conception logicielle du système Mise en œuvre et test unitaire Intégration et le test du système Exploitation et maintenance 23 Chapitre 2: Processus de Développement Logiciel Le principal inconvénient du modèle en cascade est la difficulté à accommoder le changement après que le processus est en cours. En principe, une phase doit être terminée avant de passer à la phase suivante. Problèmes du modèle en cascade Partitionnement inflexible du projet en étapes distinctes, il est difficile de répondre à l'évolution des besoins des clients. Par conséquent, ce modèle ne convient que si les exigences sont bien comprises et les changements seront assez limitées au cours du processus de conception. Peu de systèmes d'entreprises ont des besoins stables. Le modèle en cascade est surtout utilisé pour les grands projets d'ingénierie des systèmes où un système est développé sur plusieurs sites. Dans ces circonstances, la nature du modèle piloté par plan du modèle en cascade permet de coordonner le travail. 2) Le développement incrémental Avantages du développement incrémental Le coût d'accueillir des exigences changeantes des clients est réduit. La quantité de documentation et d'analyse qui doit être refaite est beaucoup moins que ce qui est requis par le modèle en cascade. Il est plus facile d'obtenir les commentaires des clients sur le travail de développement qui a été fait. Les clients peuvent faire des commentaires sur les démonstrations du logiciel et voir ce qui a été mis en œuvre. Plus de livraison rapide et déploiement de logiciels utiles au client est possible. Les clients sont en mesure d'utiliser et gagner de la valeur à partir du logiciel plus tôt que ce qui est possible avec un processus en cascade. 24 Chapitre 2: Processus de Développement Logiciel Problèmes de développement incrémental Le processus n‟est pas visible. Les gestionnaires ont besoin des produits régulièrement livrables pour mesurer le progrès. Si les systèmes sont développés rapidement, il est pas rentable de produire des documents qui reflètent toutes les versions du système. La structure du système tend à se dégrader que les nouvelles augmentations sont ajoutées. En plus du temps et de l'argent dépensé sur le reconstruction pour améliorer le logiciel, le changement régulier tend à corrompre sa structure. L'intégration de nouveaux changements des logiciels devient de plus en plus difficile et coûteux. 3) Intégration et configuration Basé sur la réutilisation systématique où les systèmes sont intégrés à partir de composants existants ou les systèmes COTS (Commercial-Off-The-Shelf). Les éléments réutilisés peuvent être configurés pour adapter leur comportement et leur fonctionnalité aux exigences de l'utilisateur. La réutilisation est maintenant l'approche standard pour la construction de nombreux types de système d'entreprise. Étapes clés du processus : Spécification des exigences Découverte et évaluation des logiciels Raffinement des exigences Configuration du système d'application Adaptation et intégration des composants Les types des composants logiciels Systèmes autonomes de logiciels (COTS) qui sont configurés pour une utilisation dans un environnement particulier. Collections d'objets qui sont développées comme un paquet à être intégré dans un Framework de composants tels que.NET ou J2EE. Services Web qui sont développés selon les normes de service (l‟architecture SOA) et qui sont disponibles pour l'invocation à distance. 25 Chapitre 2: Processus de Développement Logiciel Avantages et désavantages Réduction des coûts et des risques, car moins de logiciels sont développés à partir de zéro. Livraison et déploiement plus rapide du système. Mais, les compromis entre les exigences sont inévitables, de sorte que le système ne répond pas aux besoins réels des utilisateurs. Perte de contrôle sur l'évolution des éléments du système réutilisés. Activité: Classer les processus de développement des logiciels suivants selon les modèles étudiés: Le modèle en spirale de Boehm (1988) Le modèle RUP (Rational Unified Process) Le cycle en cascade Le cycle en V SCRUM XP (eXtreme Programming) 3. Les activités d’un processus Les processus de développement des logiciels sont des séquences d'activités techniques, collaboratives et de gestion avec l'objectif global de la spécification, la conception, la mise en œuvre (implémentation) et le test (validation et vérification) d‟un système de logiciel. Ces activités fondamentales du processus sont organisées différemment dans les différents processus de développement. Dans le modèle en cascade, elles sont organisées en séquence, alors que dans le développement incrémental, elles sont entrelacées. a) Spécification du logiciel Le processus d‟établissement des services nécessaires et les contraintes sur les opérations du système et le développement. Processus d'ingénierie des exigences Élicitation et analyse des exigences Qu‟est-ce que les intervenants du système exigent ou attendent du système? Spécification des exigences Définir les besoins en détail Validation des exigences Vérification de la validité des exigences b) Conception et implémentation du logiciel Le processus de conversion de la spécification du système en un système exécutable. La conception des logiciels 26 Chapitre 2: Processus de Développement Logiciel Conception d'une structure de logiciel qui réalise la spécification; Implémentation Traduire cette structure dans un programme exécutable; Les activités de conception et d‟implémentation sont étroitement liés et peuvent être entrelacées. Les activités de conception La création architecturale, où vous identifiez la structure globale du système, les composants principaux (parfois appelés sous-systèmes ou modules), leurs relations et la façon dont ils sont distribués. Conception de base de données, où vous concevez les structures de données du système et la façon dont ceux-ci sont à être représenté dans une base de données. Conception de l'interface, où vous définissez les interfaces entre les composants du système. Choix et conception de composants, où vous recherchez des composants réutilisables. S‟il n‟est pas disponible, vous concevez comment cela va fonctionner. Implémentation du Système Le logiciel est mis en œuvre soit en développant un programme ou plusieurs programmes, soit en configurant un système d'application. La conception et l‟implémentation sont des activités entrelacées pour la plupart des types de systèmes logiciels. La programmation est une activité individuelle sans processus standard. Le débogage est l'activité consistant à trouver des défauts de programme et à corriger ces défauts. c) Validation et vérification du logiciel Vérification et validation (V & V) est destiné à montrer que le système est conforme à sa spécification et répond aux exigences de la clientèle du système. Implique la vérification et la revue des processus et le test du système. Test du système comprend l'exécution du système avec des cas de test qui sont dérivés à partir de la spécification des données réelles à traiter par le système. Le test est l'activité la plus couramment utilisée pour V & V. Niveaux du test Test du composant: Les différents composants sont testés de façon indépendante; Les composants peuvent être des fonctions ou des objets ou des groupes cohérents de ces entités. 27 Chapitre 2: Processus de Développement Logiciel Test du système: Test du système dans son ensemble. Le test des propriétés émergentes est particulièrement important. Test d'acceptation: Test avec les données du client pour vérifier que le système répond aux besoins du client. d) Évolution du logiciel Le logiciel est, par nature, flexible et peut changer. Comme les besoins évoluent à travers l'évolution des circonstances de l‟entreprise (business), le logiciel qui supporte l'entreprise doit également évoluer et changer. Bien qu'il y ait une délimitation entre le développement et l'évolution (Maintenance), cela est de plus en plus sans importance puisque de moins en moins de systèmes sont complètement nouveaux. 4. Faire face au changement Le changement est inévitable dans tous les grands projets de logiciels. Changements d‟entreprise (business) mènent aux exigences nouvelles et modifiées du système. Les nouvelles technologies ouvrent de nouvelles possibilités pour améliorer l‟implémentation. Modification des plates-formes nécessitent des changements d'application. Le changement conduit à retravailler si les coûts du changement comprennent à la fois des retraitements (par exemple ré-analyse des exigences) ainsi que les coûts de l‟implémentation de nouvelles fonctionnalités. Réduire les coûts de la reconstruction Anticipation du changement, où le processus de logiciel comprend des activités qui peuvent anticiper des changements possibles avant une significative action de retravailler(reconstruire) est nécessaire. Par exemple, un prototype de système peut être développé pour montrer quelques caractéristiques principales du système aux clients. Tolérance au changement, où le processus est conçu de sorte que les changements peuvent être accommodés à un coût relativement faible. Ceci implique normalement une certaine forme de développement incrémental. Les modifications proposées peuvent être implémentées dans des incréments qui ne sont pas encore développés. Si cela est impossible, alors un seul incrément (une petite partie du système) peut être modifiée pour incorporer le changement. Faire face aux exigences changeantes Le prototypage du système, où une version du système ou une partie du système est développée rapidement pour vérifier les besoins du client et la faisabilité des décisions de conception. Cette approche appuie l'anticipation des changements. 28 Chapitre 2: Processus de Développement Logiciel Livraison incrémentale, où les incréments du système sont livrés au client pour commentaires et expérimentations. Cela prend en charge à la fois l„anticipation des changements et la tolérance aux changements. Prototypage de logiciels Un prototype est une version initiale d'un système utilisé pour démontrer les concepts et d‟expérimenter les options de conception. Un prototype peut être utilisé dans: Le processus d'ingénierie des exigences pour aider à l‟élicitation et la validation des exigences; Les processus de conception pour explorer les options et développer une conception de l'interface d‟utilisateur (UI); Le processus de test pour exécuter des tests de type back-to-back. Avantages du prototypage Amélioration de la facilité d'utilisation du système. Une correspondance plus étroite aux besoins réels des utilisateurs. Amélioration de la qualité de conception. Amélioration de la maintenabilité. Réduire l‟effort du développement Le processus de développement d'un prototype Le développement du prototype Peut être basé sur des langages de prototypage rapides ou outils. Peut impliquer la fonctionnalité de sortir Prototype devrait se concentrer sur les parties de produits qui ne sont pas bien comprises; La vérification des erreurs et la récupération ne peuvent pas être incluses dans le prototype; Concentrez-vous sur les exigences fonctionnelles plutôt que non-fonctionnelles tels que la fiabilité et la sécurité Livraison incrémentale Plutôt que de livrer le système en une seule livraison, le développement et la livraison est décomposée en incrémentations, et avec chaque incrémentation, une partie de la fonctionnalité requise est livrée. 29 Chapitre 2: Processus de Développement Logiciel Les besoins des utilisateurs sont prioritaires et les plus hautes exigences prioritaires sont incluses dans les premières incrémentations. Une fois le développent d'un incrément est lancé, les exigences sont gelés alors que les exigences des incrémentations ultérieures peuvent continuer évoluer. Développement et livraison incrémentaux Développement incrémental Développer le système par incréments et évaluer chaque incrément avant de procéder à l'élaboration de l'incrément suivant; Approche normale utilisée dans les méthodes agiles; Évaluation faite par procuration utilisateur/client. Livraison incrémentale Déployer une incrémentation pour être utilisée par les utilisateurs finaux; Une évaluation plus réaliste sur l'utilisation pratique des logiciels; Difficile à implémenter pour les systèmes de remplacement parce que les incréments ont moins de fonctionnalité que le système à remplacer. Livraison incrémentale Avantages de la livraison incrémentale La valeur du client peut être fournie avec chaque incrément afin que la fonctionnalité du système soit disponible plus tôt. Les premiers incréments agissent comme un prototype pour aider à éliciter les exigences pour des incréments ultérieurs. Risque plus faible d‟échec global du projet Les services du système de priorité élevée ont la tendance de recevoir la plupart des tests. Problèmes de la livraison incrémentale La plupart des systèmes exigent un ensemble d‟installations de base qui sont utilisés par les différentes parties du système. Comme les exigences ne sont pas définies en détail jusqu'à un incrément soit implémenté, il peut être difficile d'identifier les installations communes qui sont nécessaires par tous les incréments. 30 Chapitre 2: Processus de Développement Logiciel L'essence des processus incrémentaux est que la spécification est développée en conjonction avec le logiciel. Cependant, cela est contraire au modèle d'approvisionnement de nombreuses organisations, où la spécification complète du système fait partie du contrat de développement du système. 5. Amélioration des processus De nombreuses entreprises de logiciels se sont tournées vers l'amélioration des processus logiciels pour améliorer la qualité de leurs logiciels, réduire les coûts ou accélérer leurs processus de développement. L'amélioration des processus signifie comprendre les processus existants et modifier ces processus pour accroître la qualité des produits et/ou réduire les coûts et le temps de développement. Approches d'amélioration L'approche de la maturité du processus, qui met l'accent sur le processus et l'amélioration de la gestion des projets et l'introduction de bonnes pratiques d'ingénierie logicielle. Le niveau de maturité des processus reflète dans quelle mesure une bonne technique et pratique de gestion ont été adoptées dans les processus de développement des logiciels organisationnels. L'approche agile, axée sur le développement itératif et la réduction des frais généraux dans le processus logiciel. Les principales caractéristiques des méthodes agiles sont la livraison rapide de la fonctionnalité et la réactivité à l'évolution des besoins des clients. Le cycle d'amélioration des processus Activités d'amélioration des processus Mesure de processus Vous mesurez un ou plusieurs attributs du processus logiciel ou du produit. Ces mesures constituent une base de référence qui vous aide à décider si les améliorations de processus ont été efficaces. 31 Chapitre 2: Processus de Développement Logiciel L'analyse des processus Le processus actuel est évalué et les faiblesses des processus et les goulots d'étranglement sont identifiés. Les modèles de processus (parfois appelés cartes de processus) qui décrivent le processus peuvent être développés. Changement de processus Des changements de processus sont proposés pour répondre à certaines des faiblesses du processus identifiées. Ceux-ci sont introduits et le cycle reprend pour recueillir des données sur l'efficacité des changements. 6. Points clés Les processus de développement des logiciels sont les activités impliquées dans la production d'un système de logiciel. Modèles de processus logiciel sont des représentations abstraites de ces processus. Modèles génériques de processus décrivent l'organisation des processus logiciels. Des exemples de ces modèles génériques comprennent le modèle en cascade, le développement incrémental, et le développement intégration/configuration. L„Ingénierie des exigences est le processus d'élaboration de la spécification du logiciel. La Conception et la mise en œuvre des processus sont concernés par la transformation de la spécification des exigences dans un système de logiciel exécutable. La Validation du logiciel est le processus de vérification que le système est conforme à sa spécification et qu'il répond aux besoins réels des utilisateurs du système. L‟Évolution du logiciel a lieu lorsque vous changez les systèmes logiciels existants afin de répondre aux nouvelles exigences. Le logiciel doit évoluer pour rester utile. Les processus devraient inclure des activités telles que le prototypage et la livraison incrémentale (progressive) pour faire face aux changements. Les processus peuvent être structurés pour le développement et l'exécution itérative de sorte que des changements peuvent être effectués sans perturber le système dans son ensemble. Les principales approches de l'amélioration des processus sont les approches agiles, axées sur la réduction des frais généraux des processus et les approches basées sur la maturité, basées sur une meilleure gestion des processus et l'utilisation de bonnes pratiques d'ingénierie logicielle. 7. Exercices I) Quiz : 1 : Le modèle de développement des logiciels en cascade est a. Une approche raisonnable lorsque les exigences sont bien définies. b. Une bonne approche lorsqu'un programme de travail est requis rapidement. c. La meilleure approche à utiliser pour les projets avec de grandes équipes de développement. d. Un modèle ancien qui est rarement utilisé. 32 Chapitre 2: Processus de Développement Logiciel 2: Le modèle incrémentiel de développement de logiciel est a. Une approche raisonnable lorsque les exigences sont bien définies. b. Une bonne approche lorsqu'un produit de base est exigé rapidement. c. La meilleure approche à utiliser pour les projets avec de grandes équipes de développement. d. Un modèle révolutionnaire qui n'est pas utilisé pour les produits commerciaux. 3: Modèles de processus évolutifs a. Ils sont de nature itérative. b. Peut facilement répondre aux changements des exigences du produit. c. Ne produisez généralement pas de systèmes jetables. d. Tout ce qui précède. 4: Le modèle de prototypage de développement des logiciels est a. Une approche raisonnable lorsque les exigences sont bien définies. b. Une approche utile lorsqu'un client ne peut pas définir clairement les exigences. c. La meilleure approche à utiliser pour les projets avec de grandes équipes de développement. d. Un modèle risqué qui produit rarement un produit significatif. 5: Le modèle en spirale de développement de logiciels a. Se termine par la livraison du produit logiciel. b. Est plus chaotique que le modèle incrémental. c. Comprend l'évaluation des risques du projet au cours de chaque itération. d. Tout ce qui précède. 6: Le modèle de développement concurrent est a. Un autre nom pour l'ingénierie concurrente. b. Définit les événements qui déclenchent les transitions d'état de l'activité d'ingénierie. c. Utilisé uniquement pour le développement de systèmes parallèles ou distribués. d. Utilisé chaque fois qu'un grand nombre de demandes de modification sont anticipées. e. a et b 7: Le modèle de développement à base de composants est a. Seulement approprié pour la conception du matériel informatique. b. N‟est pas capable de supporter le développement de composants réutilisables. c. Dépendant de l‟approche orientée objet. d. N‟est pas rentable selon les mesures logicielles quantifiables connues. 8: Le modèle des méthodes formelles de développement de logiciels utilise des méthodes mathématiques pour a. Définir la spécification des systèmes informatiques. b. Développer des systèmes informatiques sans défaut. c. Vérifiez l'exactitude des systèmes informatiques. d. Tout ce qui précède. 33 Chapitre 2: Processus de Développement Logiciel 9: Laquelle parmi les suivantes n‟est pas une phase du modèle RUP (Rational Unified Process)? a. Phase de création b. Phase d'élaboration c. Phase de construction d. Phase de validation 10: Lequel de ces éléments n'est pas une caractéristique du Processus Logiciel Personnel? (PSP : Personal Software Process)? a. Met l'accent sur la mesure personnelle du produit de travail. b. Le praticien exige une supervision minutieuse par le chef de projet. c. Le praticien individuel est responsable de l'estimation et de la planification. d. Le praticien a l‟habilité de contrôler la qualité des produits logiciels. 11: Quel est l'objectif du Processus Logiciel d'Equipe (TSP :Team Software Process)? a. Accélérer l'amélioration des processus logiciels b. Permettre une meilleure gestion de temps par des professionnels hautement qualifiés c. Créer des équipes de logiciels auto-dirigés d. Montrer aux gestionnaires comment réduire les coûts et maintenir la qualité e. b et c 12: Les outils technologiques des processus permettent aux entreprises de logiciels de compresser les plannings en ignorant les activités sans importance. a. Vrai b. Faux 13: Il est généralement admis que l'on ne peut pas avoir de processus logiciels faibles et créer des produits finis de haute qualité. a. Vrai b. Faux II) Questions de recherche : 1. Donner les raisons de votre réponse en fonction du type de système en cours de développement, proposer le modèle de processus logiciel générique le plus appropriée qui pourrait être utilisé comme une base pour la gestion de développement des systèmes suivants: Un système pour contrôler le freinage anti-blocage (Anti-lock Braking System) dans une voiture. Un système de réalité virtuelle pour soutenir la maintenance des logiciels. Un système de comptabilité de l'université qui remplace un système existant. Un système interactif de planification de voyage qui aide les utilisateurs à planifier leurs voyages avec le plus bas impact sur l'environnement. 34 Chapitre 2: Processus de Développement Logiciel 2. Expliquer pourquoi le développement incrémental est l'approche la plus efficace pour le développement des systèmes logiciels de commerce. Pourquoi ce modèle est moins approprié à l‟ingénierie des systèmes de temps réel? 3. Considérons le modèle de processus basé sur l‟intégration et la configuration montré dans Chapitre 2. Expliquer pourquoi il est essentiel d‟avoir deux activités séparées des exigences dans le processus. 4. Proposer pourquoi il est important de faire une distinction entre le développement des exigences de l'utilisateur et le développement des exigences du système dans le processus de l'ingénierie des exigences. 5. Décrire les principales activités du processus de conception de logiciels et les sorties (résultats) de ces activités. En utilisant un diagramme, montrer les relations possibles entre les sorties de ces activités. 6. Expliquer pourquoi le changement est inévitable dans systèmes complexes et donner des exemples (en dehors de prototypage et la livraison incrémentielle) des activités de processus logiciel qui aident à prédire les changements et rendre le logiciel étant développé plus résistant aux changements. 7. Expliquer pourquoi les systèmes développés comme prototypes ne devraient, normalement, pas être utilisés comme une production de systèmes. 8. Expliquer pourquoi le modèle en spirale de Boehm est un modèle adaptable qui peut soutenir à la fois les activités de l‟évitement du changement et de la tolérance au changement. Dans la pratique, ce modèle n'a pas été largement utilisé. Proposer pourquoi cela pourrait être le cas. 8. Solutions I) Quiz : 1:a 2:b 3:d 4:b 5:c 6:e 7:c 8:d 9:d 10:b 11:e 12:b 13:a II) Questions de recherche : 1) Les modèles de processus logiciel générique le plus appropriés pour les systèmes suivants: a. Système de freinage antiblocage : Ceci est un système de sécurité critique (safety-critical system) qui exige beaucoup d'analyse à l'avance avant la mise en œuvre. Il a certainement besoin d'une approche de développement axée sur plan avec des exigences soigneusement analysés. Un modèle en cascade est donc le processus le plus approprié à utiliser, peut-être avec des transformations formelles entre les différentes phases de développement. b. Système de réalité virtuelle : Ceci est un système où les besoins vont changer et il y aura des composants d'interface utilisateur (UI or GUI) étendus. Le développement incrémental avec, peut-être, certain prototypage de l'interface utilisateur (UI) est le modèle le plus approprié. Un processus agile peut être utilisé. c. Système de comptabilité de l’université : Ceci est un système dont les exigences sont très tôt connues et qui sera utilisé en collaboration avec beaucoup d'autres systèmes tels que le système de gestion des subventions de recherche. Par conséquent, une approche fondée sur la réutilisation (intégration et configuration) est susceptible d'être approprié pour cela. 35 Chapitre 2: Processus de Développement Logiciel d. Système Interactif de