Fiabilité des Systèmes et des Logiciels

Programming, Math, etc. · course

Ensimag - 3ème année

Fiabilité des Systèmes et des Logiciels

Notes de cours

Olivier Gaudoin

2

Table des matières

1 Problématique de la sûreté de fonctionnement des systèmes informa-

tiques

1.1 Contexte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.2 Terminologie générale de la sûreté de fonctionnement . . . . . . . . . . . .

1.3 Fiabilité des matériels ou des logiciels . . . . . . . . . . . . . . . . . . . . .

1.4 Le risque logiciel

1.5 Méthodes d’évaluation de la fiabilité des logiciels selon les étapes du cycle

5

5

8

9

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

de vie

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

1.6 Utilisation des évaluations de fiabilité des logiciels . . . . . . . . . . . . . . 12

1.7 Terminologie spécifique aux logiciels . . . . . . . . . . . . . . . . . . . . . . 13

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

1.8 Exemple de données

2 Les mesures de fiabilité

17

2.1 Mesures pour les systèmes non réparables . . . . . . . . . . . . . . . . . . . 17

2.2 Mesures pour les systèmes réparables . . . . . . . . . . . . . . . . . . . . . 21

2.2.1 Durées de réparation comptabilisées . . . . . . . . . . . . . . . . . . 21

2.2.2 Durées de réparation non comptabilisées . . . . . . . . . . . . . . . 23

. . . . . . . . . . . . . . . . . . . . . . 26

2.3 Evaluation des mesures de fiabilité

3 Les lois de probabilité usuelles en fiabilité

29

3.1

Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

3.2 La loi exponentielle exp(λ) . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

. . . . . . . . . . . . . . . . . . . . . . . . . . . 31

3.3 La loi de Weibull W(η, β)

3.4 Autres lois usuelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

3.4.1 La loi gamma G(α, λ) . . . . . . . . . . . . . . . . . . . . . . . . . . 33

3.4.2 La loi lognormale LN (m, σ2)

. . . . . . . . . . . . . . . . . . . . . 34

3.4.3 Lois avec taux de défaillance en baignoire . . . . . . . . . . . . . . . 35

4 Calculs de fiabilité par structure

37

4.1 Principes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

4.2 Systèmes série . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

4.3 Systemes paralleles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

4.3.1 Définition et propriétés . . . . . . . . . . . . . . . . . . . . . . . . . 40

4.3.2 Cas où tous les composants ont un taux de défaillance constant

. . 41

4.3.3 Cas où tous les composants sont identiques . . . . . . . . . . . . . . 42

4

TABLE DES MATIÈRES

4.3.4 Gain de fiabilité par les redondances

4.3.5 La redondance logicielle

. . . . . . . . . . . . . . . . . 42

. . . . . . . . . . . . . . . . . . . . . . . . 43

4.4 Systèmes k/n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

4.5 Systèmes mixtes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

Systemes série-parallele . . . . . . . . . . . . . . . . . . . . . . . . . 44

Systemes parallele-série . . . . . . . . . . . . . . . . . . . . . . . . . 45

4.6 La méthode de factorisation . . . . . . . . . . . . . . . . . . . . . . . . . . 46

4.5.1

4.5.2

5 Fiabilité d’un logiciel non corrigé : le processus de Poisson homogène

49

5.1 Rappels et définitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

5.2 Propriétés des processus de Poisson homogènes . . . . . . . . . . . . . . . . 51

5.2.1 Lois des durées inter-défaillances

. . . . . . . . . . . . . . . . . . . 51

5.2.2 Lois des instants de défaillances . . . . . . . . . . . . . . . . . . . . 51

5.2.3 Loi du nombre de défaillances survenues à chaque instant . . . . . . 51

5.2.4 Fiabilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

5.2.5 MTTF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

5.3 Estimation de la fiabilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

5.4 Application aux données de l’exemple . . . . . . . . . . . . . . . . . . . . . 55

5.5 Validation des logiciels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

5.5.1 Validation en présence de défaillances . . . . . . . . . . . . . . . . . 56

. . . . . . . . . . . . . . . . 57

5.5.2 Validation en l’absence de défaillances

6 Les modeles a durées inter-défaillances exponentielles (ETBF)

59

6.1 Définition et propriétés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

6.1.1 Loi des instants de défaillance . . . . . . . . . . . . . . . . . . . . . 60

