chapitre 1 introduction au génie logiciel - foad.ensicaen.fr · un paradigme : conception...

38
Régis Clouard, ENSICAEN - GREYC 1I2AC1 : Génie logiciel et Conception par objet Chapitre 1 Introduction au génie logiciel « Si les ouvriers construisaient les bâtiments comme les développeurs écrivent leurs programmes, le premier pic-vert venu aurait détruit toute civilisation. » Gerald Weinberg

Upload: truongdat

Post on 10-Sep-2018

222 views

Category:

Documents


0 download

TRANSCRIPT

Régis Clouard, ENSICAEN - GREYC

1I2AC1 : Génie logiciel et Conception par objet

Chapitre 1Introduction au génie logiciel

« Si les ouvriers construisaient les bâtimentscomme les développeurs écrivent leurs programmes,

le premier pic-vert venu aurait détruit toute civilisation. » Gerald Weinberg

201Chapitre

Plan du chapitre

1Pourquoi

un cours sur legénie logiciel ?

301Chapitre

Science informatique

■ L'informatique est un vaste domaine qui couvre :

...

Logiciel d'application1

Système d'Information / Base de données2

Réseau / Système d'exploitation3

Informatique embarquée4

Informatique industrielle5

Temps réel / Parallélisme6

Maîtrise d'ouvrage / Avant vente7

401Chapitre

Ingénieur informatique ENSICAEN

■ Développeur logiciel d’applicationaliasArchitecte logiciel d’application● En charge du développement de :

▶ « gros » logiciels,▶ « bons » logiciels.

501Chapitre

Programmeur/Codeur logiciel

■ Confusion programmation et développement de logiciels.● Aujourd’hui tout le monde programme.

Un programmeur réalise des œuvres personnelles à usage personnel...

... plus ou mois bien réussies.

601Chapitre

Développeur / Architecte logiciel

Un développeur produitdes ouvrages d’art pour une population ...

..qui sont hors de portée d’un programmeur.

701Chapitre

Qu'est ce qu'un logiciel ?

■ Un programme ou un ensemble de programmes.● destiné à des utilisateurs,● reposant sur un système d'exploitation,● s'exécutant sur une architecture matérielle,● utilisant les réseaux,● et interfaçant des périphériques.

Hardware

Système d'exploitation

Logiciel

sea

u

riphériq

ue

801Chapitre

Conséquences sur le développement

■ Le développement de logiciels requière des compétences informatiques variées :

▶ Interaction homme-machine▶ Réseau▶ Matériel▶ Architecture logicielle▶ Sécurité▶ Domaine spécialisé : monétique, image, …

■ Cf. le programme d’enseignement de l’école.

901Chapitre

Qu’est ce qu’un « gros » logiciel ?

■ Unité de mesure de la taille d’un logiciel● LOC : lines of code (MLOC : 106 LOC → 40 romans épais).

■ La taille des logiciels explose :● Commandes de vol A380 : 1 MLOC* (contre 100 KLOC pour l'A320).● Jeu World of Warcraft : 5,3 MLOC (jeu de rôle en ligne massivement

multijoueur).● OS Android : 11,8 MLOC.● Noyau Linux 3.1 (2011) : 17 MLOC.● Facebook : 62 MLOC.● Windows 10 : 80 MLOC (contre 40 MLOC Windows 7).● Google (tous les services internet) : 2 GLOC en 2015.

1001Chapitre

Conséquences sur le développement

■ La taille des logiciels oblige à un travail en équipe.● Mesure en mois-homme (man-month) :

▶ x mois-hommes = x mois pour 1 homme ou x hommes en 1 mois ou toute autre combinaison.

■ Par exemple : Le coût de développement de l’algorithme de recherche de Google est estimé à 1000 années-hommes.

1101Chapitre

Coût de développement

■ Ordre de grandeur :● 1 année-homme ~= 1650h.● 1h ~= 50€.● Productivité ~= 2 à 5 LOC / h.

