introduction au gl mustapha el feddi [email protected]
TRANSCRIPT
Plan des cours
Positionnement du cours GL
Introduction au GL
Différentes étapes du processus de développement
Introduction au GL
Positionnement du cours GL
Donner une définition Logiciel : Programming in the small
Programmation individuelle sur des petits problèmes
Algorithmique, langages de programmation, structures de données, et un peu de méthodologie
Les différentes catégories de logiciel
Sur mesure (custom) Pour un client spécifique
Générique (generic) Vendu sur le marché
• un tableur (spreadsheet), un outil de base de donnée (database)
• un outil de traitement de texte (word processor)• …
Embarqués (embedded) exécutent dans du matériel électronique isolé
machine à laver, télévision, lecteur DVD, téléphone mobile,magnétoscope, four à micro-ondes, réfrigérateur, joueur
MP3, ... Difficile à modifier
Les différentes catégories de logiciel Logiciel à temps réel (real-time)
systèmes de contrôle et de surveillance manipulent et contrôlent le matériel technique Réaction immédiate requise Environnement souvent très contraignant
Logiciel de traitement de données (data processing) Ils stockent, recherchent, transforment et présentent
l'information aux utilisateurs Grandes quantités de données avec des corrélations
complexes, enregistrées dans les bases de données Largement utilisés en administration des affaires Fiabilité des résultats Sécurité dans l’accès aux données
Quelques fois les 2 aspects sont présents dans un logiciel
Les différentes catégories du logiciel
Les systèmes distribués synchronisent la transmission, assurent l’intégrité des
données et la sécurité, ... Technologies utilisées
CORBA, DOM/DCOM, SOAP, EJB, …
Les systèmes de matériel Systèmes d'exploitation, exécutions de matériel de
bas niveau
Les systèmes d'entreprisedécrivent les buts, les ressources, les règles et letravail réel dans une entreprise
La nature du logiciel Le logiciel est facile à reproduire
Tout le coût se trouve dans son développementPour d’autres produits, la fabrication est souvent le
processus le plus coûteux
Le logiciel est intangibleIl est difficile d'estimer l’effort de développement
Le processus de développement est difficile à automatiserL’industrie du logiciel exige beaucoup de main d’oeuvre
La nature du logiciel Même des informaticiens peu qualifié peuvent
arriver à bricoler quelque chose qui semble fonctionner La qualité d’un logiciel n’est pas apparente
Un logiciel semble facile à modifier La tentation est forte d’effectuer des changements
rapides sans vraiment en mesurer la portée
Un logiciel ne s’use pas Il se détériore à mesure que des changements sont
effectués (software aging) en raison de l’introduction d’erreurs ou par une complexification indue
La nature du logiciel
Raisons pour lesquelles le logiciel vieillit maintenance (e.g., bug fixes) érosion architecturale inflexibilité dès le début documentation insuffisante ou inconsistante duplication de code manque de modularité complexité croissante ...
La nature du logiciel Beaucoup de logiciels sont mal conçus et se
détériorent rapidement
La demande pour du logiciel est toujours croissante
Le logiciel se trouve en perpétuel "état de crise "
L’ingénierie du logiciel est une nécessité processus systématique au lieu de bricolage
Un peu d’histoire …
Années 50 et 60 : programmation empirique production "artisanale" de logiciels scientifiques royaume des "codeurs" et les "grands gourous"
Fin des années 60 : la "crise du logiciel" difficulté d'écrire de grands programmes difficulté de les utiliser, difficulté de les faire
évoluer de nombreux projets échouent
Quelques statistiques
Étude du gouvernement américain en 1979
Payés mais jamais livrés $3.2M 45% Livrés mais jamais utilisés $2.0M 30% Abandonnés ou refaits $1.3M 20% Utilisés après modification $0.2M 3% Utilisés tel quel $0.1M 2%
Échecs: Pannes logicielles La sonde vers Vénus s'est perdue dans l'espace.
Cause : une erreur de programme FORTRAN, virgule remplacée par un point.
Au passage de l'équateur un F16 se retrouve sur le dos.Cause : changement de signe de la latitude mal pris en compte.
La lutte contre le bogue de l'an 2000 a coûté à la France 500 milliards de francs. Cause : la donnée "année" était codée sur deux
caractères pour gagner un peu de place.
Approches Méthodologiques
Crise de l'industrie du logiciel à la fin des années 60 : augmentation des coûts difficultés d'évolution non fiabilité non respect des spécifications non respect des délais
Importance d'approches méthodologiques
Apparition et développement du Génie Logiciel
Génie Logiciel: définition Génie Logiciel : Programming in the
large Travail en équipe sur des projets complexes et
longs Spécifications de départ « floues » Dialogue avec les utilisateurs/clients : discours
métier Organisation, planification, gestion du risque
Génie Logiciel: définition
Définition du génie logiciel (GL):Domaine des ‘sciences de l’ingénieur’ dont la
finalité est: la conception la fabrication la maintenance de systèmes logiciels complexes, sûrs et de
qualité (‘Software Engineering’ en anglais)
Génie Logiciel: Objectifs
Objectifs du génie logiciel: CQFDLe GL se préoccupe des procédés de fabrication des
logiciels de façon à satisfaire les 4 critères suivants:
Le système qui est fabriqué répond aux besoins des utilisateurs (correction fonctionnelle).
Génie Logiciel: Objectifs La qualité correspond au contrat de service initial. La
qualité du logiciel est une notion multiforme qui recouvre :
la validité : aptitude d'un logiciel à réaliser exactement les tâches définies par sa spécification
la fiabilité : aptitude d'un logiciel à assurer de manière continue le service attendu
la robustesse : aptitude d'un logiciel à fonctionner même dans des conditions anormales
l’extensibilité : facilité d'adaptation d'un logiciel aux changements de spécification
Génie Logiciel: Objectifs la réutilisation : aptitude d'un logiciel à être
réutilisé en tout ou partie
la compatibilité : aptitude des logiciels à pouvoir être combinés les uns aux autres
l’efficacité : aptitude d'un logiciel à bien utiliser les ressources matérielles telles la mémoire, la puissance de l’U.C., etc.
la portabilité : facilité à être porté sur de nouveaux environnements matériels et/ou logiciels
Génie Logiciel: Objectifs
la traçabilité : capacité à identifier et/ou suivre un élément du cahier des charges lié à un composant d'un logiciel
la vérifiabilité : facilité de préparation des procédures de recette et de certification
l’intégrité : aptitude d'un logiciel à protéger ses différents composants conte des accès ou des modifications non autorisés
la facilité d'utilisation, d’entretien, etc
Génie Logiciel: Objectifs
Les coûts restent dans les limites prévues au départ.
Les délais restent dans les limites prévues au départ.
Règle du CQFD : Coût Qualité Fonctionnalités Délai
Génie Logiciel: Les 7 principes fondamentaux
Rigueur Séparation des problèmes Modularité Abstraction Anticipation du changement Généricité Construction incrémentale
Rigueur
Le niveau maximum de rigueur est la formalité: descriptions et validations s’appuient sur des notations et lois mathématiques.
Il n’est pas possible d’être formel tout le temps : il faut bien construire la première description formelle à partir de connaissances non formalisées ! Mais dans certaines circonstances les techniques formelles sont utiles.
Séparation des problèmesdiviser pour régner : considérer séparément différents aspects d’un
problème afin d’en maîtriser la complexité
séparation dans le temps (les différents aspects sont abordés successivement, voir cycle de vie du logiciel)
séparation des qualités que l’on cherche à optimiser à un stade donné (ex : assurer la correction avant de se préoccuper de l’efficacité)
Séparations des ‘vues’ que l’on peut avoir d’un système (ex : se concentrer sur l’aspect ‘flots de données’ avant de considérer l’aspect ordonnancement des opérations ou ‘flot de contrôle’)
Séparation du système en parties (un noyau, des extensions, …)
...
Modularité Un système est modulaire s’il est composé de sous-
systèmes plus simples, ou modules
La modularité permet de considérer séparément le contenu du module et les relations entre modules. Elle facilite également la réutilisation de composants biens délimités
Un bon découpage modulaire se caractérise par une forte cohésion interne des modules (ex : fonctionnelle, temporelle, logique, ...) et un faible couplage entre les modules (relations inter modulaires en nombre limité et clairement décrites)
Programmation par composants
Abstraction
L’abstraction consiste à ne considérer que les aspects jugés importants d’un système à un moment donné, en faisant abstraction des autres aspects
L’abstraction permet une meilleure maîtrise de la complexité
Anticipation du changementUn logiciel est presque toujours soumis à des
changements continuels (corrections d'imperfections et évolutions en fonctions des besoins qui changent)
Ceci requiert des efforts particuliers pour prévoir, faciliter et gérer ces évolutions inévitables.
Il faut par exemple : faire en sorte que les changements soient les plus
localisés possibles (bonne modularité) être capable de gérer les multiples versions des
modules et configurations des versions des modules, constituant des versions du produit complet.
Généricité
Il est parfois avantageux de remplacer la résolution d’un problème spécifique par la résolution d’un problème plus général
Utilisation des design pattern (voir dans les prochains chapitres)
Construction incrémentale
Un procédé incrémental atteint son but par étapes en s’en approchant de plus en plus; chaque résultat est construit en étendant le précédent
Introduction au GL
Différentes étapes du processus de développement
Étapes du processus de développement
Analyse des besoins
Analyse du système
Implémentation
Maintenance
Validation
Conception
Spécifications
Analyse des besoins
Étape préalable si le client n’a pas une idée précise du système à réaliser
Étude informelle des fonctionnalités (externes) du système sans considération technique:Point de vue métier / utilisateur
Aide au formalisme du problème à résoudre
Production de documents textuels avec schémas, graphes, etc.
Spécifications
Ce que doit faire le système côté client Document précis spécifiant les fonctionnalités
attendues (contour fonctionnel) Base du contrat commercial avec le client Document facile à comprendre par le client /
utilisateur (scénarios, interactions, enchaînement d’écrans)
Les spécifications ne sont jamais complètes et définitives (évolution du domaine, besoins supplémentaires, …)
Analyse du systèmeQuoi faire ? : comprendre et modéliser le métier
Réflexion métier hors de toute considération technique Reste un support de discussion avec le
client/utilisateur (questions/réponses) Premier modèle du système (niveau métier)
Identifier les éléments intervenant (acteurs) hors et dans le système: fonctionnalités, structure et relations, états par lesquels ils passent suivant certains événements
L’analyse n’est jamais complète, mais elle doit être juste
Établissement du cahier des charges et des contraintes du système
ConceptionComment faire le système: choix techniques
Choix d’une architecture technique (matérielle, logicielle) suivant certaines contraintes (robustesse, efficacité, performances, portabilité …)
Expertise informatique: hors compréhension du client Modèle de l’architecture logicielle du système
Décomposition en sous systèmes: application (interfaces), domaine (métier) et infrastructure (implémentation)
Permet la définition des phases d’implémentions, de validation et de maintenances
Production d’un modèle du système final en cohérence avec les choix d’architecture
Implémentation Trop de temps consacré à cette phase au
détriment d’analyse et de conception: mauvaise pratique, parfois très coûteuse …
Nécessite un savoir de la réutilisabilité des composants, voir d’outils de génération de code (voir MDA)
L’activité sera de plus en plus tournée vers la réutilisation des composants existants
Validation Tests de vérification
Vérification de la robustesse et cohérence du système, en particulier dans les cas d’exceptions
Testeur est différent du concepteur ou du développeur
Logiciels de tests: toute ligne de code doit être testée Différentes méthodes de validation (voir cours
méthodes formelles)
Recette Validation client: accord avec les besoins Planification dès spécifications: cahier de recettes
Activité souvent sous estimée
Maintenance Deux types de maintenance
Correction des erreurs du système Demande d’évolution (modification de
l’environnement technique, nouvelle fonctionnalités …)
Facteurs da qualité essentiels Corrections: robustesse Évolution: modificabilité, portabilité
Étape longue, critique et coûteuse Une enquête effectuée aux USA en 1986 auprès de
55 entreprises a révélé que 53% du budget total d'un logiciel est affecté à la maintenance
Questions Donner une définition d’un logiciel Donner des exemples de catégories de
logiciel avec des exemples de logiciels Donner une définition du Génie logiciel Citer les 7 principes fondamentaux du
génie logiciel Citer les différentes étapes du processus de
développement d’un logiciel Citer quelques exemples de cycles de vie
d’un logiciel