6.1.2 Loi du nombre de défaillances survenues à chaque instant . . . . . . 60

6.1.3 Fiabilité et MTTF . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

6.1.4 Fonction de vraisemblance . . . . . . . . . . . . . . . . . . . . . . . 61

6.2 Le modèle de Jelinski-Moranda . . . . . . . . . . . . . . . . . . . . . . . . 61

6.3 Le modèle géométrique de Moranda . . . . . . . . . . . . . . . . . . . . . . 64

7 Les processus de Poisson non homogènes (NHPP)

67

7.1 Définition et propriétés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

7.1.1 Loi du nombre de défaillances survenues à chaque instant . . . . . . 68

7.1.2 Loi des durées inter-défaillances et instants de défaillance . . . . . . 69

7.1.3 Fiabilité et MTTF . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

7.1.4 Fonction de vraisemblance . . . . . . . . . . . . . . . . . . . . . . . 70

7.2 Le modèle de Duane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

7.3 Le modèle de Goel-Okumoto . . . . . . . . . . . . . . . . . . . . . . . . . . 72

7.4 Autres modèles NHPP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

7.4.1 Le modèle de Musa-Okumoto . . . . . . . . . . . . . . . . . . . . . 75

. . . . . . . . . . . . . . . . . . 75

7.4.2 Le modèle de Yamada-Ohba-Osaki

7.5 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

Bibliographie

77

Chapitre 1

Problématique de la sûreté de

fonctionnement des systèmes

informatiques

1.1 Contexte

Ces dernieres années, les problemes liés à la maˆıtrise des risques et la sûreté de

fonctionnement ont vu leur importance et leur retentissement considérablement aug-

menter.

Exemples :

• risque sanitaire : vache folle, SRAS, grippe aviaire, grippe A, ...

• risque environnemental : inondations, canicule, ouragan Katrina, ...

• risque industriel : explosion des navettes spatiales Challenger et Columbia, d’Ariane

5, de l’usine AZF, accidents d’avion (5 accidents mortels en août 2005, 2 en juin

2009), pannes d’électricité géantes, ...

• risque financier : Enron, subprimes, faillite de Lehmann-Brothers, affaires Kerviel et

Madoff, ...

• risque géopolitique : guerre, terrorisme, ...

L’opinion publique accepte de moins en moins la notion de risque et demande des

niveaux de sûreté et de sécurité de plus en plus élevés.

Les systèmes informatiques, devenus omniprésents dans tous les domaines, sont fata-

lement de plus en plus impliqués dans les problèmes de sûreté. Par exemple, en 2004, la

France a été confrontée en moins de 6 mois à 4 pannes majeures de réseaux informatiques :

• 15-18 Juillet : le système de réservation Mosaic de la SNCF a été totalement bloqué

pendant près de 4 jours, empêchant la vente et la réservation de billets. La panne s’est

Publicité

déclenchée quelques heures après la mise en place d’une nouvelle version de Mosaic.

La défaillance a été causée par un programme de contrôle installé ponctuellement

pour s’assurer de la qualité des transmissions entre le central de réservation et les

postes de travail. Son fonctionnement, combiné à la forte charge de transmission de

données liée a la période de grands départs, a saturé le systeme et provoqué l’ensemble

Chapitre 1 - Problématique de la sûreté de fonctionnement des systèmes

informatiques

6

de ces perturbations (communiqué de la SNCF). Le bug a provoqué de longues files

d’attente devant les guichets, mais n’a pas affecté les finances de la SNCF, car 90%

des voyageurs de cette période avaient acheté leurs billets à l’avance.

• 30 et 31 Octobre : une panne de plus d’une journée est survenue sur le réseau fixe de

France Télécom. 26 commutateurs sur 600 ont été affectés dans la région parisienne,

le nord et l’ouest de la France. Quelques milliers d’appels ont été rejetés ou ne sont

pas parvenus à leur destinataire. La panne provenait d’une anomalie logicielle dans

un équipement de traitement de la voix sur IP (VoIP) situé à Reims. Cette anomalie

logicielle a provoqué des anormalités dans le formatage de la numérotation de certains

appels, qui ont déclenché des protections de sécurité pour éviter une panne du réseau

(communiqué de France Télécom).

• 17-18 Novembre : une panne de plus d’une journée est survenue sur le réseau mo-

bile de Bouygues Télécom. 1.37 millions de clients n’ont pas pu du tout utiliser

