Vous êtes sur la page 1sur 69

Fabrication de logiciel

Hier, aujourd’hui, et ……

Jean Claude Derniame


Jeanclaude@derniame.fr

Présentation au Groupe des Emérites de Lorraine


le 20 novembre 2008
Barry Boehm

• Présentation partiellement inspirée d’un papier invité de


Barry Boehm à la 28ème Intl Conf on Software
Engineering Shangai Mai 2006
• B Boehm
– TRW Professor of Software Engineering at USC, débuta en 55
chez General Dynamic , puis à Rand Corporation, a été directeur
de DARPA au DOD, puis professeur …
– Auteur de modèles majeurs (cascade , spirale, Cocomo,
– Leader dans la Communauté Software Process
Génie logiciel

• Définition, basée sur celle de Webster de l'ingénierie


• L’application des sciences et des mathématiques par
laquelle les propriétés du logiciel sont utiles.
• Inclut “computer science” et les sciences permettant de
rendre les choses utiles aux gens
– Sciences du comportement, économie, sciences de gestion, etc.
• Immense
• Focalisera sur la fabrication des grands?? programmes
industriels, militaires etc , hier, aujourd’hui et …..
• Importance d’une perspective historique
Pour quelque chose qui est apparu comme un moyen
d’accélérer les calculs
Puis comme une technologie prometteuse et utile
partout
Puis une science et
… une technologie envahissante!
Pour faire des logiciels, il faut

– Des machines
– Des concepts et des langages
– Des outils variés
– Des ateliers
– Des méthodes et …… Des humains!

–pour atteindre des programmes de qualités différentes:


corrects, fiables, performants, maintenables,
réutilisables, agréables, faciles à apprendre, etc.…
Des machines

• Le métier à tisser de Jacquart, 1801


• 1936 “On Computable Numbers with an Application to the
Entscheidungsproblem” par Alan Turing, premier calculateur
universel programmable
Sur papier!!!
•Premier calculateur réalisé en 1941
•Premier calculateur à l’université de Nancy 1957
•IBM 650 (2000 mots de 10 chiffres décimaux)
• Ordinateurs d’institutions
•Premiers ordinateurs personnels début 1980
•Apple2, PC,…
Machines aujourd’hui

• Nombre d’ordinateurs personnels dans le monde

• Ont été vendus en 2008: 300 Millions


• Présents fin 2008: 1 Milliard
• Présents fin 2 015 : 2 Milliards
• Produits depuis l’origine:
2,3 Milliards fin 2008
• > 35 000 dans Nancy Université, 4500 INPL
• Stockage dans les services centraux de NancyU
> 60 téra octets (1012)
Explosions

• Explosion du nombre d’utilisateurs


• Explosion des usages
• Explosion des méthodes, des langages
• Explosion de la demande de logiciel!!!!
• Explosion de la taille de programmes demandés
• Babel…….?
1950’s Thèse: “Faire le logiciel comme le matériel”
B Boehm

• Hardware-oriented:
– Applications: CALCULS avions, ponts, , circuits
– Economie: Boehm project supervisor, 1955
• “We’re paying $600/hour for that computer, and $2/hour for
you, and I want you to act accordingly.”
– Software Processes: SAGE (Semi-Automated Ground
Environment)
• 1 Million de lignes de code pour un système de défense
aérienne, temps réel, avec beaucoup d’interactions avec les
utilisateurs……
• Succès du développement pour un système sans précédent
• Hardware-oriented waterfall-type process
1960’s Antithèse: .
Software Is Not Like Hardware

• Illisibilité
• Complexité: Royce, “for a $5M procurement, need a 30-
page spec for hardware, and a 1500-page spec for
software”
• Conformité: distance entre souhaits et réalisation
• Evolutivité: au-delà d’un certain point, impossible à
maintenir
• fiabilité.? Sécurité?
• Langages non contraints: un nombre peut aussi bien
représenter un temps de voyage, une vitesse, la gravité, etc
Erreurs

• Sources d’érreurs
• Apparition d’un « principe »:
“Un programme est un paquet d’erreurs”
“Un petit programme est un petit paquet d’erreurs”
“Un gros programme est un gros paquet d’erreurs”
1960’s Antithesis

• Matériels non fixés, changements fréquents


• La demande excède possibilités des ingénieurs
– Médecine, physique, musique, histoire, arts majeurs
– Code-and-fix process
– Contre-culture: remise en cause de l’autorité?
– “Cowboy programmers” considérés héroiques
– Hacker culture (Levy, 1984)
• Propriété collective du code
• Libérer logiciel, données, l’accés aux ordinateurs
• Programmeurs jugés par “l’élégance” de leur code
1960’s Progrès

• Meilleure infrastructure: OS, compilateurs,


utilitaires…
• Départements informatiques
• Familles de Produits : OS-360, CAD/CAM,
bibliothèques math/statistiques
• Quelques grands succés: Apollo /ex
• Bases de la programmation rigoureuse et
professionnalisation
1960’S Eclosion des langages

Selon C.A.R.
Hoare “Algol a été
une grande
amélioration de
ses successeurs“
Backus,Naur,Hoare, Dijsktra…
Programmation impérative

• Concepts de base des langages


• Instruction : quoi faire
• Affectation : attribuer une valeur à un nom ( variable)
• Itération: recommencer une suite d’instructions
• N fois,
• Jusqu’à une certaine condition
• Tant qu’une condition est vraie
• Appeler une fonction avec paramètres
• TYPE d’une variable: ensemble des valeurs qu’il est permis de lui
affecter
• Programmation structurée
• Tout cela contrôlé par le compilateur
1960’s à Nancy

• C Pair arrive en 1960, prof en 61


• compilation, théorie de la compilation, langages ( Algol 68),
programmation déductive….. Avec les bons principes qui
apparaissent
• J Legras
• Analyse numérique, Algol linguistique, puis informatique de gestion
• en 66 une vingtaine de personnes
• On travaille sur une CAE 510: 8 K, 1 lecteur de ruban,1 dérouleur de
bande magnétique ou à Grenoble ou dans des banques
• Mon premier “grand programme”
Programme PERT sur un graphe de 3000 points (N2logN)
~10 000 000 d’opérations de graphe, “mémoire virtuelle”,
12 heures de calcul
1960’s Problèmes

• Problèmes: cf 1968, 1969 NATO Reports


– Echecs de nombreux grands systems
– Pénétration de la programmation structurée très lente
dans les milieux industriels
– Encore beaucoup de “code spaghetti” non maintenable
– Systèmes non fiables, non diagnostiquables
– Compétences techniques des “programmeurs”
1970’s Thèse

• Methodes Structurées
– Structured programming (Boehm-Jacopini: GO TO unnecessary)
• Formal programming calculus: Dijkstra, Hoare, Floyd
• Analyse descendante Mills, Baker
• Waterfall Methods
– “Code and fix“ trop onéreux (100:1 for large systems)….il faut
– “Concevoir avant de programmer” (De Marco SD, Jackson
JSD/JSP)
– “Spécifier avant de concevoir” (PSL/PSA, SA, SREM)
– dire le “quoi” d’abord et le vérifier avant d’aller plus loin
• Algorithmique et structures de données
1970’s: Problèmes avec le modèle
“Cascade”

• Interpretation trop littérale des jalons séquentiels


– Ne convient pas aux applications interactives
– Jalons passés mais pas validès
• Documentation énorme, difficile à lire, à maintenir
• Ne convient pas avec COTS*, ni la réutilisation
– Analyse ascendante vs. descendante
• Passage à l’échelle, durée, obsolescence
– 3 000 000 Lignes de code source :72 mois en développement séquentiel
= 4 générations d’ordinateurs……et 318 changements majeurs dans les
spécifications

* Cots: Commercial of the shelf: Achat sur les rayons du magasin


Problèmes avec les méthodes formelles

• Excellentes pour petits programmes , critiques


• Plus grands programmes prouvés ~ 10 KSLOC
• Preuves montrent la présence de défaults, pas l’absence
– Plus efficaces dans les spécifications
• Généralisation à la communauté des développeurs
– Techniques demandent expertise en math , $50/SLOC
– Profil programmeur moyen aux US en 1975 :
• 2 ans de college, experience en logiciel
• Familier avec 2 langages, applications
• Désordonné, rigide, “tout dans la tête”, et difficile à gérer
– En France: mieux ( un peu) moins nombreux ( beaucoup)
1970’s GL à Nancy

• Depuis 67: Plan calcul ordinateurs français: Iris 10, 15,


125, 50, 80
• Contribue à nous laisser à l’écart de la communauté
internationale
• Oblige à développer nos propres logiciels:
• Programmation récursive (C Pair)
• Spécifications algébriques ( JP Finance)
• Début des preuves de programmes (P Lescanne)
• Civa 1er langage modulaire français et avec atelier en 73 450 000 L
• Typ 1er langage français à types abstraits 79 (JCD)
• Peu d’impact international en termes d’utilisation
1980’s Synthèse: Productivité,
Réutilisation, Objets

• Problème mondial de productivité, compétitivité


– Japon /ex: Toshiba SW-reuse: autos, électronique
• Meilleurs accélérateurs de productivité de SW
– Travailler plus vite : outils et environnements
– Travailler mieux: procédés et méthodes
– Travailler moins : réutilisation, simplicité;
programmation par standards, objets,
– “Silver bullets” technologiques: AI, transformations,
DWIM, PBE (Do What I Mean; Programming by Example)
1980’s Des langages….Babel

• En 1979 4000 langages avec un compilateur !


• Le DOD a des programmes écrits dans plus de 1000…..
• Standardisation!
• Appel international langage généraliste (algorithmique, calcul
scientifique, temps réel, gestion)
• comités d’évaluation dans 12 pays, 2 ans évaluation, sélection,
amélioration
• Bull Ichbiah, Cousot, Abrial, …
• Obligatoire(US admin ) pendant 10 ans,
• ailleurs très utilisé pour les grands programmes militaires et/ou
industriels et enseigné
Dans le même temps d’autres paradigmes

• Programmation et conception par objets


• Programmation concurrente
• Programmation par agents
• Programmation par contraintes
• Programmation logique
• Langages multiparadigmes

• 2 mots clés: Intégration Interopérabilité


Programmation Objet

• Objet du monde physique ( ou pas) est représenté par:


/ex moteur d’une voiture
– Ses attributs ( valeurs caractéristiques/ex)
• Etat, puissance, Nbre de tours /mn, etc…
– Les “messages” auxquels il peut “réagir”
• Démarrer, accélérer, ralentir, éteindre, etc..

Données
Encapsulés
Sous-
programmes
Héritage…..Meubles

Attributs communs
Taille, prix, volume, matériaux, couleur, etc…..

Attributs spécifiques: assise, accoudoirs, ….

Méthodes communes
Acheter, vendre, déplacer, casser, renverser ……
Méthodes spécifiques: balancer, s’asseoir ….
Héritage, surcharge

• Si chaise hérite de meuble, tout ce qui a été écrit


pour meuble est (ré)utilisable pour une chaise
• Déplacer une chaise s’écrit comme déplacer un
meuble: machaise.déplacer même si le traitement
est différent “surcharge des méthodes ”
• Les objets sont “typés” : si un nom a été déclaré
du type chaise il ne pourra désigner que des
chaises, sinon erreur
Réutilisation des objets

• Analyse et conception par objets plus “naturelle”


• Développement de bibliothèques d’objets
• Bonne approche de réutilisation dans un contexte
donné, un langage donné
• Portabilité, réutilisation dans contextes différents
devra encore progresser (OK maintenant)
1980’s Des outils

• Editeurs de textes sources connaissant la


grammaire du langage
– Incrémental
– Graphique
– Outils de mesure
• Outils de tests
• Générateurs d’éditeurs, d’outils de mesure, de jeu
de tests, de compilateurs, etc…
Environnement de programmation

E D
C d e
o b O
m d u G
p g d e
i e g e
E l m
n
d e e
i a li r s d
t t e u e
e r
e u n e
u r s T
r s s
e
s t
s

Système
• Notion apparue ~1970 beaucoup enrichie depuis
• Plus d’outils , couvre tout le cycle de vie du
logiciel
• Ex demo env Java Netbeans
/ex Editeurs de conception
Recevoir
Commande

Pour chaque ligne de cde


[Échec]
* [Pas en
stock]
Annuler Autoriser Vérifier ligne Réapprovisionner
Commande paiement de commande stock

[En stock]

[Succès]
Affecter à
commande

[Besoin de Recommander]
[Stock affecté à toutes les lignes de cde
et payement OK] Réapprovisionner
stock

Honorer
Commande
Atelier de logiciel
P V
C r é
o o r
n g i D
c r is M
f tr A
B e a i i i
e p m c b n
s t m a u t
i a ti e
o o ti n
i ti o o a
n o n n c
n s n e
s

versions assistance sécurité apprentissage

Documentation Configurations Etc….

Système
1980’s à Nancy

• 81 Crin 90 personnes Pair part


• 81 VAX 750
• 84 Dossier INRIA
• Preuves de programmes se développent (P Lescanne)
• Programmation par contraintes (JJ Chabrier)
• Environnements de spécification (JP Finance)
• Objets Eiffel ( B Meyer, D Colnet 86)
• Outils éditeurs de texte (incrémental, graphique, générateur..), (JCD)
• 85 LTR3 Langage temps réel pour la défense nationale (Sita)
• 86 Ateliers: participation à PCTE (Portable Common Tool Environment)
Projet européen de plate forme supportant des ateliers ( coût moyen
d’un atelier qqs 100 Homme-année)
• 88 Alf Prototype européen d’atelier centré sur des modèles de procédés
Beaucoup de progrés techniques,
recherche et industrie,
mais….
beaucoup d’échecs, de retards,
d’insatisfactions
Pbs de maîtrise des Insuffisance, variation, irréalisme
 Motivation Technologie:10,7%
et des specifications : 35,9%
Pb de support, “d’organisation”
Contexte
Vue “20éme siècle” donc de “procédé”:23,5%
Vue “21éme siècle”
•Conclusions
1990’s Langages

2000:
• Java, C≠ , Prolog, Python, VHDL, ML, Ruby,
TCL, Php, W-langages ( win dev) ….. et tous les
langages du web
1990’s concepts

• Progrès majeurs dans les procédés et les


plates formes
• Inginiérie des domaines,` /ex Businesss Objects
• Lignes de produits
• UML,
• architecture
• Planning vs assistance
• Plateformes objets distribués CORBA
Atelier de logiciel
P V
C r é
o o r
n g i D
c r is M
f tr A
B e a i i i
e p m c b n
s t m a u t
i a ti e
o o ti n
i ti o o a
n o n n c
n s n e
s

versions assistance sécurité apprentissage

Documentation Configurations Etc….

Cette plate forme


devient de plus en
plus importante
Système
Le modèle en spirale

Evaluation
•Interviews
•Interviews Nouvelles
des risques
•Prototypes
•Prototypes Evaluation Enoncé spec

•Comitéde
•Comité depilotage
pilotage des risques

••évaluation
évaluation
validation
validation
Expérimentation
••modèle
modèleen
enspirale
spirale prototype
Essais
Réalisation
Procédés: Premières idées
Fin des 80’s .

• Ateliers centrés sur des modèles de procédés


– “utiliser la connaissance des procédés comme outil d’intégration
– Intègre les ressources et les rôles des intervenants
• Support d’exécution des modèles de procédés
: “SW processes are SW too” ( L Osterweil)
– Ce qui est bon pour les programmes est bon pour les procédés
– Reutilisation, modularité, , architecture, programmation
– Créativité? Incertitude?
• Support à la conformité des procédés:
– Standards and CMM: Standard national (US) pour évaluer la “maturité“
d’une organisation reposant sur des principes de “bon” développement
ALF

• Langage modulaire, multiparadigme


(impératif, pre-post, raisonnement, rôles, contrats)
• offrant assistance aux usagers
• Quoi faire?
• Comment?
• Pourquoi en suis-je arrivé là?
• Comment réparer?, et si…?
• Travailles pour moi
1991 Exemple de référence

• En 91, la communauté US “Software process” organise un


challenge entre concepteurs de langages de description de
procédés à Tokyo chacun devant décrire le même exemple
de développment d’un grand programmeexemple
• ALF 2ème : Réaction des européens présents:
Proposition d’un groupe de recherche Promoter
“ouvrir les procédés à la créativité et l’incertitude des
développments”
Financé 7 ans toujours actif
1990’s Antithèse

• “Time to market”
• Individus
Emphase sur programmation individuelle et les interactions
plutôt que planning et outils
• Logiciel ouvert, (libre, gratuit?)
• Personal Software Process
• Apparition des méthodes “Agiles”
– petites itérations, pair-programming, etc
• Applications réparties
PCTE+, PCIS 1

Projet OTAN
• Groupe de convergence PCTE avec le projet US
• PCIS Portable s-Common Tool Integration Set
• Première version d’une spécification de
plateforme multilangage ( Java, C, C++)
multisystème, (Windows, Unix) Sécurisée
• 30 personnes, 7 pays, ….. abandonné
PCIS2

• 95 Tim Lindquist( Phoenix) et moi faisons une proposition


spontanée US-DOD, France DGA
d’une plateforme basée sur ces idées mais centrée sur un modèle de
procédé simplifié et souple et une organisation différente
• 97 cahier des charges : 1500 outils ≠ , en réseau intervenant sur toute
les infos disponibles
• Traçabilité, évolutivité, ouvert, Corba, Java, C++
• 2ans pour les spécifications…..réussi EN 1999 car
– définition par un groupe de 10 personnes (Cf Boehm 1955)
– 2 U, Sema ( 5 ), Ocean Surveillance Center San Diego (3)
– Réalisé par une vingtaine de très bons 22M $
• F abandonne en 2000
• US: Surveillance radar de la côte ouest des US et du pacifique
Corba, .net,dCom, J2E
Corba : Objets distribués

• Réutilisation ===O==> Partage d’objets implantés ailleurs


• Changement d’échelle: mise à disposition d’objets informatiques au
niveau de la planète
• Infrastructure “mondiale” + qqs bémols
• Migration importante de concepts
Intégration ==o==>interopérabilité =o=> location de logiciel
•  Supporte les 3
•  Utilisable / informaticiens
• Architecture complétée par la notion de “composant” pour faciliter la
réutilisation
Composants

Un composant logiciel est un élément conforme à un


modèle de composant qui peut être déployé et
composé indépendemment, sans modification, selon
un standard de composition ●Council et Heinmann

Szyperski ajoute
Il est décrit uniquement par des interfaces définies
contractuellement et par ses dépendances du
contexte
1990’s Composants

Morceau de
programme
Décrit pour
Humains et
Services de la Plateforme
. plateforme
Composants ( suite)

• Standardisé
• + atelier de fabrication, assemblage, déploiement
de composants
• + standard de description XML
• outils d’intégration vérifiant que tout ce qui est
nécessaire est là, sinon téléchargé
• Véritable réutilisation
Patrons

• Modèles de (module, procédure, composant, ou


assemblage de …. ) incomplet
• Correspondant à des situations fréquentes

• À compléter en fonction du contexte


2000’s début: Opposition Modèles de maturité
et Méthodes Agile .

• Prédictabilité et Controle: Modèles de maturité


– Repose sur connaissance explicite et documentée
– Lourd mais vérifiable, “scalable”

• Time to Market et Changements rapides: “Agile”


– Repose sur connaissance tacite interpersonelle
– léger, adaptable, non “ scalable”
2000s Déploiement

• Bug de l’an 2000 =o=> “reverse engineering”


• Pilotage par les risques: le modèle en spirale se
généralise (B Boehm 1983) Procédés : standard RUP
• Importance de l’architecture
• COTS, open source
• Logiciel devient le premier discriminant
compétitif
– 80% des fonctionnalités des avions
1990-2000’s à Nancy

• Loria 500 personnes


• Programmation coopérative
• Entreprise globale
• Logiciel sûr
• Preuves de programmes
• Programmation logique
• Nancy-U Espaces numériques de travail:
~30 000 000 lignes sources de logiciels mis à dispositions
(portail, services, bases de données, …)
ENT
Une vue hegelienne de l’évolution

P la n- S of tware
E ngineer
Theses Complianc e Driven Va lue-A dd Int egrated
Sof tware Form ality ,
Soft ware Sw- Sys tems
like Many defect s Wa terfall
Maturit y CO TS E ngineering
Hardware
Models
S of t
S ysE
Process Ov erhead

V alue- Based
Risk- Based
P roduc tiv ity; Methods;
Agile/P la n
R euse; Risk Mgmt. Colla borat ion;
Syntheses Objects ;
-Driven
Global
S calabilit y, D om ain E ngr. Hy brids;
Pe oplewa re Deve lopme nt ;
R isk Mgmt. Model-Driv en
Enterprise
De velopm ent
A rc hite ctures

S calability
Protot yping G lobal
S yste ms
S oftware of
Diffe re nces, S yste ms
E ngineer S oftwa re
A gile
Antitheses S hort ages a s C ra ft
Me thods
Tim e to Mark et ,
Ra pid Change

1950 's 1960 's 1970 's 1980 's 1990's 2000 's 2010's
Le marché en 2008

Achat global de produits IT et de services ( ~


revenus des vendeurs) égal à $1 700 milliards
2008, croissant de 6% après un 12% en 2007.
Global IT 2008 Market Outlook Forrester Feb 2008
Les augmentations les plus importantes
Brésil, Inde, Chine, Russie
Perspectives
Tendances

• Ecrit une fois utilisable partout


• Focus sur ce qui a du prix pour l’utilisateur
• Logiciel embarqué
• Changements rapides
• Distribution, mobilité, interopérabilité, location
• Systèmes complexes de systèmes:
globalisation, entreprise globale
• COTS, logiciel libre, intégration de l’héritage
• Logiciels autonomes ( autotests, réparation, etc)
• Bio-informatique
“ On demand ” IBM: location temporaire de services, de
composants, de machines, d’experts…
Nouveaux paradigmes: agents actifs par ex
Conception par modèles,
gestion de connaissances,
• Composants deviennent “Web services”
• “Web intelligent”
• Plus hauts niveaux d’abstraction
• Migration du Reductionisme vers Postmodernisme
Métaphores

Nouvelles métaphores:
/ ex Phéronome pour
Auto-test permanent

Audit!
“Principes intemporels”

50’s : Ne pas négliger les sciences


“regarder avant de plonger” : éviter les accords prématurés sur
les objectifs
60’s Ne pas négliger les sciences : éviter “cow boy programming”
70’s Eliminer les erreurs le plus tôt possible
Determiner et valider les objectifs du système
80’s Il y a plusieurs façons d’améliorer la productivité
Concevoir et réaliser par morceaux; expliciter toutes leurs
relations
± Ce qui est bon pour les programmes est bon pour les procédés
Prudence avec les “silver bullets”
90’s “Time is money“ e t représente une valeur pour les “clients”
Rendre les logiciels utiles, utilisables et RÉUTILISABLES
2000’s Si le changement est rapide: prévoir l’adaptibilité dès la
conception,
Considérer et satisfaire TOUS les acteurs du logiciel développé.

- Le génie logiciel n’est plus seulement la programmation!!!!


• Pour les 2010’s
Consolider ce que vous savez faire
Rester à l’écoute des évolutions en permanence
Ne pas croire tout ce qui est écrit
- “C’est vrai puisque je l’ai lu sur Internet”
Formation: carrière de nos
élèves…..2050…

• Cours continuellement à jour


• Anticiper les tendances futures et y preparer les étudiants
• Séparer principes intemporels des pratiques passagères
• Proposer des (petits) projets relevant des pratiques des
grands projets
• Participer à la recherche ; incorporer les résultats
• Apprendre à apprendre
• Formation permanente des praticiens
Exemple de projet

Etudier l’impact du remplacement de bus par des trams dans


une ville
 Mise en place réseau local d’ordinateurs en auto-gestion
 Utilisation d’un outil de travail collaboratif (PFE)
 Atelier de modélisation (tauG2, UPPAAL, Spin)
 Atelier de simulation discrète (javaSimulation)
 Atelier de développement professionnel (JavaNetbeans,
javadoc, dreamweaver)
 Outil de procédé (RUP)
 Travail en groupe ( 12) tous logiciels ouverts gratuits
MERCI

des questions?