Introduction au Génie Logiciel Application dans la formation GTR : développement de projet informatique Principales références utilisées : Jacques Printz : Le Génie Logiciel, collection "Que sais-je?", PUF, 2001 Alfred Strohmeier, Didier Buchs : Génie Logiciel : principes, méthodes et techniques, PPUR, 1996 M. Lay, Penser Objet avec UML et Java, Dunod 2000
Génie logiciel Développement en équipe d'un logiciel complexe Un intervenant = une (petite) partie du travail Programmation : entre 15% et 35% du travail Analyse, conception, vérification, gestion de projet Complexité croissante des logiciels Sécurité Coût du logiciel (>> coût du matériel)
Activités du Génie logiciel (ANSI/IEEE 1002) Ingénierie du produit (product engineering) Analyse des besoins (requirements analysis) Conception (design) Codage (coding) Intégration (integration) Conversion (conversion) Débogage (debugging) Support du produit (product support) Maintenance (maintenance)
Activités du Génie logiciel (ANSI/IEEE 1002) Vérification et validation (verification and validation) Revues et audits (reviews and audits) Analyse du produit (product analysis) Test (testing) Gestion technique (technical management) Gestion du processus (process management) Gestion du produit (product management) Gestion des ressources (resource management)
Facteurs de coûts Mal connaître le métier, mal comprendre l'utilisateur Coût de maintenance > coût de conception Prévention des erreurs : des dizaines de fois moins cher que leur correction Plus tôt sont détectées les erreurs, moins chère est leur correction
Facteurs de qualité Qualité externe (client, utilisateur) Réalise les tâches attendues (complétude fonctionnelle) Est facilement utilisable (utilisabilité) Fonctionne même dans les cas atypiques (fiabilité) S'adapte à d'autres besoins (adaptabilité) Qualité interne (développeur) Composants réutilisables (Réutilisabilité) Composants documentés selon standards (Traçabilité) Bonne utilisation des ressources (Efficacité) Adaptation à de nouveaux environnements (Portabilité)
Création de logiciel Programmation Analyse des besoins Spécifications Installation Conception Gestion Validation Maintenance
Analyse des besoins Fonctionnalités attendues du système Point de vue métier, de l'utilisateur Aider à formuler le besoin Produit un document textuel, avec schémas, intelligible par le client Conduit à la définition du cahier des charges => les "spécifications"
Spécifications Ce que doit faire le système Produit un document textuel avec schémas, lisible par toutes les parties Base du contrat commercial Base des tests de vérification de la phase d'installation
Installation Dernière étape avant exploitation Installer le logiciel dans son environnement opérationnel Vérifier le logiciel dans son environnement opérationnel Organiser la formation Planifier la transition
Validations et vérifications S'appliquent sur tous les produits (intermédiaires et final) Validation : a-t-on construit le bon produit ? Critères externes au produit Vérification : le produit est-il bien construit ? Dépend des exigences de qualité préalablement énoncées Notions souvent identiques (même test)
Analyse (début du développement) Parfois confondue avec spécifications "Quoi faire" : comprendre le métier Premier modèle du système : ce n'est pas la solution du problème, c'est une vue externe (tout ce qui peut être perçu sans rentrer dans la structure interne) Doit laisser de la place aux décisions de conception
Document produit (analyse – spécification) Fonctionalités du logiciel Interfaces utilisateurs Comportements en cas d'erreurs Performances requises Interfaces avec autres logiciels Interfaces avec le(s) matériel(s) Contraintes de réalisations (matériels, logiciels, normes…)
Autres produits (analyse – spécification) Préparation des procédures de vérification/validation du logiciel plan de validation Version provisoire des manuels : d'utilisation et d'exploitation du logiciel
Conception générale Comment réaliser le logiciel ? Choix techniques : explorer plusieurs solutions… Décrire la solution retenue Architecture générale Composants Structures de données Fonctionalités Interactions entre ces composants Tous les éléments de la spécification doivent être pris en compte
Produits (conception générale) Le document décrivant l'architecture générale Un plan d'intégration, avec un plan des tests d'intégration (procédures de tests, jeux de données)
Conception détaillée Décompose chaque composant en sous-composants, jusqu'au niveau où le codage devient facile Précise pour chaque composant : Son interface Les algorithmes Le traitement des erreurs Produits : L'ensemble de ces descriptions Le plan des tests unitaires (jeux de données)
Implémentation Traduction dans un langage de programmation Mise au point Documentation Production des données (saisies, conversions, récupérations)
Documentation Les manuels d'utilisation et d'exploitation doivent être prêts au plus tard lors de l'installation Selon la complexité du logiciel : Guide d'installation Guide de l'utilisateur Guide de l'opérateur Manuel de référence Documentations des composants logiciels
Maintenance et évolution Corrections des erreurs Prise en compte de nouveaux cas d'utilisation Ajout de nouvelles fonctionalités Dans chaque cas, un "cycle de développement"
Analyse spécifications Organiser le développement ("cycle" de l'analyse à l'installation): la cascade Analyse spécifications Conception Programmation Tests Installation
Installation et tests de réception Le modèle en V analyse Tests unitaires Conception générale Programmation Installation et tests de réception Conception détaillée Intégration et tests Liens de validation
Conception-programmation-intégration analyse Tests unitaires Conception générale Programmation Installation et tests de réception Conception détaillée Intégration et tests Conception: Intégration: Système global Système global Détails précis Détails précis
Importance de la maintenance Première version Conception : 40% Programmation : 20% Intégration : 40% Versions suivantes Conception : 20% Intégration : 60%
Développement itératif : maquettes, prototypes… analyse Tests unitaires Conception générale Programmation Installation et tests de réception Conception détaillée Intégration et tests Liens de validation Liens de correction
Développement incrémental Mêmes motivations que le développement itératif Par incréments Démarre après la phase de conception générale Pour chaque incrément, un cycle complet de conception – implémentation – validation Commencer par ce qui sert à tout le reste
Les objets… Modularité => programmation par composants Localisation, encapsulation Sureté Abstraction / spécialisation Réutilisabilité