leur portable et 5.6 millions ont eu des difficultés pour accéder au réseau. La fac-

ture de la panne s’est élevée à 16 millions d’euros : une journée de chiffre d’affaires

perdue et l’équivalent en non facturé aux clients en compensation du désagrément

subi. La panne provenait du dysfonctionnement de la base de données qui sert à

repérer le mobile du client, lui permet d’acheminer ses appels et d’en recevoir. Deux

serveurs centraux jumeaux sont tombés en panne au même moment, dans deux en-

droits différents. Les deux serveurs sont du matériel classique et largement utilisé

par de nombreux opérateurs de téléphonie mobile avec, jusqu’à ce jour, une fiabilité

sans faille. En fonctionnement normal, ils se secourent en prenant le relais l’un de

l’autre. La panne est de nature exceptionnelle (communiqué de Bouygues Télécom).

• 3 Décembre : 800 terminaux de vente de la SNCF (sur 4000) ont été paralysés pendant

plus d’une journée. La panne provenait d’un algorithme défectueux qui a progressi-

vement contaminé les terminaux de vente en gare. Cet algorithme a pour objectif de

définir la zone de travail informatique de la transaction de paiement (communiqué

de la SNCF). Un nouveau bug du même type est survenu en novembre 2009.

Dans ces 4 cas, les problèmes ont été causés par des défaillances logicielles. Le site

www5.in.tum.de/∼huckle/bugse.html recense une impressionnante collection de défail-

lances logicielles. Parmi celles-ci :

• 4 Juin 1996 : la fusée Ariane 5 a explosé à cause d’une faute de conception logicielle,

et plus précisément un problème de réutilisation. Un programme de contrôle d’un

gyroscope de la fusée (en ADA) avait été transféré sans modification d’Ariane 4 à

Ariane 5. Or les trajectoires de vol d’Ariane 5 sont sensiblement différentes de celles

d’Ariane 4. Cela a provoqué un dépassement de mantisse qui a induit en erreur le

calculateur de pilotage et fini par faire exploser le lanceur. Cette erreur a coûté 500

millions de dollars uniquement en matériel, sans parler des retards engendrés et des

conséquences sur l’image de marque d’Arianespace.

• 3 mai 2000 : la moitié des ressources du réseau national de France Télécom ont été

paralysées.

• 3 juin 2004 : le trafic aérien britannique a été fortement perturbé pendant plusieurs

heures suite a une défaillance du systeme informatique de contrôle aérien, qui a privé

tous les appareils en vol de ressources informatiques pendant deux heures.

1.1 Contexte

7

• 8 octobre 2005 : un défaut dans le système de contrôle en vol de la fusée russe Rockot

provoque la perte du satellite CryoSat chargé d’étudier l’influence du réchauffement

climatique sur la fonte des glaces polaires. Coût de la mission : 136 millions d’euros.

• Septembre 2007 : un bug dans Excel 2007 provoque des résultats de multiplication

fantaisistes comme 77.1 × 850 = 100000 (au lieu de 65535)i.

• 2007 : les retards de livraisons de l’Airbus A380 sont en partie dus a un probleme

logiciel dont l’origine tient au fait que les sites d’Hambourg et Toulouse ont utilisé

deux versions différentes du logiciel de CAO de Dassault Systèmes CATIA. Les

pénalités versées aux compagnies aériennes se chiffrent à plusieurs milliards d’euros.

• Mars 2008 : Chrysler rappelle 25000 Jeeps Cherokee et Commander pour corriger

un défaut dans le logiciel de transmission automatique.

• Janvier 2010 : un bug dans le logiciel de lecture des puces électroniques des cartes

bancaires fabriquées par Gemalto a empêché 30 millions d’allemands de se servir de

leur carte de crédit pendant près d’une semaine. Pour certains, ce “bug de l’an 2010”

a largement surpassé le fameux “bug de l’an 2000”...

Ces pannes majeures et répétées ont sérieusement entamé la confiance du public dans

la sûreté des réseaux de télécommunication et des systèmes informatiques en général.

Dans de nombreux secteurs, on a pu constater que les défaillances sont de plus en plus

fréquentes. En effet, dans un contexte fortement concurrentiel, les entreprises cherchent à

réduire leurs coûts et avancer les dates de lancement de leurs produits, au détriment en

particulier de la sûreté de fonctionnement.

Par exemple, la fiabilité des ordinateurs de bureau a énormément chûté, en même temps

