Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
LA PROBLEMATIQUE DU
LOGICIEL
Nouveaux besoins
Processus Nouveau système
de production de logiciels ou système modifié
ou besoins
changés
cahier des charges ou prototype
Système composants
existant
Génie logiciel
=
Méthodes, techniques, outils
D'un point de vue économique, tout comme il convient de distinguer Chimie et Génie
Chimique, il faut différencier programmation et génie logiciel. En chimie si deux réactions
différentes conduisent au même produit on n'a aucune raison de préférer l'une à l'autre. Alors
que le génie chimique différenciera parmi ces deux réactions celle qui met en jeu les produits
de base les moins chers par exemple. De même le Génie Logiciel tiendra compte en
particulier des coûts de formation et des implications à long terme lors de l'introduction de
nouvelles techniques de programmation. Au début des années 80 deux livres marquent la
prise de conscience de la nécessité de rationaliser les développements informatiques et de les
inscrire dans un contexte économique général.
B. Boehm dans Software Economics à partir d'une analyse des données menée sur les
projets informatiques de la firme TRW, définit une méthode de régression permettant
d'évaluer le coût d'un projet logiciel (COCOMO)1 en se basant sur le nombre de lignes de
code source estimées. C'est une des premières démarches en faveur de la mesure d'effort. La
méthode a été mise à jour en 2000 pour tenir compte de l'aspect réutilisation dans les projets
logiciels.
Frédéric BROOKS, dans "The Mythical Man Month"2 analyse les principaux échecs du
développement de l'OS/360. Malgré le succès relatif du projet, on constate:
- la présence de nombreuses erreurs résiduelles dans les premières versions,
- un retard important dans la livraison du produit
- que la place mémoire occupée est plus importante que prévu,
- que le coût réel est plusieurs fois celui estimé initialement.
Ce livre vient d'être réédité sans grands changements…Nous en retenons les différences
essentielles entre un programme3 et un produit logiciel intégré dans un système. Un
produit peut être utilisé, testé, maintenu, étendu, généralisé par une autre personne que le
programmeur initial. Un produit doit être suffisamment testé, documenté. Coût estimé par
Brooks pour développer un produit: Coût du programme x 3
On s'intéresse ensuite à la différence entre un programme et un programme intégré dans un
système, il s'agit d'une collection de plusieurs programmes qui interagissent. Il en résulte
un besoin de coordination, la nécessité d'établir des interfaces, de gérer la consommation des
ressources, une plus grande difficulté à organiser les tests. Le coût estimé par Brooks est
alors supérieur ou égal au Coût du programme x 3 .D'où le coût estimé pour un produit
logiciel intégré: Coût du programme x 9
1 Cf chapitre 3
2 L'unité de calcul de la taille d'un projet est l'homme x mois (man month)
3 typiquement un programme fabriqué par un étudiant lors d'une séance de travaux pratiques
PRODUIT
PRODUIT
LOGICIEL
LOGICIEL
(Généralisation,
Tests, INTEGRE
Documentation, DANS UN SYSTEME
Maintenance)
Dans son livre, Frédéric Brooks met également en garde contre l'effet deuxième système.
Le développement de la deuxième version d'un produit ne prend pas forcément beaucoup
moins de temps que la première; il faut apprendre à se méfier de l'"Optimisme" des
ingénieurs logiciels. L'exemple cité est celui de la release 1.0 d' OS/360. Dans la première
version un temps considérable a été passé à automatiser la création d'overlays par l'éditeur de
liens alors que dans la version suivante, l'introduction de la pagination rendait les overlays
inutiles...Aujourd'hui les avancées technologiques de plus en plus rapides font de
l'obsolescence du savoir un élément critique de la gestion de projet informatiques.
Cette rapidité d'évolution des technologies explique que la crise du logiciel découverte
dans les années 80 ne soit qu'imparfaitement vaincue aujourd'hui: dès qu'un remède est
trouvé, l'évolution de la technique le rend partiellement obsolète….
La programmation apparue dans les années 45-58 était alors le domaine réservé de
quelques ingénieurs mathématiciens qui programmaient en assembleur des programmes de
calcul scientifique sur mesure, à distribution limitée sur des machines volumineuses de
puissance inférieure à celle d'une calculette actuelle; machines expérimentales d'abord (
ENIAC, EDVAC ) puis commerciales SEA CAB500, BULL GAMMA3, UNIVAC, IBM
701.
Dans les années 58-75 l'informatique se développe considérablement à la fois côté
scientifique (langages FORTRAN) et dans le domaine de la gestion (langage COBOL). Les
premiers systèmes d'exploitation Multi-Utilisateurs apparaissent (IBM 360, Vax VMS, Bull
Gecos…) systèmes propriétaires qui lient l'utilisateur au constructeur. Les programmes
peuvent être activés en batch (l'un à la suite de l'autre) sur des architectures centralisées, les
premiers systèmes temps réel font leur apparition en informatique industrielle. Dans les
entreprises, on assiste à une main mise de la Direction Informatique sur l'ensemble de
l'entreprise. Les investissements matériels pèsent très lourd à cette époque, beaucoup plus que
le temps passé à développer les programmes. Nombre de programmes développés à cette
époque ont été concernés par le fameux bug du passage à l'an 2000….Parmi les entreprises
les plus avancées (DOD, NASA, constructeurs informatiques..) certaines perçoivent la crise
du logiciel qui va se faire jour (1969).
Informatique partout
fiabilité
crise sécurité
aide à la décision
e-business
Logiciels scientifiques
Temps réel,
progiciels ERP
Logiciels
embarqués,
scientifiques Réseaux,
Logiciels et de gestion Micro informatique Internet
sur mesure FORTRAN puces Intranet
calcul COBOL systèmes distribués 3 tiers
scientifique multi-utilisateurs client-serveur serveurs
systèmes propriétaires Bases de données d ’applications
systèmes de fichiers Unix
Assembleur batch, temps réel puces
ENIAC
1945 1958 1970 1990 2000
Durant les années 90 l'omniprésence d'Internet ou d'Intranet dans les applications oblige à
reconsidérer les architectures client-serveur établies quelques années plus tôt au profit
d'architectures 3 tiers prenant en compte des serveurs d'applications et non plus seulement des
serveurs de données.
Au niveau des applications, les exigences s'accroissent : l'informatique de gestion se dote
de progiciels de gestion ERP (Enterprise Resource Planning, cf SAP/R3) qui intègrent les
opérations les plus courantes et offrent à leurs clients des produits standardisés à 80% et
facilement (!?) paramétrables pour les 20% restant. Les outils d'aide à la décision
(datawarehouse, data mining) font leur apparition. En matière de commerce électronique (e-
commerce) les contraintes de sécurité et de fiabilité sont pratiquement aussi fortes qu'en
informatique temps réel (logiciels embarqués dans satellites, logiciels de contrôle de centrale
nucléaires….) alors que les budgets consacrés et les temps de développement se veulent
radicalement inférieurs…
En conclusion le logiciel est aujourd'hui présent partout, sa taille et sa complexité
augmentent de façon exponentielle, les exigences de qualité sont de plus en plus sévères… la
….et l ’an 2000 (qui a fait dépenser des millions de $ pour des logiciels développés pour la
plupart en pleine crise du logiciel) qui a finalement été bien absorbée sans provoquer
trop de défaillances.
Le paradigme objet
Dans les années 90 la crise n'est toujours pas résolue. Si les méthodes structurées
s'avéraient efficaces pour traiter des programmes de 5000 à 50000 lignes, elles ne le sont plus
pour des produits de 500.000 voire 5.000.000 lignes.
Or les développements sont de plus en plus complexes, de plus en plus longs et
l'obsolescence est de plus en plus rapide! Il y a donc une nécessité à réutiliser les
connaissances et à les partager.
Dans le domaine de la maintenance également, les méthodes structurées n'ont pas fait leurs
preuves. Le problème vient du fait que les méthodes structurées sont soit orientées données
soit orientées actions et que la modification d'un élément du logiciel impacte d'autres
éléments de manière relativement imprévisible.
Un nouveau paradigme voit le jour en 80 (Smalltalk) et devient très populaire dans les
années 90, c'est le paradigme objets qui encapsule actions et données. Ceci facilite la
maintenance car la localisation de l'erreur se fait plus facilement. L'objet masque la structure
interne des données qui sont accédées uniquement à travers des messages. Chaque objet est
autonome. En outre la définition de l'héritage et de la généricité permet la réutilisation
d'objets déjà développés dans un autre contexte.
message message
dépôt retrait
retrait
dépot
compte compte
solde
message
solde
Approche
Paradigme objets composants
Politique qualité, outils GL: Java beans
langages C++, Java Active X
méthodes structurées
ORB (CORBA) serveurs
outils GL : d ’applications
environnements CASE
Modèles de langages (ADA…) Réseaux,
cycles de Réseaux, Internet
client/serveur 3 tiers
développement Micro informatique hétérogénéité
Bases de données e-business
la crise: Aide à la décision
coûts Temps réel, systèmes Réutilisation
datawarehouse
délais embarqués
qualité
L'approche composants
Les années 2000 seront placées sous le signe de la programmation à base de composants
réutilisables. Cette approche peut être vue comme une forme ultime de la programmation par
objets, ou plus simplement comme un assemblage de briques logicielles prédéfinies, orientés
techniques ou métiers, et conçues dans le but d'être réutilisées (ce qui n'est pas forcément le
cas d'objets définis dans un contexte particulier et réutilisés par hasard). Cette démarche
s'appuie sur les technologies Java Beans, active X…mais nécessite une réorganisation du
processus de développement logiciel.
En conclusion, on peut dire que si la crise du logiciel est aujourd'hui résorbée parce que
mieux connue, elle est loin d'être terminée même si les services méthodes et qualité ont
disparu de la plupart des entreprises et que la direction de l'organisation n'est souvent plus
qu'un vieux souvenir dans les organigrammes. C'est que les avancées rapides de la
technologie rendent possibles des applications jusqu'alors inenvisageables et obligent sans
cesse à reconsidérer les vérités que l'ont croyait acquises.
L'informatique est aujourd'hui une industrie mure pour laquelle des éléments d'assurance
qualité peuvent être mis en place et qui diffèrent selon le type de produit à fabriquer et le
contexte dans lequel le produit sera utilisé : les contraintes seront différentes selon que l'on
fabrique un logiciel amateur ou un logiciel professionnel, selon que le logiciel est stratégique
pour une entreprise ou vital pour une population….
Objectifs
Les objectifs de qualité rejoignent bien souvent les objectifs de productivité
- Adéquation aux besoins
− Efficacité temps/espace
− Fiabilité
− Sécurité,
− Intégrité
− Testabilité, Traçabilité
− Adaptabilité, Maintenabilité,
− Convivialité (interface, aide et documentation)
− Pérennité (facilité de la maintenance)
L'assurance qualité vise à atteindre les objectifs de qualité, réduire le nombre d'erreurs
résiduelles , maîtriser les coûts et la durée du développement sans nuire à l’innovation et à la
créativité.
Les moteurs de l'assurance qualité sont multiples : on peut citer
− L'organisation du processus : découper le processus pour le maîtriser
− Les ressources humaines : les équipes doivent être motivées pour mettre en place des
procédures qualité
− L'utilisation de techniques, méthodes, outils
− Les considérations managériales, politiques et économiques : considérer le retour sur
investissement de la mise en place de procédures qualité par une analyse coûts
bénéfices.
Nous revenons sur chacun de ces aspects dans les chapitres concernés.
processus
outils
Productions méthodes
intermédiaires
Définition
Assurance qualité : "Mise en œuvre d'un ensemble approprié de dispositions préétablies et
systématiques destinées à donner confiance en l'obtention de la qualité requise." (AFNOR)
Plus précisément toutes les normes qualité insistent sur trois aspects essentiels :
communication, contrôle, organisation.
Organisation
Le processus de développement est classiquement organisé en différentes phases
conformément à la figure 1.7
Distribuer
concevoir
Qualifier
Développer
valider
Une tâche essentielle du chef de projet est d'organiser ces différentes phases et de les lier à
des activités en y affectant les ressources nécessaires tant humaines que logicielles ou
matérielles. L'enchaînement des activités constituera le workflow du projet.. Chaque activité
débouche sur un produit intermédiaire dont la production détermine la fin de l'activité et qui
devra être contrôlé avant de passer à l'activité suivante.
Contrôle
L'assurance qualité passe par des contrôles réguliers et inclut
- la validation(du latin "VALIDARE", déclarer valide) permet de répondre à la question
"sommes nous en train de faire le bon produit? "
- la vérification(du latin "VERITAS ", la vérité): répond à la question "est ce que nous
faisons le produit correctement"
Comme le montre la figure 1.8 les erreurs sont de plus en plus coûteuses à réparer
lorsqu'elles sont découvertes tard dans le cycle de vie: d'où le rôle primordial de contrôles
intermédiaires. La validation et la vérification sont en partie garanties par la mise en place des
d'inspections, revues, relectures pour tous les produits intermédiaires du développement
(prototypes/ maquettes, documents de spécification, de conception, code, jeux de tests)
200
100
0
besoins planification codage maintenance
specification conception intégration
Figure 1.8 coût relatif de correction des erreurs en fonction de leur découverte, source IBM
L'inspection est une lecture critique d'un document (spécification, conception, code, plan
d'intégration...); elle est destinée à améliorer la qualité d'un document.
De manière générale, l'inspection est faite par une équipe indépendante du projet
constituée par: un Modérateur, un Experts(s), Secrétaire , le client, éventuellement un
banquier, un représentant du service qualité...
Pour qu'elle puisse être profitable, une inspection doit donner lieu à la rédaction de fiches
de défauts avec une échelle de gravité et la définition des responsabilités concernant la
correction des défauts.
Les inspections sont à la base des décisions prises en revues. Une revue est une réunion
permettant de valider une des phases du cycle de vie.
On distingue
- les revues produits: état d'un projet sous ses différents aspects: Techniques, Financiers,
Commerciaux, Calendrier, ...
- les revues techniques (celles qui nous intéressent le plus dans le cadre de ce cours): elles
permettent de fournir au marketing et à l'unité de développement une évaluation des
aspects techniques du projet et des coûts de réalisation
- les réunions de décision: elles valident le passage à la phase suivante et font bien
souvent suite à l'une des deux précédentes.
Exemple d'après Boehm
Un logiciel de réservation aérienne (Univac-United Airlines) d'un coût de 56 millions de
dollars a été jugé inutilisable par manque d'analyse des besoins et d'étude de faisabilité:
- 146 000 instructions par transaction,
- au lieu de 9 000 prévues.
Ceci aurait pu être évité par des inspections et des revues intermédiaires et l'analyse d'un
prototype
Communication
Même si l'assurance qualité ne doit pas être confondue avec une production intensive et
bureaucratique de documentation, elle insiste sur la nécessité de communiquer à différents
niveaux:
Manuel qualité
Le manuel qualité décrit les procédures définies par une entreprise ou une organisation
pour atteindre ses objectifs de qualité.
Il répertorie les méthodes et procédures à utiliser pour:
- Gestion de projets
- Réalisation, Vérification, Validation,
- Evaluation de la Qualité (Mesures).
en s'appuyant sur:
- Rédaction de standards, normes (ISO, DOD..) , conventions, guides,
- Expérience acquise des projets, pour améliorer le processus.
Plan qualité
Le plan qualité logiciel définit, pour un projet donné, en accord avec le manuel qualité
de l'entreprise, les méthodes techniques et outils permettant d'atteindre les objectifs de qualité
pour un coût donné. Le plan qualité fait partie des éléments contractuels liant un client et son
fournisseur de logiciels. Il est établi lors de la phase de planification.
Des exemples de plan qualité sont fournis au chapitre 3.
On voit bien sur cette liste que ISO 9001 ne vise pas spécialement la fourniture de logiciels et
doit être adaptée dans le cadre d’une assurance qualité en logiciel .
Responsabilités du management
Les responsabilités du management recouvrent : la définition d’une politique qualité, la mise
en place d’une organisation et la validation périodique du système qualité.
Evaluation du contrat
Il est tout à fait indispensable de ne pas s’engager sur un contrat irréaliste.
Contrôler le développement
Ce paragraphe vise à encourager le fournisseur à documenter et contrôler le processus de
développement.
Organisation du travail
En particulier organisation des espaces de travail
Traçabilité
Cette rubrique concerne le suivi tout au long du cycle de développement des liens qui
peuvent exister entre cahier des charges et spécifications, spécifications et conception,
conception et codage.
C’est souvent à cause de ce chapitre que les impétrants à la certification se font rejeter.
Voici quelques exemples
La mauvaise version d’un fichier source a été cataloguée
Un erreur est répertoriée comme réparée et ne l’est pas
Un manager ou un chef de projet a été incapable de montrer quelles versions des
sources étaient utilisées au moment des tests
Incapacité de montrer les différentes demandes de modifications ou rapports
d’incidents
Contrôle de production (process control)
Il s’agit ici du contrôle de la production des disquettes, CD ou tout autre media sur
lequel le produit final sera livré. Le contrôle de production du développement a été vu
précédemment.
A vérifier également que la bonne version soit livrée en ce qui concerne les
bibliothèques, jeux de tests, documentation…
Inspection et tests
Là encore il s’agit d’inspecter le matériel livré (disquettes .. ), la validation du code
ayant été vue précédemment.
Contrôle des équipements de tests
Peu applicable en informatique. On peut par exemple tester les horloges pour les
programmes temps réel…
Statut des Inspections et tests ( Inspection and tests status)
On doit pouvoir à tout moment savoir si un document, un code source…a été inspecté,
validé ou est en attente de validation.
En aucun cas un document non validé ne doit servir de base à de nouveaux
développements.
Les documents inspectés et validés doivent être conservés dans un espace différent de ceux
qui ne le sont pas.
Contrôle des produits non conformes
Les produits non conformes doivent être identifiés. On doit pouvoir fournir une
procédure qui permet de corriger rapidement les erreurs et de valider les modules ainsi
corrigés.
Actions correctives et préventives
La norme est assez floue à ce propos car elle ne prévoyait pas l’amélioration des
produits ; alors qu’en informatique les produits évoluent dans le temps . Le paragraphe 4.14
donne quelques indications qui de mon point de vue sont redondantes avec les notions de
traçabilité vues précédemment
S’assurer qu’il existe une procédure de report des erreurs, s’assurer que toute erreur
reportée est un jour corrigée, pouvoir répondre sans hésiter à la question « telle erreur a t elle
été corrigée.
Stockage, livraison, emballage
Une fois les produits développés, il faut les stocker, les emballer et les acheminer vers
le client, cette étape a peu de rapports avec le cours mais doit être envisagée avec attention (
par exemple étiqueter les CD rom peut prendre un certain temps …)
Méthodes statistiques
Dans une industrie de production il est important de pouvoir prélever des échantillons au
hasard et de les tester. En logiciel rien de commun. Les tests statistiques consistent à faire des
mesures a posteriori en phase d’exploitation:
- Nombre de pannes
- Nombre d’erreurs découvertes (par le client, par le fournisseur)
- Temps moyen entre deux pannes
- Durée moyenne d’indisponibilité .
5 Par exemple le nombre de fautes détectées sur 1000 lignes de code, l’objectif correspondant peut être de
diminuer ce chiffre
Pour pouvoir s’améliorer l’organisation doit avoir connaissance de son niveau de maturité
actuel et définir celui auquel elle souhaite arriver. Le CMM lui donne des indications sur les
actions à entreprendre, c’est à dire une liste d’objectifs intermédiaires qui lorsqu’ils seront
tous atteints conféreront à l’organisation le niveau qu’elle vise.6 Elle fixe elle-même les
priorités et définit un plan d’action.
Le SEI produit des questionnaires que les organisations remplissent et qui servent de base
à un audit réalisé par des équipes du SEI. Le but est de mettre en évidence les lacunes de
l’organisation et de l’aider à établir son plan d’action pour atteindre le niveau souhaité.
Les expériences montrent que le passage d’un niveau à un autre peut durer de 18 mois à 3
ans. Mais le passage du niveau 1 au niveau 2 dure en général de 3 à 5 ans.
6 Par exemple pour atteindre le niveau 2, l’organisation devra mettre en œuvre des procédures d’assurance
qualité (en particulier détection et correction des défauts), une gestion de configurations sérieuse, des méthodes
de gestion de projet. Au niveau 5, les prérequis sont plutôt la prévention des défauts (et non plus leur correction
comme au niveau 2) et l’assurance zéro défaut (par la mise en œuvre de techniques de preuves par exemple)
Le projet SPICE
Le projet SPICE (Software Process Improvement and Capability dEtermination) est un
effort conjoint de l'ISO et de l'IEC pour créer un standard international d'amélioration du
processus de production du logiciel. Il s'appuie sur les recommandations du SEI et l'auto
évaluation sur la grille CMM et s'inspire des recommandations ISO 9000 en matière de
rapports clients/fournisseurs. La grille SPICE comporte 10 niveaux, les méthodes d'évaluation
ont une granularité plus fine. La norme SPICE devrait entrer en vigueur en 2001.
1.8 REFERENCES
F. BROOKS
The Mythical Man-Month
Addison-Wesley, 1982
B. BOEHM
Software Engineering Economics
Prentice-Hall, 1981