■ Donc, le code suivant :

● met 1h à traverser tout le cycle de développement et coûte 50€ !

static void bubbleSort( int[] array ) { for (int i = 0; i < array.length - 1; i++) { for (int j = 0; j < array.length – i - 1; j++) { if (array[j] > array[j + 1]) { swap(array[j], array[j + 1]); } } }}

static void bubbleSort( int[] array ) { for (int i = 0; i < array.length - 1; i++) { for (int j = 0; j < array.length – i - 1; j++) { if (array[j] > array[j + 1]) { swap(array[j], array[j + 1]); } } }}

1201Chapitre

Qu'est ce qu'un « bon » logiciel ?

■ Point de vue de la MOA● MOA : maîtrise d’ouvrage : futur propriétaire du produit final).

Bon logiciel

Livré dansles délais

Fiable

Évolutif Convivial

Économique

1301Chapitre

Qu'est ce qu'un « bon » logiciel ?

■ Point de vue de la MOE● MOE : maîtrise d’œuvre, ie les développeurs.

Bon logiciel

Maintenable

Simple

Testable Portable

Réutilisable

1401Chapitre

Plan du chapitre

2Le génie logiciel

1Pourquoi

un cours sur legénie logiciel ?

1501Chapitre

La crise du logiciel

■ Expression née d’un constat en 1968 après 23 ans de recul :● Il est incroyablement difficile de réaliser dans les délais prévus des logiciels

satisfaisant la qualité attendue.● La complexité conduit à une incapacité à maîtriser le logiciel qui en résulte.

■ Raisons● Il n’existe pas de théorie générale de la construction de logiciel.

▶ « Nous sommes toujours à la recherche d'une théorie générale de la construction de logiciels, à l'image des équations de la mécanique classique qui permettent de concevoir un pont robuste. » Joseph Sifakis (prix Turing 2007).

● Il n’existe pas, non plus, de mesures objectives et incontestables de la qualité des logiciels.

1601Chapitre

Une réponse : le génie logiciel (1968)

■ Le génie logiciel est l'ensemble des activités de conception et de mise en œuvre des produits et des procédures tendant à rationaliser la production du logiciel et son suivi.

■ Source d’inspiration● Le génie civil et l’architecture.

■ En pratique, le génie logiciel définit :1) Une méthode pour planifier, organiser et contrôler les activités de travail d'une

équipe.2) Un paradigme qui définit la façon fondamentale de composer les programmes

du logiciel.3) Un formalisme pour représenter de manière non-ambiguë le problème et sa

solution.

1701Chapitre

Une méthode : le cycle en V

Analyse des besoins Recette métier

Spécificationfonctionnelle

Validation

Conceptiondétaillée

Tests unitaires

Programmation

MOA

MOEConception

architecturale Tests d'intégration

1801Chapitre

Un paradigme : conception procédurale

■ Un programme est conçu comme une suite finie de procédures plus ou moins élémentaires qui s’enchaînent.

Programme principalProgramme principal

Procédure 4Procédure 4

Procédure 2Procédure 2

Procédure 3Procédure 3

Procédure 1Procédure 1

Procédure 5Procédure 5

1901Chapitre

Un formalisme : algorithmique

■ Structures de données.■ Suite d’instructions séquentielle.■ Analyse de complexité.

2001Chapitre

Ingénierie logicielle

■ Il en résulte deux métiers :1. Analyste

▶ Analyse des besoins.■ Rédaction du cahier des charges (terme emprunté au génie civil).

▶ Spécification fonctionnelle, Conception générale et Conception détaillée.■ Rédaction de la documentation technique.

2. Programmeur▶ Écriture du code.▶ Écriture des tests.▶ Déploiement.

2101Chapitre

Plan du chapitre

1Pourquoi

un cours sur legénie logiciel ? 2

Le génie logiciel

3Constat d’échec

2201Chapitre