que les coûts. La garantie constructeur est passée de 3 ans à 1 an en quelques années et

les extensions de garantie sont tres cheres, ce qui indique clairement que les pannes des

PC sont très fréquentes.

Extraits d’un article de Libération du 19 novembre 2004 (voir document sur le Kiosk),

suite à la succession de pannes des réseaux informatiques français :

• A la racine de toutes ces pannes, on trouve des défaillances de l’informatique.

• Il s’agit d’anomalies logicielles.

• On contrôle la qualité des services ou encore la couverture des réseaux, mais pas la

vulnérabilité des systèmes.

• Si la panne survient, c’est que les opérateurs rognent sur tout, y compris sur la

fiabilité de leur système.

• Le consommateur est bien en droit de réclamer aujourd’hui la garantie d’une fiabilité

absolue. Celle-ci doit devenir un motif d’achat, donc un argument de vente impératif.

Pour que la fiabilité devienne un argument de vente impératif, il faut être capable de

l’évaluer ou la mesurer. C’est l’objectif essentiel de ce cours.

Chapitre 1 - Problématique de la sûreté de fonctionnement des systèmes

informatiques

8

1.2 Terminologie générale de la sûreté de fonction-

nement

Toutes les entreprises et les collectivités locales, nationales et internationales, sont

concernées par la mesure, la gestion et la prévention des risques. Cela englobe les risques

industriels, environnementaux, sanitaires, financiers, etc... Une des composantes princi-

pales de la gestion des risques est la sûreté de fonctionnement.

Un systeme est un ensemble de composants en interaction destiné a accomplir une

tâche donnée. C’est le cas par exemple des systemes de production, systemes de transport,

systèmes informatiques, etc...

La sûreté de fonctionnement (SdF, en anglais dependability) d’un système est la

propriété qui permet à ses utilisateurs de placer une confiance justifiée dans le service

qu’il leur délivre. On dit aussi que la SdF est la science des défaillances.

Un système subit une défaillance quand il ne peut plus délivrer le service attendu. La

panne est l’état du système résultant d’une défaillance.

La sûreté de fonctionnement comprend 5 composantes : la fiabilité, la disponibilité, la

maintenabilité, la sécurité-innocuité et la sécurité-confidentialité :

• La fiabilité (reliability) est la caractéristique du système exprimée par la probabilité

qu’il délivre le service attendu dans des conditions données et pendant une durée

déterminée. La fiabilité exprime l’aptitude à la continuité du service.

• La disponibilité (availability) est exprimée par la probabilité que le système délivre

le service attendu dans des conditions données et à un instant donné. La disponibilité

caractérise donc l’aptitude du systeme a fonctionner quand on a besoin de lui.

• La maintenabilité (maintainability) caractérise l’aptitude du systeme a être réparé

quand il est défaillant, ou à évoluer.

• La sécurité-innocuité (safety) caractérise l’aptitude du systeme a ne pas encourir

de défaillances catastrophiques.

• La sécurité-confidentialité (security) caractérise l’aptitude du systeme a se prémunir

contre les accès ou manipulations non autorisées (virus, attaques,...).

Un systeme non réparable est un systeme qui est mis au rebut dès qu’il tombe en

panne. C’est le cas des petits systemes (par exemple des ampoules) ou des systemes qui

coûtent plus cher a réparer qu’a remplacer.

Un systeme réparable est un systeme qui, après sa défaillance, peut être remis en

état de marche par des actions de réparation ou maintenance. C’est le cas de tous les

systemes complexes et en particulier des systemes informatiques. Pour ces derniers, au

lieu de réparation, on parle plutôt de correction, débogage ou mise à jour.

La maintenance des systèmes est de deux types :

• La maintenance corrective ou réparation remet en fonctionnement un système

Publicité

après sa défaillance.

1.3 Fiabilité des matériels ou des logiciels

9

• La maintenance préventive est effectuée alors que le système fonctionne et a pour

but de retarder l’occurrence des défaillances futures.

Dans les études de sûreté de fonctionnement, on distingue les approches boˆıte noire et

boˆıte blanche :

• Approche boˆıte blanche ou structurelle : on considere qu’un systeme complexe

est constitué de composants et que sa fiabilité dépend à la fois de la fiabilité de

ses composants et de la façon dont le bon fonctionnement ou la panne de chaque

composant influe sur le bon fonctionnement ou la panne du système tout entier. En

particulier, on considere souvent qu’un systeme réparable est constitué de compo-

sants non réparables. Quand un composant tombe en panne, on le remplace par un

neuf, mais le systeme complet, lui, n’est pas remis a neuf.

• Approche boˆıte noire ou globale : on considere le systeme comme un tout, qu’on

ne cherche pas a décomposer en composants. On s’intéresse alors a la suite des

défaillances et réparations successives du système.

1.3 Fiabilité des matériels ou des logiciels

A priori, les défaillances des systèmes informatiques peuvent être soit d’origine matérielle,

soit d’origine logicielle. En pratique, plus de 80 % sont d’origine logicielle. C’est le cas

de tous les exemples présentés dans la section 1.1. On s’intéressera donc en priorité aux

problèmes logiciels. Mais on peut noter qu’il existe des différences fondamentales entre la

fiabilité des matériels et celle des logiciels.

• Les défaillances des matériels sont essentiellement dues à l’usure (ou vieillissement)

et aux facteurs environnementaux, tandis que celles des logiciels sont dues à des

fautes de conception (ou bugs), c’est-a-dire a des erreurs humaines.

• Un matériel s’use, un logiciel ne s’use pas.

• La maintenance des matériels ralentit le vieillissement des systèmes mais ne l’empêche

pas, tandis que la correction des logiciels augmente leur fiabilité.

• Un logiciel non utilisé ne tombe pas en panne (le terme de panne est d’ailleurs peu

utilisé pour le logiciel). Un matériel non utilisé peut tomber en panne du fait de

l’usure ou des facteurs environnementaux.

• En logiciel, une faute bien repérée et corrigée est éliminée définitivement et ne peut

plus se manifester. En matériel, on peut observer des défaillances répétables ou chro-

niques.

• La sensibilité d’un matériel à son environnement est assez forte, mais on peut

néanmoins considérer qu’un matériel a une fiabilité en soi : les constructeurs quan-

tifient la fiabilité d’une ampoule électrique quel que soit son environnement. En re-

vanche, la sensibilité d’un logiciel a son environnement, à travers son profil opération-

nel, est extrêmement forte. Un logiciel truffé de fautes peut très bien fonctionner sans

défaillance si le profil opérationnel n’active pas ces fautes. Un matériel ayant beau-

coup de défauts ou tres usé tombera fatalement en panne, quelle que soit la maniere

dont on l’utilise.

Chapitre 1 - Problématique de la sûreté de fonctionnement des systèmes

informatiques

10

• Quand un matériel est en panne, il ne peut pas fonctionner tant qu’on ne l’a pas

réparé. Au contraire, un logiciel peut être relancé immédiatement après une défaillance.

On voit que les différences sont nombreuses entre fiabilité des matériels et fiabilité des

logiciels. On ne pourra donc pas traiter les deux aspects de la même manière. Historique-

ment, les concepts de la fiabilité ont été introduits pour les matériels. On commencera

donc par introduire ces concepts pour les matériels, puis on présentera les spécificités des

logiciels.

1.4 Le risque logiciel

Les défaillances des logiciels sont causées par des fautes dans les programmes. Or,

d’une part, une étude [16] a montré qu’un programmeur professionnel fait en moyenne 6

fautes pour 1000 lignes de code (LOC) écrites, et d’autre part, la taille et la complexité

des logiciels ne cesse d’augmenter. Par exemple :

• la navette spatiale américaine a besoin pour voler de 500 000 LOC logiciel embarqué

et 3 millions et demi de LOC au sol.

• les réseaux téléphoniques utilisent des millions de LOC pour fonctionner.

• le nombre de LOC est passé de moins de 5 millions pour Windows 95 à plus de 50

millions pour Windows Vista.

• plus généralement, un logiciel commercial standard fait en moyenne 350 000 LOC.

Par conséquent, cela fait environ 2000 fautes potentielles pour un logiciel standard, 24

000 pour la navette spatiale et 300 000 pour Vista !

Evidemment, tout est fait pour éliminer ces fautes, essentiellement par le test du

logiciel. Mais il est extrêmement difficile et coûteux de détecter et corriger des fautes

dans un logiciel. En effet, une étude de Microsoft [16] a établi qu’il fallait en moyenne 12

heures de travail pour détecter et corriger une faute. Si un logiciel contient 2000 fautes,

il faut donc passer 24 000 heures pour le déboguer, soit presque 3 ans de travail cumulé.