Constat d’échec (2001)

■ Plus des deux tiers des projets non satisfaisants.

49.00%

28.00%

23.00%

Source : The Standish group (2000)

Projets en difficultéProjets réussisProjets échoués

35.000 projets étudiés

2301Chapitre

Exemples de projets en échec

■ Le projet TAURUS● La Bourse de Londres a renoncé en mars 1993, après quatre ans de

développement, au projet informatique Taurus qui devait assurer le suivi complet de l’exécution des transactions. Ce système a coûté directement 60M£ et les opérateurs sur le marché ont dépensé 400M£ pour y adapter leurs propres logiciels.

■ Système de paiement d’Atos● La saturation du système d'autorisation de paiement dépassant 100€ a

provoqué en pleine en pleine période d'achats de Noël 2001 de longues files d'attente de clients excédés dont beaucoup finiront par abandonner leurs chariots. Les autorisations de débit qui prenaient habituellement quelques dizaines de secondes, nécessitèrent ce jour-là quasiment une demi-heure.Le coût du préjudice pour le seul groupe Leclerc est de 2M€.

2401Chapitre

Cause #1 : suivre un plan coûte que coûte

■ Le cycle en V définit des étapes séquentielles précises.● Engagement sur plusieurs mois.

▶ cf. diagramme prévisionnel de Gantt.● Il n’y a pas (ou peu) de remise en cause possible.

2501Chapitre

Cause #2 : estimer la durée d’un projet

■ Mythe du mois-homme● cf. «The Mythical Man-Month », Fred Brooks, 1995.● Extrêmement difficile d’estimer la durée (coût) d’un projet.● Non-linéarité de la charge de travail, exemple caricatural d’un projet de

développement d’un programme utilitaire :

■ Une règle empirique d’estimation de la durée :1. Estimer honnêtement le temps de développement.2. Multiplier par 3.3. Passer à l’unité supérieure.

Tous les utilisateurs

1 développeur

1 utilisateur

1 unité 3 unités

0.45 unité (-35%)0.15 unité (-30%)9 développeurs

2601Chapitre

Cause #3 : définir les besoins au début

■ Les clients ne savent pas exactement ce qu’ils veulent.■ Les clients ne savent pas exprimer clairement leurs besoins.■ Les besoins de clients changent au cours du projet.

2701Chapitre

Cause #4 : réaliser les tests à la fin

■ Étant réalisés à la fin, les tests sont faits selon le temps restant ou pas.

■ Pourtant, il est impossible de garantir des logiciels sans défaut.● Estimation : 1 à 10 bugs / KLOC

▶ Windows 10 (80 MLOC) → 80,000 bugs !● En 2006, 500 bugs déclarés dans la station spatiale internationale.

2801Chapitre

Cause #5 : Raisonner au niveau procédure

■ La conception procédurale est inadaptée à la conception de programmes de très grande taille.● Le niveau procédure est trop bas pour appréhender la complexité.

▶ Programmer au niveau procédural est une activité complexe qui revient à construire une voiture au niveau moléculaire.

2901Chapitre

Plan du chapitre

1Pourquoi

un cours sur legénie logiciel ? 2

Le génie logiciel

3Constat d’échec

4Le génie logiciel

aujourd’hui

3001Chapitre

Constat

■ Le logiciel n’est pas le matériel.● On peut construire une tour de 52 étages en commençant par la salle de bain

du 12e étage.● L’architecture de la tour peut évoluer de manière incrémentale à partir de la

salle de bain du 12e étage en ajoutant la chambre.● On peut revenir sur des choses déjà construites pour les modifier, comme par

exemple modifier la salle de bain pour installer le chauffage par le sol et la conduite d'eau chaude.

■ Il doit donc être possible de repenser le génie logiciel en s’émancipant du génie civil.

3101Chapitre

Repenser le génie logiciel