C’est pourquoi Microsoft emploie autant de personnel pour tester, vérifier et valider les

programmes que pour les créer. Et malgré cela, chacun a pu expérimenter qu’il subsiste

des erreurs dans les logiciels de Microsoft. Une étude plus récente [17] évalue à 60% du

budget total d’un projet informatique le coût de la détection et correction des erreurs

logicielles (ou maintenance du logiciel).

Malgré tous ces efforts, la complexité de la tâche fait qu’il reste toujours des fautes

dans un logiciel. Comme partout, et peut-être même moins que partout, le zéro défaut est

impossible. Quand ces fautes résiduelles se manifestent, leurs conséquences peuvent aller

du minime au franchement catastrophique, comme on l’a vu dans la section 1.1.

Il est donc impératif de tout faire pour éviter que des pannes informatiques majeures

se produisent. Pour cela, on dispose de nombreuses méthodes dont le but est de produire

des logiciels de fonctionnement sûr. On peut classer ces méthodes en 4 catégories [10, 11] :

• La prévention des fautes : ces méthodes ont pour but d’empêcher l’occurrence et

l’introduction de fautes dès la conception du logiciel. Par exemple, on a de plus en

plus souvent recours à des méthodes formelles pour développer les spécifications.

1.5 Méthodes d’évaluation de la fiabilité des logiciels selon les étapes du

cycle de vie

11

• L’élimination des fautes : ces méthodes ont pour but de détecter des fautes dans

un programme déjà écrit. Elles comprennent les preuves de programmes, les inspec-

tions formelles, la vérification et surtout le test du logiciel.

• La tolérance aux fautes : ces méthodes ont pour but de permettre au système de

fonctionner correctement même en présence de fautes. On peut par exemple utiliser

de la redondance.

• La prévision des fautes : ces méthodes ont pour but d’estimer la présence des

fautes et de prévoir les défaillances futures du sytème.

Les méthodes présentées dans ce cours rentrent dans la dernière catégorie. En effet, il

ne suffit pas d’avoir utilisé tous les moyens possibles pour développer un logiciel fiable,

encore faut-il s’assurer qu’il l’est effectivement : il faut des méthodes pour atteindre des

objectifs de fiabilité (les trois premières catégories, qui concernent le génie logiciel) et

faire appel a d’autres méthodes pour savoir si ces objectifs sont atteints (la quatrieme

catégorie, qui fait intervenir des concepts probabilistes et statistiques). Par conséquent,

il est très important de pouvoir prévoir l’occurrence des défaillances, et donc d’évaluer,

mesurer ou quantifier la fiabilité d’un logiciel. Notons que cette quatrième catégorie de

méthodes est aujourd’hui moins utilisée dans l’industrie que les trois autres [19], mais que

cela va évoluer, notamment avec la prise en compte de ces notions dans les normes [2].

Pour les logiciels, on réduit parfois le concept de sûreté de fonctionnement à celui de

sécurité-confidentialité. Cependant la sécurité-confidentialité concerne exclusivement les

dysfonctionnements dus à des actes de malveillance volontaires (virus, attaques, etc.) alors

que la sûreté de fonctionnement prend également en compte les dysfonctionnements non

volontaires : pannes matérielles, fautes logicielles, erreurs humaines non intentionnelles,

etc.

1.5 Méthodes d’évaluation de la fiabilité des logiciels

selon les étapes du cycle de vie

Les méthodes d’évaluation de la fiabilité des logiciels varient suivant la nature des

informations disponibles. Celles-ci sont étroitement liées au cycle de vie du logiciel, comme

on le voit dans le tableau 1.1 [16] .

Phase du cycle de vie Pourcentage d’erreurs Pourcentage d’erreurs

introduites

55%

30%

10%

5%

Analyse

Conception

Codage et test

Vie opérationnelle

détectées

18%

10%

Publicité

50%

22%

Table 1.1 – Pourcentages d’erreurs introduites et détectées selon les phases du cycle de

vie du logiciel

Les types d’erreurs dans les différentes phases sont les suivantes :

Chapitre 1 - Problématique de la sûreté de fonctionnement des systèmes

informatiques

12

• Analyse : le logiciel ne répond pas à l’attente des utilisateurs.

• Conception : mauvaise traduction des spécifications.

• Codage et test : erreurs de programmation ou de correction.

• Vie opérationnelle : erreur dans les mises a jour du systeme.

On constate que la majeure partie des erreurs sont introduites dans les premières phases

du cycle de vie (85% en analyse et conception) et détectées dans les dernières phases (72%

en codage, test et vie opérationnelle).

Dans les phases d’analyse, conception et codage, le système n’est pas encore construit,

donc il ne peut pas être utilisé et aucune défaillance n’est observée. Les éléments pouvant

être utilisés pour des prévisions de fiabilité sont la structure du système et les métriques

logicielles (nombre de lignes de code, nombre cyclomatique du graphe de contrôle, mesures

d’architecture et de spécifications, etc... [8]). A ce niveau, on peut évaluer la qualité du

logiciel, mais pas sa fiabilité. Or on ne sait pas mesurer la corrélation entre qualité et

fiabilité d’un logiciel.

En phase de test et en vie opérationnelle, le système fonctionne, des défaillances sont

observées et des corrections sont apportées au logiciel pour remédier aux fautes apparues.

L’essentiel des méthodes d’évaluation de la fiabilité repose sur l’observation et l’analyse

statistique de cette suite de défaillances et corrections successives.

Tout comme les matériels, les logiciels complexes sont constitués de modules unitaires

que l’on assemble. Si on est capable d’évaluer la fiabilité de chaque module et d’analyser

les liens entre les différents modules, on peut appliquer les méthodes structurelles (boˆıte

blanche) d’évaluation de fiabilité. Ce n’est pas du tout facile en pratique. Aussi considère-

t-on en général un logiciel comme un tout et on évalue sa fiabilité par une approche boˆıte

noire. C’est ce que nous ferons dans ce cours.

1.6 Utilisation des évaluations de fiabilité des logi-

ciels

Dans un premier temps, les évaluations de fiabilité permettent de quantifier la confiance

d’un utilisateur envers un systeme informatique, c’est-a-dire d’évaluer quantitativement

le risque que l’on prend en le faisant fonctionner. Puis elles permettent de s’assurer

que le logiciel a atteint un niveau de fiabilité conforme aux objectifs exprimés dans les

spécifications. Un objectif de fiabilité est usuellement exprimé en termes de taux de

panne ou taux de défaillance. Par exemple, pour le récent métro parisien sans conduc-

teur Meteor, les objectifs annoncés étaient un taux de panne par rame et par heure

inférieur a 10−9 pour le matériel et inférieur a 10−11 pour le logiciel.

Pour les systèmes faisant l’objet d’une garantie, les évaluations de fiabilité permettent

de déterminer la durée et le coût de la garantie.

Si les mesures de fiabilité montrent que l’objectif n’est pas atteint, elles peuvent per-

mettre d’évaluer l’effort de test à fournir pour atteindre l’objectif, et en particulier d’es-

timer le temps nécessaire pour y parvenir. Par conséquent, les mesures de fiabilité four-

nissent un critere d’arrêt des tests : on arrête les tests des qu’on peut prouver, avec

un niveau de confiance raisonnable, qu’un objectif donné de fiabilité est atteint. Une

expérience menée à AT&T a montré que la mise en place des mesures de fiabilité a permis

1.7 Terminologie spécifique aux logiciels

13

une réduction de 15% de la durée de la période de tests, ce qui a entrainé un gain de 4%

sur le coût total du projet, alors que le surcoût du aux mesures n’a représenté que 0.2%

de ce coût total [16]. D’autres exemples sont mentionnés dans [20].

Par ailleurs, une mesure de fiabilité est un moyen d’évaluer quantitativement la qualité

d’une méthode de génie logiciel donnée. Elle peut aussi fournir un indicateur de perfor-

mance d’un programmeur ou d’un testeur. Cette dimension humaine délicate est parfois

un frein à l’utilisation effective des évaluations de fiabilité.

1.7 Terminologie spécifique aux logiciels

En première approche, la fiabilité d’un logiciel est la probabilité qu’il fonctionne sans

défaillances pendant une durée donnée et dans un environnement spécifié. C’est donc

une notion temporelle. Le temps considéré peut être le temps d’exécution CPU (temps

effectivement passé par la machine pour exécuter le programme), le temps calendaire, voir

également un nombre d’opérations ou de transactions. A terme, seul le temps calendaire

est important. Notons que pour certains systemes (les systemes réactifs), le temps n’est

pas l’élément primordial : ce qui compte, c’est qu’une exécution se déroule correctement.