■ Depuis quelques années, le génie logiciel a beaucoup changé y compris au niveau de la programmation.● Nouvelle méthode de la gestion de projet.

▶ Agilité● Nouveau paradigme pour la conception logicielle.

▶ Conception orientée objet.● Nouveau formalisme de modélisation.

▶ UML■ Il n’y a plus de séparation analyste-programmeur.

● DevOps : un seul métier d’ingénieur de l’analyse à la production.

3201Chapitre

Effet sur la réussite des projets

■ Amélioration (lente mais réelle) ... le temps que l’agilité mature dans les équipes.

52.00% 39.00%

9.00%

Source : The Standish group (2015)

Projets en difficultéProjets réussisProjets échoués

10.000 projets étudiés

3301Chapitre

Remarques

■ Le modèle du cycle en V n’est pas caduque.● Il reste la référence.● Il est adapté pour des projets à très long terme.● Il est adapté pour des projets où les besoins sont clairement identifiés et

évoluent peu.■ Le paradigme procédural et notamment l’algorithmique reste une part

cruciale du développement.● Il est maintenant localisé dans le développement du corps des objets.

■ Ils ont aussi tous les deux une vertu pédagogique.

3401Chapitre

Plan du chapitre

1Pourquoi

un cours sur legénie logiciel ? 2

Le génie logiciel

3Constat d’échec

4Le génie logiciel

aujourd’hui

5Cours de

génie logiciel

3501Chapitre

Plan du cours

■ Ce cours est accès sur la conception et la programmation.

chapitre 2. Le paradigme objet.

chapitre 3. Le langage UML et les principaux diagrammes.

chapitre 4. Un processus de développement logiciel agile.

■ Les méthodes de développement seront vues en 2e année.● La gestion de projet classique et agile sera faite au semestre 8.● Une version avancée de la conception sera faite au semestre 7.

3601Chapitre

Pourquoi ce cours ?

■ À l’issue du cours, vous serez en mesure de :● Concevoir un logiciel de taille respectable à plusieurs développeurs.● Comprendre une conception modélisée.● Évaluer la qualité d’une conception.● Mettre en application les principes agiles du développement.

■ Important● « Les livres d'art ne permettent pas de vous transformer en artistes, pas plus

que les livres sur le génie logiciel ne vous transforment en développeur. Ils ne peuvent que vous apporter les outils, les techniques et les processus de réflexion employés par d'autres développeurs qui sont sources d'inspiration. » Robert Martin.

● Il existe aujourd’hui 50 ans d’expérience en génie logiciel dont il est nécessaire de s’inspirer. Le développement logiciel est un domaine qui souffre de beaucoup d’incompétence avec beaucoup d’autodidactes qui croient savoir.

3701Chapitre

Pour qui ce cours ?

■ Pour ceux qui choisiront de développer (MOE)● Trouver sa place dans la gestion de projet informatique.● Forger une culture du développement logiciel de haut niveau.● Prendre conscience de l’importance du code et des tests.

■ Pour ceux qui choisissent de ne pas développer (MOA, Qualité)● Être en mesure d’exprimer des besoins et de suivre un développement de

logiciel.● Comprendre comment sont construits les ouvrages à spécifier et apprécier

leurs contraintes.● Gagner en crédibilité face aux personnes de la MOE.

3801Chapitre

Que retenir de ce chapitre ?

■ Le développement de logiciels est plus que la programmation d'applications.

■ Le développement de logiciels de grande taille ne peut se faire sans maîtrise du génie logiciel.

■ Le génie logiciel reste un art qui repose sur une forte culture théorique et pratique de 50 ans.

■ Le génie logiciel a beaucoup évolué depuis quelques années. Il est fortement influencé par l'agilité.

■ Aujourd'hui le génie logiciel définit :● Une méthode pour structurer le processus de développement et organiser le

travail en équipe basé sur des itérations.● Un paradigme de conception basé sur la notion d'objet.● Un formalisme de modélisation basé sur le langage UML.