Alors, la fiabilité est définie comme la probabilité qu’une exécution soit correcte. Dans la

suite, nous ne nous intéresserons pas a ce type de systeme et nous conserverons donc la

définition temporelle de la fiabilité.

Une défaillance se produit quand le résultat fourni par le logiciel n’est pas conforme

au résultat prévu par les spécifications. Pour éclaircir cette notion, on peut considérer

qu’un logiciel est un système qui, par l’intermédiaire d’un programme, transforme des

données d’entrée en résultats ou données de sortie. Un programme est une suite

finie d’instructions codées qui exécute une ou plusieurs tâches spécifiées. L’exécution d’un

programme peut donc être vue (voir figure 1.1) comme une application de l’ensemble des

données d’entrée dans l’ensemble des données de sortie (appelés espace des entrées et

espace des sorties).

(cid:99)

......................................

Programme

......................................

(cid:99)

Espace des entrées

Espace des sorties

Figure 1.1 – L’exécution d’un programme

Les spécifications définissent quelle doit être la donnée de sortie pour chaque donnée

d’entrée possible. Si, pour une donnée d’entrée particulière, la sortie fournie par le pro-

Chapitre 1 - Problématique de la sûreté de fonctionnement des systèmes

informatiques

14

gramme n’est pas celle prévue par les spécifications, il y a défaillance. On voit ainsi

apparaˆıtre une relation forte entre donnée d’entrée et défaillance, sur laquelle nous re-

viendrons.

Une faute logicielle ou bug est un défaut du programme qui, exécuté dans certaines

conditions, entraˆınera une défaillance. Une faute est un phénomene intrinseque au pro-

gramme, elle existe même quand le logiciel n’est pas utilisé. A l’inverse, une défaillance

est un phénomène dynamique : le programme doit être exécuté pour qu’elle se manifeste.

Une faute est créée suite à une erreur humaine de l’analyste, du concepteur ou du pro-

grammeur. Aussi, on emploie le terme de faute de conception. Les erreurs peuvent être

de spécification, de conception ou de codage. Il est également possible qu’une défaillance

d’un systeme informatique soit due a un problème matériel. Ce type de défaillance est en

général facilement identifiable. Nous ne le traiterons pas dans la suite, où nous supposerons

que toutes les défaillances sont dues à des fautes de conception (au sens large).

Si on pouvait tester toutes les entrées possibles d’un logiciel, on détecterait fatalement

toutes les fautes. Mais le nombre d’entrées possibles est beaucoup trop grand pour cela.

Il faut donc déterminer dans l’espace des entrées un sous-ensemble d’entrées à tester.

Le profil opérationnel définit le choix des entrées et la fréquence de sollicitation du

logiciel, en associant à chaque entrée ou groupe d’entrées sa probabilité d’être fournie

au programme a un instant donné. Le profil opérationnel est en général tres différent en

phase de test et en vie opérationnelle.

Quand une défaillance survient, on cherche à détecter la faute qui a provoqué cette

défaillance et à l’éliminer. On effectue alors une correction ou débogage. Parfois, un

logiciel est amené a changer radicalement certaines de ses fonctionnalités. On procede

alors a un changement de spécifications, qui va aboutir a une nouvelle version du

logiciel. Les corrections et les changements de spécifications peuvent être interprétés de

la même manière comme des modifications du programme. Une modification d’un logiciel

est parfois appelée une maintenance logicielle. La correction a pour but de réduire l’oc-

currence d’apparition des défaillances, donc elle devrait augmenter la fiabilité du logiciel.

1.8 Exemple de données

Le système observé est une machine UNIX sur laquelle tourne un gros logiciel de bases

de données en phase de test. Le systeme a été observé sur un an, du 14 juin 1995 a 16h14

au 11 juin 1996 à minuit.

Un démon a noté tous les instants de panne, les causes des pannes et les instants de

redémarrage de la machine. Suivant la nature des interruptions, des corrections ont été

apportées ou pas au logiciel. Le temps pris en compte est le temps calendaire. Le tableau

1.2 présente un extrait du rapport de fiabilité brut généré automatiquement par le démon.

On peut facilement en extraire les durées de bon fonctionnement et de non fonctionnement

successives.

On constate que les durées de non fonctionnement de la machine sont, d’une part

négligeables par rapport aux durées de bon fonctionnement, et d’autre part difficilement

Publicité

exploitables : on a une valeur a...